From cc32b0459d1ff7c9551cae37a852b99d0e13e310 Mon Sep 17 00:00:00 2001
From: Edward Betts
Date: Sun, 24 Sep 2023 22:19:09 +0100
Subject: [PATCH 1/3] Add admin mode
---
main.py | 22 +++++++++++++++++++++-
templates/login.html | 16 ++++++++++++++++
templates/person.html | 2 +-
3 files changed, 38 insertions(+), 2 deletions(-)
create mode 100644 templates/login.html
diff --git a/main.py b/main.py
index 7751551..abeffd0 100755
--- a/main.py
+++ b/main.py
@@ -59,7 +59,7 @@ def drop_start(s: str, start: str) -> str:
@app.route("/person/", methods=["GET", "POST"])
def person(person_id: int) -> str | Response:
item = model.Person.query.get(person_id)
- if flask.request.method == "POST":
+ if flask.request.method == "POST" and check_admin_mode():
qid = flask.request.form["wikidata_qid"] or None
item.name = flask.request.form["name"]
@@ -115,6 +115,7 @@ def person(person_id: int) -> str | Response:
Event=model.Event,
plural=plural,
wikidata_hits=wikidata_hits,
+ is_admin=check_admin_mode,
)
@@ -405,6 +406,25 @@ def person_image_filename(person_id: int) -> str:
return os.path.join("wikidata_photo", "thumb", person.wikidata_photo[0])
+@app.route("/login", methods=["GET", "POST"])
+def login() -> str | Response:
+ """Login page."""
+ if flask.request.method == "GET":
+ return flask.render_template("login.html")
+ password = flask.request.form["password"]
+ if password != app.config["ADMIN_PASSWORD"]:
+ endpoint = flask.endpoint
+ return flask.redirect(endpoint)
+
+ flask.session["admin_password"] = password
+ return flask.redirect(flask.url_for("index"))
+
+
+def check_admin_mode() -> bool:
+ """User is an admin."""
+ return bool(flask.session.get("admin_password") == app.config["ADMIN_PASSWORD"])
+
+
@app.route("/github_wikidata")
def github_wikidata() -> str:
"""Look for speakers on Wikidata based on the GitHub property."""
diff --git a/templates/login.html b/templates/login.html
new file mode 100644
index 0000000..efcd454
--- /dev/null
+++ b/templates/login.html
@@ -0,0 +1,16 @@
+{% extends "base.html" %}
+
+{% block title %}Conference archive{% endblock %}
+
+ {% block content %}
+ Conference archive
+
+ Admin login.
+
+
+
+{% endblock %}
diff --git a/templates/person.html b/templates/person.html
index d37ddde..786998d 100644
--- a/templates/person.html
+++ b/templates/person.html
@@ -45,7 +45,7 @@
{% endif %}
- {% if config.ADMIN_MODE %}
+ {% if is_admin() %}
{% set search_for = item.name + ' ' + " haswbstatement:P31=Q5" %}
Search for {{ item.name }} on Wikidata
From b36ff3a9c118c9058e5644c45ed110e5d3e7c45f Mon Sep 17 00:00:00 2001
From: Edward Betts
Date: Mon, 25 Sep 2023 12:58:28 +0100
Subject: [PATCH 2/3] Reorder people on Github Wikidata report.
---
main.py | 2 ++
1 file changed, 2 insertions(+)
diff --git a/main.py b/main.py
index abeffd0..de9dacb 100755
--- a/main.py
+++ b/main.py
@@ -436,6 +436,8 @@ def github_wikidata() -> str:
continue
items.append((person, qid, wd_name, photo))
+ items.sort(key=lambda i: len(i[0].name))
+
return flask.render_template("github.html", items=items)
From 08a4ffa89f2b144c8c12a46fd61f1083fd9977a5 Mon Sep 17 00:00:00 2001
From: Edward Betts
Date: Mon, 25 Sep 2023 13:05:12 +0100
Subject: [PATCH 3/3] Web UI to edit conference title
Resolves: #3
---
main.py | 20 +++++++++++++++++---
templates/conference.html | 15 +++++++++++++++
2 files changed, 32 insertions(+), 3 deletions(-)
diff --git a/main.py b/main.py
index de9dacb..c85ec45 100755
--- a/main.py
+++ b/main.py
@@ -125,13 +125,27 @@ def event_page(event_id: int) -> str:
return flask.render_template("event.html", item=item)
-@app.route("/conference/")
-def conference_page(short_name: str) -> str:
+@app.route("/conference/", methods=["GET", "POST"])
+def conference_page(short_name: str) -> str | Response:
item = model.Conference.query.filter_by(short_name=short_name).one_or_none()
if item is None:
flask.abort(404)
+
+ if flask.request.method == "POST" and check_admin_mode():
+ item.short_name = flask.request.form["short_name"]
+ item.title = flask.request.form["title"]
+ database.session.commit()
+
+ assert flask.request.endpoint
+ return flask.redirect(
+ flask.url_for(flask.request.endpoint, short_name=item.short_name)
+ )
+
return flask.render_template(
- "conference.html", item=item, person_image_filename=person_image_filename
+ "conference.html",
+ item=item,
+ person_image_filename=person_image_filename,
+ is_admin=check_admin_mode,
)
diff --git a/templates/conference.html b/templates/conference.html
index 56fc448..3c58ea6 100644
--- a/templates/conference.html
+++ b/templates/conference.html
@@ -86,6 +86,21 @@
+ {% if is_admin() %}
+
+ {% endif %}
+
Talks
{{ item.events.count() }} talks