Fonctions

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.

Contenu

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).

Liste des catégories

source

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.

filter

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;
	},
];

table-format

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 Dictcontenant 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',
          ]
      ]);
	},
];

block

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>";
  },
];

middleware

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;
	},
];