summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormailman1998-02-27 15:12:34 +0000
committermailman1998-02-27 15:12:34 +0000
commit71b1c52190bc36ebdf944a984bcf5790b9bfe8e8 (patch)
tree256e5b10b01a93cbdab41db0df313c8ae3560f1b
parentcfdd10e1759185484789b531d9b36385eb53488d (diff)
downloadmailman-71b1c52190bc36ebdf944a984bcf5790b9bfe8e8.tar.gz
mailman-71b1c52190bc36ebdf944a984bcf5790b9bfe8e8.tar.zst
mailman-71b1c52190bc36ebdf944a984bcf5790b9bfe8e8.zip
Initial revision
-rwxr-xr-xcgi/edithtml147
1 files changed, 147 insertions, 0 deletions
diff --git a/cgi/edithtml b/cgi/edithtml
new file mode 100755
index 000000000..b5ab807d8
--- /dev/null
+++ b/cgi/edithtml
@@ -0,0 +1,147 @@
+#!/usr/local/bin/python
+import sys, os, cgi, string, crypt, types
+sys.stderr = sys.stdout
+sys.path.append('/home/mailman/mailman/modules')
+import mm_utils, maillist, mm_cfg
+import htmlformat
+
+
+#Editable templates. We should also be able to edit the archive index, which
+#currently isn't a working template, but will be soon.
+
+template_data = (('listinfo.html', 'General list information page'),
+ ('subscribe.html', 'Subscribe results page'),
+ ('options.html', 'User specific options page'),
+ ('handle_opts.html', 'Changing user options results page'),
+ ('archives.html', 'Archives index page')
+ )
+
+
+def InitDocument():
+ return htmlformat.Document()
+
+doc = InitDocument()
+
+path = os.environ['PATH_INFO']
+list_info = mm_utils.GetPathPieces(path)
+
+if len(list_info) < 1:
+ doc.AddItem(htmlformat.Header(2, "Invalid options to CGI script."))
+ print doc.Format()
+ sys.exit(0)
+
+list_name = list_info[0]
+
+try:
+ list = maillist.MailList(list_name)
+except:
+ doc.AddItem(htmlformat.Header(2, "%s : No such list" % list_name))
+ print doc.Format()
+ sys.exit(0)
+
+if not list._ready:
+ doc.AddItem(htmlformat.Header(2, "%s : No such list" % list_name))
+ print doc.Format()
+ sys.exit(0)
+
+
+if len(list_info) > 1:
+ template_name = list_info[1]
+ for (template, info) in template_data:
+ if template == template_name:
+ template_info = info
+ doc.SetTitle('%s -- Edit html for %s' %
+ (list.real_name, template_info))
+ break
+ else:
+ doc.SetTitle('Edit HTML : Error')
+ doc.AddItem(htmlformat.Header(2, "%s: Invalid template" % template_name))
+ doc.AddItem(list.GetMailmanFooter())
+ print doc.Format()
+ sys.exit(0)
+else:
+ doc.SetTitle('%s -- HTML Page Editing' % list.real_name)
+ doc.AddItem(htmlformat.Header(1, '%s -- HTML Page Editing' % list.real_name))
+ doc.AddItem(htmlformat.Header(2, 'Select page to edit:'))
+ template_list = htmlformat.UnorderedList()
+ for (template, info) in template_data:
+ l = htmlformat.Link(os.path.join(list.GetScriptURL('edithtml'),
+ template), info)
+
+ template_list.AddItem(l)
+ doc.AddItem(htmlformat.FontSize("+2", template_list))
+ doc.AddItem(list.GetMailmanFooter())
+ print doc.Format()
+ sys.exit(0)
+
+
+def FormatHTML(doc):
+ doc.AddItem(htmlformat.Header(1,'%s:' % list.real_name))
+ doc.AddItem(htmlformat.Header(1, template_info))
+
+ doc.AddItem('<hr>')
+
+ link = htmlformat.Link(list.GetScriptURL('admin'),
+ 'View or edit the list configuration information.')
+ doc.AddItem(htmlformat.FontSize("+1", link))
+ doc.AddItem('<p>')
+
+ doc.AddItem('<hr>')
+
+ form = htmlformat.Form(os.path.join(list.GetScriptURL('edithtml'),
+ template_name))
+ doc.AddItem(form)
+
+ password_table = htmlformat.Table()
+ password_table.AddRow(['Enter the admin password to edit html:',
+ htmlformat.PasswordBox('adminpw')])
+ password_table.AddRow(['When you are done making changes...',
+ htmlformat.SubmitButton('submit', 'Submit Changes')])
+
+ form.AddItem(password_table)
+
+ text = mm_utils.QuoteHyperChars(list.SnarfHTMLTemplate(template_name))
+ form.AddItem(htmlformat.TextArea('html_code', text, rows=40, cols=75))
+
+def ChangeHTML(list, cgi_info, template_name, doc):
+ if not cgi_info.has_key('html_code'):
+ doc.AddItem(htmlformat.Header(3,"Can't have empty html page."))
+ doc.AddItem(htmlformat.Header(3,"HTML Unchanged."))
+ doc.AddItem('<hr>')
+ return
+ code = cgi_info['html_code'].value
+ f = open(os.path.join(list._template_dir, template_name), 'w')
+ f.write(code)
+ f.close()
+ doc.AddItem(htmlformat.Header(3, 'HTML successfully updated.'))
+ doc.AddItem('<hr>')
+
+try:
+ cgi_data = cgi.FieldStorage()
+ if len(cgi_data.keys()):
+ if not cgi_data.has_key('adminpw'):
+ doc.AddItem(
+ htmlformat.Header(3, htmlformat.Italic('Error: '
+ 'You must supply the admin password to edit html.')))
+ doc.AddItem('<hr>')
+ else:
+ try:
+ list.ConfirmAdminPassword(cgi_data['adminpw'].value)
+ ChangeHTML(list, cgi_data, template_name, doc)
+ except:
+ doc.AddItem(
+ htmlformat.Header(3, htmlformat.Italic(
+ 'Error: Incorrect admin password.')))
+ doc.AddItem('<hr>')
+
+
+
+ FormatHTML(doc)
+
+finally:
+ try:
+ doc.AddItem(list.GetMailmanFooter())
+ print doc.Format()
+ except:
+ pass
+ list.Unlock()