from django.contrib import messages from django.http import HttpResponseForbidden from django.shortcuts import redirect, render from .forms import ExistingListItemForm, ItemForm from .models import Item, List from apps.lyric.models import User UNLOCKED_THEMES = frozenset(["theme-default"]) def home_page(request): return render(request, "apps/dashboard/home.html", {"form": ItemForm()}) def new_list(request): form = ItemForm(data=request.POST) if form.is_valid(): nulist = List.objects.create() if request.user.is_authenticated: nulist.owner = request.user nulist.save() form.save(for_list=nulist) return redirect(nulist) else: return render(request, "apps/dashboard/home.html", {"form": form}) def view_list(request, list_id): our_list = List.objects.get(id=list_id) if our_list.owner: if not request.user.is_authenticated: return redirect("/") if request.user != our_list.owner and request.user not in our_list.shared_with.all(): return HttpResponseForbidden() form = ExistingListItemForm(for_list=our_list) if request.method == "POST": form = ExistingListItemForm(for_list=our_list, data=request.POST) if form.is_valid(): form.save() return redirect(our_list) return render(request, "apps/dashboard/list.html", {"list": our_list, "form": form}) def my_lists(request, user_id): owner = User.objects.get(id=user_id) if not request.user.is_authenticated: return redirect("/") if request.user.id != owner.id: return HttpResponseForbidden() return render(request, "apps/dashboard/my_lists.html", {"owner": owner}) def share_list(request, list_id): our_list = List.objects.get(id=list_id) try: recipient = User.objects.get(email=request.POST["recipient"]) if recipient == request.user: return redirect(our_list) our_list.shared_with.add(recipient) except User.DoesNotExist: pass messages.success(request, "An invite has been sent if that address is registered.") return redirect(our_list) def set_theme(request): if not request.user.is_authenticated: return redirect("home") if request.method == "POST": theme = request.POST.get("theme", "") if theme in UNLOCKED_THEMES: request.user.theme = theme request.user.save(update_fields=["theme"]) return redirect("home")