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 (
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 ( ) )
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
fields = [ ' location ' , ' when ' , ' seats ' , ' description ' ]
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 ) :
return reverse ( ' rideshare:list ' , kwargs = { ' camp_slug ' : self . camp . slug } )