From f3bb881b63f4f9c6aa8a462a511e4ddee9778220 Mon Sep 17 00:00:00 2001 From: Albert S Date: Sun, 4 Nov 2018 19:35:24 +0100 Subject: [PATCH] HandlerPageEdit: Support for renaming and visibility settings --- handlers/handlerpageedit.cpp | 39 +++++++++++++++++++++++++----------- 1 file changed, 27 insertions(+), 12 deletions(-) diff --git a/handlers/handlerpageedit.cpp b/handlers/handlerpageedit.cpp index 9f606dd..af65783 100644 --- a/handlers/handlerpageedit.cpp +++ b/handlers/handlerpageedit.cpp @@ -44,9 +44,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") { @@ -55,12 +57,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 Parser parser; @@ -68,14 +64,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();