def list_mass_subscribe(request, list_id): mailing_list = utils.get_client().get_list(list_id) if request.method == 'POST': form = ListMassSubscription(request.POST) if form.is_valid(): for data in form.cleaned_data['emails']: try: # Parse the data to get the address and the display name display_name, address = email.utils.parseaddr(data) validate_email(address) mailing_list.subscribe(address=address, display_name=display_name, pre_verified=True, pre_confirmed=True, pre_approved=True) messages.success( request, _('The address %(address)s has been' ' subscribed to %(list)s.') % {'address': address, 'list': mailing_list.fqdn_listname}) except MailmanApiError: return utils.render_api_error(request) except HTTPError as e: messages.error(request, e) except ValidationError: messages.error(request, _('The email address %s' ' is not valid.') % address) else: form = ListMassSubscription() return render(request, 'postorius/lists/mass_subscribe.html', {'form': form, 'list': mailing_list})
def list_member_options(request, list_id, email): template_name = 'postorius/lists/memberoptions.html' client = utils.get_client() mm_list = List.objects.get_or_404(fqdn_listname=list_id) try: mm_member = client.get_member(list_id, email) member_prefs = mm_member.preferences except Mailman404Error: return render(request, template_name, {'nolists': 'true'}) initial_moderation = dict([ (key, getattr(mm_member, key)) for key in MemberModeration.base_fields ]) if request.method == 'POST': if request.POST.get("formname") == 'preferences': moderation_form = MemberModeration(initial=initial_moderation) preferences_form = UserPreferences( request.POST, initial=member_prefs) if preferences_form.is_valid(): if not preferences_form.has_changed(): messages.info(request, _("No change to the member's preferences.")) return redirect('list_member_options', list_id, email) for key in preferences_form.fields.keys(): member_prefs[key] = preferences_form.cleaned_data[key] try: member_prefs.save() except HTTPError as e: messages.error(request, e.msg) else: messages.success(request, _("The member's preferences have" " been updated.")) return redirect('list_member_options', list_id, email) elif request.POST.get("formname") == 'moderation': preferences_form = UserPreferences(initial=member_prefs) moderation_form = MemberModeration( request.POST, initial=initial_moderation) if moderation_form.is_valid(): if not moderation_form.has_changed(): messages.info(request, _("No change to the member's moderation.")) return redirect('list_member_options', list_id, email) for key in moderation_form.fields.keys(): setattr(mm_member, key, moderation_form.cleaned_data[key]) try: mm_member.save() except HTTPError as e: messages.error(request, e.msg) else: messages.success(request, _("The member's moderation " "settings have been updated.")) return redirect('list_member_options', list_id, email) else: preferences_form = UserPreferences(initial=member_prefs) moderation_form = MemberModeration(initial=initial_moderation) return render(request, template_name, { 'mm_member': mm_member, 'list': mm_list, 'preferences_form': preferences_form, 'moderation_form': moderation_form, })
def list_moderation(request, list_id, held_id=-1): mailing_list = utils.get_client().get_list(list_id) if request.method == 'POST': form = MultipleChoiceForm(request.POST) if form.is_valid(): message_ids = form.cleaned_data['choices'] try: if 'accept' in request.POST: _perform_action(message_ids, mailing_list.accept_message) messages.success(request, _('The selected messages were accepted')) elif 'reject' in request.POST: _perform_action(message_ids, mailing_list.reject_message) messages.success(request, _('The selected messages were rejected')) elif 'discard' in request.POST: _perform_action(message_ids, mailing_list.discard_message) messages.success(request, _('The selected messages were discarded')) except MailmanApiError: return utils.render_api_error(request) except HTTPError: messages.error(request, _('Message could not be found')) else: form = MultipleChoiceForm() held_messages = utils.paginate( request, mailing_list.get_held_page, count=request.GET.get('count', 20), paginator_class=utils.MailmanPaginator) context = { 'list': mailing_list, 'count_options': [25, 50, 100, 200], 'held_messages': held_messages, 'form': form, } return render(request, 'postorius/lists/held_messages.html', context)