1 | # -*- coding: utf-8 -*- |
---|
2 | # |
---|
3 | # Copyright (C) 2010-2011 Malcolm Studd <mestudd@gmail.com> |
---|
4 | # Copyright (C) 2012-2013 Ryan J Ollos <ryan.j.ollos@gmail.com> |
---|
5 | # All rights reserved. |
---|
6 | # |
---|
7 | # This software is licensed as described in the file COPYING, which |
---|
8 | # you should have received as part of this distribution. |
---|
9 | # |
---|
10 | |
---|
11 | from datetime import datetime |
---|
12 | |
---|
13 | from genshi.builder import tag |
---|
14 | from trac.core import Component, implements |
---|
15 | from trac.resource import Resource |
---|
16 | from trac.ticket import Version |
---|
17 | from trac.ticket.roadmap import RoadmapModule |
---|
18 | from trac.util.datefmt import utc |
---|
19 | from trac.util.translation import _ |
---|
20 | from trac.web.api import IRequestHandler |
---|
21 | from trac.web.chrome import( |
---|
22 | INavigationContributor, add_stylesheet |
---|
23 | ) |
---|
24 | |
---|
25 | |
---|
26 | class ReleasesModule(Component): |
---|
27 | implements(INavigationContributor, IRequestHandler) |
---|
28 | |
---|
29 | # INavigationContributor methods |
---|
30 | |
---|
31 | def get_active_navigation_item(self, req): |
---|
32 | return 'versions' |
---|
33 | |
---|
34 | def get_navigation_items(self, req): |
---|
35 | if 'VERSION_VIEW' in req.perm: |
---|
36 | if self.env.enabled[RoadmapModule]: |
---|
37 | label = _("Versions") |
---|
38 | else: |
---|
39 | label = _("Roadmap") |
---|
40 | yield ('mainnav', 'versions', |
---|
41 | tag.a(label, href=req.href.versions())) |
---|
42 | |
---|
43 | # IRequestHandler methods |
---|
44 | |
---|
45 | def match_request(self, req): |
---|
46 | return req.path_info == '/versions' |
---|
47 | |
---|
48 | def process_request(self, req): |
---|
49 | req.perm.require('VERSION_VIEW') |
---|
50 | |
---|
51 | showall = req.args.get('show') == 'all' |
---|
52 | |
---|
53 | versions = [] |
---|
54 | for v in Version.select(self.env): |
---|
55 | resource = Resource('version', v.name) |
---|
56 | is_released = v.time and v.time < datetime.now(utc) |
---|
57 | |
---|
58 | if (showall or not is_released) and \ |
---|
59 | 'VERSION_VIEW' in req.perm(resource): |
---|
60 | v.is_released = is_released |
---|
61 | v.resource = resource |
---|
62 | versions.append(v) |
---|
63 | |
---|
64 | versions.reverse() |
---|
65 | |
---|
66 | data = { |
---|
67 | 'versions': versions, |
---|
68 | 'showall': showall, |
---|
69 | 'roadmap_navigation': not self.env.enabled[RoadmapModule] |
---|
70 | } |
---|
71 | add_stylesheet(req, 'common/css/roadmap.css') |
---|
72 | return 'versions.html', data, None |
---|