diff --git a/dav_events/models.py b/dav_events/models.py index c8def85..0696c1e 100644 --- a/dav_events/models.py +++ b/dav_events/models.py @@ -1,5 +1,7 @@ import os from babel.dates import format_date +from django.conf import settings +from django.contrib.auth import get_user_model from django.db import models from django.template.loader import get_template from django.utils import timezone @@ -11,8 +13,16 @@ from . import config CHOICE_FIELD_MAX_LENGTH = 25 +def get_ghost_user(): + return get_user_model().objects.get_or_create(username='deleted')[0] + + class Event(models.Model): # Meta + owner = models.ForeignKey(settings.AUTH_USER_MODEL, + null=True, + on_delete=models.SET(get_ghost_user), + related_name='events') created_at = models.DateTimeField(auto_now_add=True) accepted = models.BooleanField(default=False) accepted_at = models.DateTimeField(null=True) @@ -130,6 +140,18 @@ class Event(models.Model): if not self.id: if notify is None: notify = True + user_model = get_user_model() + try: + owner = user_model.objects.get(username=self.trainer_email) + except user_model.DoesNotExist: + owner = user_model(username=self.trainer_email, + first_name=self.trainer_firstname, + last_name=self.trainer_familyname, + email=self.trainer_email, + ) + owner.save() + self.owner = owner + super(Event, self).save(**kwargs) if notify: self.send_notification() @@ -173,8 +195,9 @@ class Event(models.Model): else: return None - def render_as_html(self): + def _get_context(self): context = { + 'event': self, 'mode': self.mode, 'sport': self.sport, 'title': self.title, @@ -222,8 +245,10 @@ class Event(models.Model): 'trainer_email': self.trainer_email, 'trainer_phone': self.trainer_phone, 'trainer_2_fullname': self.trainer_2_fullname, - 'event': self, } + return context + + def render_as_html(self): template_name = os.path.join('dav_events', 'event.html') template = get_template(template_name) - return template.render(context) + return template.render(self._get_context()) diff --git a/dav_events/static/dav_events/css/local.css b/dav_events/static/dav_events/css/local.css index fd65298..1e75c4d 100644 --- a/dav_events/static/dav_events/css/local.css +++ b/dav_events/static/dav_events/css/local.css @@ -44,6 +44,10 @@ thead input { font-weight: bold; } +#page-header #login-widget { + float: right; +} + #page-body { padding-top: 2rem; padding-bottom: 6rem; diff --git a/dav_events/templates/dav_events/base.html b/dav_events/templates/dav_events/base.html index 3e5b2aa..e61b129 100644 --- a/dav_events/templates/dav_events/base.html +++ b/dav_events/templates/dav_events/base.html @@ -30,7 +30,8 @@
diff --git a/dav_events/templates/dav_events/home.html b/dav_events/templates/dav_events/home.html index f2a2052..f19952c 100644 --- a/dav_events/templates/dav_events/home.html +++ b/dav_events/templates/dav_events/home.html @@ -6,13 +6,13 @@

Neue Veranstaltung eintragen

- Go + Los

Veranstaltungen managen

- Go + Los

{% endblock page-container %} diff --git a/dav_events/templates/dav_events/includes/login_widget.html b/dav_events/templates/dav_events/includes/login_widget.html new file mode 100644 index 0000000..3b23645 --- /dev/null +++ b/dav_events/templates/dav_events/includes/login_widget.html @@ -0,0 +1,13 @@ +{% if user.is_authenticated %} + +{% else %} +Login +{% endif %} diff --git a/dav_events/views.py b/dav_events/views.py index 46bebfa..93f00bf 100644 --- a/dav_events/views.py +++ b/dav_events/views.py @@ -1,9 +1,10 @@ import logging import os +from django.contrib.auth import login from django.core.exceptions import SuspiciousOperation from django.http import HttpResponseRedirect -from django.urls import reverse_lazy +from django.urls import reverse, reverse_lazy from django.views import generic from . import forms @@ -87,8 +88,18 @@ class EventCreateView(generic.FormView): return self.render_to_response(self.get_context_data(form=next_form, event=event)) else: event.save() + owner = event.owner self.clean_session_data() - return HttpResponseRedirect(reverse_lazy('dav_events:home')) + if self.request.user.is_authenticated(): + next_url = reverse('dav_events:event_list') + elif owner.has_usable_password(): + next_url = reverse('dav_events:event_list') + else: + # owner has no usable password, so he must be new. + # let him set his password. + login(self.request, owner) + next_url = reverse('dav_events:home') + return HttpResponseRedirect(next_url) def clean_session_data(self, session=None): if session is None: