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

Merge branch 'master' into 'laminas_migration'

# Conflicts:
#   Module.php
parents 854b5001 2054c9ff
Branches
Tags
1 merge request!1Laminas migration
Pipeline #15278 passed
......@@ -27,26 +27,7 @@ return [
],
],
'navigation' => [
'default' => [
'home' => [
'pages' => [
'administration' => [
'pages' => [
'contenu' => [
'label' => 'Contenu',
'route' => 'contenu',
'resource' => PrivilegeController::getResourceId(IndexController::class, 'index'),
'order' => 10001,
'pages' => [
],
],
],
],
],
],
],
],
'router' => [
'routes' => [
......
......@@ -63,16 +63,13 @@ return [
'home' => [
'pages' => [
'administration' => [
'pages' => [
'contenu' => [
'pages' => [
'macro' => [
'label' => 'Macro',
'label' => 'Macros',
'route' => 'contenu/macro',
'resource' => PrivilegeController::getResourceId(MacroController::class, 'index'),
'order' => 10001,
],
],
'order' => 10100,
'icon' => 'fas fa-angle-right',
],
],
],
......
......@@ -52,16 +52,13 @@ return [
'home' => [
'pages' => [
'administration' => [
'pages' => [
'contenu' => [
'pages' => [
'rendu' => [
'label' => 'Contenu',
'label' => 'Contenus',
'route' => 'contenu/rendu',
'resource' => PrivilegeController::getResourceId(RenduController::class, 'index'),
'order' => 10003,
],
],
'order' => 10300,
'icon' => 'fas fa-angle-right',
],
],
],
......
......@@ -71,16 +71,13 @@ return [
'home' => [
'pages' => [
'administration' => [
'pages' => [
'contenu' => [
'pages' => [
'template' => [
'label' => 'Template',
'label' => 'Templates',
'route' => 'contenu/template',
'resource' => PrivilegeController::getResourceId(TemplateController::class, 'index'),
'order' => 10001,
],
],
'order' => 10200,
'icon' => 'fas fa-angle-right',
],
],
],
......
......@@ -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' => [
......@@ -27,6 +31,30 @@ 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,
],
],
],
],
],
],
],
'view_manager' => [
'template_path_stack' => [
__DIR__ . '/../view',
......
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**
----------------------------------
1. Dans **vendor/unicaen/renderer/config/merged/index.config.php**, **vendor/unicaen/renderer/config/merged/macro.config.php**, **vendor/unicaen/renderer/config/merged/rendu.config.php**, **vendor/unicaen/renderer/config/merged/template.config.php** : `UnicaenPrivilege\Guard\PrivilegeController` pour les gardes liées aux actions.
Peut être directement remplacer par l'equivalent fournit par `unicaen/auth`.
1. Dans **vendor/unicaen/renderer/src/UnicaenRenderer/Provider/Privilege/DocumentcontenuPrivileges.php**, **vendor/unicaen/renderer/src/UnicaenRenderer/Provider/Privilege/DocumentmacroPrivileges.php**, **vendor/unicaen/renderer/src/UnicaenRenderer/Provider/Privilege/DocumenttemplatePrivileges.php** : `UnicaenPrivilege\Provider\Privilege\Privileges` classe mère des privilèges du module.
Peut être directement remplacer par l'equivalent fournit par `unicaen/auth`.
\ No newline at end of file
......@@ -176,8 +176,9 @@ class MacroService {
{
$code = str_replace('VAR[','', $code);
$code = str_replace(']','', $code);
$parameter = explode("|",$code)[1];
$code = explode("|",$code)[0];
$exploded = explode("|",$code);
$parameter = ($exploded[1])??null;
$code = ($exploded[0])??null;
$macro = $this->getMacroByCode($code);
if ($macro !== null) {
......
......@@ -6,8 +6,10 @@ use DateTime;
use Doctrine\ORM\NonUniqueResultException;
use Doctrine\ORM\ORMException;
use Doctrine\ORM\QueryBuilder;
use Mpdf\MpdfException;
use UnicaenApp\Exception\RuntimeException;
use UnicaenApp\Service\EntityManagerAwareTrait;
use UnicaenPdf\Exporter\PdfExporter;
use UnicaenRenderer\Entity\Db\Rendu;
use UnicaenRenderer\Entity\Db\Template;
use UnicaenRenderer\Service\Template\TemplateServiceAwareTrait;
......@@ -17,6 +19,8 @@ class RenduService {
use EntityManagerAwareTrait;
use TemplateServiceAwareTrait;
public $renderer;
/** Gestion des entités *******************************************************************************************/
/**
......@@ -155,4 +159,25 @@ class RenduService {
$rendu->setCorps($this->getTemplateService()->replaceMacros($rendu->getCorps(), $variables));
return $rendu;
}
/**
* TODO >>> Dans unicaenPDF
* @param string $sujet
* @param string $corps
* @return string
*/
public function generate(string $sujet, string $corps) : string
{
try {
$exporter = new PdfExporter();
$exporter->setRenderer($this->renderer);
$exporter->getMpdf()->SetTitle($sujet);
$exporter->setHeaderScript('/unicaen-renderer/pdf/header');
$exporter->setFooterScript('/unicaen-renderer/pdf/footer');
$exporter->addBodyHtml($corps);
return $exporter->export($sujet);
} catch (MpdfException $e) {
throw new RuntimeException("Un problème est survenue lors de la génértion du PDF", null, $e);
}
}
}
......@@ -5,6 +5,7 @@ namespace UnicaenRenderer\Service\Rendu;
use Doctrine\ORM\EntityManager;
use Interop\Container\ContainerInterface;
use UnicaenRenderer\Service\Template\TemplateService;
use Zend\View\Renderer\PhpRenderer;
class RenduServiceFactory {
......@@ -24,6 +25,11 @@ class RenduServiceFactory {
$service = new RenduService();
$service->setEntityManager($entityManager);
$service->setTemplateService($templateService);
/* @var PhpRenderer $renderer */
$renderer = $container->get('ViewRenderer');
$service->renderer = $renderer;
return $service;
}
}
\ No newline at end of file
<table style="border: none">
<tr>
<td style="border: none">
Généré par EMC2 le <?php echo (new DateTime())->format('d/m/Y à H:i'); ?>
</td>
<td style="border: none">
{PAGENO}/{nbpg}
</td>
<td style="border: none">
<?php echo $denomination; ?>
</td>
</tr>
</table>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment