Add resume and modify entity
This commit is contained in:
parent
911f3a24cc
commit
120906c0c5
@ -5,6 +5,7 @@
|
||||
# https://symfony.com/doc/current/best_practices.html#use-parameters-for-application-configuration
|
||||
parameters:
|
||||
app.jwtsecret : '%env(JWT_SECRET)%'
|
||||
cv_directory: '%kernel.project_dir%/public/cv'
|
||||
services:
|
||||
# default configuration for services in *this* file
|
||||
_defaults:
|
||||
|
@ -13,9 +13,12 @@ use App\Form\InternType;
|
||||
use App\Repository\InternRepository;
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||
use Symfony\Component\DependencyInjection\Attribute\Autowire;
|
||||
use Symfony\Component\Form\Extension\Core\Type\FileType;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
use Symfony\Component\Routing\Attribute\Route;
|
||||
use Symfony\Component\Validator\Constraints\File;
|
||||
|
||||
#[Route('/intern')]
|
||||
final class InternController extends AbstractController
|
||||
@ -54,6 +57,59 @@ final class InternController extends AbstractController
|
||||
]);
|
||||
}
|
||||
|
||||
#[Route('/{id}/resume', name: 'app_intern_resume', methods: ['GET', 'POST'])]
|
||||
public function addResume(Request $request, Intern $intern, EntityManagerInterface $entityManager, #[Autowire('%cv_directory%')] string $cvDirectory): Response
|
||||
{
|
||||
// Création d'un formulaire spécifique pour le CV plutôt que d'utiliser InternType entier
|
||||
$form = $this->createFormBuilder($intern)
|
||||
->add('resume', FileType::class, [
|
||||
'label' => 'CV : ',
|
||||
'mapped' => false, // Ne pas lier directement à l'entité
|
||||
'constraints' => [
|
||||
new File([
|
||||
'maxSize' => '1024k',
|
||||
'mimeTypes' => [
|
||||
'application/pdf',
|
||||
'application/x-pdf',
|
||||
],
|
||||
'mimeTypesMessage' => 'Merci de bien vouloir envoyer un fichier PDF valide.',
|
||||
])
|
||||
],
|
||||
])
|
||||
->getForm();
|
||||
|
||||
$form->handleRequest($request);
|
||||
|
||||
if ($form->isSubmitted() && $form->isValid()) {
|
||||
$cvFile = $form->get('resume')->getData();
|
||||
|
||||
if ($cvFile) {
|
||||
// Génération d'un nom de fichier unique
|
||||
$newFilename = $intern->getId().'_'.date("d-m-Y").'_'.random_int(0,99999999).'.pdf';
|
||||
|
||||
// Déplacement vers le répertoire de stockage
|
||||
$cvFile->move(
|
||||
$cvDirectory,
|
||||
$newFilename
|
||||
);
|
||||
|
||||
// Mise à jour de l'entité avec le nom du fichier
|
||||
$intern->setResume($newFilename);
|
||||
$intern->setResumeName($cvFile->getClientOriginalName()); // Conserver le nom original du fichier
|
||||
}
|
||||
|
||||
$entityManager->flush();
|
||||
|
||||
return $this->redirectToRoute('app_intern_index', [], Response::HTTP_SEE_OTHER);
|
||||
}
|
||||
|
||||
return $this->render('intern/resume.html.twig', [
|
||||
'intern' => $intern,
|
||||
'form' => $form->createView(),
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
#[Route('/{id}', name: 'app_intern_delete', methods: ['POST'])]
|
||||
public function delete(Request $request, Intern $intern, EntityManagerInterface $entityManager): Response
|
||||
{
|
||||
|
@ -12,12 +12,15 @@ use Doctrine\ORM\Mapping as ORM;
|
||||
class Intern extends UserApp
|
||||
{
|
||||
|
||||
#[ORM\Column(type: Types::TEXT,nullable: true)]
|
||||
#[ORM\Column(type: Types::TEXT, length: 255, nullable: true)]
|
||||
private ?string $coverLetter = null;
|
||||
|
||||
#[ORM\Column(length: 255,nullable: true)]
|
||||
#[ORM\Column(type: Types::TEXT, length: 255, nullable: true)]
|
||||
private ?string $resume = null;
|
||||
|
||||
#[ORM\Column(type: Types::TEXT, length: 255, nullable: true)]
|
||||
private ?string $resumeName = null;
|
||||
|
||||
/**
|
||||
* @var Collection<int, InternDegree>
|
||||
*/
|
||||
@ -74,6 +77,18 @@ class Intern extends UserApp
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getResumeName(): ?string
|
||||
{
|
||||
return $this->resume;
|
||||
}
|
||||
|
||||
public function setResumeName(string $resumeName): static
|
||||
{
|
||||
$this->resumeName = $resumeName;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Collection<int, InternDegree>
|
||||
*/
|
||||
|
@ -4,8 +4,11 @@ namespace App\Form;
|
||||
|
||||
use App\Entity\Intern;
|
||||
use Symfony\Component\Form\AbstractType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\FileType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
|
||||
use Symfony\Component\Form\FormBuilderInterface;
|
||||
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||
use Symfony\Component\Validator\Constraints\File;
|
||||
|
||||
class InternType extends AbstractType
|
||||
{
|
||||
@ -20,7 +23,9 @@ class InternType extends AbstractType
|
||||
->add('tel')
|
||||
->add('address')
|
||||
->add('mail')
|
||||
->add('coverLetter')
|
||||
->add('coverLetter', TextareaType::class, [
|
||||
'required' => false,
|
||||
])
|
||||
->add('resume')
|
||||
;
|
||||
}
|
||||
|
23
templates/intern/resume.html.twig
Normal file
23
templates/intern/resume.html.twig
Normal file
@ -0,0 +1,23 @@
|
||||
{% extends 'base.html.twig' %}
|
||||
|
||||
{% block title %}Resume{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
<div class="container mx-auto p-6">
|
||||
<h1 class="text-4xl font-semibold text-gray-800 mb-6">Ajouter / Modifier le CV</h1>
|
||||
|
||||
<div class="bg-white shadow-md rounded-lg p-6">
|
||||
{{ form_start(form, {'attr': {'enctype': 'multipart/form-data'}}) }}
|
||||
|
||||
<div class="mt-6">
|
||||
{{ form_widget(form) }}
|
||||
</div>
|
||||
|
||||
<button type="submit" class="bg-teal-500 hover:bg-teal-600 text-white px-6 py-3 rounded-lg mt-4">
|
||||
Enregistrer
|
||||
</button>
|
||||
|
||||
{{ form_end(form) }}
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
@ -8,6 +8,11 @@
|
||||
<p class="text-gray-600">Téléphone : {{ app.user.tel }}</p>
|
||||
<p class="text-gray-600">Email : {{ app.user.mail }}</p>
|
||||
|
||||
<br>
|
||||
<a class="bg-teal-500 hover:bg-teal-600 text-white py-2 px-4 rounded-full"
|
||||
href="{{ path('app_intern_resume',{id: app.user.id}) }}"> Ajouter / Modifier le CV
|
||||
</a>
|
||||
|
||||
<h3 class="text-lg font-semibold mt-6">Vos diplômes :</h3>
|
||||
<ul class="list-disc list-inside text-gray-800">
|
||||
{% if app.user.degrees|length > 0 %}
|
||||
|
Loading…
x
Reference in New Issue
Block a user