summaryrefslogtreecommitdiff
path: root/Mailman (follow)
Commit message (Collapse)AuthorAgeFilesLines
* UpdateOldVars(): Bug fix for schema updates. This used to setbwarsaw2000-03-211-4/+6
| | | | | | member_posting_only to 0 unconditionally -- which could whack the value on every schema update. Now we only do this when upgrading from data_version 10 or earlier.
* Bump version to 2.0beta1bwarsaw2000-03-211-2/+2
|
* 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.
* 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).
* 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.
* 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).
* CanonicalizeUserOptions(): Emergency patch. A user_options key canbwarsaw2000-02-191-0/+2
| | | | apparently be None, which makes no sense, so we skip it.
* 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.
* 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.
* CloseLogs(): new method, useful to avoid `Too many open files' errorshmeland2000-02-131-2/+10
| | | | | | when iterating over lots of lists. __del__(): Call CloseLogs() instead of accessing self._log_files directly.
* process(): When setting the 'Reply-To' header (note thebwarsaw2000-02-081-1/+1
| | | | | capitalization) using the setitem interface, you should not include the header key or the trailing newline.
* process(): Short-circuit return for when the list object attributebwarsaw2000-02-081-1/+1
| | | | `archive' is false (i.e. archiving was disabled by the list admin).
* * X-BeenThere: headers were being overwritten every time they reachedhmeland2000-02-081-1/+6
| | | | | | | a new mailing list -- changed to append a new header per list (so that multi-list loops can be detected). * Set Reply-To: header to point back to list, if mlist.reply_goes_to_list is true and msg.fastrack is false/unset.
* ScanMessages(): Added new Smail detector.bwarsaw2000-02-051-0/+1
|