summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* Conversion of Mailman 1.1 pending admin database to 1.2/2.0 externalbwarsaw2000-03-161-12/+48
| | | | | | | | | | | | | requests.db database. This should be the last major hurdle for the new version. Specifically, NewRequestsDatabase(): This knows about the 1.1 style mlist.requests dictionary, which served as the pending requests database. It sucks everything out of this dict and resubmits the requests using the new APIs. Worst thing that happens its that the timestamps get blown away. Oh well. older(): Removed since it's not used anywhere.
* Added standard PythonPowered logo (converted to PNG since GIFs are notbwarsaw2000-03-152-0/+0
| | | | | | | allowed -- hopefully I preserved transparency enough to be fairly decently rendered in MSIE and NS using the standard background). Added gnu-head logo, shrunk 20% from the standard gnu-head-sm.jpg
* FormatListinfoOverview(): "mailman" => "Mailman"bwarsaw2000-03-151-1/+1
|
* Changes to Mailman's default footer so that open source logos forbwarsaw2000-03-151-9/+49
| | | | | | | | | | | | Mailman, Python, and GNU are displayed. I'm not 100% sure I like this... Specifically, Container.Format(): More efficient text generator which uses [].append and string.join instead of operator add. MailmanLogo(): New definition of standard footer as described above.
* Changes to Mailman's default footer so that open source logos forbwarsaw2000-03-151-5/+11
| | | | | | | | | | | | | Mailman, Python, and GNU are displayed. I'm not 100% sure I like this... Specifically, MAILMAN_URL: point this to the gnu.org subpage, instead of the list.org mirror. IMAGE_LOGOS: flag to specify whether logos are displayed or not (if not, then slogan alone in linked text is displayed).
* main(): Don't complain about a bogus archive_directory ifbwarsaw2000-03-131-1/+4
| | | | | last_post_time is <= 0 (meaning there have been no messages posted to the mailing list yet). Idea by Jim Tittsler.
* Import nntplib from Mailman.pythonlib package to pick up the 1.5.2+bwarsaw2000-03-131-17/+11
| | | | | | version of this module. main(): simplified connection creation, set readermode in constructor.
* nntplib.py from Python 1.5.2+. This version supports setting modebwarsaw2000-03-131-0/+535
| | | | reader from the NNTP class constructor.
* process(): Use only msg.GetSender() as the way to get the "author"bwarsaw2000-03-031-4/+2
| | | | | | address of the message. GetEnvelopeSender() no longer exists (and GetSender() keys off of USE_ENVELOPE_SENDER, so it still has the same basic functionality).
* GetSender(): Every access of the "sender" (really author) should nowbwarsaw2000-03-031-32/+47
| | | | | | | | | go through this one method. This consolidates and makes consistent the use of the From:, Sender:, and envelope-sender headers, and the search order based on USE_ENVELOPE_SENDER. The docstring explains the semantics of this method. GetEnvelopeSender(): Removed.
* TEXTFIELDWIDTH: default value is better at 40 chars widebwarsaw2000-03-031-1/+1
|
* Some minor improvements to the admin UI, specifically:bwarsaw2000-03-031-31/+35
| | | | | | | | | | | | | | AddOptionsTableItem(): nodetails => detailsp (with bit flip on default value). FormatOptionHelp(): All options now have details. If a config attribute doesn't have an explicit details string, then the normal description is used as the details. This simplifies the logic a bit here and makes for a more consistent UI. Also, always include a link back to the category options page (on the quest for no dead ends!) GetItemGuiDescr(): Always include the "(Details)" link because now they /all/ have details.
* DeliverToUser(): 'fastrack' => 'fasttrack'bwarsaw2000-03-031-1/+1
|
* process(): 'fastrack' => 'fasttrack'. Elaborate the Reply-To: mungingbwarsaw2000-03-031-5/+10
| | | | | to handle the case where the header is set to an explicit address, as specified in mlist.reply_to_address.
* NewVars(): initialize reply_goes_to_list to the empty string.bwarsaw2000-03-031-0/+1
|
* Bump the DATA_FILE_VERSION to pick up the new reply_to_address configbwarsaw2000-03-031-1/+1
| | | | attribute.
* New feature (hopefully, the last one before feature freeze for 1.2 :)bwarsaw2000-03-031-30/+63
| | | | | | | | | | | | | | | | | | | | | | | Elaborate the Reply-To munging to handle parallel lists, e.g. a checkins list where discussions about changes should be conducted on a parallel development list. Specifically, There's a new configuration attribute called `reply_to_address' which contains the string address to stuff in the Reply-To: header. The config attr reply_goes_to_list now takes three values 0 (no change) means no reply-to munging occurs 1 (no change) reply-to is munged to the list address 2 (new value) reply-to is munged to reply_to_address In both cases, if the original message contains a Reply-To: header, it is discarded. This could be controversial; it might be better to honor an existing Reply-To: header in case #2, but that seems like it would be less useful. GetConfigInfo(): Add the necessary machinery to effect the above change. Also, use TEXTFIELDWIDTH as the standard width for all string entry fields.
* InputObj.Format(): When adding the keyword arguments as HTMLbwarsaw2000-03-031-10/+8
| | | | | | attributes, don't wrap the key in double quotes, otherwise browsers will ignore them. Also, use a slightly more efficient way of crafting the HTML (list.append + string.join).
* Added an install-here target which doesn't recurse down the subdirsbwarsaw2000-03-031-1/+3
| | | | (saves a little time during testing).
* GetConfigInfo(): Use TEXTFIELDWIDTH for all string input fieldsbwarsaw2000-03-033-7/+19
| | | | (including text areas).
* TEXTFIELDWIDTH: Define a "standard" width for string input fields.bwarsaw2000-03-031-0/+3
|
* ParseMailCommands(): Simply return if the message has an X-BeenTherebwarsaw2000-02-261-0/+6
| | | | | header or a List-ID header. This should break most common listserv infloops, and addresses PR#206.
* SMTPDirect should be the default DELIVERY_MODULEbwarsaw2000-02-261-2/+2
|
* process(): had the shutcut return logic slightly offbwarsaw2000-02-261-1/+1
|
* GetItemGuiValue(): slight reworking of the RadioButtonArray kludge atbwarsaw2000-02-261-4/+4
| | | | the top of this function.
* ParseMailCommands(): Handle autoresponding to the -request address.bwarsaw2000-02-261-0/+7
| | | | | | If autorespond_requests is turned on, then send the original message through the Replybot.process()'ing. Here's where we handle whether to "reply and discard" or "reply and forward".
* process(): Added support for autoresponding to the -request address.bwarsaw2000-02-261-5/+14
| | | | | | | | Works very much like the other autoresponders. This module does /not/ handle differentiating between -request "reply and discard" and "reply and forward". Also, slightly rephrased the autoresponse subject: header.
* InitVars(): added autorespond_requests, autoresponse_request_text, andbwarsaw2000-02-261-17/+34
| | | | | | | | | | | | | | | | | | | | | request_responses. GetConfigInfo(): I figured it /was/ worth adding an autoresponder on the -request address after all. This works the same as the -admin, and postings autoresponder with one variation: you now have three choices 1. no autoreply 2. autoreply, but discard the original message 3. autoreply, and forward the message off to the mail command processing robot This is useful for lists that essentially to shut off the command handler, but it may be overkill. It's definitely useful to autoreply to the -request address after all. Also, I slightly reformated the HTML for this page, putting the common stuff up in the preamble.
* main(): set the `torequest' attribute to 1 on the message object.bwarsaw2000-02-262-0/+2
|
* RadioButtonArray.__init__(): added an XXX comment about the horizontalbwarsaw2000-02-261-1/+3
| | | | flag (it doesn't work and isn't easy to use).
* NewVars(): added autorespond_requests and autoresponse_request_text.bwarsaw2000-02-261-0/+2
|
* bump data version to 18bwarsaw2000-02-261-1/+1
|
* lock(): Fixed typo; the call to self.__log() should have beenbwarsaw2000-02-261-1/+1
| | | | self.__writelog().
* FormatConfiguration(): Kludge in the encoding typebwarsaw2000-02-251-11/+31
| | | | | | | | | | | | | | | | | `multipart/form-data' if the category is autoreply (so far the only admin category with file uploads). GetItemGuiValue(): added support for the FileUpload widget. This sets up both the TextArea and FileUpload widget, with some explanatory text in between. GetItemGuiDescr(): I've been persuaded. Don't pop up help text in a separate window by default. ChangeOptions(): Kludge in support for file upload widgets. If there's a config variable called 'something_upload' then it's value is used in preference to the 'something' config variable yanked off the CGI information.
* GetConfigInfo(): autoresponse_postings_text andbwarsaw2000-02-251-2/+2
| | | | | | | autoresponse_admin_text are now FileUpload widgets, which lets the admin either type the text into the text area, or specify a local file containing the text to insert. If both are changed, the uploaded file takes precedence.
* FileUpload: New class which outputs an input object for file uploads.bwarsaw2000-02-251-3/+10
| | | | | | | | Form.__init__(): take an optional encoding string, which if set, becomes the value for the `enctype' attribute. This is a kludge to support file upload forms. Form.Format(): set the enctype attribute if given.
* Added a new GUI type called `FileUpload' which is essentially a tiedbwarsaw2000-02-251-0/+1
| | | | | textarea and file upload widgets. It takes some crafty decoding to make these widgets work well together (see admin.py).
* main(): fixed name error for MMUnknownListError. Found by Jeffbwarsaw2000-02-221-1/+1
| | | | Berliner.
* CanonicalizeUserOptions(): Emergency patch. A user_options key canbwarsaw2000-02-191-0/+2
| | | | apparently be None, which makes no sense, so we skip it.
* install: Be a bit more efficient about compiling all .py files; onlybwarsaw2000-02-191-1/+1
| | | | | traverse into $prefix/Mailman, which avoids all the time-consuming and unnecessary compilation in the archive directories.
* DeliverToList(): Added the Replybot module, just before the Holdbwarsaw2000-02-191-1/+3
| | | | | | module. DeliverToUser(): Add the Replybot module as the first in the list.
* The handler module which actually does the auto-responding. A fewbwarsaw2000-02-191-0/+82
| | | | | | | | | | | | notes: If the message contains an "X-Ack: No" header, then it is never auto-responded to. This, in fact, is used to break both internal recursion and potential mail loops. If the message contains an "X-Ack: Yes" header, then it is auto-responded to even if the grace period hasn't expired (but the grace period is updated).
* CATEGORIES: added `autoreply' category.bwarsaw2000-02-191-1/+3
|
* Update(): Call NewVars(), a new function.bwarsaw2000-02-191-7/+30
| | | | | | | | | NewVars(): Set the various attributes for the autoresponder if they don't exist yet. Even though the comments say this shouldn't be necessary, because InitTempVars() should take care of it, I don't think that really works anymore. NewVars() is necessary so that the new mixin class attributes get initialized on existing mailing lists which are restored from disk after the code gets updated.
* Mixin the Autoresponder class.bwarsaw2000-02-191-1/+5
| | | | | | | | MailList.__init__(): Call Autoresponder.InitVars(). This only works for new mailing lists. MailList.GetConfigInfo(): Get the `autoreply' configuration info from the Autoresponder class.
* Autoresponder: New mixin class which contains attributes andbwarsaw2000-02-191-0/+70
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | configuration information for the new replybot functionality. Mailman can now send automatic responses to mailing list posts or -admin emails (-request autoreplies aren't necessary since that's a bot anyway). The following new configuration attributes control this feature: autorespond_postings - boolean which controls autoreplies to mailing list posts. autorespond_admin - same as above the -admin address. autoresponse_postings_text - the mailing list post autoreply text. This is %(string)s interpolated with a dictionary as described below. autoresponse_admin_text - same as above for the -admin address. autoresponse_graceperiod - the number of days between automatic responses to the same email author. This variable controls both autoresponses. If this is <= 0, then there is no grace period. The following non-configurable attributes store the state: postings_responses - a dictionary of email addresses (lower cased) to the time.time() that the grace period expires. admin_responses - same as above for the -admin address. autoresponse_postings_text and autoresponse_admin_text are string interpolated with the following dictionary: listname - the mailing list's "real_name" listurl - the list's "listinfo" url requestemail - the list's -request address adminemail - the list's -admin address We should probably add others.
* main(): Removed debugging hack (adding the MAILMAN_OWNER to the listbwarsaw2000-02-192-2/+6
| | | | | | of recipients). More importantly, flag the message as having been delivered to the -admin address by setting the `toadmin' attribute on the message. This is used by the Replybot handler.
* Move DATA_FILE_VERSION to Version.py from Defaults.py.in so it'sbwarsaw2000-02-192-5/+6
| | | | easier to change. Bump the data version to 17.
* process(): when checking mlist.posters, be sure to lowercase allbwarsaw2000-02-181-2/+2
| | | | | addresses since the matching inside FindMatchingAddresses() are lowercased.
* NotExplicitlyAllowed: New class to represent message hold conditionsbwarsaw2000-02-181-1/+13
| | | | | | | | | | described below. process(): When members_posting_only is not set, but posters /is/ set, the semantics are that only those explicitly listed in posters can post without admin approval. Even though I think this is AFU'd, at least this patch fixes things so it works the same as it did in Mailman 1.1.