Example #1
0
    def clean(self, value):
        super(CommaSeparatedUserField, self).clean(value)

        if not value:
            return ''
        if isinstance(value, (list, tuple)):
            return value

        names = set(value.split(','))
        names_set = set([name.strip() for name in names if name.strip()])
        users = list(User.objects.filter(
            **{'%s__in' % get_username_field(): names_set}))
        unknown_names = names_set ^ set(
            [getattr(user, get_username_field()) for user in users])

        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(getattr(r, get_username_field()))

        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
Example #2
0
    def clean(self, value):
        super(CommaSeparatedUserField, self).clean(value)

        if not value:
            return ''
        if isinstance(value, (list, tuple)):
            return value

        names = set(value.split(','))
        names_set = set([name.strip() for name in names if name.strip()])
        users = list(
            User.objects.filter(
                **{'%s__in' % get_username_field(): names_set}))
        unknown_names = names_set ^ set(
            [getattr(user, get_username_field()) for user in users])

        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(getattr(r, get_username_field()))

        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
Example #3
0
 def render(self, name, value, attrs=None):
     if value is None:
         value = ''
     elif isinstance(value, (list, tuple)):
         value = (', '.join([getattr(user, get_username_field()) for
                             user in value]))
     return super(CommaSeparatedUserInput, self).render(name, value, attrs)
Example #4
0
 def render(self, name, value, attrs=None):
     if value is None:
         value = ''
     elif isinstance(value, (list, tuple)):
         value = (', '.join(
             [getattr(user, get_username_field()) for user in value]))
     return super(CommaSeparatedUserInput, self).render(name, value, attrs)
Example #5
0
def compose(request,
            recipient=None,
            form_class=ComposeForm,
            template_name='pm/compose.html',
            success_url=None):
    """
    Displays and handles the ``form_class`` form to compose new messages.
    Required Arguments: None
    Optional Arguments:
        ``recipient``: username of a `django.contrib.auth` User, who should
                       receive the message, optionally multiple usernames
                       could be separated by a '+'
        ``form_class``: the form-class to use
        ``template_name``: the template to use
        ``success_url``: where to redirect after successfull submission
    """
    from apps.follow.models import compute_blocked_user_ids_for
    blocked_user_ids = compute_blocked_user_ids_for(request.user)
    recipient_filter = lambda u: u.id not in blocked_user_ids
    if request.method == "POST":
        form = form_class(request.POST, recipient_filter=recipient_filter)
        if form.is_valid():
            form.save(sender=request.user)
            messages.info(request, _(u"Message successfully sent."))
            if success_url is None:
                success_url = reverse('messages_inbox')
            if 'next' in request.GET:
                success_url = request.GET['next']
            return HttpResponseRedirect(success_url)
    else:
        form = form_class()
        if recipient is not None:
            recipients = [
                u for u in User.objects.filter(
                    **{
                        '%s__in' % get_username_field():
                        [r.strip() for r in recipient.split('+')]
                    })
            ]
            form.fields['recipient'].initial = recipients
    return render_to_response(template_name, {
        'form': form,
    },
                              context_instance=RequestContext(request))
Example #6
0
def compose(request, recipient=None, form_class=ComposeForm,
            template_name='pm/compose.html', success_url=None):
    """
    Displays and handles the ``form_class`` form to compose new messages.
    Required Arguments: None
    Optional Arguments:
        ``recipient``: username of a `django.contrib.auth` User, who should
                       receive the message, optionally multiple usernames
                       could be separated by a '+'
        ``form_class``: the form-class to use
        ``template_name``: the template to use
        ``success_url``: where to redirect after successfull submission
    """
    from apps.follow.models import compute_blocked_user_ids_for
    blocked_user_ids = compute_blocked_user_ids_for(request.user)
    recipient_filter = lambda u: u.id not in blocked_user_ids
    if request.method == "POST":
        form = form_class(request.POST, recipient_filter=recipient_filter)
        if form.is_valid():
            form.save(sender=request.user)
            messages.info(request, _(u"Message successfully sent."))
            if success_url is None:
                success_url = reverse('messages_inbox')
            if 'next' in request.GET:
                success_url = request.GET['next']
            return HttpResponseRedirect(success_url)
    else:
        form = form_class()
        if recipient is not None:
            recipients = [u for u in User.objects.filter(**{'%s__in' %
                          get_username_field(): [r.strip() for r in
                                                 recipient.split('+')]})]
            form.fields['recipient'].initial = recipients
    return render_to_response(template_name, {
        'form': form,
    }, context_instance=RequestContext(request))