Changeset 3526
- Timestamp:
- 04/17/08 14:15:01 (5 months ago)
- Files:
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
ticketdeleteplugin/0.11/ticketdelete/templates/ticketdelete_admin.html
r3339 r3526 48 48 <tr> 49 49 <td><input type="checkbox" name="dontcare" value="dontcare" id="checkbox_${change}" checked="${change.checked or None}" /></td> 50 <td colspan="3"><b>Change at ${ change.prettytime} by ${change.author}</b></td>50 <td colspan="3"><b>Change at ${ticketdelete.changes[change].prettytime} by ${ticketdelete.changes[change].author}</b></td> 51 51 <td><input type="submit" name="delete_${change}" value="Delete change" /></td> 52 52 <tr> 53 <py:for each="field in change.fields">53 <py:for each="field in ticketdelete.changes[change].fields"> 54 54 <tr> 55 <td><input type="checkbox" id="checkbox${field}_${change}" name="mdelete" value="${field}_${change}" checked="${ change.checked or None}" /></td>55 <td><input type="checkbox" id="checkbox${field}_${change}" name="mdelete" value="${field}_${change}" checked="${ticketdelete.changes[change].checked or None}" /></td> 56 56 <td>${field}</td> 57 <py:choose test="name(field)"> 58 <td py:when="comment" colspan="2">${field.new}</td> 59 60 <py:otherwise> 61 <td>${field.old}</td> 62 <td>${field.new}</td> 63 </py:otherwise> 64 </py:choose> 57 <td>${ticketdelete.changes[change].fields[field].old}</td> 58 <td>${ticketdelete.changes[change].fields[field].new}</td> 65 59 <td><input type="submit" name="delete${field}_${change}" value="Delete field" /></td> 66 60 </tr> ticketdeleteplugin/0.11/ticketdelete/web_ui.py
r3339 r3526 9 9 from trac.web.chrome import ITemplateProvider, add_script, add_stylesheet 10 10 from trac.util import sorted 11 from trac.util.datefmt import to_datetime, utc, to_timestamp 11 12 12 13 import re 13 14 import traceback 14 15 import pprint 15 from time import strftime, localtime 16 from time import strftime, localtime, mktime 17 from datetime import datetime 16 18 17 19 __all__ = ['TicketDeletePlugin'] … … 67 69 if t: 68 70 data['href'] = req.href('admin', cat, page, path_info) 69 try:70 deletions = None71 if "multidelete" in req.args:72 deletions = [x.split('_') for x in req.args.getlist('mdelete')]73 deletions.sort(lambda a,b: cmp(b[1],a[1]))74 else:75 buttons = [x[6:] for x in req.args.keys() if x.startswith('delete')]76 deletions = [buttons[0].split('_')]77 if deletions:78 for field, ts indeletions:79 #field, ts = button.split('_')80 ts = int(ts)71 72 deletions = None 73 if "multidelete" in req.args: 74 deletions = [x.split('_') for x in req.args.getlist('mdelete')] 75 deletions.sort(lambda a,b: cmp(b[1],a[1])) 76 else: 77 buttons = [x[6:] for x in req.args.keys() if x.startswith('delete')] 78 deletions = [buttons[0].split('_')] 79 80 if deletions: 81 for field, ts in deletions: 82 if ts != '': 81 83 self.log.debug('TicketDelete: Deleting change to ticket %s at %s (%s)'%(t.id,ts,field)) 82 84 self._delete_change(t.id, ts, field) 83 data['message'] = "Change to ticket #%s at %s has been modified" % (t.id, strftime('%a, %d %b %Y %H:%M:%S',localtime(ts)))85 data['message'] = "Change to ticket #%s at %s has been modified" % (t.id, ts) 84 86 data['redir'] = 0 85 except ValueError, e:86 self.log.debug("TicketDelete: Error is %s"%e)87 self.log.debug("TicketDelete: args = '%s'"%req.args.items())88 data['message'] = "Timestamp '%s' not valid" % req.args.get('ts')89 87 90 88 … … 100 98 ticket_data = {} 101 99 for time, author, field, oldvalue, newvalue, perm in t.get_changelog(): 102 c_data = ticket_data.setdefault( str(time), {})100 c_data = ticket_data.setdefault(to_timestamp(time), {}) 103 101 c_data.setdefault('fields', {})[field] = {'old': oldvalue, 'new': newvalue} 104 102 c_data['author'] = author 105 103 # FIXME: The datetime handling is not working - enable 106 104 # for traceback 107 c_data['prettytime'] = strftime('%a, %d %b %Y %H:%M:%S', localtime(time))105 c_data['prettytime'] = strftime('%a, %d %b %Y %H:%M:%S',time.timetuple()) 108 106 109 # Remove all attachment changes110 for k, v in ticket_data.items():111 if 'attachment' in v.get('fields', {}):112 del ticket_data[k]113 114 107 # Check the boxes next to change number `selected` 115 108 time_list = list(sorted(ticket_data.iterkeys())) … … 189 182 if field: 190 183 if field == 'attachment': 191 pass # Better handling still pending184 cursor.execute("DELETE FROM attachment WHERE type = 'ticket' AND id = %s AND time = %s", (id, ts)) 192 185 else: 193 186 custom_fields = [f['name'] for f in ticket.fields if f.get('custom')] … … 200 193 cursor.execute("DELETE FROM ticket_change WHERE ticket = %s AND time = %s AND field = %s", (id, ts, field)) 201 194 else: 202 for _, _, field, _, _, _ in ticket.get_changelog(t s):195 for _, _, field, _, _, _ in ticket.get_changelog(to_datetime(int(ts), utc)): 203 196 self._delete_change(id, ts, field) 204 197
