2015-06-12 20:17:24 +02:00
|
|
|
from django.shortcuts import get_object_or_404, render
|
|
|
|
from django.contrib.auth.decorators import login_required
|
|
|
|
from django.http import HttpResponseRedirect, HttpResponse, HttpResponseForbidden
|
|
|
|
from django.core.urlresolvers import reverse
|
|
|
|
from django import forms
|
2015-06-13 22:11:05 +02:00
|
|
|
from django.contrib.gis.geos import GEOSGeometry
|
2015-05-24 17:36:01 +02:00
|
|
|
|
2015-06-12 20:17:24 +02:00
|
|
|
from monstage.models import *
|
|
|
|
|
2015-06-14 12:57:53 +02:00
|
|
|
def addslashes(s):
|
|
|
|
d = {'"':'\\"', "'":"\\'", "\0":"\\\0", "\\":"\\\\", '\n':'\\n'}
|
|
|
|
return ''.join(d.get(c, c) for c in s)
|
|
|
|
|
2015-06-12 20:17:24 +02:00
|
|
|
@login_required
|
|
|
|
def index(request):
|
|
|
|
stages = Stage.objects.filter( profil_user = request.user.profil )
|
|
|
|
return render(request, 'monstage/index.html', {"stages" : stages})
|
|
|
|
|
|
|
|
#
|
|
|
|
# Utilisateurs et profils
|
|
|
|
#
|
|
|
|
|
|
|
|
def profil(request, profil_id):
|
|
|
|
user = get_object_or_404( User, username = profil_id )
|
|
|
|
profil = user.profil
|
|
|
|
stages = Stage.objects.filter( profil_user = profil )
|
|
|
|
return render(request, 'monstage/profil.html', {'profil': profil, 'stages': stages})
|
|
|
|
|
|
|
|
@login_required
|
|
|
|
def profil_edit(request):
|
|
|
|
if request.POST:
|
|
|
|
user = request.user
|
|
|
|
user.first_name = request.POST['first_name']
|
|
|
|
user.last_name = request.POST['last_name']
|
|
|
|
user.save()
|
|
|
|
return HttpResponseRedirect(reverse('monstage:profil', args=(request.user.username,)))
|
|
|
|
else:
|
|
|
|
(profil, _) = Normalien.objects.get_or_create( user = request.user )
|
|
|
|
return render(request, 'monstage/profil_edit.html', {'normalien': profil})
|
|
|
|
|
|
|
|
#
|
|
|
|
# Stages
|
|
|
|
#
|
|
|
|
|
|
|
|
def stage(request, stage_id):
|
|
|
|
stage = get_object_or_404( Stage, pk = stage_id)
|
2015-06-13 23:02:16 +02:00
|
|
|
stage_mod = (stage.profil_user == request.user.profil)
|
|
|
|
return render(request, 'monstage/stage.html', {'stage': stage, 'modifiable': stage_mod})
|
2015-06-12 20:17:24 +02:00
|
|
|
|
|
|
|
class StageForm(forms.ModelForm):
|
|
|
|
class Meta:
|
|
|
|
model = Stage
|
|
|
|
fields = ("type_stage", "start_date", "end_date", "matieres", "sujet", "encadrants")
|
|
|
|
|
|
|
|
@login_required
|
|
|
|
def stage_add(request):
|
|
|
|
if request.POST:
|
|
|
|
form = StageForm(request.POST)
|
|
|
|
if form.is_valid:
|
|
|
|
new_stage = form.save(commit = False)
|
|
|
|
new_stage.user = request.user.profil
|
|
|
|
new_stage.save()
|
|
|
|
return HttpResponseRedirect(reverse('monstage:stage_edit_lieu', args=(new_stage.id,)))
|
|
|
|
else:
|
|
|
|
form = StageForm()
|
|
|
|
return render(request, 'monstage/stage_add.html', { 'form': form })
|
|
|
|
|
2015-06-13 23:02:16 +02:00
|
|
|
def stage_edit_desc(request, stage_id):
|
|
|
|
stage = get_object_or_404( Stage, pk = stage_id)
|
|
|
|
if stage.profil_user != request.user.profil:
|
|
|
|
return HttpResponseForbidden("Ce stage ne vous appartient pas")
|
|
|
|
bullshit = ""
|
|
|
|
if request.POST:
|
|
|
|
pass
|
|
|
|
return render(request, 'monstage/stage_edit_desc.html', { 'stage': stage, 'debug':bullshit })
|
|
|
|
|
2015-06-14 12:57:53 +02:00
|
|
|
class LieuForm(forms.ModelForm):
|
|
|
|
latitude = forms.DecimalField()
|
|
|
|
longitude = forms.DecimalField()
|
|
|
|
delete = forms.BooleanField(help_text=(u'Supprimer ce lieu'))
|
|
|
|
delete.label = ''
|
|
|
|
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
|
|
from django.forms.widgets import HiddenInput
|
|
|
|
super(LieuForm, self).__init__(*args, **kwargs)
|
|
|
|
self.fields['latitude'].widget = HiddenInput()
|
|
|
|
self.fields['longitude'].widget = HiddenInput()
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
model = Lieu
|
|
|
|
fields = ("name", "ville", "pays")
|
|
|
|
|
|
|
|
def save(self, commit=True):
|
|
|
|
lieu = super(StageLieuForm, self).save(commit=False)
|
|
|
|
lieu.coord = GEOSGeometry('POINT(%f %f)' % (self.cleaned_data['latitude'], self.cleaned_data['latitude']), srid=4326)
|
|
|
|
if commit:
|
|
|
|
return lieu.save(commit=True)
|
|
|
|
else:
|
|
|
|
return lieu
|
|
|
|
|
2015-06-12 20:17:24 +02:00
|
|
|
def stage_edit_lieu(request, stage_id):
|
|
|
|
stage = get_object_or_404( Stage, pk = stage_id)
|
2015-06-14 12:57:53 +02:00
|
|
|
bullshit = ''
|
2015-06-13 23:02:16 +02:00
|
|
|
if stage.profil_user != request.user.profil:
|
|
|
|
return HttpResponseForbidden("Ce stage ne vous appartient pas")
|
2015-06-13 22:11:05 +02:00
|
|
|
if request.POST:
|
|
|
|
i = 0
|
|
|
|
j = str(i)
|
|
|
|
bullshit = ", ".join([k for k in request.POST])
|
|
|
|
while request.POST.get('name'+j, False):
|
|
|
|
lieu = Lieu()
|
|
|
|
lieu.name = request.POST['name'+j]
|
|
|
|
lieu.ville = request.POST['ville'+j]
|
|
|
|
lieu.pays = request.POST['pays'+j]
|
2015-06-14 12:57:53 +02:00
|
|
|
|
2015-06-13 22:11:05 +02:00
|
|
|
lieu.save()
|
|
|
|
LieuStage.objects.create(lieu = lieu, stage = stage)
|
|
|
|
i = i+1
|
|
|
|
j = str(i)
|
|
|
|
return HttpResponseRedirect(reverse('monstage:stage_edit_feedback', args=(new_stage.id,)))
|
2015-06-14 12:57:53 +02:00
|
|
|
else:
|
|
|
|
forms = [LieuForm(instance=lieu, prefix=str(counter)) for counter, lieu in enumerate(stage.lieux.all())]
|
|
|
|
emptyform = LieuForm(prefix='{{ID}}')
|
|
|
|
return render(request, 'monstage/stage_edit_lieu.html', { 'stage': stage, 'debug': bullshit, 'forms': forms, 'emptyform': addslashes(emptyform.as_p()), 'numforms':len(forms) })
|
2015-06-13 23:02:16 +02:00
|
|
|
|
|
|
|
class StageFeedbackForm(forms.ModelForm):
|
|
|
|
class Meta:
|
|
|
|
model = Stage
|
|
|
|
fields = ("avis_encadrants", "avis_equipe", "avis_stage", "avis_admin")
|
|
|
|
|
|
|
|
class LieuStageFeedbackForm(forms.ModelForm):
|
|
|
|
class Meta:
|
|
|
|
model = LieuStage
|
|
|
|
fields = ("avis_global", "avis_lieudevie", "avis_lieustage", "avis_pratique", "avis_visite", "avis_anecdotes")
|
|
|
|
|
2015-06-13 22:11:05 +02:00
|
|
|
def stage_edit_feedback(request, stage_id):
|
|
|
|
stage = get_object_or_404( Stage, pk = stage_id)
|
2015-06-12 20:17:24 +02:00
|
|
|
if stage.profil_user != request.user.profil:
|
|
|
|
return HttpResponseForbidden("Ce stage ne vous appartient pas")
|
2015-06-13 23:02:16 +02:00
|
|
|
if request.POST:
|
|
|
|
form_gen = StageFeedbackForm(request.POST, instance = stage, prefix = 'gen')
|
|
|
|
forms_lieux = [(LieuStageFeedbackForm(request.POST, instance = lieustage, prefix = lieustage.id), lieustage.lieu) for lieustage in stage.lieustage_set.all()]
|
|
|
|
valid = form_gen.is_valid()
|
|
|
|
for (form, _) in forms_lieux:
|
|
|
|
if not form.is_valid():
|
|
|
|
valid = False
|
|
|
|
if valid:
|
|
|
|
form_gen.save()
|
|
|
|
for (form, _) in forms_lieux:
|
|
|
|
form.save()
|
|
|
|
return HttpResponseRedirect(reverse('monstage:stage', args=(stage.id,)))
|
|
|
|
else:
|
|
|
|
form_gen = StageFeedbackForm(instance = stage, prefix = 'gen')
|
|
|
|
forms_lieux = [(LieuStageFeedbackForm(instance = lieustage, prefix = lieustage.id), lieustage.lieu) for lieustage in stage.lieustage_set.all()]
|
|
|
|
return render(request, 'monstage/stage_edit_feedback.html', { 'stage': stage, 'form_gen':form_gen, 'forms_lieux':forms_lieux })
|
2015-06-12 20:17:24 +02:00
|
|
|
|
|
|
|
def stage_edit(request, stage_id):
|
|
|
|
stage = get_object_or_404( Stage, pk = stage_id)
|
2015-06-13 23:02:16 +02:00
|
|
|
return render(request, 'monstage/stage_edit.html', {'stage': stage})
|
2015-06-12 20:17:24 +02:00
|
|
|
|
|
|
|
def detail(request, question_id):
|
|
|
|
question = get_object_or_404(Question, pk=question_id)
|
|
|
|
return render(request, 'monstage/detail.html', {'question': question})
|