Example #1
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 #2
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 })
Example #3
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
            })