Esempio n. 1
0
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)})
Esempio n. 2
0
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)
Esempio n. 3
0
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)