diff --git a/handlers/handlerpageedit.cpp b/handlers/handlerpageedit.cpp index 8d564a1..07b7b07 100644 --- a/handlers/handlerpageedit.cpp +++ b/handlers/handlerpageedit.cpp @@ -45,9 +45,11 @@ Response HandlerPageEdit::handleRequest(PageDao &pageDao, std::string pagename, auto revision = this->database->createRevisionDao()->getCurrentForPage(pagename); std::string body; + unsigned int current_revision = 0; if(revision) { body = revision->content; + current_revision = revision->revision; } if(r.getRequestMethod() == "POST") { @@ -56,12 +58,6 @@ Response HandlerPageEdit::handleRequest(PageDao &pageDao, std::string pagename, std::string newContent = r.post("content"); std::string newComment = r.post("comment"); - Revision newRevision; - newRevision.author = this->userSession->user.login; - newRevision.comment = newComment; - newRevision.page = pagename; - newRevision.content = newContent; - //TODO: must check, whether categories differ, and perhaps don't allow every user //to set categories @@ -70,15 +66,33 @@ Response HandlerPageEdit::handleRequest(PageDao &pageDao, std::string pagename, try { this->database->beginTransaction(); - if(!pageexists) + std::string visiblecmd = parser.extractCommand("visible", newContent); + std::string rename = parser.extractCommand("rename", newContent); + Page page; + std::optional currentPage = pageDao.find(pagename); + if(currentPage) { - Page newPage; - newPage.current_revision = 0; - newPage.listed = true; - newPage.name = pagename; - pageDao.save(newPage); - + page = *currentPage; } + if(rename != "") + { + if(newComment == "") + { + newComment = "(renamed) from " + pagename + " to " + rename; + } + pagename = rename; + } + page.current_revision = current_revision; + page.listed = ! (visiblecmd == "0"); + page.name = pagename; + pageDao.save(page); + + Revision newRevision; + newRevision.author = this->userSession->user.login; + newRevision.comment = newComment; + newRevision.page = pagename; + newRevision.content = newContent; + revisiondao->save(newRevision); pageDao.setCategories(pagename, cats); this->database->commitTransaction();