From d2cef14c38c6d8b7ec26b98c985d0f7d204f160f Mon Sep 17 00:00:00 2001 From: Mattia Succurro Date: Sun, 8 Jan 2023 17:59:52 +0100 Subject: [PATCH] Added edit comments, user contributions and improved history page --- app.py | 43 +++++++++++++++++++++++------------- i18n/salvi.en.json | 4 +++- i18n/salvi.it.json | 3 ++- templates/contributions.html | 30 +++++++++++++++++++++++++ templates/edit.html | 2 ++ templates/history.html | 21 +++++++++++++----- 6 files changed, 80 insertions(+), 23 deletions(-) create mode 100644 templates/contributions.html diff --git a/app.py b/app.py index aadc83e..72c3efb 100644 --- a/app.py +++ b/app.py @@ -21,8 +21,8 @@ from werkzeug.security import generate_password_hash, check_password_hash from werkzeug.routing import BaseConverter from peewee import * from playhouse.db_url import connect as dbconnect -import csv, datetime, hashlib, html, importlib, json, markdown, os, random, \ - re, sys, uuid, warnings +import datetime, hashlib, html, importlib, json, markdown, os, random, \ + re, sys, warnings from functools import lru_cache, partial from urllib.parse import quote from configparser import ConfigParser @@ -250,7 +250,7 @@ class PageText(BaseModel): class PageRevision(BaseModel): page = FK(Page, backref='revisions', index=True) - user = ForeignKeyField(User, null=True) + user = ForeignKeyField(User, backref='contributions', null=True) comment = CharField(1024, default='') textref = FK(PageText) pub_date = DateTimeField(index=True) @@ -439,7 +439,7 @@ forbidden_urls = [ 'create', 'edit', 'p', 'ajax', 'history', 'manage', 'static', 'media', 'accounts', 'tags', 'init-config', 'upload', 'upload-info', 'about', 'stats', 'terms', 'privacy', 'easter', 'search', 'help', 'circles', - 'protect', 'kt', 'embed', 'backlinks' + 'protect', 'kt', 'embed', 'backlinks', 'u' ] app = Flask(__name__) @@ -541,6 +541,7 @@ def savepoint(form, is_preview=False, pageobj=None): pl_title=form['title'], pl_text=form['text'], pl_tags=form['tags'], + pl_comment=form['comment'], pl_enablemath='enablemath' in form, pl_is_locked='lockpage' in form, pl_owner_is_current_user=pageobj.is_owned_by(current_user) if pageobj else True, @@ -596,7 +597,8 @@ def create(): "url": request.args.get("url"), "title": "", "text": "", - "tags": "" + "tags": "", + "comment": get_string(g.lang, "page-created") }) @app.route('/edit//', methods=['GET', 'POST']) @@ -632,22 +634,24 @@ def edit(id): p.is_locked = 'lockpage' in request.form p.save() p.change_tags(p_tags) - pr = PageRevision.create( - page=p, - user_id=current_user.id, - comment='', - textref=PageText.create_content(request.form['text']), - pub_date=datetime.datetime.now(), - length=len(request.form['text']) - ) - PageLink.parse_links(p, request.form['text']) + if request.form['text'] != p.latest.text: + pr = PageRevision.create( + page=p, + user_id=current_user.id, + comment=request.form["comment"], + textref=PageText.create_content(request.form['text']), + pub_date=datetime.datetime.now(), + length=len(request.form['text']) + ) + PageLink.parse_links(p, request.form['text']) return redirect(p.get_url()) form = { "url": p.url, "title": p.title, "text": p.latest.text, - "tags": ','.join(x.name for x in p.tags) + "tags": ','.join(x.name for x in p.tags), + "comment": "" } if p.is_math_enabled: form["enablemath"] = "1" @@ -766,6 +770,15 @@ def history(id): abort(404) return render_template('history.html', p=p, history=p.revisions.order_by(PageRevision.pub_date.desc())) +@app.route('/u//') +def contributions(username): + try: + user = User.get(User.username == username) + except User.DoesNotExist: + abort(404) + return render_template('contributions.html', u=user, contributions=user.contributions.order_by(PageRevision.pub_date.desc())) + + @app.route('/history/revision//') def view_old(revisionid): try: diff --git a/i18n/salvi.en.json b/i18n/salvi.en.json index 2640b81..5fb2b7c 100644 --- a/i18n/salvi.en.json +++ b/i18n/salvi.en.json @@ -55,6 +55,8 @@ "already-have-account": "Already have an account?", "logged-in-as": "Logged in as", "not-logged-in": "Not logged in", - "owner": "Owner" + "owner": "Owner", + "page-created": "Page created", + "write-a-comment": "Write a comment…" } } \ No newline at end of file diff --git a/i18n/salvi.it.json b/i18n/salvi.it.json index 6f7614e..e5b5783 100644 --- a/i18n/salvi.it.json +++ b/i18n/salvi.it.json @@ -46,6 +46,7 @@ "revision-count": "Numero di revisioni", "revision-count-per-page": "Media di revisioni per pagina", "remember-me-for": "Ricordami per", - "owner": "Proprietario" + "owner": "Proprietario", + "write-a-comment": "Scrivi un commento…" } } \ No newline at end of file diff --git a/templates/contributions.html b/templates/contributions.html new file mode 100644 index 0000000..f94509f --- /dev/null +++ b/templates/contributions.html @@ -0,0 +1,30 @@ +{% extends "base.html" %} + +{% block title %}Contributions of {{ u.username }} - {{ app_name }}{% endblock %} + +{% block meta %} + +{% endblock %} + +{% block content %} +

Contributions of {{ u.username }} + + +{% endblock %} diff --git a/templates/edit.html b/templates/edit.html index 0439228..791bef8 100644 --- a/templates/edit.html +++ b/templates/edit.html @@ -64,6 +64,7 @@
+

Advanced options

@@ -78,6 +79,7 @@ {% endif %} {% endif %} + {% endblock %} {% block scripts %} diff --git a/templates/history.html b/templates/history.html index 1ef859c..8760ec4 100644 --- a/templates/history.html +++ b/templates/history.html @@ -12,13 +12,22 @@ + +

{{ T("back-to") }} {{ p.title }}.

{% endblock %}