Aujourd'hui nous allons voir la réalisation d'un petit plugin, que j'ai développé dans mon cadre professionnel, partant du principe que, avec mes soucis de santé et de mémorisation, j'oubliais régulièrement une action "non-joomla" après ajout d'un l'article dans joomla content.
Le besoin métier
En effet, à chaque ajout ou modification d'une fiche qui correspond à certains critères professionnels, je dois en avertir plusieurs personnes afin que des mises à jour soit effectués dans d'autres outils logiciels.
Le fonctionnement
Afin de mener à bien cette action, je me suis basé sur les actions de l'API de Joomla, et qui propose la possibilité de mettre dans une queue de messages à afficher à l'utilisateur, son propre message personnalisé.
Comme je veux afficher ce message uniquement au moment où l'utilisateur clique sur le bouton Enregistrer, cette action répond à un événement de utilisateur. J'utilise donc un plugin qui va répondre à un événement système point cet événement est lancé après chaque enregistrement d'une fiche. C'est ainsi que j'ai utilisé événement onContenteAfterSave.
Le paramètre du plugin
Lorsque l'événement est effectué, Joomla va renvoyer un message accompagné textuel d'une image (du HTML tout simple en fait). Cette image est figée dans le code, en revanche le message est personnalisable dans la console d'administration du plugin.
Un test particulier dans le code du plugin
Un plugin étant chargé que l'on soit côté Front Office ou back office, il fallait que je puisse afficher ce message uniquement si cet enregistrement était lancé à partir de la console d'administration de Joomla, en d'autres termes l'administrator.
C'est la raison pour laquelle vous pourrez trouver en ligne 14, un test qui permet de savoir si je lance mon exception système avec le raiseNotice ou pas.
Vous remarquerez que lorsque l'exception est lancée, j'intègre au message d'erreur une petite image, dont l'URL est récupérée de la console d'administration.
alertemetier.php
<?php
defined('_JEXEC') or die('Access deny');
use Joomla\CMS\Factory;
class plgContentSimat extends JPlugin
{
public function onContentAfterSave($context, &$article, $isNew)
{
$app = Factory::getApplication();
$uri = substr(JURI::base(),0,-14).'plugins/content/simat/simat.png';
//$uri = JURI::getPath().'plugins/content/simat/simat.png';
$app = JFactory::getApplication();
if ($app->isAdmin()) {
JError::raiseNotice( 100,'<img src="'.$uri.'">'.$this->params->get('messageSimat'));
}
}
}
alertemetier.xml
<?xml version="1.0" encoding="utf-8"?>
<extension version="1.0" type="plugin" group="Content">
<name>Alerte métier</name>
<author>Sebastien LHUILLIER</author>
<creationDate>Novembre 2023</creationDate>
<copyright>Sébastien LHUILLIER</copyright>
<license>GNU General Public License version 2 or later; see LICENSE.txt</license>
<authorEmail>Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.</authorEmail>
<authorUrl>www.sebastien-lhuillier.com</authorUrl>
<version>1.0</version>
<description>Ce plugin rappelle à l'opérateur de prévenir la cellule prochaine de la chaine hiérarchique de chacune des mises à jour</description>
<files>
<filename plugin="alertemetier">alertemetier.php</filename>
<filename>alertemetier.xml</filename>
</files>
<config>
<fields name="params">
<fieldset name="basic">
<field name="messageAlertmetier" type="textarea" default="default" label="Message a afficher" description="" rows="10" cols="5" />
</fieldset>
</fields>
</config>
</extension>