Commit 667e67d3 authored by Jean-Philippe Metivier's avatar Jean-Philippe Metivier
Browse files

WIP

parent 96db950f
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -200,6 +200,7 @@ return [
        'head_scripts'          => [
            '015_jquery' => 'unistrap-1.0.0/js/jquery-3.6.1.min.js',
            '040_bootstrap' => '',
            '201_' => 'vendor/chart-2.9.4/Chart.bundle.js',
        ],
        'inline_scripts' => [
            '020_app'         => '',
+5 −27
Original line number Diff line number Diff line
@@ -7,8 +7,8 @@ use Atelier\Provider\Etat\SessionEtats;
use DateTime;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Enquete\Entity\Db\Enquete;
use Enquete\Entity\Db\Instance;
use Enquete\Entity\HasEnqueteInterface;
use Enquete\Entity\HasEnqueteTrait;
use Etudiant\Entity\Db\Etudiant;
use Laminas\Permissions\Acl\Resource\ResourceInterface;
use UnicaenEtat\Entity\Db\HasEtatsInterface;
@@ -18,11 +18,13 @@ use UnicaenUtilisateur\Entity\Db\HistoriqueAwareTrait;
use UnicaenValidation\Entity\HasValidationsInterface;
use UnicaenValidation\Entity\HasValidationsTrait;

class Inscription implements HistoriqueAwareInterface, HasEtatsInterface, HasValidationsInterface, ResourceInterface {
class Inscription implements HistoriqueAwareInterface, HasEtatsInterface, HasValidationsInterface, ResourceInterface, HasEnqueteInterface {
    use HistoriqueAwareTrait;
    use HasEtatsTrait;
    use HasValidationsTrait;

    use HasEnqueteTrait;

    const PRINCIPALE = 'principale';
    const COMPLEMENTAIRE = 'complementaire';

@@ -43,10 +45,6 @@ class Inscription implements HistoriqueAwareInterface, HasEtatsInterface, HasVal
    private ?bool $international = null;
    private ?string $telephone = null;


    private ?DateTime $validationEnquete = null;
    private ?Instance $enquete = null;

    private Collection $presences;


@@ -168,26 +166,6 @@ class Inscription implements HistoriqueAwareInterface, HasEtatsInterface, HasVal
        return true;
    }

    public function getEnquete(): ?Instance
    {
        return $this->enquete;
    }

    public function setEnquete(?Instance $enquete): void
    {
        $this->enquete = $enquete;
    }

    public function getValidationEnquete(): ?DateTime
    {
        return $this->validationEnquete;
    }

    public function setValidationEnquete(?DateTime $validationEnquete): void
    {
        $this->validationEnquete = $validationEnquete;
    }

    /** MACROS ********************************************************************************************************/

    public function generateTag(): string
+87 −0
Original line number Diff line number Diff line
<?php

namespace UnicaenEnquete;

use Enquete\Controller\ResultatController;
use Enquete\Controller\ResultatControllerFactory;
use Enquete\Provider\Privilege\EnquetePrivileges;
use Enquete\Service\Resultat\ResultatService;
use Enquete\Service\Resultat\ResultatServiceFactory;
use Laminas\Router\Http\Literal;
use Laminas\Router\Http\Segment;
use UnicaenPrivilege\Guard\PrivilegeController;

return [
    'bjyauthorize' => [
        'guards' => [
            PrivilegeController::class => [
                [
                    'controller' => ResultatController::class,
                    'action' => [
                        'resultats',
                    ],
                    'privileges' => [
                        EnquetePrivileges::ENQUETE_INDEX,
                    ],
                ],
            ],
        ],
    ],

    'router' => [
        'routes' => [
            'enquete' => [
                'type' => Literal::class,
                'options' => [
                    'route' => '/enquete',
                    'defaults' => [
                    ],
                ],
                'may_terminate' => false,
                'child_routes' => [
                    'resultats' => [
                        'type' => Segment::class,
                        'options' => [
                            'route' => '/resultats/:enquete',
                            'defaults' => [
                                /** @see ResultatController::resultatsAction() */
                                'controller' => ResultatController::class,
                                'action' => 'resultats',
                            ],
                        ],
                        'may_terminate' => true,
                        'child_routes' => [
                        ],
                    ],
                ],
            ],
        ],
    ],

    'console' => [
        'router' => [
            'routes' => [

            ],
        ],
    ],
    'service_manager' => [
        'factories' => [
            ResultatService::class => ResultatServiceFactory::class,
        ],
    ],
    'controllers' => [
        'factories' => [
            ResultatController::class => ResultatControllerFactory::class,
        ],
    ],
    'form_elements' => [
        'factories' => [
        ],
    ],
    'hydrators' => [
        'factories' => [
        ],
    ]

];
 No newline at end of file
+66 −0
Original line number Diff line number Diff line
<?php

namespace Enquete\Controller;

use Atelier\Service\Inscription\InscriptionServiceAwareTrait;
use Enquete\Entity\Db\Instance;
use Enquete\Entity\Db\Question;
use Enquete\Service\Enquete\EnqueteServiceAwareTrait;
use Enquete\Service\Resultat\ResultatServiceAwareTrait;
use Laminas\Mvc\Controller\AbstractActionController;
use Laminas\View\Model\ViewModel;

class ResultatController extends AbstractActionController
{
    use EnqueteServiceAwareTrait;
    use InscriptionServiceAwareTrait;
    use ResultatServiceAwareTrait;


    public function resultatsAction(): ViewModel
    {
        $enquete = $this->getEnqueteService()->getRequestedEnquete($this);

        $inscriptions = $this->getInscriptionService()->getInscriptions();

        $resultats = [];
        foreach ($inscriptions as $inscription) {
            if ($inscription->getEnquete() !== null && $inscription->getValidationEnquete() !== null) $resultats[] = $inscription->getEnquete();
        }

        /** TODO  envoyer dans le service ($resultats => [$enquete, $resuts, $counts]) */
        $results = [];
        $counts = [];

        /** @var Question $question */
        foreach ($enquete->getQuestions() as $question) {
            $counts[$question->getId()]["sans"] = [];
            $counts[$question->getId()]["avec"] = [];
            $results[$question->getId()] = [];

            if ($question->estNonHistorise() and ($question->getGroupe() === null or $question->getGroupe()->estNonHistorise())) {
                /** @var Instance $item */
                foreach ($resultats as $item) {
                    if ($item->estNonHistorise()) {
                        $reponse = $item->getReponseFor($question);
                        if ($reponse) {
                            if ($reponse->getReponse()) $results[$question->getId()][$reponse->getReponse()][] = $item->getId();
                            if ($reponse->getReponse() === "0") {
                                $counts[$question->getId()]["sans"][] = $item->getId();
                            } else {
                                $counts[$question->getId()]["avec"][] = $item->getId();
                            }
                        }
                    }
                }
            }
        }

        return new ViewModel([
            'enquete' => $enquete,
            'results' => $results,
            'counts' => $counts,
            'elements' => $inscriptions,
        ]);
    }
}
 No newline at end of file
+37 −0
Original line number Diff line number Diff line
<?php

namespace Enquete\Controller;

use Atelier\Service\Inscription\InscriptionService;
use Enquete\Service\Enquete\EnqueteService;
use Enquete\Service\Resultat\ResultatService;
use Psr\Container\ContainerExceptionInterface;
use Psr\Container\ContainerInterface;
use Psr\Container\NotFoundExceptionInterface;

class ResultatControllerFactory
{

    /**
     * @throws ContainerExceptionInterface
     * @throws NotFoundExceptionInterface
     */
    public function __invoke(ContainerInterface $container): ResultatController
    {
        /**
         * @var EnqueteService $enqueteService
         * @var InscriptionService $inscriptionService
         * @var ResultatService $resultatService
         */
        $enqueteService = $container->get(EnqueteService::class);
        $inscriptionService = $container->get(InscriptionService::class);
        $resultatService = $container->get(ResultatService::class);

        $controller = new ResultatController();
        $controller->setEnqueteService($enqueteService);
        $controller->setInscriptionService($inscriptionService);
        $controller->setResultatService($resultatService);

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