Edgewall Software

Ticket #1106: rename_web_ui.diff

File rename_web_ui.diff, 10.5 KB (added by shookie@…, 2 years ago)

make renames available via web interface, on top of rename_base_functionality.2.diff

  • trac/admin/tests/console-tests.txt

    diff --git a/trac/admin/tests/console-tests.txt b/trac/admin/tests/console-tests.txt
    index 270c699..099efd8 100644
    a b Available actions: 
    114114 SEARCH_VIEW, TICKET_ADMIN, TICKET_APPEND, TICKET_CHGPROP, TICKET_CREATE, 
    115115 TICKET_EDIT_CC, TICKET_EDIT_COMMENT, TICKET_EDIT_DESCRIPTION, 
    116116 TICKET_MODIFY, TICKET_VIEW, TIMELINE_VIEW, TRAC_ADMIN, WIKI_ADMIN, 
    117  WIKI_CREATE, WIKI_DELETE, WIKI_MODIFY, WIKI_VIEW 
     117 WIKI_CREATE, WIKI_DELETE, WIKI_MODIFY, WIKI_RENAME, WIKI_VIEW 
    118118 
    119119===== test_permission_add_one_action_ok ===== 
    120120 
    Available actions: 
    148148 SEARCH_VIEW, TICKET_ADMIN, TICKET_APPEND, TICKET_CHGPROP, TICKET_CREATE, 
    149149 TICKET_EDIT_CC, TICKET_EDIT_COMMENT, TICKET_EDIT_DESCRIPTION, 
    150150 TICKET_MODIFY, TICKET_VIEW, TIMELINE_VIEW, TRAC_ADMIN, WIKI_ADMIN, 
    151  WIKI_CREATE, WIKI_DELETE, WIKI_MODIFY, WIKI_VIEW 
     151 WIKI_CREATE, WIKI_DELETE, WIKI_MODIFY, WIKI_RENAME, WIKI_VIEW 
    152152 
    153153===== test_permission_add_multiple_actions_ok ===== 
    154154 
    Available actions: 
    183183 SEARCH_VIEW, TICKET_ADMIN, TICKET_APPEND, TICKET_CHGPROP, TICKET_CREATE, 
    184184 TICKET_EDIT_CC, TICKET_EDIT_COMMENT, TICKET_EDIT_DESCRIPTION, 
    185185 TICKET_MODIFY, TICKET_VIEW, TIMELINE_VIEW, TRAC_ADMIN, WIKI_ADMIN, 
    186  WIKI_CREATE, WIKI_DELETE, WIKI_MODIFY, WIKI_VIEW 
     186 WIKI_CREATE, WIKI_DELETE, WIKI_MODIFY, WIKI_RENAME, WIKI_VIEW 
    187187 
    188188===== test_permission_remove_one_action_ok ===== 
    189189 
    Available actions: 
    216216 SEARCH_VIEW, TICKET_ADMIN, TICKET_APPEND, TICKET_CHGPROP, TICKET_CREATE, 
    217217 TICKET_EDIT_CC, TICKET_EDIT_COMMENT, TICKET_EDIT_DESCRIPTION, 
    218218 TICKET_MODIFY, TICKET_VIEW, TIMELINE_VIEW, TRAC_ADMIN, WIKI_ADMIN, 
    219  WIKI_CREATE, WIKI_DELETE, WIKI_MODIFY, WIKI_VIEW 
     219 WIKI_CREATE, WIKI_DELETE, WIKI_MODIFY, WIKI_RENAME, WIKI_VIEW 
    220220 
    221221===== test_permission_remove_multiple_actions_ok ===== 
    222222 
    Available actions: 
    249249 SEARCH_VIEW, TICKET_ADMIN, TICKET_APPEND, TICKET_CHGPROP, TICKET_CREATE, 
    250250 TICKET_EDIT_CC, TICKET_EDIT_COMMENT, TICKET_EDIT_DESCRIPTION, 
    251251 TICKET_MODIFY, TICKET_VIEW, TIMELINE_VIEW, TRAC_ADMIN, WIKI_ADMIN, 
    252  WIKI_CREATE, WIKI_DELETE, WIKI_MODIFY, WIKI_VIEW 
     252 WIKI_CREATE, WIKI_DELETE, WIKI_MODIFY, WIKI_RENAME, WIKI_VIEW 
    253253 
    254254===== test_component_list_ok ===== 
    255255 
  • trac/htdocs/css/wiki.css

    diff --git a/trac/htdocs/css/wiki.css b/trac/htdocs/css/wiki.css
    index 091f2f6..f109783 100644
    a b  
    4242#changeinfo br { clear: left } 
    4343#changeinfo .options { padding: 0 0 1em 1em } 
    4444#changeinfo .options, #changeinfo .buttons { clear: left } 
    45 #delete, #save { margin-left: 6em } 
     45#delete, #rename, #save { margin-left: 6em } 
    4646#preview { 
    4747 background: #f4f4f4 url(../draft.png); 
    4848 margin: 1em 0 2em; 
  • new file trac/wiki/templates/wiki_rename.html

    diff --git a/trac/wiki/templates/wiki_rename.html b/trac/wiki/templates/wiki_rename.html
    new file mode 100644
    index 0000000..5c5d6dc
    - +  
     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      py:with=" 
     15      current_href = href.wiki(page.name); 
     16     "> 
     17      <h1>${_('Rename')} <a href="$current_href">$page.name</a></h1> 
     18      <form action="$current_href" method="post"> 
     19        <p> 
     20          <input type="hidden" name="action" value="rename" /> 
     21          <strong>Renaming the page will rename all existing versions 
     22          of the page in place. <br /> 
     23          The history of the renamed page will be exactly the same as the one 
     24          of the original page.</strong> 
     25          <br /> 
     26          <p> 
     27            <label for="new_name">New name:</label> 
     28            <input type="text" id="new_name" name="new_name" size="40" value="$page.name" /> 
     29          </p> 
     30          <br /> 
     31          <fieldset id="rename_options" class="group"> 
     32            <legend>${_('Rename')} ${_('Options')}</legend> 
     33            <input type="checkbox" id="leave_redirection" name="leave_redirection"/> 
     34            <label for="leave_redirection">Leave a redirection to the new page.</label> 
     35            <br /> 
     36            <strong>If you choose to leave a redirection, this will  
     37            re-create the $page.name page with a link pointing to the new 
     38            page.</strong> 
     39          </fieldset> 
     40       </p> 
     41        <div class="buttons"> 
     42          <input type="submit" name="cancel" value="${_('Cancel')}" /> 
     43          <input type="submit" value="${_('Rename')} $page.name" /> 
     44        </div> 
     45      </form> 
     46    </div> 
     47  </body> 
     48</html> 
  • trac/wiki/templates/wiki_view.html

    diff --git a/trac/wiki/templates/wiki_view.html b/trac/wiki/templates/wiki_view.html
    index 0715fbe..17880bd 100644
    a b  
    7171 
    7272      <py:with vars="modify_perm = 'WIKI_MODIFY' in perm(page.resource); 
    7373                     delete_perm = 'WIKI_DELETE' in perm(page.resource); 
    74                      admin_perm = 'WIKI_ADMIN' in perm(page.resource)"> 
     74                     admin_perm = 'WIKI_ADMIN' in perm(page.resource); 
     75                           rename_perm = 'WIKI_RENAME' in perm(page.resource)"> 
    7576        <py:if test="admin_perm or (not page.readonly and (modify_perm or delete_perm))"> 
    7677          <div class="buttons"> 
    7778            <py:if test="modify_perm"> 
     
    101102                ${attach_file_form(attachments)} 
    102103              </py:if> 
    103104            </py:if> 
     105            <py:if test="page.exists and rename_perm">  
     106                     <form method="get" action="${href.wiki(page.name)}" id="rename">  
     107                        <div>  
     108                          <input type="hidden" name="action" value="rename" />  
     109                          <input type="submit" value="${_('Rename page')}" />  
     110                        </div>  
     111                     </form>  
     112                  </py:if>  
    104113            <py:if test="page.exists and delete_perm"> 
    105114              <form method="get" action="${href.wiki(page.name)}"> 
    106115                <div id="delete"> 
  • trac/wiki/web_ui.py

    diff --git a/trac/wiki/web_ui.py b/trac/wiki/web_ui.py
    index d8a69fe..677ddec 100644
    a b class WikiModule(Component): 
    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 
    class WikiModule(Component): 
    146146                    return self._render_editor(req, page, action, has_collision) 
    147147            elif action == 'delete': 
    148148                self._do_delete(req, versioned_page) 
     149            elif action == 'rename': 
     150                return self._do_rename(req, page) 
    149151            elif action == 'diff': 
    150152                get_diff_options(req) 
    151153                req.redirect(req.href.wiki(versioned_page.name, action='diff', 
    152154                                           old_version=old_version)) 
    153155        elif action == 'delete': 
    154             return self._render_confirm(req, versioned_page) 
     156            return self._render_confirm_delete(req, versioned_page) 
     157        elif action == 'rename': 
     158            return self._render_confirm_rename(req, page) 
    155159        elif action == 'edit': 
    156160            return self._render_editor(req, versioned_page) 
    157161        elif action == 'diff': 
    class WikiModule(Component): 
    270274                                  version=version, name=page.name)) 
    271275            req.redirect(req.href.wiki(page.name)) 
    272276 
     277    def _do_rename(self, req, page): 
     278        if page.readonly: 
     279            req.perm(page.resource).require('WIKI_ADMIN') 
     280        else: 
     281            req.perm(page.resource).require('WIKI_RENAME') 
     282          
     283        if 'cancel' in req.args: 
     284            req.redirect(get_resource_url(self.env, page.resource, req.href)) 
     285          
     286        new_name = req.args.get('new_name', '').rstrip('/') 
     287        old_name = page.name 
     288        old_version = page.version 
     289        leave_redirection = req.args.get('leave_redirection') 
     290          
     291        # verify input parameters 
     292        warn = None 
     293        if not new_name: 
     294            warn = _("New name is mandatory for a rename.") 
     295        elif new_name == old_name: 
     296            warn = _("New name must be different from old name.") 
     297        if warn: 
     298            add_warning(req, warn) 
     299            return self._render_rename_form(req, page) 
     300         
     301 
     302        @with_transaction(self.env) 
     303        def do_rename(db): 
     304            page.rename(new_name, db) 
     305            if leave_redirection: 
     306                redirection_page = WikiPage(self.env, old_name) 
     307                redirection_page.text = _("See [wiki:%(page)s].", 
     308                                          page=new_name) 
     309                author = get_reporter_id(req) 
     310                comment = _("[wiki:'%(new_name)s@%(old_version)d' " 
     311                            "%(old_name)s] was renamed to %(new_name)s", 
     312                            old_name=old_name, old_version=old_version, 
     313                            new_name=new_name) 
     314                redirection_page.save(author, comment, req.remote_addr, 
     315                                      None, db) 
     316         
     317        req.redirect(req.href.wiki(leave_redirection and old_name or new_name)) 
     318 
     319         
     320 
    273321    def _do_save(self, req, page): 
    274322        if page.readonly: 
    275323            req.perm(page.resource).require('WIKI_ADMIN') 
    class WikiModule(Component): 
    294342            add_warning(req, _("Page not modified, showing latest version.")) 
    295343            return self._render_view(req, page) 
    296344 
    297     def _render_confirm(self, req, page): 
     345    def _render_confirm_delete(self, req, page): 
    298346        if page.readonly: 
    299347            req.perm(page.resource).require('WIKI_ADMIN') 
    300348        else: 
    class WikiModule(Component): 
    319367        self._wiki_ctxtnav(req, page) 
    320368        return 'wiki_delete.html', data, None 
    321369 
     370    def _render_confirm_rename(self, req, page): 
     371        if page.readonly: 
     372            req.perm(page.resource).require('WIKI_ADMIN') 
     373        else: 
     374            req.perm(page.resource).require('WIKI_RENAME') 
     375            
     376            data = self._page_data(req, page, 'rename') 
     377            self._wiki_ctxtnav(req, page) 
     378            return 'wiki_rename.html', data, None 
     379         
     380 
    322381    def _render_diff(self, req, page): 
    323382        if not page.exists: 
    324383            raise TracError(_('Version %(num)s of page "%(name)s" does not '