def _redirect_back(self, req): """Redirect the user back to the URL she came from.""" if req.query_string: args = parse_query_string(req.query_string) referer = args.get('referer') else: referer = None req.redirect(referer or req.abs_href())
def process_request(self, req): req.perm.assert_permission('TICKET_VIEW') constraints = self._get_constraints(req) args = req.args if not constraints and not 'order' in req.args: # If no constraints are given in the URL, use the default ones. if req.authname and req.authname != 'anonymous': qstring = self.default_query user = req.authname else: email = req.session.get('email') name = req.session.get('name') qstring = self.default_anonymous_query user = email or name or None self.log.debug('QueryModule: Using default query: %s', str(qstring)) if qstring.startswith('?'): ticket_fields = [f['name'] for f in TicketSystem(self.env).get_ticket_fields()] ticket_fields.append('id') args = parse_query_string(qstring[1:]) constraints = dict([(k, args.getlist(k)) for k in args if k in ticket_fields]) else: constraints = Query.from_string(self.env, qstring).constraints # Substitute $USER, or ensure no field constraints that depend # on $USER are used if we have no username. for field, vals in constraints.items(): for (i, val) in enumerate(vals): if user: vals[i] = val.replace('$USER', user) elif val.endswith('$USER'): del constraints[field] break cols = args.get('col') if isinstance(cols, basestring): cols = [cols] # Since we don't show 'id' as an option to the user, # we need to re-insert it here. if cols and 'id' not in cols: cols.insert(0, 'id') rows = args.get('row', []) if isinstance(rows, basestring): rows = [rows] format = req.args.get('format') max = args.get('max') if max is None and format in ('csv', 'tab'): max = 0 # unlimited unless specified explicitly query = Query(self.env, req.args.get('report'), constraints, cols, args.get('order'), 'desc' in args, args.get('group'), 'groupdesc' in args, 'verbose' in args, rows, args.get('page'), max) if 'update' in req.args: # Reset session vars for var in ('query_constraints', 'query_time', 'query_tickets'): if var in req.session: del req.session[var] req.redirect(query.get_href(req.href)) # Add registered converters for conversion in Mimeview(self.env).get_supported_conversions( 'trac.ticket.Query'): add_link(req, 'alternate', query.get_href(req.href, format=conversion[0]), conversion[1], conversion[4], conversion[0]) if format: filename = ('query', None)[format == 'rss'] Mimeview(self.env).send_converted(req, 'trac.ticket.Query', query, format, filename=filename) return self.display_html(req, query)