From fd00af0780bdd680a1056b82a2a4130021c93352 Mon Sep 17 00:00:00 2001 From: afornerot Date: Fri, 25 Jul 2025 16:09:36 +0200 Subject: [PATCH] svg --- src/Controller/LabelController.php | 104 +++++++++++++++++++++++++++ src/Entity/Label.php | 51 +++++++++++++ src/Form/LabelType.php | 47 ++++++++++++ src/Repository/LabelRepository.php | 18 +++++ src/Repository/ProjectRepository.php | 25 ------- src/Twig/LabelExtension.php | 39 ++++++++++ templates/base.html.twig | 5 ++ templates/label/edit.html.twig | 37 ++++++++++ templates/label/list.html.twig | 42 +++++++++++ templates/project/view.html.twig | 6 +- 10 files changed, 348 insertions(+), 26 deletions(-) create mode 100644 src/Controller/LabelController.php create mode 100644 src/Entity/Label.php create mode 100644 src/Form/LabelType.php create mode 100644 src/Repository/LabelRepository.php create mode 100644 src/Twig/LabelExtension.php create mode 100644 templates/label/edit.html.twig create mode 100644 templates/label/list.html.twig diff --git a/src/Controller/LabelController.php b/src/Controller/LabelController.php new file mode 100644 index 0000000..f2847e1 --- /dev/null +++ b/src/Controller/LabelController.php @@ -0,0 +1,104 @@ +findAll(); + + return $this->render('label/list.html.twig', [ + 'usemenu' => true, + 'usesidebar' => true, + 'title' => 'Liste des Labels', + 'routesubmit' => 'app_admin_label_submit', + 'routeupdate' => 'app_admin_label_update', + 'labels' => $labels, + ]); + } + + #[Route('/admin/label/submit', name: 'app_admin_label_submit')] + public function submit(Request $request, EntityManagerInterface $em): Response + { + $label = new Label(); + + $form = $this->createForm(LabelType::class, $label, ['mode' => 'submit']); + $form->handleRequest($request); + if ($form->isSubmitted() && $form->isValid()) { + $em->persist($label); + $em->flush(); + + return $this->redirectToRoute('app_admin_label'); + } + + return $this->render('label/edit.html.twig', [ + 'usemenu' => true, + 'usesidebar' => true, + 'title' => 'Création Label', + 'routecancel' => 'app_admin_label', + 'routedelete' => 'app_admin_label_delete', + 'mode' => 'submit', + 'form' => $form, + ]); + } + + #[Route('/admin/label/update/{id}', name: 'app_admin_label_update')] + public function update(int $id, Request $request, EntityManagerInterface $em): Response + { + $label = $em->getRepository(Label::class)->find($id); + if (!$label) { + return $this->redirectToRoute('app_admin_label'); + } + + $form = $this->createForm(LabelType::class, $label, ['mode' => 'update']); + $form->handleRequest($request); + if ($form->isSubmitted() && $form->isValid()) { + $em->flush(); + + return $this->redirectToRoute('app_admin_label'); + } + + return $this->render('label/edit.html.twig', [ + 'usemenu' => true, + 'usesidebar' => true, + 'title' => 'Modification Label = '.$label->getLabelRedmine(), + 'routecancel' => 'app_admin_label', + 'routedelete' => 'app_admin_label_delete', + 'mode' => 'update', + 'form' => $form, + ]); + } + + #[Route('/admin/label/delete/{id}', name: 'app_admin_label_delete')] + public function delete(int $id, EntityManagerInterface $em): Response + { + $label = $em->getRepository(Label::class)->find($id); + if (!$label) { + return $this->redirectToRoute('app_admin_label'); + } + + // Tentative de suppression + try { + $em->remove($label); + $em->flush(); + } catch (\Exception $e) { + $this->addflash('error', $e->getMessage()); + + return $this->redirectToRoute('app_admin_label_update', ['id' => $id]); + } + + return $this->redirectToRoute('app_admin_label'); + } +} diff --git a/src/Entity/Label.php b/src/Entity/Label.php new file mode 100644 index 0000000..342ff0f --- /dev/null +++ b/src/Entity/Label.php @@ -0,0 +1,51 @@ +id; + } + + public function getLabelRedmine(): string + { + return $this->labelRedmine; + } + + public function setLabelRedmine(string $labelRedmine): self + { + $this->labelRedmine = $labelRedmine; + return $this; + } + + public function getLabelNinemine(): string + { + return $this->labelNinemine; + } + + public function setLabelNinemine(string $labelNinemine): self + { + $this->labelNinemine = $labelNinemine; + return $this; + } +} diff --git a/src/Form/LabelType.php b/src/Form/LabelType.php new file mode 100644 index 0000000..5555189 --- /dev/null +++ b/src/Form/LabelType.php @@ -0,0 +1,47 @@ +add('submit', SubmitType::class, [ + 'label' => 'Valider', + 'attr' => ['class' => 'btn btn-success no-print'], + ]) + + ->add('labelRedmine', TextType::class, [ + 'label' => 'Label Redmine', + ]) + + ->add('labelNinemine', TextType::class, [ + 'label' => 'Label Ninemine', + 'required' => false, + ]); + } + + public function configureOptions(OptionsResolver $resolver): void + { + $resolver->setDefaults([ + 'data_class' => Label::class, + 'mode' => 'submit', + ]); + } +} diff --git a/src/Repository/LabelRepository.php b/src/Repository/LabelRepository.php new file mode 100644 index 0000000..65467f3 --- /dev/null +++ b/src/Repository/LabelRepository.php @@ -0,0 +1,18 @@ + + */ +class LabelRepository extends ServiceEntityRepository +{ + public function __construct(ManagerRegistry $registry) + { + parent::__construct($registry, Label::class); + } +} diff --git a/src/Repository/ProjectRepository.php b/src/Repository/ProjectRepository.php index 10e64c6..60c7808 100644 --- a/src/Repository/ProjectRepository.php +++ b/src/Repository/ProjectRepository.php @@ -15,29 +15,4 @@ class ProjectRepository extends ServiceEntityRepository { parent::__construct($registry, Project::class); } - - // /** - // * @return Project[] Returns an array of Project objects - // */ - // public function findByExampleField($value): array - // { - // return $this->createQueryBuilder('c') - // ->andWhere('c.exampleField = :val') - // ->setParameter('val', $value) - // ->orderBy('c.id', 'ASC') - // ->setMaxResults(10) - // ->getQuery() - // ->getResult() - // ; - // } - - // public function findOneBySomeField($value): ?Project - // { - // return $this->createQueryBuilder('c') - // ->andWhere('c.exampleField = :val') - // ->setParameter('val', $value) - // ->getQuery() - // ->getOneOrNullResult() - // ; - // } } diff --git a/src/Twig/LabelExtension.php b/src/Twig/LabelExtension.php new file mode 100644 index 0000000..2ca4e4e --- /dev/null +++ b/src/Twig/LabelExtension.php @@ -0,0 +1,39 @@ +labelRepository = $labelRepository; + } + + public function getFunctions(): array + { + return [ + new TwigFunction('label', [$this, 'label']), + ]; + } + + public function label(string $labelRedmine): string + { + if (isset($this->cache[$labelRedmine])) { + return $this->cache[$labelRedmine]; + } + + $entity = $this->labelRepository->findOneByLabelRedmine($labelRedmine); + $result = $entity ? $entity->getLabelNinemine() : $labelRedmine; + + $this->cache[$labelRedmine] = $result; + + return $result; + } +} diff --git a/templates/base.html.twig b/templates/base.html.twig index fe1879e..0e51977 100644 --- a/templates/base.html.twig +++ b/templates/base.html.twig @@ -96,6 +96,11 @@ Projets + + + + Labels + {% endif %} diff --git a/templates/label/edit.html.twig b/templates/label/edit.html.twig new file mode 100644 index 0000000..6dde334 --- /dev/null +++ b/templates/label/edit.html.twig @@ -0,0 +1,37 @@ +{% extends 'base.html.twig' %} + +{% block title %} = {{title}}{% endblock %} + +{% block body %} +

