diff --git a/src/postorius/templates/postorius/lists/members.html b/src/postorius/templates/postorius/lists/members.html index a5a0ef3..3af847e 100644 --- a/src/postorius/templates/postorius/lists/members.html +++ b/src/postorius/templates/postorius/lists/members.html @@ -11,8 +11,8 @@ {% list_nav 'list_members' page_title %} - {% if role != 'subscribers' %} -
+ {% if role != 'subscriber' %} + {% csrf_token %}
{% if member_form.email.errors %} @@ -25,7 +25,7 @@ {% endif %} - {% if role == 'subscribers' %} + {% if role == 'subscriber' %}
{% trans 'Unsubscribe all' %} @@ -39,7 +39,7 @@ {% endif %} {% if members|length > 0 %} -
+ {% csrf_token %} {% if form.choices.errors %}
{{ form.choices.errors }}
@@ -48,12 +48,12 @@ - {% if role == 'subscribers' %} + {% if role == 'subscriber' %} {% endif %} @@ -62,7 +62,7 @@ {% for member in members %} - {% if role == 'subscribers' %} + {% if role == 'subscriber' %} @@ -76,7 +76,7 @@
{% trans 'Address' %} - {% if role == 'subscribers' %} + {% if role == 'subscriber' %} {% endif %}
{{ member.email }} {% trans 'Unsubscribe' %}
- {% if role == 'subscribers' %} + {% if role == 'subscriber' %} {% include 'postorius/_pagination.html' with page=members %} {% endif %} {% else %} diff --git a/src/postorius/templates/postorius/menu/list_nav.html b/src/postorius/templates/postorius/menu/list_nav.html index 29122ca..075db5d 100644 --- a/src/postorius/templates/postorius/menu/list_nav.html +++ b/src/postorius/templates/postorius/menu/list_nav.html @@ -29,14 +29,12 @@ {% endif %} {% if user.is_superuser or user.is_list_owner %} diff --git a/src/postorius/tests/mailman_api_tests/test_list_members.py b/src/postorius/tests/mailman_api_tests/test_list_members.py index ad8817b..242e390 100644 --- a/src/postorius/tests/mailman_api_tests/test_list_members.py +++ b/src/postorius/tests/mailman_api_tests/test_list_members.py @@ -73,7 +73,7 @@ @MM_VCR.use_cassette('list_members_access.yaml') def test_page_not_accessible_if_not_logged_in(self): - url = reverse('list_members', args=('foo@example.com', 'subscribers',)) + url = reverse('list_members', args=('foo@example.com', 'subscriber',)) response = self.client.get(url) if "%40" not in url: # Django < 1.8 url = quote(url) @@ -86,28 +86,28 @@ def test_page_not_accessible_for_unprivileged_users(self): self.client.login(username='testuser', password='testpass') response = self.client.get(reverse('list_members', - args=('foo@example.com', 'subscribers',))) + args=('foo@example.com', 'subscriber',))) self.assertEqual(response.status_code, 403) @MM_VCR.use_cassette('list_members_page.yaml') def test_not_accessible_for_moderator(self): self.client.login(username='testmoderator', password='testpass') response = self.client.get(reverse('list_members', - args=('foo@example.com', 'subscribers',))) + args=('foo@example.com', 'subscriber',))) self.assertEqual(response.status_code, 403) @MM_VCR.use_cassette('list_members_page.yaml') def test_page_accessible_for_superuser(self): self.client.login(username='testsu', password='testpass') response = self.client.get(reverse('list_members', - args=('foo@example.com', 'subscribers',))) + args=('foo@example.com', 'subscriber',))) self.assertEqual(response.status_code, 200) @MM_VCR.use_cassette('list_members_page.yaml') def test_page_accessible_for_owner(self): self.client.login(username='testowner', password='testpass') response = self.client.get(reverse('list_members', - args=('foo@example.com', 'subscribers',))) + args=('foo@example.com', 'subscriber',))) self.assertEqual(response.status_code, 200) diff --git a/src/postorius/views/list.py b/src/postorius/views/list.py index 7da7df0..1506fac 100644 --- a/src/postorius/views/list.py +++ b/src/postorius/views/list.py @@ -48,11 +48,11 @@ @list_owner_required def list_members_view(request, list_id, role=None): """Display all members of a given list.""" - if role not in ['owners', 'moderators', 'subscribers']: - return redirect('list_members', list_id, 'subscribers') + 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 == 'subscribers': + if role == 'subscriber': form = MultipleChoiceForm(request.POST) if form.is_valid(): members = form.cleaned_data['choices'] @@ -63,16 +63,10 @@ member_form = MemberForm(request.POST) if member_form.is_valid(): try: - if role == 'moderators': - mailing_list.add_moderator(member_form.cleaned_data['email']) - messages.success( - request, _('%s has been added as list moderator.' - % member_form.cleaned_data['email'])) - elif role == 'owners': - mailing_list.add_owner(member_form.cleaned_data['email']) - messages.success( - request, _('%s has been added as list owner.' - % member_form.cleaned_data['email'])) + 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}) except HTTPError as e: messages.error(request, _(e.msg)) else: @@ -82,7 +76,7 @@ 'list': mailing_list, 'role': role, } - if role == 'subscribers': + if role == 'subscriber': context['members'] = utils.paginate( request, mailing_list.get_member_page, count=request.GET.get('count', 25), @@ -92,11 +86,11 @@ context['count_options'] = [25, 50, 100, 200] else: context['member_form'] = member_form - if role == 'owners': + if role == 'owner': context['members'] = mailing_list.owners context['page_title'] = _('List Owners') context['form_action'] = _('Add Owner') - elif role == 'moderators': + elif role == 'moderator': context['members'] = mailing_list.moderators context['page_title'] = _('List Moderators') context['empty_error'] = _('List has no Moderators') @@ -191,6 +185,7 @@ 'postorius/lists/summary.html', data, context_instance=RequestContext(request)) + class ChangeSubscriptionView(MailingListView): """Change mailing list subscription """ @@ -225,6 +220,7 @@ messages.error(request, e.msg) return redirect('list_summary', self.mailing_list.list_id) + class ListSubscribeView(MailingListView): """ view name: `list_subscribe` @@ -701,16 +697,15 @@ return utils.render_api_error(request) redirect_on_success = redirect('list_members', the_list.list_id, role) - role_singular = role.rstrip('s') - roster = getattr(the_list, role) + roster = getattr(the_list, '{}s'.format(role)) if address not in roster: messages.error(request, - _('The user %(email)s is not in the %(role)s group', - email=address, role=role)) + _('The user %(email)s is not in the %(role)s group') + % {'email': address, 'role': role}) return redirect('list_members', the_list.list_id, role) - if role == 'owners': + if role == 'owner': if len(roster) == 1: messages.error(request, _('Removing the last owner is impossible')) return redirect('list_members', the_list.list_id, role) @@ -724,15 +719,16 @@ if request.method == 'POST': try: - the_list.remove_role(role_singular, address) + the_list.remove_role(role, address) except MailmanApiError: return utils.render_api_error(request) except HTTPError as e: - messages.error(request, _('The user could not be removed: %(msg)s', - msg=e.msg)) + messages.error( + request, _('The user could not be removed: %(msg)s') + % {'msg': e.msg}) return redirect('list_members', the_list.list_id, role) - messages.success(request, _('The user %(address)s has been removed from the %(role)s group.', - address=address, role=role)) + messages.success(request, _('The user %(address)s has been removed from the %(role)s group.') + % {'address': address, 'role': role}) return redirect_on_success return render_to_response(template, {'role': role, 'address': address,