diff --git a/config/merged/indicateur.config.php b/config/merged/indicateur.config.php index 8085e262c0ee36b297c0c944fbac2c27c4c39f71..dfdff90ec5908d1c66888502bcef2f9cc64d35f5 100644 --- a/config/merged/indicateur.config.php +++ b/config/merged/indicateur.config.php @@ -9,6 +9,8 @@ use UnicaenIndicateur\Form\Indicateur\IndicateurHydratorFactory; use UnicaenIndicateur\Provider\Privilege\IndicateurPrivileges; use UnicaenIndicateur\Service\Indicateur\IndicateurService; use UnicaenIndicateur\Service\Indicateur\IndicateurServiceFactory; +use UnicaenIndicateur\View\Helper\DefaultItemViewHelper; +use UnicaenIndicateur\View\Helper\IndicateurViewHelperFactory; use UnicaenPrivilege\Guard\PrivilegeController; use Laminas\Mvc\Console\Router\Simple; use Laminas\Router\Http\Literal; @@ -200,6 +202,13 @@ return [ 'factories' => [ IndicateurHydrator::class => IndicateurHydratorFactory::class, ], - ] - + ], + 'view_helpers' => [ + 'invokables' => [ + 'defaultItem' => DefaultItemViewHelper::class, + ], + 'factories' => [ + 'indicateur' => IndicateurViewHelperFactory::class, + ], + ], ]; \ No newline at end of file diff --git a/src/UnicaenIndicateur/View/Helper/DefaultItemViewHelper.php b/src/UnicaenIndicateur/View/Helper/DefaultItemViewHelper.php new file mode 100644 index 0000000000000000000000000000000000000000..34960eb308398b56c167459b727e3a7c366d5ddb --- /dev/null +++ b/src/UnicaenIndicateur/View/Helper/DefaultItemViewHelper.php @@ -0,0 +1,36 @@ +<?php + +namespace UnicaenIndicateur\View\Helper; + +use Laminas\View\Helper\AbstractHelper; + +class DefaultItemViewHelper extends AbstractHelper implements ItemViewHelperInterface +{ + public function getHeader(array $data) : string + { + $headers = $data[0]; + $texte = "<thead>"; + $texte .= "<tr>"; + foreach ($headers as $header) { + $texte .= "<th>"; + $texte .= $header; + $texte .= "</th>"; + } + $texte .= "</tr>"; + $texte .= "</thead>"; + return $texte; + } + + public function getItem(array $data, int $position) : string + { + $values = $data[1][$position]; + $texte = "<tr>"; + foreach ($values as $value) { + $texte .= "<td>"; + $texte .= $value; + $texte .= "</td>"; + } + $texte .= "</tr>"; + return $texte; + } +} \ No newline at end of file diff --git a/src/UnicaenIndicateur/View/Helper/IndicateurViewHelper.php b/src/UnicaenIndicateur/View/Helper/IndicateurViewHelper.php new file mode 100644 index 0000000000000000000000000000000000000000..5191edca5e29fb3f0ef923a8bf7879203fbeb869 --- /dev/null +++ b/src/UnicaenIndicateur/View/Helper/IndicateurViewHelper.php @@ -0,0 +1,23 @@ +<?php + +namespace UnicaenIndicateur\View\Helper; + +use Laminas\View\Helper\AbstractHelper; +use Laminas\View\Renderer\PhpRenderer; +use Laminas\View\Resolver\TemplatePathStack; +use UnicaenIndicateur\Entity\Db\Indicateur; +use UnicaenIndicateur\Service\Indicateur\IndicateurServiceAwareTrait; + +class IndicateurViewHelper extends AbstractHelper { + use IndicateurServiceAwareTrait; + + public function __invoke(Indicateur $indicateur, array $options = []) + { + /** @var PhpRenderer $view */ + $view = $this->getView(); + $view->resolver()->attach(new TemplatePathStack(['script_paths' => [__DIR__ . "/partial"]])); + + $data = $this->getIndicateurService()->getIndicateurData($indicateur); + return $view->partial('indicateur', ['indicateur' => $indicateur, 'data' => $data, 'options' => $options]); + } +} \ No newline at end of file diff --git a/src/UnicaenIndicateur/View/Helper/IndicateurViewHelperFactory.php b/src/UnicaenIndicateur/View/Helper/IndicateurViewHelperFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..603ba1771e0b79047fae471ec24f3b6b169c156d --- /dev/null +++ b/src/UnicaenIndicateur/View/Helper/IndicateurViewHelperFactory.php @@ -0,0 +1,29 @@ +<?php + +namespace UnicaenIndicateur\View\Helper; + +use Psr\Container\ContainerExceptionInterface; +use Psr\Container\ContainerInterface; +use Psr\Container\NotFoundExceptionInterface; +use UnicaenIndicateur\Service\Indicateur\IndicateurService; + +class IndicateurViewHelperFactory { + + /** + * @param ContainerInterface $container + * @return IndicateurViewHelper + * @throws ContainerExceptionInterface + * @throws NotFoundExceptionInterface + */ + public function __invoke(ContainerInterface $container) : IndicateurViewHelper + { + /** + * @var IndicateurService $indicateurService + */ + $indicateurService = $container->get(IndicateurService::class); + + $helper = new IndicateurViewHelper(); + $helper->setIndicateurService($indicateurService); + return $helper; + } +} \ No newline at end of file diff --git a/src/UnicaenIndicateur/View/Helper/ItemViewHelperInterface.php b/src/UnicaenIndicateur/View/Helper/ItemViewHelperInterface.php new file mode 100644 index 0000000000000000000000000000000000000000..0fdd09601cbf35bf0557e75d469c7e15b582deab --- /dev/null +++ b/src/UnicaenIndicateur/View/Helper/ItemViewHelperInterface.php @@ -0,0 +1,12 @@ +<?php + +namespace UnicaenIndicateur\View\Helper; + +interface ItemViewHelperInterface +{ + /** Retourne le header du tableau */ + public function getHeader(array $data) : string ; + + /** Retourne la line du tableau associée avec l'item à la position $position */ + public function getItem(array $data, int $position) : string ; +} \ No newline at end of file diff --git a/src/UnicaenIndicateur/View/Helper/partial/indicateur.phtml b/src/UnicaenIndicateur/View/Helper/partial/indicateur.phtml new file mode 100644 index 0000000000000000000000000000000000000000..b15a584ffdf5289c1b86c2d9e954b7a662e387b8 --- /dev/null +++ b/src/UnicaenIndicateur/View/Helper/partial/indicateur.phtml @@ -0,0 +1,29 @@ +<?php + +use UnicaenIndicateur\Entity\Db\Indicateur; + +/** + * @see \UnicaenIndicateur\View\Helper\IndicateurViewHelper + * @var Indicateur $indicateur + * @var array $data + * @var array $options + */ + +?> + +<div> +<table + id="indicateur_<?php echo $indicateur->getId(); ?>" + class="datatable table table-condensed table-hover" +> + <?php echo $this->defaultItem($indicateur)->getHeader($data); ?> + <tbody> + <?php $nbLine = count($data[1]); ?> + <?php + for($position = 0 ; $position < count($data[1]) ; $position++) { + echo $this->defaultItem($indicateur)->getItem($data, $position); + } + ?> + </tbody> +</table> +</div> \ No newline at end of file diff --git a/view/unicaen-indicateur/tableau-de-bord/afficher.phtml b/view/unicaen-indicateur/tableau-de-bord/afficher.phtml index 2bc786cf1b9e0a2c158841212df4450dcfc011ae..dd1066975e7d97d5be393e81f780ac3fde759bbd 100644 --- a/view/unicaen-indicateur/tableau-de-bord/afficher.phtml +++ b/view/unicaen-indicateur/tableau-de-bord/afficher.phtml @@ -95,8 +95,6 @@ $width = 12 / ((int) ($tableau?$tableau->getNbColumn():1)); <?php endif; ?> </div> </div> - - <span class="todo">Faire le view helper des données des indicateurs </span> <?php $exists = $indicateurService->verifierExistanceMaterializedView($indicateur->getViewId()); if ($exists === true) { @@ -106,24 +104,7 @@ $width = 12 / ((int) ($tableau?$tableau->getNbColumn():1)); } ?> <?php if ($exists) : ?> - <table id="indicateur_<?php echo $indicateur->getId(); ?>" class="datatable"> - <thead> - <tr> - <?php foreach ($header as $key ) : ?> - <th> <?php echo $key; ?> </th> - <?php endforeach; ?> - </tr> - </thead> - <tbody> - <?php foreach ($data as $item) : ?> - <tr> - <?php foreach ($item as $i) : ?> - <td> <?php echo $i; ?> </td> - <?php endforeach; ?> - </tr> - <?php endforeach; ?> - </tbody> - </table> + <?php echo $this->indicateur($indicateur); ?> <?php else : ?> Problème détecté sur l'indicateur. <?php endif; ?>