summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
...
* main(): Extract the cgi data using keep_blank_values=1 so we'll knowbwarsaw2001-07-191-4/+4
| | | | | | | | | | | when the admin is trying to login with an empty password field. When WebAuthenticate() fails, check the `adminpw' cgi key to determine whether this was a login attempt, or the first visit of this link. show_requests(): SUBSCRIPTION pending records now include the supplied user real name (i.e. fullname), so use this when unpacking the tuple.
* A revamp to use the new category components, the new membership API,bwarsaw2001-07-191-113/+164
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | and to be able to set/get member's real names. Specifically, CATEGORIES: Don't hardwire these here. Instead they are extracted via mlist.GetConfigCategories(). main(): GetMembers() -> getRegularMemberKeys() get_config_options(): Removed. Use mlist.GetConfigInfo() instead. show_results(): Don't hardwire sub-categories. Instead get them from mlist.GetConfigSubCategories(). get_item_gui_value(): Added a new kind of gui widget, the `Topics' widget which includes at least three boxes (for topic name, regexp, and description), along with possibly a Delete button, an Add button, and an "add where" pull down menu. membership_options(): Instead of using GetMembers() and GetDigestMembers(), use the new membership API methods getMembers(), getMemberName(). Also use getMemberOption() instead of GetUserOption(). In the membership list, add a text box for the member's real name. change_option(): We now allow gui components to optionally handle the form data themselves. If the component has a HandleForm() method, it is called, passing the MailList object, the cgi form data structure, and the Document object. DeleteMember() -> ApprovedDeleteMember() SetUserDigest() -> setMemberOption(... mm_cfg.Digests, ...) SetPreferredLanguage() -> setMemberLanguage() SetUserOption() -> setMemberOption() Added setMemberName() to set the member's full name. get_config_options(): Removed.
* Descend into the Gui subdirectory.bwarsaw2001-07-191-1/+1
|
* confirm(): Add optional argument `expunge' defaulting to true. Thisbwarsaw2001-07-191-4/+10
| | | | | | is a flag specifying whether pending entries should be removed from the database or not, and will be used with the revamped confirmation web ui.
* InitVars(): With the new mixin architecture, InitVars() needs to takebwarsaw2001-07-191-19/+7
| | | | | | | | | | | | | zero arguments, so we remove the crypted_password parameter. This means that self.password will be set in MailList instead. AuthContextInfo(): Instead of getting the user password directly out of self.passwords, use the API method getMemberPassword() -- which itself raises MMNotAMemberError if the user isn't a member of the list. ChangeUserPassword(): Removed. Use the new setMemberPassword() API method.
* Some code re-organization.bwarsaw2001-07-191-76/+29
| | | | | | | | | | ValidateEmail(): Add `/' to the list of _badchars in email addresses instead of making it bad only if it points to an existing directory (!). ParseAddrs(): Removed since rfc822.parseaddr() now works for all cases, according to RFC 2822 (but we'll need to supply the rfc822.py from Python 2.2 now).
* All:bwarsaw2001-07-185-212/+8
| | | | | | | | | | | | | | | | | | | | | | | | GetConfigInfo(): Removed. All admin ui gui elements are moved into components in the Mailman/Gui subdirectory. All membership related attribute access should use the MemberAdaptor API instead, e.g. IsMember() -> isMember() GetUserOption() -> getMemberOption() SetUserOption() -> setMemberOption() Also use ApprovedDeleteMember() instead of DeleteMember(). Deliverer.py: Remove last vestiges of os.environ['LANG'] Digester.py: SetUserDigest(): Removed. This is replaced by OldStyleMemberships's setMemberOption() method when flag == mm_cfg.Digests
* Bump the version number to 2.1a3 and kick the DATA_FILE_VERSION to 30bwarsaw2001-07-181-3/+3
| | | | so the new variables from versions.py will get installed.
* NewVars(): Add the following attributes to MailList instances, if theybwarsaw2001-07-181-0/+5
| | | | | | | | | | | | | | | don't already have them: - topics: a list of all admin specified topics - topics_enabled: a flag specifying whether topics are enabled - topics_bodylines_limit: the number of lines of the body that the topic tagger should look for Subject: and Keywords: lines - one_last_digest: A hold over from an earlier time, this holds addresses of folks who switched from digest to regular delivery - usernames: holds the dictionary of email addresses to Real Names but if a user has no assigned Real Name, they have no entry in this dictionary.
* A membership adaptor, based on the API defined in MemberAdaptor.py,bwarsaw2001-07-180-0/+0
| | | | | for storing membership information in the traditional (i.e. MM2.x) way -- as attributes on the MailList object.
* intermediatebwarsaw2001-07-181-0/+262
|
* The membership adaptor interface specification, as a Python class.bwarsaw2001-07-180-0/+0
| | | | | This defines the API for membership adaptors, including both the accessor and mutator methods.
* intermediatebwarsaw2001-07-181-0/+228
|
* Changes to support realnames and topic filters. Specifically,bwarsaw2001-07-181-16/+65
| | | | | | | | | | | | | | - Put logout button in a table cell on the right side of the page - Redesign the "change your subscription" section so that the address and realname fields are below the descriptive text, not to the right of it. Added the real name field. Also, changed the text in the submit button to read "Change My Address and Name" and make both the submit button and the "Change Globally" button span both columns. - Under "Subscription Options", added an entry for the topic filter selection fields. If the list admin hasn't defined any topics, the value will be just the label "No topics defined".
* Removed commented out macros ALIAS_UID, ALIAS_GID, ALIAS_FLAGS.bwarsaw2001-07-181-5/+0
|
* Add Mailman/Gui to list of directories to descend into.bwarsaw2001-07-181-1/+1
|
* Add Mailman/Gui/Makefile to list of generated files.bwarsaw2001-07-182-5/+5
|
* - Add missing import of 'errno'twouters2001-07-181-1/+2
| | | | - main(): use correct variable ('lang', not 'dir') in error message
* _dopipeline(): We don't need to save the return value of __import__().bwarsaw2001-07-131-1/+1
|
* _dopipeline(): Do not include the blank Exception catch-all here, butbwarsaw2001-07-131-9/+0
| | | | | | | | | | instead let them percolate up to Runner.__oneloop(). Now, the proper action when an uncaught exception occurs is to shunt the message instead of trying forever to re-deliver it (possibly causing logs/error to fill up /very/ quickly). Shunted messages can always be resent by moving them back to qfiles/in.
* process(): Be much more careful about bogus source strings for thebwarsaw2001-07-131-13/+14
| | | | | | | | | | | | | | dictionary interpolation. Since they're coming from the great unwashed masses, the autoresponse texts could have bogus %()s bits in them, and using a SafeDict doesn't guard against all kinds of exceptions. So, if any exception is caught during interpolation, log it, and use the raw autoresponse text in the email. Also, because we're not using the buggy rfc822.py module anymore, we don't need to special case the situation when the first line of the autoresponse text has a colon in it.
* hold_for_approval(): Inside admin_immed_notify (i.e. when we'rebwarsaw2001-07-131-1/+1
| | | | | | | | | | | notifying the administrator of the held message), use the list's preferred_language to get the charset. This fixes the UnboundLocalError that occurs if dont_respond_to_post_requests and admin_immed_notify are both true (it shouldn't have been using `lang' in the first place, since that's the /user's/ preferred language, not the admin's). Bug found by Mentor Cana.
* add_error_message(): Don't translate tag if it is the empty string.bwarsaw2001-07-121-1/+4
| | | | Found by Juan Carlos Rey Anaya.
* Translation provided by Juan Carlos Rey Anaya.bwarsaw2001-07-120-0/+0
|
* intermediatebwarsaw2001-07-121-0/+24
|
* show_post_requests(): If the heldmsg is lost, the IOError will havebwarsaw2001-07-121-1/+1
| | | | the error code on e.errno, not e.code. Found by Mentor Cana.
* do_bump(): Use DD-MMM-YYYY date format.bwarsaw2001-07-121-2/+1
|
* Skip the legalese paragraph, and be a little more robust about input.bwarsaw2001-07-121-3/+12
|
* The default install directory has changed.bwarsaw2001-07-121-1/+1
|
* Describe list_admins and genaliasesbwarsaw2001-07-121-0/+5
|
* Heh, I guess I should mention mailmanctl, since it's /critical/ tobwarsaw2001-07-121-1/+9
| | | | getting mail delivered.
* minor formatting for better online autogenbwarsaw2001-07-121-0/+1
|
* Quick and dirty update of the on-line documentation. Can you saybwarsaw2001-07-1240-1477/+3335
| | | | | | | "needs serious attention"? ;) MMGenerator.py: slightly different color scheme to distinguish it from the Mailman 2.0 site.
* Some updates.bwarsaw2001-07-112-11/+27
|
* formattingbwarsaw2001-07-111-0/+1
|
* Update copyright years, but otherwise leave the text alone.bwarsaw2001-07-111-1/+2
|
* Last minute updates.bwarsaw2001-07-111-13/+15
|
* Formatting, updates, and a note about Mozilla.bwarsaw2001-07-111-26/+40
|
* formatting.bwarsaw2001-07-111-13/+13
|
* Last minute updates.bwarsaw2001-07-111-0/+13
|
* Lot's of updates to describe the current system.bwarsaw2001-07-111-73/+96
|
* Last minute updates.bwarsaw2001-07-111-7/+20
|
* Last minute updates.bwarsaw2001-07-113-22/+29
|
* Added news items on the change to confirmation messages and the dumpdbbwarsaw2001-07-111-1/+8
| | | | switches.
* Mentor Cana points out that passwords are optional on this page, butbwarsaw2001-07-111-3/+9
| | | | | the text didn't reflect those semantics. I thought they had; this change must have gotten lost during the templates directory shuffle.
* Added the --marshal/-m and --pickle/-p flags, and the ability to dumpbwarsaw2001-07-111-12/+75
| | | | | | both marshalled .db files and pickled .pck files (the latter of which is assumed to be a pickled message object, which is dumped with a Generator instead of pprint).
* start_runner(): Changed indentation, since the parent always returns.bwarsaw2001-07-111-14/+20
| | | | | Also added a note why "mailmanctl restart" doesn't Do The Right Thing w.r.t. allowing the subrunners to re-import various Mailman modules.
* main(): Catch MMNoSuchUserError which can happen if two unsub requestsbwarsaw2001-07-111-0/+4
| | | | | | were sent and the user confirmed (by web click) them both. The first will delete the member but the second will raise this exception, so do something more sensible than letting it trickle to the top.
* AddMember(), ChangeMemberAddress(), ConfirmUnsubscription(): Shortenbwarsaw2001-07-111-3/+3
| | | | | | | the Subject: header so that it contains just the word "confirm" and the confirmation cookie. This doesn't lose any important information (which is still contained in the body of the message), and it helps for MUAs that like to wrap long Subject: lines.
* __NoMailCmdResponse => __noresponsebwarsaw2001-07-111-20/+29
| | | | | | | | | | | | | | | | | | AddToResponse(): Use augmented assignment where appropriate. ParseMailCommands(): Set the __noresponse flag to 0 at the top of this method, so there's no chance that a previously handled command will mess up sending a response to this command. ProcessConfirmCmd(): Save the results from ProcessConfirmation() and check the operation in the first element. If it's a Pending.SUBSCRIPTION and the mailing list already sends out welcome messages, then don't send a "succeed" confirmation ourselves. Also, in the big except clause, catch MMNoSuchUserError which can happen if the user has made two unsub requests and confirmed them both (the second will trigger the exception). Do something more sensible than letting the exception trickle all the way back up. ;)