Index: ticketdelete/web_ui.py =================================================================== --- ticketdelete/web_ui.py (revision 2447) +++ ticketdelete/web_ui.py (working copy) @@ -1,11 +1,11 @@ # Ticket deleting plugins from trac import __version__ as TRAC_VERSION -from trac import ticket from trac.core import * +from trac.ticket.model import Ticket from trac.web.api import IRequestFilter from trac.web.chrome import ITemplateProvider, add_script, add_stylesheet -from webadmin.web_ui import IAdminPageProvider +from trac.admin.web_ui import IAdminPanelProvider import re, traceback, pprint from time import strftime, localtime @@ -14,52 +14,54 @@ class TicketDeletePlugin(Component): """A small ticket deletion plugin.""" - implements(ITemplateProvider, IAdminPageProvider, IRequestFilter) + implements(ITemplateProvider, IAdminPanelProvider, IRequestFilter) # IRequestFilter methods def pre_process_request(self, req, handler): return handler - def post_process_request(self, req, template, content_type): - if template == 'ticket.cs' and req.perm.has_permission('TICKET_ADMIN'): - add_script(req, 'ticketdelete/jquery.js') + def post_process_request(self, req, template, data, content_type): + if template == 'ticket.html' and req.perm.has_permission('TICKET_ADMIN'): + major, minor = self._get_trac_version() + if major <= 0 and minor < 11: + add_script(req, 'ticketdelete/jquery.js') add_script(req, 'ticketdelete/ticketdelete.js') add_stylesheet(req, 'ticketdelete/ticketdelete.css') - return template, content_type + return template, data, content_type - # IAdminPageProvider methods - def get_admin_pages(self, req): + # IAdminPanelProvider methods + def get_admin_panels(self, req): if req.perm.has_permission('TICKET_ADMIN'): yield ('ticket', 'Ticket System', 'delete', 'Delete') yield ('ticket', 'Ticket System', 'comments', 'Delete Changes') - def process_admin_request(self, req, cat, page, path_info): + def render_admin_panel(self, req, cat, page, path_info): req.perm.assert_permission('TICKET_ADMIN') - data = {} + data={} + ticketdelete = {} + ticketdelete['href'] = req.href('admin', cat, page) + ticketdelete['page'] = page + ticketdelete['redir'] = 1 - data['ticketdelete.href'] = req.href('admin', cat, page) - data['ticketdelete.page'] = page - data['ticketdelete.redir'] = 1 - if req.method == 'POST': if page == 'delete': if 'ticketid' in req.args and 'ticketid2' in req.args: if req.args.get('ticketid') == req.args.get('ticketid2'): - t = self._validate(req, req.args.get('ticketid')) + t, ticketdelete = self._validate(req, req.args.get('ticketid'), data) if t: self._delete_ticket(t.id) - data['ticketdelete.message'] = "Ticket #%s has been deleted." % t.id + ticketdelete['message'] = "Ticket #%s has been deleted." % t.id else: - data['ticketdelete.message'] = "The two IDs did not match. Please try again." + ticketdelete['message'] = "The two IDs did not match. Please try again." elif page == 'comments': if 'ticketid' in req.args: req.redirect(req.href.admin(cat, page, req.args.get('ticketid'))) else: - t = self._validate(req, path_info) + t, ticketdelete = self._validate(req, path_info, ticketdelete) if t: - data['ticketdelete.href'] = req.href('admin', cat, page, path_info) + ticketdelete['href'] = req.href('admin', cat, page, path_info) try: deletions = None if "multidelete" in req.args: @@ -74,16 +76,16 @@ ts = int(ts) self.log.debug('TicketDelete: Deleting change to ticket %s at %s (%s)'%(t.id,ts,field)) self._delete_change(t.id, ts, field) - data['ticketdelete.message'] = "Change to ticket #%s at %s has been modified" % (t.id, strftime('%a, %d %b %Y %H:%M:%S',localtime(ts))) - data['ticketdelete.redir'] = 0 + ticketdelete['message'] = "Change to ticket #%s at %s has been modified" % (t.id, strftime('%a, %d %b %Y %H:%M:%S',localtime(ts))) + ticketdelete['redir'] = 0 except ValueError, e: self.log.debug("TicketDelete: Error is %s"%e) self.log.debug("TicketDelete: args = '%s'"%req.args.items()) - data['ticketdelete.message'] = "Timestamp '%s' not valid" % req.args.get('ts') + ticketdelete['message'] = "Timestamp '%s' not valid" % req.args.get('ts') if path_info: - t = self._validate(req, path_info) + t, ticketdelete = self._validate(req, path_info, ticketdelete) if t: if page == 'comments': try: @@ -96,7 +98,7 @@ data = ticket_data.setdefault(str(time), {}) data.setdefault('fields', {})[field] = {'old': oldvalue, 'new': newvalue} data['author'] = author - data['prettytime'] = strftime('%a, %d %b %Y %H:%M:%S',localtime(time)) + #data['prettytime'] = strftime('%a, %d %b %Y %H:%M:%S',localtime(0.10)) # Remove all attachment changes for k, v in ticket_data.items(): @@ -107,12 +109,17 @@ time_list = list(sorted(ticket_data.iterkeys())) if selected is not None and selected < len(time_list): ticket_data[time_list[selected]]['checked'] = True - data['ticketdelete.changes'] = ticket_data + ticketdelete['changes'] = [] + for time in time_list: + ticketdelete['changes'].append(ticket_data[time]) elif page == 'delete': - data['ticketdelete.id'] = t.id + ticketdelete['id'] = t.id - return 'ticketdelete_admin.html', data, None + #data = {'ticketdelete': ticketdelete} + data['ticketdelete'] = ticketdelete + return 'ticketdelete_admin.html', data + # ITemplateProvider methods def get_templates_dirs(self): """ @@ -145,17 +152,17 @@ else: return (0,0) - def _validate(self, req, arg): + def _validate(self, req, arg, ticketdelete): """Validate that arg is a string containing a valid ticket ID.""" try: id = int(arg) t = Ticket(self.env, id) - return t + return t, ticketdelete except TracError: - data['ticketdelete.message'] = "Ticket #%s not found. Please try again." % id + ticketdelete['message'] = "Ticket #%s not found. Please try again." % id except ValueError: - data['ticketdelete.message'] = "Ticket ID '%s' is not valid. Please try again." % arg - return False + ticketdelete['message'] = "Ticket ID '%s' is not valid. Please try again." % arg + return False, ticketdelete def _delete_ticket(self, id): Index: ticketdelete/htdocs/ticketdelete.js =================================================================== --- ticketdelete/htdocs/ticketdelete.js (revision 2447) +++ ticketdelete/htdocs/ticketdelete.js (working copy) @@ -7,7 +7,10 @@ } else { $('#ticket table.properties').after('
${ticketdelete.message}