for owner/auth stuff.
This commit is contained in:
@@ -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())
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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">
|
||||||
|
|||||||
@@ -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 %}
|
||||||
|
|||||||
13
dav_events/templates/dav_events/includes/login_widget.html
Normal file
13
dav_events/templates/dav_events/includes/login_widget.html
Normal 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 }} <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 %}
|
||||||
@@ -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:
|
||||||
|
|||||||
Reference in New Issue
Block a user