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;
+ }
+ }
+ }
+ }
+ }
+
}
?>