{{title}}

+ + + {{ form_start(form) }} + {{ form_widget(form.submit) }} + Annuler + {%if mode=="update" %}Supprimer{%endif%} + + {% include('include/error.html.twig') %} + +
+
+
+
Information
+
+ {{ form_row(form.labelRedmine) }} + {{ form_row(form.labelNinemine) }} +
+
+
+
+ {{ form_end(form) }} + +{% endblock %} + +{% block localscript %} + +{% endblock %} diff --git a/templates/label/list.html.twig b/templates/label/list.html.twig new file mode 100644 index 0000000..153d36c --- /dev/null +++ b/templates/label/list.html.twig @@ -0,0 +1,42 @@ +{% extends 'base.html.twig' %} + +{% block title %} = {{title}}{% endblock %} + +{% block body %} +

{{title}}

+ Ajouter + +
+ + + + + + + + + + {% for label in labels %} + + + + + + {% endfor %} + +
ActionLabel RedmineLabel Ninemine
{{label.labelRedmine}}{{label.labelNinemine}}
+
+{% endblock %} + +{% block localscript %} + +{% endblock %} diff --git a/templates/project/view.html.twig b/templates/project/view.html.twig index 1c12e6a..5764873 100644 --- a/templates/project/view.html.twig +++ b/templates/project/view.html.twig @@ -263,7 +263,11 @@ {% for status in project.redmine.issue_statuses %} {% if status.id not in project.hiddenstatuses %}
-

{{ status.name }}

+

+ {% set label= label(status.name) %} + {{ label}} +
{{ label != status.name ? status.name : ' ' }} +

{% for sprint in project.redmine.sprints|reverse %} {% if sprint.id not in project.hiddensprints %}