Loading plugins/navbar/navbar.cpp +67 −5 Original line number Diff line number Diff line Loading @@ -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)" << ");"; Loading @@ -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++) { Loading Loading @@ -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); Loading @@ -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){ Loading Loading @@ -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); Loading @@ -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(); } Loading Loading @@ -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); Loading Loading @@ -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]); Loading Loading
plugins/navbar/navbar.cpp +67 −5 Original line number Diff line number Diff line Loading @@ -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)" << ");"; Loading @@ -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++) { Loading Loading @@ -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); Loading @@ -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){ Loading Loading @@ -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); Loading @@ -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(); } Loading Loading @@ -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); Loading Loading @@ -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]); Loading