Commit 4fb3da49 authored by jan.koester's avatar jan.koester
Browse files

staticpage edit support added

parent a4b6ca0f
Loading
Loading
Loading
Loading

plugins/staticpage/settings.cpp

deleted100644 → 0
+0 −1
Changes for plugins/staticpage/settings.cpp: 0 added lines, 1 removed line.
Original line number Diff line number Diff line
+134 −3
Changes for plugins/staticpage/static.cpp: 134 added lines, 3 removed lines.
Original line number Diff line number Diff line
@@ -43,14 +43,145 @@ blogi::StaticPage::~StaticPage(){
void blogi::StaticPage::initPlugin(){
}

bool blogi::StaticPage::haveSettings(){
    return true;
}

void blogi::StaticPage::Settings(libhttppp::HttpRequest* req, libhtmlpp::HtmlString& setdiv){
    char url[512];
    std::string surl,curl=req->getRequestURL();
    size_t urlen = curl.length();
    size_t prelen = strlen(Args->config->buildurl("settings/staticpage/",url,512));
    if(prelen < urlen){
        size_t send=0,sublen=urlen-prelen;

        for(size_t i =0; i<=sublen; ++i){
            switch(curl[prelen+i]){
                case '\0':
                    send=i;
                    goto SENDFIND;
                case '/':
                    send=i;
                    goto SENDFIND;
                default:
                    continue;
            }
        }
        goto SETTINGSINDEX;
SENDFIND:
        surl=curl.substr(prelen,send);

        std::cout << surl << std::endl;

        if(surl=="newpage"){
            newPage(req,setdiv);
            return;
        }else if(surl=="delpage"){
            delPage(req,setdiv);
            return;
        }else if(surl=="editpage"){
            editPage(req,setdiv);
            return;
        }

    }
SETTINGSINDEX:
    blogi::SQL sql;
    blogi::DBResult res;

    sql << "select id,url from static_content";

    int scount=Args->database->exec(&sql,res);

    setdiv << "<div id=\"staticsettings\"><span>Statische Seiten</span><table>";
    setdiv << "<tr><th>ID</th><th>URL</th><th>Options</th></tr>";
    for(int i=0; i<scount; ++i){
        setdiv << "<tr><td>" << res[i][0] << "</td><td>"<< Args->config->buildurl("staticpage/",url,512) << res[i][1]
               << "</td>" << "<td><a href=\"" << Args->config->buildurl("settings/staticpage/editpage?id=",url,512) << res[i][0] << "\">Edit</a></td>"
               << "<td><a href=\"" << Args->config->buildurl("settings/staticpage/delpage?id=",url,512) << res[i][0] << "\">Remove</a></td>" <<"</tr>";
    }
    setdiv << "</table><a href=\"" << Args->config->buildurl("settings/staticpage/newpage",url,512) << "\" >Neue Seite Erstellen</a></div>";
}

void blogi::StaticPage::newPage(libhttppp::HttpRequest* req, libhtmlpp::HtmlString& setdiv){
    setdiv << "<div id=\"staticsettings\">"
           << "<span>Statische Seiten</span>"
           << "<span>Neue Seite</span>"
           << "</div>";
}

void blogi::StaticPage::delPage(libhttppp::HttpRequest* req, libhtmlpp::HtmlString& setdiv){
}

void blogi::StaticPage::editPage(libhttppp::HttpRequest* req, libhtmlpp::HtmlString& setdiv){
    char url[512];
    int id=-1;
    blogi::SQL sql;
    blogi::DBResult res;

    libhttppp::HttpForm form;
    form.parse(req);

    for(libhttppp::HttpForm::UrlcodedFormData *cdat=form.getUrlcodedFormData(); cdat; cdat=cdat->nextUrlcodedFormData()){
        if(strcmp(cdat->getKey(),"id")==0)
            id=atoi(cdat->getValue());
    }

    if(id<0){
        return;
    }

    libhttppp::HttpForm::MultipartFormData *cdat=form.getMultipartFormData();

    sql.clear();

    for (libhttppp::HttpForm::MultipartFormData* curformdat = form.getMultipartFormData(); curformdat; curformdat = curformdat->nextMultipartFormData()) {
        libhttppp::HttpForm::MultipartFormData::ContentDisposition* curctdisp = curformdat->getContentDisposition();
        if(strcmp(curctdisp->getName(),"url")==0){
            sql<< "update static_content set url='"; sql << curformdat->getData(); sql << "' where id='" << id <<"'; ";
        }else if(strcmp(curctdisp->getName(),"meta")==0){
            sql<< "update static_content set meta='"; sql << curformdat->getData(); sql << "' where id='" << id <<"'; ";
        }else if(strcmp(curctdisp->getName(),"text")==0){
            sql<< "update static_content set text='"; sql << curformdat->getData(); sql << "' where id='" << id <<"': ";
        }
    }

    if(!sql.empty()){
        Args->database->exec(&sql,res);
        sql.clear();
    }

    sql << "select id,url,meta,text from static_content where id='"; sql << id << "' LIMIT 1";

    if(Args->database->exec(&sql,res)<1){
        return;
    }

    setdiv << "<div id=\"staticsettings\">"
           << "<span>Statische Seiten</span>"
           << "<span>Seite Editieren</span>"
           << "<form>"
           << "<span>Url:</span><br>"
           << "<input name=\"url\" type=\"text\" value=\"" << res[0][1] << "\" /><br>"
           << "<span>Meta:</span><br>"
           << "<textarea name=\"meta\" style=\"width:95%; height:200px;\">"<< res[0][2] <<"</textarea><br>"
           << "<span>Content:</span><br>"
           << "<textarea name=\"text\" style=\"width:95%; min-height:800px;\">"<< res[0][3] <<"</textarea><br>"
           << "<button type=\"submit\" formaction=\"" << Args->config->buildurl("settings/staticpage",url,512) << "\">Back</button>"
           << "<input type=\"submit\" value=\"Save\">"
           << "</form></div>";
}

void blogi::StaticPage::uploadPage(libhttppp::HttpRequest* req, libhtmlpp::HtmlString& setdiv){
}



bool blogi::StaticPage::Controller(netplus::con *curcon,libhttppp::HttpRequest *req){
    char url[512];
    if (strncmp(req->getRequestURL(),Args->config->buildurl("staticpage",url,512),strlen(Args->config->buildurl("staticpage",url,512)))==0){
        std::string surl=req->getRequestURL()+strlen(Args->config->buildurl("staticpage/",url,512));
	if(surl.rfind('?')>0){
            surl=surl.substr(0,surl.rfind('?'));
	}

        if(strstr(req->getRequestURL(),"robots.txt")){
               const char *robot = "User-agent: Googlebot\r\n\r\nUser-agent: *\r\nAllow: /";
               libhttppp::HttpResponse resp;
+8 −0
Changes for plugins/staticpage/static.h: 8 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -40,8 +40,16 @@ namespace blogi {
        const char* getAuthor();

        void initPlugin();
        bool haveSettings();

        bool Controller(netplus::con *curcon,libhttppp::HttpRequest *req);
        void Settings(libhttppp::HttpRequest * req, libhtmlpp::HtmlString & setdiv);
    private:
        void newPage(libhttppp::HttpRequest * req, libhtmlpp::HtmlString & setdiv);
        void delPage(libhttppp::HttpRequest * req, libhtmlpp::HtmlString & setdiv);
        void editPage(libhttppp::HttpRequest * req, libhtmlpp::HtmlString & setdiv);

        void uploadPage(libhttppp::HttpRequest * req, libhtmlpp::HtmlString & setdiv);
    };
};

+45 −0
Changes for src/blogi.cpp: 45 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -172,6 +172,48 @@ void blogi::Blogi::logoutPage(netplus::con *curcon,libhttppp::HttpRequest *curre
    curres.send(curcon,nullptr,0);
}

void blogi::Blogi::settingsPage(netplus::con* curcon, libhttppp::HttpRequest* curreq){
    libhttppp::HttpCookie cookie;
    cookie.parse(curreq);
    std::string sessid;

    if(!PlgArgs->auth->isLoggedIn(curreq,sessid)){
        libhttppp::HTTPException err;
        err[libhttppp::HTTPException::Error] << "you are not logged in permission denied";
        throw err;
    }

    std::string out;
    libhtmlpp::HtmlString setgui;
    char url[512];

    setgui << "<div id=\"settings\"><table><tr><td id=\"setnav\" ><ul>";
    for(blogi::Plugin::PluginData *curplg=BlogiPlg->getFirstPlugin(); curplg; curplg=curplg->getNextPlg()){
        if(curplg->getInstace()->haveSettings())
            setgui << "<li><a href=\"" << PlgArgs->config->buildurl("settings/",url,512) << curplg->getInstace()->getName()  << "\">"  << curplg->getInstace()->getName() << "</a></li>";
    }
    setgui << "</ul></td><td id=\"setcontent\">";

    int relen=strlen(PlgArgs->config->buildurl("settings/",url,512))-strlen(curreq->getRequestURL());
    if( relen < 0){
        for(blogi::Plugin::PluginData *curplg=BlogiPlg->getFirstPlugin(); curplg; curplg=curplg->getNextPlg()){
            if(strncmp(curreq->getRequestURL()+strlen(PlgArgs->config->buildurl("settings/",url,512)), curplg->getInstace()->getName(),
                strlen(curplg->getInstace()->getName()))==0)
                curplg->getInstace()->Settings(curreq,setgui);
        }
    }

    setgui << "</td></tr></table></div>";

    PlgArgs->theme->RenderSite(out,curreq->getRequestURL(),setgui,false);
    libhttppp::HttpResponse curres;
    curres.setState(HTTP200);
    curres.setVersion(HTTPVERSION(1.1));
    curres.setContentType("text/html");
    curres.send(curcon,out.c_str(),out.length());
}


void blogi::Blogi::RequestEvent(netplus::con *curcon){
    libhttppp::HttpRequest req;
    char url[512];
@@ -203,6 +245,9 @@ void blogi::Blogi::RequestEvent(netplus::con *curcon){
        }else if(strncmp(req.getRequestURL(),PlgArgs->config->buildurl("login",url,512),strlen(PlgArgs->config->buildurl("login",url,512)))==0){
            loginPage(curcon,&req);
            return;
        }else if(strncmp(req.getRequestURL(),PlgArgs->config->buildurl("settings",url,512),strlen(PlgArgs->config->buildurl("settings",url,512)))==0){
            settingsPage(curcon,&req);
            return;
        }


+1 −0
Changes for src/blogi.h: 1 added line, 0 removed lines.
Original line number Diff line number Diff line
@@ -39,6 +39,7 @@ namespace blogi {
        ~Blogi();
        void loginPage(netplus::con*curcon,libhttppp::HttpRequest *curreq);
        void logoutPage(netplus::con *curcon,libhttppp::HttpRequest *curreq);
        void settingsPage(netplus::con *curcon,libhttppp::HttpRequest *curreq);
        void RequestEvent(netplus::con *curcon);
    private:
        Plugin         *BlogiPlg;
Loading