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