diff --git a/web_app/.gitignore b/web_app/.gitignore index 87fca82..0c400d8 100644 --- a/web_app/.gitignore +++ b/web_app/.gitignore @@ -5,6 +5,7 @@ /.env.*.local /config/secrets/prod/prod.decrypt.private.php /public/bundles/ +/public/uploads/ /var/ /vendor/ /docker/ diff --git a/web_app/config/services.yaml b/web_app/config/services.yaml index 2d6a76f..b1ab9f0 100644 --- a/web_app/config/services.yaml +++ b/web_app/config/services.yaml @@ -4,6 +4,7 @@ # Put parameters here that don't need to change on each machine where the app is deployed # https://symfony.com/doc/current/best_practices.html#use-parameters-for-application-configuration parameters: + avatars_directory: '%kernel.project_dir%/public/uploads/dev_avatars' services: # default configuration for services in *this* file diff --git a/web_app/src/Controller/DeveloperController.php b/web_app/src/Controller/DeveloperController.php index 821b194..71a4708 100644 --- a/web_app/src/Controller/DeveloperController.php +++ b/web_app/src/Controller/DeveloperController.php @@ -57,23 +57,55 @@ public function new(Request $request, EntityManagerInterface $entityManager): Re #[Route('/profile', name: 'app_developer_profile', methods: ['GET', 'POST'])] public function profile(Request $request, EntityManagerInterface $entityManager): Response { - // dd($request); $developer = $this->getUser()->getDeveloper(); $form = $this->createForm(DeveloperType::class, $developer); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { + $avatarFile = $form->get('avatar')->getData(); + if ($avatarFile) { + $filename = uniqid() . '.' . $avatarFile->guessExtension(); + + $avatarFile->move( + $this->getParameter('avatars_directory'), + $filename + ); + } + // Enregistrer le nom du fichier dans l'entité + $developer->setAvatar($filename); + $entityManager->flush(); return $this->redirectToRoute('app_developer_profile', [], Response::HTTP_SEE_OTHER); } - return $this->render('developer/profile.html.twig', [ + + return $this->render('developer/manage/show.html.twig', [ 'developer' => $developer, 'form' => $form, ]); } + // #[Route('/profile', name: 'app_developer_profile', methods: ['GET'])] + // public function profile(Request $request, EntityManagerInterface $entityManager, DeveloperRepository $developerRepository): Response + // { + // // dd($request); + // $developer = $this->getUser()->getDeveloper(); + // $form = $this->createForm(DeveloperType::class, $developer); + // $form->handleRequest($request); + + // if ($form->isSubmitted() && $form->isValid()) { + // $entityManager->flush(); + + // return $this->redirectToRoute('app_developer_profile', [], Response::HTTP_SEE_OTHER); + // } + + // return $this->render('developer/profile.html.twig', [ + // 'developer' => $developer, + // 'form' => $form, + // ]); + // } + #[Route('/{id}/edit', name: 'app_developer_edit', methods: ['GET', 'POST'])] public function edit(Request $request, Developer $developer, EntityManagerInterface $entityManager): Response { @@ -102,4 +134,4 @@ public function delete(Request $request, Developer $developer, EntityManagerInte return $this->redirectToRoute('app_developer_index', [], Response::HTTP_SEE_OTHER); } -} +} \ No newline at end of file diff --git a/web_app/src/Form/DeveloperType.php b/web_app/src/Form/DeveloperType.php index d5fff8f..bc848e2 100644 --- a/web_app/src/Form/DeveloperType.php +++ b/web_app/src/Form/DeveloperType.php @@ -7,6 +7,7 @@ use App\Entity\User; use Symfony\Bridge\Doctrine\Form\Type\EntityType; use Symfony\Component\Form\AbstractType; +use Symfony\Component\Form\Extension\Core\Type\FileType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolver; @@ -25,7 +26,16 @@ public function buildForm(FormBuilderInterface $builder, array $options): void ->add('salary') ->add('biography') ->add('location') - ->add('avatar') + ->add('avatar', FileType::class, [ + 'label' => 'Avatar (Image file)', + 'required' => false, + 'mapped' => false, // Le champ n'est pas mappé à une propriété de l'entité + 'constraints' => [ + new \Symfony\Component\Validator\Constraints\Image([ + 'maxSize' => '2M', + ]), + ], + ]) // ->add('user', EntityType::class, [ // 'class' => User::class, // 'choice_label' => 'id', @@ -54,4 +64,4 @@ public function configureOptions(OptionsResolver $resolver): void 'data_class' => Developer::class, ]); } -} +} \ No newline at end of file diff --git a/web_app/templates/developer/manage/_form.html.twig b/web_app/templates/developer/manage/_form.html.twig index bf20b98..941161d 100644 --- a/web_app/templates/developer/manage/_form.html.twig +++ b/web_app/templates/developer/manage/_form.html.twig @@ -1,4 +1,5 @@ {{ form_start(form) }} - {{ form_widget(form) }} - -{{ form_end(form) }} +{{ form_widget(form) }} + +{{ form_end(form) }}. + diff --git a/web_app/templates/developer/manage/show.html.twig b/web_app/templates/developer/manage/show.html.twig index 4078ece..ac105ab 100644 --- a/web_app/templates/developer/manage/show.html.twig +++ b/web_app/templates/developer/manage/show.html.twig @@ -1,58 +1,195 @@ -{% extends 'base.html.twig' %} - -{% block title %}Developer{% endblock %} - -{% block body %} -

