Edgewall Software

Ticket #5134: report-paginate.diff

File report-paginate.diff, 3.6 KB (added by liris <liris.pp@…>, 5 years ago)

paginate patch for report

  • templates/report.cs

    diff -r -u trac-0.10.3.1-orig/templates/report.cs trac-0.10.3.1/templates/report.cs
    old new  
    108108    /if ?><?cs 
    109109   /if ?> 
    110110 
     111 
     112<form id="query" method="get" action=""> 
     113 <p class="option"> 
     114  Page:  
     115  <?cs each:n = page_query.numpages ?> 
     116  <?cs if:n == page_query.curpage ?> 
     117   <?cs var:n ?> 
     118  <?cs else ?> 
     119    <a href="<?cs var:report.href ?>?<?cs if page_query.baseparams ?><?cs var:page_query.baseparams ?>&<?cs /if ?>page=<?cs var:n ?>"><?cs var:n ?></a> 
     120  <?cs /if ?> 
     121  <?cs /each ?> 
     122 </p> 
     123 <p class="option"> 
     124  <label>Tickets per page: 
     125   <input type="text" class="textwidget" name="per_page" value="<?cs var:page_query.perpage ?>" size="6" /> 
     126  </label> 
     127 </p> 
     128 <div class="buttons"> 
     129  <input type="hidden" name="order" value="<?cs var:query.order ?>" /> 
     130  <?cs if:query.desc ?><input type="hidden" name="desc" value="1" /><?cs /if ?> 
     131  <input type="submit" name="update" value="Update" /> 
     132 </div> 
     133 <hr /> 
     134</form> 
     135 
    111136     <?cs each row = report.items ?> 
    112137       <?cs if group != row.__group__ || idx == #0 ?> 
    113138         <?cs if:idx != #0 ?></tbody><?cs /if ?> 
  • trac/ticket/report.py

    diff -r -u trac-0.10.3.1-orig/trac/ticket/report.py trac-0.10.3.1/trac/ticket/report.py
    old new  
    2828from trac.util.datefmt import format_date, format_time, format_datetime, \ 
    2929                               http_date 
    3030from trac.util.html import html 
     31from trac.config import IntOption 
    3132from trac.web import IRequestHandler 
    3233from trac.web.chrome import add_link, add_stylesheet, INavigationContributor 
    3334from trac.wiki import wiki_to_html, IWikiSyntaxProvider, Formatter 
    3435 
     36import math 
     37 
    3538class ReportModule(Component): 
    3639 
     40    tickets_per_page = IntOption('ticket', 'default_per_page', default=10, 
     41                                 doc="The number of tickets shown per page in queries") 
     42     
    3743    implements(INavigationContributor, IPermissionRequestor, IRequestHandler, 
    3844               IWikiSyntaxProvider) 
    3945 
     
    300306 
    301307        # Convert the rows and cells to HDF-format 
    302308        row_idx = 0 
     309        # Update/retrieve the number of tickets per page 
     310        perpage = int(req.args.get("per_page", 0)) 
     311        if not perpage: 
     312            perpage = req.session.get('tickets_perpage') 
     313            if not perpage: 
     314                perpage = self.tickets_per_page 
     315            else: 
     316                perpage = int(perpage) 
     317        else: 
     318            req.session['tickets_perpage'] = perpage 
     319             
     320        # Calculate number of pages and current page 
     321        numpages = int(math.ceil(len(rows) * 1.0 / perpage)) 
     322        curpage = int(req.args.get('page', 1)) 
     323        if curpage <= 0 or curpage > numpages: 
     324            raise TracError, 'Invalid page %s'%(curpage) 
     325                 
     326        # Calculate the start and end point 
     327        start = perpage * (curpage-1) 
     328        end = start + perpage 
     329        rows = rows[start:end] 
     330 
     331        # A few more HDF variables 
     332        req.hdf['page_query.perpage'] = perpage 
     333        req.hdf['page_query.numpages'] = range(1, numpages+1) 
     334        req.hdf['page_query.curpage'] = curpage 
     335        params = {} 
     336        if req.args.has_key('sort'): 
     337            params['sort'] = req.args['sort'] 
     338        if req.args.has_key('asc'): 
     339            params['asc'] = req.args['asc'] 
     340        req.hdf['page_query.baseparams'] = urllib.urlencode(params) 
     341             
    303342        for row in rows: 
    304343            col_idx = 0 
    305344            numrows = len(row)