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}")