Example #1
0
    def process_request(self, req):
        req.perm.require('TRAC_ADMIN')

        self.data = {}
        self.args = {}
        self.req = req

        self.per_page = int(req.args.get('per-page', self.COMMENTS_PER_PAGE))
        self.page = int(req.args.get('page', 1))
        self.order_by = req.args.get('orderby', 'id')
        self.order = req.args.get('order', 'DESC')

        self.add_path_and_author_filters()

        self.comments = Comments(req, self.env)
        self.data['comments'] = self.comments.search(self.args, self.order,
                                                     self.per_page, self.page,
                                                     self.order_by)
        self.data['reponame'], repos, path = RepositoryManager(
            self.env).get_repository_by_path('/')
        self.data['can_delete'] = 'TRAC_ADMIN' in req.perm
        self.data['paginator'] = self.get_paginator()
        self.data['current_sorting_method'] = self.order_by
        self.data['current_order'] = self.order
        self.data['sortable_headers'] = []

        self.data.update(self.comments.get_filter_values())
        self.prepare_sortable_headers()

        return 'comments.html', self.data, None
 def process_request(self, req):
     #TODO: catch errors
     if '/' + self.href == req.path_info:
         if 'GET' == req.method:
             self.return_json(req, Comments(req, self.env).search(req.args))
         if 'POST' == req.method:
             comments = Comments(req, self.env)
             id = comments.create(json.loads(req.read()))
             self.return_json(req, comments.by_id(id))
Example #3
0
 def process_request(self, req):
     #TODO: catch errors
     if '/' + self.href == req.path_info:
         if 'GET' == req.method:
             self.return_json(req, Comments(req, self.env).search(req.args))
         if 'POST' == req.method:
             comments = Comments(req, self.env)
             id = comments.create(json.loads(req.read()))
             self.return_json(req, comments.by_id(id))
Example #4
0
 def _get_comment_thread(self, comment):
     """
     Returns all comments in the same location as a given comment, sorted
     in order of id.
     """
     comments = Comments(None, self.env)
     args = {'type': comment.type,
             'revision': comment.revision,
             'path': comment.path,
             'line': comment.line}
     return comments.search(args, order_by='id')
Example #5
0
    def process_request(self, req):
        #TODO: catch errors
        if '/' + self.href == req.path_info:
            if 'GET' == req.method:
                # dirty fix for my Trac 1.0.1 with Postgres                                                                                                                                                                                                                      
                if req.args.get('revision') in ['null', '']:
                    del req.args['revision']

                self.return_json(req, Comments(req, self.env).search(req.args))
            if 'POST' == req.method:
                comments = Comments(req, self.env)
                id = comments.create(json.loads(req.read()))
                self.return_json(req, comments.by_id(id))
Example #6
0
    def process_request(self, req):
        req.perm.require('TRAC_ADMIN')

        self.data = {}
        self.args = {}
        self.req = req

        self.per_page = int(req.args.get('per-page', self.COMMENTS_PER_PAGE))
        self.page = int(req.args.get('page', 1))
        self.order_by = req.args.get('orderby', 'id')
        self.order = req.args.get('order', 'DESC')

        self.add_path_and_author_filters()

        self.comments = Comments(req, self.env);
        self.data['comments'] = self.comments.search(self.args, self.order, self.per_page, self.page, self.order_by)
        self.data['reponame'], repos, path = RepositoryManager(self.env).get_repository_by_path('/')
        self.data['can_delete'] = 'TRAC_ADMIN' in req.perm
        self.data['paginator'] = self.get_paginator()
        self.data['current_sorting_method'] = self.order_by
        self.data['current_order'] = self.order
        self.data['sortable_headers'] = []

        self.data.update(self.comments.get_filter_values())
        self.prepare_sortable_headers()

        return 'comments.html', self.data, None
Example #7
0
    def _do_seed(self):
        # Create a subscription for all existing attachments
        for row in self.env.db_query("""
                SELECT DISTINCT type, id FROM attachment
                """):
            for attachment in Attachment.select(self.env, row[0], row[1]):
                Subscription.from_attachment(self.env, attachment)

        # Create a subscription for all existing revisions
        rm = RepositoryManager(self.env)
        repos = rm.get_real_repositories()
        for repo in repos:
            _rev = repo.get_oldest_rev()
            while _rev:
                try:
                    _cs = repo.get_changeset(_rev)
                    Subscription.from_changeset(self.env, _cs)
                except NoSuchChangeset:
                    pass
                _rev = repo.next_rev(_rev)

        # Create a subscription for all existing comments
        comments = Comments(None, self.env).all()
        for comment in comments:
            Subscription.from_comment(self.env, comment)
