mercredi, 30 mai 2012 09:50

Nouvel évènement onAfterSaveEvent

De la même manière que onBeforeSaveEvent, l'évènement onAfterSaveEvent permet "d'écouter" AllEvents et de réagir en fonction.

onAfterSaveEvent est exécuté par AllEvents après la sauvegarde d'un évènement dans la table xxxx_allevents_events (table des évènements).   Dans le cas d'un nouvel évènement, le ID de l'évènement est seulement connu après la sauvegarde.   Si vous avez besoin de cet ID, c'est donc onAfterSaveEvent qu'il faut écouter.

Contrairement à onBeforeSaveEvent, vous n'avez pas la possibilité d'interdire la sauvegarde puisque cette dernière a déjà eu lieue.

Publié dans Développement

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