Ticket #153: privacy.2.diff
| File privacy.2.diff, 13.5 KB (added by Waldemar Kornewald <wkornewald>, 5 years ago) |
|---|
-
trac/ticket/api.py
102 102 field = {'name': 'owner', 'label': 'Owner'} 103 103 if self.restrict_owner: 104 104 field['type'] = 'select' 105 users = [''] # for clearing assignment106 105 perm = PermissionSystem(self.env) 107 for username, name, email in self.env.get_known_users(db): 108 if perm.get_user_permissions(username).get('TICKET_MODIFY'): 109 users.append(username) 110 field['options'] = users 106 def valid_owner(username): 107 return perm.get_user_permissions(username).get('TICKET_MODIFY') 108 field['options'] = [username for username, name, email 109 in self.env.get_known_users() 110 if valid_owner(username)] 111 111 field['optional'] = True 112 112 else: 113 113 field['type'] = 'text' -
trac/ticket/web_ui.py
69 69 """Enable the display of all ticket changes in the timeline 70 70 (''since 0.9'').""") 71 71 72 show_email_addresses = BoolOption('ticket', 'show_email_addresses', 'false', 73 """Show email addresses instead of usernames in RSS feeds 74 (''since 0.11'').""") 75 72 76 # IContentConverter methods 73 77 74 78 def get_supported_conversions(self): … … 603 607 'ticket': ticket, 604 608 'context': Context(self.env, req, 'ticket', ticket.id, db=db), 605 609 'changes': changes, 610 'show_email_addresses': self.show_email_addresses 606 611 } 607 612 608 613 output = Chrome(self.env).render_template(req, 'ticket.rss', data, -
trac/ticket/report.py
278 278 279 279 # Get the email addresses of all known users 280 280 email_map = {} 281 for username, name, email in self.env.get_known_users(): 282 if email: 283 email_map[username] = email 281 show_email_addresses = self.config.getbool('ticket', 'show_email_addresses') 282 data['show_email_addresses'] = show_email_addresses 283 if show_email_addresses: 284 for username, name, email in self.env.get_known_users(): 285 if email: 286 email_map[username] = email 284 287 285 288 # Structure the rows and cells: 286 289 # - group rows according to __group__ value, if defined … … 313 316 # Special casing based on column name 314 317 col = col.strip('_') 315 318 if col == 'reporter': 316 if '@' in value: 319 if show_email_addresses: 320 if '@' in value: 321 cell['author'] = value 322 elif value in email_map: 323 cell['author'] = email_map[value] 324 else: 317 325 cell['author'] = value 318 elif value in email_map:319 cell['author'] = email_map[value]320 326 elif col == 'resource': 321 327 resource = value 322 328 cell_group.append(cell) -
trac/ticket/query.py
684 684 query.verbose = True 685 685 db = self.env.get_db_cnx() 686 686 results = query.execute(req, db) 687 for result in results: 688 if result['reporter'].find('@') == -1: 689 result['reporter'] = '' 687 show_email_addresses = self.config.getbool('ticket', 'show_email_addresses') 688 if show_email_addresses: 689 for result in results: 690 if result['reporter'].find('@') == -1: 691 result['reporter'] = '' 690 692 query_href = req.abs_href.query(group=query.group, 691 693 groupdesc=query.groupdesc and 1 or None, 692 694 verbose=query.verbose and 1 or None, … … 695 697 data = { 696 698 'context': Context(self.env, req), 697 699 'results': results, 700 'show_email_addresses': show_email_addresses, 698 701 'query_href': query_href 699 702 } 700 703 output = Chrome(self.env).render_template(req, 'query.rss', data, -
trac/versioncontrol/web_ui/log.py
179 179 changes = get_changes(repos, revs) 180 180 extra_changes = {} 181 181 email_map = {} 182 show_email_addresses = self.config.getbool('ticket', 183 'show_email_addresses') 182 184 if format == 'rss': 183 185 # Get the email addresses of all known users 184 email_map = {}185 for username,name,email in self.env.get_known_users():186 if email:187 email_map[username] = email186 if show_email_addresses: 187 for username,name,email in self.env.get_known_users(): 188 if email: 189 email_map[username] = email 188 190 elif format == 'changelog': 189 191 for rev in revs: 190 192 changeset = changes[rev] … … 207 209 'path_links': path_links, 208 210 'items': info, 'changes': changes, 209 211 'email_map': email_map, 'extra_changes': extra_changes, 212 'show_email_addresses': show_email_addresses, 210 213 'wiki_format_messages': 211 214 self.config['changeset'].getbool('wiki_format_messages') 212 215 } -
trac/timeline/web_ui.py
138 138 139 139 if format == 'rss': 140 140 # Get the email addresses of all known users 141 email_map = {} 142 for username, name, email in self.env.get_known_users(): 143 if email: 144 email_map[username] = email 145 data['email_map'] = email_map 141 show_email_addresses = self.config.getbool('ticket', 'show_email_addresses') 142 if show_email_addresses: 143 email_map = {} 144 for username, name, email in self.env.get_known_users(): 145 if email: 146 email_map[username] = email 147 data['email_map'] = email_map 148 data['show_email_addresses'] = show_email_addresses 146 149 return 'timeline.rss', data, 'application/rss+xml' 147 150 148 151 add_stylesheet(req, 'common/css/timeline.css') -
templates/report.rss
1 1 <?xml version="1.0"?> 2 <rss version="2.0" xmlns:py="http://genshi.edgewall.org/"> 2 <rss version="2.0" xmlns:py="http://genshi.edgewall.org/" 3 xmlns:dc="http://purl.org/dc/elements/1.1/"> 3 4 <channel> 4 5 <title>$project.name: $report.title</title> 5 6 <link>${abs_href.report(report.id)}</link> … … 17 18 <py:with vars="col = cell.header.col.strip('_')"> 18 19 <py:choose> 19 20 <py:when test="col == 'reporter'"> 20 <author py:if="cell.author">$cell.author</author> 21 <py:if test="cell.author"> 22 <py:choose> 23 <author py:when="show_email_addresses">$cell.author</author> 24 <dc:creator py:otherwise="">$cell.author</cd:creator> 25 </py:choose> 26 </py:if> 21 27 </py:when> 22 28 <py:when test="col in ('time', 'changetime', 'created', 'modified')"> 23 29 <!-- FIXME: we end up with multiple pubDate --> -
templates/revisionlog.rss
1 1 <?xml version="1.0"?> 2 <rss version="2.0" xmlns:py="http://genshi.edgewall.org/"> 2 <rss version="2.0" xmlns:py="http://genshi.edgewall.org/" 3 xmlns:dc="http://purl.org/dc/elements/1.1/"> 3 4 <channel py:with="log_href = abs_href.log(path, rev=rev)"> 4 5 <title>Revisions of $path</title> 5 6 <link>$log_href</link> … … 13 14 </image> 14 15 15 16 <item py:for="item in items" py:with="change = changes[item.rev]; item_context = context('changeset', change.rev, abs_urls=True)"> 16 <author py:if="change.author" py:with="a = change.author">${a and '@' in a and a or email_map.get(a)}</author> 17 <py:if test="change.author"> 18 <py:choose> 19 <author py:when="show_email_addresses" py:with="a = change.author">${a and '@' in a and a or email_map.get(a)}</author> 20 <dc:creator py:otherwise="">${change.author}</dc:creator> 21 </py:choose> 22 </py:if> 17 23 <pubDate>${http_date(change.date)}</pubDate> 18 24 <title>Revision $item.rev: ${shorten_line(change.message)}</title> 19 25 <link>${abs_href.changeset(rev, path)}</link> -
templates/timeline.rss
1 1 <?xml version="1.0"?> 2 <rss version="2.0" xmlns:py="http://genshi.edgewall.org/"> 2 <rss version="2.0" xmlns:py="http://genshi.edgewall.org/" 3 xmlns:dc="http://purl.org/dc/elements/1.1/"> 3 4 <channel> 4 5 <title>${project.name}</title> 5 6 <link>${abs_href.timeline()}</link> … … 14 15 15 16 <item py:for="event in events"> 16 17 <title>${plaintext(event.title, keeplinebreaks=False)}</title> 17 <py:with vars="author=event.author; author = author and '@' in author and author or email_map.get(author)"> 18 <author py:if="author">$author</author> 19 </py:with> 18 <py:choose> 19 <py:when test="show_email_addresses"> 20 <py:with vars="author=event.author; author = author and '@' in author and author or email_map.get(author)"> 21 <author py:if="author">$author</author> 22 </py:with> 23 </py:when> 24 <py:otherwise> 25 <dc:creator py:if="event.author">$event.author</dc:creator> 26 </py:otherwise> 27 </py:choose> 20 28 <pubDate>${http_date(event.date)}</pubDate> 21 29 <link>${event.abs_href}</link> 22 30 <guid isPermaLink="false">${event.abs_href}/${event.dateuid()}</guid> -
templates/ticket.rss
1 1 <?xml version="1.0"?> 2 <rss version="2.0" xmlns:py="http://genshi.edgewall.org/"> 2 <rss version="2.0" xmlns:py="http://genshi.edgewall.org/" 3 xmlns:dc="http://purl.org/dc/elements/1.1/"> 3 4 <channel py:with="abs_context = context(abs_urls=True)"> 4 5 <title>${project.name}: Ticket $title</title> 5 6 <link>${abs_href.ticket(ticket.id)}</link> … … 13 14 <generator>Trac $trac.version</generator> 14 15 15 16 <item py:for="change in changes"> 16 <author py:if="change.author">$change.author</author> 17 <py:if test="change.author"> 18 <py:choose> 19 <author py:when="show_email_addresses">$change.author</author> 20 <dc:creator py:otherwise="">$change.author</dc:creator> 21 </py:choose> 22 </py:if> 17 23 <pubDate>${http_date(change.date)}</pubDate> 18 24 <title>$change.title</title> 19 25 <link>${abs_href.ticket(ticket.id)}<py:if test="change.cnum">#comment:$change.cnum</py:if></link> … … 38 44 </py:for> 39 45 </ul> 40 46 </py:if> 41 ${unicode(abs_context.wiki_to_html(change.comment , absurls=True))}47 ${unicode(abs_context.wiki_to_html(change.comment))} 42 48 </description> 43 49 <category>Ticket</category> 44 50 </item> -
templates/query.rss
1 1 <?xml version="1.0"?> 2 <rss version="2.0" xmlns:py="http://genshi.edgewall.org/"> 2 <rss version="2.0" xmlns:py="http://genshi.edgewall.org/" 3 xmlns:dc="http://purl.org/dc/elements/1.1/"> 3 4 <channel> 4 5 <title>$project.name: Ticket Query</title> 5 6 <link>$query_href</link> … … 16 17 <guid isPermaLink="false">$href</guid> 17 18 <title>#$result.id: $result.summary</title> 18 19 <pubDate py:if="result.time">${http_date(result.time)}</pubDate> 19 <author py:if="result.reporter">$result.reporter</author> 20 <py:if test="result.reporter"> 21 <py:choose> 22 <author py:when="show_email_addresses">$result.reporter</author> 23 <dc:creator py:otherwise="">$result.reporter</dc:creator> 24 </py:choose> 25 </py:if> 20 26 <description>${unicode(context('ticket', result.id, abs_urls=True).wiki_to_html(result.description))}</description> 21 27 <category>Results</category> 22 28 <comments>$href#changelog</comments>
