diff options
author | 2018-05-05 17:37:58 +0100 | |
---|---|---|
committer | 2018-05-05 17:37:58 +0100 | |
commit | 7fda7be72d9b9abaec92b799760b1acfaeffa232 (patch) | |
tree | 4b46afc189587a403396b5d71b8726da00a2702c /pysite | |
parent | Use Discord embed image for index page button (diff) | |
parent | Update README.md (diff) |
Merge remote-tracking branch 'origin/master'
Diffstat (limited to 'pysite')
-rw-r--r-- | pysite/database/table_init/hiphopify_namelist.json | 4 | ||||
-rw-r--r-- | pysite/views/wiki/delete.py | 67 | ||||
-rw-r--r-- | pysite/views/wiki/history/compare.py | 4 | ||||
-rw-r--r-- | pysite/views/wiki/special/__init__.py | 1 | ||||
-rw-r--r-- | pysite/views/wiki/special/all_pages.py | 27 | ||||
-rw-r--r-- | pysite/views/wiki/special/index.py | 10 |
6 files changed, 110 insertions, 3 deletions
diff --git a/pysite/database/table_init/hiphopify_namelist.json b/pysite/database/table_init/hiphopify_namelist.json index 28d6242a..6d90a4a2 100644 --- a/pysite/database/table_init/hiphopify_namelist.json +++ b/pysite/database/table_init/hiphopify_namelist.json @@ -1977,7 +1977,7 @@ }, { "name": "Isaiah Rashad", - "image_url": "http://www.rehabonlinemag.com/wp-content/uploads/2015/09/5854_12.jpg" + "image_url": "http://okp-cdn.okayplayer.com/wp-content/uploads/2014/06/xxl-freshman-2014-cypher-drama-cannon-lead.jpg" }, { "name": "Iyanya", @@ -2777,7 +2777,7 @@ }, { "name": "Lloyd Banks", - "image_url": "http://www.streetgangs.com/wp-content/uploads/2010/01/promoter2.jpg" + "image_url": "https://www.bet.com/music/2018/03/17/lloyd-banks/_jcr_content/image.large2x1image.dimg/__1521337827454__1521335807971/031718-music-lloyd-banks.jpg" }, { "name": "Locksmith", diff --git a/pysite/views/wiki/delete.py b/pysite/views/wiki/delete.py new file mode 100644 index 00000000..0e3bcbbf --- /dev/null +++ b/pysite/views/wiki/delete.py @@ -0,0 +1,67 @@ +import datetime + +import requests +from flask import redirect, url_for +from werkzeug.exceptions import NotFound + +from pysite.base_route import RouteView +from pysite.constants import EDITOR_ROLES, WIKI_AUDIT_WEBHOOK +from pysite.decorators import csrf, require_roles +from pysite.mixins import DBMixin + + +class EditView(RouteView, DBMixin): + path = "/delete/<path:page>" # "path" means that it accepts slashes + name = "delete" + table_name = "wiki" + revision_table_name = "wiki_revisions" + + @require_roles(*EDITOR_ROLES) + def get(self, page): + obj = self.db.get(self.table_name, page) + + if obj: + title = obj.get("title", "") + + if obj.get("lock_expiry") and obj.get("lock_user") != self.user_data.get("user_id"): + lock_time = datetime.datetime.fromtimestamp(obj["lock_expiry"]) + if datetime.datetime.utcnow() < lock_time: + return self.render("wiki/page_in_use.html", page=page) + + return self.render("wiki/page_delete.html", page=page, title=title) + else: + raise NotFound() + + @require_roles(*EDITOR_ROLES) + @csrf + def post(self, page): + obj = self.db.get(self.table_name, page) + + if not obj: + raise NotFound() + + self.db.delete(self.table_name, page) + self.db.delete(self.revision_table_name, page) + + self.audit_log(obj) + + return redirect(url_for("wiki.page", page="home"), code=303) # Redirect, ensuring a GET + + def audit_log(self, obj): + if WIKI_AUDIT_WEBHOOK: # If the audit webhook is not configured there is no point processing it + audit_payload = { + "username": "Wiki Updates", + "embeds": [ + { + "title": "Page Deletion", + "description": f"**{obj['title']}** was deleted by **{self.user_data.get('username')}**", + "color": 4165079, + "timestamp": datetime.datetime.utcnow().isoformat(), + "thumbnail": { + "url": "https://pythondiscord.com/static/logos/logo_discord.png" + } + } + ] + } + + requests.post(WIKI_AUDIT_WEBHOOK, json=audit_payload) diff --git a/pysite/views/wiki/history/compare.py b/pysite/views/wiki/history/compare.py index 6296f734..6411ab30 100644 --- a/pysite/views/wiki/history/compare.py +++ b/pysite/views/wiki/history/compare.py @@ -50,7 +50,9 @@ class CompareView(RouteView, DBMixin): diff = highlight(diff, DiffLexer(), HtmlFormatter()) return self.render("wiki/compare_revision.html", title=after["post"]["title"], - diff=diff, slug=before["slug"], + page=before["slug"], + diff=diff, + slug=before["slug"], can_edit=self.is_staff()) def is_staff(self): diff --git a/pysite/views/wiki/special/__init__.py b/pysite/views/wiki/special/__init__.py new file mode 100644 index 00000000..9bad5790 --- /dev/null +++ b/pysite/views/wiki/special/__init__.py @@ -0,0 +1 @@ +# coding=utf-8 diff --git a/pysite/views/wiki/special/all_pages.py b/pysite/views/wiki/special/all_pages.py new file mode 100644 index 00000000..d2e02a72 --- /dev/null +++ b/pysite/views/wiki/special/all_pages.py @@ -0,0 +1,27 @@ +from pysite.base_route import RouteView +from pysite.mixins import DBMixin + + +class PageView(RouteView, DBMixin): + path = "/special/all_pages" + name = "special.all_pages" + table_name = "wiki" + + def get(self): + pages = self.db.pluck(self.table_name, "title", "slug") + pages = sorted(pages, key=lambda d: d.get("title", "No Title")) + + letters = {} + + for page in pages: + if "title" not in page: + page["title"] = "No Title" + + letter = page["title"][0].upper() + + if letter not in letters: + letters[letter] = [] + + letters[letter].append(page) + + return self.render("wiki/special_all.html", letters=letters) diff --git a/pysite/views/wiki/special/index.py b/pysite/views/wiki/special/index.py new file mode 100644 index 00000000..15c0a649 --- /dev/null +++ b/pysite/views/wiki/special/index.py @@ -0,0 +1,10 @@ +from pysite.base_route import RouteView +from pysite.mixins import DBMixin + + +class PageView(RouteView, DBMixin): + path = "/special" + name = "special" + + def get(self): + return self.render("wiki/special.html") |