X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/71d31efcdb70122f705d8136239771747ca3b07d..df60910b2d457f031cbe0a153e51e7378c0165d8:/src/messaging/views.py diff --git a/src/messaging/views.py b/src/messaging/views.py index f3881bb61..fc09d72c4 100644 --- a/src/messaging/views.py +++ b/src/messaging/views.py @@ -3,11 +3,24 @@ from django.http import JsonResponse from django.urls import reverse from django.shortcuts import render from django.utils.translation import ugettext as _ -from django.views.generic import UpdateView +from django.views.decorators import cache +from django.views.generic import DetailView, UpdateView from . import models -from .states import states +from .states import Level, states +def describe(value): + if hasattr(value, '_meta'): + meta = value._meta + return _('''a %(verbose_name)s object.''') % { + 'docs_url': reverse('django-admindocs-models-detail', args=(meta.app_label, meta.model_name)), + 'verbose_name': meta.verbose_name, + } + else: + return type(value).__name__ + + +@cache.never_cache def state_info(request, slug): for state in states: if state.slug == slug: @@ -15,16 +28,14 @@ def state_info(request, slug): else: return JsonResponse({}) - meta = state().get_example_object('').model._meta - - help_text = _('''Context:
- {{ %(model_name)s }} – a %(verbose_name)s object.
- You can put it in in the fields Subject and Body using dot notation, like this:
- {{ %(model_name)s.id }}.''') % { - 'model_name': meta.model_name, - 'docs_url': reverse('django-admindocs-models-detail', args=(meta.app_label, meta.model_name)), - 'verbose_name': meta.verbose_name, - } + contact = models.Contact() + ctx = { + "contact": contact, + } + ctx.update(state(test=True).get_context(contact)) + help_text = '%s:
' % _('Context') + for k, v in ctx.items(): + help_text += '
{{ %s }} — %s
' % (k, describe(v)) return JsonResponse({ "help": help_text, @@ -35,5 +46,19 @@ class OptOutView(UpdateView): model = models.Contact slug_url_kwarg = 'key' slug_field = 'key' - fields = ['level'] + fields = [] + + def get_success_url(self): + return reverse('messaging_optout_ok', args=[self.object.key]) + + def form_valid(self, form): + self.object.ascend(Level.OPT_OUT) + return super().form_valid(form) + + +class OptOutOkView(DetailView): + model = models.Contact + slug_url_kwarg = 'key' + slug_field = 'key' +