Ticket #4964: trac-with-userfilter.diff
| File trac-with-userfilter.diff, 6.4 KB (added by yotamrubin@…, 5 years ago) |
|---|
-
templates/timeline.cs
diff -ru mytrac/templates/timeline.cs mytrac-with-userfilter/templates/timeline.cs
old new 1 1 <?cs include "header.cs"?> 2 <?cs include "macros.cs" ?> 2 3 3 4 <div id="ctxtnav" class="nav"></div> 4 5 … … 12 13 <label><input type="text" size="3" name="daysback" value="<?cs 13 14 var:timeline.daysback ?>" /> days back</label>. 14 15 </div> 16 <?cs if:len(timeline.known_users) ?> 17 <div> 18 19 <label>View changes made by user: </label> 20 <?cs call:hdf_select(timeline.known_users, 'username', 0, 1) ?> 21 </div> 22 <?cs /if ?> 23 15 24 <fieldset><?cs 16 25 each:filter = timeline.filters ?> 17 26 <label><input type="checkbox" name="<?cs var:filter.name ?>"<?cs -
trac/Timeline.py
diff -ru mytrac/trac/Timeline.py mytrac-with-userfilter/trac/Timeline.py
old new 89 89 def match_request(self, req): 90 90 return re.match(r'/timeline/?', req.path_info) is not None 91 91 92 def process_request(self, req):93 req.perm.assert_permission('TIMELINE_VIEW')92 def _add_known_users_to_request(self, req): 93 user_list = list(self.env.get_known_users()) 94 94 95 format = req.args.get('format') 96 maxrows = int(req.args.get('max', 0)) 95 # TODO: Add an empty user 96 for index, (username, name, email) in enumerate(user_list): 97 req.hdf["timeline.known_users.%d" % (index,)] = username 97 98 98 # Parse the from date and adjust the timestamp to the last second of 99 # the day 100 t = time.localtime() 99 def _parse_timeline_range(self, req): 100 current_time = time.localtime() 101 101 if req.args.has_key('from'): 102 102 try: 103 t= time.strptime(req.args.get('from'), '%x')103 current_time = time.strptime(req.args.get('from'), '%x') 104 104 except: 105 105 pass 106 106 107 fromdate = time.mktime((t[0], t[1], t[2], 23, 59, 59, t[6], t[7], t[8])) 107 fromdate = time.mktime((current_time[0], current_time[1], 108 current_time[2], 23, 59, 59, current_time[6], 109 current_time[7], current_time[8])) 108 110 try: 109 111 daysback = max(0, int(req.args.get('daysback', ''))) 110 112 except ValueError: … … 112 114 req.hdf['timeline.from'] = format_date(fromdate) 113 115 req.hdf['timeline.daysback'] = daysback 114 116 117 return daysback, fromdate 118 119 120 def _get_filters(self, req): 115 121 available_filters = [] 116 122 for event_provider in self.event_providers: 117 123 available_filters += event_provider.get_timeline_filters(req) … … 134 140 req.session[key] = '1' 135 141 elif req.session.has_key(key): 136 142 del req.session[key] 143 144 user_filter = req.args.get("username") 145 return filters, available_filters, user_filter 146 137 147 138 stop = fromdate 139 start = stop - (daysback + 1) * 86400 140 148 def _get_events(self, req, filters, available_filters, start, stop): 141 149 events = [] 150 maxrows = int(req.args.get('max', 0)) 151 142 152 for event_provider in self.event_providers: 143 153 try: 144 154 events += event_provider.get_timeline_events(req, start, stop, … … 151 161 if maxrows and len(events) > maxrows: 152 162 del events[maxrows:] 153 163 154 re q.hdf['title'] = 'Timeline'164 return events 155 165 156 # Get the email addresses of all known users 166 167 def _populate_request_with_events(self, req, events, format, user_filter): 157 168 email_map = {} 169 158 170 for username, name, email in self.env.get_known_users(): 159 171 if email: 160 172 email_map[username] = email 161 173 162 idx = 0 163 for kind, href, title, date, author, message in events: 174 for index, (kind, href, title, date, author, message) in enumerate(events): 175 # Do not display the event if the user is not explicitly mentioned in the filter 176 if user_filter and author not in user_filter: 177 continue 178 164 179 event = {'kind': kind, 'title': title, 'href': href, 165 180 'author': author or 'anonymous', 166 181 'date': format_date(date), … … 183 198 event['author.email'] = email_map[author] 184 199 event['date'] = http_date(date) 185 200 186 req.hdf['timeline.events.%s' % i dx] = event187 i dx += 1201 req.hdf['timeline.events.%s' % index] = event 202 index += 1 188 203 204 def _populate_request_with_filters(self, req, filters, available_filters): 205 for index, (enabled, label) in enumerate(available_filters): 206 req.hdf['timeline.filters.%d' % index] = {'name': label, 207 'label': label, 'enabled': int(enabled in filters)} 208 209 def process_request(self, req): 210 req.perm.assert_permission('TIMELINE_VIEW') 211 212 format = req.args.get('format') 213 214 filters, available_filters, user_filter = self._get_filters(req) 215 print user_filter, "FUCK FUCK" 216 self._add_known_users_to_request(req) 217 self._populate_request_with_filters(req, filters, available_filters) 218 219 # Parse the from date and adjust the timestamp to the last second of 220 # the day 221 222 223 daysback, fromdate = self._parse_timeline_range(req) 224 stop = fromdate 225 start = stop - (daysback + 1) * (60 * 60 * 24) 226 events = self._get_events(req, filters, available_filters, start, stop,) 227 self._populate_request_with_events(req, events, format, user_filter) 228 229 req.hdf['title'] = 'Timeline' 230 231 # Get the email addresses of all known users 232 # TODO: Agh 189 233 if format == 'rss': 190 234 return 'timeline_rss.cs', 'application/rss+xml' 191 235 … … 194 238 daysback=90, max=50, format='rss') 195 239 add_link(req, 'alternate', rss_href, 'RSS Feed', 'application/rss+xml', 196 240 'rss') 197 for idx,fltr in enumerate(available_filters):198 req.hdf['timeline.filters.%d' % idx] = {'name': fltr[0],199 'label': fltr[1], 'enabled': int(fltr[0] in filters)}200 201 241 return 'timeline.cs', None 202 242 203 243 def _provider_failure(self, exc, req, ep, current_filters, all_filters):
