From 0b342a0575d5020eb5b1fdc513d088ad22040d10 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sat, 1 Sep 2018 15:20:08 +0100 Subject: [PATCH] blog: Add drafts section Signed-off-by: Michael Tremer --- Makefile.am | 1 + src/backend/blog.py | 12 ++++++++++++ src/templates/blog/drafts.html | 33 +++++++++++++++++++++++++++++++++ src/web/__init__.py | 1 + src/web/blog.py | 8 ++++++++ 5 files changed, 55 insertions(+) create mode 100644 src/templates/blog/drafts.html diff --git a/Makefile.am b/Makefile.am index 6ebd321c..3d1ce5a0 100644 --- a/Makefile.am +++ b/Makefile.am @@ -113,6 +113,7 @@ templates_blog_DATA = \ src/templates/blog/author.html \ src/templates/blog/base.html \ src/templates/blog/compose.html \ + src/templates/blog/drafts.html \ src/templates/blog/feed.xml \ src/templates/blog/index.html \ src/templates/blog/post.html \ diff --git a/src/backend/blog.py b/src/backend/blog.py index fc1f0dc7..89a8d5e9 100644 --- a/src/backend/blog.py +++ b/src/backend/blog.py @@ -57,6 +57,18 @@ class Blog(misc.Object): AND published_at <= NOW() \ ORDER BY published_at DESC", year) + def get_drafts(self, author=None, limit=None): + if author: + return self._get_posts("SELECT * FROM blog \ + WHERE author_uid = %s \ + AND (published_at IS NULL OR published_at > NOW()) \ + ORDER BY COALESCE(updated_at, created_at) DESC LIMIT %s", + author.uid, limit) + + return self._get_posts("SELECT * FROM blog \ + WHERE (published_at IS NULL OR published_at > NOW()) \ + ORDER BY COALESCE(updated_at, created_at) DESC LIMIT %s", limit) + def search(self, query, limit=None): return self._get_posts("SELECT blog.* FROM blog \ LEFT JOIN blog_search_index search_index ON blog.id = search_index.post_id \ diff --git a/src/templates/blog/drafts.html b/src/templates/blog/drafts.html new file mode 100644 index 00000000..fa8e4ab7 --- /dev/null +++ b/src/templates/blog/drafts.html @@ -0,0 +1,33 @@ +{% extends "base.html" %} + +{% block title %}{{ _("My Drafts") }}{% end block %} + +{% block main %} +
+
+
{{ _("My Drafts") }}
+ + {% if drafts %} + {% for post in drafts %} + + {{ post.title }} + + +

+ {% if post.updated_at %} + {{ _("Updated %s") % locale.format_date(post.updated_at) }} + {% else %} + {{ _("Created %s") % locale.format_date(post.created_at) }} + {% end %} + + {% if post.published_at %} + + {{ _("Scheduled to be pushed at %s") % locale.format_date(post.published_at, shorter=True, relative=False) }} + + {% end %} +

+ {% end %} + {% end %} +
+
+{% end block %} diff --git a/src/web/__init__.py b/src/web/__init__.py index 9e30f4f5..7a7ca6f4 100644 --- a/src/web/__init__.py +++ b/src/web/__init__.py @@ -125,6 +125,7 @@ class Application(tornado.web.Application): (r"/", blog.IndexHandler), (r"/authors/(\w+)", blog.AuthorHandler), (r"/compose", blog.ComposeHandler), + (r"/drafts", blog.DraftsHandler), (r"/post/([0-9a-z\-\.]+)", blog.PostHandler), (r"/post/([0-9a-z\-\.]+)/edit", blog.EditHandler), (r"/search", blog.SearchHandler), diff --git a/src/web/blog.py b/src/web/blog.py index a6b7224b..679ac047 100644 --- a/src/web/blog.py +++ b/src/web/blog.py @@ -60,6 +60,14 @@ class PostHandler(base.BaseHandler): self.render("blog/post.html", post=post) +class DraftsHandler(base.BaseHandler): + @tornado.web.authenticated + def get(self): + drafts = self.backend.blog.get_drafts(author=self.current_user) + + self.render("blog/drafts.html", drafts=drafts) + + class SearchHandler(base.BaseHandler): def get(self): q = self.get_argument("q") -- 2.39.2