]> git.ipfire.org Git - ipfire.org.git/commitdiff
blog: Use one simple update function to update posts
authorMichael Tremer <michael.tremer@ipfire.org>
Sat, 1 Sep 2018 15:07:15 +0000 (16:07 +0100)
committerMichael Tremer <michael.tremer@ipfire.org>
Sat, 1 Sep 2018 15:07:15 +0000 (16:07 +0100)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/backend/blog.py
src/templates/blog/compose.html
src/web/blog.py

index 3a0e2e098d45264522fdfe62da3853486625025c..169a40d8c89419e433c714d67a3f007a08b4d8d3 100644 (file)
@@ -194,20 +194,10 @@ class Post(misc.Object):
 
        # Title
 
-       def get_title(self):
+       @property
+       def title(self):
                return self.data.title
 
-       def set_title(self, title):
-               self.db.execute("UPDATE blog SET title = %s \
-                       WHERE id = %s", title, self.id)
-
-               # Update slug if post is not published, yet
-               if not self.is_published():
-                       self.db.execute("UPDATE blog SET slug = %s \
-                               WHERE id = %s", self.backend.blog._make_slug(title), self.id)
-
-       title = property(get_title, set_title)
-
        @property
        def slug(self):
                return self.data.slug
@@ -252,24 +242,12 @@ class Post(misc.Object):
        def updated_at(self):
                return self.data.updated_at
 
-       def updated(self):
-               self.db.execute("UPDATE blog SET updated_at = NOW() \
-                       WHERE id = %s", self.id)
-
-               # Update search indices
-               self.backend.blog.refresh()
-
        # Text
 
-       def get_text(self):
+       @property
+       def text(self):
                return self.data.text
 
-       def set_text(self, text):
-               self.db.execute("UPDATE blog SET text = %s \
-                       WHERE id = %s", text, self.id)
-
-       text = property(get_text, set_text)
-
        # HTML
 
        @property
@@ -281,14 +259,11 @@ class Post(misc.Object):
 
        # Tags
 
-       def get_tags(self):
+       @property
+       def tags(self):
                return self.data.tags
 
-       def set_tags(self, tags):
-               self.db.execute("UPDATE blog SET tags = %s \
-                       WHERE id = %s", list(tags), self.id)
-
-       tags = property(get_tags, set_tags)
+       # Link
 
        @property
        def link(self):
@@ -303,3 +278,28 @@ class Post(misc.Object):
        def is_editable(self, editor):
                # Authors can edit their own posts
                return self.author == editor
+
+       def update(self, title, text, tags=[]):
+               """
+                       Called to update the content of this post
+               """
+               # Update slug when post isn't published yet
+               slug = self.slug if self.is_published() else self.backend.blog._make_slug(title)
+
+               # XXX render HTML
+
+               self.db.execute("UPDATE blog SET title = %s, slug = %s, text = %s, \
+                       tags = %s, updated_at = CURRENT_TIMESTAMP WHERE id = %s",
+                       title, slug, text, list(tags), self.id)
+
+               # Update cache
+               self.data.update({
+                       "title" : title,
+                       "slug"  : slug,
+                       "text"  : text,
+                       "tags"  : tags,
+               })
+
+               # Update search index if post is published
+               if self.is_published():
+                       self.backend.blog.refresh()
index fdfec359c2719f6cf961ecb69602a38f8cc5fb2d..481886de2d17494dffbcb21facd42bb27f4926e2 100644 (file)
@@ -21,8 +21,8 @@
                                <div class="form-group row">
                                        <label class="col-sm-2 col-form-label">{{ _("Tags") }}</label>
                                        <div class="col-sm-10">
-                                               <input type="text" class="form-control" name="tags" placeholder="{{ _("(Comma-sepated list)") }}"
-                                                       {% if post %}value="{{ ", ".join(post.tags) }}"{% end %}>
+                                               <input type="text" class="form-control" name="tags"
+                                                       {% if post %}value="{{ " ".join(post.tags) }}"{% end %}>
                                        </div>
                                </div>
 
index 59168af13faf5f1662dec96f24ef5be2ed044d7b..ca76a5a2b605fdecc03ab1ec469c3c772f4c7483 100644 (file)
@@ -138,18 +138,13 @@ class EditHandler(base.BaseHandler):
                if not post.is_editable(self.current_user):
                        raise tornado.web.HTTPError(403, "%s cannot edit %s" % (self.current_user, post))
 
+               # Save updated content
                with self.db.transaction():
-                       # Update title
-                       post.title = self.get_argument("title")
-
-                       # Update text
-                       post.text = self.get_argument("text")
-
-                       # Update tags
-                       post.tags = (t.strip() for t in self.get_argument("tags", "").split(","))
-
-                       # Mark post as updated
-                       post.updated()
+                       post.update(
+                               title = self.get_argument("title"),
+                               text  = self.get_argument("text"),
+                               tags  = self.get_argument("tags").split(),
+                       )
 
                # Return to blog if the post is already published
                if post.is_published():