from django import urls from django.contrib.auth.decorators import login_required from django.http import JsonResponse from django.shortcuts import render, redirect from .forms import SignUpForm from home.models import EventPage 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 get_calendar_events(request): # get events from database (EventPage model) start = request.GET.get("start") end = request.GET.get("end") events = ( EventPage.objects.live() .values("id", "title", "start", "end", "color", "tags") .filter(start__gte=start, end__lte=end) ) # to json events_list = list(events) # add page url to each event for event in events_list: event_page = EventPage.objects.live().filter(title=event["title"]).first() if event_page: event["url"] = event_page.url if event_page.is_past: event["color"] = "#666666" return JsonResponse(events_list, safe=False) def get_calendar_event(request, event_id): event = EventPage.objects.live().filter(id=event_id).first() if not event: return JsonResponse({"error": "Event not found"}, status=404) event_dict = { "id": event.id, "title": event.title, "start": event.start, "end": event.end, "location": event.location, "url": event.url, "color": event.color, "tags": list(event.tags.values_list("name", flat=True)), } return JsonResponse(event_dict) def event_signup(request, event_id): if not request.user.is_authenticated: return redirect("login") event = EventPage.objects.live().filter(id=event_id).first() if not event: return redirect("calendar") event.signed_up_users.add(request.user) # redirect to calendar page with ?modal=event_id to show modal with event details return redirect(urls.reverse("calendar") + f"?modal={event_id}") def event_signout(request, event_id): if not request.user.is_authenticated: return redirect("login") event = EventPage.objects.live().filter(id=event_id).first() if not event: return redirect("calendar") event.signed_up_users.remove(request.user) return redirect(urls.reverse("calendar") + f"?modal={event_id}")