<?php
/*
  ----------------------------------------------------------------------
  AlternC - Web Hosting System
  Copyright (C) 2000-2012 by the AlternC Development Team.
  https://alternc.org/
  ----------------------------------------------------------------------
  LICENSE

  This program is free software; you can redistribute it and/or
  modify it under the terms of the GNU General Public License (GPL)
  as published by the Free Software Foundation; either version 2
  of the License, or (at your option) any later version.

  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.

  To read the license please visit http://www.gnu.org/copyleft/gpl.html
  ----------------------------------------------------------------------
  Purpose of file: Manage hook system.
  ----------------------------------------------------------------------
*/

/**
 * This class manage hooks.
 * 
 * @copyright    AlternC-Team 2002-2005 http://alternc.org/
 */
class m_hooks {

  /*---------------------------------------------------------------------------*/
  /** Constructor
  * hooks([$mid]) Constructeur de la classe hooks, ne fait rien pour le moment
  */
  function m_hooks() {
  }

  /** 
    * invoke() permet de lancer une fonction donné en parametre dans toute les classes
    * connues de alternc, avec les parametres donnés.
    * $hname nom de la fonction "hooks" que l'on cherche dans les classes
    * $hparam tableau contenant les parametres
    * $hclass tableau contenant les classes spécifique qu'on veux appeler (si on veux pas TOUTE les appeler)
  */
  function invoke($hname, $hparam = array(), $hclass = null) {

    // Si $hclass est defini, on veut appeler le hooks QUE pour UNE 
    // classe et pas pour toute.
    if (is_null($hclass)) {
      global $classes;
    } else {
      $classes = $hclass;
    }

    // On parcourt les classes, si la fonction qu'on cherche
    // existe on l'execute et on rajoute ce qu'elle a retourné dans
    // un tableau
    $val = array();
    foreach ($classes as $c) {
      global $$c;
      if ( method_exists($$c, $hname) ) {
        //$val[$$c]=call_user_func_array(array($$c,$hname), $hparam);
        $val[$c]=call_user_func_array(array($$c,$hname), $hparam);
      }
    }

    // On retourne le tout
    return $val;
  }

} /* Class hooks */