Browse Source

add my events view

subDesTagesMitExtraKaese 2 years ago
parent
commit
d0bfc1a0ae

+ 24 - 11
locale/de/LC_MESSAGES/django.po

@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-12-18 15:35+0000\n"
+"POT-Creation-Date: 2022-12-18 22:55+0000\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -60,7 +60,7 @@ msgstr "Zeitslots"
 msgid "Invalid string length: {0} (expected: {1})"
 msgstr "Ungültige Länge der Zeichenkette: {0} (erwartet: {1})"
 
-#: zitap/templates/zitap/about.html:5 zitap/templates/zitap/index.html:19
+#: zitap/templates/zitap/about.html:5 zitap/templates/zitap/index.html:20
 msgid "About"
 msgstr "Impressum"
 
@@ -68,7 +68,7 @@ msgstr "Impressum"
 #: zitap/templates/zitap/create-event.html:9
 #: zitap/templates/zitap/create-event.html:29
 #: zitap/templates/zitap/event-not-found.html:10
-#: zitap/templates/zitap/index.html:25
+#: zitap/templates/zitap/index.html:26
 msgid "Create Event"
 msgstr "Ereignis erstellen"
 
@@ -90,11 +90,11 @@ msgstr "Ereignis"
 msgid "Update Slots"
 msgstr "Zeitslot aktualisieren"
 
-#: zitap/templates/zitap/event.html:52
+#: zitap/templates/zitap/event.html:52 zitap/templates/zitap/my-events.html:32
 msgid "Logout"
 msgstr "Abmelden"
 
-#: zitap/templates/zitap/event.html:75
+#: zitap/templates/zitap/event.html:75 zitap/views.py:78
 msgid "Login to Update Slots"
 msgstr "Anmelden, um Zeitslots zu aktualisieren"
 
@@ -102,14 +102,27 @@ msgstr "Anmelden, um Zeitslots zu aktualisieren"
 msgid "Home"
 msgstr "Startseite"
 
-#: zitap/views.py:41
+#: zitap/templates/zitap/index.html:19 zitap/templates/zitap/my-events.html:5
+#: zitap/templates/zitap/my-events.html:9
+#, fuzzy
+#| msgid "Event"
+msgid "My Events"
+msgstr "Meine Ereignisse"
+
+#: zitap/templates/zitap/login.html:5 zitap/templates/zitap/login.html:11
+msgid "Login"
+msgstr "Anmelden"
+
+#: zitap/views.py:49
 msgid "Could not create event. Please try again."
 msgstr "Konnte Ereignis nicht erstellen. Bitte versuchen Sie es erneut."
 
-#: zitap/views.py:83
-msgid "Username already exists"
-msgstr "Benutzername existiert bereits"
+#: zitap/views.py:76
+#, fuzzy
+#| msgid "Event"
+msgid "Login to My Events"
+msgstr "Anmelden, um meine Ereignisse anzuzeigen"
 
 #: zitap/views.py:95
-msgid "Login failed"
-msgstr "Anmeldung fehlgeschlagen"
+msgid "Username already exists"
+msgstr "Benutzername existiert bereits"

+ 1 - 1
zitap/helpers.py

@@ -98,7 +98,7 @@ def slots2grid( event : Event, participants : list[Participant]) -> dict :
             'slots': slots,
         }
         data['days'].append(day)
-
+    data['days'] = reversed(data['days'])
     # Fill the rows of the grid
     last_hour = None
     for i in range(slots_per_day):

+ 1 - 1
zitap/static/zitap/js/live-updates.js

@@ -46,5 +46,5 @@ window.addEventListener("load", function()
     }).then(response => response.json()).then(setCheckboxes)
   }
 
-  this.document.getElementById("update-button").style.display = "none"
+  //this.document.getElementById("update-button").style.display = "none"
 })

+ 1 - 0
zitap/templates/zitap/index.html

@@ -16,6 +16,7 @@
       <nav class="main-nav">
         <ul>
           <li><a href="{% url 'index' %}">{% trans "Home" %}</a></li>
+          <li><a href="{% url 'my-events' %}">{% trans "My Events" %}</a></li>
           <li><a href="{% url 'about' %}">{% trans "About" %}</a></li>
         </ul>
       </nav>

+ 34 - 0
zitap/templates/zitap/login.html

@@ -0,0 +1,34 @@
+{% extends "zitap/index.html" %}
+{% load static %}
+{% load i18n %}
+
+{% block title %}{% trans "Login" %}{% endblock %}
+
+{% block head %}
+{% endblock %}
+
+{% block content %}
+<h1>{% trans "Login" %}</h1>
+
+<form action="{% url 'login' url=url %}" method="post">
+    {% csrf_token %}
+    <div class="grid-container">
+    {% for field in form %}
+    <div class="{{ field.name }}">
+        <p>
+        {{ field.label_tag }}<br>
+        {{ field }}
+        {% if field.help_text %}
+        <small>{{ field.help_text }}</small>
+        {% endif %}
+        {% if field.errors %}
+        <small>{{ field.errors }}</small>
+        {% endif %}
+        </p>
+    </div>
+    {% endfor %}
+    </div>
+    {{ form.non_field_errors }}
+    <input type="submit" value="{{ text }}" id="login-button">
+</form>
+{% endblock %}

