From c8338f45c42e68ef1b10cc25b1cd3ecbad47eefa Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Marcos=20Garci=CC=81a=20de=20La=20Fuente?=
 <marcosgdf@gmail.com>
Date: Fri, 18 Jul 2014 02:59:46 +0200
Subject: [PATCH] Refactored Dolibarr triggers: Created a DolibarrTriggers
 abstract class. Moved common variables out of construct class Improved
 run_trigger method signature

---
 htdocs/core/class/interfaces.class.php        |   1 +
 .../core/triggers/DolibarrTriggers.class.php  | 132 ++++
 .../interface_20_all_Logevents.class.php      |  85 +--
 ...face_20_modPaypal_PaypalWorkflow.class.php |  88 +--
 ...e_20_modWorkflow_WorkflowManager.class.php |  88 +--
 ...terface_50_modAgenda_ActionsAuto.class.php | 107 +--
 ...interface_50_modLdap_Ldapsynchro.class.php |  88 +--
 ...odMailmanspip_Mailmanspipsynchro.class.php |  90 +--
 ..._50_modNotification_Notification.class.php |  88 +--
 .../interface_90_all_Demo.class.php-NORUN     | 685 +-----------------
 10 files changed, 301 insertions(+), 1151 deletions(-)
 create mode 100644 htdocs/core/triggers/DolibarrTriggers.class.php

diff --git a/htdocs/core/class/interfaces.class.php b/htdocs/core/class/interfaces.class.php
index 51d5456ec28..d11e6550744 100644
--- a/htdocs/core/class/interfaces.class.php
+++ b/htdocs/core/class/interfaces.class.php
@@ -23,6 +23,7 @@
  *   \brief			Fichier de la classe de gestion des triggers
  */
 
+require_once DOL_DOCUMENT_ROOT.'/htdocs/core/triggers/DolibarrTriggers.class.php';
 
 /**
  *   Class to manage triggers
diff --git a/htdocs/core/triggers/DolibarrTriggers.class.php b/htdocs/core/triggers/DolibarrTriggers.class.php
new file mode 100644
index 00000000000..5c28d1f8889
--- /dev/null
+++ b/htdocs/core/triggers/DolibarrTriggers.class.php
@@ -0,0 +1,132 @@
+<?php
+
+/*
+ * Copyright (C) 2014 Marcos García         <marcosgdf@gmail.com>
+ *
+ * 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
+ * the Free Software Foundation; either version 3 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+abstract class DolibarrTriggers {
+
+	/**
+	 * Database handler
+	 * @var DoliDB
+	 */
+	protected $db;
+
+	/**
+	 * Name of the trigger
+	 * @var mixed|string
+	 */
+	public $name = '';
+
+	/**
+	 * Description of the trigger
+	 * @var string
+	 */
+	public $description = '';
+
+	/**
+	 * Version of the trigger
+	 * @var string
+	 */
+	public $version = self::VERSION_DEVELOPMENT;
+
+	/**
+	 * Image of the trigger
+	 * @var string
+	 */
+	public $picto = 'technic';
+
+	/**
+	 * Category of the trigger
+	 * @var string
+	 */
+	public $family = '';
+
+	const VERSION_DEVELOPMENT = 'development';
+	const VERSION_EXPERIMENTAL = 'experimental';
+	const VERSION_DOLIBARR = 'dolibarr';
+
+	/**
+	 * Constructor
+	 *
+	 * @param DoliDB $db Database handler
+	 */
+	public function __construct(DoliDB $db) {
+
+		$this->db = $db;
+
+		if (!isset($this->name)) {
+			$this->name = preg_replace('/^Interface/i', '', get_class($this));
+		}
+	}
+
+	/**
+	 * Returns the name of the trigger file
+	 *
+	 * @return string
+	 */
+	public function getName()
+	{
+		return $this->name;
+	}
+
+	/**
+	 * Returns the description of trigger file
+	 *
+	 * @return string
+	 */
+	public function getDesc()
+	{
+		return $this->description;
+	}
+
+	/**
+	 * Returns the version of the trigger file
+	 *
+	 * @return string Version of trigger file
+	 */
+	public function getVersion()
+	{
+		global $langs;
+		$langs->load("admin");
+
+		if ($this->version == self::VERSION_DEVELOPMENT) {
+			return $langs->trans("Development");
+		} elseif ($this->version == self::VERSION_EXPERIMENTAL) {
+			return $langs->trans("Experimental");
+		} elseif ($this->version == self::VERSION_DOLIBARR) {
+			return DOL_VERSION;
+		} elseif ($this->version) {
+			return $this->version;
+		} else {
+			return $langs->trans("Unknown");
+		}
+	}
+
+	/**
+	 * Function called when a Dolibarrr business event is done.
+	 * All functions "run_trigger" are triggered if file is inside directory htdocs/core/triggers
+	 *
+	 * @param string		$action		Event action code
+	 * @param Object		$object     Object
+	 * @param User		    $user       Object user
+	 * @param Translate 	$langs      Object langs
+	 * @param conf		    $conf       Object conf
+	 * @return int         			<0 if KO, 0 if no triggered ran, >0 if OK
+	 */
+	abstract function run_trigger($action, $object, User $user, Translate $langs, Conf $conf);
+
+}
\ No newline at end of file
diff --git a/htdocs/core/triggers/interface_20_all_Logevents.class.php b/htdocs/core/triggers/interface_20_all_Logevents.class.php
index df6242a20d9..95485adeae6 100644
--- a/htdocs/core/triggers/interface_20_all_Logevents.class.php
+++ b/htdocs/core/triggers/interface_20_all_Logevents.class.php
@@ -1,6 +1,7 @@
 <?php
 /* Copyright (C) 2005-2009 Laurent Destailleur  <eldy@users.sourceforge.net>
  * Copyright (C) 2009      Regis Houssin        <regis.houssin@capnetworks.com>
+ * Copyright (C) 2014       Marcos García       <marcosgdf@gmail.com>
  *
  * 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
@@ -26,81 +27,31 @@
 /**
  *  Class of triggers for security events
  */
-class InterfaceLogevents
+class InterfaceLogevents extends DolibarrTriggers
 {
-    var $db;
-    var $error;
+	public $picto = 'technic';
+	public $family = 'core';
+	public $description = "Triggers of this module allows to add security event records inside Dolibarr.";
+	public $version = self::VERSION_DOLIBARR;
 
     var $date;
     var $duree;
     var $texte;
     var $desc;
 
-    /**
-     *   Constructor
-     *
-     *   @param		DoliDB		$db      Database handler
-     */
-    function __construct($db)
-    {
-        $this->db = $db;
-
-        $this->name = preg_replace('/^Interface/i','',get_class($this));
-        $this->family = "core";
-        $this->description = "Triggers of this module allows to add security event records inside Dolibarr.";
-        $this->version = 'dolibarr';                        // 'experimental' or 'dolibarr' or version
-        $this->picto = 'technic';
-    }
-
-    /**
-     *   Return name of trigger file
-     *
-     *   @return     string      Name of trigger file
-     */
-    function getName()
-    {
-        return $this->name;
-    }
-
-    /**
-     *   Return description of trigger file
-     *
-     *   @return     string      Description of trigger file
-     */
-    function getDesc()
-    {
-        return $this->description;
-    }
-
-    /**
-     *   Return version of trigger file
-     *
-     *   @return     string      Version of trigger file
-     */
-    function getVersion()
-    {
-        global $langs;
-        $langs->load("admin");
-
-        if ($this->version == 'experimental') return $langs->trans("Experimental");
-        elseif ($this->version == 'dolibarr') return DOL_VERSION;
-        elseif ($this->version) return $this->version;
-        else return $langs->trans("Unknown");
-    }
 
-    /**
-     *      Function called when a Dolibarrr business event is done.
-     *      All functions "run_trigger" are triggered if file is inside directory htdocs/core/triggers
-     *
-     *      @param	string		$action		Event action code
-     *      @param  Object		$object     Object
-     *      @param  User		$user       Object user
-     *      @param  Translate	$langs      Object langs
-     *      @param  conf		$conf       Object conf
-     *      @param  string		$entity     Value for instance of data (Always 1 except if module MultiCompany is installed)
-     *      @return int         			<0 if KO, 0 if no triggered ran, >0 if OK
-     */
-    function run_trigger($action,$object,$user,$langs,$conf,$entity=1)
+	/**
+	 * Function called when a Dolibarrr business event is done.
+	 * All functions "run_trigger" are triggered if file is inside directory htdocs/core/triggers
+	 *
+	 * @param string		$action		Event action code
+	 * @param Object		$object     Object
+	 * @param User		$user       Object user
+	 * @param Translate	$langs      Object langs
+	 * @param conf		$conf       Object conf
+	 * @return int         			<0 if KO, 0 if no triggered ran, >0 if OK
+	 */
+	public function run_trigger($action, $object, User $user, Translate $langs, Conf $conf)
     {
     	if (! empty($conf->global->MAIN_LOGEVENTS_DISABLE_ALL)) return 0;	// Log events is disabled (hidden features)
 
diff --git a/htdocs/core/triggers/interface_20_modPaypal_PaypalWorkflow.class.php b/htdocs/core/triggers/interface_20_modPaypal_PaypalWorkflow.class.php
index 4401a0ebcfa..631b6a28639 100644
--- a/htdocs/core/triggers/interface_20_modPaypal_PaypalWorkflow.class.php
+++ b/htdocs/core/triggers/interface_20_modPaypal_PaypalWorkflow.class.php
@@ -1,5 +1,6 @@
 <?php
 /* Copyright (C) 2011-2012  Regis Houssin  <regis.houssin@capnetworks.com>
+ * Copyright (C) 2014       Marcos García       <marcosgdf@gmail.com>
  *
  * 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
@@ -25,76 +26,25 @@
 /**
  *  Class of triggers for paypal module
  */
-class InterfacePaypalWorkflow
+class InterfacePaypalWorkflow extends DolibarrTriggers
 {
-    var $db;
-
-    /**
-     *   Constructor
-     *
-     *   @param		DoliDB		$db      Database handler
-     */
-    function __construct($db)
-    {
-        $this->db = $db;
-
-        $this->name = preg_replace('/^Interface/i','',get_class($this));
-        $this->family = "paypal";
-        $this->description = "Triggers of this module allows to manage paypal workflow";
-        $this->version = 'dolibarr';            // 'development', 'experimental', 'dolibarr' or version
-        $this->picto = 'paypal@paypal';
-    }
-
-
-    /**
-     *  Renvoi nom du lot de triggers
-     *
-     *  @return     string      Nom du lot de triggers
-     */
-    function getName()
-    {
-        return $this->name;
-    }
-
-    /**
-     *  Renvoi descriptif du lot de triggers
-     *
-     *  @return     string      Descriptif du lot de triggers
-     */
-    function getDesc()
-    {
-        return $this->description;
-    }
-
-    /**
-     *  Renvoi version du lot de triggers
-     *
-     *  @return     string      Version du lot de triggers
-     */
-    function getVersion()
-    {
-        global $langs;
-        $langs->load("admin");
-
-        if ($this->version == 'development') return $langs->trans("Development");
-        elseif ($this->version == 'experimental') return $langs->trans("Experimental");
-        elseif ($this->version == 'dolibarr') return DOL_VERSION;
-        elseif ($this->version) return $this->version;
-        else return $langs->trans("Unknown");
-    }
-
-    /**
-     *  Fonction appelee lors du declenchement d'un evenement Dolibarr.
-     *  D'autres fonctions run_trigger peuvent etre presentes dans core/triggers
-     *
-     *      @param	string		$action		Event action code
-     *      @param  Object		$object     Object
-     *      @param  User		$user       Object user
-     *      @param  Translate	$langs      Object langs
-     *      @param  conf		$conf       Object conf
-     *      @return int         			<0 if KO, 0 if no triggered ran, >0 if OK
-     */
-	function run_trigger($action,$object,$user,$langs,$conf)
+	public $picto = 'paypal@paypal';
+	public $family = 'paypal';
+	public $description = "Triggers of this module allows to manage paypal workflow";
+	public $version = self::VERSION_DOLIBARR;
+
+	/**
+	 * Function called when a Dolibarrr business event is done.
+	 * All functions "run_trigger" are triggered if file is inside directory htdocs/core/triggers
+	 *
+	 * @param string		$action		Event action code
+	 * @param Object		$object     Object
+	 * @param User		$user       Object user
+	 * @param Translate	$langs      Object langs
+	 * @param conf		$conf       Object conf
+	 * @return int         			<0 if KO, 0 if no triggered ran, >0 if OK
+	 */
+	public function run_trigger($action, $object, User $user, Translate $langs, Conf $conf)
     {
         // Mettre ici le code a executer en reaction de l'action
         // Les donnees de l'action sont stockees dans $object
diff --git a/htdocs/core/triggers/interface_20_modWorkflow_WorkflowManager.class.php b/htdocs/core/triggers/interface_20_modWorkflow_WorkflowManager.class.php
index adca98768d3..074118ebdd4 100644
--- a/htdocs/core/triggers/interface_20_modWorkflow_WorkflowManager.class.php
+++ b/htdocs/core/triggers/interface_20_modWorkflow_WorkflowManager.class.php
@@ -1,6 +1,7 @@
 <?php
 /* Copyright (C) 2010 Regis Houssin       <regis.houssin@capnetworks.com>
  * Copyright (C) 2011 Laurent Destailleur <eldy@users.sourceforge.net>
+ * Copyright (C) 2014       Marcos García       <marcosgdf@gmail.com>
  *
  * 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
@@ -27,76 +28,25 @@
  *  Class of triggers for workflow module
  */
 
-class InterfaceWorkflowManager
+class InterfaceWorkflowManager extends DolibarrTriggers
 {
-    var $db;
-
-    /**
-     *   Constructor
-     *
-     *   @param		DoliDB		$db      Database handler
-     */
-    function __construct($db)
-    {
-        $this->db = $db;
-
-        $this->name = preg_replace('/^Interface/i','',get_class($this));
-        $this->family = "core";
-        $this->description = "Triggers of this module allows to manage workflows";
-        $this->version = 'dolibarr';            // 'development', 'experimental', 'dolibarr' or version
-        $this->picto = 'technic';
-    }
-
-
-    /**
-     *   Return name of trigger file
-     *
-     *   @return     string      Name of trigger file
-     */
-    function getName()
-    {
-        return $this->name;
-    }
-
-    /**
-     *   Return description of trigger file
-     *
-     *   @return     string      Description of trigger file
-     */
-    function getDesc()
-    {
-        return $this->description;
-    }
-
-    /**
-     *   Return version of trigger file
-     *
-     *   @return     string      Version of trigger file
-     */
-    function getVersion()
-    {
-        global $langs;
-        $langs->load("admin");
-
-        if ($this->version == 'development') return $langs->trans("Development");
-        elseif ($this->version == 'experimental') return $langs->trans("Experimental");
-        elseif ($this->version == 'dolibarr') return DOL_VERSION;
-        elseif ($this->version) return $this->version;
-        else return $langs->trans("Unknown");
-    }
-
-    /**
-     *      Function called when a Dolibarrr business event is done.
-     *      All functions "run_trigger" are triggered if file is inside directory htdocs/core/triggers
-     *
-     *      @param	string		$action		Event action code
-     *      @param  Object		$object     Object
-     *      @param  User		$user       Object user
-     *      @param  Translate	$langs      Object langs
-     *      @param  conf		$conf       Object conf
-     *      @return int         			<0 if KO, 0 if no triggered ran, >0 if OK
-     */
-	function run_trigger($action,$object,$user,$langs,$conf)
+	public $picto = 'paypal@paypal';
+	public $family = 'core';
+	public $description = "Triggers of this module allows to manage workflows";
+	public $version = self::VERSION_DOLIBARR;
+
+	/**
+	 * Function called when a Dolibarrr business event is done.
+	 * All functions "run_trigger" are triggered if file is inside directory htdocs/core/triggers
+	 *
+	 * @param string		$action		Event action code
+	 * @param Object		$object     Object
+	 * @param User		    $user       Object user
+	 * @param Translate 	$langs      Object langs
+	 * @param conf		    $conf       Object conf
+	 * @return int         			<0 if KO, 0 if no triggered ran, >0 if OK
+	 */
+	public function run_trigger($action, $object, User $user, Translate $langs, Conf $conf)
     {
         if (empty($conf->workflow->enabled)) return 0;     // Module not active, we do nothing
 
diff --git a/htdocs/core/triggers/interface_50_modAgenda_ActionsAuto.class.php b/htdocs/core/triggers/interface_50_modAgenda_ActionsAuto.class.php
index 79193b07084..0e3cff50a2d 100644
--- a/htdocs/core/triggers/interface_50_modAgenda_ActionsAuto.class.php
+++ b/htdocs/core/triggers/interface_50_modAgenda_ActionsAuto.class.php
@@ -3,6 +3,7 @@
  * Copyright (C) 2009-2011 Regis Houssin        <regis.houssin@capnetworks.com>
  * Copyright (C) 2011-2014 Juanjo Menent        <jmenent@2byte.es>
  * Copyright (C) 2013	   Cedric GROSS         <c.gross@kreiz-it.fr>
+ * Copyright (C) 2014       Marcos García       <marcosgdf@gmail.com>
  *
  * 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
@@ -28,91 +29,41 @@
 /**
  *  Class of triggered functions for agenda module
  */
-class InterfaceActionsAuto
+class InterfaceActionsAuto extends DolibarrTriggers
 {
-    var $db;
-    var $error;
+	public $family = 'agenda';
+	public $description = "Triggers of this module add actions in agenda according to setup made in agenda setup.";
+	public $version = self::VERSION_DOLIBARR;
+	public $picto = 'action';
 
     var $date;
     var $duree;
     var $texte;
     var $desc;
 
-    /**
-     *   Constructor
-     *
-     *   @param		DoliDB		$db      Database handler
-     */
-    function __construct($db)
-    {
-        $this->db = $db;
-
-        $this->name = preg_replace('/^Interface/i','',get_class($this));
-        $this->family = "agenda";
-        $this->description = "Triggers of this module add actions in agenda according to setup made in agenda setup.";
-        $this->version = 'dolibarr';                        // 'experimental' or 'dolibarr' or version
-        $this->picto = 'action';
-    }
-
-    /**
-     *   Return name of trigger file
-     *
-     *   @return     string      Name of trigger file
-     */
-    function getName()
-    {
-        return $this->name;
-    }
-
-    /**
-     *   Return description of trigger file
-     *
-     *   @return     string      Description of trigger file
-     */
-    function getDesc()
-    {
-        return $this->description;
-    }
-
-    /**
-     *   Return version of trigger file
-     *
-     *   @return     string      Version of trigger file
-     */
-    function getVersion()
-    {
-        global $langs;
-        $langs->load("admin");
-
-        if ($this->version == 'experimental') return $langs->trans("Experimental");
-        elseif ($this->version == 'dolibarr') return DOL_VERSION;
-        elseif ($this->version) return $this->version;
-        else return $langs->trans("Unknown");
-    }
-
-    /**
-     *      Function called when a Dolibarrr business event is done.
-     *      All functions "run_trigger" are triggered if file is inside directory htdocs/core/triggers
-     *
-     *      Following properties must be filled:
-     *      $object->actiontypecode (translation action code: AC_OTH, ...)
-     *      $object->actionmsg (note, long text)
-     *      $object->actionmsg2 (label, short text)
-     *      $object->sendtoid (id of contact)
-     *      $object->socid
-     *      Optionnal:
-     *      $object->fk_element
-     *      $object->elementtype
-     *
-     *      @param	string		$action		Event action code
-     *      @param  Object		$object     Object
-     *      @param  User		$user       Object user
-     *      @param  Translate	$langs      Object langs
-     *      @param  conf		$conf       Object conf
-     *      @return int         			<0 if KO, 0 if no triggered ran, >0 if OK
-     */
-    function run_trigger($action,$object,$user,$langs,$conf)
-    {
+	/**
+	 * Function called when a Dolibarrr business event is done.
+	 * All functions "run_trigger" are triggered if file is inside directory htdocs/core/triggers
+	 *
+	 * Following properties must be filled:
+	 *      $object->actiontypecode (translation action code: AC_OTH, ...)
+	 *      $object->actionmsg (note, long text)
+	 *      $object->actionmsg2 (label, short text)
+	 *      $object->sendtoid (id of contact)
+	 *      $object->socid
+	 *      Optionnal:
+	 *      $object->fk_element
+	 *      $object->elementtype
+	 *
+	 * @param string		$action		Event action code
+	 * @param Object		$object     Object
+	 * @param User		    $user       Object user
+	 * @param Translate 	$langs      Object langs
+	 * @param conf		    $conf       Object conf
+	 * @return int         			<0 if KO, 0 if no triggered ran, >0 if OK
+	 */
+	public function run_trigger($action, $object, User $user, Translate $langs, Conf $conf)
+	{
 		$key='MAIN_AGENDA_ACTIONAUTO_'.$action;
         //dol_syslog("xxxxxxxxxxx".$key);
 
diff --git a/htdocs/core/triggers/interface_50_modLdap_Ldapsynchro.class.php b/htdocs/core/triggers/interface_50_modLdap_Ldapsynchro.class.php
index 7bc742d3a26..f98d8bf5248 100644
--- a/htdocs/core/triggers/interface_50_modLdap_Ldapsynchro.class.php
+++ b/htdocs/core/triggers/interface_50_modLdap_Ldapsynchro.class.php
@@ -1,5 +1,6 @@
 <?php
 /* Copyright (C) 2005-2012 Laurent Destailleur  <eldy@users.sourceforge.net>
+ * Copyright (C) 2014       Marcos García       <marcosgdf@gmail.com>
  *
  * 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
@@ -27,76 +28,25 @@ require_once (DOL_DOCUMENT_ROOT."/user/class/usergroup.class.php");
 /**
  *  Class of triggers for ldap module
  */
-class InterfaceLdapsynchro
+class InterfaceLdapsynchro extends DolibarrTriggers
 {
-    var $db;
-    var $error;
-
-
-    /**
-     *   Constructor
-     *
-     *   @param		DoliDB		$db      Database handler
-     */
-    function __construct($db)
-    {
-        $this->db = $db;
-
-        $this->name = preg_replace('/^Interface/i','',get_class($this));
-        $this->family = "ldap";
-        $this->description = "Triggers of this module allows to synchronize Dolibarr toward a LDAP database.";
-        $this->version = 'dolibarr';                        // 'experimental' or 'dolibarr' or version
-        $this->picto = 'technic';
-    }
-
-    /**
-     *   Return name of trigger file
-     *
-     *   @return     string      Name of trigger file
-     */
-    function getName()
-    {
-        return $this->name;
-    }
-
-    /**
-     *   Return description of trigger file
-     *
-     *   @return     string      Description of trigger file
-     */
-    function getDesc()
-    {
-        return $this->description;
-    }
-
-    /**
-     *   Return version of trigger file
-     *
-     *   @return     string      Version of trigger file
-     */
-    function getVersion()
-    {
-        global $langs;
-        $langs->load("admin");
-
-        if ($this->version == 'experimental') return $langs->trans("Experimental");
-        elseif ($this->version == 'dolibarr') return DOL_VERSION;
-        elseif ($this->version) return $this->version;
-        else return $langs->trans("Unknown");
-    }
-
-    /**
-     *      Function called when a Dolibarrr business event is done.
-     *      All functions "run_trigger" are triggered if file is inside directory htdocs/core/triggers
-     *
-     *      @param	string		$action		Event action code
-     *      @param  Object		$object     Object
-     *      @param  User		$user       Object user
-     *      @param  Translate	$langs      Object langs
-     *      @param  conf		$conf       Object conf
-     *      @return int         			<0 if KO, 0 if no triggered ran, >0 if OK
-     */
-	function run_trigger($action,$object,$user,$langs,$conf)
+	public $family = 'ldap';
+	public $description = "Triggers of this module allows to synchronize Dolibarr toward a LDAP database.";
+	public $version = self::VERSION_DOLIBARR;
+	public $picto = 'technic';
+
+	/**
+	 * Function called when a Dolibarrr business event is done.
+	 * All functions "run_trigger" are triggered if file is inside directory htdocs/core/triggers
+	 *
+	 * @param string		$action		Event action code
+	 * @param Object		$object     Object
+	 * @param User		    $user       Object user
+	 * @param Translate 	$langs      Object langs
+	 * @param conf		    $conf       Object conf
+	 * @return int         			<0 if KO, 0 if no triggered ran, >0 if OK
+	 */
+	public function run_trigger($action, $object, User $user, Translate $langs, Conf $conf)
     {
         if (empty($conf->ldap->enabled)) return 0;     // Module not active, we do nothing
 
diff --git a/htdocs/core/triggers/interface_50_modMailmanspip_Mailmanspipsynchro.class.php b/htdocs/core/triggers/interface_50_modMailmanspip_Mailmanspipsynchro.class.php
index 01ce1f7e539..2aa2cd536ad 100644
--- a/htdocs/core/triggers/interface_50_modMailmanspip_Mailmanspipsynchro.class.php
+++ b/htdocs/core/triggers/interface_50_modMailmanspip_Mailmanspipsynchro.class.php
@@ -1,5 +1,6 @@
 <?php
 /* Copyright (C) 2005-2013 Laurent Destailleur  <eldy@users.sourceforge.net>
+ * Copyright (C) 2014       Marcos García       <marcosgdf@gmail.com>
  *
  * 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
@@ -27,77 +28,26 @@ require_once (DOL_DOCUMENT_ROOT."/user/class/usergroup.class.php");
 /**
  *  Class of triggers for MailmanSpip module
  */
-class InterfaceMailmanSpipsynchro
+class InterfaceMailmanSpipsynchro extends DolibarrTriggers
 {
-    var $db;
-    var $error;
-
-
-    /**
-     *   Constructor
-     *
-     *   @param		DoliDB		$db      Database handler
-     */
-    function __construct($db)
-    {
-        $this->db = $db;
-
-        $this->name = preg_replace('/^Interface/i','',get_class($this));
-        $this->family = "ldap";
-        $this->description = "Triggers of this module allows to synchronize Mailman an Spip.";
-        $this->version = 'dolibarr';                        // 'experimental' or 'dolibarr' or version
-        $this->picto = 'technic';
-    }
-
-    /**
-     *   Return name of trigger file
-     *
-     *   @return     string      Name of trigger file
-     */
-    function getName()
-    {
-        return $this->name;
-    }
-
-    /**
-     *   Return description of trigger file
-     *
-     *   @return     string      Description of trigger file
-     */
-    function getDesc()
-    {
-        return $this->description;
-    }
-
-    /**
-     *   Return version of trigger file
-     *
-     *   @return     string      Version of trigger file
-     */
-    function getVersion()
-    {
-        global $langs;
-        $langs->load("admin");
-
-        if ($this->version == 'experimental') return $langs->trans("Experimental");
-        elseif ($this->version == 'dolibarr') return DOL_VERSION;
-        elseif ($this->version) return $this->version;
-        else return $langs->trans("Unknown");
-    }
-
-    /**
-     *      Function called when a Dolibarrr business event is done.
-     *      All functions "run_trigger" are triggered if file is inside directory htdocs/core/triggers
-     *
-     *      @param	string		$action		Event action code
-     *      @param  Object		$object     Object
-     *      @param  User		$user       Object user
-     *      @param  Translate	$langs      Object langs
-     *      @param  conf		$conf       Object conf
-     *      @return int         			<0 if KO, 0 if no triggered ran, >0 if OK
-     */
-	function run_trigger($action,$object,$user,$langs,$conf)
-    {
+	public $family = 'ldap';
+	public $description = "Triggers of this module allows to synchronize Mailman an Spip.";
+	public $version = self::VERSION_DOLIBARR;
+	public $picto = 'technic';
+
+	/**
+	 * Function called when a Dolibarrr business event is done.
+	 * All functions "run_trigger" are triggered if file is inside directory htdocs/core/triggers
+	 *
+	 * @param string		$action		Event action code
+	 * @param Object		$object     Object
+	 * @param User		    $user       Object user
+	 * @param Translate 	$langs      Object langs
+	 * @param conf		    $conf       Object conf
+	 * @return int         			<0 if KO, 0 if no triggered ran, >0 if OK
+	 */
+	public function run_trigger($action, $object, User $user, Translate $langs, Conf $conf)
+	{
         if (empty($conf->mailmanspip->enabled)) return 0;     // Module not active, we do nothing
 
         if (! function_exists('ldap_connect'))
diff --git a/htdocs/core/triggers/interface_50_modNotification_Notification.class.php b/htdocs/core/triggers/interface_50_modNotification_Notification.class.php
index aff6e526b93..d1677d22065 100644
--- a/htdocs/core/triggers/interface_50_modNotification_Notification.class.php
+++ b/htdocs/core/triggers/interface_50_modNotification_Notification.class.php
@@ -1,7 +1,7 @@
 <?php
 /* Copyright (C) 2006-2011 Laurent Destailleur  <eldy@users.sourceforge.net>
  * Copyright (C) 2011      Regis Houssin        <regis.houssin@capnetworks.com>
- * Copyright (C) 2013      Marcos García        <marcosgdf@gmail.com>
+ * Copyright (C) 2013-2014 Marcos García        <marcosgdf@gmail.com>
  *
  * 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
@@ -27,9 +27,13 @@
 /**
  *  Class of triggers for notification module
  */
-class InterfaceNotification
+class InterfaceNotification extends DolibarrTriggers
 {
-    var $db;
+	public $family = 'notification';
+	public $description = "Triggers of this module send email notifications according to Notification module setup.";
+	public $version = self::VERSION_DOLIBARR;
+	public $picto = 'email';
+
     var $listofmanagedevents=array(
     	'BILL_VALIDATE',
     	'ORDER_VALIDATE',
@@ -40,71 +44,19 @@ class InterfaceNotification
         'SHIPPING_VALIDATE'
    	);
 
-    /**
-     *   Constructor
-     *
-     *   @param		DoliDB		$db      Database handler
-     */
-    function __construct($db)
-    {
-        $this->db = $db;
-
-        $this->name = preg_replace('/^Interface/i','',get_class($this));
-        $this->family = "notification";
-        $this->description = "Triggers of this module send email notifications according to Notification module setup.";
-        $this->version = 'dolibarr';                        // 'experimental' or 'dolibarr' or version
-        $this->picto = 'email';
-    }
-
-    /**
-     *   Return name of trigger file
-     *
-     *   @return     string      Name of trigger file
-     */
-    function getName()
-    {
-        return $this->name;
-    }
-
-    /**
-     *   Return description of trigger file
-     *
-     *   @return     string      Description of trigger file
-     */
-    function getDesc()
-    {
-        return $this->description;
-    }
-
-    /**
-     *   Return version of trigger file
-     *
-     *   @return     string      Version of trigger file
-     */
-    function getVersion()
-    {
-        global $langs;
-        $langs->load("admin");
-
-        if ($this->version == 'experimental') return $langs->trans("Experimental");
-        elseif ($this->version == 'dolibarr') return DOL_VERSION;
-        elseif ($this->version) return $this->version;
-        else return $langs->trans("Unknown");
-    }
-
-    /**
-     *      Function called when a Dolibarrr business event is done.
-     *      All functions "run_trigger" are triggered if file is inside directory htdocs/core/triggers
-     *
-     *      @param	string		$action		Event action code
-     *      @param  Object		$object     Object
-     *      @param  User		$user       Object user
-     *      @param  Translate	$langs      Object langs
-     *      @param  conf		$conf       Object conf
-     *      @return int         			<0 if KO, 0 if no triggered ran, >0 if OK
-     */
-	function run_trigger($action,$object,$user,$langs,$conf)
-    {
+	/**
+	 * Function called when a Dolibarrr business event is done.
+	 * All functions "run_trigger" are triggered if file is inside directory htdocs/core/triggers
+	 *
+	 * @param string		$action		Event action code
+	 * @param Object		$object     Object
+	 * @param User		    $user       Object user
+	 * @param Translate 	$langs      Object langs
+	 * @param conf		    $conf       Object conf
+	 * @return int         			<0 if KO, 0 if no triggered ran, >0 if OK
+	 */
+	public function run_trigger($action, $object, User $user, Translate $langs, Conf $conf)
+	{
 		if (empty($conf->notification->enabled)) return 0;     // Module not active, we do nothing
 
 		require_once DOL_DOCUMENT_ROOT .'/core/class/notify.class.php';
diff --git a/htdocs/core/triggers/interface_90_all_Demo.class.php-NORUN b/htdocs/core/triggers/interface_90_all_Demo.class.php-NORUN
index 4b9d923de03..28391cfd996 100644
--- a/htdocs/core/triggers/interface_90_all_Demo.class.php-NORUN
+++ b/htdocs/core/triggers/interface_90_all_Demo.class.php-NORUN
@@ -1,6 +1,7 @@
 <?php
 /* Copyright (C) 2005-2011 Laurent Destailleur  <eldy@users.sourceforge.net>
  * Copyright (C) 2005-2011 Regis Houssin        <regis.houssin@capnetworks.com>
+ * Copyright (C) 2014       Marcos García       <marcosgdf@gmail.com>
  *
  * 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
@@ -32,674 +33,36 @@
 /**
  *  Class of triggers for demo module
  */
-class InterfaceDemo
+class InterfaceDemo extends DolibarrTriggers
 {
-    var $db;
-    
-    /**
-     *   Constructor
-     *
-     *   @param		DoliDB		$db      Database handler
-     */
-    function __construct($db)
-    {
-        $this->db = $db;
-    
-        $this->name = preg_replace('/^Interface/i','',get_class($this));
-        $this->family = "demo";
-        $this->description = "Triggers of this module are empty functions. They have no effect. They are provided for tutorial purpose only.";
-        $this->version = 'dolibarr';            // 'development', 'experimental', 'dolibarr' or version
-        $this->picto = 'technic';
-    }
-    
-    
-    /**
-     *   Return name of trigger file
-     *
-     *   @return     string      Name of trigger file
-     */
-    function getName()
-    {
-        return $this->name;
-    }
-    
-    /**
-     *   Return description of trigger file
-     *
-     *   @return     string      Description of trigger file
-     */
-    function getDesc()
-    {
-        return $this->description;
-    }
 
-    /**
-     *   Return version of trigger file
-     *
-     *   @return     string      Version of trigger file
-     */
-    function getVersion()
-    {
-        global $langs;
-        $langs->load("admin");
+	public $name = 'My interface name';
+	public $picto = 'technic';
+	public $description = 'My useless description';
+	public $version = self::VERSION_DEVELOPMENT;
 
-        if ($this->version == 'development') return $langs->trans("Development");
-        elseif ($this->version == 'experimental') return $langs->trans("Experimental");
-        elseif ($this->version == 'dolibarr') return DOL_VERSION;
-        elseif ($this->version) return $this->version;
-        else return $langs->trans("Unknown");
-    }
-    
-    /**
-     *      Function called when a Dolibarrr business event is done.
-     *      All functions "run_trigger" are triggered if file is inside directory htdocs/core/triggers
+	/**
+     * Function called when a Dolibarrr business event is done.
+     * All functions "run_trigger" are triggered if file is inside directory htdocs/core/triggers
      *
-     *      @param	string		$action		Event action code
-     *      @param  Object		$object     Object
-     *      @param  User		$user       Object user
-     *      @param  Translate	$langs      Object langs
-     *      @param  conf		$conf       Object conf
-     *      @return int         			<0 if KO, 0 if no triggered ran, >0 if OK
+     * @param string		$action		Event action code
+     * @param Object		$object     Object
+     * @param User		    $user       Object user
+     * @param Translate 	$langs      Object langs
+     * @param conf		    $conf       Object conf
+     * @return int         			<0 if KO, 0 if no triggered ran, >0 if OK
      */
-	function run_trigger($action,$object,$user,$langs,$conf)
+    public function run_trigger($action, $object, User $user, Translate $langs, Conf $conf)
     {
-        // Put here code you want to execute when a Dolibarr business events occurs.
-        // Data and type of action are stored into $object and $action
-    
-        // Users
-        if ($action == 'USER_LOGIN')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'USER_UPDATE_SESSION')
-        {
-            // Warning: To increase performances, this action is triggered only if 
-            // constant MAIN_ACTIVATE_UPDATESESSIONTRIGGER is set to 1.
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'USER_CREATE')
-        {
-        	$object->error=$action;
-        	return -1;
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'USER_CREATE_FROM_CONTACT')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'USER_MODIFY')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'USER_NEW_PASSWORD')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'USER_ENABLEDISABLE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'USER_DELETE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'USER_LOGOUT')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'USER_SETINGROUP')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'USER_REMOVEFROMGROUP')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-
-		// Action
-        elseif ($action == 'ACTION_MODIFY')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'ACTION_CREATE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'ACTION_DELETE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-		
-		// Groups
-		elseif ($action == 'GROUP_CREATE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'GROUP_MODIFY')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'GROUP_DELETE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-		
-        // Companies
-        elseif ($action == 'COMPANY_CREATE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'COMPANY_MODIFY')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'COMPANY_DELETE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-
-        // Contacts
-        elseif ($action == 'CONTACT_CREATE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'CONTACT_MODIFY')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'CONTACT_DELETE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'CONTACT_ENABLEDISABLE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-
-        // Products
-        elseif ($action == 'PRODUCT_CREATE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'PRODUCT_MODIFY')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'PRODUCT_DELETE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'PRODUCT_PRICE_MODIFY')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        
-        //Stock mouvement
-        elseif ($action == 'STOCK_MOVEMENT')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        
-		//MYECMDIR
-		elseif ($action == 'MYECMDIR_DELETE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-		elseif ($action == 'MYECMDIR_CREATE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'MYECMDIR_MODIFY')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-
-		// Customer orders
-        elseif ($action == 'ORDER_CREATE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'ORDER_CLONE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'ORDER_VALIDATE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'ORDER_DELETE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'ORDER_BUILDDOC')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'ORDER_SENTBYMAIL')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'ORDER_CLASSIFY_BILLED')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'LINEORDER_INSERT')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'LINEORDER_UPDATE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'LINEORDER_DELETE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-
-		// Supplier orders
-        elseif ($action == 'ORDER_SUPPLIER_CREATE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'ORDER_SUPPLIER_CLONE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }      
-        elseif ($action == 'ORDER_SUPPLIER_VALIDATE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'ORDER_SUPPLIER_DELETE')
-        {   
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'ORDER_SUPPLIER_APPROVE')
-        {   
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'ORDER_SUPPLIER_REFUSE')
-        {   
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'ORDER_SUPPLIER_CANCEL')
-        {   
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'ORDER_SUPPLIER_SENTBYMAIL')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'ORDER_SUPPLIER_BUILDDOC')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'LINEORDER_SUPPLIER_DISPATCH')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'LINEORDER_SUPPLIER_CREATE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'LINEORDER_SUPPLIER_UPDATE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-
-        // Proposals
-        elseif ($action == 'PROPAL_CREATE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'PROPAL_CLONE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'PROPAL_MODIFY')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'PROPAL_VALIDATE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'PROPAL_BUILDDOC')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'PROPAL_SENTBYMAIL')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'PROPAL_CLOSE_SIGNED')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'PROPAL_CLOSE_REFUSED')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'PROPAL_DELETE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'LINEPROPAL_INSERT')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'LINEPROPAL_UPDATE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'LINEPROPAL_DELETE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-
-        // Contracts
-        elseif ($action == 'CONTRACT_CREATE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'CONTRACT_ACTIVATE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'CONTRACT_CANCEL')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'CONTRACT_CLOSE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'CONTRACT_DELETE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'LINECONTRACT_CREATE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'LINECONTRACT_UPDATE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'LINECONTRACT_DELETE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-
-        // Bills
-        elseif ($action == 'BILL_CREATE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'BILL_CLONE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'BILL_MODIFY')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'BILL_VALIDATE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-		elseif ($action == 'BILL_UNVALIDATE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'BILL_BUILDDOC')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'BILL_SENTBYMAIL')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'BILL_CANCEL')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'BILL_DELETE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'BILL_PAYED')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-		elseif ($action == 'LINEBILL_INSERT')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-		elseif ($action == 'LINEBILL_UPDATE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-		elseif ($action == 'LINEBILL_DELETE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-
-		//Supplier Bill
-		elseif ($action == 'BILL_SUPPLIER_CREATE')
-        {
-             dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-		elseif ($action == 'BILL_SUPPLIER_UPDATE')
-        {
-             dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-		elseif ($action == 'BILL_SUPPLIER_DELETE')
-        {
-             dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-		elseif ($action == 'BILL_SUPPLIER_PAYED')
-        {
-             dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-		elseif ($action == 'BILL_SUPPLIER_UNPAYED')
-        {
-             dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-		elseif ($action == 'BILL_SUPPLIER_VALIDATE')
-        {
-             dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-		elseif ($action == 'LINEBILL_SUPPLIER_CREATE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-		elseif ($action == 'LINEBILL_SUPPLIER_UPDATE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-		elseif ($action == 'LINEBILL_SUPPLIER_DELETE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
- 
-        // Payments
-        elseif ($action == 'PAYMENT_CUSTOMER_CREATE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'PAYMENT_SUPPLIER_CREATE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'PAYMENT_ADD_TO_BANK')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'PAYMENT_DELETE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        
-        //Donation
-        elseif ($action == 'DON_CREATE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'DON_UPDATE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'DON_DELETE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        
-        
+		// Put here code you want to execute when a Dolibarr business events occurs.
+		// Data and type of action are stored into $object and $action
 
-		// Interventions
-		elseif ($action == 'FICHINTER_CREATE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'FICHINTER_MODIFY')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'FICHINTER_VALIDATE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-	    elseif ($action == 'FICHINTER_DELETE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-	    elseif ($action == 'LINEFICHINTER_CREATE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-	    elseif ($action == 'LINEFICHINTER_UPDATE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-	    elseif ($action == 'LINEFICHINTER_DELETE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        
-        // Members
-        elseif ($action == 'MEMBER_CREATE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'MEMBER_VALIDATE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'MEMBER_SUBSCRIPTION')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'MEMBER_MODIFY')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'MEMBER_NEW_PASSWORD')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'MEMBER_RESILIATE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'MEMBER_DELETE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        
-        // Categories
-        elseif ($action == 'CATEGORY_CREATE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'CATEGORY_MODIFY')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'CATEGORY_DELETE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        
-        // Projects
-        elseif ($action == 'PROJECT_CREATE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'PROJECT_MODIFY')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'PROJECT_DELETE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        
-        // Project tasks
-        elseif ($action == 'TASK_CREATE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'TASK_MODIFY')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'TASK_DELETE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        
-        // Task time spent
-        elseif ($action == 'TASK_TIMESPENT_CREATE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'TASK_TIMESPENT_MODIFY')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'TASK_TIMESPENT_DELETE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        
-        // Shipping
-        elseif ($action == 'SHIPPING_CREATE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'SHIPPING_MODIFY')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'SHIPPING_VALIDATE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'SHIPPING_SENTBYMAIL')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'SHIPPING_DELETE')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
-        elseif ($action == 'SHIPPING_BUILDDOC')
-        {
-            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
-        }
+		$this->error = 'a';
 
+		if ($action == 'TASK_CREATE') {
+			return -1;
+		}
 		return 0;
-    }
+	}
 
-}
-?>
+}
\ No newline at end of file
-- 
GitLab