瀏覽代碼

add my events view

subDesTagesMitExtraKaese 2 年之前
父節點
當前提交
d0bfc1a0ae

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

@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \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"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -60,7 +60,7 @@ msgstr "Zeitslots"
 msgid "Invalid string length: {0} (expected: {1})"
 msgid "Invalid string length: {0} (expected: {1})"
 msgstr "Ungültige Länge der Zeichenkette: {0} (erwartet: {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"
 msgid "About"
 msgstr "Impressum"
 msgstr "Impressum"
 
 
@@ -68,7 +68,7 @@ msgstr "Impressum"
 #: zitap/templates/zitap/create-event.html:9
 #: zitap/templates/zitap/create-event.html:9
 #: zitap/templates/zitap/create-event.html:29
 #: zitap/templates/zitap/create-event.html:29
 #: zitap/templates/zitap/event-not-found.html:10
 #: zitap/templates/zitap/event-not-found.html:10
-#: zitap/templates/zitap/index.html:25
+#: zitap/templates/zitap/index.html:26
 msgid "Create Event"
 msgid "Create Event"
 msgstr "Ereignis erstellen"
 msgstr "Ereignis erstellen"
 
 
@@ -90,11 +90,11 @@ msgstr "Ereignis"
 msgid "Update Slots"
 msgid "Update Slots"
 msgstr "Zeitslot aktualisieren"
 msgstr "Zeitslot aktualisieren"
 
 
-#: zitap/templates/zitap/event.html:52
+#: zitap/templates/zitap/event.html:52 zitap/templates/zitap/my-events.html:32
 msgid "Logout"
 msgid "Logout"
 msgstr "Abmelden"
 msgstr "Abmelden"
 
 
-#: zitap/templates/zitap/event.html:75
+#: zitap/templates/zitap/event.html:75 zitap/views.py:78
 msgid "Login to Update Slots"
 msgid "Login to Update Slots"
 msgstr "Anmelden, um Zeitslots zu aktualisieren"
 msgstr "Anmelden, um Zeitslots zu aktualisieren"
 
 
@@ -102,14 +102,27 @@ msgstr "Anmelden, um Zeitslots zu aktualisieren"
 msgid "Home"
 msgid "Home"
 msgstr "Startseite"
 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."
 msgid "Could not create event. Please try again."
 msgstr "Konnte Ereignis nicht erstellen. Bitte versuchen Sie es erneut."
 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
 #: 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,
             'slots': slots,
         }
         }
         data['days'].append(day)
         data['days'].append(day)
-
+    data['days'] = reversed(data['days'])
     # Fill the rows of the grid
     # Fill the rows of the grid
     last_hour = None
     last_hour = None
     for i in range(slots_per_day):
     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)
     }).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">
       <nav class="main-nav">
         <ul>
         <ul>
           <li><a href="{% url 'index' %}">{% trans "Home" %}</a></li>
           <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>
           <li><a href="{% url 'about' %}">{% trans "About" %}</a></li>
         </ul>
         </ul>
       </nav>
       </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 = [
 urlpatterns = [
     path('', views.index, name='index'),
     path('', views.index, name='index'),
+    path('my-events', views.my_events, name='my-events'),
     path('about', views.about, name='about'),
     path('about', views.about, name='about'),
     path('create-event', views.create_event, name='create-event'),
     path('create-event', views.create_event, name='create-event'),
     path('<str:url>/login', views.login, name='login'),
     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):
 def index(request):
     return render(request, 'zitap/index.html')
     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):
 def about(request):
     return render(request, 'zitap/about.html')
     return render(request, 'zitap/about.html')
 
 
@@ -64,15 +72,19 @@ def event(request, url):
     )
     )
 
 
 def login(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')
         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():
     if form.is_valid():
         data = form.cleaned_data
         data = form.cleaned_data
         user = authenticate(request, username=data['username'], password=data.get('password'))
         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'))
                 user = User.objects.create_user(data['username'], password=data.get('password'))
             except IntegrityError:
             except IntegrityError:
                 form.add_error('username', _('Username already exists'))
                 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)
         auth_login(request, user)
-        participant, created = Participant.objects.get_or_create(event=event, user=user)
-        participant.save()
         request.session['user_id'] = user.id
         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):
 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')
         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):
 def update_slots(request, url):
     try:
     try: