summaryrefslogtreecommitdiff
path: root/Mailman
Commit message (Collapse)AuthorAgeFilesLines
...
* main(): Utils.GetCharSet() requires the language as an argument.bwarsaw2001-05-011-1/+2
|
* ScanMessages(): Use a better way to runtime import the module and callbwarsaw2001-05-011-4/+5
| | | | | its process() function. This doesn't require three nested getattr() calls.
* QuoteHyperChars(): Porting forward from 2.0.4 a patch to get rid ofbwarsaw2001-05-011-15/+2
| | | | | the deprecated regsub so as to quiet a Python 2.1 warning. The standard cgi.escape() function does all this for us.
* MailmanLogo(): Remove hyperlinks from logos (and also the links to thebwarsaw2001-05-011-17/+7
| | | | | | sponsor home pages). In practice, too many end-user list members were following those links out of desperation to get unsubscribed from deployed lists.
* Porting forward from 2.0.4 a patch to replace the deprecated regsubbwarsaw2001-05-011-14/+13
| | | | | | module with re. This quiets a Python 2.1 warning. Also, de-string-module-ification.
* HandleBouncingAddress(): Mark some more strings for translation.bwarsaw2001-05-011-9/+12
| | | | | Original patch by Juan Carlos Rey Anaya after bug report by Patrick Timmons. Patch modified by Barry.
* As if this file wasn't enough of an ugly hack ;) -- significantbwarsaw2001-04-091-170/+349
| | | | | | | | | | | | | | redesign of the admin page. From the NEWS file: - Redesign of the membership management page. The page is now split into three subcategories (Membership List, Mass Subscription, and Mass Removal). The Membership List subcategory now supports searching for member addresses by regular expression, and if necessary, it groups member addresses first alphabetically, and then by chunks. Mass Subscription and Mass Removal now alternatively support file upload, with one address per line.
* Hidden(): New class for "hidden" input item.bwarsaw2001-04-091-0/+7
| | | | Form.set_action(): New method to retrospectively set the form action.
* chunkify(): Removed.bwarsaw2001-04-091-18/+0
|
* process(): Do no harm to MIME documents when adding the header andbwarsaw2001-04-031-10/+28
| | | | | | | | | | | | | | footer. The rules now are: - if the message is not a MIME, or is only a text/plain, then add the header and footer the old way (concatenation). - if the message is multipart/mixed, add the header and footer as text/plain subparts (prepended and appended to the original subparts). - anything else goes through without headers and footers added. We may elaborate on this last bit in the future.
* intermediatebwarsaw2001-04-021-0/+113
|
* Support the new confirmation scheme for both subscriptions andbwarsaw2001-04-021-14/+55
| | | | | | | | | | | | | | | | removals. Specifically, AddMember(): Use the new Pending.new() function interface, which requires that an appropriate operation key come first. ProcessConfirmation(): Include more detail on the MMBadConfirmation exceptions. Decode the operation key first to see whether we're doing a SUBSCRIPTION or an UNSUBSCRIPTION confirmation. The latter is new and simply calls DeleteMember() if confirmed. ConfirmUnsubscription(): Similar to subscription confirmation, this generates a response with the removal confirmation instructions and url.
* _dispose(): Fix a bug whereby if an uncaught exception occurred, thebwarsaw2001-04-021-1/+4
| | | | | unprocessed pipeline module list wouldn't get saved in the message metadata.
* main(): Use a Document() instead of a HeadlessDocument() and set thebwarsaw2001-04-021-2/+2
| | | | background color to white when there's no such member.
* process_form(): Passwords are no longer required for unsubscribing.bwarsaw2001-04-021-4/+4
| | | | If missing, just arrange to have the unsubscription request confirmed.
* Added PENDING_FILE_SCHEMA_VERSION.bwarsaw2001-04-021-2/+5
|
* wrap(): Added honor_leading_ws argument, defaulted to 1, which if truebwarsaw2001-04-021-5/+5
| | | | | inhibits wrapping of paragraphs with leading whitespace. When false, all paragraphs are wrapped.
* Changes to the new pending.db file format:bwarsaw2001-04-021-7/+37
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - Entry eviction times are stored as a sub-dictionary under a separate key called `evictions'. This leaves the cookie data as whatever was given to the new() function. The keys of the eviction dictionary are the cookies and the values are the time at which the entry should be removed. - Another new key `version' for future backwards compatibility <wink>. - Each entry for the cookie should have a op key as its first element, which currently should be either Pending.SUBSCRIPTION or Pending.UNSUBSCRIPTION. new(): Make sure the `evictions' dictionary is present. confirm(): Don't strip off the last element of the tuple. _load(): If there's no pending.db file, return a dictionary containing an empty `evictions' sub-dictionary. _save(): Check the eviction times in the `evictions' sub-dictionary. Also, add the schema `version' entry. _update(): Fix the conversion from pending_subscriptions.db to pending.db file format so that SUBSCRIPTION entries include a default language. Also move the eviction times (which in the old format are the time the request was made) to the `evictions' sub-dictionary and add the PENDING_REQUEST_LIFE value.
* __init__(): "join" is now a synonym for "subscribe". "remove" andbwarsaw2001-04-021-19/+51
| | | | | | | | | | | | | | | "leave" are synonyms for "unsubscribe". ProcessUnsubscribeCmd(): It is now legal to omit both the password and email address when unsubscribing via the -request address. If the password is omitted, a removal confirmation message is generated. However if the password was given, it must match the user's password or the removal fails. If the password matches, the removal is performed immediately. Note that there's an ambiguity if exactly one argument is given: is it a password or an email address? Use FindUser() to decide giving preference to email address.
* Update copyright years.bwarsaw2001-03-291-1/+1
|
* Import _ from Mailman.i18n.bwarsaw2001-03-261-3/+1
|
* ProcessConfirmCmd(): Confirmation cookie is now a string, not abwarsaw2001-03-261-26/+12
| | | | | number. Also, rewrite slightly the error message string, and other messages.
* AddMember(): Use the new Pending module interface. Also, generate thebwarsaw2001-03-261-27/+30
| | | | | | | | new style verify.txt response message, which now also contains the confirmation url. ProcessConfirmation(): Use the new Pending module interface. Watch for tuple unpack errors. Return the unpacked data when successful.
* Rewritten and simplified. There's no need to make the logic livebwarsaw2001-03-261-107/+100
| | | | | | | | | | | | | | | | | | | | | inside a class; use the module as if a singleton instance. The pending database is now stored in data/pending.db. new(): Stores a new cookie in the pending.db with the key an sha hexdigest based on the current time, a random number and the content. The timestamp is now the point in the future at which this entry can be evicted. confirm(): Given a cookie, return the data (with the timestamp stripped off), or None if the cookie is missing from the database. _load(), _save(): Rewritten and simplified low-level marshal/unmarshal of the database. Assumes lock is acquired. _update(): For use by the bin/update script to convert from pending_subscription.db to pending.db (the old keys ought to be compatible).
* Minor change to module docstring.bwarsaw2001-03-261-2/+1
|
* main(): "See this page in" -> "View this page in".bwarsaw2001-03-241-1/+1
|
* list_listinfo(): "See this page in" -> "View this page in".bwarsaw2001-03-241-1/+1
|
* process_form(): There's no `mail' local variable, so origsender isbwarsaw2001-03-241-3/+2
| | | | bogus too. Fix these references to `user' instead.
* AddMember(): Change the subscription confirmation Subject: header tobwarsaw2001-03-241-1/+1
| | | | | "... confirm <number>" instead of "... request <number>". This goes along with changes to MailCommandHandler.py.
* Untabify.bwarsaw2001-03-241-165/+165
|
* Various fixes for better handling of confirmation messages,bwarsaw2001-03-241-25/+31
| | | | | | | | | | | | | | | | | | | | | | specifically: ParseMailCommands(): Use a mimelib MsgReader idiom to get just the body of the message, sans headers. This could be made easier with Python 2.1's xreadlines module or a better interface on Message objects. Substitute one crufty parsing of the Subject: line for another. Actually now, any command can appear anywhere on the Subject: line, and confirmation messages are just another form of that (by changing the Subject: text from "request" to "confirm" -- same as the body command). Fixed typos in language support (mlist -> self). Rewrite the "errors-in-command" string so that the substitution keys are actually the correct ones! AddError(): Python 2.0-isms.
* main(): Typo fix by Juan Carlos.bwarsaw2001-03-231-1/+1
|
* handlesubscription(): except Errors.MMAreadyAMember, nottwouters2001-03-071-1/+1
| | | | Errors.MMAlreadyMember. That's way too many M's and A's there!
* admin_overview(): Adjust %(default_hostname)s to match variable nametwouters2001-03-051-2/+2
| | | | | (hostname) and fix the mailto:mailman_owner link to do interpolation explicitly, since Link() does not do that.
* admin_overview(): Fixed typo which broke admin overview.bwarsaw2001-03-031-1/+1
|
* FormatPasswordStuff() -> password_inputs()bwarsaw2001-03-031-6/+9
| | | | | | | | | | membership_options(): We have to urllib.quote() the value attribute on the hidden input tag, otherwise it is impossible to unsubscribe addresses with quotes in them (which are valid RFC822 addresses). change_options(): Be sure to urllib.unquote() the user value field, undoing the effects of membership_options() and allowing unsubscription of addresses with quotes in them.
* main()/module global: i18n "new order" changes. Usebwarsaw2001-03-031-41/+40
| | | | | | | | | | | | i18n.set_language() and doc.set_language() to set up the proper language for the response page. Also, consistency with other CGI scripts in their use of "from Mailman.htmlformater import *". De-string-module-ification. Other random code cleaning.
* FormatUsers(): Use GetOptionsURL() instead of GetScriptURL() since thebwarsaw2001-03-031-2/+1
| | | | | | former does the proper urllib.quote()'ing of the email address. Close SF bug #214161 (old Jitterbug PR#198).
* _dispose(): Have to pass ParseMailCommands() the msgdata dictionary.bwarsaw2001-03-031-1/+1
|
* option_help(): Fix two typos that broke variable details screen.bwarsaw2001-03-031-3/+3
|
* REpat: recognize 'Re[2]:' style reply-subjects. Fixes SF bug #223554.twouters2001-03-031-1/+1
|
* Fix for (tracker) bug #222409: don't barf when approving a subscription oftwouters2001-03-021-3/+7
| | | | | someone who is already on the list. Since the person was added between the subscription request and the approval, just drop the request.
* GetConfigInfo(): Elaborate slightly about the `host_name' attribute.bwarsaw2001-03-021-17/+17
| | | | | | | Also, comment out `web_page_url' -- it's probably just too dangerous to allow list admins to change this via the web. Making a mistake breaks the list (for the rare situation where the base url needs changing, it's up to the site admin to effect).
* A start on updating i18n support -- still needs work.bwarsaw2001-03-021-15/+23
| | | | | | | | | | | | | | ParseMailCommands(): add an extra argument `msgdata' since it's convenient to have access to the message's metadata. Mark some more strings as translatable. Make sure messages getting sent back to the user have the proper Content-Type: based on the language context. msg.GetSender() -> msg.get_sender() Close SF bug #405131, submitted by Chris Ryan.
* msg.GetSender() -> msg.get_sender()bwarsaw2001-03-021-3/+3
| | | | Close SF bug #405131, submitted by Chris Ryan.
* Update the MAILMAN_URL to point to the new www.gnu.org pages.bwarsaw2001-03-021-1/+1
|
* Big i18n changes. Specifically,bwarsaw2001-03-021-22/+40
| | | | | | | | | | | | | send_digests() -> send_i18n_digests(): this does the bulk of the digest crafting, but it's wrapped in send_digests() which first sets up the language context for the digest (the list's preferred language). send_i18n_digests(): Also make sure that for text/plain parts, the charset is set correctly to the list's preferred language character set. Mark more strings as translatable.
* Mark some more strings as translatable.bwarsaw2001-03-021-4/+6
|
* Lots of i18n changes. Specifically,bwarsaw2001-03-021-33/+53
| | | | | | | | | | | | | | | | | | | We have to play module global footsie with _() so that the rejection notices are marked as translatable, but aren't actually translated until later. Administrivia.rejection_notice(), MessageTooBig.rejection_notice(): Convert to interpolating local variables. hold_for_approval(): Conversion to the new way of i18n'ing. The language context at this point is the user's preferred language, so we craft his notification first before temporarily changing contexts to the list's preferred (for the admin). We no longer need to duplicate the code as was done before, but some things need to be re-translated in the context of the list's preferred language. Also, translate the exception str() and rejection_notice for real here.
* process(), decorate(): Mark a few more strings as translatable.bwarsaw2001-03-021-3/+5
|