示例#1
0
    def validate_blog_post(self, req, postname, version, fields):
        if 'blog-preview' in req.args:
            return []

        blog_res = Resource('blog', postname, version)
        if req.perm(blog_res).has_permission('BLOG_ADMIN'):
            return []

        if version > 1:
            bp = BlogPost(self.env, postname, version)
            last_post_fields = bp._fetch_fields(version=version-1)
        else:
            last_post_fields = {}

        field_names = set(fields).union(last_post_fields)
        changes = []
        for field in field_names:
            old = to_unicode(last_post_fields.get(field, ''))
            new = to_unicode(fields.get(field, ''))
            if new and old != new:
                changes.append((old, new))
        author = fields.get('author', '')
        if arity(FilterSystem.test) == 4:
            # 0.11 compatible method signature
            FilterSystem(self.env).test(req, author, changes)
        else:
            # 0.12+ compatible that adds an 'ip' argument
            FilterSystem(self.env).test(req, author, changes, req.remote_addr)
        return []
    def validate_blog_post(self, req, postname, version, fields):
        if 'blog-preview' in req.args:
            return []

        blog_res = Resource('blog', postname, version)
        if req.perm(blog_res).has_permission('BLOG_ADMIN'):
            return []

        if version > 1:
            bp = BlogPost(self.env, postname, version)
            last_post_fields = bp._fetch_fields(version=version - 1)
        else:
            last_post_fields = {}

        field_names = set(fields).union(last_post_fields)
        changes = []
        for field in field_names:
            old = to_unicode(last_post_fields.get(field, ''))
            new = to_unicode(fields.get(field, ''))
            if new and old != new:
                changes.append((old, new))
        author = fields.get('author', '')
        if arity(FilterSystem.test) == 4:
            # 0.11 compatible method signature
            FilterSystem(self.env).test(req, author, changes)
        else:
            # 0.12+ compatible that adds an 'ip' argument
            FilterSystem(self.env).test(req, author, changes, req.remote_addr)
        return []
    def test_single_post(self):
        PermissionSystem(self.env).grant_permission('user', 'BLOG_VIEW')
        bp = BlogPost(self.env, 'first_post')
        bp.update_fields(fields={
            'title': 'First Post',
            'author': 'user',
            'body': 'First body'
        })
        self.assertEquals([], bp.save('user'))
        req = Mock(method='GET',
                   base_path='',
                   cgi_location='',
                   path_info='/blog',
                   href=Href('/trac'),
                   args={},
                   chrome={},
                   perm=PermissionCache(self.env, 'user'),
                   authname='user')

        module = FullBlogModule(self.env)
        assert module.match_request(req)
        template, data, _ = module.process_request(req)

        self.assertEqual(1, data['blog_total'])
        self.assertEqual(1, len(data['blog_post_list']))
        self.assertEqual('First Post', data['blog_post_list'][0].title)
示例#4
0
 def test_create_post(self):
     PermissionSystem(self.env).grant_permission('user', 'BLOG_VIEW')
     core = FullBlogCore(self.env)
     req = Mock(method='GET', base_path='', cgi_location='',
                path_info='/blog', href=Href('/trac'), args={}, chrome={},
                perm=PermissionCache(self.env, 'user'), authname='user')
     bp = BlogPost(self.env, 'about')
     bp.update_fields(fields={'title': 'test_create_post', 'author': 'user',
         'body': 'First body'})
     warnings = core.create_post(req, bp, req.authname)
     self.assertEquals(warnings, [])
     posts = get_blog_posts(self.env)
     self.assertEquals(1, len(posts))
     self.assertEquals('test_create_post', posts[0][4])
 def blog_post_deleted(self, postname, version, fields):
     if version > 0:
         action = 'post_deleted_version'
     else:                
         action = 'post_deleted'
     blog_post = BlogPost(self.env, postname, version)
     # the post has already been deleted, so populate from fields
     # this is just so we can say which page was deleted
     blog_post.title = fields['title']
     blog_post.author = fields['author']
     author = fields['version_author']
     time = datetime.datetime.now(utc)        
     notifier = FullBlogNotificationEmail(self.env)
     notifier.notify(blog_post, action, version, time, '', author)
 def blog_post_deleted(self, postname, version, fields):
     if version > 0:
         action = 'post_deleted_version'
     else:                
         action = 'post_deleted'
     blog_post = BlogPost(self.env, postname, version)
     # the post has already been deleted, so populate from fields
     # this is just so we can say which page was deleted
     blog_post.title = fields['title']
     blog_post.author = fields['author']
     author = fields['version_author']
     time = datetime.datetime.now(utc)        
     notifier = FullBlogNotificationEmail(self.env)
     notifier.notify(blog_post, action, version, time, '', author)
 def blog_comment_added(self, postname, number):
     action = 'post_comment_added'
     blog_post = BlogPost(self.env, postname, 0)
     bc = BlogComment(self.env, postname, number)
     notifier = FullBlogNotificationEmail(self.env)
     notifier.notify(blog_post, action, blog_post.version, bc.time,
                     bc.comment, bc.author)
 def blog_post_changed(self, postname, version):
     if version > 1:
         action = 'post_updated' 
     else:                
         action = 'post_created'        
     blog_post = BlogPost(self.env, postname, version)
     notifier = FullBlogNotificationEmail(self.env)
     notifier.notify(blog_post, action, version, blog_post.version_time, blog_post.version_comment, blog_post.version_author)
