From: Olivier Larchevêque Date: Tue, 16 Aug 2011 15:05:05 +0000 (-0400) Subject: PJ ofrre emploi X-Git-Tag: DAE+RH~255^2~10^2~1 X-Git-Url: http://git.auf.org/?p=auf_rh_dae.git;a=commitdiff_plain;h=7f25c8a687346a7143ef9e4d8155a5a45e0bbab0 PJ ofrre emploi --- diff --git a/project/recrutement/api.py b/project/recrutement/api.py index 8b0d5eb..2965f2e 100644 --- a/project/recrutement/api.py +++ b/project/recrutement/api.py @@ -74,8 +74,10 @@ class API: candidat = emploi.Candidat() candidat.offre_emploi = offre form = emploiForms.NoCaptchaPostulerOffreEmploiForm(self.request.POST, instance=candidat) + piecesForm = emploiForms.CandidatPieceForm(self.request.POST, self.request.FILES, instance=candidat) if form.is_valid(): candidat = form.save() + piecesForm.save() data = serializers.serialize('json', [candidat,]) evaluateurs = candidat.offre_emploi.evaluateurs.all() diff --git a/project/recrutement/urls.py b/project/recrutement/urls.py index b2ae6f6..52aefd6 100644 --- a/project/recrutement/urls.py +++ b/project/recrutement/urls.py @@ -1,18 +1,13 @@ # -*- encoding: utf-8 -* -from django.conf.urls.defaults import patterns, url - - -""" url(r'^pieces/$', 'recrutement.api.postuler_appel_offre', - name='pieces'), - -url(r'^postuler_appel_offre/$', - 'recrutement.api.postuler_appel_offre', name='postuler_appel_offre'), -""" +from django.conf.urls.defaults import patterns, url +from auf.django.emploi import settings urlpatterns = patterns('', url(r'^$', 'index', name='index'), + (r'^prive/(?P.*)$', 'recrutement.views.mediaserve', {'document_root': settings.OE_PRIVE_MEDIA_ROOT}), + url(r'^affecter_evaluateurs_offre_emploi/$', 'recrutement.views.affecter_evaluateurs_offre_emploi', name='affecter_evaluateurs_offre_emploi'), diff --git a/project/recrutement/views.py b/project/recrutement/views.py index c181d26..43137b0 100755 --- a/project/recrutement/views.py +++ b/project/recrutement/views.py @@ -4,6 +4,7 @@ from django.core.mail import send_mail from django.core.urlresolvers import reverse from django.contrib import messages from django.contrib.auth.models import User +from django.views.static import serve from django.http import HttpResponse, HttpResponseRedirect from django.shortcuts import render_to_response, redirect, get_object_or_404 from django.template import Context, RequestContext, Template @@ -11,7 +12,28 @@ from django.core.mail import EmailMultiAlternatives from forms import * from models import * -from recrutement.workflow import grp_evaluateurs_recrutement +from recrutement.workflow import grp_evaluateurs_recrutement, recrutement_groupes + +################################################################################ +# MEDIA PRIVE +################################################################################ + +def mediaserve(request, path, document_root=None, show_indexes=False): + """ + Sécuriser l'accès aux fichiers uploadés + """ + grant_ok = False + user = request.user + + for grp in user.groups.all(): + if grp in recrutement_groupes: + grant_ok = True + break + + if not grant_ok: + return redirect_interdiction(request) + + return serve(request, path, document_root, show_indexes) def index(request): return render_to_response('recrutement/index.html', {}, diff --git a/project/settings.py b/project/settings.py index ebd4729..16cdef7 100644 --- a/project/settings.py +++ b/project/settings.py @@ -29,6 +29,7 @@ PRIVE_MEDIA_ROOT = os.path.join(os.path.dirname(__file__), 'media_prive') # Examples: "http://media.lawrence.com", "http://example.com/media/" MEDIA_URL = '/media/' PRIVE_MEDIA_URL = '/dae/prive/' +OE_PRIVE_MEDIA_URL = '/recrutement/prive/' # URL prefix for admin media -- CSS, JavaScript and images. Make sure to use a diff --git a/src/auf.django.emploi/auf/django/emploi/api.py b/src/auf.django.emploi/auf/django/emploi/api.py index 80cf08f..9b368c7 100644 --- a/src/auf.django.emploi/auf/django/emploi/api.py +++ b/src/auf.django.emploi/auf/django/emploi/api.py @@ -8,7 +8,7 @@ from restkit import request, Resource import datamaster_modeles.models as ref import poster import urllib2 -import settings +from auf.django.emploi import settings STATUS_OK = 200 @@ -46,6 +46,8 @@ class API: url = settings.RECRUTEMENT_URLS[self.env] + "candidat_add/%s/" % offre_id r = Resource(url) params = self.request.POST + for k, up_file in self.request.FILES.items(): + params[k] = up_file opener = poster.streaminghttp.register_openers() datagen, headers = poster.encode.multipart_encode(params) request = urllib2.Request(url, datagen, headers) @@ -55,4 +57,3 @@ class API: if len(candidats) == 1: return candidats[0] return None - diff --git a/src/auf.django.emploi/auf/django/emploi/models.py b/src/auf.django.emploi/auf/django/emploi/models.py index 35a0851..306cd6e 100755 --- a/src/auf.django.emploi/auf/django/emploi/models.py +++ b/src/auf.django.emploi/auf/django/emploi/models.py @@ -4,9 +4,8 @@ import datetime from django.core.files.storage import FileSystemStorage from tinymce import models as tinymce_models from django.db import models -import settings - import datamaster_modeles.models as ref +import settings ### CONSTANTES ### # HELP_TEXT @@ -147,12 +146,11 @@ class Candidat(Metadata): # Upload de fichiers -storage_prive = FileSystemStorage(settings.PRIVE_MEDIA_ROOT, - base_url=settings.PRIVE_MEDIA_URL) +storage_prive = FileSystemStorage(settings.OE_PRIVE_MEDIA_ROOT, + base_url=settings.OE_PRIVE_MEDIA_URL) def candidat_piece_dispatch(instance, filename): - path = u'%s/%s_%s_%s/%s/%s' % ('emplois', instance.candidat.nom, - instance.candidat.prenom, instance.candidat.id, instance.nom, filename) + path = u'%s/%s/%s' % ('emplois', instance.candidat.id, filename) return path class CandidatPiece(models.Model): diff --git a/src/auf.django.emploi/auf/django/emploi/settings.py b/src/auf.django.emploi/auf/django/emploi/settings.py index 1786be2..e60179d 100644 --- a/src/auf.django.emploi/auf/django/emploi/settings.py +++ b/src/auf.django.emploi/auf/django/emploi/settings.py @@ -3,18 +3,17 @@ import os from django.conf import settings -# Absolute path to the directory that holds media. -# Example: "/home/media/media.lawrence.com/" -MEDIA_ROOT = getattr(settings, 'OE_MEDIA_ROOT', - os.path.join(os.path.dirname(__file__), 'media')) -PRIVE_MEDIA_ROOT = getattr(settings, 'OE_PRIV_MEDIA_ROOT', - os.path.join(os.path.dirname(__file__), 'media_prive')) +# default +MEDIA_ROOT = getattr(settings, 'MEDIA_ROOT', None) +PRIVE_MEDIA_ROOT = getattr(settings, 'PRIVE_MEDIA_ROOT', None) +MEDIA_URL = getattr(settings, 'MEDIA_URL', None) +PRIVE_MEDIA_URL = getattr(settings, 'PRIVE_MEDIA_URL', None) -# URL that handles the media served from MEDIA_ROOT. Make sure to use a -# trailing slash if there is a path component (optional in other cases). -# Examples: "http://media.lawrence.com", "http://example.com/media/" -MEDIA_URL = '/media/' -PRIVE_MEDIA_URL = '/prive/' +# custom +OE_MEDIA_ROOT = getattr(settings, 'OE_MEDIA_ROOT', MEDIA_ROOT) +OE_PRIVE_MEDIA_ROOT = getattr(settings, 'OE_PRIV_MEDIA_ROOT', PRIVE_MEDIA_ROOT) +OE_MEDIA_URL = getattr(settings, 'OE_MEDIA_URL', MEDIA_URL) +OE_PRIVE_MEDIA_URL = getattr(settings, 'OE_PRIVE_MEDIA_URL', PRIVE_MEDIA_URL) RECRUTEMENT_URLS = {'DEV': getattr(settings, 'RECRUTEMENT_URL', 'http://127.0.0.1:8000/api/'), 'TEST':'http://test.ressources-humaines.auf.org/api/',