예제 #1
0
    def get(self, request, list_id, role):
        """Handle GET for Member view.

        This includes all the membership roles (self.allowed_roles).
        """
        member_form = MemberForm()
        # If the role is misspelled, redirect to the default subscribers.
        if role not in self.allowed_roles:
            return redirect('list_members', list_id, 'member')
        context = dict()
        context['list'] = self.mailing_list
        context['role'] = role
        context['member_form'] = member_form
        context['page_title'] = _('List {}s'.format(role.capitalize()))
        context['query'] = self._prepare_query(request)

        def find_method(count, page):
            return self.mailing_list.find_members(
                context['query'], role=role, count=count, page=page)

        context['members'] = paginate(
            find_method,
            request.GET.get('page', 1),
            request.GET.get('count', 25),
            paginator_class=MailmanPaginator)
        context['page_subtitle'] = '({})'.format(
            context['members'].paginator.count)
        context['form_action'] = _('Add {}'.format(role))
        if context['query']:
            context['empty_error'] = _(
                'No {}s were found matching the search.'.format(role))
        else:
            context['empty_error'] = _('List has no {}s'.format(role))

        return render(request, 'postorius/lists/members.html', context)
예제 #2
0
    def _non_member_post(self, request, role):
        """Handle POST for membership roles owner, moderator and non-member.

        Add memberships if the form is valid otherwise redirect to list_members
        page with an error message.
        """
        member_form = MemberForm(request.POST)
        if member_form.is_valid():
            try:
                self.mailing_list.add_role(
                    role=role,
                    address=member_form.cleaned_data['email'],
                    display_name=member_form.cleaned_data['display_name'])
                messages.success(
                    request,
                    _('%(email)s has been added with the role %(role)s'.format(
                        email=member_form.cleaned_data['email'],
                        role=role)))
            except HTTPError as e:
                messages.error(request, e.msg.decode())
        else:
            messages.error(request, member_form.errorsg)
        return redirect('list_members', self.mailing_list.list_id, role)
예제 #3
0
 def test_form_errors(self):
     form = MemberForm({})
     self.assertFalse(form.is_valid())
     self.assertEqual(form.errors['email'][0],
                      'Please enter an email address.')
     form = MemberForm({'email': 'invalid.example.com'})
     self.assertFalse(form.is_valid())
     self.assertEqual(form.errors['email'][0],
                      'Please enter a valid email address.')
예제 #4
0
파일: list.py 프로젝트: aisworld/postorius
def list_members_view(request, list_id, role=None):
    """Display all members of a given list."""
    if role not in ['owner', 'moderator', 'subscriber']:
        return redirect('list_members', list_id, 'subscriber')
    mailing_list = List.objects.get_or_404(fqdn_listname=list_id)
    if request.method == 'POST':
        if role == 'subscriber':
            form = MultipleChoiceForm(request.POST)
            if form.is_valid():
                members = form.cleaned_data['choices']
                for member in members:
                    mailing_list.unsubscribe(member)
                messages.success(request, _('The selected members'
                                            ' have been unsubscribed'))
                return redirect('list_members', list_id, role)
        else:
            member_form = MemberForm(request.POST)
            if member_form.is_valid():
                try:
                    getattr(mailing_list, 'add_%s' % role)(
                        member_form.cleaned_data['email'])
                    messages.success(
                        request, _('%(email)s has been added'
                                   ' with the role %(role)s')
                        % {'email': member_form.cleaned_data['email'],
                           'role': role})
                    return redirect('list_members', list_id, role)
                except HTTPError as e:
                    messages.error(request, _(e.msg))
    else:
        form = MultipleChoiceForm()
        member_form = MemberForm()
    context = {
        'list': mailing_list,
        'role': role,
    }
    if role == 'subscriber':
        context['page_title'] = _('List subscribers')
        if request.GET.get('q'):
            query = context['query'] = request.GET['q']
            if "*" not in query:
                query = '*{}*'.format(query)

            # Proxy the find_members method to insert the query
            def find_method(count, page):
                return mailing_list.find_members(query, count=count, page=page)
        else:
            find_method = mailing_list.get_member_page
        context['members'] = paginate(
            find_method,
            request.GET.get('page'),
            request.GET.get('count', 25),
            paginator_class=MailmanPaginator)
        if mailing_list.member_count == 0:
            context['empty_error'] = _('List has no Subscribers')
        else:
            context['empty_error'] =\
                _('No member was found matching the search')
        context['form'] = form
    else:
        context['member_form'] = member_form
        if role == 'owner':
            context['page_title'] = _('List owners')
            context['members'] = mailing_list.owners
            context['form_action'] = _('Add owner')
        elif role == 'moderator':
            context['page_title'] = _('List moderators')
            context['members'] = mailing_list.moderators
            context['empty_error'] = _('List has no moderators')
            context['form_action'] = _('Add moderator')
    return render(request, 'postorius/lists/members.html', context)
