HandlerPageEdit: Support for renaming and visibility settings

This commit is contained in:
Albert S. 2018-11-04 19:35:24 +01:00
parent beafde74d0
commit f3bb881b63
1 changed files with 27 additions and 12 deletions

View File

@ -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<Page> 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();