Attachment 'RenamePage.py'

Download

   1 # -*- coding: iso-8859-1 -*-
   2 """
   3     MoinMoin - RenamePage action
   4 
   5     This action allows you to rename a page.
   6 
   7     @copyright: 2002-2004 Michael Reinsch <mr@uue.org>,
   8                 2006-2007 MoinMoin:ThomasWaldmann,
   9                 2007 MoinMoin:ReimarBauer
  10     @license: GNU GPL, see COPYING for details.
  11 """
  12 import re
  13 from MoinMoin import wikiutil
  14 from MoinMoin.Page import Page
  15 from MoinMoin.PageEditor import PageEditor
  16 from MoinMoin.action import ActionBase
  17 
  18 class RenamePage(ActionBase):
  19     """ Rename page action
  20 
  21     Note: the action name is the class name
  22     """
  23     def __init__(self, pagename, request):
  24         ActionBase.__init__(self, pagename, request)
  25         self.use_ticket = True
  26         _ = self._
  27         self.form_trigger = 'rename'
  28         self.form_trigger_label = _('Rename Page')
  29         filterfn = re.compile(ur"^%s/.*$" % re.escape(pagename), re.U).match
  30         subpagenames = request.rootpage.getPageList(user='', exists=1, filter=filterfn)
  31         self.subpages = [pagename for pagename in subpagenames if self.request.user.may.delete(pagename)]
  32 
  33         form = self.request.form
  34         self.redirect = 0
  35         if 'rename_redirect' in form:
  36             try:
  37                 self.redirect = int(form['rename_redirect'])
  38             except:
  39                 pass
  40 
  41 
  42     def is_allowed(self):
  43         may = self.request.user.may
  44         return may.write(self.pagename) and may.delete(self.pagename)
  45 
  46     def check_condition(self):
  47         _ = self._
  48         if not self.page.exists():
  49             return _('This page is already deleted or was never created!')
  50         else:
  51             return None
  52 
  53     def do_action(self):
  54         """ Rename this page to "pagename" """
  55         _ = self._
  56         form = self.form
  57         newpagename = form.get('newpagename', [u''])
  58         #newpagename = self.request.normalizePagename(newpagename)
  59         newpagename = wikiutil.normalize_pagename(newpagename, self.cfg)
  60         comment = form.get('comment', u'')
  61         comment = wikiutil.clean_input(comment)
  62         rename_redirect = self.redirect
  63 
  64         rename_subpages = 0
  65         if 'rename_subpages' in form:
  66             try:
  67                 rename_subpages = int(form['rename_subpages'])
  68             except:
  69                 pass
  70 
  71 
  72         self.page = PageEditor(self.request, self.pagename)
  73         success, msgs = self.page.renamePage(newpagename, comment)
  74 
  75         if not success:
  76             return success, msgs
  77 
  78         if rename_redirect:
  79             self.page = PageEditor(self.request, self.pagename)
  80             self.page.saveText('#redirect %s' % newpagename, 0)
  81 
  82         if rename_subpages and self.subpages:
  83             for name in self.subpages:
  84                 self.page = PageEditor(self.request, name)
  85                 new_subpagename = name.replace(self.pagename, newpagename, 1)
  86                 success_i, msg = self.page.renamePage(new_subpagename, comment)
  87                 msgs = "%s %s" % (msgs, msg)
  88 
  89                 if rename_redirect and success_i:
  90                     self.page = PageEditor(self.request, name)
  91                     self.page.saveText('#redirect %s' % new_subpagename, 0)
  92 
  93 
  94         self.newpagename = newpagename # keep there for finish
  95         return success, msgs
  96 
  97     def do_action_finish(self, success):
  98         if success:
  99             url = Page(self.request, self.newpagename).url(self.request)
 100             self.request.http_redirect(url)
 101             self.request.finish()
 102         else:
 103             self.render_msg(self.make_form(), "dialog")
 104 
 105     def get_form_html(self, buttons_html):
 106         _ = self._
 107         if self.subpages:
 108             subpages = ' '.join(self.subpages)
 109 
 110             d = {
 111                 'subpage': subpages,
 112                 'subpages_checked': ('', 'checked')[self.request.form.get('subpages_checked', ['0']) == '1'],
 113                 'subpage_label': _('Rename all /subpages too?'),
 114                 'pagename': wikiutil.escape(self.pagename, True),
 115                 'newname_label': _("New name"),
 116                 'comment_label': _("Optional reason for the renaming"),
 117                 'buttons_html': buttons_html,
 118                 'querytext': _('Really rename this page?'),
 119                 'redirect': self.redirect,
 120                 'redirect_label': _('Create redirect for renamed pages?'),
 121                 }
 122 
 123             return '''
 124 <strong>%(querytext)s</strong>
 125 <br>
 126 <br>
 127 <table>
 128     <tr>
 129     <dd>
 130         %(subpage_label)s<input type="checkbox" name="rename_subpages" value="1" %(subpages_checked)s>
 131     </dd>
 132     <dd>
 133         <class="label"><subpage> %(subpage)s</subpage>
 134     </dd>
 135     </tr>
 136     <tr>
 137     <dd>
 138         %(redirect_label)s<input type="checkbox" name="rename_redirect" value="1" %(redirect)s>
 139     </dd>
 140     </tr>
 141 </table>
 142 <table>
 143     <tr>
 144         <td class="label"><label>%(newname_label)s</label></td>
 145         <td class="content">
 146             <input type="text" name="newpagename" value="%(pagename)s" size="80">
 147         </td>
 148     </tr>
 149     <tr>
 150         <td class="label"><label>%(comment_label)s</label></td>
 151         <td class="content">
 152             <input type="text" name="comment" size="80" maxlength="200">
 153         </td>
 154     </tr>
 155     <tr>
 156         <td></td>
 157         <td class="buttons">
 158             %(buttons_html)s
 159         </td>
 160     </tr>
 161 </table>
 162 ''' % d
 163 
 164         else:
 165             d = {
 166                 'pagename': wikiutil.escape(self.pagename, True),
 167                 'newname_label': _("New name"),
 168                 'comment_label': _("Optional reason for the renaming"),
 169                 'buttons_html': buttons_html,
 170                 'redirect': self.redirect,
 171                 'redirect_label': _('Create redirect for renamed page?'),
 172                 }
 173             return '''
 174 <table>
 175     </tr>
 176     <tr>
 177     <dd>
 178         %(redirect_label)s<input type="checkbox" name="rename_redirect" value="1" %(redirect)s>
 179     </dd>
 180     </tr>
 181 </table>
 182 <table>
 183     <tr>
 184         <td class="label"><label>%(newname_label)s</label></td>
 185         <td class="content">
 186             <input type="text" name="newpagename" value="%(pagename)s" size="80">
 187         </td>
 188     </tr>
 189     <tr>
 190         <td class="label"><label>%(comment_label)s</label></td>
 191         <td class="content">
 192             <input type="text" name="comment" size="80" maxlength="200">
 193         </td>
 194     </tr>
 195     <tr>
 196         <td></td>
 197         <td class="buttons">
 198             %(buttons_html)s
 199         </td>
 200     </tr>
 201 </table>
 202 ''' % d
 203 
 204 def execute(pagename, request):
 205     """ Glue code for actions """
 206     RenamePage(pagename, request).render()

Attached Files

To refer to attachments on a page, use attachment:filename, as shown below in the list of files. Do NOT use the URL of the [get] link, since this is subject to change and can break easily.
  • [get | view] (2017-05-19 13:53:03, 6.4 KB) [[attachment:RenamePage.py]]
 All files | Selected Files: delete move to page copy to page

You are not allowed to attach a file to this page.