Skip to content
Snippets Groups Projects
Commit 34af9118 authored by Jean-Philippe Metivier's avatar Jean-Philippe Metivier
Browse files

Retrait de la partie validation (utiliser plutôt unicaen/validation) + Label...

Retrait de la partie validation (utiliser plutôt unicaen/validation) + Label plus complet pour les ViewHelpers
parent c340d750
No related branches found
No related tags found
No related merge requests found
Pipeline #23730 passed
Showing
with 83 additions and 1170 deletions
<?php
namespace UnicaenAutoform;
use UnicaenAutoform\Controller\ValidationController;
use UnicaenAutoform\Controller\ValidationControllerFactory;
use UnicaenAutoform\Provider\Privilege\AutoformformulairePrivileges;
use UnicaenAutoform\Service\Validation\ValidationReponseService;
use UnicaenAutoform\Service\Validation\ValidationReponseServiceFactory;
use UnicaenAutoform\Service\Validation\ValidationService;
use UnicaenAutoform\Service\Validation\ValidationServiceFactory;
use UnicaenPrivilege\Guard\PrivilegeController;
use Laminas\Router\Http\Literal;
use Laminas\Router\Http\Segment;
return [
'bjyauthorize' => [
'guards' => [
PrivilegeController::class => [
[
'controller' => ValidationController::class,
'action' => [
'index',
'creer',
'afficher-validation',
'afficher-resultat',
'export-pdf',
'historiser',
'restaurer',
'detruire',
],
'privileges' => [
AutoformformulairePrivileges::FORMULAIRE_AFFICHER,
],
],
],
],
],
// 'navigation' => [
// 'default' => [
// 'home' => [
// 'pages' => [
// 'gestion' => [
// 'pages' => [
// 'validation' => [
// 'label' => 'Validation',
// 'route' => 'autoform/validations',
// 'resource' => AdministrationPrivileges::getResourceId(AdministrationPrivileges::ADMINISTRATION_VOIR),
// 'order' => 3,
// ],
// ],
// ],
// ],
// ],
// ],
// ],
'router' => [
'routes' => [
'autoform' => [
'child_routes' => [
'validations' => [
'type' => Literal::class,
'may_terminate' => true,
'options' => [
'route' => '/validations',
'defaults' => [
'controller' => ValidationController::class,
'action' => 'index',
],
],
],
'creer-validation' => [
'type' => Segment::class,
'may_terminate' => true,
'options' => [
'route' => '/creer-validation/:instance/:type',
'defaults' => [
'controller' => ValidationController::class,
'action' => 'creer',
],
],
],
'validation' => [
'type' => Segment::class,
'may_terminate' => false,
'options' => [
'route' => '/validation',
],
'child_routes' => [
'afficher-validation' => [
'type' => Segment::class,
'may_terminate' => true,
'options' => [
'route' => '/afficher-validation/:instance/:type',
'defaults' => [
'controller' => ValidationController::class,
'action' => 'afficher-validation',
],
],
],
'afficher-resultat' => [
'type' => Segment::class,
'may_terminate' => true,
'options' => [
'route' => '/afficher-resultat/:validation',
'defaults' => [
'controller' => ValidationController::class,
'action' => 'afficher-resultat',
],
],
],
'export-pdf' => [
'type' => Segment::class,
'may_terminate' => true,
'options' => [
'route' => '/export-pdf/:validation',
'defaults' => [
'controller' => ValidationController::class,
'action' => 'export-pdf',
],
],
],
'historiser' => [
'type' => Literal::class,
'may_terminate' => true,
'options' => [
'route' => '/historiser/:validation',
'defaults' => [
'controller' => ValidationController::class,
'action' => 'historiser',
],
],
],
'restaurer' => [
'type' => Literal::class,
'may_terminate' => true,
'options' => [
'route' => '/restaurer/:validation',
'defaults' => [
'controller' => ValidationController::class,
'action' => 'restaurer',
],
],
],
'detruire' => [
'type' => Literal::class,
'may_terminate' => true,
'options' => [
'route' => '/detruire/:validation',
'defaults' => [
'controller' => ValidationController::class,
'action' => 'detruire',
],
],
],
],
],
],
],
],
],
'service_manager' => [
'factories' => [
ValidationService::class => ValidationServiceFactory::class,
ValidationReponseService::class => ValidationReponseServiceFactory::class,
],
],
'controllers' => [
'factories' => [
ValidationController::class => ValidationControllerFactory::class,
],
],
'form_elements' => [
'factories' => [
],
],
'hydrators' => [
'factories' => [
],
],
'view_helpers' => [
'invokables' => [
],
],
];
\ No newline at end of file
......@@ -113,45 +113,3 @@ create table unicaen_autoform_formulaire_reponse
);
create unique index autoform_reponse_id_uindex on unicaen_autoform_formulaire_reponse (id);
\ No newline at end of file
create table unicaen_autoform_validation
(
id serial not null
constraint validation_pk primary key,
type varchar(64) not null,
instance integer not null
constraint validation_instance_fk references unicaen_autoform_formulaire_instance
on delete cascade,
type_validation varchar(64),
reference integer
constraint autoform_validation_autoform_formulaire_instance_id_fk references unicaen_autoform_formulaire_instance
on delete cascade,
complement text,
differences text,
informations text,
histo_creation timestamp not null,
histo_createur_id integer not null
constraint composante_createur_fk references unicaen_utilisateur_user,
histo_modification timestamp not null,
histo_modificateur_id integer not null
constraint composante_modificateur_fk references unicaen_utilisateur_user,
histo_destruction timestamp,
histo_destructeur_id integer
constraint composante_destructeur_fk references unicaen_utilisateur_user
);
create unique index validation_id_uindex on unicaen_autoform_validation (id);
create table unicaen_autoform_validation_reponse
(
id serial not null
constraint validation_reponse_pk primary key,
validation integer not null
constraint autoform_validation_reponse_autoform_validation_id_fk references unicaen_autoform_validation
on delete cascade,
reponse integer not null
constraint validation_reponse_autoform_reponse_id_fk references unicaen_autoform_formulaire_reponse
on delete cascade,
value varchar(256) default NULL::character varying not null
);
create unique index validation_reponse_id_uindex on unicaen_autoform_validation_reponse (id);
......@@ -53,20 +53,5 @@ SELECT cp.id, d.code, d.lib, d.ordre
FROM d
JOIN unicaen_privilege_categorie cp ON cp.CODE = 'autoformchamp';
INSERT INTO unicaen_privilege_categorie (code, libelle, ordre, namespace)
VALUES ('autoformvalidation','Autoform - Gestion des validations',5400,'UnicaenAutoform\Provider\Privilege');
INSERT INTO unicaen_privilege_privilege(CATEGORIE_ID, CODE, LIBELLE, ORDRE)
WITH d(code, lib, ordre) AS (
SELECT 'validationf_index', 'Accéder à l''index', 10 UNION
SELECT 'validationf_afficher', 'Afficher', 20 UNION
SELECT 'validationf_ajouter', 'Ajouter', 30 UNION
SELECT 'validationf_modifier', 'Modifier', 40 UNION
SELECT 'validationf_historiser', 'Historiser/Restaurer', 50 UNION
SELECT 'validationf_supprimer', 'Supprimer', 60
)
SELECT cp.id, d.code, d.lib, d.ordre
FROM d
JOIN unicaen_privilege_categorie cp ON cp.CODE = 'autoformvalidation';
......@@ -4,6 +4,10 @@ UnicaenAutorform
Changement
---
**v6.0.3**
- Retrait de la partie validation (utiliser plutôt unicaen/validation)
- Label plus complet pour les ViewHelpers
**v6.0.2**
- Nettoyage du code (vers php 8.0 + code sniffing)
......
<?php
namespace UnicaenAutoform\Controller;
use Laminas\Http\Request;
use Laminas\Http\Response;
use Laminas\Mvc\Controller\AbstractActionController;
use Laminas\View\Model\ViewModel;
use Laminas\View\Renderer\PhpRenderer;
use UnicaenAutoform\Entity\Db\Validation;
use UnicaenAutoform\Service\Formulaire\FormulaireInstanceServiceAwareTrait;
use UnicaenAutoform\Service\Formulaire\FormulaireReponseServiceAwareTrait;
use UnicaenAutoform\Service\Validation\ValidationReponseServiceAwareTrait;
use UnicaenAutoform\Service\Validation\ValidationServiceAwareTrait;
class ValidationController extends AbstractActionController
{
use FormulaireInstanceServiceAwareTrait;
use FormulaireReponseServiceAwareTrait;
use ValidationServiceAwareTrait;
use ValidationReponseServiceAwareTrait;
public PhpRenderer $renderer;
public function indexAction(): ViewModel
{
$validations = $this->getValidationService()->getValidations();
return new ViewModel([
'validations' => $validations,
]);
}
public function creerAction(): Response
{
$instance = $this->getFormulaireInstanceService()->getRequestedFormulaireInstance($this);
$type = $this->params()->fromRoute('type');
$validation = $this->getValidationService()->getValidationByTypeAndInstance($type, $instance);
if ($validation === null) {
$validation = new Validation();
$validation->setFormulaireInstance($instance);
$validation->setType($type);
$this->getValidationService()->create($validation);
}
return $this->redirect()->toRoute('autoform/validation/afficher-validation', ['validation' => $validation->getId()], [], true);
}
public function afficherValidationAction() : ViewModel|Response
{
$type = $this->params()->fromRoute('type');
$instance = $this->getFormulaireInstanceService()->getRequestedFormulaireInstance($this);
$retour = $this->params()->fromQuery('retour');
$annuler = $this->params()->fromQuery('annuler');
$validation = $this->getValidationService()->getValidationByTypeAndInstance($type, $instance);
/** @var Request $request */
$request = $this->getRequest();
if ($request->isPost()) {
$data = $request->getPost();
if ($validation === null) {
$validation = new Validation();
$validation->setType($type);
$validation->setFormulaireInstance($instance);
$validation->setTypeValidation('listing');
$validation = $this->getValidationService()->create($validation);
}
$this->getValidationReponseService()->updateValidationReponse($validation, $data);
if (isset($data['complement']) && trim($data['complement']) !== "") $validation->setComplement($data['complement']);
if (isset($data['informations']) && trim($data['informations']) !== "") $validation->setInformations($data['informations']);
if (isset($data['differences']) && trim($data['differences']) !== "") $validation->setDifferences($data['differences']);
$this->getValidationService()->update($validation);
if ($retour) {
return $this->redirect()->toUrl($retour. "?type=retour");
} else {
return $this->redirect()->toRoute('autoform/validation/afficher-validation', ['instance' => $instance->getId(), 'type' => $type], [], true);
}
}
$formulaire = $instance->getFormulaire();
$freponses = $this->getFormulaireReponseService()->getFormulaireResponsesByFormulaireInstance($instance);
$vreponses = ($validation) ? $this->getValidationReponseService()->getValidationResponsesByValidation($validation) : [];
$url = '';
return new ViewModel([
'formulaire' => $formulaire,
'instance' => $instance,
'fReponses' => $freponses,
'vReponses' => $vreponses,
'validation' => $validation,
'url' => $url,
'retour' => $retour,
'annuler' => $annuler,
]);
}
public function afficherResultatAction(): ViewModel
{
$validation = $this->getValidationService()->getRequestedValidation($this);
$instance = $validation->getFormulaireInstance();
$formulaire = $instance->getFormulaire();
$fReponses = $this->getFormulaireReponseService()->getFormulaireResponsesByFormulaireInstance($instance);
$vReponses = $this->getValidationReponseService()->getValidationResponsesByValidation($validation);
return new ViewModel([
'title' => 'Validation',
'formulaire' => $formulaire,
'validation' => $validation,
'fReponses' => $fReponses,
'vReponses' => $vReponses,
]);
}
public function historiserAction(): Response
{
$validation = $this->getValidationService()->getRequestedValidation($this);
$this->getValidationService()->historise($validation);
return $this->redirect()->toRoute('autoform/validations', [], [], true);
}
public function restaurerAction(): Response
{
$validation = $this->getValidationService()->getRequestedValidation($this);
$this->getValidationService()->restaure($validation);
return $this->redirect()->toRoute('autoform/validations', [], [], true);
}
public function detruireAction(): Response
{
$validation = $this->getValidationService()->getRequestedValidation($this);
$this->getValidationService()->delete($validation);
return $this->redirect()->toRoute('autoform/validations', [], [], true);
}
}
\ No newline at end of file
<?php
namespace UnicaenAutoform\Controller;
use Interop\Container\ContainerInterface;
use Laminas\View\Renderer\PhpRenderer;
use Psr\Container\ContainerExceptionInterface;
use Psr\Container\NotFoundExceptionInterface;
use UnicaenAutoform\Service\Formulaire\FormulaireInstanceService;
use UnicaenAutoform\Service\Formulaire\FormulaireReponseService;
use UnicaenAutoform\Service\Validation\ValidationReponseService;
use UnicaenAutoform\Service\Validation\ValidationService;
class ValidationControllerFactory
{
/**
* @param ContainerInterface $container
* @return ValidationController
* @throws ContainerExceptionInterface
* @throws NotFoundExceptionInterface
*/
public function __invoke(ContainerInterface $container): ValidationController
{
/**
* @var FormulaireInstanceService $formulaireInstanceService
* @var FormulaireReponseService $formulaireReponseService
* @var ValidationService $validationService
* @var ValidationReponseService $validationReponseService
*/
$formulaireInstanceService = $container->get(FormulaireInstanceService::class);
$formulaireReponseService = $container->get(FormulaireReponseService::class);
$validationService = $container->get(ValidationService::class);
$validationReponseService = $container->get(ValidationReponseService::class);
$controller = new ValidationController();
$controller->setFormulaireInstanceService($formulaireInstanceService);
$controller->setFormulaireReponseService($formulaireReponseService);
$controller->setValidationService($validationService);
$controller->setValidationReponseService($validationReponseService);
/* @var $renderer PhpRenderer */
$controller->renderer = $container->get('ViewRenderer');
return $controller;
}
}
\ No newline at end of file
<?xml version="1.0" encoding="utf-8" ?>
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
<entity name="UnicaenAutoform\Entity\Db\Validation" table="unicaen_autoform_validation">
<id name="id" column="id" type="integer">
<generator strategy="IDENTITY"/>
</id>
<field name="type" column="type" type="string" length="64" nullable="false" />
<many-to-one target-entity="UnicaenAutoform\Entity\Db\FormulaireInstance" field="instance">
<join-column name="instance" referenced-column-name="id"/>
</many-to-one>
<one-to-many target-entity="UnicaenAutoform\Entity\Db\ValidationReponse" mapped-by="validation" field="reponses"/>
<field name="typeValidation" column="type_validation" type="string" length="64" nullable="false" />
<many-to-one target-entity="UnicaenAutoform\Entity\Db\FormulaireInstance" field="reference">
<join-column name="reference" referenced-column-name="id"/>
</many-to-one>
<field name="histoCreation" type="datetime" column="histo_creation" nullable="false"/>
<field name="histoModification" type="datetime" column="histo_modification" nullable="false"/>
<field name="histoDestruction" type="datetime" column="histo_destruction" nullable="true"/>
<many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User" field="histoCreateur">
<join-column name="histo_createur_id" referenced-column-name="ID"/>
</many-to-one>
<many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User" field="histoModificateur">
<join-column name="histo_modificateur_id" referenced-column-name="ID"/>
</many-to-one>
<many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User" field="histoDestructeur">
<join-column name="histo_destructeur_id" referenced-column-name="ID"/>
</many-to-one>
<field name="complement" column="complement" type="string" length="9999" nullable="true" />
<field name="informations" column="informations" type="string" length="9999" nullable="true" />
<field name="differences" column="differences" type="string" length="9999" nullable="true" />
</entity>
</doctrine-mapping>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8" ?>
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
<entity name="UnicaenAutoform\Entity\Db\ValidationReponse" table="unicaen_autoform_validation_reponse">
<id name="id" column="id" type="integer">
<generator strategy="IDENTITY"/>
</id>
<many-to-one target-entity="UnicaenAutoform\Entity\Db\Validation" field="validation">
<join-column name="validation" referenced-column-name="id"/>
</many-to-one>
<many-to-one target-entity="UnicaenAutoform\Entity\Db\FormulaireReponse" field="formulaireReponse">
<join-column name="reponse" referenced-column-name="id"/>
</many-to-one>
<field name="value" column="value" type="string" length="256" nullable="false" />
</entity>
</doctrine-mapping>
\ No newline at end of file
<?php
namespace UnicaenAutoform\Entity\Db;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use UnicaenUtilisateur\Entity\Db\HistoriqueAwareInterface;
use UnicaenUtilisateur\Entity\Db\HistoriqueAwareTrait;
class Validation implements HistoriqueAwareInterface
{
use HistoriqueAwareTrait;
/** todo :: n'a rien a faire ici ... */
const TYPE_SUMPPS = "SUMPPS";
const TYPE_MEDECIN = "MEDECIN";
const TYPE_COMPOSANTE = "COMPOSANTE";
private ?int $id = null;
private ?string $type = null;
private ?FormulaireInstance $instance = null;
private ?string $typeValidation = null;
private ?FormulaireInstance $reference = null;
private Collection $reponses;
private ?string $complement = null;
private ?string $differences = null;
private ?string $informations = null;
public function __construct()
{
$this->reponses = new ArrayCollection();
}
public function getId(): ?int
{
return $this->id;
}
public function getType(): ?string
{
return $this->type;
}
public function setType(?string $type): void
{
$this->type = $type;
}
public function getFormulaireInstance(): ?FormulaireInstance
{
return $this->instance;
}
public function setFormulaireInstance(?FormulaireInstance $instance): void
{
$this->instance = $instance;
}
/** @return ValidationReponse[] */
public function getReponses(): array
{
return $this->reponses->toArray();
}
public function addReponse(ValidationReponse $reponse): void
{
$this->reponses->add($reponse);
}
public function getInstance(): ?FormulaireInstance
{
return $this->instance;
}
public function setInstance(?FormulaireInstance $instance): void
{
$this->instance = $instance;
}
public function getTypeValidation(): ?string
{
return $this->typeValidation;
}
public function setTypeValidation(?string $typeValidation): void
{
$this->typeValidation = $typeValidation;
}
public function getReference(): ?FormulaireInstance
{
return $this->reference;
}
public function setReference(?FormulaireInstance $reference): void
{
$this->reference = $reference;
}
public function getComplement(): ?string
{
return $this->complement;
}
public function setComplement(?string $complement): void
{
$this->complement = $complement;
}
public function getDifferences(): ?string
{
return $this->differences;
}
public function setDifferences(?string $differences): void
{
$this->differences = $differences;
}
public function getInformations(): ?string
{
return $this->informations;
}
public function setInformations(?string $informations): void
{
$this->informations = $informations;
}
}
\ No newline at end of file
<?php
namespace UnicaenAutoform\Entity\Db;
class ValidationReponse {
private ?int $id = null;
private ?Validation $validation = null;
private ?FormulaireReponse $formulaireReponse = null;
private ?string $value = null;
public function getId(): ?int
{
return $this->id;
}
public function getValidation(): ?Validation
{
return $this->validation;
}
public function setValidation(?Validation $validation): void
{
$this->validation = $validation;
}
public function getReponse(): ?FormulaireReponse
{
return $this->formulaireReponse;
}
public function setReponse(?FormulaireReponse $formulaireReponse): void
{
$this->formulaireReponse = $formulaireReponse;
}
public function getValue(): ?string
{
return $this->value;
}
public function setValue(?string $value): void
{
$this->value = $value;
}
}
\ No newline at end of file
<?php
namespace UnicaenAutoform\Provider\Privilege;
use UnicaenPrivilege\Provider\Privilege\Privileges;
class AutoformvalidationPrivileges extends Privileges
{
const VALIDATIONF_INDEX = 'autoformvalidation-validationf_index';
const VALIDATIONF_AFFICHER = 'autoformvalidation-validationf_afficher';
const VALIDATIONF_AJOUTER = 'autoformvalidation-validationf_ajouter';
const VALIDATIONF_MODIFIER = 'autoformvalidation-validationf_modifier';
const VALIDATIONF_HISTORISER = 'autoformvalidation-validationf_historiser';
const VALIDATIONF_SUPPRIMER = 'autoformvalidation-validationf_supprimer';
}
\ No newline at end of file
<?php
namespace UnicaenAutoform\Service\Validation;
use Doctrine\ORM\Exception\NotSupported;
use Doctrine\ORM\Exception\ORMException;
use Doctrine\ORM\QueryBuilder;
use RuntimeException;
use UnicaenAutoform\Entity\Db\Champ;
use UnicaenAutoform\Entity\Db\FormulaireReponse;
use UnicaenAutoform\Entity\Db\Validation;
use UnicaenAutoform\Entity\Db\ValidationReponse;
use UnicaenAutoform\Service\Formulaire\FormulaireReponseServiceAwareTrait;
use Doctrine\ORM\NonUniqueResultException;
use UnicaenApp\Service\EntityManagerAwareTrait;
use Laminas\Mvc\Controller\AbstractActionController;
class ValidationReponseService {
use EntityManagerAwareTrait;
use FormulaireReponseServiceAwareTrait;
/** GESTION DES ENTITES *******************************************************************************************/
public function create(ValidationReponse $reponse): ValidationReponse
{
try {
$this->getEntityManager()->persist($reponse);
$this->getEntityManager()->flush($reponse);
} catch (ORMException $e) {
throw new RuntimeException("Un problème s'est produit lors de la création d'un Reponse.", $e);
}
return $reponse;
}
public function update(ValidationReponse $reponse): ValidationReponse
{
try {
$this->getEntityManager()->flush($reponse);
} catch (ORMException $e) {
throw new RuntimeException("Un problème s'est produit lors de la mise à jour d'un Reponse.", $e);
}
return $reponse;
}
public function delete(ValidationReponse $reponse): ValidationReponse
{
try {
$this->getEntityManager()->remove($reponse);
$this->getEntityManager()->flush();
} catch (ORMException $e) {
throw new RuntimeException("Un problème s'est produit lors de la suppression d'un Reponse.", $e);
}
return $reponse;
}
/** REQUETAGE *****************************************************************************************************/
public function createQueryBuilder() : QueryBuilder
{
try {
$qb = $this->getEntityManager()->getRepository(ValidationReponse::class)->createQueryBuilder('reponse')
->leftJoin('reponse.validation', 'validation')
->leftJoin('reponse.formulaireReponse', 'formulaireReponse');
} catch (NotSupported $e) {
throw new RuntimeException("Un problème est survenu lors de la création du QueryBuilder de [".ValidationReponse::class."]",0,$e);
}
return $qb;
}
public function getValidationRequestedReponse(AbstractActionController $controller, string $label = 'validation-reponse'): ?ValidationReponse
{
$id = $controller->params()->fromRoute($label);
$reponse = $this->getValidationReponse($id);
return $reponse;
}
/** @return ValidationReponse[] */
public function getValidationReponses(): array
{
$qb = $this->createQueryBuilder();
$result = $qb->getQuery()->getResult();
return $result;
}
//todo fix that
/** @return ValidationReponse[] */
public function getValidationResponsesByValidation(Validation $validation): array
{
$qb = $this->createQueryBuilder()
->andWhere('reponse.validation = :validation')
->setParameter('validation', $validation)
;
/** @var ValidationReponse[] $result */
$result = $qb->getQuery()->getResult();
$reponses = [];
foreach ($result as $item) {
$reponses[$item->getReponse()->getChamp()->getId()] = $item;
}
return $reponses;
}
public function getValidationReponse(?int $id): ?ValidationReponse
{
$qb = $this->createQueryBuilder()
->andWhere('reponse.id = :id')
->setParameter('id', $id)
;
try {
$result = $qb->getQuery()->getOneOrNullResult();
} catch (NonUniqueResultException $e) {
throw new RuntimeException("Plusieurs Reponse partagent le même identifiant [".$id."].", $e);
}
return $result;
}
public function updateValidationReponse(Validation $validation, $data): void
{
/** @var FormulaireReponse[] $fReponses */
$instance = $validation->getFormulaireInstance();
$resultF = $this->getFormulaireReponseService()->getFormulaireResponsesByFormulaireInstance($instance);
$fReponses = [];
foreach ($resultF as $item) {
$fReponses[$item->getChamp()->getId()] = $item;
}
/** @var ValidationReponse[] $vReponses */
$result = $this->getValidationResponsesByValidation($validation);
$vReponses = [];
foreach ($result as $item) {
$vReponses[$item->getReponse()->getChamp()->getId()] = $item;
}
foreach ($resultF as $item) {
$value = null;
$champ = $item->getChamp();
$key = $champ->getId();
$type = $champ->getElement();
if ($type !== Champ::TYPE_MULTIPLE) {
if ($data["reponse_".$key] && $data["reponse_".$key] === 'on') {
$value = 'on';
}
} else {
foreach ($data as $name => $reponse) {
$prefix = "reponse_".$key."_";
if (str_starts_with($name, $prefix)) {
$value[] = substr($name, strlen($prefix));
}
}
if ($value !== null) $value = implode(";",$value);
}
if ($value !== null) {
if (isset($vReponses[$key])) {
$vReponses[$key]->setValue($value);
$this->update($vReponses[$key]);
} else {
$vReponse = new ValidationReponse();
$vReponse->setReponse($fReponses[$key]);
$vReponse->setValidation($validation);
$vReponse->setValue($value);
$validation->addReponse($vReponse);
$this->create($vReponse);
}
} else {
if (isset($vReponses[$key])) {
$this->delete($vReponses[$key]);
}
}
}
}
}
\ No newline at end of file
<?php
namespace UnicaenAutoform\Service\Validation;
trait ValidationReponseServiceAwareTrait {
private ValidationReponseService $validationReponseService;
public function getValidationReponseService(): ValidationReponseService
{
return $this->validationReponseService;
}
public function setValidationReponseService(ValidationReponseService $validationReponseService): void
{
$this->validationReponseService = $validationReponseService;
}
}
\ No newline at end of file
<?php
namespace UnicaenAutoform\Service\Validation;
use Psr\Container\ContainerExceptionInterface;
use Psr\Container\NotFoundExceptionInterface;
use UnicaenAutoform\Service\Formulaire\FormulaireReponseService;
use Doctrine\ORM\EntityManager;
use Interop\Container\ContainerInterface;
class ValidationReponseServiceFactory {
/**
* @param ContainerInterface $container
* @return ValidationReponseService
* @throws ContainerExceptionInterface
* @throws NotFoundExceptionInterface
*/
public function __invoke(ContainerInterface $container): ValidationReponseService
{
/**
* @var EntityManager $entityManager
* @var FormulaireReponseService $formulaireReponseService
*/
$entityManager = $container->get('doctrine.entitymanager.orm_default');
$formulaireReponseService = $container->get(FormulaireReponseService::class);
$service = new ValidationReponseService();
$service->setEntityManager($entityManager);
$service->setFormulaireReponseService($formulaireReponseService);
return $service;
}
}
\ No newline at end of file
<?php
namespace UnicaenAutoform\Service\Validation;
use Doctrine\ORM\Exception\NotSupported;
use Doctrine\ORM\Exception\ORMException;
use Doctrine\ORM\QueryBuilder;
use UnicaenAutoform\Entity\Db\FormulaireInstance;
use UnicaenAutoform\Entity\Db\Validation;
use DateTime;
use Doctrine\ORM\NonUniqueResultException;
use UnicaenApp\Exception\RuntimeException;
use UnicaenApp\Service\EntityManagerAwareTrait;
use UnicaenUtilisateur\Service\User\UserServiceAwareTrait;
use Laminas\Mvc\Controller\AbstractActionController;
class ValidationService {
use EntityManagerAwareTrait;
use UserServiceAwareTrait;
/** GESTION DES ENTITES *******************************************************************************************/
public function create(Validation $validation) : Validation
{
try {
$this->getEntityManager()->persist($validation);
$this->getEntityManager()->flush($validation);
} catch (ORMException $e) {
throw new RuntimeException("Un problème s'est produit lors de la création d'un Validation.", $e);
}
return $validation;
}
public function update(Validation $validation) : Validation
{
try {
$this->getEntityManager()->flush($validation);
} catch (ORMException $e) {
throw new RuntimeException("Un problème s'est produit lors de la mise à jour d'un Validation.", $e);
}
return $validation;
}
public function historise(Validation $validation) : Validation
{
$user = $this->getUserService()->getConnectedUser();
$date = new DateTime();
$validation->setHistoDestructeur($user);
$validation->setHistoDestruction($date);
try {
$this->getEntityManager()->flush($validation);
} catch (ORMException $e) {
throw new RuntimeException("Un problème s'est produit lors de l'historisation d'un Validation.", $e);
}
return $validation;
}
public function restaure(Validation $validation): Validation
{
try {
$this->getEntityManager()->flush($validation);
} catch (ORMException $e) {
throw new RuntimeException("Un problème s'est produit lors de la restauration d'un Validation.", $e);
}
return $validation;
}
public function delete(Validation $validation) : Validation
{
try {
$this->getEntityManager()->flush();
$this->getEntityManager()->remove($validation);
} catch (ORMException $e) {
throw new RuntimeException("Un problème s'est produit lors de la suppression d'un Validation.", $e);
}
return $validation;
}
/** REQUETAGE *****************************************************************************************************/
public function createQueryBuilder(): QueryBuilder
{
try {
$qb = $this->getEntityManager()->getRepository(Validation::class)->createQueryBuilder('validation');
} catch (NotSupported $e) {
throw new RuntimeException("Un problème est survenu lors de la création du QueryBuilder [".Validation::class."]",0,$e);
}
return $qb;
}
public function getRequestedValidation(AbstractActionController $controller, string $label= 'validation') : ?Validation
{
$id = $controller->params()->fromRoute($label);
$validation = $this->getValidation($id);
return $validation;
}
/**
* @return Validation[]
*/
public function getValidations(): array
{
$qb = $this->createQueryBuilder();
$result = $qb->getQuery()->getResult();
return $result;
}
public function getValidation(?int $id) : ?Validation
{
$qb = $this->createQueryBuilder()
->andWhere('validation.id = :id')
->setParameter('id', $id);
try {
$result = $qb->getQuery()->getOneOrNullResult();
} catch (NonUniqueResultException $e) {
throw new RuntimeException("Plusieurs Validation partagent le même identifiant [".$id."].", $e);
}
return $result;
}
public function getValidationByTypeAndInstance(string $type, FormulaireInstance $instance): ?Validation
{
$qb = $this->createQueryBuilder()
->andWhere('validation.instance = :instance')
->andWhere('validation.type = :type')
->andWhere('validation.histoDestruction IS NULL')
->setParameter('instance', $instance)
->setParameter('type', $type)
;
try {
$result = $qb->getQuery()->getOneOrNullResult();
} catch (NonUniqueResultException $e) {
throw new RuntimeException("Plusieurs validations partagent la même instance et le même type [".$type."/".$instance->getId()."].", 0, $e);
}
return $result;
}
}
\ No newline at end of file
<?php
namespace UnicaenAutoform\Service\Validation;
trait ValidationServiceAwareTrait {
private ValidationService $validationService;
public function getValidationService(): ValidationService
{
return $this->validationService;
}
public function setValidationService(ValidationService $validationService): void
{
$this->validationService = $validationService;
}
}
\ No newline at end of file
<?php
namespace UnicaenAutoform\Service\Validation;
use Doctrine\ORM\EntityManager;
use Interop\Container\ContainerInterface;
use Psr\Container\ContainerExceptionInterface;
use Psr\Container\NotFoundExceptionInterface;
use UnicaenUtilisateur\Service\User\UserService;;
class ValidationServiceFactory {
/**
* @param ContainerInterface $container
* @return ValidationService
* @throws ContainerExceptionInterface
* @throws NotFoundExceptionInterface
*/
public function __invoke(ContainerInterface $container): ValidationService
{
/**
* @var EntityManager $entityManager
* @var UserService $userService
*/
$entityManager = $container->get('doctrine.entitymanager.orm_default');
$userService = $container->get(UserService::class);
$service = new ValidationService();
$service->setEntityManager($entityManager);
$service->setUserService($userService);
return $service;
}
}
\ No newline at end of file
......@@ -36,8 +36,12 @@ class ChampAsValidationHelper extends AbstractHelper
$replace = str_replace("_"," ",substr($split,3));
$found = array_search($split, $validation_splits);
$texte .= "<li>";
$texte .= '<input type="checkbox" name="reponse_'.$champ->getId().'_'.$split.'" '. (($found !== false)?'checked':'') . ' >';
$texte .= '<label>&nbsp;'. $replace . '</label>';
$texte .= '<input type="checkbox" ';
$texte .= ' name="reponse_'.$champ->getId().'_'.$split.'" ';
$texte .= ' id="reponse_'.$champ->getId().'_'.$split.'" ';
$texte .= (($found !== false)?'checked':'');
$texte .= ' >';
$texte .= '<label for="reponse_'.$champ->getId().'_'.$split.'"">&nbsp;'. $replace . '</label>';
$texte .= "</li>";
// $texte .= "<li>" . $split . "</li>";
}
......@@ -88,8 +92,8 @@ class ChampAsValidationHelper extends AbstractHelper
$result = '';
$result .= '<div class="col-sm-offset-1 col-sm-11">';
$result .= '<input type="checkbox" name="reponse_'.$champ->getId().'" '. (($validation !== null)?'checked':'') . ' >';
$result .= '<label>&nbsp;'. $texte . '</label>';
$result .= '<input type="checkbox" id="reponse_'.$champ->getId().'" name="reponse_'.$champ->getId().'" '. (($validation !== null)?'checked':'') . ' >';
$result .= '<label for="reponse_'.$champ->getId().'">&nbsp;'. $texte . '</label>';
$result .= '</div>';
......
......@@ -2,11 +2,13 @@
namespace UnicaenAutoform\View\Helper;
use Application\Entity\Db\DemandeInstance;
use UnicaenAutoform\Entity\Db\Categorie;
use UnicaenAutoform\Entity\Db\Champ;
use UnicaenAutoform\Entity\Db\FormulaireInstance;
use UnicaenAutoform\Entity\Db\FormulaireReponse;
use UnicaenAutoform\Entity\Db\Validation;use Laminas\Form\View\Helper\AbstractHelper;
use UnicaenValidation\Entity\Db\ValidationInstance;
class ValidationAsTextHelper extends AbstractHelper
{
......@@ -14,70 +16,86 @@ class ValidationAsTextHelper extends AbstractHelper
* @param Validation $validation
* @return string
*/
public function render($validation) {
public function render(FormulaireInstance $instance, ValidationInstance $validation) : string
{
$text = '';
$instance = $validation->getFormulaireInstance();
$formulaire = $instance->getFormulaire();
$vreponses = json_decode($validation->getJustification());
$fReponses = [];
$reponsesTMP = $instance->getReponses();
foreach ($reponsesTMP as $reponse) {
$fReponses[$reponse->getChamp()->getId()] = $reponse;
}
$vReponses = [];
$reponsesTMP = $validation->getReponses();
foreach ($reponsesTMP as $reponse) {
$vReponses[$reponse->getReponse()->getChamp()->getId()] = $reponse;
/** @var FormulaireReponse $reponse */
/** @var Champ $champ */
$dictionnaireCategorie = [];
$dictionnaireChamp = [];
foreach ($instance->getReponses() as $reponse) {
$champ = $reponse->getChamp();
$categorie = $champ->getCategorie();
$dictionnaireCategorie[$categorie->getId()] = $categorie;
$dictionnaireChamp[$categorie->getId()][] = $champ;
}
usort($dictionnaireCategorie, function (Categorie $a, Categorie $b) { return $a->getOrdre() > $b->getOrdre();});
$categories = $formulaire->getCategories();
$categories = array_filter($categories, function (Categorie $categorie) { return $categorie->estNonHistorise();});
usort($categories, function (Categorie $a, Categorie $b) { return $a->getOrdre() - $b->getOrdre();});
// $text .= '<ul>';
foreach ($categories as $categorie) {
/** @var Champ[] $champs */
$champs = $categorie->getChamps();
$champs = array_filter($champs, function (Champ $champ) { return $champ->estNonHistorise();});
usort($champs, function (Champ $a, Champ $b) { return $a->getOrdre() - $b->getOrdre();});
foreach ($dictionnaireCategorie as $categorie) {
usort($dictionnaireChamp[$categorie->getId()], function (Champ $a, Champ $b) {
return $a->getOrdre() > $b->getOrdre();
});
$textCategorie = "<h4>" . $categorie->getLibelle() . "</h4>";
$results = [];
foreach ($champs as $champ) {
$fReponse = isset($fReponses[$champ->getId()])?$fReponses[$champ->getId()]->getReponse():null;
$vReponse = isset($vReponses[$champ->getId()])?$vReponses[$champ->getId()]->getValue():null;
if ($fReponse && $vReponse) $results[$champ->getId()] = $fReponses[$champ->getId()];
foreach ($dictionnaireChamp[$categorie->getId()] as $champ) {
$vreponse = $vreponses->{'reponse_' . $champ->getId()} ?? null;
if ($vreponse !== null) {
$texttmp = $this->getView()->champAsResult()->render($champ,
"on_LSF;on_LPC",
$vreponse);
$a=1;
}
if (!empty($champs) && !empty($results)) {
// $text .= '<li>';
$text .= '<h3>';
$text .= $categorie->getLibelle();
$text .= '</h3>';
$text .= '<ul>';
foreach ($champs as $champ) {
if (isset($results[$champ->getId()])) {
$text .= '<li>';
switch($champ->getElement()) {
case Champ::TYPE_MULTIPLE :
$text .= $this->getView()->champAsResult()->render($champ, $vReponses[$champ->getId()]->getValue());
break;
default :
$text .= $this->getView()->champAsResult()->render($champ, $fReponses[$champ->getId()]->getReponse());
break;
// if ($reponse && $reponse->getReponse() !== null) {
// $textCategorie .= $champ->getLibelle() . ":" . $vreponse->getReponse();
// $textCategorie .= $this->getView()->champAsValidation()->render($champ, ($reponses[$champ->getId()])->getReponse(), $reponses->{'reponse_'.$champ->getId()});
// }
}
$text .= '</li>';
$text .= $textCategorie;
}
}
$text .= '</ul>';
// /** @var Champ[] $champs */
// $champs = $categorie->getChamps();
// $champs = array_filter($champs, function (Champ $champ) { return $champ->estNonHistorise();});
// usort($champs, function (Champ $a, Champ $b) { return $a->getOrdre() - $b->getOrdre();});
//
// $results = [];
// foreach ($champs as $champ) {
// $fReponse = isset($fReponses[$champ->getId()])?$fReponses[$champ->getId()]->getReponse():null;
// $vReponse = isset($vReponses[$champ->getId()])?$vReponses[$champ->getId()]->getValue():null;
// if ($fReponse && $vReponse) $results[$champ->getId()] = $fReponses[$champ->getId()];
// }
//
// if (!empty($champs) && !empty($results)) {
//// $text .= '<li>';
// $text .= '<h3>';
// $text .= $categorie->getLibelle();
// $text .= '</h3>';
//
// $text .= '<ul>';
// foreach ($champs as $champ) {
// if (isset($results[$champ->getId()])) {
// $text .= '<li>';
// switch($champ->getElement()) {
// case Champ::TYPE_MULTIPLE :
// $text .= $this->getView()->champAsResult()->render($champ, $vReponses[$champ->getId()]->getValue());
// break;
// default :
// $text .= $this->getView()->champAsResult()->render($champ, $fReponses[$champ->getId()]->getReponse());
// break;
// }
// $text .= '</li>';
}
// }
// }
// $text .= '</ul>';
}
// $text .= '</li>';
// }
// $text .= '</ul>';
return $text;
}
......
......@@ -7,6 +7,7 @@
use UnicaenAutoform\Entity\Db\Champ;
?>
<?php if ($data !== 'null') : ?>
<?php echo $champ->getLibelle(); ?>&nbsp;:&nbsp;<?php echo $data; ?>
<?php endif; ?>
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment