summaryrefslogtreecommitdiff
path: root/postgresqleu/newsevents/backendviews.py
blob: 8488cbcae1f99b29c225337234da9f7f6596c431 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
from django.core.exceptions import PermissionDenied
from django.shortcuts import get_object_or_404

from postgresqleu.util.backendviews import backend_list_editor
from postgresqleu.util.auth import authenticate_backend_group
from postgresqleu.util.messaging import messaging_implementations, get_messaging_class
from postgresqleu.confreg.models import ConferenceTweetQueue, MessagingProvider
from postgresqleu.confreg.backendforms import BackendSeriesMessagingForm
from postgresqleu.newsevents.backendforms import BackendNewsForm, BackendAuthorForm
from postgresqleu.newsevents.backendforms import BackendPostQueueForm


def edit_news(request, rest):
    authenticate_backend_group(request, 'News administrators')

    return backend_list_editor(request,
                               None,
                               BackendNewsForm,
                               rest,
                               bypass_conference_filter=True,
                               topadmin='News',
                               return_url='/admin/',
    )


def edit_author(request, rest):
    # Require superuser to add new author profiles, since amongst other things it
    # can browse all users.
    if not request.user.is_superuser:
        raise PermissionDenied("Access denied")

    return backend_list_editor(request,
                               None,
                               BackendAuthorForm,
                               rest,
                               bypass_conference_filter=True,
                               topadmin='News',
                               return_url='/admin/',
    )


def edit_postqueue(request, rest):
    authenticate_backend_group(request, 'News administrators')

    return backend_list_editor(request,
                               None,
                               BackendPostQueueForm,
                               rest,
                               bypass_conference_filter=True,
                               object_queryset=ConferenceTweetQueue.objects.filter(conference__isnull=True),
                               topadmin='News',
                               return_url='/admin/',
    )


def edit_messagingproviders(request, rest):
    if not request.user.is_superuser:
        raise PermissionDenied("Access denied")

    def _load_messaging_formclass(classname):
        return getattr(get_messaging_class(classname), 'provider_form_class', BackendSeriesMessagingForm)

    formclass = BackendSeriesMessagingForm
    u = rest and rest.rstrip('/') or rest
    if u and u != '' and u.isdigit():
        # Editing an existing one, so pick the correct subclass!
        provider = get_object_or_404(MessagingProvider, pk=u, series__isnull=True)
        formclass = _load_messaging_formclass(provider.classname)
    elif u == 'new':
        if '_newformdata' in request.POST or 'classname' in request.POST:
            if '_newformdata' in request.POST:
                c = request.POST['_newformdata'].split(':')[0]
            else:
                c = request.POST['classname']

            if c not in messaging_implementations:
                raise PermissionDenied()

            formclass = _load_messaging_formclass(c)

    # Note! Sync with confreg/backendviews.py
    formclass.no_incoming_processing = True
    formclass.verbose_name = 'news messaging provider'
    formclass.verbose_name_plural = 'news messaging providers'

    return backend_list_editor(request,
                               None,
                               formclass,
                               rest,
                               bypass_conference_filter=True,
                               object_queryset=MessagingProvider.objects.filter(series__isnull=True),
                               topadmin='News',
                               return_url='/admin/',
    )