for owner/auth stuff.

This commit is contained in:
2018-01-18 16:19:48 +01:00
parent f5d73d556e
commit 8418dcfa91
6 changed files with 62 additions and 8 deletions

View File

@@ -1,5 +1,7 @@
import os import os
from babel.dates import format_date 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.db import models
from django.template.loader import get_template from django.template.loader import get_template
from django.utils import timezone from django.utils import timezone
@@ -11,8 +13,16 @@ from . import config
CHOICE_FIELD_MAX_LENGTH = 25 CHOICE_FIELD_MAX_LENGTH = 25
def get_ghost_user():
return get_user_model().objects.get_or_create(username='deleted')[0]
class Event(models.Model): class Event(models.Model):
# Meta # 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) created_at = models.DateTimeField(auto_now_add=True)
accepted = models.BooleanField(default=False) accepted = models.BooleanField(default=False)
accepted_at = models.DateTimeField(null=True) accepted_at = models.DateTimeField(null=True)
@@ -130,6 +140,18 @@ class Event(models.Model):
if not self.id: if not self.id:
if notify is None: if notify is None:
notify = True 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) super(Event, self).save(**kwargs)
if notify: if notify:
self.send_notification() self.send_notification()
@@ -173,8 +195,9 @@ class Event(models.Model):
else: else:
return None return None
def render_as_html(self): def _get_context(self):
context = { context = {
'event': self,
'mode': self.mode, 'mode': self.mode,
'sport': self.sport, 'sport': self.sport,
'title': self.title, 'title': self.title,
@@ -222,8 +245,10 @@ class Event(models.Model):
'trainer_email': self.trainer_email, 'trainer_email': self.trainer_email,
'trainer_phone': self.trainer_phone, 'trainer_phone': self.trainer_phone,
'trainer_2_fullname': self.trainer_2_fullname, '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_name = os.path.join('dav_events', 'event.html')
template = get_template(template_name) template = get_template(template_name)
return template.render(context) return template.render(self._get_context())

View File

@@ -44,6 +44,10 @@ thead input {
font-weight: bold; font-weight: bold;
} }
#page-header #login-widget {
float: right;
}
#page-body { #page-body {
padding-top: 2rem; padding-top: 2rem;
padding-bottom: 6rem; padding-bottom: 6rem;

View File

@@ -30,7 +30,8 @@
<div id="page-header"> <div id="page-header">
<a href="{% url 'dav_events:home' %}"><img class="brand" width="217" height="30" <a href="{% url 'dav_events:home' %}"><img class="brand" width="217" height="30"
src="{% static 'dav_events/img/brand.png' %}" /></a> src="{% static 'dav_events/img/brand.png' %}" /></a>
<span class="brand"><a href="{% url 'dav_events:home' %}">{% trans 'Veranstaltungen' %}</a></span> <a href="{% url 'dav_events:home' %}"><span class="brand">{% trans 'Veranstaltungen' %}</span></a>
<div id="login-widget">{% include 'dav_events/includes/login_widget.html' %}</div>
</div> </div>
<div id="page-body"> <div id="page-body">

View File

@@ -6,13 +6,13 @@
<div class="well"> <div class="well">
<p class="lead">Neue Veranstaltung eintragen</p> <p class="lead">Neue Veranstaltung eintragen</p>
<p> <p>
<a class="btn btn-primary" href="{% url 'dav_events:event_create' %}">Go</a> <a class="btn btn-primary" href="{% url 'dav_events:event_create' %}">Los</a>
</p> </p>
</div> </div>
<div class="well"> <div class="well">
<p class="lead">Veranstaltungen managen</p> <p class="lead">Veranstaltungen managen</p>
<p> <p>
<a class="btn btn-primary" href="{% url 'dav_events:event_list' %}">Go</a> <a class="btn btn-primary" href="{% url 'dav_events:event_list' %}">Los</a>
</p> </p>
</div> </div>
{% endblock page-container %} {% endblock page-container %}

View File

@@ -0,0 +1,13 @@
{% if user.is_authenticated %}
<div class="dropdown">
<button type="button" id="user_dropdown_button" class="btn btn-default btn-sm dropdown-toggle"
data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
{{ user }}&ensp;<span class="caret"></span>
</button>
<ul class="dropdown-menu dropdown-menu-right" aria-labelledby="user_dropdown_button">
<li><a href="">Logout</a></li>
</ul>
</div>
{% else %}
<a class="btn btn-default btn-sm" disabled="disabled" href="">Login</a>
{% endif %}

View File

@@ -1,9 +1,10 @@
import logging import logging
import os import os
from django.contrib.auth import login
from django.core.exceptions import SuspiciousOperation from django.core.exceptions import SuspiciousOperation
from django.http import HttpResponseRedirect from django.http import HttpResponseRedirect
from django.urls import reverse_lazy from django.urls import reverse, reverse_lazy
from django.views import generic from django.views import generic
from . import forms 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)) return self.render_to_response(self.get_context_data(form=next_form, event=event))
else: else:
event.save() event.save()
owner = event.owner
self.clean_session_data() 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): def clean_session_data(self, session=None):
if session is None: if session is None: