From 0bee9e9362eba25928b8c814e2804a23b7c8f506 Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Fri, 2 Apr 2010 17:09:26 +0000 Subject: [PATCH] Fix: store triggers path to $conf --- dev/skeletons/modMyModule.class.php | 5 +- htdocs/admin/triggers.php | 7 +- htdocs/core/conf.class.php | 21 ++++-- .../modules/DolibarrModules.class.php | 66 +++++++++++++++++++ htdocs/interfaces.class.php | 33 +--------- 5 files changed, 88 insertions(+), 44 deletions(-) diff --git a/dev/skeletons/modMyModule.class.php b/dev/skeletons/modMyModule.class.php index 126949f029d..befaf88d148 100644 --- a/dev/skeletons/modMyModule.class.php +++ b/dev/skeletons/modMyModule.class.php @@ -70,13 +70,16 @@ class modMyModule extends DolibarrModules // If file is in theme/yourtheme/img directory under name object_pictovalue.png, use this->picto='pictovalue' // If file is in module/img directory under name object_pictovalue.png, use this->picto='pictovalue@module' $this->picto='generic'; + + // Defined if the directory /mymodule/inc/triggers/ contains triggers or not + $this->triggers = 0; // Data directories to create when module is enabled. // Example: this->dirs = array("/mymodule/temp"); $this->dirs = array(); $r=0; - // Relative path to module style sheet if exists. Example: '/mymodule/mycss.css'. + // Relative path to module style sheet if exists. Example: '/mymodule/css/mycss.css'. $this->style_sheet = ''; // Config pages. Put here list of php page names stored in admmin directory used to setup module. diff --git a/htdocs/admin/triggers.php b/htdocs/admin/triggers.php index 070edb5d7ea..e2572420197 100644 --- a/htdocs/admin/triggers.php +++ b/htdocs/admin/triggers.php @@ -23,7 +23,6 @@ */ require("../main.inc.php"); -include_once(DOL_DOCUMENT_ROOT ."/interfaces.class.php"); if (!$user->admin) accessforbidden(); @@ -56,17 +55,13 @@ print " ".$langs->trans("Active")."\n"; print "  \n"; print "\n"; -// Define dir directory -$interfaces=new Interfaces($db); -$interfaces->getModulesTriggers(); -$handle=opendir($dir); $files = array(); $modules = array(); $orders = array(); $i = 0; -foreach($interfaces->dir as $dir) +foreach($conf->triggers_modules as $dir) { // Check if directory exists if (!is_dir($dir)) continue; diff --git a/htdocs/core/conf.class.php b/htdocs/core/conf.class.php index 927c48c9e1a..813243cf9ab 100644 --- a/htdocs/core/conf.class.php +++ b/htdocs/core/conf.class.php @@ -53,12 +53,13 @@ class Conf //! Used to store entity for multi-company (default 1) var $entity=1; - var $css_modules = array(); - var $tabs_modules = array(); - var $need_smarty = array(); - var $modules = array(); + var $css_modules = array(); + var $tabs_modules = array(); + var $triggers_modules = array(); + var $need_smarty = array(); + var $modules = array(); - var $logbuffer = array(); + var $logbuffer = array(); /** * Constructor @@ -80,6 +81,9 @@ class Conf function setValues($db) { dol_syslog("Conf::setValues"); + + // Directory of core triggers + $this->triggers_modules[] = DOL_DOCUMENT_ROOT . "/includes/triggers"; // Avoid warning if not defined if (empty($this->db->dolibarr_main_db_encryption)) $this->db->dolibarr_main_db_encryption=0; @@ -124,6 +128,13 @@ class Conf $this->tabs_modules[$params[0]][]=$value; //print 'xxx'.$params[0].'-'.$value; } + // If this is constant for triggers activated by a module + if (preg_match('/^MAIN_MODULE_([A-Z]+)_TRIGGERS$/i',$key,$regs) && $value) + { + $modulename = strtolower($regs[1]); + $pathoftrigger = DOL_DOCUMENT_ROOT.'/'.$modulename.'/inc/triggers/'; + $this->triggers_modules[] = $pathoftrigger; + } // If this is constant to force a module directories (used to manage some exceptions) // Should not be used by modules if (preg_match('/^MAIN_MODULE_([A-Z_]+)_DIR_/i',$key,$reg) && $value) diff --git a/htdocs/includes/modules/DolibarrModules.class.php b/htdocs/includes/modules/DolibarrModules.class.php index 80721aa00a3..cadbfc010a8 100644 --- a/htdocs/includes/modules/DolibarrModules.class.php +++ b/htdocs/includes/modules/DolibarrModules.class.php @@ -89,6 +89,9 @@ class DolibarrModules // Insert new pages for tabs into llx_const if (! $err) $err+=$this->insert_tabs(); + + // Insert activation triggers + if (! $err) $err+=$this->insert_triggers(); // Insere les constantes associees au module dans llx_const if (! $err) $err+=$this->insert_const(); @@ -181,6 +184,9 @@ class DolibarrModules // Remove activation of module's new tabs if (! $err) $err+=$this->delete_tabs(); + + // Remove activation of module's triggers + if (! $err) $err+=$this->delete_triggers(); // Remove list of module's available boxes if (! $err && $options != 'noboxes') $err+=$this->delete_boxes(); @@ -1199,6 +1205,66 @@ class DolibarrModules return $err; } + + /** + * \brief Insert activation triggers from modules in llx_const + * \return int Number of errors (0 if ok) + */ + function insert_triggers() + { + global $conf; + + $err=0; + + if (! empty($this->triggers)) + { + $sql = "INSERT INTO ".MAIN_DB_PREFIX."const ("; + $sql.= "name"; + $sql.= ", type"; + $sql.= ", value"; + $sql.= ", note"; + $sql.= ", visible"; + $sql.= ", entity"; + $sql.= ")"; + $sql.= " VALUES ("; + $sql.= $this->db->encrypt($this->const_name."_TRIGGERS",1); + $sql.= ", 'chaine'"; + $sql.= ", ".$this->db->encrypt($this->triggers,1); + $sql.= ", null"; + $sql.= ", '0'"; + $sql.= ", ".$conf->entity; + $sql.= ")"; + + dol_syslog("DolibarrModules::insert_triggers sql=".$sql); + $resql=$this->db->query($sql); + } + return $err; + } + + /** + * \brief Remove activation triggers from modules in llx_const + * \return int Nombre d'erreurs (0 si ok) + */ + function delete_triggers() + { + global $conf; + + $err=0; + + $sql = "DELETE FROM ".MAIN_DB_PREFIX."const"; + $sql.= " WHERE ".$this->db->decrypt('name')." LIKE '".$this->const_name."_TRIGGERS'"; + $sql.= " AND entity = ".$conf->entity; + + dol_syslog("DolibarrModules::delete_triggers sql=".$sql); + if (! $this->db->query($sql)) + { + $this->error=$this->db->lasterror(); + dol_syslog("DolibarrModules::delete_triggers ".$this->error, LOG_ERR); + $err++; + } + + return $err; + } } ?> \ No newline at end of file diff --git a/htdocs/interfaces.class.php b/htdocs/interfaces.class.php index cd634602fee..996c84c6d17 100644 --- a/htdocs/interfaces.class.php +++ b/htdocs/interfaces.class.php @@ -62,11 +62,8 @@ class Interfaces { dol_syslog('interface::run_triggers was called with wrong parameters object='.is_object($object).' user='.is_object($user).' langs='.is_object($langs).' conf='.is_object($conf), LOG_WARNING); } - - // Load the list of directories containing triggers - $this->getModulesTriggers(); - foreach($this->dir as $dir) + foreach($conf->triggers_modules as $dir) { // Check if directory exists if (!is_dir($dir)) continue; @@ -155,34 +152,6 @@ class Interfaces return $nbok; } } - - /** - * \brief Returns the list of directories containing triggers. - * \return array List of directories. - */ - function getModulesTriggers() - { - global $conf; - - // Directory of core triggers - $this->dir[] = DOL_DOCUMENT_ROOT . "/includes/triggers"; - - 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->dir[] = $pathoftrigger; - } - } - } - } - } } ?>