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.You are not allowed to attach a file to this page.