Edgewall Software

Ticket #216: report.patch

File report.patch, 4.1 KB (added by liris <liris.pp@…>, 20 months ago)

paginate patch for report

  • trac/ticket/report.py

     
    3636                            Chrome 
    3737from trac.wiki import IWikiSyntaxProvider, WikiParser 
    3838 
     39import math,urllib 
    3940 
    4041class ReportModule(Component): 
    4142 
     43    tickets_per_page = IntOption('ticket', 'default_per_page', default=10, 
     44                                 doc="The number of tickets shown per page in queries") 
     45     
    4246    implements(INavigationContributor, IPermissionRequestor, IRequestHandler, 
    4347               IWikiSyntaxProvider) 
    4448 
     
    322326                header_groups.append([]) 
    323327            header_group.append(header) 
    324328 
     329        # Update/retrieve the number of tickets per page 
     330        perpage = int(req.args.get("per_page", 0)) 
     331        if not perpage: 
     332            perpage = req.session.get('tickets_perpage') 
     333            if not perpage: 
     334                perpage = self.tickets_per_page 
     335            else: 
     336                perpage = int(perpage) 
     337        else: 
     338            req.session['tickets_perpage'] = perpage 
     339             
     340        # Calculate number of pages and current page 
     341        numpages = int(math.ceil(len(results) * 1.0 / perpage)) 
     342        curpage = int(req.args.get('page', 1)) 
     343        if curpage <= 0 or curpage > numpages: 
     344            raise TracError, 'Invalid page %s'%(curpage) 
     345                 
     346        # Calculate the start and end point 
     347        start = perpage * (curpage-1) 
     348        end = start + perpage 
     349        results = results[start:end] 
     350 
     351        page_query = {} 
     352        page_query['perpage'] = perpage 
     353        page_query['numpages'] = range(1, numpages+1) 
     354        page_query['curpage'] = curpage 
     355        params = {} 
     356        if req.args.has_key('sort'): 
     357            params['sort'] = req.args['sort'] 
     358        if req.args.has_key('asc'): 
     359            params['asc'] = req.args['asc'] 
     360        page_query['baseparams'] = urllib.urlencode(params) 
     361             
     362 
    325363        # Structure the rows and cells: 
    326364        #  - group rows according to __group__ value, if defined 
    327365        #  - group cells the same way headers are grouped 
     
    377415                     'row_groups': row_groups, 
    378416                     'numrows': len(results), 
    379417                     'sorting_enabled': len(row_groups)==1, 
    380                      'email_map': email_map}) 
     418                     'email_map': email_map, 
     419                     'page_query': page_query}) 
    381420 
    382421        if id: 
    383422            self.add_alternate_links(req, args) 
  • trac/ticket/templates/report_view.html

     
    2727      </h1> 
    2828 
    2929      <div py:if="report.description" id="description">${wiki_to_html(context, report.description)}</div> 
     30      <div py:if="report.id != -1"> 
     31        <form id="query" method="get" action=""> 
     32          <p class="option"> 
     33            Page: 
     34             <py:for each="n in page_query.numpages"> 
     35               <py:if test="n == page_query.curpage"> 
     36                 ${n} 
     37               </py:if> 
     38               <py:if test="n != page_query.curpage"> 
     39                 <py:if test="page_query.baseparams"> 
     40                   <a href="?${page_query.baseparams}&amp;page=${n}">${n}</a> 
     41                 </py:if> 
     42                 <py:if test="not page_query.baseparams"> 
     43                   <a href="?page=${n}">${n}</a> 
     44                 </py:if> 
     45               </py:if> 
     46             </py:for> 
     47          </p> 
     48          <p class="option"> 
     49            <label>Ticket per page: 
     50             <input type="text" class="textwidget" name="per_page" value="${page_query.perpage}" size="6" /> 
     51            </label> 
     52          </p> 
     53           <div class="buttons"> 
     54            <input type="submit" name="update" value="Update" /> 
     55          </div> 
     56        </form> 
     57      </div> 
    3058 
    3159      <div py:if="report.id != -1 and report.perms" class="buttons"> 
    3260        <form py:if="'MODIFY' in report.perms" action="" method="get">