PJ ofrre emploi
authorOlivier Larchevêque <olivier.larcheveque@auf.org>
Tue, 16 Aug 2011 15:05:05 +0000 (11:05 -0400)
committerOlivier Larchevêque <olivier.larcheveque@auf.org>
Tue, 16 Aug 2011 15:05:05 +0000 (11:05 -0400)
project/recrutement/api.py
project/recrutement/urls.py
project/recrutement/views.py
project/settings.py
src/auf.django.emploi/auf/django/emploi/api.py
src/auf.django.emploi/auf/django/emploi/models.py
src/auf.django.emploi/auf/django/emploi/settings.py

index 8b0d5eb..2965f2e 100644 (file)
@@ -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()
index b2ae6f6..52aefd6 100644 (file)
@@ -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<path>.*)$', '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'),
index c181d26..43137b0 100755 (executable)
@@ -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', {}, 
index ebd4729..16cdef7 100644 (file)
@@ -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
index 80cf08f..9b368c7 100644 (file)
@@ -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
-        
index 35a0851..306cd6e 100755 (executable)
@@ -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):
index 1786be2..e60179d 100644 (file)
@@ -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/',