Bontiv-Sourceer source code viewer
Root | Help
./PhpMyCMS/inc/alert.php
<?php

/**
 * AlertManager
 *
 * @version $Id$
 * @copyright 2009
 */


/** Documentation technique
*
* ------------------
* Oouverture de l'objet :
* Vous pouvez récupérer l'objet d'alert dans Alert::Open().
* Exemple : $Objet_Alert = Alert::Open()
* après vous pouvez vous amuser a faire toutes les alerts que vous voulez.
*
* ------------------
* Capturer un Event
* Objet: Alert
* Method: $id = CaptureEvent($function, $action = ALERT_ALL, $module = ALERT_ALL)
*
* Ouvrez un objet alert pour pouvoir enregister l'event. Ensuite appellez
* la méthode CaptureEvent selon la syntaxe ci-dessus.
*
* ---- Liste des paramètres :
* --$function : non de la fonction à executer quand l'alert est déclanché.
* Peux aussi être un script PHP sous la forme d'une chaine de caractère.
* Cette fonction doit retourner true pour autoriser l'environnement à faire
* l'action qui a été demandé, false pour empêcher l'action. Cette fonction est
* appelé avec trois argument dans un ordre précis : $param qui est un tableau des fonctions qui ont
* été demandés à être executé avec l'alert, $mod qui est le nom du module visé
* et $action qui est l'action capturé.
*
* --$action (défaut: ALERT_ALL) : Action que l'on veut capturer. On peux aussi mettre la constante
* ALERT_ALL pour capturer tous les alertes d'un module en particulier.
*
* --$module (défaut: ALERT_ALL) : Module que l'on surveiller. On peux mettre
* ALERT_ALL pour surveiller tous les modules.
*
* ---- Valeur de retour :
* Si la capture a été enregistré avec succés, alors la méthode renvoit
* l'identifiant de l'enregistrement.
*
* -----------------
* Envoyer une alerte
* Objet: Alert
* Method: $result = SendAlert($module, $action, $parameter)
*
* ---- Liste des paramètres :
* --$module : nom du module que l'on veut déclancher.
*
* --$action : action que l'on veux executer.
*
* --parameter : Tableau contenant les paramètres à utiliser pour executer
* l'action du module spécifié.
*
* ---- Valeur de retour
* retourne un booléen qui dit si l'action est autorisé ou non par tous les
* modules qui surveiller cette action.
*
* -----------------
* Déboguer l'environnement d'alert.
* Objet: Alert
* Method: Debug()
*
* Permet d'afficher la liste de tous les events capturés ainsi que leurs
* configuration.
*
* -----------------
* Executer l'action d'un module en annançant l'alert
* Function ExeModFun($module, $action, $parameter)
*
* ---- Liste des paramètres :
* --$module : Module que l'on souhaite executer
*
* --$action : Action du module que l'on veux faire
*
* --$parameter (défaut: NULL) : Soit une chaine de caractère, soit un tableau. Contient le(s)
* arguments à utiliser pour executer l'action du module.
* */

define('ALERT_ALL', '*');

class
Alert {
    private
$alert = array();
    static private
$env;
    static private
$EnvID;

static public function
Open() {
    if (!
self::$EnvID) {
       
self::$EnvID = new self;
    }
    return
self::$EnvID;
}

   
/*Vérifie la validité de la création d'une session*/
   
function __construct(){
       
self::$env++;
        if (
self::$env > 1) {
           
trigger_error('Deux environnements alert ont été executés', E_USER_WARNING);
        } else {
           
self::$EnvID = $this;
        }
    }

   
/*Permet de capturer un event
        $function : code PHP à executer
        $module : module à surveiller
        $action : action à surveiller

        retourne un identifiant d'alert ou false en cas d'echec*/
   
public function CaptureEvent($function, $action = ALERT_ALL, $module = ALERT_ALL){
        if (!
function_exists($function) && is_string($function)) {
           
$function = create_function('$param, $mod, $action', $function);
        } elseif (!
function_exists($function)) {
           
trigger_error('Alert(CaptureEvent): Impossible d\'enregistrer la fonction. Fonction invalide.', E_USER_ERROR);
            die;
        }

       
$alert = array(
           
'function'     => $function,
           
'action'    => $action,
           
'module'    => $module
       
);
       
array_push($this->alert, $alert);
        return
array_search($alert, $this->alert);
    }

    public function
Debug() {
       
var_dump($this->alert);
    }

   
/*Fonction utilisateur pour générer une alerte.
        $module : module concerné par l'alerte
        $action : action concerné par l'alerte

        Aucun retour pour cette fonction.*/
   
public function SendAlert($module, $action, $parameter = array()){
       
$list = $this->SendAlert_a($module, $action, $parameter);
       
$return = true;
        foreach(
$list as $element){
           
$return = $element && $return;
            if (!
$return)
                break;
        }
        return
$return;
    }

/////////////// Alert par tableau /////////////////
    /*Fonction privé qui s'occupe d'executer les actions demandés par l'objet*/
   
private function ExeAlert($real, $module, $action, $parameter){
       
$return = array();
        foreach(
$this->alert as $alert){
            if (
$alert['action'] == $action && $alert['module'] == $module) {
               
$return[] = $alert['function']($parameter, $real[0], $real[1]);
            }
        }
        return
$return;
    }

   
/*Fonction utilisateur pour générer une alerte.
        $module : module concerné par l'alerte
        $action : action concerné par l'alerte

        Aucun retour pour cette fonction.*/
   
public function SendAlert_a($module, $action, $parameter){
       
$return = array();
       
$real = array(0 => $module, 1 => $action);
       
$return = array_merge($return, $this->ExeAlert($real, ALERT_ALL, ALERT_ALL, $parameter));
       
$return = array_merge($return, $this->ExeAlert($real, ALERT_ALL, $action, $parameter));
       
$return = array_merge($return, $this->ExeAlert($real, $module, ALERT_ALL, $parameter));
       
$return = array_merge($return, $this->ExeAlert($real, $module, $action, $parameter));
        return
$return;
    }
}

function
ExeModFun($module, $action = 'index', $parameter = array()){
    if (!
is_array($parameter))
       
$parameter = array($parameter);
   
$alert = Alert::Open();
    if (!
method_exists($module, $action)
    &&
$alert->SendAlert('alert', 'ExeMod_Error', array(
       
'module' => $module,
       
'action' => $action,
       
'param' => $parameter)
    )) {
        return
false;
    }
    if (
$alert->SendAlert($module, $action, $parameter)){
       
$retour = call_user_func_array(array($module, $action), $parameter);
        return (
$retour == NULL)?(TRUE):($retour);
    }
    return
FALSE;
}
?>
Presented with Bontiv-Sourceer