Edgewall Software

Ticket #1106: rename_ui_redirect.diff

File rename_ui_redirect.diff, 10.8 KB (added by shookie@…, 3 years ago)

cumulative patch, that adds the web ui and the redirect option (but not 301 redirect)

  • trac/htdocs/css/wiki.css

    diff -Naur -x .svn trac-branch/trac/htdocs/css/wiki.css trac-branchA/trac/htdocs/css/wiki.css
    old new  
    1717#changeinfo br { clear: left } 
    1818#changeinfo .options { padding: 0 0 1em 1em } 
    1919#changeinfo .options, #changeinfo .buttons { clear: left } 
    20 #delete, #save { margin-left: 6em } 
     20#delete, #rename, #save { margin-left: 6em }  
    2121#preview { 
    2222 background: #f4f4f4 url(../draft.png); 
    2323 margin: 1em 0 2em; 
  • trac/wiki/templates/wiki_rename.html

    diff -Naur -x .svn trac-branch/trac/wiki/templates/wiki_rename.html trac-branchA/trac/wiki/templates/wiki_rename.html
    old new  
     1<!DOCTYPE html 
     2    PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
     3    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
     4<html xmlns="http://www.w3.org/1999/xhtml" 
     5      xmlns:py="http://genshi.edgewall.org/" 
     6      xmlns:xi="http://www.w3.org/2001/XInclude"> 
     7  <xi:include href="layout.html" /> 
     8  <head> 
     9    <title>$title</title> 
     10  </head> 
     11 
     12  <body> 
     13    <div id="content" class="wiki"> 
     14      <h1>Rename <a href="${href.wiki(page.name)}">$page.name</a></h1> 
     15      <form id="rename" action="${href.wiki(page.name)}" method="post"> 
     16        <input type="hidden" name="action" value="rename" /> 
     17        <p> 
     18          <label for="new_name">New name:</label> 
     19          <input type="text" id="new_name" name="new_name" size="40" value="$page.name" /> 
     20        </p> 
     21        <fieldset id="inplace" class="group"> 
     22          <legend>Rename in-place</legend> 
     23          <p class="hint">Renaming the page will rename all existing versions 
     24          of the page in place. <br /> 
     25          The history of the renamed page will be exactly the same as the one 
     26          of the original page.</p> 
     27          <input type="checkbox" id="leave_redirection" name="leave_redirection"/> 
     28          <label for="leave_redirection">Leave a redirection to the new page.</label> 
     29          <p class="hint">If you choose to leave a redirection, this will  
     30          re-create the $page.name page with a content pointing to the new 
     31          page.</p> 
     32          <div class="buttons"> 
     33            <input type="submit" name="cancel" value="Cancel" /> 
     34            <input type="submit" name="rename" value="Rename" /> 
     35          </div> 
     36        </fieldset> 
     37      </form> 
     38    </div> 
     39  </body> 
     40</html> 
  • trac/wiki/templates/wiki_view.html

    diff -Naur -x .svn trac-branch/trac/wiki/templates/wiki_view.html trac-branchA/trac/wiki/templates/wiki_view.html
    old new  
    6262 
    6363      <py:with vars="modify_perm = 'WIKI_MODIFY' in perm(page.resource); 
    6464                     delete_perm = 'WIKI_DELETE' in perm(page.resource); 
    65                      admin_perm = 'WIKI_ADMIN' in perm(page.resource)"> 
     65                     admin_perm = 'WIKI_ADMIN' in perm(page.resource); 
     66                     rename_perm = 'WIKI_RENAME' in perm(page.resource)"> 
    6667        <py:if test="admin_perm or (not page.readonly and (modify_perm or delete_perm))"> 
    6768          <div class="buttons"> 
    6869            <py:if test="modify_perm"> 
     
    9293                ${attach_file_form(attachments)} 
    9394              </py:if> 
    9495            </py:if> 
    95             <py:if test="page.exists and delete_perm"> 
     96            <py:if test="page.exists and rename_perm">  
     97                     <form method="get" action="${href.wiki(page.name)}">  
     98                        <div id="rename">  
     99                          <input type="hidden" name="action" value="rename" />  
     100                          <input type="submit" value="${_('Rename page')}" />  
     101                        </div>  
     102                      </form>  
     103                    </py:if>  
     104              <py:if test="page.exists and delete_perm"> 
    96105              <form method="get" action="${href.wiki(page.name)}"> 
    97106                <div id="delete"> 
    98107                  <input type="hidden" name="action" value="delete" /> 
  • trac/wiki/web_ui.py

    diff -Naur -x .svn trac-branch/trac/wiki/web_ui.py trac-branchA/trac/wiki/web_ui.py
    old new  
    9494    # IPermissionRequestor methods 
    9595 
    9696    def get_permission_actions(self): 
    97         actions = ['WIKI_CREATE', 'WIKI_DELETE', 'WIKI_MODIFY', 'WIKI_VIEW'] 
     97        actions = ['WIKI_CREATE', 'WIKI_DELETE', 'WIKI_MODIFY', 'WIKI_RENAME', 'WIKI_VIEW'] 
    9898        return actions + [('WIKI_ADMIN', actions)] 
    9999 
    100100    # IRequestHandler methods 
     
    149149                get_diff_options(req) 
    150150                req.redirect(req.href.wiki(versioned_page.name, action='diff', 
    151151                                           old_version=old_version)) 
     152            elif action == 'rename': 
     153                return self._do_rename(req, page) 
    152154        elif action == 'delete': 
    153             return self._render_confirm(req, versioned_page) 
     155            return self._render_confirm_delete(req, versioned_page) 
     156        elif action == 'rename': 
     157            return self._render_rename_form(req, page) 
    154158        elif action == 'edit': 
    155159            return self._render_editor(req, versioned_page) 
    156160        elif action == 'diff': 
     
    269273                                  version=version, name=page.name)) 
    270274            req.redirect(req.href.wiki(page.name)) 
    271275 
     276    def _do_rename(self, req, page): 
     277        if page.readonly: 
     278            req.perm(page.resource).require('WIKI_ADMIN') 
     279        else: 
     280            req.perm(page.resource).require('WIKI_RENAME') 
     281          
     282        if 'cancel' in req.args: 
     283            req.redirect(get_resource_url(self.env, page.resource, req.href)) 
     284          
     285        new_name = req.args.get('new_name', '').rstrip('/') 
     286        old_name = page.name 
     287        old_version = page.version 
     288        leave_redirection = req.args.get('leave_redirection') 
     289          
     290        # verify input parameters 
     291        warn = None 
     292        if not new_name: 
     293            warn = _("New name is mandatory for a rename") 
     294        elif new_name == old_name: 
     295            warn = _("New name must be different from old name.") 
     296        if warn: 
     297            add_warning(req, warn) 
     298            return self._render_confirm_rename(req, page) 
     299         
     300        db = self.env.get_db_cnx() 
     301        page.rename(new_name, db) 
     302 
     303        if leave_redirection: 
     304            redirection_page = WikiPage(self.env, old_name) 
     305            redirection_page.text = _("See [wiki:%(page)s].", page=new_name) 
     306            author = get_reporter_id(req) 
     307            comment = _("[wiki:'%(new_name)s@%(old_version)d' %(old_name)s] " 
     308                        "was renamed to %(new_name)s", 
     309                        old_name=old_name, old_version=old_version, 
     310                        new_name=new_name) 
     311            redirection_page.save(author, comment, req.remote_addr, None, db) 
     312 
     313        db.commit() 
     314        
     315        req.redirect(req.href.wiki(leave_redirection and old_name or new_name))  
     316 
    272317    def _do_save(self, req, page): 
    273318        if page.readonly: 
    274319            req.perm(page.resource).require('WIKI_ADMIN') 
     
    294339            add_warning(req, _("Page not modified, showing latest version.")) 
    295340            return self._render_view(req, page) 
    296341 
    297     def _render_confirm(self, req, page): 
     342    def _render_confirm_delete(self, req, page): 
    298343        if page.readonly: 
    299344            req.perm(page.resource).require('WIKI_ADMIN') 
    300345        else: 
     
    319364        self._wiki_ctxtnav(req, page) 
    320365        return 'wiki_delete.html', data, None 
    321366 
     367    def _render_rename_form(self, req, page): 
     368        if page.readonly: 
     369            req.perm(page.resource).require('WIKI_ADMIN') 
     370        else: 
     371            req.perm(page.resource).require('WIKI_RENAME') 
     372            
     373            data = self._page_data(req, page, 'rename') 
     374            self._wiki_ctxtnav(req, page) 
     375            return 'wiki_rename.html', data, None 
     376 
    322377    def _render_diff(self, req, page): 
    323378        if not page.exists: 
    324379            raise TracError(_('Version %(num)s of page "%(name)s" does not ' 
     
    384439                     _('Version %(num)s', num=next_version)) 
    385440 
    386441        data = self._page_data(req, page, 'diff') 
    387         data.update({  
     442        data.update({ 
    388443            'change': {'date': date, 'author': author, 'ipnr': ipnr, 
    389444                       'comment': comment}, 
    390445            'new_version': new_version, 'old_version': old_version, 
     
    424479        author = get_reporter_id(req, 'author') 
    425480        comment = req.args.get('comment', '') 
    426481        editrows = req.args.get('editrows') 
    427          
     482        
    428483        if editrows: 
    429484            pref = req.session.get('wiki_editrows', '20') 
    430485            if editrows != pref: 
     
    448503            data.update({'diff': diff_data, 'changes': changes, 
    449504                         'action': 'preview', 'merge': action == 'merge', 
    450505                         'longcol': 'Version', 'shortcol': 'v'}) 
    451          
     506        
    452507        self._wiki_ctxtnav(req, page) 
    453508        return 'wiki_edit.html', data, None 
    454509 
     
    518573                            next_version = v 
    519574            except ValueError: 
    520575                version = None 
    521              
     576            
    522577        prefix = self.PAGE_TEMPLATES_PREFIX 
    523578        templates = [template[len(prefix):] for template in 
    524579                     WikiSystem(self.env).get_pages(prefix) if 
     
    538593            parent = page.name[:page.name.rindex('/')] 
    539594            add_link(req, 'up', req.href.wiki(parent, version=None), 
    540595                     _("View parent page")) 
    541          
     596        
    542597        if next_version: 
    543598            add_link(req, 'next', 
    544599                     req.href.wiki(page.name, version=next_version), 
     
    565620            'version': version 
    566621        }) 
    567622        return 'wiki_view.html', data, None 
    568      
     623    
    569624    def _wiki_ctxtnav(self, req, page): 
    570625        """Add the normal wiki ctxtnav entries.""" 
    571626        add_ctxtnav(req, _('Start Page'), req.href.wiki('WikiStart')) 
    572627        add_ctxtnav(req, _('Index'), req.href.wiki('TitleIndex')) 
    573628        if page.exists: 
    574             add_ctxtnav(req, _('History'), req.href.wiki(page.name,  
     629            add_ctxtnav(req, _('History'), req.href.wiki(page.name, 
    575630                                                         action='history')) 
    576631            add_ctxtnav(req, _('Last Change'), 
    577632                        req.href.wiki(page.name, action='diff', 
     
    648703                       '%s: %s' % (name, shorten_line(text)), 
    649704                       datetime.fromtimestamp(ts, utc), author, 
    650705                       shorten_result(text, terms)) 
    651          
     706        
    652707        # Attachments 
    653708        for result in AttachmentModule(self.env).get_search_results( 
    654709            req, wiki_realm, terms):