Commit 76d88f96 authored by Antony Le Courtes's avatar Antony Le Courtes
Browse files

- Développement formulaire spécifique (ticket #25857)

parent c51f6cb7
Loading
Loading
Loading
Loading
+24 −11
Original line number Diff line number Diff line
@@ -102,15 +102,28 @@ return [
                                    ],
                                ],
                            ],
                            'modulateurs-centres-couts' => [

                            'voir-modulateurs-centres-couts' => [
                                'type'    => 'Segment',
                                'options' => [
                                    'route'       => '/voir-modulateurs-centres-couts/:elementPedagogique',
                                    'constraints' => [
                                        'elementPedagogique' => '[0-9]*',
                                    ],
                                    'defaults'    => [
                                        'action' => 'voir-modulateurs-centres-couts',
                                    ],
                                ],
                            ],
                            'modifier-modulateurs'           => [
                                'type'    => 'Segment',
                                'options' => [
                                    'route'       => '/modulateurs-centres-couts/:elementPedagogique',
                                    'route'       => '/modulateurs/modifier/:elementPedagogique',
                                    'constraints' => [
                                        'elementPedagogique' => '[0-9]*',
                                    ],
                                    'defaults'    => [
                                        'action' => 'modulateurs-centres-couts',
                                        'action' => 'modifier-modulateur',
                                    ],
                                ],
                            ],
@@ -265,7 +278,7 @@ return [
                ],
                [
                    'controller' => 'Application\Controller\OffreFormation\ElementPedagogique',
                    'action'     => ['modulateurs-centres-couts'],
                    'action'     => ['voir-modulateurs-centres-couts'],
                    'privileges' => [
                        Privileges::ODF_ELEMENT_CC_EDITION,
                        Privileges::ODF_ELEMENT_MODULATEUR_EDITION,
+26 −2
Original line number Diff line number Diff line
@@ -5,6 +5,7 @@ namespace Application\Controller\OffreFormation;
use Application\Controller\AbstractController;
use Application\Entity\Db\ElementPedagogique;
use Application\Filter\FloatFromString;
use Application\Form\OffreFormation\Traits\ElementModulateursSaisieAwareTrait;
use Application\Form\OffreFormation\Traits\ElementPedagogiqueSaisieAwareTrait;
use Application\Form\OffreFormation\Traits\VolumeHoraireEnsFormAwareTrait;
use Application\Provider\Privilege\Privileges;
@@ -22,9 +23,9 @@ class ElementPedagogiqueController extends AbstractController
{
    use ElementPedagogiqueServiceAwareTrait;
    use ContextServiceAwareTrait;
    use ElementPedagogiqueSaisieAwareTrait;
    use VolumeHoraireEnsFormAwareTrait;
    use VolumeHoraireEnsServiceAwareTrait;
    use ElementModulateursSaisieAwareTrait;



@@ -259,13 +260,36 @@ class ElementPedagogiqueController extends AbstractController



    public function modulateursCentresCoutsAction()
    public function voirModulateursCentresCoutsAction()
    {
        $element     = $this->getEvent()->getParam('elementPedagogique');
        $modulateurs = $element->getElementModulateur();
   
        $form = $this->getFormOffreFormationElementModulateurSaisie();
        $form->setElement($element);
        $form->setAttribute('action', $this->url()->fromRoute('of/element/volume-horaire', ['elementPedagogique' => $element->getId()]));
        $form->build();
        $typesModulateurs = $form->getTypesModulateurs();

        return [
            'form'             => $form,
            'typesModulateurs' => $typesModulateurs,
            'element'          => $element,
        ];
    }



    public function modifierModulateurAction()
    {
        $this->em()->getFilters()->enable('historique')->init([
            \Application\Entity\Db\Modulateur::class,
            \Application\Entity\Db\CentreCoutEp::class,
        ]);

        $element = $this->getEvent()->getParam('elementPedagogique');


        return [];
    }
}
+143 −0
Original line number Diff line number Diff line
<?php

namespace Application\Form\OffreFormation;

use Application\Entity\Db\ElementPedagogique;
use Application\Form\AbstractForm;
use Application\Form\OffreFormation\Traits\ElementModulateursFieldsetAwareTrait;
use Application\Service\Traits\TypeModulateurServiceAwareTrait;
use Application\Entity\Db\Etape;
use Application\Service\Traits\ElementPedagogiqueServiceAwareTrait;
use Zend\Form\Element\Select;

/**
 * Description of ElementModulateursSaisie
 *
 * @author Antony Le Courtes <antony.lecourtes@unicaen.fr>
 */
class ElementModulateursSaisie extends AbstractForm
{
    use TypeModulateurServiceAwareTrait;
    use ElementPedagogiqueServiceAwareTrait;
    use ElementModulateursFieldsetAwareTrait;

    /**
     * Etape
     *
     * @var Etape
     */
    protected $element;



    public function __construct($name = null, $options = [])
    {
        if (!$name) $name = "element-modulateurs-saisie";
        parent::__construct($name, $options);
    }



    public function init()
    {

        $this->setAttribute('class', 'element-modulateurs');
        $this->setAttribute('action', $this->getCurrentUrl());

        $this->add([
            'name'       => 'submit',
            'type'       => 'Submit',
            'attributes' => [
                'value' => 'Enregistrer',
                'class' => 'btn btn-primary',
            ],
        ]);
    }



    public function build()
    {
        $element = $this->getElement();
        if (!$element) {
            throw new \RuntimeException('Element non spécifiée : construction du formulaire impossible');
        }


        $elementsModulateurs = $element->getElementModulateur();

        foreach ($elementsModulateurs as $elementModulateur) {
            $typeModulateur = $elementModulateur->getModulateur()->getTypeModulateur();
            $modulateurs    = $typeModulateur->getModulateur();
            foreach ($modulateurs as $m) {
                $modulateursValues[$typeModulateur->getCode()][] = $m->getLibelle();
            }
        }

        $select = new Select('modulateur');
        $select->setValueOptions($modulateursValues[$typeModulateur->getCode()]);
        $select->setValue(3);
        $this->add($select);


        $this->add([
            'name' => 'id',
            'type' => 'Hidden',
        ]);
    }



    /**
     * Retourne la liste des types de modulateurs de l'element
     *
     * @return \Application\Entity\Db\Modulateur[]
     */
    public function getTypesModulateurs()
    {

        if (!$this->element) {
            throw new \RuntimeException('Element non spécifié');
        }

        return $this->getServiceTypeModulateur()->getList($this->getServiceTypeModulateur()->finderByElementPedagogique($this->element));
    }



    /**
     * Retourne le nombre total de modulateurs que l'on peut renseigner
     *
     * @param string $typeCode
     *
     * @return integer
     */
    public function countModulateurs($typeCode = null)
    {
        $count = 0;
        foreach ($this->getFieldsets() as $fieldset) {
            if ($fieldset instanceof ElementModulateursFieldset) {
                $count += $fieldset->countModulateurs($typeCode);
            }
        }

        return $count;
    }



    public function getElement()
    {
        return $this->element;
    }



    public function setElement(ElementPedagogique $element)
    {
        $this->element = $element;

        return $this;
    }

}
 No newline at end of file
+48 −0
Original line number Diff line number Diff line
<?php

namespace Application\Form\OffreFormation\Traits;

use Application\Form\OffreFormation\ElementModulateursSaisie;

/**
 * Description of ElementModulateurSaisieAwareTrait
 *
 * @author UnicaenCode
 */
trait ElementModulateursSaisieAwareTrait
{
    /**
     * @var ElementModulateurSaisie
     */
    private $formOffreFormationElementModulateurSaisie;



    /**
     * @param ElementModulateurSaisie $formOffreFormationElementModulateurSaisie
     *
     * @return self
     */
    public function setFormOffreFormationElementModulateurSaisie(ElementModulateurSaisie $formOffreFormationElementModulateurSaisie)
    {
        $this->formOffreFormationElementModulateurSaisie = $formOffreFormationElementModulateurSaisie;

        return $this;
    }



    /**
     * Retourne un nouveau formulaire ou fieldset systématiquement, sauf si ce dernier a été fourni manuellement.
     *
     * @return ElementModulateurSaisie
     */
    public function getFormOffreFormationElementModulateurSaisie()
    {
        if (!empty($this->formOffreFormationElementModulateurSaisie)) {
            return $this->formOffreFormationElementModulateurSaisie;
        }

        return \Application::$container->get('FormElementManager')->get(ElementModulateursSaisie::class);
    }
}
 No newline at end of file
+115 −0
Original line number Diff line number Diff line
<?php

namespace Application\View\Helper\OffreFormation;

use Application\Form\OffreFormation\EtapeModulateursSaisie;
use Zend\View\Helper\AbstractHelper;
use Application\Service\Traits\ElementPedagogiqueServiceAwareTrait;
use Zend\Form\Element\Select;

/**
 * Description of EtapeModulateursSaisieForm
 *
 * @author Laurent LÉCLUSE <laurent.lecluse at unicaen.fr>
 */
class ElementModulateurSaisieForm extends AbstractHelper
{
    use ElementPedagogiqueServiceAwareTrait;

    /**
     * @var Saisie
     */
    protected $form;



    /**
     *
     * @param EtapeModulateursSaisie $form
     *
     * @return self|string
     */
    public function __invoke(ElementModulateurSaisie $form = null)
    {
        if (null === $form) {
            return $this;
        }

        return $this->render($form);
    }



    /**
     * Rendu du formulaire
     *
     * @param Saisie $form
     *
     * @return string
     */
    public function render(ElementModulateursSaisie $form)
    {
        $elements         = $form->getElement();
        $typesModulateurs = $form->getTypesModulateurs();
        $res              = '';

        /* if (empty($elements)) {
             return 'Aucun enseignement n\'est associé à cette formation. Il est donc impossible d\'y associer des modulateurs';
         }
         if (0 == $form->countModulateurs()) {
             return 'Aucun modulateur ne correspond aux enseignements de cette formation';
         }
         if (empty($typesModulateurs)) {
             return 'Aucun modulateur ne peut être associé à cette formation car ils ne sont pas activés pour la structure d\'enseignement correspondante.';
         }

         $displayTypesModulateurs = [];
         foreach ($typesModulateurs as $typeModulateur) {
             if (0 < $form->countModulateurs($typeModulateur->getCode())) {
                 $displayTypesModulateurs[] = $typeModulateur;
             }
         }

         $form->prepare();
         $res = $this->getView()->form()->openTag($form);
         $res .= '<table class="table table-bordered table-extra-condensed">';
         $res .= '<tr>';
         $res .= '<th rowspan="2">Elément</th>';
         foreach ($displayTypesModulateurs as $typeModulateur) {
             $res .= '<th>';
             $res .= $typeModulateur->getLibelle();
             $res .= '</th>';
         }
         $res .= '</tr>';
         $res .= '<tr>';
         foreach ($displayTypesModulateurs as $typeModulateur) {
             $typeModulateurElement = new Select($typeModulateur->getCode());
             //$typeModulateurElement->setLabel($typeModulateur->getLibelle());
             $values = ['' => ''];
             foreach ($typeModulateur->getModulateur() as $modulateur) {
                 $values[$modulateur->getId()] = (string)$modulateur;
             }
             $typeModulateurElement->setValueOptions(\UnicaenApp\Util::collectionAsOptions($values));
             $typeModulateurElement->setAttribute('class', 'form-control');
             $res .= '<th>';
             $res .= $this->getView()->formSelect($typeModulateurElement);
 //href="javascript:return false;" onclick="Modulateur.setFormValues($(this).data(\'code\'), $($(this).data(\'code\')).val())
             $res .= ' <button type="button" class="btn btn-default btn-sm form-set-value" data-code="' . $typeModulateur->getCode() . '" title="Appliquer à tous"><span class="glyphicon glyphicon-arrow-down"></span></button>';
             $res .= '</th>';
         }
         $res .= '</tr>';
         foreach ($elements as $element) {
             $res         .= '<tr>';
             $res         .= '<th>' . $element . '</th>';
             $formElement = $form->get('EL' . $element->getId());
             $res         .= $this->getView()->elementModulateursSaisieFieldset()->render($formElement, $displayTypesModulateurs, true);
             $res         .= '</tr>';
         }
         $res .= '</table>';
         $res .= $this->getView()->formHidden($form->get('id'));
         $res .= $this->getView()->formRow($form->get('submit'));
         $res .= $this->getView()->form()->closeTag();*/

        return $res;
    }
}
 No newline at end of file
Loading