예제 #5
0
파일: list.py 프로젝트: systers/postorius
def list_members_view(request, list_id, role=None):
    """Display all members of a given list."""
    if role not in ['owner', 'moderator', 'subscriber']:
        return redirect('list_members', list_id, 'subscriber')
    mailing_list = List.objects.get_or_404(fqdn_listname=list_id)
    if request.method == 'POST':
        if role == 'subscriber':
            form = MultipleChoiceForm(request.POST)
            if form.is_valid():
                members = form.cleaned_data['choices']
                for member in members:
                    mailing_list.unsubscribe(member)
                messages.success(request, _('The selected members'
                                            ' have been unsubscribed'))
                return redirect('list_members', list_id, role)
        else:
            member_form = MemberForm(request.POST)
            if member_form.is_valid():
                try:
                    getattr(mailing_list, 'add_%s' % role)(
                        member_form.cleaned_data['email'])
                    messages.success(
                        request, _('%(email)s has been added'
                                   ' with the role %(role)s')
                        % {'email': member_form.cleaned_data['email'],
                           'role': role})
                    return redirect('list_members', list_id, role)
                except HTTPError as e:
                    messages.error(request, _(e.msg))
    else:
        form = MultipleChoiceForm()
        member_form = MemberForm()
    context = {
        'list': mailing_list,
        'role': role,
    }
    if role == 'subscriber':
        context['page_title'] = _('List subscribers')
        if request.GET.get('q'):
            query = context['query'] = request.GET['q']
            if "*" not in query:
                query = '*{}*'.format(query)

            # Proxy the find_members method to insert the query
            def find_method(count, page):
                return mailing_list.find_members(query, count=count, page=page)
        else:
            find_method = mailing_list.get_member_page
        context['members'] = utils.paginate(
            request, find_method, count=request.GET.get('count', 25),
            paginator_class=utils.MailmanPaginator)
        if len(mailing_list.members) == 0:
            context['empty_error'] = _('List has no Subscribers')
        else:
            context['empty_error'] =\
                _('No member was found matching the search')
        context['count_options'] = [25, 50, 100, 200]
        context['form'] = form
    else:
        context['member_form'] = member_form
        if role == 'owner':
            context['page_title'] = _('List owners')
            context['members'] = mailing_list.owners
            context['form_action'] = _('Add owner')
        elif role == 'moderator':
            context['page_title'] = _('List moderators')
            context['members'] = mailing_list.moderators
            context['empty_error'] = _('List has no moderators')
            context['form_action'] = _('Add moderator')
    return render(request, 'postorius/lists/members.html', context)
예제 #6
0
 def test_form_labels(self):
     form = MemberForm({})
     self.assertTrue('email' in form.fields.keys())
     self.assertEqual(form.fields['email'].label, 'Email Address')
     self.assertTrue('display_name' in form.fields.keys())
     self.assertEqual(form.fields['display_name'].label, 'Display Name')