Author: [email protected]
Date: Sun Feb 1 07:30:52 2009
New Revision: 94
Modified:
trunk/messages/fields.py
trunk/messages/forms.py
trunk/messages/views.py
Log:
allow restricting recipients by passing a filter-callback to the compose
and reply views (optional).
Modified: trunk/messages/fields.py
==============================================================================
--- trunk/messages/fields.py (original)
+++ trunk/messages/fields.py Sun Feb 1 07:30:52 2009
@@ -24,6 +24,11 @@
class CommaSeparatedUserField(forms.Field):
widget = CommaSeparatedUserInput
+ def __init__(self, *args, **kwargs):
+ recipient_filter = kwargs.pop('recipient_filter', None)
+ self._recipient_filter = recipient_filter
+ super(CommaSeparatedUserField, self).__init__(*args, **kwargs)
+
def clean(self, value):
super(CommaSeparatedUserField, self).clean(value)
if not value:
@@ -35,8 +40,17 @@
names_set = set([name.strip() for name in names])
users = list(User.objects.filter(username__in=names_set))
unknown_names = names_set ^ set([user.username for user in users])
- if unknown_names:
- raise forms.ValidationError(_(u"The following usernames are
incorrect: %(users)s") % {'users': ', '.join(unknown_names)})
+
+ recipient_filter = self._recipient_filter
+ invalid_users = []
+ if recipient_filter is not None:
+ for r in users:
+ if recipient_filter(r) is False:
+ users.remove(r)
+ invalid_users.append(r.username)
+
+ if unknown_names or invalid_users:
+ raise forms.ValidationError(_(u"The following usernames are
incorrect: %(users)s") %
{'users': ', '.join(list(unknown_names)+invalid_users)})
return users
Modified: trunk/messages/forms.py
==============================================================================
--- trunk/messages/forms.py (original)
+++ trunk/messages/forms.py Sun Feb 1 07:30:52 2009
@@ -23,6 +23,13 @@
widget=forms.Textarea(attrs={'rows': '12', 'cols':'55'}))
+ def __init__(self, *args, **kwargs):
+ recipient_filter = kwargs.pop('recipient_filter', None)
+ super(ComposeForm, self).__init__(*args, **kwargs)
+ if recipient_filter is not None:
+ self.fields['recipient']._recipient_filter = recipient_filter
+
+
def save(self, sender, parent_msg=None):
recipients = self.cleaned_data['recipient']
subject = self.cleaned_data['subject']
Modified: trunk/messages/views.py
==============================================================================
--- trunk/messages/views.py (original)
+++ trunk/messages/views.py Sun Feb 1 07:30:52 2009
@@ -57,7 +57,7 @@
trash = login_required(trash)
def compose(request, recipient=None, form_class=ComposeForm,
- template_name='messages/compose.html', success_url=None):
+ template_name='messages/compose.html', success_url=None,
recipient_filter=None):
"""
Displays and handles the ``form_class`` form to compose new messages.
Required Arguments: None
@@ -71,7 +71,7 @@
"""
if request.method == "POST":
sender = request.user
- form = form_class(request.POST)
+ form = form_class(request.POST, recipient_filter=recipient_filter)
if form.is_valid():
form.save(sender=request.user)
request.user.message_set.create(
@@ -92,7 +92,7 @@
compose = login_required(compose)
def reply(request, message_id, form_class=ComposeForm,
- template_name='messages/compose.html', success_url=None):
+ template_name='messages/compose.html', success_url=None,
recipient_filter=None):
"""
Prepares the ``form_class`` form for writing a reply to a given message
(specified via ``message_id``). Uses the ``format_quote`` helper from
@@ -101,7 +101,7 @@
parent = get_object_or_404(Message, id=message_id)
if request.method == "POST":
sender = request.user
- form = form_class(request.POST)
+ form = form_class(request.POST, recipient_filter=recipient_filter)
if form.is_valid():
form.save(sender=request.user, parent_msg=parent)
request.user.message_set.create(
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"pinax-updates" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/pinax-updates?hl=en
-~----------~----~----~----~------~----~------~--~---