summaryrefslogtreecommitdiff
path: root/Mailman
Commit message (Collapse)AuthorAgeFilesLines
...
* hold_for_approval(): Another step towards conversion to MemberAdaptorbwarsaw2001-07-291-1/+1
| | | | API. GetPreferredLanguage() -> getMemberLanguage()
* do_topic_filters(): Another step towards conversion to MemberAdaptorbwarsaw2001-07-291-2/+2
| | | | API. getMemberTopics()
* process_form(): Use UserDesc helper class.bwarsaw2001-07-291-9/+2
|
* Another step towards conversion to MemberAdaptor API.bwarsaw2001-07-291-1/+1
| | | | GetPreferredLanguage() -> getMemberLanguage()
* Another step towards conversion to MemberAdaptor API.bwarsaw2001-07-291-10/+4
| | | | | SetPreferredLanguage() -> setMemberLanguage(); setMemberTopics(); getMemberTopics().
* Massive rewrite to implement the Wouters/Oskoboiny Convention on webbwarsaw2001-07-291-52/+387
| | | | | | | | | | | | confirmations. :) Clicking on the emailed confirm url now brings up a screen which requires the user to /then/ click on an explicit Confirm button. They can also cancel their requested action. So far, implemented subscription, unsubscription, and change of address requests. Eventually this will include posting holds, etc. Subscription confirmation screen allows them to override some values they entered in the original request (but not, of course, the email address!).
* Another step towards conversion to MemberAdaptor API.bwarsaw2001-07-291-14/+11
| | | | | | | | | | | | | | | | GetPreferredLanguage() -> getMemberLanguage(). Note this isn't finished yet since there are still some direct access to mlist.members. :( Use the UserDesc helper class. membership_options(): When calculating the length of the realname field, include the email addresses. Since this fits in the same table cell, the text box should be the max of the email addresses or realnames. Also, always include the realname TextBox, even if there is no realname for the user.
* __assertIsMember(): Helper method which raises NotAMemberError if thebwarsaw2001-07-291-11/+40
| | | | | | | | | | | | | | | | | | | | | | | | | | | | member, er, isn't a member. :) getMemberOption(), getMemberName(), removeMember(), changeMemberAddress(), setMemberPassword(), setMemberLanguage(), setMemberOption(), setMemberName(): Use __assertIsMember(). getMemberLanguage(): If the address isn't a member of the list, return the list's default language instead of raising an exception. getMemberTopics(): New API method which returns the list of topics the member is interested in. addNewMember(): Raise MMAlreadyAMember if the new member address is, er, um, already a member. Also, don't use setMemberOption() to set the mm_cfg.Digests flag because otherwise you'll get an AlreadyReceivingDigests exception. Set the user_options dict directly instead. changeMemberAddress(): Grow a `nodelete' argument, defaulting to 0, which inhibits the normal deletion of the oldaddress after the change (used in bin/clone_members). Also, be sure to convert the fullname from the oldaddress to the newaddress. setMemberTopics(): New API method which sets the list of topics the member is interested in.
* getMemberLanguage(): If the address isn't a member of the list, returnbwarsaw2001-07-291-2/+21
| | | | | | | | | | | | | | the list's default language instead of raising an exception. getMemberTopics(): New API method which returns the list of topics the member is interested in. changeMemberAddress(): Grow a `nodelete' argument, defaulting to 0, which inhibits the normal deletion of the oldaddress after the change (used in bin/clone_members). setMemberTopics(): New API method which sets the list of topics the member is interested in.
* Another step towards conversion to MemberAdaptor API.bwarsaw2001-07-291-27/+9
| | | | | | | | | | | | | | | | | | | | | | | GetPreferredLanguage() -> getMemberLanguage() ApprovedChangeMemberAddress(): When changing the addresses globally, watch out for a list that has the newaddress already subscribed. Skip it in that case (but there probably should be some way of reporting this situation back to the caller). ProcessConfirmation(): Optional argument userdesc_overrides, defaulting to None, which allows the caller to override parts of the subscription record. This is used in the confirm screen to, e.g. override the real name supplied in the original listinfo subscription request. Also, use the UserDesc helper class. When processing a CHANGE_OF_ADDRESS, return both the oldaddr and the new addr. SetPreferredLanguage(), GetPreferredLanguage(): Removed. Use the MemberAdaptor API methods instead.
* Another step towards conversion to MemberAdaptor API.bwarsaw2001-07-291-5/+7
| | | | | | | | GetPreferredLanguage() -> getMemberLanguage() ProcessSubscribeCmd(): Update for new AddMember() signature (requires a UserDesc instance). This still needs to be fixed so that the real name is extracted from the From: line.
* __handlepost(): Convert to MemberAdaptor API by usingbwarsaw2001-07-291-11/+4
| | | | | | getMemberLanguage() instead of GetPreferredLanguage(). __handlesubscription(): Use UserDesc convenience class.
* intermediatebwarsaw2001-07-291-0/+44
|
* Another step towards conversion to MemberAdaptor API.bwarsaw2001-07-291-3/+3
| | | | GetPreferredLanguage() -> getMemberLanguage()
* process_request(): Coerce listname to lowercase since this is treatedbwarsaw2001-07-271-1/+2
| | | | as the internal name.
* InitVars(): Should create self.archive_dir()+'.mbox' notbwarsaw2001-07-271-1/+1
| | | | ArchiveFileName().
* Add Norwegian.bwarsaw2001-07-271-0/+1
|
* send_i18n_digests(): Cut-n-paste errors: self->mlist.bwarsaw2001-07-271-2/+2
|
* NumRequestsPending(): Only subtract one from the number of keys ifbwarsaw2001-07-271-1/+3
| | | | there's a "version" key.
* Japanese should use the euc-jp encoding for web pages.bwarsaw2001-07-271-1/+1
|
* LC_DESCRIPTIONS: Rewrite this stanza for clarity. Use add_language()bwarsaw2001-07-261-5/+10
| | | | | to add each language so that it looks the same here as in a user's mm_cfg.py file. Add the French and Japanese entries.
* main(): Use archive_dir() instead of the archive_directory attribute.bwarsaw2001-07-261-1/+1
|
* html_TOC(): Use archive_dir() instead of the archive_directorybwarsaw2001-07-261-1/+1
| | | | attribute.
* InitVars(): Do not set list attributes public_archive_file_dir,bwarsaw2001-07-261-36/+19
| | | | | | | | | | | | | | private_archive_file_dir, or archive_directory. All three can be calculated when needed, and doing it that way instead improves the mobility of lists. archive_dir(): Return the path previously kept in archive_directory, by calculating it on the fly. ArchiveFileName(): Use archive_dir() to calculate the path to the actual .mbox file. CheckHTMLArchiveDir(): use archive_dir() to calculate the link paths.
* ZapOldVars(): Rewrite a bit more succinctly, and add the followingbwarsaw2001-07-261-7/+7
| | | | | | | | | | | attribute to those that should be zapped: public_archive_file_dir private_archive_file_dir archive_directory All three can be calculated, and it makes moving a list much easier if they are, instead of being kept as attributes in the list.
* Lock(): If /any/ exception (not just MMUnknownListError) is raisedbwarsaw2001-07-261-1/+1
| | | | during the Load(), unlock the list and re-raise the exception.
* GetConfigInfo(): Create the `admin' local variable that the followingbwarsaw2001-07-251-0/+3
| | | | _() string expects.
* __handlesubscription(): Use the new ApprovedAddMember() interface.bwarsaw2001-07-201-1/+8
|
* AddMember(): Cut-and-paste typo; mlist -> self; fullname -> namebwarsaw2001-07-201-3/+10
| | | | ProcessConfirmation(): Use the new ApprovedAddMember() interface.
* main(): Simpler idiom for getting the 'language' value out of thebwarsaw2001-07-201-8/+12
| | | | | | | | form, and defaulting to mlist.preferred_language. process_form(): Suck the fullname value out of the form, defaulting to the empty string. Call AddMember() with the new and improved interface.
* main(): Simpler idiom for getting the 'language' value out of thebwarsaw2001-07-201-8/+3
| | | | | | form, and defaulting to mlist.preferred_language. list_listinfo(): Add a replacement for the (new) fullname box.
* main(): In the exception handlers when ProcessConfirmation() isbwarsaw2001-07-201-0/+10
| | | | | | | called, be sure to catch MMNeedApproval, which can be raised if subscriptions are confirm+approve. (Yeah, I know this is eventually going to get rewritten...)
* show_requests(): Remove the backward compatibility hack, since thebwarsaw2001-07-201-7/+1
| | | | requests database automatically updates its schema now.
* change_options(): When sucking the subscribers out of the upload,bwarsaw2001-07-201-23/+29
| | | | | | | don't unquote the lines. Rewrite this function to not use ApprovedAddMembers() -- which has been removed -- but instead to loop over ApprovedAddMember(), keeping track of the results of each individual addition.
* ProcessConfirmCmd(): Slightly improved response message.bwarsaw2001-07-201-1/+1
|
* REQUESTS_FILE_SCHEMA_VERSION: Added.bwarsaw2001-07-201-1/+4
|
* getMemberOption(): flag argument should not have a default value.bwarsaw2001-07-201-3/+3
| | | | | changeMemberAddress(): If user_options doesn't have an entry for memberkey, flags should default to 0, not None.
* IGN: new global flag for the version number entry.bwarsaw2001-07-201-10/+26
| | | | | | | | | | | | | | | | | | | | | __opendb(): Automatically update the schema based on the 'version' entry (or lack thereof). Specifically, add a fullname field to any held SUBSCRIPTION entries, and a msgdata dictionary to any HELDMSG entries (but only if they don't have enough fields). This update is currently keyed off the lack of 'version' entry; after the update 'version' is set to REQUESTS_FILE_SCHEMA_VERSION. __closedb(): Set the 'version' entry to REQUESTS_FILE_SCHEMA_VERSION NumRequestsPending(): Subtract one from the length of the dictionary to account for the internal bookkeeping 'version' entry. __handlepost(): Remove the backwards compatibility hack for pre 2.0b3, since __opendb() now does this. HoldSubscription(): Accept a fullname field. __handlesubscription(): Unpack the fullname field.
* ApprovedAddMembers(): Rid ourselves of this horror. The right way tobwarsaw2001-07-191-113/+115
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | do it now is to loop over ApprovedAddMember() -- which no longer Save()'s after each addition! -- catching any exceptions that it might raise. The whole API for ApprovedAddMembers() was gross. AddMember(): Change the signature so that it takes only two arguments (the cancerous growth of the parameters was becoming a nightmare). The first argument is a "userdesc", essentially an instance with some well defined public attributes, and the old "remote" parameter. Any parsing of strings into fullname, emailname should be done before AddMember() is called. userdesc holds everything relevant about this subscription request: the language, password, digest flag, etc. AddMember() still validates the email address, checks to see if its already a member, and applies the list's subscription policy. ApprovedAddMember(): This now does all the work of adding a new member, and setting their digest flag. It also sends the subscriber an acknowledgement, and the admin the subscribeack. It assumes that the subscription request has passed list policy. ProcessConfirmation(): Remove the backwards compatibility hack for pre-2.1a3 entries in the requests.db. That database automatically updates its schema now.
* show_requests(): Change the column header to reflect the fact that thebwarsaw2001-07-191-3/+9
| | | | | | full names are shown along with the email address (if it is known). Also, backwards compatibility with pre-2.1a3 pending database records (before a3 they didn't include the fullname).
* GetConfigInfo(): We don't need the adminurl local variable.bwarsaw2001-07-191-3/+0
|
* GetConfigInfo(): Do specific hasattr() tests instead of catchingbwarsaw2001-07-191-4/+2
| | | | AttributeErrors, which can mask real bugs.
* process(): Fixed typo (should have been "getMemberOption" notbwarsaw2001-07-191-1/+1
| | | | "getUserOption"). Found by Mentor Cana.
* MarshalSwitchboard._ext_read(): Add a little comment to thebwarsaw2001-07-191-0/+3
| | | | `mysterious' eval() call.
* File from Python 2.2bwarsaw2001-07-191-0/+1002
|
* AddMember(): ApprovedAddMember doesn't take a fullname argument, don't trytwouters2001-07-191-5/+5
| | | | | | | | | | | to send it. Thanks to the beauty of optional arguments, this changed the fullname into the password, and used the password as the 'digest' flag, causing all new members to be considered digest members ;P ProcessConfirmation(): Adjust to the fact that the subscription info now carries the fullname too. Also change the error message so the printf operator doesn't complain about 'not all arguments converted' when 'data' is a sequence (which it is guaranteed to be.)
* Only eval() a float's repr() back to a float if the marshal actuallytwouters2001-07-191-1/+2
| | | | contained it.
* intermediatebwarsaw2001-07-191-0/+49
|
* process(): Use the MemberAdaptor API. Also, call do_topic_filters()bwarsaw2001-07-191-17/+65
| | | | | | | | | | | to further cull the recipients. do_topic_filters(): For each recipient of the regular delivery message, if there are no topic hits, check the ReceiveNonmatchingTopics option to see whether this recipient should get the message. If there are topic hits, remove the recipient unless they've indicated an interest in this topic (or they haven't specified any interests).
* intermediatebwarsaw2001-07-191-0/+101
|