Commit 977fded8 authored by Jean-Philippe Metivier's avatar Jean-Philippe Metivier
Browse files

Version 6.3.0

parent ffa1d3bc
Loading
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -89,6 +89,8 @@ return [
                        'swap-champ',

                        'creer-instance',

                        'dupliquer',
                    ],
                    'privileges' => [
                        AutoformformulairePrivileges::FORMULAIRE_MODIFIER,
@@ -194,6 +196,18 @@ return [
                                    ],
                                ],
                            ],
                            'dupliquer' => [
                                'type' => Segment::class,
                                'may_terminate' => true,
                                'options' => [
                                    'route'    => '/dupliquer',
                                    'defaults' => [
                                        /** @see FormulaireController::dupliquerAction() */
                                        'controller' => FormulaireController::class,
                                        'action'     => 'dupliquer',
                                    ],
                                ],
                            ],
                            'modifier-description' => [
                                'type' => Literal::class,
                                'may_terminate' => true,
+7 −0
Original line number Diff line number Diff line
## Changelog

6.3.0
---
* Suppression de type de formulaire via une modale de confirmation
* La suppression d'un type de formulaire supprime les instances de ce type de formulaire
* Le code du formulaire est maintenant unique.
+61 −3
Original line number Diff line number Diff line
@@ -2,6 +2,7 @@

namespace UnicaenAutoform\Controller;

use DateTime;
use JetBrains\PhpStorm\NoReturn;
use Laminas\Http\Request;
use Laminas\Http\Response;
@@ -131,13 +132,40 @@ class FormulaireController extends AbstractActionController
        return $this->redirect()->toRoute('autoform/formulaires', [], [], true);
    }

    public function detruireAction(): Response
    public function detruireAction(): ViewModel
    {
        /** @var Formulaire $formulaire */
        $formulaire = $this->getFormulaireService()->getRequestedFormulaire($this);
        $instances = $this->getFormulaireInstanceService()->getInstancesByFormulaire($formulaire);

        /** @var Request $request */
        $request = $this->getRequest();
        if ($request->isPost()) {
            $data = $request->getPost();
            if ($data["reponse"] === "oui") {
                foreach ($instances as $instance) {
                    $this->getFormulaireInstanceService()->delete($instance);
                }
                $this->getFormulaireService()->delete($formulaire);
                exit();
            }
        }

        return $this->redirect()->toRoute('autoform/formulaires', [], [], true);
        $vm = new ViewModel();
        if ($formulaire !== null) {
            $texte = "";
            if (!empty($instances)) {
                $texte .= "<p><strong>Attention ce type de formulaire est utilisé par ".count($instances)." instances qui seront supprimées si vous supprimez ce type de formulaire.</strong></p>";
            }
            $texte .= "La suppression est définitive êtes-vous sûr&middot;e de vouloir continuer ?";
            $vm->setTemplate('unicaen-autoform/default/confirmation');
            $vm->setVariables([
                'title' => "Suppression du formulaire",
                'text' => $texte,
                /** @see FormulaireController::detruireAction() */
                'action' => $this->url()->fromRoute('autoform/formulaire/detruire', ["formulaire" => $formulaire->getId()], [], true),
            ]);
        }
        return $vm;
    }

    /** GESTION DES CATEGORIES ****************************************************************************************/
@@ -496,6 +524,8 @@ class FormulaireController extends AbstractActionController
        return $this->redirect()->toRoute('autoform/formulaire/afficher-formulaire', ['formulaire' => $formulaire->getId(), 'instance' => $instance->getId()], [], true);
    }



    public function formulairechampsAction(): JsonModel
    {
        $formulaire = $this->getFormulaireService()->getRequestedFormulaire($this);
@@ -535,4 +565,32 @@ class FormulaireController extends AbstractActionController

        return new JsonModel($result);
    }

    public function dupliquerAction(): Response
    {
        $formulaire = $this->getFormulaireService()->getRequestedFormulaire($this);

        $duplicata = new Formulaire();
        $duplicata->setLibelle($formulaire->getLibelle());
        $duplicata->setCode($formulaire->getCode() . ' DUPLICATA ' . (new DateTime())->getTimestamp());
        $this->getFormulaireService()->create($duplicata);

        foreach ($formulaire->getCategories() as $categorie) {
            $newCategorie = Categorie::clone($categorie, true);
            $newCategorie->setFormulaire($duplicata);
            $this->getCategorieService()->create($newCategorie);
            $duplicata->addCategorie($newCategorie);

            foreach ($newCategorie->getChamps() as $champ) {
                $newChamp = Champ::clone($champ, true, $newCategorie);
                $this->getChampService()->create($newChamp);
                $newCategorie->addChamp($newChamp);
            }
        }

        $this->getFormulaireService()->update($duplicata);

        /** @see FormulaireController::modifierAction() */
        return $this->redirect()->toRoute('autoform/formulaire/modifier',['formulaire' => $formulaire->getId()], [], true);
    }
}
 No newline at end of file
+16 −0
Original line number Diff line number Diff line
@@ -26,6 +26,22 @@ class Categorie implements HistoriqueAwareInterface, HasMotsClefsInterface
        $this->champs = new ArrayCollection();
    }

    public static function clone(Categorie $categorie, bool $withHisto = true): Categorie
    {
        $clone = new Categorie();
        $clone->setCode($categorie->getCode() . " DUPLICATA");
        $clone->setLibelle($categorie->getLibelle());
        $clone->setOrdre($categorie->getOrdre());
        $clone->setMotsClefs($categorie->getMotsClefs());

        // duplication de l'aspect historisé
        if ($withHisto) {
            $clone->setHistoDestruction($categorie->getHistoDestruction());
            $clone->setHistoDestructeur($categorie->getHistoDestructeur());
        }
        return $clone;
    }

    public function getId(): ?int
    {
        return $this->id;
+21 −0
Original line number Diff line number Diff line
@@ -44,6 +44,27 @@ class Champ implements HistoriqueAwareInterface, HasMotsClefsInterface {
    private ?string $options = null;
    private bool $obligatoire = false;

    public static function clone(Champ $champ, bool $withHisto = true, ?Categorie $newCategorie = null): Champ
    {
        $clone = new Champ();
        if ($newCategorie !== null) $clone->setCategorie($newCategorie);
        $clone->setCode($champ->getCode() . " DUPLICATA");
        $clone->setLibelle($champ->getLibelle());
        $clone->setType($champ->getTexte());
        $clone->setOrdre($champ->getOrdre());
        $clone->setType($champ->getType());
        $clone->setBalise($champ->getBalise());
        $clone->setOptions($champ->getOptions());
        $clone->setObligatoire($champ->isObligatoire());

        if ($withHisto) {
            $clone->setHistoDestruction($champ->getHistoDestruction());
            $clone->setHistoDestructeur($champ->getHistoDestructeur());
        }

        return $clone;
    }

    public function getId(): ?int
    {
        return $this->id;
Loading