def list_index(request, template='postorius/index.html'): """Show a table of all public mailing lists. """ if request.method == 'POST': return redirect("list_summary", list_id=request.POST["list"]) lists = [] error = None only_public = True if request.user.is_superuser: only_public = False try: lists = sorted(List.objects.all(only_public=only_public), key=lambda l: l.fqdn_listname) logger.debug(lists) except MailmanApiError: return utils.render_api_error(request) choosable_domains = _get_choosable_domains(request) return render(request, template, {'count_options': [10, 25, 50, 100, 200], 'error': error, 'lists': utils.paginate(request, lists, count=request.GET.get('count', 10)), 'domain_count': len(choosable_domains)})
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)
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)