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
-~----------~----~----~----~------~----~------~--~---

Reply via email to