1
Fork 0
mirror of https://github.com/RYGhub/royalnet.git synced 2024-11-23 19:44:20 +00:00

Working wiki edits

This commit is contained in:
Steffo 2019-06-20 19:23:44 +02:00
parent fb0f3d9395
commit d4991576c9

View file

@ -2,6 +2,8 @@
import flask as f import flask as f
import uuid import uuid
import os import os
import datetime
import difflib
from ... import Royalprint from ... import Royalprint
from ....database.tables import Royal, WikiPage, WikiRevision from ....database.tables import Royal, WikiPage, WikiRevision
@ -14,6 +16,9 @@ rp = Royalprint("wikiedit", __name__, url_prefix="/wikiedit", template_folder=tm
@rp.route("/<uuid:page_id>", defaults={"title": ""}, methods=["GET", "POST"]) @rp.route("/<uuid:page_id>", defaults={"title": ""}, methods=["GET", "POST"])
@rp.route("/<uuid:page_id>/<title>", methods=["GET", "POST"]) @rp.route("/<uuid:page_id>/<title>", methods=["GET", "POST"])
def wikiedit_by_id(page_id: uuid.UUID, title: str): def wikiedit_by_id(page_id: uuid.UUID, title: str):
if "royal" not in f.session:
return "Please login to edit wiki pages", 403
alchemy, alchemy_session = f.current_app.config["ALCHEMY"], f.current_app.config["ALCHEMY_SESSION"] alchemy, alchemy_session = f.current_app.config["ALCHEMY"], f.current_app.config["ALCHEMY_SESSION"]
page = alchemy_session.query(alchemy.WikiPage).filter(alchemy.WikiPage.page_id == page_id).one_or_none() page = alchemy_session.query(alchemy.WikiPage).filter(alchemy.WikiPage.page_id == page_id).one_or_none()
if page is None: if page is None:
@ -23,4 +28,24 @@ def wikiedit_by_id(page_id: uuid.UUID, title: str):
return f.render_template("wikiedit_page.html", page=page) return f.render_template("wikiedit_page.html", page=page)
elif f.request.method == "POST": elif f.request.method == "POST":
return "" fd = f.request.form
if "content" not in fd:
return "Missing page content", 400
# Create new revision
revision = alchemy.WikiRevision(revision_id=uuid.uuid4(),
page_id=page.page_id,
author_id=f.session["royal"]["uid"],
timestamp=datetime.datetime.now(),
reason=fd.get("reason"),
diff="\n".join(difflib.unified_diff(page.content.split("\n"), fd["content"].split("\n"))))
alchemy_session.add(revision)
# Apply changes
page.content = fd["content"]
if "title" in fd:
page.title = fd["title"]
if "format" in fd:
page.format = fd["format"]
if "css" in fd:
page.css = fd["css"] if fd["css"] != "None" else None
alchemy_session.commit()
return f.redirect(f.url_for("wikiview.wikiview_by_id", page_id=page.page_id, title=page.title))