diff --git a/htdocs/admin/triggers.php b/htdocs/admin/triggers.php index 89502da12db..ba0cc449a50 100644 --- a/htdocs/admin/triggers.php +++ b/htdocs/admin/triggers.php @@ -28,81 +28,10 @@ include_once(DOL_DOCUMENT_ROOT ."/interfaces.class.php"); if (!$user->admin) accessforbidden(); - - -if ($_GET["action"] == 'set' && $user->admin) -{ - Activate($_GET["value"]); - - Header("Location: modules.php?spe=".$_GET["spe"]); - exit; -} - -if ($_GET["action"] == 'reset' && $user->admin) -{ - UnActivate($_GET["value"]); - - Header("Location: modules.php?spe=".$_GET["spe"]); - exit; -} - - -/** - * \brief Active un module - * \param value Nom du module a activer +/* + * Action */ -function Activate($value) -{ - global $db, $modules; - $modName = $value; - - // Activation du module - if ($modName) - { - $file = $modName . ".class.php"; - include_once("../includes/modules/".$file); - $objMod = new $modName($db); - $objMod->init(); - } - - // Activation des modules dont le module depend - for ($i = 0; $i < sizeof($objMod->depends); $i++) - { - Activate($objMod->depends[$i]); - } - -} - - -/** - * \brief Desactive un module - * \param value Nom du module a desactiver - */ -function UnActivate($value) -{ - global $db, $modules; - - $modName = $value; - - // Desactivation du module - if ($modName) - { - $file = $modName . ".class.php"; - include_once("../includes/modules/".$file); - $objMod = new $modName($db); - $objMod->remove(); - } - - // Desactivation des modules qui dependent de lui - for ($i = 0; $i < sizeof($objMod->requiredby); $i++) - { - UnActivate($objMod->requiredby[$i]); - } - - Header("Location: modules.php"); - exit; -} /* @@ -165,6 +94,45 @@ while (($file = readdir($handle))!==false) } } } +closedir($handle); + +// Find external module triggers +$interfaces->getModulesTriggers(); +foreach($interfaces->pathoftriggers as $dir) +{ + $handle=opendir($dir); + + while (($file = readdir($handle))!==false) + { + if (is_readable($dir.'/'.$file) && preg_match('/^interface_([^_]+)_(.+)\.class\.php/',$file,$reg)) + { + $modName = 'Interface'.ucfirst($reg[2]); + //print "file=$file"; print "modName=$modName"; exit; + if (in_array($modName,$modules)) + { + $langs->load("errors"); + print '
'.$langs->trans("Error").' : '.$langs->trans("ErrorDuplicateTrigger",$modName,"/htdocs/includes/triggers/").'
'; + $objMod = new $modName($db); + + $modules[$i] = $modName; + $files[$i] = $file; + $orders[$i] = $objMod->family; // Tri par famille + $i++; + } + else + { + include_once($dir.'/'.$file); + $objMod = new $modName($db); + + $modules[$i] = $modName; + $files[$i] = $file; + $orders[$i] = $objMod->family; // Tri par famille + $i++; + } + } + } + closedir($handle); +} asort($orders); $var=True; diff --git a/htdocs/interfaces.class.php b/htdocs/interfaces.class.php index 0743c20717e..6b9b27c966b 100644 --- a/htdocs/interfaces.class.php +++ b/htdocs/interfaces.class.php @@ -1,6 +1,7 @@ * Copyright (C) 2006 Rodolphe Quiedeville + * Copyright (C) 2010 Regis Houssin * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -18,24 +19,25 @@ */ /** - \file htdocs/interfaces.class.php - \ingroup core - \brief Fichier de la classe de gestion des triggers - \version $Id$ -*/ + * \file htdocs/interfaces.class.php + * \ingroup core + * \brief Fichier de la classe de gestion des triggers + * \version $Id$ + */ /** - \class Interfaces - \brief Classe de la gestion des triggers -*/ + * \class Interfaces + * \brief Classe de la gestion des triggers + */ class Interfaces { - var $dir; // Directory with all trigger files - var $errors=array(); // Array for errors + var $dir; // Directory with all core trigger files + var $errors = array(); // Array for errors + var $pathoftriggers = array(); // Array for path of triggers - /** + /** * \brief Constructeur. * \param DB handler d'acces base */ @@ -45,7 +47,7 @@ class Interfaces $this->dir = DOL_DOCUMENT_ROOT . "/includes/triggers"; } - /** + /** * \brief Fonction appelee lors du declenchement d'un evenement Dolibarr. * Cette fonction declenche tous les triggers trouves actifs. * \param action Code de l'evenement @@ -144,5 +146,31 @@ class Interfaces return $nbok; } } + + /** + * \brief Return list of modules contains triggers. + * \return array List of module name. + */ + function getModulesTriggers() + { + global $conf; + + foreach($conf->global as $key => $value) + { + if (preg_match('/^MAIN_TRIGGER_/',$key)) + { + if ($value) + { + if (preg_match('/^MAIN_TRIGGER_([[:alnum:]]*)$/',$key,$regs)) + { + $modulename = strtolower($regs[1]); + $pathoftrigger = DOL_DOCUMENT_ROOT.'/'.$modulename.'/inc/triggers/'; + $this->pathoftriggers[] = $pathoftrigger; + } + } + } + } + } + } ?>