diff options
author | Yasuhito FUTATSUKI at POEM <futatuki@poem.co.jp> | 2018-07-11 15:52:22 +0900 |
---|---|---|
committer | Yasuhito FUTATSUKI at POEM <futatuki@poem.co.jp> | 2018-07-11 15:52:22 +0900 |
commit | 85340b712dbf2056abb6c3f87a96975679dc30bb (patch) | |
tree | dad9da9f7e39ee48fcfe9ae02ad648c503c79efe /Mailman | |
parent | f6ba48ac8c20c79542108ff1bafa070bf9caee6d (diff) | |
parent | e8869cd75753f31cbf8889ea1598356f99b50073 (diff) | |
download | mailman2-85340b712dbf2056abb6c3f87a96975679dc30bb.tar.gz mailman2-85340b712dbf2056abb6c3f87a96975679dc30bb.tar.xz mailman2-85340b712dbf2056abb6c3f87a96975679dc30bb.zip |
merge lp:mailman/2.1 up to rev 1791
Diffstat (limited to '')
-rw-r--r-- | Mailman/Cgi/edithtml.py | 42 | ||||
-rw-r--r-- | Mailman/Utils.py | 9 | ||||
-rw-r--r-- | Mailman/htmlformat.py | 4 |
3 files changed, 44 insertions, 11 deletions
diff --git a/Mailman/Cgi/edithtml.py b/Mailman/Cgi/edithtml.py index 796d8539..1dd9e87b 100644 --- a/Mailman/Cgi/edithtml.py +++ b/Mailman/Cgi/edithtml.py @@ -138,6 +138,13 @@ def main(): Auth.loginpage(mlist, 'admin', msg=msg) return + # See if the user want to see this page in other language + language = cgidata.getfirst('language', '') + if language not in mlist.GetAvailableLanguages(): + language = mlist.preferred_language + i18n.set_language(language) + doc.set_language(language) + realname = mlist.real_name if len(parts) > 1: template_name = parts[1] @@ -169,42 +176,63 @@ def main(): return try: - if cgidata.keys(): + if cgidata.keys() and not cgidata.has_key('langform'): if csrf_checked: - ChangeHTML(mlist, cgidata, template_name, doc) + ChangeHTML(mlist, cgidata, template_name, doc, lang=language) else: doc.addError( _('The form lifetime has expired. (request forgery check)')) - FormatHTML(mlist, doc, template_name, template_info) + FormatHTML(mlist, doc, template_name, template_info, lang=language) finally: doc.AddItem(mlist.GetMailmanFooter()) print doc.Format() -def FormatHTML(mlist, doc, template_name, template_info): +def FormatHTML(mlist, doc, template_name, template_info, lang=None): + if lang not in mlist.GetAvailableLanguages(): + lang = mlist.preferred_language + lcset = Utils.GetCharSet(lang) doc.AddItem(Header(1,'%s:' % mlist.real_name)) doc.AddItem(Header(1, template_info)) doc.AddItem('<hr>') link = Link(mlist.GetScriptURL('admin'), _('View or edit the list configuration information.')) + backlink = Link(mlist.GetScriptURL('edithtml'), + _('Edit the public HTML pages and text files')) doc.AddItem(FontSize("+1", link)) + doc.AddItem('<br>') + doc.AddItem(FontSize("+1", backlink)) doc.AddItem('<p>') doc.AddItem('<hr>') + if len(mlist.GetAvailableLanguages()) > 1: + langform = Form(mlist.GetScriptURL('edithtml') + '/' + template_name, + mlist=mlist, contexts=AUTH_CONTEXTS) + langform.AddItem( + mlist.FormatButton('editlang-button', + text = _("Edit this template for"))) + langform.AddItem(mlist.GetLangSelectBox(lang)) + langform.AddItem(Hidden('langform', 'True')) + doc.AddItem(langform) + doc.AddItem('<hr>') form = Form(mlist.GetScriptURL('edithtml') + '/' + template_name, mlist=mlist, contexts=AUTH_CONTEXTS) - text = Utils.maketext(template_name, raw=1, mlist=mlist) + text = Utils.maketext(template_name, raw=1, lang=lang, mlist=mlist) # MAS: Don't websafe twice. TextArea does it. form.AddItem(TextArea('html_code', text, rows=40, cols=75)) form.AddItem('<p>' + _('When you are done making changes...')) + if lang != mlist.preferred_language: + form.AddItem(Hidden('language', lang)) form.AddItem(SubmitButton('submit', _('Submit Changes'))) doc.AddItem(form) -def ChangeHTML(mlist, cgi_info, template_name, doc): +def ChangeHTML(mlist, cgi_info, template_name, doc, lang=None): + if lang not in mlist.GetAvailableLanguages(): + lang = mlist.preferred_language if not cgi_info.has_key('html_code'): doc.AddItem(Header(3,_("Can't have empty html page."))) doc.AddItem(Header(3,_("HTML Unchanged."))) @@ -225,7 +253,7 @@ must have shell access to your Mailman server. doc.AddItem(Header(3,_("Page Unchanged."))) doc.AddItem('<hr>') return - langdir = os.path.join(mlist.fullpath(), mlist.preferred_language) + langdir = os.path.join(mlist.fullpath(), lang) # Make sure the directory exists omask = os.umask(0) try: diff --git a/Mailman/Utils.py b/Mailman/Utils.py index 01dfa9c0..49121e28 100644 --- a/Mailman/Utils.py +++ b/Mailman/Utils.py @@ -473,7 +473,7 @@ def check_global_password(response, siteadmin=True): _ampre = re.compile('&((?:#[0-9]+|[a-z]+);)', re.IGNORECASE) -def websafe(s): +def websafe(s, doubleescape=False): # If a user submits a form or URL with post data or query fragments # with multiple occurrences of the same variable, we can get a list # here. Be as careful as possible. @@ -488,8 +488,11 @@ def websafe(s): if isinstance(s, str): for k in mm_cfg.BROKEN_BROWSER_REPLACEMENTS: s = s.replace(k, mm_cfg.BROKEN_BROWSER_REPLACEMENTS[k]) - # Don't double escape html entities - return _ampre.sub(r'&\1', cgi.escape(s, quote=True)) + if doubleescape: + return cgi.escape(s, quote=True) + else: + # Don't double escape html entities + return _ampre.sub(r'&\1', cgi.escape(s, quote=True)) def nntpsplit(s): diff --git a/Mailman/htmlformat.py b/Mailman/htmlformat.py index 31795a8a..30be8127 100644 --- a/Mailman/htmlformat.py +++ b/Mailman/htmlformat.py @@ -495,7 +495,9 @@ class TextArea: def __init__(self, name, text='', rows=None, cols=None, wrap='soft', readonly=0): if isinstance(text, str): - safetext = Utils.websafe(text) + # Double escape HTML entities in non-readonly areas. + doubleescape = not readonly + safetext = Utils.websafe(text, doubleescape) else: safetext = text self.name = name |