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

Retravail vers php 8.0

parents 60ba0e35 1950d9fe
No related branches found
No related tags found
No related merge requests found
Pipeline #17203 passed
Showing
with 227 additions and 493 deletions
.idea/
vendor/
.sass-cache/
......@@ -14,8 +14,8 @@ class Module
{
$e->getApplication()->getServiceManager()->get('translator');
$eventManager = $e->getApplication()->getEventManager();
$moduleRouteListener = new ModuleRouteListener();
$moduleRouteListener->attach($eventManager);
// $moduleRouteListener = new ModuleRouteListener();
// $moduleRouteListener->attach($eventManager);
/* Active un layout spécial si la requête est de type AJAX. Valable pour TOUS les modules de l'application. */
$eventManager->getSharedManager()->attach('Laminas\Mvc\Controller\AbstractActionController', 'dispatch',
......
......@@ -8,7 +8,7 @@
}
],
"require": {
"unicaen/app": "^5.0",
"php": "^8.0",
"unicaen/privilege": "^5.0",
"laminas/laminas-dependency-plugin": "^2.1"
},
......
......@@ -27,26 +27,6 @@ return [
],
],
'navigation' => [
'default' => [
'home' => [
'pages' => [
'administration' => [
'pages' => [
'contenu' => [
'label' => 'Templates et macros',
'route' => 'contenu/template',
'resource' => PrivilegeController::getResourceId(IndexController::class, 'index'),
'order' => 10001,
'icon' => 'fas fa-angle-right',
],
],
],
],
],
],
],
'router' => [
'routes' => [
'contenu' => [
......
......@@ -58,29 +58,6 @@ return [
],
],
'navigation' => [
'default' => [
'home' => [
'pages' => [
'administration' => [
'pages' => [
'contenu' => [
'pages' => [
'macro' => [
'label' => 'Macro',
'route' => 'contenu/macro',
'resource' => PrivilegeController::getResourceId(MacroController::class, 'index'),
'order' => 10001,
],
],
],
],
],
],
],
],
],
'router' => [
'routes' => [
'contenu' => [
......
......@@ -47,29 +47,6 @@ return [
],
],
'navigation' => [
'default' => [
'home' => [
'pages' => [
'administration' => [
'pages' => [
'contenu' => [
'pages' => [
'rendu' => [
'label' => 'Contenu',
'route' => 'contenu/rendu',
'resource' => PrivilegeController::getResourceId(RenduController::class, 'index'),
'order' => 10003,
],
],
],
],
],
],
],
],
],
'router' => [
'routes' => [
'contenu' => [
......
......@@ -66,29 +66,6 @@ return [
],
],
'navigation' => [
'default' => [
'home' => [
'pages' => [
'administration' => [
'pages' => [
'contenu' => [
'pages' => [
'template' => [
'label' => 'Template',
'route' => 'contenu/template',
'resource' => PrivilegeController::getResourceId(TemplateController::class, 'index'),
'order' => 10001,
],
],
],
],
],
],
],
],
],
'router' => [
'routes' => [
'contenu' => [
......
......@@ -2,6 +2,10 @@
use Doctrine\Common\Persistence\Mapping\Driver\MappingDriverChain;
use Doctrine\ORM\Mapping\Driver\XmlDriver;
use UnicaenPrivilege\Guard\PrivilegeController;
use UnicaenRenderer\Controller\MacroController;
use UnicaenRenderer\Controller\RenduController;
use UnicaenRenderer\Controller\TemplateController;
return [
'doctrine' => [
......
<?php
use UnicaenPrivilege\Guard\PrivilegeController;
use UnicaenRenderer\Controller\MacroController;
use UnicaenRenderer\Controller\RenduController;
use UnicaenRenderer\Controller\TemplateController;
return [
'navigation' => [
'default' => [
'home' => [
'pages' => [
'administration' => [
'pages' => [
'renderer-header' => [
'label' => 'Gestion des contenus',
'route' => 'contenu',
'resources' => [
PrivilegeController::getResourceId(MacroController::class, 'index'),
PrivilegeController::getResourceId(TemplateController::class, 'index'),
PrivilegeController::getResourceId(RenduController::class, 'index'),
],
'order' => 10000,
'dropdown-header' => true,
],
'pages' => [
'macro' => [
'label' => 'Macros',
'route' => 'contenu/macro',
'resource' => PrivilegeController::getResourceId(MacroController::class, 'index'),
'order' => 10100,
'icon' => 'fas fa-angle-right',
],
'template' => [
'label' => 'Templates',
'route' => 'contenu/template',
'resource' => PrivilegeController::getResourceId(TemplateController::class, 'index'),
'order' => 10200,
'icon' => 'fas fa-angle-right',
],
'rendu' => [
'label' => 'Contenus',
'route' => 'contenu/rendu',
'resource' => PrivilegeController::getResourceId(RenduController::class, 'index'),
'order' => 10300,
'icon' => 'fas fa-angle-right',
],
],
],
],
],
],
],
],
];
\ No newline at end of file
Module Unicaen Renderer
Module Unicaen Evenement
=======================
------------------------
Description
-----------
Le module **unicaen/renderer** est en charge du stockage des templates et des macros associées.
Ainsi que les rendus générés à partir des templates et macros.
Le module fournit un menu dans Administration > Contenus permettant d'accéder aux instances créées : Macros, Templates et Rendus.
Dans ces menus, il est possible de gérer ceux-ci.
Dépendances
-----------
Utilisation de tinyMCE (v4.+) pour la partie WYSIWYG (qualité de vie).
Description du fonctionnement
============================
Les macros
----------
Les macros reposent sur un code unique permettant au service **RenduService** de les substituer plus tard dans le texte.
Les macros font référence à :
- une **variable** qui doit être passé au préalable dans un tableau
- une **méthode** (retournant une chaine de caratères) que doit possèder cette variable.
Les templates
-------------
Les templates stockent les textes avec macros qui seront transformés en rendu.
On retrouve trois blocs de textes :
- la partie **sujet** pour le sujet du courrier ou le titre d'un document (et le nom du fichier)
- la partie **corps** pour le corps du rendu
- la partie **css** qui est fcaultive qui correpond à un morceau de css qui est apposé au rendu généré
La génération de rendus
-------------------------
La génération passe par l'utilisation de la méthode `generateRenduByTemplate(Template, array)` qui prend en argument :
1. un template
2. un tableau de variables utilisés par les macros
Alternativement, la fonction `generateRenduByTemplateCode(string, array)` permet la génération avec seulement le code du template et renvoi une exception si le code n'est associé à aucun template.
```php
// Préparation du tableau de variables
$vars = [
'truc' => $truc,
'machin' => $machin,
'UrlService' => $urlService,
];
// generation du rendu
$rendu = $this->getRenduService()->generateRenduByTemplateCode('MON_TEMPLATE', $vars);
```
L'utilisation du rendu peut être fait directement via l'usage des accésseurs de `Rendu` que cela soit pour : un affichage directe, un export PDF ou la génération d'un courrier électronique.
```phtml
<dl>
<dt> Sujet </dt>
<dd> <?php echo $rendu->getSujet(); ?> </dd>
<dt> Sujet </dt>
<dd> <?php echo $rendu->getCorps(); ?> </dd>
</dl>
```
***Remarque 1 !!!*** Les rendus générés sont sauvegardés en base de données.
***Remarque 2 !!!*** La génération d'URLs, passant par l'appel d'helpers particuliers, la méthode la plus simple est de fournir un service générant celles-ci.
Aides de vue founies
--------------------
```phpregexp
'view_helpers' => [
'invokables' => [
'rendu' => RenduViewHelper::class,
],
],
```
`$this->rendu($monRendu)` : Affiche un rendu généré avec description à gauche et texte générée à droite.
Configuration
=============
Pas de configuration locale
Tables pour les données du modules
==================================
**N.B.** Le script permettant de créer les tables est fourni dans le fichier [renderer/SQL/001_tables.sql]
1. **unicaen_renderer_macro** : table stockant les macros
| Column | Type | Obligatoire | Unique | Description |
|---|---|---|---|---|
| id | int | true | true | identifiant numerique de la macro |
| code | varchar(256)| true | true | identifiant texte de la macro |
| description | text | false | false | description associée à la macro |
| variable_name | varchar(256)| true | false | variable utilisée par la macro |
| methode_name | varchar(256)| true | false | méthode utilisée par la macro |
2. **unicaen_renderer_template** : table stockant les templates
| Column | Type | Obligatoire | Unique | Description |
|---|---|---|---|---|
| id | int | true | true | identifiant numerique de la macro |
| code | varchar(256)| true | true | identifiant texte de la macro |
| description | text | false | false | description associée à la macro |
| document_type | varchar(256) | true | false | description du type de document généré |
| document_sujet | text | true | false | template de l'élément 'sujet' |
| document_corps | text | true | false | template de l'élément 'corps' |
| document_css | text | false | false | css associé au template |
3. **unicaen_renderer_rendu** : table stockant les rendus générés
| Column | Type | Obligatoire | Unique | Description |
|---|---|---|---|---|
| id | int | true | true | identifiant numerique de la macro |
| template_id | int | false | false | identifiant du template utilisé pour la génération |
| date_generation | timestamp | true | false | date de génération |
| sujet | text | true | false | sujet généré |
| corps | text | true | false | corps généré |
Privilèges associés au module
=============================
**N.B.** Le script permettant de créer les tables est fourni dans le fichier [renderer/SQL/002_privileges.sql]
1 - Macro
```php
const DOCUMENTMACRO_INDEX = 'documentmacro-documentmacro_index';
const DOCUMENTMACRO_AJOUTER = 'documentmacro-documentmacro_ajouter';
const DOCUMENTMACRO_MODIFIER = 'documentmacro-documentmacro_modifier';
const DOCUMENTMACRO_SUPPRIMER = 'documentmacro-documentmacro_supprimer';
```
2 - Template
```php
const DOCUMENTTEMPLATE_INDEX = 'documenttemplate-documenttemplate_index';
const DOCUMENTTEMPLATE_AFFICHER = 'documenttemplate-documenttemplate_afficher';
const DOCUMENTTEMPLATE_AJOUTER = 'documenttemplate-documenttemplate_ajouter';
const DOCUMENTTEMPLATE_MODIFIER = 'documenttemplate-documenttemplate_modifier';
const DOCUMENTTEMPLATE_SUPPRIMER = 'documenttemplate-documenttemplate_supprimer';
```
3 - Rendu
```php
const DOCUMENTCONTENU_INDEX = 'documentcontenu-documentcontenu_index';
const DOCUMENTCONTENU_AFFICHER = 'documentcontenu-documentcontenu_afficher';
const DOCUMENTCONTENU_SUPPRIMER = 'documentcontenu-documentcontenu_supprimer';
```
***Attention !!!*** Penser à donner les privilèges aux rôles adéquats.
Dépendances
===========
Dépendance à **UnicaenPrivilege**
----------------------------------
......
......@@ -16,97 +16,55 @@ class Macro implements ResourceInterface
return self::RESOURCE_ID;
}
/** @var integer */
private $id;
/** @var string */
private $code;
/** @var string */
private $variable;
/** @var string */
private $description;
/** @var string */
private $methode;
private ?int $id = null;
private ?string $code = null;
private ?string $variable = null;
private ?string $description = null;
private ?string $methode = null;
/**
* @return int|null
*/
public function getId(): ?int
{
return $this->id;
}
/**
* @return string
*/
public function getCode(): ?string
{
return $this->code;
}
/**
* @param string|null $code
* @return Macro
*/
public function setCode(?string $code) : Macro
public function setCode(?string $code): void
{
$this->code = $code;
return $this;
}
/**
* @return string
*/
public function getVariable(): ?string
{
return $this->variable;
}
/**
* @param string $variable
* @return Macro
*/
public function setVariable(string $variable) : Macro
public function setVariable(?string $variable): void
{
$this->variable = $variable;
return $this;
}
/**
* @return string
*/
public function getDescription(): ?string
{
return $this->description;
}
/**
* @param string|null $description
* @return Macro
*/
public function setDescription(?string $description) : Macro
public function setDescription(?string $description): void
{
$this->description = $description;
return $this;
}
/**
* @return string
*/
public function getMethode(): ?string
{
return $this->methode;
}
/**
* @param string|null $methode
* @return Macro
*/
public function setMethode(?string $methode) : Macro
public function setMethode(?string $methode): void
{
$this->methode = $methode;
return $this;
}
}
\ No newline at end of file
......@@ -17,94 +17,54 @@ class Rendu implements ResourceInterface
return self::RESOURCE_ID;
}
/** @var int */
private $id;
/** @var Template */
private $template;
/** @var DateTime */
private $date;
/** @var string */
private $sujet;
/** @var string */
private $corps;
private ?int $id = null;
private ?Template $template = null;
private ?DateTime $date = null;
private ?string $sujet = null;
private ?string $corps = null;
/**
* @return int
*/
public function getId(): ?int
{
return $this->id;
}
/**
* @return Template|null
*/
public function getTemplate(): ?Template
{
return $this->template;
}
/**
* @param Template $template
* @return Rendu
*/
public function setTemplate(Template $template): Rendu
public function setTemplate(?Template $template): void
{
$this->template = $template;
return $this;
}
/**
* @return DateTime
*/
public function getDate(): DateTime
{
return $this->date;
}
/**
* @param DateTime $date
* @return Rendu
*/
public function setDate(DateTime $date): Rendu
public function setDate(?DateTime $date): void
{
$this->date = $date;
return $this;
}
/**
* @return string
*/
public function getSujet(): string
{
return $this->sujet;
}
/**
* @param string $sujet
* @return Rendu
*/
public function setSujet(string $sujet): Rendu
public function setSujet(?string $sujet): void
{
$this->sujet = $sujet;
return $this;
}
/**
* @return string
*/
public function getCorps(): string
public function getCorps(): ?string
{
return $this->corps;
}
/**
* @param string $corps
* @return Rendu
*/
public function setCorps(string $corps): Rendu
public function setCorps(?string $corps): void
{
$this->corps = $corps;
return $this;
}
}
\ No newline at end of file
......@@ -25,145 +25,82 @@ class Template implements ResourceInterface
const TYPE_PDF = 'pdf';
const TYPE_MAIL = 'mail';
/** @var integer */
private $id;
/** @var string */
private $code;
/** @var string */
private $description;
/** @var string */
private $type;
/** @var string */
private $sujet;
/** @var string */
private $corps;
/** @var string */
private $css;
private ?int $id = null;
private ?string $code = null;
private ?string $description = null;
private ?string $type = null;
private ?string $sujet = null;
private ?string $corps = null;
private ?string $css = null;
/**
* @return int|null
*/
public function getId(): ?int
{
return $this->id;
}
/**
* @param int $id
* @return Template
*/
public function setId(int $id) : Template
public function setId(int $id): void
{
$this->id = $id;
return $this;
}
/**
* @return string
*/
public function getCode(): ?string
{
return $this->code;
}
/**
* @param string|null $code
* @return Template
*/
public function setCode(?string $code) : Template
public function setCode(?string $code): void
{
$this->code = $code;
return $this;
}
/**
* @return string
*/
public function getDescription(): ?string
{
return $this->description;
}
/**
* @param string|null $description
* @return Template
*/
public function setDescription(?string $description) : Template
public function setDescription(?string $description): void
{
$this->description = $description;
return $this;
}
/**
* @return string
*/
public function getType(): ?string
{
return $this->type;
}
/**
* @param string|null $type
* @return Template
*/
public function setType(?string $type) : Template
public function setType(?string $type): void
{
$this->type = $type;
return $this;
}
/**
* @return string
*/
public function getSujet(): ?string
{
return $this->sujet;
}
/**
* @param string $sujet
* @return Template
*/
public function setSujet(?string $sujet): Template
public function setSujet(?string $sujet): void
{
$this->sujet = $sujet;
return $this;
}
/**
* @return string
*/
public function getCorps(): ?string
{
return $this->corps;
}
/**
* @param string $corps
* @return Template
*/
public function setCorps(?string $corps): Template
public function setCorps(?string $corps): void
{
$this->corps = $corps;
return $this;
}
/**
* @return string|null
*/
public function getCss(): ?string
{
return $this->css;
}
/**
* @param string|null $css
* @return Template
*/
public function setCss(?string $css): Template
public function setCss(?string $css): void
{
$this->css = $css;
return $this;
}
}
\ No newline at end of file
......@@ -2,8 +2,7 @@
namespace UnicaenRenderer\Form\Macro;
use UnicaenApp\Service\EntityManagerAwareTrait;
use UnicaenRenderer\Entity\Db\Macro;
use Doctrine\ORM\EntityManager;
use Laminas\Form\Element\Button;
use Laminas\Form\Element\Hidden;
use Laminas\Form\Element\Text;
......@@ -11,9 +10,38 @@ use Laminas\Form\Element\Textarea;
use Laminas\Form\Form;
use Laminas\InputFilter\Factory;
use Laminas\Validator\Callback;
use UnicaenRenderer\Entity\Db\Macro;
class MacroForm extends Form
{
/**
* @var EntityManager
*/
protected $entityManager;
/**
* Spécifie le gestionnaire d'entité.
*
* @param EntityManager $entityManager
* @return self
*/
public function setEntityManager(EntityManager $entityManager)
{
$this->entityManager = $entityManager;
class MacroForm extends Form {
use EntityManagerAwareTrait;
return $this;
}
/**
* Retourne le gestionnaire d'entité.
*
* @return EntityManager
*/
public function getEntityManager()
{
return $this->entityManager;
}
public function init()
{
......@@ -109,8 +137,11 @@ class MacroForm extends Form {
]));
}
public function setOldCode($value){
public function setOldCode($value)
{
$this->get('old-code')->setValue($value);
}
};
}
;
......@@ -2,28 +2,17 @@
namespace UnicaenRenderer\Form\Macro;
trait MacroFormAwareTrait {
/** @var MacroForm */
private $macroForm;
trait MacroFormAwareTrait
{
private MacroForm $macroForm;
/**
* @return MacroForm
*/
public function getMacroForm()
public function getMacroForm(): MacroForm
{
return $this->macroForm;
}
/**
* @param MacroForm $macroForm
* @return MacroForm
*/
public function setMacroForm(MacroForm $macroForm)
public function setMacroForm(MacroForm $macroForm): void
{
$this->macroForm = $macroForm;
return $this->macroForm;
}
}
\ No newline at end of file
......@@ -4,14 +4,18 @@ namespace UnicaenRenderer\Form\Macro;
use Doctrine\ORM\EntityManager;
use Interop\Container\ContainerInterface;
use Psr\Container\ContainerExceptionInterface;
use Psr\Container\NotFoundExceptionInterface;
class MacroFormFactory {
/**
* @param ContainerInterface $container
* @return MacroForm
* @throws ContainerExceptionInterface
* @throws NotFoundExceptionInterface
*/
public function __invoke(ContainerInterface $container)
public function __invoke(ContainerInterface $container) : MacroForm
{
/**
* @var EntityManager $entityManager
......
......@@ -5,8 +5,8 @@ namespace UnicaenRenderer\Form\Macro;
use UnicaenRenderer\Entity\Db\Macro;
use Laminas\Hydrator\HydratorInterface;
class MacroHydrator implements HydratorInterface {
class MacroHydrator implements HydratorInterface
{
/**
* @param Macro $object
* @return array
......@@ -27,12 +27,12 @@ class MacroHydrator implements HydratorInterface {
* @param Macro $object
* @return Macro
*/
public function hydrate(array $data, $object)
public function hydrate(array $data, $object): object
{
$code = (isset($data['code']) AND trim($data['code']) !== null)?trim($data['code']):null;
$variable = (isset($data['variable']) AND trim($data['variable']) !== null)?trim($data['variable']):null;
$methode = (isset($data['methode']) AND trim($data['methode']) !== null)?trim($data['methode']):null;
$description = (isset($data['description']) AND trim($data['description']) !== null)?trim($data['description']):null;
$code = (isset($data['code']) and trim($data['code']) !== null) ? trim($data['code']) : null;
$variable = (isset($data['variable']) and trim($data['variable']) !== null) ? trim($data['variable']) : null;
$methode = (isset($data['methode']) and trim($data['methode']) !== null) ? trim($data['methode']) : null;
$description = (isset($data['description']) and trim($data['description']) !== null) ? trim($data['description']) : null;
$object->setCode($code);
$object->setVariable($variable);
......
......@@ -4,13 +4,9 @@ namespace UnicaenRenderer\Form\Macro;
use Interop\Container\ContainerInterface;
class MacroHydratorFactory {
/**
* @param ContainerInterface $container
* @return MacroHydrator
*/
public function __invoke(ContainerInterface $container)
class MacroHydratorFactory
{
public function __invoke(ContainerInterface $container): MacroHydrator
{
$hydrator = new MacroHydrator();
return $hydrator;
......
......@@ -2,10 +2,7 @@
namespace UnicaenRenderer\Form\Template;
use UnicaenApp\Service\EntityManagerAwareTrait;
use UnicaenRenderer\Entity\Db\Template;
use UnicaenRenderer\Entity\Db\Macro;
use UnicaenRenderer\Service\Macro\MacroServiceAwareTrait;
use Doctrine\ORM\EntityManager;
use Laminas\Form\Element\Button;
use Laminas\Form\Element\Hidden;
use Laminas\Form\Element\Select;
......@@ -13,13 +10,43 @@ use Laminas\Form\Element\Text;
use Laminas\Form\Form;
use Laminas\InputFilter\Factory;
use Laminas\Validator\Callback;
use UnicaenRenderer\Entity\Db\Template;
use UnicaenRenderer\Service\Macro\MacroServiceAwareTrait;
class TemplateForm extends Form {
use EntityManagerAwareTrait;
class TemplateForm extends Form
{
use MacroServiceAwareTrait;
/**
* @var EntityManager
*/
protected $entityManager;
/**
* Spécifie le gestionnaire d'entité.
*
* @param EntityManager $entityManager
* @return self
*/
public function setEntityManager(EntityManager $entityManager)
{
$this->entityManager = $entityManager;
return $this;
}
public function getMacros() {
/**
* Retourne le gestionnaire d'entité.
*
* @return EntityManager
*/
public function getEntityManager()
{
return $this->entityManager;
}
public function getMacros() : string
{
return $this->getMacroService()->generateJSON();
}
......@@ -160,7 +187,8 @@ class TemplateForm extends Form {
]));
}
public function setOldCode($value){
public function setOldCode($value)
{
$this->get('old-code')->setValue($value);
}
}
\ No newline at end of file
......@@ -2,27 +2,19 @@
namespace UnicaenRenderer\Form\Template;
trait TemplateFormAwareTrait {
trait TemplateFormAwareTrait
{
/** @var TemplateForm */
private $templateForm;
private TemplateForm $templateForm;
/**
* @return TemplateForm
*/
public function getTemplateForm(): TemplateForm
{
return $this->templateForm;
}
/**
* @param TemplateForm $templateForm
* @return TemplateForm
*/
public function setTemplateForm(TemplateForm $templateForm)
public function setTemplateForm(TemplateForm $templateForm): void
{
$this->templateForm = $templateForm;
return $this->templateForm;
}
}
\ 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