| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
|
| |
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
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
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).
|
| |
|
|
|
| |
last_post_time is <= 0 (meaning there have been no messages posted to
the mailing list yet). Idea by Jim Tittsler.
|
| |
|
|
|
|
| |
version of this module.
main(): simplified connection creation, set readermode in constructor.
|
| |
|
|
| |
reader from the NNTP class constructor.
|
| |
|
|
|
|
| |
address of the message. GetEnvelopeSender() no longer exists (and
GetSender() keys off of USE_ENVELOPE_SENDER, so it still has the same
basic functionality).
|
| |
|
|
|
|
|
|
|
| |
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.
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
| | |
|
| |
|
|
|
| |
to handle the case where the header is set to an explicit address, as
specified in mlist.reply_to_address.
|
| | |
|
| |
|
|
| |
attribute.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
| |
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).
|
| |
|
|
| |
(saves a little time during testing).
|
| |
|
|
| |
(including text areas).
|
| | |
|
| |
|
|
|
| |
header or a List-ID header. This should break most common listserv
infloops, and addresses PR#206.
|
| | |
|
| | |
|
| |
|
|
| |
the top of this function.
|
| |
|
|
|
|
| |
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".
|
| |
|
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
| | |
|
| |
|
|
| |
flag (it doesn't work and isn't easy to use).
|
| | |
|
| | |
|
| |
|
|
| |
self.__writelog().
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
`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.
|
| |
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
|
|
| |
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.
|
| |
|
|
|
| |
textarea and file upload widgets. It takes some crafty decoding to
make these widgets work well together (see admin.py).
|
| |
|
|
| |
Berliner.
|
| |
|
|
| |
apparently be None, which makes no sense, so we skip it.
|
| |
|
|
|
| |
traverse into $prefix/Mailman, which avoids all the time-consuming and
unnecessary compilation in the archive directories.
|
| |
|
|
|
|
| |
module.
DeliverToUser(): Add the Replybot module as the first in the list.
|
| |
|
|
|
|
|
|
|
|
|
|
| |
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).
|
| | |
|
| |
|
|
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
|
|
| |
MailList.__init__(): Call Autoresponder.InitVars(). This only
works for new mailing lists.
MailList.GetConfigInfo(): Get the `autoreply' configuration info
from the Autoresponder class.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
| |
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.
|
| |
|
|
| |
easier to change. Bump the data version to 17.
|
| |
|
|
|
| |
addresses since the matching inside FindMatchingAddresses() are
lowercased.
|
| |
|
|
|
|
|
|
|
|
| |
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.
|