Example #8
0
    def get_paginator(self):
        def href_with_page(page):
            args = copy.copy(self.req.args)
            args['page'] = page
            return self.req.href(self.href, args)

        paginator = Paginator(self.data['comments'], self.page - 1,
                              self.per_page,
                              Comments(self.req, self.env).count(self.args))
        if paginator.has_next_page:
            add_link(self.req, 'next', href_with_page(self.page + 1),
                     'Next Page')
        if paginator.has_previous_page:
            add_link(self.req, 'prev', href_with_page(self.page - 1),
                     'Previous Page')
        shown_pages = paginator.get_shown_pages(page_index_count=11)
        links = [{
            'href': href_with_page(page),
            'class': None,
            'string': str(page),
            'title': 'Page %d' % page
        } for page in shown_pages]
        paginator.shown_pages = links
        paginator.current_page = {
            'href': None,
            'class': 'current',
            'string': str(paginator.page + 1),
            'title': None
        }
        return paginator
Example #9
0
    def process_request(self, req):
        text = ''
        for id in req.args['ids'].split(','):
            comment = Comments(req, self.env).by_id(id)
            text += """
[[CodeCommentLink(%(id)s)]]
%(comment_text)s

""".lstrip() % {
                'id': id,
                'comment_text': comment.text
            }
        req.redirect(req.href.newticket(description=text))
Example #10
0
 def delete(self, req):
     comment = Comments(req, self.env).by_id(req.args['id'])
     comment.delete()
     add_notice(req, 'Comment deleted.')
     req.redirect(req.args['return_to'] or req.href())
Example #11
0
class ListComments(CodeComments):
    implements(IRequestHandler)

    COMMENTS_PER_PAGE = 50

    # IRequestHandler methods
    def match_request(self, req):
        return req.path_info == '/' + self.href

    def process_request(self, req):
        req.perm.require('TRAC_ADMIN')

        self.data = {}
        self.args = {}
        self.req = req

        self.per_page = int(req.args.get('per-page', self.COMMENTS_PER_PAGE))
        self.page = int(req.args.get('page', 1))
        self.order_by = req.args.get('orderby', 'id')
        self.order = req.args.get('order', 'DESC')

        self.add_path_and_author_filters()

        self.comments = Comments(req, self.env);
        self.data['comments'] = self.comments.search(self.args, self.order, self.per_page, self.page, self.order_by)
        self.data['reponame'], repos, path = RepositoryManager(self.env).get_repository_by_path('/')
        self.data['can_delete'] = 'TRAC_ADMIN' in req.perm
        self.data['paginator'] = self.get_paginator()
        self.data['current_sorting_method'] = self.order_by
        self.data['current_order'] = self.order
        self.data['sortable_headers'] = []

        self.data.update(self.comments.get_filter_values())
        self.prepare_sortable_headers()

        return 'comments.html', self.data, None

    def post_process_request(self, req, template, data, content_type):
        add_stylesheet(req, 'code-comments/sort/sort.css')
        add_script(req, 'code-comments/code-comments-list.js')
        return template, data, content_type

    def add_path_and_author_filters(self):
        self.data['current_path_selection'] = '';
        self.data['current_author_selection'] = '';

        if self.req.args.get('filter-by-path'):
            self.args['path__prefix'] = self.req.args['filter-by-path'];
            self.data['current_path_selection'] = self.req.args['filter-by-path']
        if self.req.args.get('filter-by-author'):
            self.args['author'] = self.req.args['filter-by-author']
            self.data['current_author_selection'] = self.req.args['filter-by-author']

    def get_paginator(self):
        def href_with_page(page):
            args = copy.copy(self.req.args)
            args['page'] = page
            return self.req.href(self.href, args)
        paginator = Paginator(self.data['comments'], self.page-1, self.per_page, Comments(self.req, self.env).count(self.args))
        if paginator.has_next_page:
            add_link(self.req, 'next', href_with_page(self.page + 1), 'Next Page')
        if paginator.has_previous_page:
            add_link(self.req, 'prev', href_with_page(self.page - 1), 'Previous Page')
        shown_pages = paginator.get_shown_pages(page_index_count = 11)
        links = [{'href': href_with_page(page), 'class': None, 'string': str(page), 'title': 'Page %d' % page}
            for page in shown_pages]
        paginator.shown_pages = links
        paginator.current_page = {'href': None, 'class': 'current', 'string': str(paginator.page + 1), 'title': None}
        return paginator

    def prepare_sortable_headers(self):
        displayed_sorting_methods = ('id', 'author', 'time', 'path', 'text')
        displayed_sorting_method_names = ('ID', 'Author', 'Date', 'Path', 'Text')
        query_args = self.req.args
        if ( query_args.has_key('page') ):
            del query_args['page']
        for sorting_method, sorting_method_name in zip(displayed_sorting_methods, displayed_sorting_method_names):
            query_args['orderby'] = sorting_method
            html_class = 'header'
            if self.order_by == sorting_method:
                if 'ASC' == self.order:
                    query_args['order'] = 'DESC'
                    html_class += ' headerSortUp'
                else:
                    query_args['order'] = 'ASC'
                    html_class += ' headerSortDown'
            link = self.req.href(self.href, query_args)
            self.data['sortable_headers'].append({ 'name': sorting_method_name, 'link': link, 'html_class': html_class })
 def expand_macro(self, formatter, name, text, args):
     try:
         comment = Comments(formatter.req, formatter.env).by_id(text)
         return tag.a(comment.link_text(), href=comment.href())
     except:
         return ''
