bornhack-website/src/rideshare/views.py

90 lines
2.9 KiB
Python
Raw Normal View History

2018-08-10 15:41:19 +00:00
from django.contrib import messages
from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin
2018-08-13 17:06:30 +00:00
from django.urls import reverse
2018-08-08 20:18:39 +00:00
from django.views.generic import (
ListView,
DetailView,
CreateView,
UpdateView,
DeleteView,
)
from django.http import HttpResponseRedirect
2018-08-10 15:41:19 +00:00
from django import forms
2018-08-08 20:18:39 +00:00
from camps.mixins import CampViewMixin
2018-08-10 15:41:19 +00:00
from utils.email import add_outgoing_email
2018-08-08 20:18:39 +00:00
from .models import Ride
2018-08-10 15:41:19 +00:00
class ContactRideForm(forms.Form):
message = forms.CharField(
widget=forms.Textarea(attrs={"placeholder": "Remember to include your contact information!"}),
label="Write a message to this rideshare",
help_text="ATTENTION!: Pressing send will send an email with the above text. It is up to you to include your contact information so the person receiving the email can contact you.",
)
2018-08-08 20:18:39 +00:00
class RideList(LoginRequiredMixin, CampViewMixin, ListView):
model = Ride
class RideDetail(LoginRequiredMixin, CampViewMixin, DetailView):
model = Ride
2018-08-10 15:41:19 +00:00
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['form'] = ContactRideForm()
return context
def post(self, request, **kwargs):
form = ContactRideForm(request.POST)
if form.is_valid():
ride = self.get_object()
add_outgoing_email(
text_template='rideshare/emails/contact_mail.txt',
to_recipients=[ride.user.emailaddress_set.get(primary=True).email],
formatdict=dict(
rideshare_url="https://bornhack.dk{}".format(
reverse(
'rideshare:detail',
kwargs={"camp_slug": self.camp.slug, "pk": ride.pk}
)
),
message=form.cleaned_data['message'],
),
subject="BornHack rideshare message!",
)
messages.info(request, "Your message has been sent.")
return HttpResponseRedirect(ride.get_absolute_url())
2018-08-08 20:18:39 +00:00
class RideCreate(LoginRequiredMixin, CampViewMixin, CreateView):
model = Ride
fields = ['location', 'when', 'seats', 'description']
def form_valid(self, form, **kwargs):
ride = form.save(commit=False)
ride.camp = self.camp
ride.user = self.request.user
ride.save()
self.object = ride
return HttpResponseRedirect(self.get_success_url())
class IsRideOwnerMixin(UserPassesTestMixin):
def test_func(self):
return self.get_object().user == self.request.user
class RideUpdate(LoginRequiredMixin, CampViewMixin, IsRideOwnerMixin, UpdateView):
2018-08-08 20:18:39 +00:00
model = Ride
fields = ['location', 'when', 'seats', 'description']
class RideDelete(LoginRequiredMixin, CampViewMixin, IsRideOwnerMixin, DeleteView):
2018-08-08 20:18:39 +00:00
model = Ride
2018-08-13 17:06:30 +00:00
def get_success_url(self):
return reverse('rideshare:list', kwargs={'camp_slug': self.camp.slug})