diff --git a/config/merged/indicateur.config.php b/config/merged/indicateur.config.php index e308a6147cad602dff26d9cf2def221f2892c23c..25f06bf7141bbe6ffa7d8ebdd48304e9034db459 100644 --- a/config/merged/indicateur.config.php +++ b/config/merged/indicateur.config.php @@ -28,6 +28,7 @@ return [ 'modifier', 'detruire', 'exporter', + 'regenerer', ], 'privileges' => [ IndicateurPrivileges::AFFICHER, @@ -87,6 +88,17 @@ return [ ], 'may_terminate' => true, ], + 'regenerer' => [ + 'type' => Segment::class, + 'options' => [ + 'route' => '/regenerer/:indicateur', + 'defaults' => [ + 'controller' => IndicateurController::class, + 'action' => 'regenerer', + ], + ], + 'may_terminate' => true, + ], 'creer' => [ 'type' => Literal::class, 'options' => [ diff --git a/src/UnicaenIndicateur/Controller/IndicateurController.php b/src/UnicaenIndicateur/Controller/IndicateurController.php index 819a298ea99084a8558caebb842e501eee25e668..2597969e8096752ee692831b5d9c0a236c839a0f 100644 --- a/src/UnicaenIndicateur/Controller/IndicateurController.php +++ b/src/UnicaenIndicateur/Controller/IndicateurController.php @@ -123,6 +123,18 @@ class IndicateurController extends AbstractActionController { return $this->redirect()->toRoute('indicateurs', [], [], true); } + public function regenererAction() : Response + { + $indicateur = $this->getIndicateurService()->getRequestedIndicateur($this); + $indicateur->setDernierRafraichissement(new DateTime()); + $this->getIndicateurService()->createView($indicateur); + $this->getIndicateurService()->update($indicateur); + + $retour = $this->params()->fromQuery('retour'); + if ($retour) return $this->redirect()->toUrl($retour); + return $this->redirect()->toRoute('indicateur/afficher', ['indicateur' => $indicateur->getId()], [], true); + } + public function exporterAction(): CsvModel { $indicateur = $this->getIndicateurService()->getRequestedIndicateur($this); diff --git a/src/UnicaenIndicateur/Entity/Db/Indicateur.php b/src/UnicaenIndicateur/Entity/Db/Indicateur.php index 87189b981cb679415d454f62562663e2a8da09da..0d1d9dbaf17376fa8fd779f506ac2e5b31e79559 100644 --- a/src/UnicaenIndicateur/Entity/Db/Indicateur.php +++ b/src/UnicaenIndicateur/Entity/Db/Indicateur.php @@ -32,7 +32,7 @@ class Indicateur { return $this->id; } - public function getTitre() : string + public function getTitre() : ?string { return $this->titre; } @@ -42,7 +42,7 @@ class Indicateur { $this->titre = $titre; } - public function getDescription() : string + public function getDescription() : ?string { return $this->description; } @@ -52,7 +52,7 @@ class Indicateur { $this->description = $description; } - public function getRequete() : string + public function getRequete() : ?string { return $this->requete; } @@ -72,7 +72,7 @@ class Indicateur { $this->dernierRafraichissement = $dernierRafraichissement; } - public function getViewId() : string + public function getViewId() : ?string { return $this->viewId; } diff --git a/view/unicaen-indicateur/indicateur/afficher.phtml b/view/unicaen-indicateur/indicateur/afficher.phtml index 32259265daeb310e1a2df480bdbe9164531f08f4..b084b2c73ff6f0a9dd5ab65b126128fe7d5829cc 100644 --- a/view/unicaen-indicateur/indicateur/afficher.phtml +++ b/view/unicaen-indicateur/indicateur/afficher.phtml @@ -19,7 +19,18 @@ use UnicaenIndicateur\Entity\Db\Indicateur; <?php if ($exists !== true) : ?> <div class="alert alert-danger"> - La vue matérialisée associée à l'indicateur ne semble pas exister. + <div class="row"> + <div class="col-md-9"> + La vue matérialisée associée à l'indicateur ne semble pas exister. + </div> + <div class="col-md-3"> + <?php /** @see \UnicaenIndicateur\Controller\IndicateurController::regenererAction() */?> + <a href="<?php echo $this->url('indicateur/regenerer', ['indicateur' => $indicateur->getId()], [], true); ?>" class="btn btn-primary"> + <span class="icon icon-synchroniser"></span> + Regénérer la vue associée + </a> + </div> + </div> </div> <?php else : ?> <div class="row">