pflaenz.li/pflaenzli/pflaenzli/views.py
2023-04-05 18:18:55 +02:00

100 lines
3.2 KiB
Python

from django.shortcuts import render, get_object_or_404, redirect
from django.utils import timezone
from django.contrib import messages
from django.contrib.auth.decorators import login_required
from django.http import HttpResponseForbidden
from .forms import CreateOfferForm
from .models import PflaenzliUser, Offer, Wish
from .mail import send_offer_email
from .upload import generate_unique_filename
def index(request):
return render(request, "app/index.html")
def list_offers(request, filters=None):
offers = Offer.objects.all()
return render(request, "offer/search.html", {"offers": offers})
@login_required
def create_offer(request):
if request.method == "POST":
form = CreateOfferForm(request.POST, request.FILES)
if form.is_valid():
offer = form.save(commit=False)
offer.image.name = generate_unique_filename(form.cleaned_data['image'].name)
offer.user = request.user
offer.title = offer.title.title()
offer.save()
messages.success(request, "Offer uploaded successfully!")
return redirect("offer_detail", offer.id)
else:
form = CreateOfferForm()
return render(request, "basic_form.html", {"form": form, "button_label": "Create"})
@ login_required
def offer_detail(request, offer_id):
offer = get_object_or_404(Offer, id=offer_id)
return render(request, "offer/detail.html", {"offer": offer, "wishes": ["Monstera", "Tradescantia"]})
@login_required
def offer_delete(request, offer_id):
offer = get_object_or_404(Offer, id=offer_id)
if offer.user != request.user:
return HttpResponseForbidden()
offer.delete()
messages.success(request, "Offer deleted successfully!")
return redirect("list_offers")
@login_required
def offer_edit(request, offer_id):
offer = get_object_or_404(Offer, id=offer_id)
if offer.user != request.user:
return HttpResponseForbidden()
if request.method == "POST":
form = CreateOfferForm(request.POST, request.FILES, instance=offer)
if form.is_valid():
offer = form.save(commit=False)
offer.image.name = generate_unique_filename(form.cleaned_data['image'].name)
offer.user = request.user
offer.save()
messages.success(request, "Offer updated successfully!")
return redirect("offer_detail", offer.id)
else:
form = CreateOfferForm(instance=offer)
return render(request, "basic_form.html", {"form": form, "button_label": "Update"})
@login_required
def offer_trade(request, offer_id):
offer = get_object_or_404(Offer, id=offer_id)
sender = request.user
recipient = offer.user
if sender != recipient:
send_offer_email(request, offer, sender, recipient)
messages.success(request, f"{recipient.username} was successfully notified")
else:
messages.error(request, "You can't trade with yourself!")
return redirect("offer_detail", offer_id)
def user_detail(request, user_id):
user = get_object_or_404(PflaenzliUser, id=user_id)
offers = Offer.objects.filter(user=user_id)
wishes = Wish.objects.filter(user=user_id)
return render(request, "user/public.html", {"user": user, "offers": offers, "wishes": wishes})