+ 36 - 0
zitap/templates/zitap/my-events.html

@@ -0,0 +1,36 @@
+{% extends "zitap/index.html" %}
+{% load static %}
+{% load i18n %}
+
+{% block title %}{% trans "My Events" %}{% endblock %}
+
+{% block content %}
+<div class="outline">
+    <h1>{% trans 'My Events' %}</h1>
+    {% for event in events %}
+    <div class="event">
+        <p class="event-name">
+            <a href="{% url 'event' url=event.url %}">{{ event.name }}</a>
+            <ol class="event-dates">
+              {% for date in event.date_set.all %}
+            <li class="event-date">
+                {{ date.date }} {{ event.start_time }}-{{ event.end_time }}
+            </li>
+            {% endfor %}
+          </ol>
+          <ul class="event-participants">
+            {% for participant in event.participant_set.all %}
+            <li class="event-participant">
+              {{ participant.user.username }}
+            </li>
+            {% endfor %}
+          </ul>
+        </p>
+    </div>
+    {% endfor %}
+    <button class="logout" onclick="location.href='{% url 'logout' url='my-events' %}'">
+      {% trans "Logout" %}
+    </button>
+  </div>
+  {% endblock %}
+  

+ 1 - 0
zitap/urls.py

@@ -4,6 +4,7 @@ from . import views
 
 urlpatterns = [
     path('', views.index, name='index'),
+    path('my-events', views.my_events, name='my-events'),
     path('about', views.about, name='about'),
     path('create-event', views.create_event, name='create-event'),
     path('<str:url>/login', views.login, name='login'),

+ 28 - 27
zitap/views.py

@@ -14,6 +14,14 @@ from .helpers import slots2string, string2slots, get_slot_count, slots2grid
 def index(request):
     return render(request, 'zitap/index.html')
 
+def my_events(request):
+    if not request.user.is_authenticated:
+        return HttpResponseRedirect('/my-events/login')
+    events = Event.objects.filter(participant__user=request.user).prefetch_related('date_set', 'participant_set', 'participant_set__user')
+    return render(request, 'zitap/my-events.html', {
+        'events': events,
+    })
+
 def about(request):
     return render(request, 'zitap/about.html')
 
@@ -64,15 +72,19 @@ def event(request, url):
     )
 
 def login(request, url):
-    try:
-        event = Event.objects.get(url=url)
-    except Event.DoesNotExist:
+    if url == 'my-events':
+        text = _('Login to My Events')
+    elif Event.objects.filter(url=url).exists():
+        text = _('Login to Update Slots')
+    else:
         return render(request, 'zitap/event-not-found.html')
 
-    if request.method != 'POST':
-        return HttpResponseNotAllowed(['POST'])
-
-    form = LoginForm(request.POST)
+    if request.method == 'POST':
+        form = LoginForm(request.POST)
+    elif request.user.is_authenticated:
+        return HttpResponseRedirect(f'/{url}')
+    else:
+        form = LoginForm()
     if form.is_valid():
         data = form.cleaned_data
         user = authenticate(request, username=data['username'], password=data.get('password'))
@@ -81,33 +93,22 @@ def login(request, url):
                 user = User.objects.create_user(data['username'], password=data.get('password'))
             except IntegrityError:
                 form.add_error('username', _('Username already exists'))
-                return render(
-                    request, 
-                    'zitap/event.html', 
-                    {'event': event, 'grid': slots2grid(event, event.participant_set.all()), 'login_form': form, 'update_form': None}
-                )
+                return render(request, 'zitap/login.html', {'form': form, 'url': url, 'text': text})
 
         auth_login(request, user)
-        participant, created = Participant.objects.get_or_create(event=event, user=user)
-        participant.save()
         request.session['user_id'] = user.id
-        return HttpResponseRedirect(f'/{event.url}')
-    form.add_error(None, _('Login failed'))
-    return render(
-        request, 
-        'zitap/event.html', 
-        {'event': event, 'grid': slots2grid(event, event.participant_set.all()), 'login_form': form, 'update_form': None}
-    )
+        return HttpResponseRedirect(f'/{url}')
+    return render(request, 'zitap/login.html', {'form': form, 'url': url, 'text': text})
 
 def logout(request, url):
-    try:
-        event = Event.objects.get(url=url)
-    except Event.DoesNotExist:
+    auth_logout(request)
+    if url == 'my-events':
+        return HttpResponseRedirect(f'/{url}')
+    elif Event.objects.filter(url=url).exists():
+        return HttpResponseRedirect(f'/{url}')
+    else:
         return render(request, 'zitap/event-not-found.html')
 
-    if 'user_id' in request.session:
-        del request.session['user_id']
-    return HttpResponseRedirect(f'/{event.url}')
 
 def update_slots(request, url):
     try: