sponsor alt
[wolnelektury.git] / src / messaging / views.py
1 import json
2 from django.http import JsonResponse
3 from django.urls import reverse
4 from django.shortcuts import render
5 from django.views.decorators import cache
6 from django.views.generic import DetailView, UpdateView
7 from . import models
8 from .states import Level, states
9
10
11 def describe(value):
12     if hasattr(value, '_meta'):
13         meta = value._meta
14         return '''objekt typu <a href="%(docs_url)s">%(verbose_name)s</a>.''' % {
15                'docs_url': reverse('django-admindocs-models-detail', args=(meta.app_label, meta.model_name)),
16                'verbose_name': meta.verbose_name,
17             }
18     else:
19         return type(value).__name__
20
21
22 @cache.never_cache
23 def state_info(request, slug):
24     for state in states:
25         if state.slug == slug:
26             break
27     else:
28         return JsonResponse({})
29
30     contact = models.Contact()
31     ctx = {
32         "contact": contact,
33     }
34     ctx.update(state(test=True).get_context(contact))
35     help_text = 'Kontekst:<br>'
36     for k, v in ctx.items():
37         help_text += '<br><code>{{ %s }}</code> — %s<br>' % (k, describe(v))
38
39     return JsonResponse({
40         "help": help_text,
41     })
42
43
44 class OptOutView(UpdateView):
45     model = models.Contact
46     slug_url_kwarg = 'key'
47     slug_field = 'key'
48     fields = []
49
50     def get_success_url(self):
51         return reverse('messaging_optout_ok', args=[self.object.key])
52
53     def form_valid(self, form):
54         self.object.ascend(Level.OPT_OUT)
55         return super().form_valid(form)
56
57
58 class OptOutOkView(DetailView):
59     model = models.Contact
60     slug_url_kwarg = 'key'
61     slug_field = 'key'
62
63