Example #13
0
 def delete(self, req):
     comment = Comments(req, self.env).by_id(req.args['id'])
     comment.delete()
     add_notice(req, 'Comment deleted.')
     req.redirect(req.args['return_to'] or req.href())
Example #14
0
 def form(self, req):
     data = {}
     referrer = req.get_header('Referer')
     data['comment'] = Comments(req, self.env).by_id(req.args['id'])
     data['return_to'] = referrer
     return 'delete.html', data, None
Example #15
0
class ListComments(CodeComments):
    implements(IRequestHandler)

    COMMENTS_PER_PAGE = 50

    # IRequestHandler methods
    def match_request(self, req):
        return req.path_info == '/' + self.href

    def process_request(self, req):
        req.perm.require('TRAC_ADMIN')

        self.data = {}
        self.args = {}
        self.req = req

        self.per_page = int(req.args.get('per-page', self.COMMENTS_PER_PAGE))
        self.page = int(req.args.get('page', 1))
        self.order_by = req.args.get('orderby', 'id')
        self.order = req.args.get('order', 'DESC')

        self.add_path_and_author_filters()

        self.comments = Comments(req, self.env)
        self.data['comments'] = self.comments.search(self.args, self.order,
                                                     self.per_page, self.page,
                                                     self.order_by)
        self.data['reponame'], repos, path = RepositoryManager(
            self.env).get_repository_by_path('/')
        self.data['can_delete'] = 'TRAC_ADMIN' in req.perm
        self.data['paginator'] = self.get_paginator()
        self.data['current_sorting_method'] = self.order_by
        self.data['current_order'] = self.order
        self.data['sortable_headers'] = []

        self.data.update(self.comments.get_filter_values())
        self.prepare_sortable_headers()

        return 'comments.html', self.data, None

    def post_process_request(self, req, template, data, content_type):
        add_stylesheet(req, 'code-comments/sort/sort.css')
        add_script(req, 'code-comments/code-comments-list.js')
        return template, data, content_type

    def add_path_and_author_filters(self):
        self.data['current_path_selection'] = ''
        self.data['current_author_selection'] = ''

        if self.req.args.get('filter-by-path'):
            self.args['path__prefix'] = self.req.args['filter-by-path']
            self.data['current_path_selection'] = self.req.args[
                'filter-by-path']
        if self.req.args.get('filter-by-author'):
            self.args['author'] = self.req.args['filter-by-author']
            self.data['current_author_selection'] = self.req.args[
                'filter-by-author']

    def get_paginator(self):
        def href_with_page(page):
            args = copy.copy(self.req.args)
            args['page'] = page
            return self.req.href(self.href, args)

        paginator = Paginator(self.data['comments'], self.page - 1,
                              self.per_page,
                              Comments(self.req, self.env).count(self.args))
        if paginator.has_next_page:
            add_link(self.req, 'next', href_with_page(self.page + 1),
                     'Next Page')
        if paginator.has_previous_page:
            add_link(self.req, 'prev', href_with_page(self.page - 1),
                     'Previous Page')
        shown_pages = paginator.get_shown_pages(page_index_count=11)
        links = [{
            'href': href_with_page(page),
            'class': None,
            'string': str(page),
            'title': 'Page %d' % page
        } for page in shown_pages]
        paginator.shown_pages = links
        paginator.current_page = {
            'href': None,
            'class': 'current',
            'string': str(paginator.page + 1),
            'title': None
        }
        return paginator

    def prepare_sortable_headers(self):
        displayed_sorting_methods = ('id', 'author', 'time', 'path', 'text')
        displayed_sorting_method_names = ('ID', 'Author', 'Date', 'Path',
                                          'Text')
        query_args = self.req.args
        if (query_args.has_key('page')):
            del query_args['page']
        for sorting_method, sorting_method_name in zip(
                displayed_sorting_methods, displayed_sorting_method_names):
            query_args['orderby'] = sorting_method
            html_class = 'header'
            if self.order_by == sorting_method:
                if 'ASC' == self.order:
                    query_args['order'] = 'DESC'
                    html_class += ' headerSortUp'
                else:
                    query_args['order'] = 'ASC'
                    html_class += ' headerSortDown'
            link = self.req.href(self.href, query_args)
            self.data['sortable_headers'].append({
                'name': sorting_method_name,
                'link': link,
                'html_class': html_class
            })