# Copyright (C) 2001-2003 by the Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. """GUI component for managing the non-digest delivery options. """ from Mailman import mm_cfg from Mailman import Utils from Mailman.i18n import _ from Mailman.Gui.GUIBase import GUIBase from Mailman.Gui.Digest import ALLOWEDS PERSONALIZED_ALLOWEDS = ('user_address', 'user_delivered_to', 'user_password', 'user_name', 'user_optionsurl', ) class NonDigest(GUIBase): def GetConfigCategory(self): return 'nondigest', _('Non-digest options') def GetConfigInfo(self, mlist, category, subcat=None): if category <> 'nondigest': return None WIDTH = mm_cfg.TEXTFIELDWIDTH info = [ _("Policies concerning immediately delivered list traffic."), ('nondigestable', mm_cfg.Toggle, (_('No'), _('Yes')), 1, _("""Can subscribers choose to receive mail immediately, rather than in batched digests?""")), ] if mm_cfg.OWNERS_CAN_ENABLE_PERSONALIZATION: info.extend([ ('personalize', mm_cfg.Radio, (_('No'), _('Yes'), _('Full Personalization')), 1, _('''Should Mailman personalize each non-digest delivery? This is often useful for announce-only lists, but <a href="?VARHELP=nondigest/personalize">read the details</a> section for a discussion of important performance issues.'''), _("""Normally, Mailman sends the regular delivery messages to the mail server in batches. This is much more efficent because it reduces the amount of traffic between Mailman and the mail server. <p>However, some lists can benefit from a more personalized approach. In this case, Mailman crafts a new message for each member on the regular delivery list. Turning this feature on may degrade the performance of your site, so you need to carefully consider whether the trade-off is worth it, or whether there are other ways to accomplish what you want. You should also carefully monitor your system load to make sure it is acceptable. <p>Select <em>No</em> to disable personalization and send messages to the members in batches. Select <em>Yes</em> to personalize deliveries and allow additional substitution variables in message headers and footers (see below). In addition, by selecting <em>Full Personalization</em>, the <code>To</code> header of posted messages will be modified to include the member's address instead of the list's posting address. <p>When personalization is enabled, a few more expansion variables that can be included in the <a href="?VARHELP=nondigest/msg_header">message header</a> and <a href="?VARHELP=nondigest/msg_footer">message footer</a>. <p>These additional substitution variables will be available for your headers and footers, when this feature is enabled: <ul><li><b>user_address</b> - The address of the user, coerced to lower case. <li><b>user_delivered_to</b> - The case-preserved address that the user is subscribed with. <li><b>user_password</b> - The user's password. <li><b>user_name</b> - The user's full name. <li><b>user_optionsurl</b> - The url to the user's option page. </ul> """)) ]) # BAW: for very dumb reasons, we want the `personalize' attribute to # show up before the msg_header and msg_footer attrs, otherwise we'll # get a bogus warning if the header/footer contains a personalization # substitution variable, and we're transitioning from no # personalization to personalization enabled. headfoot = Utils.maketext('headfoot.html', mlist=mlist, raw=1) if mm_cfg.OWNERS_CAN_ENABLE_PERSONALIZATION: extra = _("""\ When <a href="?VARHELP=nondigest/personalize">personalization</a> is enabled for this list, additional substitution variables are allowed in your headers and footers: <ul><li><b>user_address</b> - The address of the user, coerced to lower case. <li><b>user_delivered_to</b> - The case-preserved address that the user is subscribed with. <li><b>user_password</b> - The user's password. <li><b>user_name</b> - The user's full name. <li><b>user_optionsurl</b> - The url to the user's option page. </ul> """) else: extra = '' info.extend([('msg_header', mm_cfg.Text, (10, WIDTH), 0, _('Header added to mail sent to regular list members'), _('''Text prepended to the top of every immediately-delivery message. ''') + headfoot + extra), ('msg_footer', mm_cfg.Text, (10, WIDTH), 0, _('Footer added to mail sent to regular list members'), _('''Text appended to the bottom of every immediately-delivery message. ''') + headfoot + extra), ]) return info def _setValue(self, mlist, property, val, doc): alloweds = list(ALLOWEDS) if mlist.personalize: alloweds.extend(PERSONALIZED_ALLOWEDS) if property in ('msg_header', 'msg_footer'): val = self._convertString(mlist, property, alloweds, val, doc) if val is None: # There was a problem, so don't set it return GUIBase._setValue(self, mlist, property, val, doc)