You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by ke...@apache.org on 2019/01/03 14:57:14 UTC

[09/11] allura git commit: [#5461] add subscribe option to new blog posts

[#5461] add subscribe option to new blog posts


Project: http://git-wip-us.apache.org/repos/asf/allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/allura/commit/4a6f8c06
Tree: http://git-wip-us.apache.org/repos/asf/allura/tree/4a6f8c06
Diff: http://git-wip-us.apache.org/repos/asf/allura/diff/4a6f8c06

Branch: refs/heads/master
Commit: 4a6f8c06c66f11e68f87c7a80888351d8a535c41
Parents: 3e066d0
Author: Dave Brondsema <da...@brondsema.net>
Authored: Wed Dec 19 12:35:35 2018 -0500
Committer: Dave Brondsema <da...@brondsema.net>
Committed: Thu Dec 20 11:59:01 2018 -0500

----------------------------------------------------------------------
 ForgeBlog/forgeblog/main.py                     |  3 +-
 ForgeBlog/forgeblog/model/blog.py               |  8 ++-
 .../templates/blog_widgets/post_form.html       |  6 ++
 ForgeBlog/forgeblog/widgets.py                  | 58 +++++++++++++-------
 4 files changed, 50 insertions(+), 25 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/allura/blob/4a6f8c06/ForgeBlog/forgeblog/main.py
----------------------------------------------------------------------
diff --git a/ForgeBlog/forgeblog/main.py b/ForgeBlog/forgeblog/main.py
index 066c238..f4706d9 100644
--- a/ForgeBlog/forgeblog/main.py
+++ b/ForgeBlog/forgeblog/main.py
@@ -301,7 +301,8 @@ class RootController(BaseController, FeedController):
     @memorable_forget()
     @expose()
     @require_post()
-    @validate(form=W.edit_post_form, error_handler=new)
+    # both new & edit submit here, but validate with new since it adds a field (subscribe)
+    @validate(form=W.new_post_form, error_handler=new)
     @without_trailing_slash
     def save(self, **kw):
         require_access(c.app, 'write')

http://git-wip-us.apache.org/repos/asf/allura/blob/4a6f8c06/ForgeBlog/forgeblog/model/blog.py
----------------------------------------------------------------------
diff --git a/ForgeBlog/forgeblog/model/blog.py b/ForgeBlog/forgeblog/model/blog.py
index f20b228..0cbd8df 100644
--- a/ForgeBlog/forgeblog/model/blog.py
+++ b/ForgeBlog/forgeblog/model/blog.py
@@ -234,10 +234,11 @@ class BlogPost(M.VersionedArtifact, ActivityObject):
         HC = self.__mongometa__.history_class
         return HC.query.find({'artifact_id': self._id, 'version': int(version)}).one()
 
-    def commit(self):
+    def commit(self, subscribe=False):
         activity = functools.partial(g.director.create_activity, c.user,
                                      related_nodes=[c.project], tags=['blog'])
-        self.subscribe()
+        if subscribe:
+            self.subscribe()
         super(BlogPost, self).commit()
         if self.version > 1:
             v1 = self.get_version(self.version - 1)
@@ -291,11 +292,12 @@ class BlogPost(M.VersionedArtifact, ActivityObject):
     @classmethod
     def new(cls, **kw):
         post = cls()
+        subscribe = kw.pop('subscribe', False)
         for k, v in kw.iteritems():
             setattr(post, k, v)
         post.neighborhood_id = c.project.neighborhood_id
         post.make_slug()
-        post.commit()
+        post.commit(subscribe=subscribe)
         M.Thread.new(
             discussion_id=post.app_config.discussion_id,
             ref_id=post.index_id(),

http://git-wip-us.apache.org/repos/asf/allura/blob/4a6f8c06/ForgeBlog/forgeblog/templates/blog_widgets/post_form.html
----------------------------------------------------------------------
diff --git a/ForgeBlog/forgeblog/templates/blog_widgets/post_form.html b/ForgeBlog/forgeblog/templates/blog_widgets/post_form.html
index b8216b0..6a4f5ba 100644
--- a/ForgeBlog/forgeblog/templates/blog_widgets/post_form.html
+++ b/ForgeBlog/forgeblog/templates/blog_widgets/post_form.html
@@ -51,6 +51,12 @@
     {% for b in buttons %}
       {{b.display()}}
     {% endfor %}
+    {% if c.user and c.user != c.user.anonymous() and widget.fields.subscribe|default %}
+      {# TODO: if not already subscribed to whole tool #}
+      <label class="subscribe">
+        <input type="checkbox" checked name="subscribe">Subscribe to this blog post
+      </label>
+    {% endif %}
     <a href="{{c.app.url}}" class="btn link cancel_form">Cancel</a>
   </div>
   {% if widget.antispam %}{% for fld in g.antispam.extra_fields() %}

http://git-wip-us.apache.org/repos/asf/allura/blob/4a6f8c06/ForgeBlog/forgeblog/widgets.py
----------------------------------------------------------------------
diff --git a/ForgeBlog/forgeblog/widgets.py b/ForgeBlog/forgeblog/widgets.py
index 6b055fc..0110b40 100644
--- a/ForgeBlog/forgeblog/widgets.py
+++ b/ForgeBlog/forgeblog/widgets.py
@@ -29,31 +29,38 @@ class BlogPager(ffw.PageList):
     template = 'jinja:forgeblog:templates/blog_widgets/page_list.html'
 
 
-class NewPostForm(forms.ForgeForm):
+class BlogPostForm(forms.ForgeForm):
     template = 'jinja:forgeblog:templates/blog_widgets/post_form.html'
     enctype = 'multipart/form-data'
 
-    class fields(ew_core.NameList):
-        title = ew.TextField(validator=fev.UnicodeString(not_empty=True,
-                             messages={'empty': "You must provide a Title"}),
-                             attrs=dict(placeholder='Enter your title here',
-                                        title='Enter your title here',
-                                        style='width: 425px'))
-        text = ffw.MarkdownEdit(show_label=False,
-                                attrs=dict(
-                                    placeholder='Enter your content here',
-                                    title='Enter your content here'))
-        state = ew.SingleSelectField(
-            options=[
-                ew.Option(py_value='draft', label='Draft'),
-                ew.Option(py_value='published', label='Published')])
-        labels = ffw.LabelEdit(placeholder='Add labels here',
-                               title='Add labels here')
-        attachment = ew.InputField(label='Attachment', field_type='file', attrs={'multiple': 'True'},
-                                   validator=fev.FieldStorageUploadConverter(if_missing=None))
+    @property
+    def fields(self):
+        return ew_core.NameList([
+            ew.TextField(name='title',
+                         validator=fev.UnicodeString(not_empty=True,
+                                                     messages={'empty': "You must provide a Title"}),
+                         attrs=dict(placeholder='Enter your title here',
+                                    title='Enter your title here',
+                                    style='width: 425px')),
+            ffw.MarkdownEdit(name='text',
+                             show_label=False,
+                             attrs=dict(
+                                 placeholder='Enter your content here',
+                                 title='Enter your content here')),
+            ew.SingleSelectField(name='state',
+                                 options=[
+                                     ew.Option(py_value='draft', label='Draft'),
+                                     ew.Option(py_value='published', label='Published')]),
+            ffw.LabelEdit(name='labels',
+                          placeholder='Add labels here',
+                          title='Add labels here'),
+            ew.InputField(name='attachment',
+                          label='Attachment', field_type='file', attrs={'multiple': 'True'},
+                          validator=fev.FieldStorageUploadConverter(if_missing=None)),
+        ])
 
     def resources(self):
-        for r in super(NewPostForm, self).resources():
+        for r in super(BlogPostForm, self).resources():
             yield r
         yield ew.JSScript('''
             $(function() {
@@ -62,7 +69,16 @@ class NewPostForm(forms.ForgeForm):
         ''')
 
 
-class EditPostForm(NewPostForm):
+class NewPostForm(BlogPostForm):
+
+    @property
+    def fields(self):
+        fields = super(NewPostForm, self).fields
+        fields.append(ew.Checkbox(name='subscribe'))
+        return fields
+
+
+class EditPostForm(BlogPostForm):
 
     class buttons(ew_core.NameList):
         delete = ew.SubmitButton(label='Delete')