Portail Carrières
Ajoutez une section carrières complète à votre site Larapen. Publiez des offres d'emploi, recevez des candidatures avec CV et gérez l'ensemble du pipeline de recrutement depuis le panneau d'administration.
Offres d'emploi
Créez des annonces d'emploi détaillées avec descriptions, exigences, avantages, fourchettes salariales et types d'emploi.
Pipeline de candidature
Recevez des candidatures avec CV, lettres de motivation et liens de profil. Suivez les candidats à travers un workflow de statut en 7 étapes.
Organisation par catégorie
Organisez les postes par département ou catégorie en utilisant le système unifié de catégories Larapen.
Système de notifications
Notifications automatiques par e-mail aux administrateurs lorsque de nouvelles candidatures sont soumises.
Cas d'utilisation
Page carrières d'entreprise
Vous gérez un site d'entreprise sur Larapen et avez besoin d'une section carrières professionnelle pour le recrutement.
- Créez des catégories d'emploi par département (Ingénierie, Marketing, Design, etc.).
- Publiez des postes ouverts avec descriptions, exigences, avantages et fourchettes salariales.
- Définissez des dates limites de candidature ou laissez les postes ouverts jusqu'à ce qu'ils soient pourvus.
- Recevez et examinez les candidatures directement depuis le panneau d'administration.
Agence avec plusieurs clients
Vous gérez plusieurs sites clients et avez besoin de fournir une fonctionnalité d'offres d'emploi sur chacun.
- Installez l'add-on sur chaque instance Larapen.
- Personnalisez les catégories et types de postes par client.
- Activez le CAPTCHA pour éviter les candidatures spam.
- Les administrateurs reçoivent des notifications par e-mail pour les nouvelles candidatures.
Startup avec équipe à distance
Vous construisez une équipe en télétravail et souhaitez mettre en avant vos postes ouverts.
- Marquez les postes comme « Télétravail » pour une visibilité claire en front-end.
- Utilisez les filtres de niveau d'expérience (Junior, Intermédiaire, Senior, Lead, Cadre).
- Affichez les fourchettes salariales (optionnel, activable par poste).
- Les candidats soumettent leur CV (PDF/DOC/DOCX) et profils LinkedIn avec leurs candidatures.
Prérequis
- Larapen CMS v1.0.0 ou ultérieur
- PHP 8.3+
- MySQL 8.0+
Installation
Étape 1 : Placer l'add-on
Copiez ou créez un lien symbolique du dossier careers dans le répertoire « extensions/addons » de votre Larapen :
Étape 2 : Activer l'add-on
Allez dans Admin → Add-ons → Add-ons installés et activez Portail Carrières.
Étape 3 : Exécuter les migrations
Cela crée 2 tables : careers_positions et careers_applications.
Les catégories utilisent la table categories du noyau avec categorizable_type = 'career'.
Étape 4 : Définir les permissions
L'add-on enregistre 14 permissions (voir Permissions). Attribuez-les aux rôles admin via Admin → Utilisateurs → Rôles & Permissions.
Étape 5 : Créer les catégories
Allez dans Admin → Carrières → Catégories et créez vos catégories d'emploi (ex. Ingénierie, Marketing, Design, Opérations).
Étape 6 : Publier votre premier poste
Allez dans Admin → Carrières → Postes → Ajouter un poste et créez votre première annonce d'emploi.
Configuration
L'add-on est livré avec un fichier config/careers.php fournissant des valeurs par défaut raisonnables.
Celles-ci peuvent être modifiées depuis le panneau de paramètres admin à Admin → Carrières → Paramètres,
qui stocke les valeurs dans la table settings (groupe careers).
| Paramètre | Description | Défaut |
|---|---|---|
careers_per_page |
Nombre d'offres d'emploi affichées par page sur la liste front-end. | 12 |
careers_allowed_resume_types |
Liste d'extensions de fichiers autorisées pour les CV, séparées par des virgules. | pdf,doc,docx |
careers_max_resume_size |
Taille maximale de fichier pour les CV en kilo-octets. | 5120 (5 Mo) |
careers_notify_admin_on_application |
Envoyer une notification par e-mail à tous les administrateurs lorsqu'une nouvelle candidature est reçue. | true |
careers_captcha_enabled |
Exiger une vérification CAPTCHA sur le formulaire de soumission de candidature. | false |
Valeurs par défaut du fichier de configuration
Admin : Postes
La page Postes (Carrières → Postes) gère vos annonces d'emploi.
Liste des postes
Un tableau paginé (15 par page) affichant tous les postes avec :
- Titre : titre du poste traduisible
- Catégorie : catégorie de carrière liée
- Type d'emploi (Temps plein, Temps partiel, CDD, Freelance, Stage)
- Statut (Brouillon / Publié)
- Nombre de candidatures : nombre de candidatures reçues
- Date de publication et date limite
Filtrable par catégorie et statut.
Création & Édition
Le formulaire de poste contient des champs traduisibles (par langue active) et des champs non traduisibles :
Champs traduisibles
| Champ | Type | Requis |
|---|---|---|
title |
Champ texte | Oui (langue par défaut) |
slug |
Champ texte (généré automatiquement à partir du titre) | Non |
description |
Éditeur WYSIWYG | Oui (langue par défaut) |
requirements |
Éditeur WYSIWYG | Non |
benefits |
Éditeur WYSIWYG | Non |
meta_title |
Champ texte | Non |
meta_description |
Zone de texte | Non |
Champs non traduisibles
| Champ | Type | Notes |
|---|---|---|
category_id |
Liste déroulante | Optionnel : catégorie de carrière depuis la table unifiée des catégories |
location |
Champ texte | ex. « Paris, France » |
employment_type |
Liste déroulante | Requis : full_time, part_time, contract, freelance, internship |
experience_level |
Liste déroulante | Requis : entry, mid, senior, lead, executive |
department |
Champ texte | Nom du département en texte libre |
salary_min / salary_max |
Champs numériques | Optionnel : fourchette salariale (max doit être ≥ min) |
salary_currency |
Liste déroulante | Depuis la table des devises actives |
show_salary |
Case à cocher | Activer/désactiver la visibilité du salaire en front-end |
is_remote |
Case à cocher | Marquer comme poste en télétravail |
status |
Liste déroulante | Requis : draft ou published |
published_at |
Sélecteur de date | Par défaut à la date actuelle |
closes_at |
Sélecteur de date | Optionnel : date limite de candidature (doit être dans le futur) |
position |
Champ numérique | Ordre de tri (auto-incrémenté) |
Admin : Candidatures
La page Candidatures (Carrières → Candidatures) liste toutes les candidatures reçues.
Liste des candidatures
Un tableau paginé affichant :
- Nom du candidat (prénom + nom)
- Poste visé
- Statut en badge (codé par couleur)
- Date de candidature
Filtrable par poste et statut.
Détail de la candidature
Cliquez sur une candidature pour voir ses détails complets :
- Informations de contact : nom, e-mail, téléphone
- Lettre de motivation : texte intégral
- CV : lien de téléchargement (stocké de manière sécurisée sur le disque
localdanscareers/resumes/) - Profil LinkedIn : URL cliquable
- URL Portfolio : URL cliquable
- Notes internes : champ de notes réservé aux administrateurs
- Adresse IP de la soumission
Workflow des statuts
Les candidatures progressent à travers un pipeline en 7 étapes. L'administrateur peut mettre à jour le statut et ajouter des notes internes à chaque étape.
| Statut | Couleur | Description |
|---|---|---|
new |
Info (bleu) | Récemment soumise, pas encore examinée |
reviewing |
Avertissement (jaune) | En cours d'examen initial |
shortlisted |
Primaire (bleu) | Le candidat a été présélectionné |
interview |
Secondaire (gris) | Entretien planifié ou en cours |
offered |
Succès (vert) | Offre proposée au candidat |
hired |
Succès (vert) | Le candidat a été embauché |
rejected |
Danger (rouge) | Candidature refusée |
Gestion des CV
Les CV téléchargés sont stockés sur le disque local (non accessible publiquement) dans careers/resumes/.
Les administrateurs téléchargent les CV via une action de contrôleur authentifiée qui diffuse le fichier avec le nom original.
- Les types de fichiers autorisés sont configurables (par défaut : PDF, DOC, DOCX).
- La taille maximale de fichier est configurable (par défaut : 5 Mo / 5120 Ko).
- Les fichiers CV sont automatiquement supprimés lorsqu'une candidature ou son poste parent est supprimé.
Admin : Catégories
Les catégories de carrière (Carrières → Catégories) utilisent la table unifiée categories du noyau Larapen
avec categorizable_type = 'career'.
Champs de catégorie
| Champ | Type | Notes |
|---|---|---|
name |
Texte traduisible | Requis (langue par défaut) |
slug |
Texte traduisible | Généré automatiquement à partir du nom |
description |
Zone de texte traduisible | Optionnel |
is_active |
Case à cocher | Activer/désactiver la visibilité de la catégorie |
position |
Nombre | Ordre de tri |
Admin : Paramètres
La page des paramètres (Carrières → Paramètres) est organisée en trois sections :
Options d'affichage
- Postes par page : nombre de postes sur la liste front-end (min : 4, max : 100).
Paramètres de candidature
- Types de CV autorisés : liste d'extensions de fichiers acceptées, séparées par des virgules.
- Taille max du CV : taille maximale d'upload en kilo-octets (min : 512 Ko, max : 50 Mo).
- Notifications admin : activer/désactiver les alertes e-mail pour les nouvelles candidatures.
Protection CAPTCHA
- Activer le CAPTCHA pour les candidatures : activer/désactiver le CAPTCHA sur le formulaire de candidature front-end.
- Nécessite qu'un fournisseur CAPTCHA soit configuré dans les paramètres du noyau. Un avertissement est affiché si aucun fournisseur n'est configuré.
Front-end : Liste des carrières
La page de liste des carrières affiche tous les postes ouverts (statut publié, avec une date limite future ou nulle).
Fonctionnalités de la page
- Filtre par catégorie : barre latérale ou barre d'onglets listant toutes les catégories de carrière actives avec une option « Tous les départements ».
- Cartes de poste : chaque carte affiche le titre du poste, le type d'emploi, le niveau d'expérience, la localisation, le badge télétravail, la fourchette salariale (si affichée) et la date de publication.
- Pagination : contrôlée par le paramètre
careers_per_page. - SEO : le méta titre et la description de la page sont définis via le
SeoService.
Filtrage par catégorie
Cliquer sur une catégorie navigue vers /{locale}/careers/category/{slug}, qui filtre les postes par cette catégorie.
Le slug est résolu par rapport à la langue actuelle avec un repli sur la traduction anglaise.
Front-end : Détail du poste
La page de détail du poste (/{locale}/careers/{slug}) affiche :
- Titre du poste comme titre de la page
- Métadonnées du poste : type d'emploi, niveau d'expérience, localisation, badge télétravail, département
- Fourchette salariale (si
show_salaryest activé pour ce poste) - Date de publication et date limite (ou « Ouvert jusqu'à ce qu'il soit pourvu »)
- À propos du poste : description complète (contenu WYSIWYG)
- Exigences (si fournies)
- Ce que nous offrons / Section avantages (si fournie)
- Formulaire de candidature (voir ci-dessous)
- Postes similaires : jusqu'à 3 autres postes ouverts de la même catégorie
Front-end : Formulaire de candidature
Le formulaire de candidature est affiché sur la page de détail du poste et soumet via POST
vers /{locale}/careers/{slug}/apply.
Champs du formulaire
| Champ | Type | Validation |
|---|---|---|
first_name |
Champ texte | Requis, max 255 caractères |
last_name |
Champ texte | Requis, max 255 caractères |
email |
Champ e-mail | Requis, e-mail valide, max 255 caractères |
phone |
Champ texte | Optionnel, max 50 caractères |
cover_letter |
Zone de texte | Optionnel, max 10 000 caractères |
resume |
Upload de fichier | Requis, types autorisés selon les paramètres, taille max selon les paramètres |
linkedin_url |
Champ URL | Optionnel, URL valide, max 500 caractères |
portfolio_url |
Champ URL | Optionnel, URL valide, max 500 caractères |
Après une soumission réussie, l'utilisateur est redirigé avec un message de succès : « Merci pour votre candidature ! Nous l'examinerons et vous recontacterons bientôt. »
Notifications par e-mail
Lorsque careers_notify_admin_on_application est activé, l'add-on envoie une notification par e-mail
à tous les administrateurs (is_admin = true) chaque fois qu'une nouvelle candidature est soumise.
Contenu de la notification
- Objet : « Nouvelle candidature pour {Titre du poste} »
- Salutation : « Nouvelle candidature reçue »
- Corps : « {Nom du candidat} a postulé pour le poste {Titre du poste}. »
- Bouton d'action : Lien vers la liste des candidatures admin
- Pied de page : « Connectez-vous à votre panneau d'administration pour examiner la candidature. »
La notification est envoyée via le canal mail en utilisant la classe MailMessage intégrée de Laravel.
Intégration CAPTCHA
Le formulaire de candidature supporte la vérification CAPTCHA pour empêcher les soumissions spam.
Fonctionnement
- Activez le CAPTCHA dans Carrières → Paramètres.
- Assurez-vous qu'un fournisseur CAPTCHA (ex. reCAPTCHA, hCaptcha) est configuré dans Admin → Paramètres → Général.
- Le
SubmitApplicationRequestajoute automatiquement la règle de validation CAPTCHA lorsqu'elle est activée. - Le nom du champ CAPTCHA est résolu dynamiquement depuis le
CaptchaServicedu noyau.
Support multilingue
L'add-on est livré avec des traductions complètes en anglais et français.
Contenu traduisible
- Postes : title, slug, description, requirements, benefits, meta_title, meta_description
- Catégories : name, slug, description (via le système de catégories du noyau)
Chaînes d'interface statiques
Tout le texte statique utilise des clés de traduction préfixées par careers::careers., organisées en sections :
employment_types.*: Temps plein, Temps partiel, CDD, Freelance, Stageexperience_levels.*: Junior, Intermédiaire, Senior, Lead, Cadreapplication_statuses.*: Nouveau, En revue, Présélectionné, Entretien, Offre, Embauché, Refuséadmin.*: tous les libellés et messages du panneau d'administrationfront.*: tous les libellés et messages du front-endnotifications.*: chaînes des notifications par e-mail
Mise à jour
Étape 1 : Remplacer les fichiers
Remplacez le répertoire de l'add-on par la nouvelle version.
Étape 2 : Exécuter les migrations
Étape 3 : Vider les caches
Étape 4 : Vérifier
Visitez Admin → Carrières → Postes pour confirmer que l'add-on fonctionne correctement.
Dépannage
Les postes ne s'affichent pas en front-end
- Assurez-vous que le statut du poste est Publié (et non Brouillon).
- Vérifiez que la Date limite de candidature (
closes_at) n'est pas passée. Les postes expirés sont exclus de la liste front-end. - Vérifiez que le thème possède les fichiers de vue
pages/careers/index.blade.phpetpages/careers/show.blade.php.
Échec du téléchargement du CV
- Vérifiez les types de fichiers autorisés dans Carrières → Paramètres (par défaut : pdf, doc, docx).
- Vérifiez que la taille du fichier ne dépasse pas la limite configurée
careers_max_resume_size. - Assurez-vous que vos directives PHP
upload_max_filesizeetpost_max_sizedansphp.inisont suffisamment grandes. - Vérifiez que le répertoire
storage/app/careers/resumes/est accessible en écriture.
L'admin ne reçoit pas les notifications par e-mail
- Assurez-vous que
careers_notify_admin_on_applicationest activé dans les paramètres. - Vérifiez votre configuration de messagerie (
MAIL_MAILER,MAIL_HOST, etc.) dans.env. - Vérifiez que l'utilisateur admin a
is_admin = truedans la base de données. - Consultez
storage/logs/laravel.logpour les erreurs de livraison de courrier.
Le CAPTCHA n'apparaît pas sur le formulaire de candidature
- Assurez-vous que le CAPTCHA est activé dans Carrières → Paramètres.
- Un fournisseur CAPTCHA doit être configuré dans les paramètres du noyau (Admin → Paramètres → Général).
- Le modèle de formulaire de candidature du thème doit inclure le composant CAPTCHA
(vérifiez les blocs
@ifdans le template Blade).
Le filtrage par catégorie retourne une erreur 404
- Vérifiez que le slug de la catégorie existe et correspond au paramètre de l'URL.
- Le slug est résolu par rapport à la langue actuelle d'abord, puis se replie sur l'anglais. Si aucune correspondance n'est trouvée, une erreur 404 est retournée.
- Assurez-vous que la catégorie est marquée comme active.
Le formulaire de candidature ne se soumet pas
- Vérifiez que le poste est toujours ouvert (publié et date limite non passée). Soumettre une candidature à un poste fermé retourne une erreur 404.
- Assurez-vous que le jeton CSRF est inclus dans le formulaire (directive
@csrf). - Examinez les erreurs de validation : le champ CV est requis et doit correspondre aux types et tailles autorisés.
Les champs traduisibles ne s'enregistrent pas
- Assurez-vous que le formulaire soumet les champs traduisibles sous forme de tableaux imbriqués
(ex.
title[en],title[fr]). - Les champs de la langue par défaut sont requis ; les autres langues sont optionnelles.
- Vérifiez que le package
spatie/laravel-translatableest installé et configuré.