2018-08-10 15:41:19 +00:00
from django . contrib import messages
2018-08-10 16:46:35 +00:00
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 (
2019-06-16 12:32:24 +00:00
widget = forms . Textarea (
attrs = { " placeholder " : " Remember to include your contact information! " }
) ,
2018-08-10 15:41:19 +00:00
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 )
2019-06-16 12:32:24 +00:00
context [ " form " ] = ContactRideForm ( )
2018-08-10 15:41:19 +00:00
return context
def post ( self , request , * * kwargs ) :
form = ContactRideForm ( request . POST )
if form . is_valid ( ) :
ride = self . get_object ( )
add_outgoing_email (
2019-06-16 12:32:24 +00:00
text_template = " rideshare/emails/contact_mail.txt " ,
2018-08-10 15:41:19 +00:00
to_recipients = [ ride . user . emailaddress_set . get ( primary = True ) . email ] ,
formatdict = dict (
rideshare_url = " https://bornhack.dk {} " . format (
reverse (
2019-06-16 12:32:24 +00:00
" rideshare:detail " ,
kwargs = { " camp_slug " : self . camp . slug , " pk " : ride . pk } ,
2018-08-10 15:41:19 +00:00
)
) ,
2019-06-16 12:32:24 +00:00
message = form . cleaned_data [ " message " ] ,
2018-08-10 15:41:19 +00:00
) ,
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
2019-07-11 18:48:14 +00:00
fields = [ " has_car " , " from_location " , " to_location " , " when " , " seats " , " description " ]
2018-08-08 20:18:39 +00:00
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 ( ) )
2018-08-10 16:46:35 +00:00
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
2019-07-11 18:48:14 +00:00
fields = [ " has_car " , " from_location " , " to_location " , " when " , " seats " , " description " ]
2018-08-08 20:18:39 +00:00
2018-08-10 16:46:35 +00:00
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 ) :
2019-06-16 12:32:24 +00:00
return reverse ( " rideshare:list " , kwargs = { " camp_slug " : self . camp . slug } )