# rereads the settings del req.session['watchlist_display_notify_navitems'] except: pass req.redirect(req.href('watchlist')) elif action == "defaultsettings": # Only execute if sent using the watchlist preferences form if onwatchlistpage and req.method == 'POST': self._delete_user_settings(req.authname) req.redirect(req.href('watchlist')) redirectback_notify = options['stay_at_resource_notify'] and not \ onwatchlistpage and not async if action == "notifyon": if not self.res_exists(realm, resid): raise HTTPNotFound(t_("Page %(name)s not found", name=resid)) elif self.wsub and options['notifications']: self.set_notify(req, realm, resid) db.commit() if redirectback_notify: if options['show_messages_on_resource_page']: req.session['watchlist_notify_message'] = _( """ You are now receiving change notifications about this resource. """ ) req.redirect(req.href(realm,resid)) if async: req.send("",'text/plain', 200) else:
def get_list(self, realm, wl, req, fields=None): db = self.env.get_db_cnx() cursor = db.cursor() context = Context.from_request(req) locale = getattr(req, 'locale', LC_TIME) ticketlist = [] extradict = {} if not fields: fields = set(self.default_fields['ticket']) else: fields = set(fields) if 'changetime' in fields: max_changetime = datetime(1970, 1, 1, tzinfo=utc) min_changetime = datetime.now(utc) if 'time' in fields: max_time = datetime(1970, 1, 1, tzinfo=utc) min_time = datetime.now(utc) for sid, last_visit in wl.get_watched_resources( 'ticket', req.authname): ticketdict = {} try: ticket = Ticket(self.env, sid, db) exists = ticket.exists except: exists = False if not exists: ticketdict['deleted'] = True if 'id' in fields: ticketdict['id'] = sid ticketdict['ID'] = '#' + sid if 'author' in fields: ticketdict['author'] = '?' if 'changetime' in fields: ticketdict['changedsincelastvisit'] = 1 ticketdict['changetime'] = '?' ticketdict['ichangetime'] = 0 if 'time' in fields: ticketdict['time'] = '?' ticketdict['itime'] = 0 if 'comment' in fields: ticketdict['comment'] = tag.strong(t_("deleted"), class_='deleted') if 'notify' in fields: ticketdict['notify'] = wl.is_notify(req, 'ticket', sid) if 'description' in fields: ticketdict['description'] = '' if 'owner' in fields: ticketdict['owner'] = '' if 'reporter' in fields: ticketdict['reporter'] = '' ticketlist.append(ticketdict) continue render_elt = lambda x: x if not (Chrome(self.env).show_email_addresses or \ 'EMAIL_VIEW' in req.perm(ticket.resource)): render_elt = obfuscate_email_address # Copy all requested fields from ticket if fields: for f in fields: ticketdict[f] = ticket.values.get(f, u'') else: ticketdict = ticket.values.copy() changetime = ticket.time_changed if wl.options['attachment_changes']: for attachment in Attachment.select(self.env, 'ticket', sid, db): if attachment.date > changetime: changetime = attachment.date if 'attachment' in fields: attachments = [] for attachment in Attachment.select(self.env, 'ticket', sid, db): wikitext = u'[attachment:"' + u':'.join([ attachment.filename, 'ticket', sid ]) + u'" ' + attachment.filename + u']' attachments.extend([ tag(', '), format_to_oneliner(self.env, context, wikitext, shorten=False) ]) if attachments: attachments.reverse() attachments.pop() ticketdict['attachment'] = moreless(attachments, 5) # Changes are special. Comment, commentnum and last author are included in them. if 'changes' in fields or 'author' in fields or 'comment' in fields or 'commentnum' in fields: changes = [] # If there are now changes the reporter is the last author author = ticket.values['reporter'] commentnum = u"0" comment = u"" want_changes = 'changes' in fields for date, cauthor, field, oldvalue, newvalue, permanent in ticket.get_changelog( changetime, db): author = cauthor if field == 'comment': if 'commentnum' in fields: ticketdict['commentnum'] = to_unicode(oldvalue) if 'comment' in fields: comment = to_unicode(newvalue) comment = moreless(comment, 200) ticketdict['comment'] = comment if not want_changes: break else: if want_changes: label = self.fields['ticket'].get(field, u'') if label: changes.extend([ tag( tag.strong(label), ' ', render_property_diff( self.env, req, ticket, field, oldvalue, newvalue)), tag('; ') ]) if want_changes: # Remove the last tag('; '): if changes: changes.pop() changes = moreless(changes, 5) ticketdict['changes'] = tag(changes) if 'id' in fields: ticketdict['id'] = sid ticketdict['ID'] = format_to_oneliner(self.env, context, '#' + sid, shorten=True) if 'cc' in fields: if render_elt == obfuscate_email_address: ticketdict['cc'] = ', '.join( [render_elt(c) for c in ticketdict['cc'].split(', ')]) if 'author' in fields: ticketdict['author'] = render_elt(author) if 'changetime' in fields: ichangetime = to_timestamp(changetime) ticketdict.update( changetime=format_datetime(changetime, locale=locale, tzinfo=req.tz), ichangetime=ichangetime, changedsincelastvisit=(last_visit < ichangetime and 1 or 0), changetime_delta=pretty_timedelta(changetime), changetime_link=req.href.timeline( precision='seconds', from_=trac_format_datetime(changetime, 'iso8601', tzinfo=req.tz))) if changetime > max_changetime: max_changetime = changetime if changetime < min_changetime: min_changetime = changetime if 'time' in fields: time = ticket.time_created ticketdict.update(time=format_datetime(time, locale=locale, tzinfo=req.tz), itime=to_timestamp(time), time_delta=pretty_timedelta(time), time_link=req.href.timeline( precision='seconds', from_=trac_format_datetime( time, 'iso8601', tzinfo=req.tz))) if time > max_time: max_time = time if time < min_time: min_time = time if 'description' in fields: description = ticket.values['description'] description = moreless(description, 200) ticketdict['description'] = description if 'notify' in fields: ticketdict['notify'] = wl.is_notify(req, 'ticket', sid) if 'owner' in fields: ticketdict['owner'] = render_elt(ticket.values['owner']) if 'reporter' in fields: ticketdict['reporter'] = render_elt(ticket.values['reporter']) if 'tags' in fields and self.tagsystem: tags = [] for t in self.tagsystem.get_tags(req, Resource('ticket', sid)): tags.extend( [tag.a(t, href=req.href('tags', q=t)), tag(', ')]) if tags: tags.pop() ticketdict['tags'] = moreless(tags, 10) ticketlist.append(ticketdict) if 'changetime' in fields: extradict['max_changetime'] = format_datetime(max_changetime, locale=locale, tzinfo=req.tz) extradict['min_changetime'] = format_datetime(min_changetime, locale=locale, tzinfo=req.tz) if 'time' in fields: extradict['max_time'] = format_datetime(max_time, locale=locale, tzinfo=req.tz) extradict['min_time'] = format_datetime(min_time, locale=locale, tzinfo=req.tz) return ticketlist, extradict
def get_list(self, realm, wl, req, fields=None): db = self.env.get_db_cnx() cursor = db.cursor() user = req.authname locale = getattr( req, 'locale', LC_TIME) context = Context.from_request(req) wikilist = [] extradict = {} if not fields: fields = set(self.default_fields['wiki']) else: fields = set(fields) if 'changetime' in fields: max_changetime = datetime(1970,1,1,tzinfo=utc) min_changetime = datetime.now(utc) for name, last_visit in wl.get_watched_resources( 'wiki', req.authname ): wikipage = WikiPage(self.env, name, db=db) wikidict = {} if not wikipage.exists: wikidict['deleted'] = True if 'name' in fields: wikidict['name'] = name if 'author' in fields: wikidict['author'] = '?' if 'changetime' in fields: wikidict['changedsincelastvisit'] = 1 wikidict['changetime'] = '?' wikidict['ichangetime'] = 0 if 'comment' in fields: wikidict['comment'] = tag.strong(t_("deleted"), class_='deleted') if 'notify' in fields: wikidict['notify'] = wl.is_notify(req, 'wiki', name) wikilist.append(wikidict) continue comment = wikipage.comment changetime = wikipage.time author = wikipage.author if wl.options['attachment_changes']: latest_attachment = None for attachment in Attachment.select(self.env, 'wiki', name, db): if attachment.date > changetime: latest_attachment = attachment if latest_attachment: changetime = latest_attachment.date author = latest_attachment.author if 'comment' in fields: wikitext = '[attachment:"' + ':'.join([latest_attachment.filename,'wiki',name]) + \ '" ' + latest_attachment.filename + ']' desc = latest_attachment.description comment = tag(tag_("Attachment %(attachment)s added",\ attachment=format_to_oneliner(self.env, context, wikitext, shorten=False)), desc and ': ' or '.', moreless(desc,10)) if 'attachment' in fields: attachments = [] for attachment in Attachment.select(self.env, 'wiki', name, db): wikitext = '[attachment:"' + ':'.join([attachment.filename,'wiki',name]) + '" ' + attachment.filename + ']' attachments.extend([tag(', '), format_to_oneliner(self.env, context, wikitext, shorten=False)]) if attachments: attachments.reverse() attachments.pop() ticketdict['attachment'] = moreless(attachments, 5) if 'name' in fields: wikidict['name'] = name if 'author' in fields: if not (Chrome(self.env).show_email_addresses or 'EMAIL_VIEW' in req.perm(wikipage.resource)): wikidict['author'] = obfuscate_email_address(author) else: wikidict['author'] = author if 'version' in fields: wikidict['version'] = unicode(wikipage.version) if 'changetime' in fields: wikidict['changetime'] = format_datetime( changetime, locale=locale, tzinfo=req.tz ) wikidict['ichangetime'] = to_timestamp( changetime ) wikidict['changedsincelastvisit'] = last_visit < wikidict['ichangetime'] and 1 or 0 wikidict['timedelta'] = pretty_timedelta( changetime ) wikidict['timeline_link'] = req.href.timeline(precision='seconds', from_=trac_format_datetime ( changetime, 'iso8601', tzinfo=req.tz)) if changetime > max_changetime: max_changetime = changetime if changetime < min_changetime: min_changetime = changetime if 'comment' in fields: comment = moreless(comment or "", 200) wikidict['comment'] = comment if 'notify' in fields: wikidict['notify'] = wl.is_notify(req, 'wiki', name) if 'readonly' in fields: wikidict['readonly'] = wikipage.readonly and t_("yes") or t_("no") if 'tags' in fields and self.tagsystem: tags = [] for t in self.tagsystem.get_tags(req, Resource('wiki', name)): tags.extend([tag.a(t,href=req.href('tags',q=t)), tag(', ')]) if tags: tags.pop() wikidict['tags'] = moreless(tags, 10) #if 'ipnr' in fields: # wikidict['ipnr'] = wikipage.ipnr, # Note: Not supported by Trac 0.12 wikilist.append(wikidict) if 'changetime' in fields: extradict['max_changetime'] = format_datetime( max_changetime, locale=locale, tzinfo=req.tz ) extradict['min_changetime'] = format_datetime( min_changetime, locale=locale, tzinfo=req.tz ) return wikilist, extradict
# rereads the settings del req.session['watchlist_display_notify_navitems'] except: pass req.redirect(req.href('watchlist')) elif action == "defaultsettings": # Only execute if sent using the watchlist preferences form if onwatchlistpage and req.method == 'POST': self._delete_user_settings(req.authname) req.redirect(req.href('watchlist')) redirectback_notify = options['stay_at_resource_notify'] and not \ onwatchlistpage and not async if action == "notifyon": if not self.res_exists(realm, resid): raise HTTPNotFound(t_("Page %(name)s not found", name=resid)) elif self.wsub and options['notifications']: self.set_notify(req, realm, resid) db.commit() if redirectback_notify: if options['show_messages_on_resource_page']: req.session['watchlist_notify_message'] = _(""" You are now receiving change notifications about this resource. """) req.redirect(req.href(realm, resid)) if async: req.send("", 'text/plain', 200) else: req.redirect(req.href('watchlist')) elif action == "notifyoff":
def get_list(self, realm, wl, req, fields=None): db = self.env.get_db_cnx() cursor = db.cursor() context = Context.from_request(req) locale = getattr( req, 'locale', LC_TIME) ticketlist = [] extradict = {} if not fields: fields = set(self.default_fields['ticket']) else: fields = set(fields) if 'changetime' in fields: max_changetime = datetime(1970,1,1,tzinfo=utc) min_changetime = datetime.now(utc) if 'time' in fields: max_time = datetime(1970,1,1,tzinfo=utc) min_time = datetime.now(utc) for sid,last_visit in wl.get_watched_resources( 'ticket', req.authname ): ticketdict = {} try: ticket = Ticket(self.env, sid, db) exists = ticket.exists except: exists = False if not exists: ticketdict['deleted'] = True if 'id' in fields: ticketdict['id'] = sid ticketdict['ID'] = '#' + sid if 'author' in fields: ticketdict['author'] = '?' if 'changetime' in fields: ticketdict['changedsincelastvisit'] = 1 ticketdict['changetime'] = '?' ticketdict['ichangetime'] = 0 if 'time' in fields: ticketdict['time'] = '?' ticketdict['itime'] = 0 if 'comment' in fields: ticketdict['comment'] = tag.strong(t_("deleted"), class_='deleted') if 'notify' in fields: ticketdict['notify'] = wl.is_notify(req, 'ticket', sid) if 'description' in fields: ticketdict['description'] = '' if 'owner' in fields: ticketdict['owner'] = '' if 'reporter' in fields: ticketdict['reporter'] = '' ticketlist.append(ticketdict) continue render_elt = lambda x: x if not (Chrome(self.env).show_email_addresses or \ 'EMAIL_VIEW' in req.perm(ticket.resource)): render_elt = obfuscate_email_address # Copy all requested fields from ticket if fields: for f in fields: ticketdict[f] = ticket.values.get(f,u'') else: ticketdict = ticket.values.copy() changetime = ticket.time_changed if wl.options['attachment_changes']: for attachment in Attachment.select(self.env, 'ticket', sid, db): if attachment.date > changetime: changetime = attachment.date if 'attachment' in fields: attachments = [] for attachment in Attachment.select(self.env, 'ticket', sid, db): wikitext = u'[attachment:"' + u':'.join([attachment.filename,'ticket',sid]) + u'" ' + attachment.filename + u']' attachments.extend([tag(', '), format_to_oneliner(self.env, context, wikitext, shorten=False)]) if attachments: attachments.reverse() attachments.pop() ticketdict['attachment'] = moreless(attachments, 5) # Changes are special. Comment, commentnum and last author are included in them. if 'changes' in fields or 'author' in fields or 'comment' in fields or 'commentnum' in fields: changes = [] # If there are now changes the reporter is the last author author = ticket.values['reporter'] commentnum = u"0" comment = u"" want_changes = 'changes' in fields for date,cauthor,field,oldvalue,newvalue,permanent in ticket.get_changelog(changetime,db): author = cauthor if field == 'comment': if 'commentnum' in fields: ticketdict['commentnum'] = to_unicode(oldvalue) if 'comment' in fields: comment = to_unicode(newvalue) comment = moreless(comment, 200) ticketdict['comment'] = comment if not want_changes: break else: if want_changes: label = self.fields['ticket'].get(field,u'') if label: changes.extend( [ tag(tag.strong(label), ' ', render_property_diff(self.env, req, ticket, field, oldvalue, newvalue) ), tag('; ') ]) if want_changes: # Remove the last tag('; '): if changes: changes.pop() changes = moreless(changes, 5) ticketdict['changes'] = tag(changes) if 'id' in fields: ticketdict['id'] = sid ticketdict['ID'] = format_to_oneliner(self.env, context, '#' + sid, shorten=True) if 'cc' in fields: if render_elt == obfuscate_email_address: ticketdict['cc'] = ', '.join([ render_elt(c) for c in ticketdict['cc'].split(', ') ]) if 'author' in fields: ticketdict['author'] = render_elt(author) if 'changetime' in fields: ichangetime = to_timestamp( changetime ) ticketdict.update( changetime = format_datetime( changetime, locale=locale, tzinfo=req.tz ), ichangetime = ichangetime, changedsincelastvisit = (last_visit < ichangetime and 1 or 0), changetime_delta = pretty_timedelta( changetime ), changetime_link = req.href.timeline(precision='seconds', from_=trac_format_datetime ( changetime, 'iso8601', tzinfo=req.tz))) if changetime > max_changetime: max_changetime = changetime if changetime < min_changetime: min_changetime = changetime if 'time' in fields: time = ticket.time_created ticketdict.update( time = format_datetime( time, locale=locale, tzinfo=req.tz ), itime = to_timestamp( time ), time_delta = pretty_timedelta( time ), time_link = req.href.timeline(precision='seconds', from_=trac_format_datetime ( time, 'iso8601', tzinfo=req.tz ))) if time > max_time: max_time = time if time < min_time: min_time = time if 'description' in fields: description = ticket.values['description'] description = moreless(description, 200) ticketdict['description'] = description if 'notify' in fields: ticketdict['notify'] = wl.is_notify(req, 'ticket', sid) if 'owner' in fields: ticketdict['owner'] = render_elt(ticket.values['owner']) if 'reporter' in fields: ticketdict['reporter'] = render_elt(ticket.values['reporter']) if 'tags' in fields and self.tagsystem: tags = [] for t in self.tagsystem.get_tags(req, Resource('ticket', sid)): tags.extend([tag.a(t,href=req.href('tags',q=t)), tag(', ')]) if tags: tags.pop() ticketdict['tags'] = moreless(tags, 10) ticketlist.append(ticketdict) if 'changetime' in fields: extradict['max_changetime'] = format_datetime( max_changetime, locale=locale, tzinfo=req.tz ) extradict['min_changetime'] = format_datetime( min_changetime, locale=locale, tzinfo=req.tz ) if 'time' in fields: extradict['max_time'] = format_datetime( max_time, locale=locale, tzinfo=req.tz ) extradict['min_time'] = format_datetime( min_time, locale=locale, tzinfo=req.tz ) return ticketlist, extradict