AllEvents - A Joomla Component by Christophe Avonture - AllEvents

AllEvents va progressivement implémenter ses propres évènements afin de permettre à des développeurs de créer des plug-ins pour y répondre.   Ainsi, l'évènement onBeforeSaveEvent est appelé par la table de classe AllEvents_Events, fonction store() et va informer les plug-ins à l'écoute qu'un évènement est sur le point d'être sauvé.

Les plug-ins pourront répondre en exécutant leur propre code pour retourner deux valeurs :

  1. une valeur booléenne true/false pour autoriser ou non la sauvegarde
  2. une valeur texte qui sera affichée par AllEvents dès lors que la sauvegarde est interdite

Ci-dessous un code minimaliste d'un plug-in pour gérer onBeforeSaveEvent :

<?php
// no direct access
defined( '_JEXEC' ) or die( 'Restricted access' );
jimport( 'joomla.plugin.plugin' );
if (!JComponentHelper::isEnabled('com_allevents', true)) return JError::raiseError(JText::_('AllEvents_Error'), JText::_('SE_COMP_NOT_INSTALLED'));
require_once (dirname(JApplicationHelper::getPath('front','com_allevents')).DS.'class'.DS.'superclass'.DS.'alleventsplugin.php');
class plgAllEventsBeforeSaveSample extends AEPlugin {
   
    // Nom du plugin.  Il sera utilisé entre autre lors de l'affichage de message d'erreur.    
    private $_me = 'AllEvents - onBeforeSaveEventSample';
   /**
    * Constructeur du plugin
    * 
    * @param $subject
    * @param $params        
    * 
    * @return unknown_type
    */
   function plgAllEventsBeforeSaveSample (&$subject, $params) {
       
      $this->_pluginPath = JPATH_SITE.DS.'plugins'.DS.'allevents'.DS;
      
      parent::__construct($subject, $params, get_class($this), '');
      
      return;
   } // function plgAllEventsBeforeSaveSample (&$subject, $params)         
   
   /*
    * Interception de l'évènement onBeforeSaveEvent.  Cet évènement est généré par la classe de table AllEvents_Events et par sa méthode store()
    *  
    * @param $event    Objet de type évènement.   Utiliser un "echo '<pre>'.print_r($event,true).'</pre>';" si vous désirez voir le contenu de l'objet      
    * @param $params   Paramètres éventuellement transmis à la fonction          
    * 
    * @return array('return', 'msg')
    *     return est une valeur de type True/False.    False interdira à AllEvents de sauver l'évènement 
    *     msg    est une chaîne de caractère.  msg sera affiché par AllEvents si return=false afin d'informer l'utilisateur de la raison pour laquelle 
    *            l'évènement ne peut pas être sauvé 
    */   
   function onBeforeSaveEvent(&$event, $params) {
       
      $bReturn = false;
      $msg = 'Vous ne pouvez pas...';
      return array('return'=>$bReturn, 'msg'=>$msg);
   } // function onBeforeSaveEvent (&$event, $params)  
   
} // class plgAllEventsBeforeSaveSample extends AEPlugin
?>

Explications :

Ligne 5 : Vérification que AllEvents est bien installé et publié sur le site.   Ceci afin de garantir que le site Joomla ne vas pas "planter" si on installe le plug-in alors même que AllEvents n'est pas présent.

Ligne 6 : Inclusion de la classe de gestion des plugins de AllEvents (classe AEPlugin).

Ligne 10 : Nom du plug-in.  Ce nom est utilisé par la classe AEPlugin.

Lignes 19 à 26 : Constructeur du plug-in.  Mettez-y le code d'initialisation de vos variables, de contrôle de présence de certains fichiers, etc.

Ligne 39 : Nom de la fonction = nom de l'évènement traité.   Deux paramètres sont transmis par AllEvents : une variable objet $event qui reprend l'évènement étant sur le point d'être sauvé et $param qui est une variable optionnelle.

Lignes 41 et 42 : initialisation des variables retours.    Votre code doit complété $bReturn soit par True si vous autorisez la sauvegarde soit par False si vous souhaitez que AllEvents l'interdise.   Et, dans ce dernier cas, la variable $msg doit reprendre un texte qui sera affiché pour informer l'utilisateur pourquoi l'évènement n'a pas été sauvé.    Les lignes 41 et 42 proposées ici sont évidemment à titre purement indicatif.

Ligne 43 : retour des deux variables au code appelant (il s'agit p.ex. de la fonction store() de la table de classe AllEvents_Events; mais pas forcément).

Le plug-in AllEvents - OnBeforeSaveEventSample est intégré dans la package Premium.

Publié dans Développement