title: Fonctions
icon: code
Table des matières
Le dossier des fonctions doit contenir toutes les fonctions pouvant être utilisées par le plugin.
Le programme ne sélectionne que les fichiers présents dans le dossier functions
du dossier de personnalisation, les sous-dossiers ne sont pas pris en compte.
Un fichier de fonction se construit sur le modèle suivant :
<?php
require_once SAFER_PLUGIN_PATH . '/src/helpers/php/dict.php';
return [
'categories' => ['category'],
'description' => 'Function description',
'title' => 'Function title',
'id' => 'function_id',
'run' => function (Dict $arguments): bool {
// La fonction à exécuter
},
];
Ce fichier retourne plusieurs propriétés :
Nom | Type | Description |
---|---|---|
categories | string[] |
Liste des catégories auxquelles la fonction peut répondre. Liste des catégories : Liste des catégories. |
description | string |
Description de fonction. Elle sera affichée à la suite du titre dans le sélecteur de fonction. |
title | string |
Titre de la fonction. Il sera affichée dans le sélecteur de fonction. |
id | string |
Identifiant unique de la fonction. Doit être composé uniquement de minuscules et de _ . |
run | function |
Fonction qui sera exécutée. Cette fonction prend en argument un objet Dict contenant le contexte de la page (paramètres de la requête). |
La catégorie source
regroupe les fonctions permettant la récupération de données. Ces fonctions sont utilisées pour récupérer des informations depuis une source externe (API, base de données, etc.) et les formater pour les afficher dans le plugin.
La fonction doit retourner un tableau tel que :
[
['header1', 'header2', 'header3'],
['value1', 'value2', 'value3'],
['value4', 'value5', 'value6'],
]
Ces fonctions peuvent être utiles pour exécuter des requêtes SQL dynamiques, par exemple :
<?php
require_once SAFER_PLUGIN_PATH . '/src/helpers/php/dict.php';
return [
'categories' => ['source'],
'description' => 'Récupère les données de la table `operation`.',
'title' => 'Récupérer les opérations',
'id' => 'get_operations',
'run' => function (Dict $arguments): bool {
$startDate = $arguments->startDate;
$endDate = $arguments->endDate;
$query = new QuerySelect():
$query
->setFrom('operation')
->setWhere(
'date_signature_acte BETWEEN :startDate AND :endDate'
)
->setParameters([
'startDate' => $startDate,
'endDate' => $endDate,
]);
$operations = $query->fetchAll();
// Permet de transformer les données du tableau associatif
// en tableau compatible avec le plugin
return [
array_keys($operations[0]),
array_map(function ($operation) {
return array_values($operation);
}, $operations),
];
},
];
Les détails de la classe QuerySelect
sont disponibles dans la documentation de la classe QuerySelect.
La catégorie filter
regroupe les fonctions permettant de filtrer les données. Ces fonctions prennent en arguments une ligne et renvoi true
si la ligne correspond au filtre, false
sinon.
Arguments supplémentaires :
Nom | Type | Description |
---|---|---|
row | Dict |
Contient la ligne sous forme de tableau associatif |
... | mixed[] |
Autres paramètres fournis en options dans la fenêtre de d'ajout d'un filtre. |
Exemple :
<?php
require_once SAFER_PLUGIN_PATH . '/src/helpers/php/dict.php';
return [
'categories' => ['filter'],
'description' => 'Filtre les opérations par type.',
'title' => 'Filtrer par type',
'id' => 'filter_by_type',
'run' => function (Dict $arguments): bool {
$row = $arguments->row;
// Défini dans les options de la fenêtre de filtre
$type = $arguments->type;
return $row['type'] === $type;
},
];
La catégorie table-format
regroupe les fonctions permettant de formater les données d'un tableau. Ces fonctions prennent en argument une ligne sous forme de tableau associatif et renvoient un objet Dict
contenant les modifications.
Arguments supplémentaires :
Nom | Type | Description |
---|---|---|
row | Dict |
Contient la ligne sous forme de tableau associatif |
Valeur de retour :
Le ?
signifie que la clé est optionnelle et {{nom}}
signifie que la clé ou la valeur est dynamique.
Dict::cast([
'cells?' => [
'{{header_name}}?' => [
'content?' => '{{new_value}}', // Contenu de la cellule
'attributes?' => [
// Attributs HTML de la cellule
'{{attribute_name}}' => '{{attribute_value}}'
]
]
],
'attributes?' => [
// Attributs HTML de la ligne
'{{attribute_name}}' => '{{attribute_value}}'
]
]);
Exemple :
<?php
require_once SAFER_PLUGIN_PATH . '/src/helpers/php/dict.php';
return [
'categories' => ['table-format'],
'description' => 'Formate les opérations pour l\'affichage.',
'title' => 'Formater les opérations',
'id' => 'format_operations',
'run' => function (Dict $arguments): bool {
$row = $arguments->row;
return Dict::cast([
'cells' => [
'header1' => [
'content' => $row['header1'],
'attributes' => [
'class' => 'cell-secondary',
]
],
'header2' => $row['header2'],
],
'attributes' => [
'class' => 'table-primary',
]
]);
},
];
La catégorie block
regroupe les fonctions permettant de créer des blocs de contenu ensuite utilisé dans le bloc function.
Il est possible d'utiliser des librairies CSS et JS pour personnaliser le contenu. Par défaut, les librairies suivantes sont disponibles : ici (disponibilité : admin si isPreview
vaut true
et front sinon).
Arguments supplémentaires :
Nom | Type | Description |
---|---|---|
isPreview | bool |
true si la fonction est exécutée dans l'éditeur, false si elle est exécutée dans la page finale. Il est important d'utiliser cette propriété pour éviter de trop nombreuses requêtes, opérations longues, ... lors de la modification d'une page. |
Exemple :
<?php
require_once SAFER_PLUGIN_PATH . '/src/helpers/php/dict.php';
return [
'categories' => ['block'],
'description' => 'Renvoi un bloc personnalisé.',
'title' => 'Bloc personnalisé',
'id' => 'create_block',
'run' => function (Dict $arguments): bool {
$isPreview = $arguments->isPreview;
if ($isPreview) {
// Exemple de donnée à afficher
$count = 329;
} else {
// Donnée réelle
$query = new QuerySelect();
$query
->setColumn('COUNT(id)', 'count')
->setFrom('operation')
->setGroupBy('ref_dept')
->setOrderBy('ref_dept');
$count = $query->fetchAll()[0]['count'];
}
return "<div class='block'>Nombre d'opérations : $count</div>";
},
];
La catégorie middleware
regroupe les fonctions permettant de modifier les données avant leur affichage. Ces fonctions prennent en argument un tableau de données et renvoient un tableau modifié.
Arguments supplémentaires :
Nom | Type | Description |
---|---|---|
data | array |
Tableau de données à modifier |
Exemple :
<?php
require_once SAFER_PLUGIN_PATH . '/src/helpers/php/dict.php';
return [
'categories' => ['middleware'],
'description' => 'Ajoute un champ personnalisé aux données.',
'title' => 'Ajouter un champ',
'id' => 'add_field',
'run' => function (Dict $arguments): bool {
$data = $arguments->data;
$data[0][] = 'new_field';
foreach (array_slice($data, 1) as $key => $item) {
$data[$key][] = 'new_value';
}
return $data;
},
];