Commit 7315bd3e authored by jan.koester's avatar jan.koester
Browse files

test

parent ddf9a79d
Loading
Loading
Loading
Loading
+67 −5
Original line number Diff line number Diff line
@@ -79,6 +79,7 @@ namespace blogi {
                <<   "name character varying(255) NOT NULL,"
                <<   "url character varying(255) NOT NULL,"
                <<   "type integer default 0,"
                <<   "position integer default 0,"
                <<   "navbar_id " << Args->database[0]->getUUIDType(sql) << ","
                <<   "FOREIGN KEY (navbar_id) REFERENCES navbar (id)"
                << ");";
@@ -105,7 +106,7 @@ namespace blogi {
                libhtmlpp::HtmlString buf;
                buf << "<ul>";

                sql2 << "select url,name,type from navbar_items WHERE navbar_id='" << res[i][0] << "' ORDER BY id";
                sql2 << "select url,name,type from navbar_items WHERE navbar_id='" << res[i][0] << "' ORDER BY position,id";

                int n2 = Args->database[tid]->exec(sql2,res2);
                for (int ii = 0; ii < n2; ii++) {
@@ -203,6 +204,7 @@ namespace blogi {
            std::vector<char> sbuf;

            std::string navname,container_id,newitem_name,newitem_url,newitem_type;
            std::string moveup_itemid,movedown_itemid;

            libhttppp::HttpForm form;
            form.parse(req);
@@ -223,6 +225,10 @@ namespace blogi {
                    newitem_type=cdat.value;
                else if(cdat.key=="navitem_remove")
                    rem_itemid=atoi(cdat.value.c_str());
                else if(cdat.key=="navitem_moveup")
                    moveup_itemid=cdat.value;
                else if(cdat.key=="navitem_movedown")
                    movedown_itemid=cdat.value;
            }

            if(navid<0){
@@ -281,6 +287,40 @@ namespace blogi {
                sql.clear();
            }

            if(!moveup_itemid.empty()){
                sql << "SELECT id,position FROM navbar_items WHERE navbar_id='" << navid << "' ORDER BY position,id";
                int cnt = Args->database[tid]->exec(sql,res);
                sql.clear();
                for(int i=1; i<cnt; ++i){
                    if(moveup_itemid == res[i][0]){
                        dbpp::SQL swp; dbpp::DBResult swpr;
                        swp << "UPDATE navbar_items SET position=" << res[i][1] << " WHERE id='" << res[i-1][0] << "'";
                        Args->database[tid]->exec(swp,swpr);
                        swp.clear();
                        swp << "UPDATE navbar_items SET position=" << res[i-1][1] << " WHERE id='" << res[i][0] << "'";
                        Args->database[tid]->exec(swp,swpr);
                        break;
                    }
                }
            }

            if(!movedown_itemid.empty()){
                sql << "SELECT id,position FROM navbar_items WHERE navbar_id='" << navid << "' ORDER BY position,id";
                int cnt = Args->database[tid]->exec(sql,res);
                sql.clear();
                for(int i=0; i<cnt-1; ++i){
                    if(movedown_itemid == res[i][0]){
                        dbpp::SQL swp; dbpp::DBResult swpr;
                        swp << "UPDATE navbar_items SET position=" << res[i+1][1] << " WHERE id='" << res[i][0] << "'";
                        Args->database[tid]->exec(swp,swpr);
                        swp.clear();
                        swp << "UPDATE navbar_items SET position=" << res[i][1] << " WHERE id='" << res[i+1][0] << "'";
                        Args->database[tid]->exec(swp,swpr);
                        break;
                    }
                }
            }

            if(!navname.empty()){
                sql << "UPDATE navbar SET name='" << sql.escaped(sbuf,navname.c_str()) << "' WHERE id='" << navid << "'";
                Args->database[tid]->exec(sql,res);
@@ -297,9 +337,14 @@ namespace blogi {
            if(!newitem_name.empty() && !newitem_url.empty() && !newitem_type.empty()){
                uuid::uuid itemId;
                itemId.generate();
                sql << "INSERT INTO navbar_items (id,name,url,navbar_id,type) VALUES('"
                // Get max position for this navbar
                sql << "SELECT COALESCE(MAX(position),0)+1 FROM navbar_items WHERE navbar_id='" << navid << "'";
                Args->database[tid]->exec(sql,res);
                int newpos = atoi(res[0][0]);
                sql.clear();
                sql << "INSERT INTO navbar_items (id,name,url,navbar_id,type,position) VALUES('"
                    << itemId.c_str() << "','" << sql.escaped(sbuf,newitem_name.c_str()) << "','" << sql.escaped(sbuf,newitem_url.c_str())
                    << "','" << navid << "'," << newitem_type.c_str() <<")";
                    << "','" << navid << "'," << newitem_type.c_str() << "," << newpos << ")";
                Args->database[tid]->exec(sql,res);
                sql.clear();
            }
@@ -354,7 +399,7 @@ namespace blogi {
            json_object_object_add(jform, "fields", jfields);

            // Form table: existing items + new item row
            sql << "select id,name,url from navbar_items WHERE navbar_id='" << navid << "' ORDER BY id";
            sql << "select id,name,url from navbar_items WHERE navbar_id='" << navid << "' ORDER BY position,id";

            int n = Args->database[tid]->exec(sql,res);

@@ -413,8 +458,25 @@ namespace blogi {

                json_object_object_add(jrow, "fields", jrfields);

                // remove action
                // actions: move up, move down, remove
                json_object *jractions = json_object_new_array();

                if(i > 0){
                    json_object *jmoveup = json_object_new_object();
                    json_object_object_add(jmoveup, "label", json_object_new_string(tr(_lang,"up").c_str()));
                    std::string upUrl = Args->config->buildurl("settings/navbar/editnav?navid=") + std::to_string(navid) + "&navitem_moveup=" + std::string(res[i][0]);
                    json_object_object_add(jmoveup, "url", json_object_new_string(upUrl.c_str()));
                    json_object_array_add(jractions, jmoveup);
                }

                if(i < n-1){
                    json_object *jmovedown = json_object_new_object();
                    json_object_object_add(jmovedown, "label", json_object_new_string(tr(_lang,"down").c_str()));
                    std::string downUrl = Args->config->buildurl("settings/navbar/editnav?navid=") + std::to_string(navid) + "&navitem_movedown=" + std::string(res[i][0]);
                    json_object_object_add(jmovedown, "url", json_object_new_string(downUrl.c_str()));
                    json_object_array_add(jractions, jmovedown);
                }

                json_object *jremove = json_object_new_object();
                json_object_object_add(jremove, "label", json_object_new_string(tr(_lang,"remove").c_str()));
                std::string removeUrl = Args->config->buildurl("settings/navbar/editnav?navid=") + std::to_string(navid) + "&navitem_remove=" + std::string(res[i][0]);