create cafe view
This commit is contained in:
parent
ba01ccd3e5
commit
be39be53f0
5 changed files with 94 additions and 2 deletions
|
|
@ -18,7 +18,8 @@
|
|||
"Keycloak",
|
||||
"tabindex",
|
||||
"onetimelogin",
|
||||
"Ammeldelink"
|
||||
"Ammeldelink",
|
||||
"orga"
|
||||
],
|
||||
"ignoreWords": [],
|
||||
"import": []
|
||||
|
|
|
|||
|
|
@ -113,3 +113,22 @@ class RegisterGuest(forms.Form):
|
|||
max_length=200
|
||||
)
|
||||
accept_agb = HoneypotField(label="")
|
||||
|
||||
|
||||
class CreateCafe(forms.Form):
|
||||
"""
|
||||
Form for creating new Repair-Cafés.
|
||||
"""
|
||||
location = forms.CharField(
|
||||
label="Ort",
|
||||
max_length=200,
|
||||
help_text="Name des Orts, z.B. AWO."
|
||||
)
|
||||
address = forms.CharField(
|
||||
label="Adresse",
|
||||
max_length=200,
|
||||
help_text="Straße, Hausnummer und Ortsname."
|
||||
)
|
||||
event_date = forms.DateField(
|
||||
label="Veranstaltungsdatum"
|
||||
)
|
||||
|
|
|
|||
15
rc_hip/repapp/templates/repapp/orga/create_cafe.html
Normal file
15
rc_hip/repapp/templates/repapp/orga/create_cafe.html
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
{% extends "repapp/base.html" %}
|
||||
{% load crispy_forms_tags %}
|
||||
{% block title %}
|
||||
- Repair-Café anlegen
|
||||
{% endblock title %}
|
||||
{% block page_title %}
|
||||
Repair-Café anlegen
|
||||
{% endblock page_title %}
|
||||
{% block content %}
|
||||
<form action="{% url 'create_cafe' %}" method="post">
|
||||
{% csrf_token %}
|
||||
{{ form|crispy }}
|
||||
<button type="submit" class="btn btn-primary submit_button">Absenden</button>
|
||||
</form>
|
||||
{% endblock content %}
|
||||
|
|
@ -26,6 +26,7 @@ urlpatterns = [
|
|||
views.one_time_login, name="one_time_login"),
|
||||
path("member/login/",
|
||||
views.member_login, name="member_login"),
|
||||
path("orga/cafe/create", views.CreateCafeView.as_view(), name="create_cafe"),
|
||||
path("cron", views.cron, name="cron"),
|
||||
path("bootstrap", views.bootstrap, name="bootstrap"),
|
||||
path("process_mails", views.process_mails, name="process_mails"),
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ import random
|
|||
import string
|
||||
import time
|
||||
import os
|
||||
import logging
|
||||
from hashlib import sha256
|
||||
from django.template.loader import render_to_string
|
||||
from django.urls import reverse
|
||||
|
|
@ -17,14 +18,18 @@ from django.shortcuts import get_object_or_404, render
|
|||
from django.http import HttpResponseRedirect, HttpResponse
|
||||
from django.core.exceptions import PermissionDenied
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from django.contrib.auth.mixins import LoginRequiredMixin
|
||||
from django.contrib.auth import authenticate, login
|
||||
from django.utils.timezone import now
|
||||
from .forms import RegisterDevice, RegisterGuest
|
||||
from .forms import RegisterDevice, RegisterGuest, CreateCafe
|
||||
from .models import (Cafe, Device, Guest, OneTimeLogin,
|
||||
CustomUser, Organisator, Reparateur)
|
||||
from . import mail_interface
|
||||
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def send_one_time_login_mail(secret, mail, request):
|
||||
"""
|
||||
Send a mail with a one time login link.
|
||||
|
|
@ -156,6 +161,14 @@ def is_member(user):
|
|||
return organisator or reparateur
|
||||
|
||||
|
||||
def is_organisator(user):
|
||||
"""
|
||||
Test is a user is a Repair-Café organisator.
|
||||
"""
|
||||
organisator = Organisator.objects.filter(mail=user.email).first()
|
||||
return organisator is not None
|
||||
|
||||
|
||||
def create_one_time_login(user, url) -> str:
|
||||
"""
|
||||
create_one_time_login creates a one time login object for guest user logins.
|
||||
|
|
@ -401,6 +414,7 @@ def member_login(request):
|
|||
"""
|
||||
Login page for repair cafe members, using OIDC.
|
||||
"""
|
||||
# TODO: create member login landing page
|
||||
return render(
|
||||
request,
|
||||
"repapp/member_login.html"
|
||||
|
|
@ -462,3 +476,45 @@ def bootstrap(request):
|
|||
request,
|
||||
"repapp/bootstrap.html"
|
||||
)
|
||||
|
||||
|
||||
class CreateCafeView(LoginRequiredMixin, generic.edit.FormView):
|
||||
"""
|
||||
Organisator view for registering a new guest.
|
||||
"""
|
||||
# TODO: create test
|
||||
login_url = reverse_lazy('member_login')
|
||||
template_name = "repapp/orga/create_cafe.html"
|
||||
form_class = CreateCafe
|
||||
|
||||
def form_valid(self, form):
|
||||
if not is_organisator(self.request.user):
|
||||
raise PermissionDenied('Only accessible for organisator.')
|
||||
|
||||
location = form.cleaned_data['location']
|
||||
address = form.cleaned_data['address']
|
||||
event_date = form.cleaned_data['event_date']
|
||||
|
||||
cafe = Cafe(
|
||||
location=location,
|
||||
address=address,
|
||||
event_date=event_date,
|
||||
)
|
||||
cafe.save()
|
||||
|
||||
messages.add_message(self.request, messages.INFO,
|
||||
'Es wurde ein neues Repair-Café '
|
||||
f'am {cafe.event_date} angelegt')
|
||||
|
||||
# TODO: redirect to orga main view
|
||||
return HttpResponseRedirect(
|
||||
reverse_lazy('index')
|
||||
)
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
if not is_organisator(self.request.user):
|
||||
logger.warning('Access violation: %s is no organisator!' %
|
||||
self.request.user)
|
||||
raise PermissionDenied('Only accessible for organisator.')
|
||||
|
||||
return super(CreateCafeView, self).get_context_data(**kwargs)
|
||||
|
|
|
|||
Reference in a new issue