# -*- coding: iso-8859-1 -*-
"""
MoinMoin - Call the GUI editor (FCKeditor)
@copyright: (c) Bastian Blank, Florian Festi, Thomas Waldmann
@license: GNU GPL, see COPYING for details.
"""
from MoinMoin import PageEditor
import os, time, codecs, re
from MoinMoin import caching, config, user, util, wikiutil, error
from MoinMoin.Page import Page
from MoinMoin.widget import html
from MoinMoin.widget.dialog import Status
from MoinMoin.logfile import editlog, eventlog
from MoinMoin.util import filesys
import MoinMoin.util.web
import MoinMoin.util.mail
from MoinMoin.parser.wiki import Parser
from StringIO import StringIO
def execute(pagename, request):
if not request.user.may.write(pagename):
_ = request.getText
Page(request, pagename).send_page(request,
msg = _('You are not allowed to edit this page.'))
return
PageGraphicalEditor(request, pagename).sendEditor()
class PageGraphicalEditor(PageEditor.PageEditor):
def word_rule(self):
regex = re.compile(r"\(\?" + edit_lock_message
else:
msg = edit_lock_message
# Did one of the prechecks fail?
if msg:
self.send_page(self.request, msg=msg)
return
# Check for preview submit
if preview is None:
title = _('Edit "%(pagename)s"')
else:
title = _('Preview of "%(pagename)s"')
self.set_raw_body(preview, modified=1)
# send header stuff
lock_timeout = self.lock.timeout / 60
lock_page = wikiutil.escape(self.page_name, quote=1)
lock_expire = _("Your edit lock on %(lock_page)s has expired!") % {'lock_page': lock_page}
lock_mins = _("Your edit lock on %(lock_page)s will expire in # minutes.") % {'lock_page': lock_page}
lock_secs = _("Your edit lock on %(lock_page)s will expire in # seconds.") % {'lock_page': lock_page}
# get request parameters
try:
text_rows = int(form['rows'][0])
except StandardError:
text_rows = self.cfg.edit_rows
if self.request.user.valid:
text_rows = int(self.request.user.edit_rows)
if preview is not None:
# Propagate original revision
rev = int(form['rev'][0])
# Check for editing conflicts
if not self.exists():
# page does not exist, are we creating it?
if rev:
conflict_msg = _('Someone else deleted this page while you were editing!')
elif rev != self.current_rev():
conflict_msg = _('Someone else changed this page while you were editing!')
if self.mergeEditConflict(rev):
conflict_msg = _("""Someone else saved this page while you were editing!
Please review the page and save then. Do not save this page as it is!
Have a look at the diff of %(difflink)s to see what has been changed.""") % {
'difflink': self.link_to(self.request,
querystr='action=diff&rev=%d' % rev)
}
rev = self.current_rev()
if conflict_msg:
# We don't show preview when in conflict
preview = None
elif self.exists():
# revision of existing page
rev = self.current_rev()
else:
# page creation
rev = 0
# Page editing is done using user language
self.request.setContentLanguage(self.request.lang)
# Setup status message
status = [kw.get('msg', ''), conflict_msg, edit_lock_message]
status = [msg for msg in status if msg]
status = ' '.join(status)
status = Status(self.request, content=status)
wikiutil.send_title(self.request,
title % {'pagename': self.split_title(self.request),},
page=self,
pagename=self.page_name, msg=status,
html_head=self.lock.locktype and (
PageEditor._countdown_js % {
'countdown_script': self.request.theme.externalScript('countdown'),
'lock_timeout': lock_timeout,
'lock_expire': lock_expire,
'lock_mins': lock_mins,
'lock_secs': lock_secs,
}) or '',
editor_mode=1,
)
self.request.write(self.request.formatter.startContent("content"))
# Get the text body for the editor field.
# TODO: what about deleted pages? show the text of the last revision or use the template?
if preview is not None:
raw_body = self.get_raw_body()
elif self.exists():
# If the page exists, we get the text from the page.
# TODO: maybe warn if template argument was ignored because the page exists?
raw_body = self.get_raw_body()
elif form.has_key('template'):
# If the page does not exists, we try to get the content from the template parameter.
template_page = wikiutil.unquoteWikiname(form['template'][0])
if self.request.user.may.read(template_page):
raw_body = Page(self.request, template_page).get_raw_body()
if raw_body:
self.request.write(_("[Content of new page loaded from %s]") % (template_page,), '
')
else:
self.request.write(_("[Template %s not found]") % (template_page,), '
')
else:
self.request.write(_("[You may not read %s]") % (template_page,), '
')
# Make backup on previews - but not for new empty pages
if preview and raw_body:
self._make_backup(raw_body)
# Generate default content for new pages
if not raw_body:
raw_body = _('Describe %s here.') % (self.page_name,)
# send form
self.request.write('