A worst-case web ui integration with mailman, involving dynamic SSIs, implemented on v2.1.7.
1) HTML files in mailman/templates/en were placed in a directory on the www server to be slugged with the ssi template. Outermost HTML, Head and body tags removed. 1.1) the archtoc.html, archtocentry.html, archliststart.html, archlistend.html, archidxentry.html files were *not* included in the files to be slugged, as they are already pieces of the archive templating system. 1.2) A file called "empty.html" containing just a comment was placed over there and in the local template/en directory as well, to receive an empty shell. 2) all of the files are slugged on the web server with the SSI directives(prior to being pulled over HTTP to activate the SSIs). autoslug-part1.bsh ------------------------------------------ #!/usr/bin/bash # usage: pass in name of template directory for processing if [ $1 ] then echo "" echo "Using template directory: $1" echo "" for i in `ls content` do cp $1/top-half.html $i cat content/$i >> $i cat $1/bottom-half.html >> $i echo "created $i" done else echo "usage: pass in name of template directory for processing" fi 2.1) The SSI source template has been split in two pieces, and concated to the exported mailman templates. 3) Pull the prepared mailman template slugged with look and feel over HTTP: Autoslug-part2.bsh ----------------------------------- #!/bin/bash # usage: run in the mailman template directory for i in `ls *.html` do python http-get-file.py http://server.do.main/mailman-template/ $i > $i echo "http copied $i" done echo "restoring saved splits" cp archidxfoot.html-savesplit archidxfoot.html cp archidxhead.html-savesplit archidxhead.html http-get-file.py ---------------------------- import urllib import sys opener = urllib.FancyURLopener({}) f = opener.open(sys.argv[1]+sys.argv[2]) the_template = f.read() print(the_template) 3.1) The result of these scripts are placed in the mailman/template/en directory and these have had all their SSIs completed. 3.2) archidxfoot.html and archidxhead.html need to have their tops and bottoms cut off, respectively. These are saved in -savesplit files to avoid having to redo this manually every time a tiny revision is made and autoslug-part2 is re-run. This is the meaning of the "restoring saved splits" lines. 3.3) Empty.html needs to be manually split into empty-top.html and empty-bottom.html. Also an empty-top-no-sidebar.html was created from empty-top.html for the mailman admin pages (they are too wide in places to accommodate a sidedar). 3.4) The rest of the templates remain as is. Minor modifications to htmlformat.py and HTMLFormatter.py are all that remain. Empty-top uses python Template class for the title tag-for example at the top of empty-top.html <TITLE>$list_name Info Page</TITLE>, the modified Format() function will replace $list_name with the name of the list. 4) The changes are marked with ##RJKMod *htmlformat.py* ###At the top of file #RJKmod: from string import Template ###In class Document class Document(Container): title = None language = None bgcolor = mm_cfg.WEB_BG_COLOR suppress_head = 0 #RJKmod: Use custom top-half and bottom-half files use_custom_template = 1 ... ###The modified Document.Format() function: def Format(self, indent=0, **kws): charset = 'us-ascii' if self.language: charset = Utils.GetCharSet(self.language) output = ['Content-Type: text/html; charset=%s\n' % charset] if not self.suppress_head: if not self.use_custom_template: #RJKmod kws.setdefault('bgcolor', self.bgcolor) ...distribution code... output.append('%s<BODY %s>' % (tab, SPACE.join(quals))) else: #RJKmod try: f_templ = file('/usr/local/mailman/templates/en/empty-top.html') if self.title.count( 'Administrati') or self.title.count( 'Edit'): f_templ = file('/usr/local/mailman/templates/en/empty-top-no-sidebar.html') templ_content = f_templ.read() t = Template( templ_content ) output.append( t.safe_substitute( list_name = self.title ) ) finally: f_templ.close() # Always do this... output.append(Container.Format(self, indent)) if not self.suppress_head: if not self.use_custom_template: #RJKmod output.append('%s</BODY>' % tab) output.append('%s</HTML>' % tab) else: #RJKmod try: f_templ = file('/usr/local/mailman/templates/en/empty-bottom.html') templ_content = f_templ.read() output.append( templ_content ) finally: f_templ.close() return NL.join(output) ###Modified Logo function to remove logo def MailmanLogo(): t = Table(border=0, width='100%') ## RJKmod return t *HTMLFormatter.py* ### Remove the footer class HTMLFormatter: def GetMailmanFooter(self): ##RJKmod return Container('') The documented setting of DEFAULT_EMAIL_HOST and DEFAULT_URL_HOST needs to be made in mm_cfg. HTH, -Rich ------------------------------------------------------ Mailman-Users mailing list Mailman-Users@python.org http://mail.python.org/mailman/listinfo/mailman-users Mailman FAQ: http://www.python.org/cgi-bin/faqw-mm.py Searchable Archives: http://www.mail-archive.com/mailman-users%40python.org/ Unsubscribe: http://mail.python.org/mailman/options/mailman-users/archive%40jab.org Security Policy: http://www.python.org/cgi-bin/faqw-mm.py?req=show&file=faq01.027.htp