Files
kursy-mirror/kursy/views.py

125 lines
3.6 KiB
Python

from django import urls
from django.contrib.auth.decorators import login_required
from django.http import JsonResponse
from django.shortcuts import redirect, render
from home.models import EventOccurrence, EventPage
from .forms import SignUpForm
def signup(request):
if request.method == "POST":
form = SignUpForm(request.POST)
if form.is_valid():
user = form.signup(request, form.save())
return redirect("profile")
else:
form = SignUpForm()
return render(request, "signup.html", {"form": form})
@login_required
def profile(request):
return render(request, "profile.html", {"user": request.user})
def calendar(request):
return render(request, "calendar.html")
def occurrence_detail(request, occurrence_id):
occ = (
EventOccurrence.objects.select_related("event").filter(id=occurrence_id).first()
)
if not occ:
return redirect("calendar")
event = occ.event.specific
return render(
request,
"occurrence_detail.html",
{
"occurrence": occ,
"event": event,
"user_signed_up": occ.user_signed_up(request.user),
},
)
def get_calendar_occurrences(request):
# get occurrences from database (EventOccurrence model)
start = request.GET.get("start")
end = request.GET.get("end")
occurrences = EventOccurrence.objects.filter(
start__gte=start, end__lte=end
).select_related("event")
events_list = []
for occ in occurrences:
event = occ.event.specific
events_list.append(
{
"id": occ.id,
"event_id": event.id,
"title": event.title,
"start": occ.start,
"end": occ.end,
"location": event.location,
"url": event.url,
"color": "#666666" if occ.is_past else event.color,
"tags": list(event.tags.values_list("name", flat=True)),
}
)
return JsonResponse(events_list, safe=False)
def get_calendar_occurrence(request, occurrence_id):
occ = (
EventOccurrence.objects.select_related("event").filter(id=occurrence_id).first()
)
if not occ:
return JsonResponse({"error": "Occurrence not found"}, status=404)
event = occ.event.specific
event_dict = {
"id": occ.id,
"event_id": event.id,
"title": event.title,
"start": occ.start,
"end": occ.end,
"location": event.location,
"url": event.url,
"color": "#666666" if occ.is_past else event.color,
"tags": list(event.tags.values_list("name", flat=True)),
"attendees_count": occ.attendees_count,
}
return JsonResponse(event_dict)
def occurrence_signup(request, occurrence_id):
if not request.user.is_authenticated:
return redirect("login")
occ = EventOccurrence.objects.filter(id=occurrence_id).first()
if not occ:
return redirect("calendar")
occ.signed_up_users.add(request.user)
occ.save()
# redirect to calendar page with ?modal=occurrence_id to show modal with event details
return redirect(urls.reverse("calendar") + f"?modal={occurrence_id}")
def occurrence_signout(request, occurrence_id):
if not request.user.is_authenticated:
return redirect("login")
occ = EventOccurrence.objects.filter(id=occurrence_id).first()
if not occ:
return redirect("calendar")
occ.signed_up_users.remove(request.user)
occ.save()
return redirect(urls.reverse("calendar") + f"?modal={occurrence_id}")