示例#9
0
 def blog_comment_added(self, postname, number):
     """Called when Blog comment number N on post 'postname' is added."""
     blog_post = BlogPost(self.env, postname, 0)
     blog_comment = BlogComment(self.env, postname, number)
     announcer = AnnouncementSystem(self.env)
     announcer.send(
         BlogChangeEvent(blog_post, 'comment created',
                         self.env.abs_href.blog(blog_post.name),
                         blog_comment))
示例#10
0
文件: core.py 项目: jier38/TracSite
 def test_create_post(self):
     PermissionSystem(self.env).grant_permission('user', 'BLOG_VIEW')
     core = FullBlogCore(self.env)
     req = MockRequest(self.env,
                       method='GET',
                       path_info='/blog',
                       authname='user')
     bp = BlogPost(self.env, 'about')
     bp.update_fields(fields={
         'title': 'test_create_post',
         'author': 'user',
         'body': 'First body'
     })
     warnings = core.create_post(req, bp, req.authname)
     self.assertEquals(warnings, [])
     posts = get_blog_posts(self.env)
     self.assertEquals(1, len(posts))
     self.assertEquals('test_create_post', posts[0][4])
示例#11
0
 def test_create_post_missing_default_fields(self):
     PermissionSystem(self.env).grant_permission('user', 'BLOG_VIEW')
     core = FullBlogCore(self.env)
     req = Mock(method='GET', base_path='', cgi_location='',
                path_info='/blog', href=Href('/trac'), args={}, chrome={},
                perm=PermissionCache(self.env, 'user'), authname='user')
     bp = BlogPost(self.env, 'about')
     warnings = core.create_post(req, bp, req.authname)
     self.assertEquals(warnings, [('title', 'Title is empty.'),
         ('body', 'Body is empty.'), ('author', 'Author is empty.')])
示例#12
0
文件: core.py 项目: jier38/TracSite
 def test_create_post_missing_default_fields(self):
     PermissionSystem(self.env).grant_permission('user', 'BLOG_VIEW')
     core = FullBlogCore(self.env)
     req = MockRequest(self.env,
                       method='GET',
                       path_info='/blog',
                       authname='user')
     bp = BlogPost(self.env, 'about')
     warnings = core.create_post(req, bp, req.authname)
     self.assertEquals(warnings, [('title', 'Title is empty.'),
                                  ('body', 'Body is empty.'),
                                  ('author', 'Author is empty.')])
示例#13
0
文件: web_ui.py 项目: jier38/TracSite
    def test_single_post(self):
        PermissionSystem(self.env).grant_permission('user', 'BLOG_VIEW')
        bp = BlogPost(self.env, 'first_post')
        bp.update_fields(fields={
            'title': 'First Post',
            'author': 'user',
            'body': 'First body'
        })
        self.assertEquals([], bp.save('user'))
        req = MockRequest(self.env,
                          method='GET',
                          path_info='/blog',
                          authname='user')

        module = FullBlogModule(self.env)
        self.assertTrue(module.match_request(req))
        template, data, _ = module.process_request(req)

        self.assertEqual(1, data['blog_total'])
        self.assertEqual(1, len(data['blog_post_list']))
        self.assertEqual('First Post', data['blog_post_list'][0].title)
示例#14
0
 def check_permission(self, action, username, resource, perm):
     """ Will block access if the resource points to a draft blog post,
     and the user is different from the author. Any other variation
     is just passed on to be handled by regular permission checks. """
     if not resource:
         return
     if resource.realm == 'blog' and resource.id:
         the_post = BlogPost(self.env, resource.id, resource.version)
         for category in the_post.category_list:
             if category in self.draft and the_post.author != username:
                 # Block all access regardless
                 return False
示例#15
0
    def blog_post_changed(self, postname, version):
        """Called when a new blog post 'postname' with 'version' is added.

        version==1 denotes a new post, version>1 is a new version on existing
        post.
        """
        blog_post = BlogPost(self.env, postname, version)
        action = 'post created'
        if version > 1:
            action = 'post changed'
        announcer = AnnouncementSystem(self.env)
        announcer.send(
            BlogChangeEvent(blog_post, action,
                            self.env.abs_href.blog(blog_post.name)))
示例#16
0
    def blog_post_deleted(self, postname, version, fields):
        """Called when a blog post is deleted:

        version==0 means all versions (or last remaining) version is deleted.
        Any version>0 denotes a specific version only.
        Fields is a dict with the pre-existing values of the blog post.
        If all (or last) the dict will contain the 'current' version
        contents.
        """
        blog_post = BlogPost(self.env, postname, version)
        announcer = AnnouncementSystem(self.env)
        announcer.send(
            BlogChangeEvent(blog_post, 'post deleted',
                            self.env.abs_href.blog(blog_post.name)))
示例#17
0
    def blog_comment_deleted(self, postname, number, fields):
        """Called when blog post comment 'number' is deleted.

        number==0 denotes all comments is deleted and fields will be empty.
        (usually follows a delete of the blog post).

        number>0 denotes a specific comment is deleted, and fields will contain
        the values of the fields as they existed pre-delete.
        """
        blog_post = BlogPost(self.env, postname, 0)
        announcer = AnnouncementSystem(self.env)
        announcer.send(
            BlogChangeEvent(blog_post, 'comment deleted',
                            self.env.abs_href.blog(blog_post.name), fields))