def page_paginator(self,req,iids,page): results = Paginator(iids, int(page) - 1, self.items_per_page) apath = args_path(req.args) if req: if results.has_next_page: next_href = req.href(req.path_info, max=self.items_per_page, page=page + 1)+apath add_link(req, 'next', next_href, 'Next Page') if results.has_previous_page: prev_href = req.href(req.path_info, max=self.items_per_page, page=page - 1)+apath add_link(req, 'prev', prev_href, 'Previous Page') else: results.show_index = False pagedata = [] shown_pages = results.get_shown_pages(21) for p in shown_pages: pagedata.append([req.href(req.path_info, page=p)+apath, None, str(p), 'Page ' + str(p) + 'd']) results.shown_pages = [dict(zip(['href', 'class', 'string', 'title'], p)) for p in pagedata] results.current_page = {'href': None, 'class': 'current', 'string': str(results.page + 1), 'title':None} return results
def template_data(self, context, tickets, orig_list=None, orig_time=None, req=None): constraints = {} for k, v in self.constraints.items(): constraint = {'values': [], 'mode': ''} for val in v: neg = val.startswith('!') if neg: val = val[1:] mode = '' if val[:1] in ('~', '^', '$') \ and not val in self.substitutions: mode, val = val[:1], val[1:] constraint['mode'] = (neg and '!' or '') + mode constraint['values'].append(val) constraints[k] = constraint cols = self.get_columns() labels = dict([(f['name'], f['label']) for f in self.fields]) wikify = set([f['name'] for f in self.fields if f['type'] == 'text' and f.get('format') == 'wiki']) # TODO: remove after adding time/changetime to the api.py labels['changetime'] = _('Modified') labels['time'] = _('Created') headers = [{ 'name': col, 'label': labels.get(col, _('Ticket')), 'wikify': col in wikify, 'href': self.get_href(context.href, order=col, desc=(col == self.order and not self.desc)) } for col in cols] fields = {} for field in self.fields: if field['name'] == 'owner' and field['type'] == 'select': # Make $USER work when restrict_owner = true field['options'].insert(0, '$USER') field_data = {} field_data.update(field) del field_data['name'] fields[field['name']] = field_data modes = {} modes['text'] = [ {'name': _("contains"), 'value': "~"}, {'name': _("doesn't contain"), 'value': "!~"}, {'name': _("begins with"), 'value': "^"}, {'name': _("ends with"), 'value': "$"}, {'name': _("is"), 'value': ""}, {'name': _("is not"), 'value': "!"} ] modes['textarea'] = [ {'name': _("contains"), 'value': "~"}, {'name': _("doesn't contain"), 'value': "!~"}, ] modes['select'] = [ {'name': _("is"), 'value': ""}, {'name': _("is not"), 'value': "!"} ] groups = {} groupsequence = [] for ticket in tickets: if orig_list: # Mark tickets added or changed since the query was first # executed if ticket['time'] > orig_time: ticket['added'] = True elif ticket['changetime'] > orig_time: ticket['changed'] = True if self.group: group_key = ticket[self.group] groups.setdefault(group_key, []).append(ticket) if not groupsequence or group_key not in groupsequence: groupsequence.append(group_key) groupsequence = [(value, groups[value]) for value in groupsequence] # detect whether the last group continues on the next page, # by checking if the extra (max+1)th ticket is in the last group last_group_is_partial = False if groupsequence and self.max and len(tickets) == self.max + 1: del tickets[-1] if len(groupsequence[-1][1]) == 1: # additional ticket started a new group del groupsequence[-1] # remove that additional group else: # additional ticket stayed in the group last_group_is_partial = True del groupsequence[-1][1][-1] # remove the additional ticket results = Paginator(tickets, self.page - 1, self.max, self.num_items) if req: if results.has_next_page: next_href = self.get_href(req.href, max=self.max, page=self.page + 1) add_link(req, 'next', next_href, _('Next Page')) if results.has_previous_page: prev_href = self.get_href(req.href, max=self.max, page=self.page - 1) add_link(req, 'prev', prev_href, _('Previous Page')) else: results.show_index = False pagedata = [] shown_pages = results.get_shown_pages(21) for page in shown_pages: pagedata.append([self.get_href(context.href, page=page), None, str(page), _('Page %(num)d', num=page)]) results.shown_pages = [dict(zip(['href', 'class', 'string', 'title'], p)) for p in pagedata] results.current_page = {'href': None, 'class': 'current', 'string': str(results.page + 1), 'title':None} return {'query': self, 'context': context, 'col': cols, 'row': self.rows, 'constraints': constraints, 'labels': labels, 'headers': headers, 'fields': fields, 'modes': modes, 'tickets': tickets, 'groups': groupsequence or [(None, tickets)], 'last_group_is_partial': last_group_is_partial, 'paginator': results}