def prepare_request(req, environ): href = Href(req.href.all()) anenv = get_allenv(environ, req) req.href = href req.abs_href = Href(req.abs_href.all()) chrome = Chrome(anenv) update_request(req, chrome) # auth must be checked before this method runs, we are not a component yet req.perm = PermissionCache(anenv, req.authname) req.session = Session(anenv, req) loadpaths = chrome.get_all_templates_dirs(); loadpaths.insert(0, os.path.dirname(__file__) + "/templates/") req.hdf = {} populate_hdf(req.hdf, anenv, req) # after populate, add styles and scripts path_info = environ.get('PATH_INFO', '').lstrip('/').split('/') env_name = path_info.pop(0) if len(path_info) == 0 or (len(path_info) == 1 and path_info[0] == ''): add_stylesheet(req, "tram/css/project-list.css") elif path_info[0] == 'roadmap': add_stylesheet(req, 'common/css/roadmap.css') elif path_info[0] == 'timeline': add_stylesheet(req, 'common/css/timeline.css') elif path_info[0] == 'query': add_stylesheet(req, 'common/css/report.css') elif path_info[0] == 'browser': add_stylesheet(req, 'common/css/browser.css') elif path_info[0] == 'search': add_stylesheet(req, 'common/css/search.css') add_stylesheet(req, 'tram/css/whole-search.css') add_script(req, 'tram/js/jquery-1.1.2.pack.js') add_script(req, 'tram/js/jquery.compat-1.0.js') add_script(req, 'tram/js/trac_ws.js') chrome.populate_hdf(req) req.hdf['tram.version'] = "0.3" req.hdf["tram_htdocs_location"] = req.hdf["htdocs_location"].replace("common", "tram") # We want to display the guide whether we are using an "all" env or not # As the elements are already ordered we hijac the about element and reassign it below req.hdf['chrome.nav.metanav.about'] = Markup('<a href="' + href.wiki('TracGuide') + '">Help/Guide</a>') req.hdf['chrome.nav.metanav.help'] = Markup('<a href="' + href.about() + '">About Trac</a>') # Here we are adding some links to plugins as they seem not to be loading now... if (anenv.isall): req.hdf['chrome.nav.mainnav.wiki'] = Markup('<a href="' + href.wiki() + '">Wiki</a>') req.hdf['chrome.nav.mainnav.timeline'] = Markup('<a href="' + href.timeline() + '">' + _('Timeline') + '</a>') req.hdf['chrome.nav.mainnav.roadmap'] = Markup('<a href="' + href.roadmap() + '">' + _('Roadmap') + '</a>') req.hdf['chrome.nav.mainnav.browser'] = Markup('<a href="' + href.browser('/') + '">' + _('Browse Source') + '</a>') req.hdf['chrome.nav.mainnav.tickets'] = Markup('<a href="' + href.query() + '">' + _('View Tickets') + '</a>') req.hdf['chrome.nav.mainnav.search'] = Markup('<a href="' + href.search() + '">' + _('Search') + '</a>') return chrome
def expand_macro(self, formatter, name, text, args=None): assert text.isdigit(), "Argument must be a number" if formatter.req.authname == 'anonymous': return "<div class='assignedtickets'>Not available</div>" out = "<table class='assignedtickets'>" out = out + "<tr><th rowspan='2'>Proyecto</th><th rowspan='2'>New</th><th colspan='5'>Priority</th><th rowspan='2'>Total</th></tr>" out = out + "<tr><th>P1</th><th>P2</th><th>P3</th><th>P4</th><th>>=5</th></tr>" projects = get_project_list(self.env, formatter.req) user = formatter.req.authname project_tickets = [] for project, path, url, env in projects: project_status = get_property(env, 'status', 'unknown') if project_status not in ('unknown', 'active'): continue tickets = { 'new': 0, '1': 0, '2': 0, '3': 0, '4': 0, '>=5': 0, 'total': 0 } cnx = env.get_db_cnx() cursor = cnx.cursor() cursor.execute( """ SELECT enum.value prio_num, enum.name prio_name, COUNT(ticket.id) FROM enum LEFT JOIN ticket ON ticket.priority = enum.name AND status <> 'closed' AND status <> 'new' AND owner = %s WHERE enum.type = 'priority' GROUP BY (enum.value) """, (user, )) #cursor.execute(""" #SELECT enum.value prio_num, COUNT(ticket.id) #FROM ticket #INNER JOIN enum ON enum.name = ticket.priority #WHERE enum.type = 'priority' AND status <> 'closed' AND status <> 'new' AND owner = %s #GROUP BY (enum.value) #""", (user,)) for row in cursor: if row[0] in ('1', '2', '3', '4'): tickets[row[0]] = (row[1], row[2]) else: tickets['>=5'] = tickets['>=5'] + row[2] tickets['total'] = tickets['total'] + row[2] cursor.execute( """ SELECT COUNT(ticket.id) FROM ticket WHERE status = 'new' AND owner = %s """, (user, )) row = cursor.fetchone() if row: tickets['new'] = row[0] tickets['total'] = tickets['total'] + row[0] if tickets['total'] > 0: project_tickets.append((project, url, tickets)) project_tickets.sort( cmp=lambda x, y: x[2]['new'] < y[2]['new'] and 1 or -1) for project, url, tickets in project_tickets[:int(text)]: href = Href(url) out = """%s <tr> <td class='name'><a href='%s'>%s</a></td> <td class='new'><a href='%s'>%d</a></td> <td><a href='%s'>%d</a></td> <td><a href='%s'>%d</a></td> <td><a href='%s'>%d</a></td> <td><a href='%s'>%d</a></td> <td><a href='%s'>%d</a></td> <td class='total'><a href='%s'>%d</a></td> </tr> """ % (out, href.query(), project, href.query(status='new', owner=user), tickets['new'], href.query(status=['!closed', '!new'], priority=tickets['1'][0], owner=user), tickets['1'][1], href.query(status=['!closed', '!new'], priority=tickets['2'][0], owner=user), tickets['2'][1], href.query(status=['!closed', '!new'], priority=tickets['3'][0], owner=user), tickets['3'][1], href.query(status=['!closed', '!new'], priority=tickets['4'][0], owner=user), tickets['4'][1], href.query(status=['!closed', '!new'], owner=user), tickets['>=5'], href.query( status='!closed', owner=user), tickets['total']) if len(project_tickets) > int(text): out = out + "<tr><td colspan='8'>...</td></tr>" out = out + "</table>" return out