Edgewall Software

Ticket #1114: wiki_delete_version_range-r3430.patch

File wiki_delete_version_range-r3430.patch, 4.8 kB (added by cboos, 2 years ago)

Implement deletion of the range of versions currently visualized in the wiki diff view

  • trac/wiki/web_ui.py

     
    193193        if req.args.has_key('cancel'): 
    194194            req.redirect(req.href.wiki(page.name)) 
    195195 
    196         version = None 
    197         if req.args.has_key('version'): 
    198             version = int(req.args.get('version', 0)) 
     196        version = int(req.args.get('version', 0)) or None 
     197        old_version = int(req.args.get('old_version', 0)) or version 
    199198 
    200         page.delete(version, db) 
     199        if version and old_version and version > old_version: 
     200            # delete from `old_version` exclusive to `version` inclusive: 
     201            for v in range(old_version, version): 
     202                page.delete(v + 1, db) 
     203        else: 
     204            # only delete that `version`, or the whole page if `None` 
     205            page.delete(version, db) 
    201206        db.commit() 
    202207 
    203208        if not page.exists: 
     
    241246        version = None 
    242247        if req.args.has_key('delete_version'): 
    243248            version = int(req.args.get('version', 0)) 
     249        old_version = int(req.args.get('old_version', 0)) or version 
    244250 
    245251        self._set_title(req, page, 'delete') 
    246252        req.hdf['wiki'] = {'mode': 'delete'} 
    247253        if version is not None: 
    248             req.hdf['wiki.version'] = version 
    249254            num_versions = 0 
    250             for change in page.get_history(): 
    251                 num_versions += 1; 
    252                 if num_versions > 1: 
    253                     break 
    254             req.hdf['wiki.only_version'] = num_versions == 1 
     255            for v,t,author,comment,ipnr in page.get_history(): 
     256                if v >= old_version: 
     257                    num_versions += 1; 
     258                    if num_versions > 1: 
     259                        break 
     260            req.hdf['wiki'] = {'version': version, 'old_version': old_version, 
     261                               'only_version': num_versions == 1} 
    255262 
    256263    def _render_diff(self, req, db, page): 
    257264        req.perm.assert_permission('WIKI_VIEW') 
  • templates/wiki.cs

     
    4141 
    4242<div id="content" class="wiki"> 
    4343 
    44  <?cs if wiki.action == "delete" ?> 
    45   <h1>Delete <?cs 
    46    if:?wiki.version ?>version <?cs var:wiki.version ?> of <?cs /if ?><a href="<?cs 
     44 <?cs if wiki.action == "delete" ?><?cs  
     45  if:wiki.version - wiki.old_version > 1 ?><?cs 
     46   set:first_version = wiki.old_version + 1 ?><?cs 
     47   set:version_range = "versions "+first_version+" to "+wiki.version+" of " ?><?cs 
     48   set:delete_what = "those versions" ?><?cs 
     49  elif:wiki.version ?><?cs 
     50   set:version_range = "version "+wiki.version+" of " ?><?cs 
     51   set:delete_what = "this version" ?><?cs 
     52  else ?><?cs 
     53   set:version_range = "" ?><?cs 
     54   set:delete_what = "page" ?><?cs 
     55  /if ?> 
     56  <h1>Delete <?cs var:version_range ?><a href="<?cs 
    4757    var:wiki.current_href ?>"><?cs var:wiki.page_name ?></a></h1> 
    4858  <form action="<?cs var:wiki.current_href ?>" method="post"> 
    4959   <input type="hidden" name="action" value="delete" /> 
    5060   <p><strong>Are you sure you want to <?cs 
    51     if:!?wiki.version ?>completely <?cs /if ?>delete <?cs 
    52     if:?wiki.version ?>version <?cs var:wiki.version ?> of <?cs 
    53     /if ?>this page?</strong><br /><?cs 
     61    if:!?wiki.version ?>completely <?cs  
     62    /if ?>delete <?cs var:version_range ?>this page?</strong><br /><?cs 
    5463   if:wiki.only_version ?> 
    5564    This is the only version the page, so the page will be removed 
    5665    completely!<?cs 
    5766   /if ?><?cs 
    5867   if:?wiki.version ?> 
    5968    <input type="hidden" name="version" value="<?cs var:wiki.version ?>" /><?cs 
     69   /if ?><?cs 
     70   if:wiki.old_version ?> 
     71    <input type="hidden" name="old_version" value="<?cs var:wiki.old_version ?>" /><?cs 
    6072   /if ?> 
    6173   This is an irreversible operation.</p> 
    6274   <div class="buttons"> 
    6375    <input type="submit" name="cancel" value="Cancel" /> 
    64     <input type="submit" value="Delete <?cs 
    65       if:?wiki.version ?>this version<?cs else ?>page<?cs /if ?>" /> 
     76    <input type="submit" value="Delete <?cs var:delete_what ?>" /> 
    6677   </div> 
    6778  </form> 
    6879  
     
    169180      </table><?cs 
    170181     /if ?> 
    171182    </li> 
    172    </ul> 
     183   </ul><?cs 
     184   if:trac.acl.WIKI_DELETE ?> 
     185    <form method="get" action="<?cs var:wiki.current_href ?>"> 
     186     <input type="hidden" name="action" value="delete" /> 
     187     <input type="hidden" name="version" value="<?cs var:wiki.version ?>" /> 
     188     <input type="hidden" name="old_version" value="<?cs var:wiki.old_version ?>" /> 
     189     <input type="submit" name="delete_version" value="Delete <?cs 
     190     if:wiki.version - wiki.old_version > 1 ?> version <?cs  
     191      var:wiki.old_version+1 ?> to <?cs  
     192     /if ?>version <?cs var:wiki.version ?>" /> 
     193    </form><?cs 
     194   /if ?> 
    173195  </div> 
    174196 
    175197 <?cs elif wiki.action == "history" ?>