Developer

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Id{{ developer.id }}
Firstname{{ developer.firstname }}
Lastname{{ developer.lastname }}
Birthday{{ developer.birthday ? developer.birthday|date('Y-m-d') : '' }}
Gender{{ developer.gender }}
Experiences{{ developer.experiences }}
Salary{{ developer.salary }}
Biography{{ developer.biography }}
Location{{ developer.location }}
Avatar{{ developer.avatar }}
- - back to list - - edit - - {{ include('home/_delete_form.html.twig') }} +{% extends 'layouts/app.html.twig' %} + + +{% block title %}Profil - Developpeur + +{% endblock %} + +{% block main %} +
+ +
+

Profil - Développeur

+ +
+ + +
+
+
+ +
+
+ {% if developer.avatar %} + Avatar + {% endif %} + + {# Logo #} +

{{developer.firstname}} + +

+

Web Designer

+ +
+
+ +
+ +
+ +
+
+ + +
+ +
+ +
Biographie
+

+ {{ developer.biography }}

+ +
Détails du Développeur
+ +
+
Genre
+
+ {{ developer.gender }}
+
+ +
+
Nom
+
+ {{ developer.lastname }}
+
+ + +
+
Prénoms
+
{{developer.firstname}}
+
+ +
+
Date de naissance
+
{{ developer.birthday }} +
+
+ +
+
Addresse
+
{{ developer.location }} +
+
+ +
+
Salaire
+
{{ developer.salary }}
+ +
+ +
+
Nombre Année d'expériences
+
{{ developer.experiences }}
+ +
+ + +
+ + +
+ + {{ include('developer/manage/_form.html.twig', {'button_label': 'Sauvegarder les modifications'}) }} + + +
+ + +
+ +
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+
+ + +
+ +
+ + +
+
+ +
+
+
+ + + {# back to list + + edit + + {{ include('home/_delete_form.html.twig') }} #} +
{% endblock %} diff --git a/web_app/templates/layouts/app.html.twig b/web_app/templates/layouts/app.html.twig index d767d4d..3c60549 100644 --- a/web_app/templates/layouts/app.html.twig +++ b/web_app/templates/layouts/app.html.twig @@ -32,20 +32,20 @@ - + + * Template Name: NiceAdmin + * Template URL: https://bootstrapmade.com/nice-admin-bootstrap-admin-html-template/ + * Updated: Apr 20 2024 with Bootstrap v5.3.3 + * Author: BootstrapMade.com + * License: https://bootstrapmade.com/license/ + ======================================================== --> {% block stylesheets %}{% endblock %} {# {% block javascripts %} - {% block importmap %}{{ importmap('app') }}{% endblock %} - - {% endblock %} #} + {% block importmap %}{{ importmap('app') }}{% endblock %} + + {% endblock %} #} {% block body %} @@ -289,7 +289,8 @@