diff --git a/ChangeLog b/ChangeLog index 341858d59ee..103a65f5c2e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -5,12 +5,12 @@ For users: - New: Can add information on current user on odt generation - New: Prefix on third party is not used by default. Hidden option SOCIETE_USEPREFIX can restore old feature. -- New: Standing orders module use bank account from banks module -- New: Ask password when creating a user from a contact +- New: Standing orders module use bank account from banks module. +- New: Ask password when creating a user from a contact. For developers: -- New: External modules can add their own menu manager -- New: External modules can remove tabs +- New: External modules can add their own menu manager. +- New: External modules can remove tabs. - New: A module can overwrite all default language files by forcing priority on langs directories on its own lang directory. diff --git a/dev/skeletons/modMyModule.class.php b/dev/skeletons/modMyModule.class.php index c746240a00b..6ff023ab8ea 100644 --- a/dev/skeletons/modMyModule.class.php +++ b/dev/skeletons/modMyModule.class.php @@ -88,15 +88,16 @@ class modMyModule extends DolibarrModules // Dependencies $this->depends = array(); // List of modules id that must be enabled if this module is enabled $this->requiredby = array(); // List of modules id to disable if this one is disabled - $this->phpmin = array(4,3); // Minimum version of PHP required by module - $this->need_dolibarr_version = array(2,5); // Minimum version of Dolibarr required by module + $this->phpmin = array(5,0); // Minimum version of PHP required by module + $this->need_dolibarr_version = array(3,0); // Minimum version of Dolibarr required by module $this->langfiles = array("langfiles@mymodule"); // Constants + // List of particular constants to add when module is enabled (key, 'chaine', value, desc, visible, 'current' or 'allentities', deleteonunactive) // Example: $this->const=array(0=>array('MYMODULE_MYNEWCONST1','chaine','myvalue','This is a constant to add',1), // 1=>array('MYMODULE_MYNEWCONST2','chaine','myvalue','This is another constant to add',0) ); // 2=>array('MAIN_MODULE_MYMODULE_NEEDSMARTY','chaine',1,'Constant to say module need smarty',1) - $this->const = array(); // List of particular constants to add when module is enabled (key, 'chaine', value, desc, visible, 0 or 'allentities') + $this->const = array(); // Array to add new pages in new tabs // Example: $this->tabs = array('objecttype:+tabname1:Title1:@mymodule:/mymodule/mynewtab1.php?id=__ID__', // To add a new tab diff --git a/htdocs/includes/modules/DolibarrModules.class.php b/htdocs/includes/modules/DolibarrModules.class.php index 0943ee3fd81..23a18ce87a4 100644 --- a/htdocs/includes/modules/DolibarrModules.class.php +++ b/htdocs/includes/modules/DolibarrModules.class.php @@ -55,8 +55,8 @@ class DolibarrModules /** - * \brief Constructeur - * \param DB handler d'acces base + * Constructor + * @param DB Database access handler */ function DolibarrModules($DB) { @@ -66,10 +66,10 @@ class DolibarrModules /** - * \brief Fonction d'activation. Insere en base les constantes et boites du module - * \param array_sql Tableau de requete sql a executer a l'activation - * \param options Options when enabling module ('', 'noboxes') - * \return int 1 if OK, 0 if KO + * Fonction d'activation. Insere en base les constantes et boites du module + * @param array_sql Tableau de requete sql a executer a l'activation + * @param options Options when enabling module ('', 'noboxes') + * @return int 1 if OK, 0 if KO */ function _init($array_sql, $options='') { @@ -96,7 +96,7 @@ class DolibarrModules // Insert activation login method if (! $err) $err+=$this->insert_login_method(); - // Insere les constantes associees au module dans llx_const + // Insert constant defined by modules, into llx_const if (! $err) $err+=$this->insert_const(); // Insere les boites dans llx_boxes_def @@ -164,10 +164,10 @@ class DolibarrModules } /** - * \brief Fonction de desactivation. Supprime de la base les constantes et boites du module - * \param array_sql tableau de requete sql a executer a la desactivation - * \param options Options when disabling module ('', 'noboxes') - * \return int 1 if OK, 0 if KO + * Fonction de desactivation. Supprime de la base les constantes et boites du module + * @param array_sql tableau de requete sql a executer a la desactivation + * @param options Options when disabling module ('', 'noboxes') + * @return int 1 if OK, 0 if KO */ function _remove($array_sql, $options='') { @@ -194,6 +194,9 @@ class DolibarrModules // Remove activation of module's authentification method (MAIN_MODULE_MYMODULE_LOGIN_METHOD in llx_const) if (! $err) $err+=$this->delete_login_method(); + // Remove constants defined by modules + if (! $err) $err+=$this->delete_const(); + // Remove list of module's available boxes (entry in llx_boxes) if (! $err && $options != 'noboxes') $err+=$this->delete_boxes(); @@ -418,8 +421,8 @@ class DolibarrModules /** - * \brief Insert constant to activate module - * \return int Nb of errors (0 if OK) + * Insert constant to activate module + * @return int Nb of errors (0 if OK) */ function _active() { @@ -453,8 +456,8 @@ class DolibarrModules /** - * \brief Remove activation line - * \return int Nb of errors (0 if OK) + * Remove activation line + * @return int Nb of errors (0 if OK) **/ function _unactive() { @@ -807,8 +810,8 @@ class DolibarrModules } /** - * \brief Insert constants defined into $this->const array into table llx_const - * \return int Number of errors (0 if OK) + * Insert constants defined into $this->const array into table llx_const + * @return int Number of errors (0 if OK) */ function insert_const() { @@ -823,7 +826,7 @@ class DolibarrModules $val = $this->const[$key][2]; $note = isset($this->const[$key][3])?$this->const[$key][3]:''; $visible = isset($this->const[$key][4])?$this->const[$key][4]:0; - $entity = ! empty($this->const[$key][5])?0:$conf->entity; + $entity = (! empty($this->const[$key][5]) && $this->const[$key][5]!='current')?0:$conf->entity; // Clean if (empty($visible)) $visible='0'; @@ -873,6 +876,39 @@ class DolibarrModules return $err; } + /** + * Remove constants with tags deleteonunactive + * @return int <0 if KO, 0 if OK + */ + function delete_const() + { + global $conf; + + $err=0; + + foreach ($this->const as $key => $value) + { + $name = $this->const[$key][0]; + $deleteonunactive = (! empty($this->const[$key][6]))?1:0; + + if ($deleteonunactive) + { + $sql = "DELETE FROM ".MAIN_DB_PREFIX."const"; + $sql.= " WHERE ".$this->db->decrypt('name')." = '".$name."'"; + $sql.= " AND entity in (0, ".$conf->entity.")"; + dol_syslog("DolibarrModules::delete_const sql=".$sql); + if (! $this->db->query($sql)) + { + $this->error=$this->db->lasterror(); + dol_syslog("DolibarrModules::delete_const ".$this->error, LOG_ERR); + $err++; + } + } + } + + return $err; + } + /** * \brief Insert permissions definitions related to the module into llx_rights_def * \param $reinitadminperms If 1, we also grant them to admin user @@ -975,8 +1011,8 @@ class DolibarrModules /** - \brief Supprime les permissions - \return int Nombre d'erreurs (0 si ok) + * \brief Supprime les permissions + * \return int Nombre d'erreurs (0 si ok) */ function delete_permissions() { @@ -991,7 +1027,7 @@ class DolibarrModules if (! $this->db->query($sql)) { $this->error=$this->db->lasterror(); - dol_syslog("DolibarrModules::delete_dirs ".$this->error, LOG_ERR); + dol_syslog("DolibarrModules::delete_permissions ".$this->error, LOG_ERR); $err++; } @@ -1000,8 +1036,8 @@ class DolibarrModules /** - * \brief Insere les menus dans llx_menu* - * \return int Nombre d'erreurs (0 si ok) + * \brief Insert menus entries into llx_menu* + * \return int Nb of errors (0 if OK) */ function insert_menus() { @@ -1299,8 +1335,8 @@ class DolibarrModules } /** - * \brief Insert activation login method from modules in llx_const - * \return int Number of errors (0 if ok) + * Insert activation login method from modules in llx_const + * @return int Number of errors (0 if ok) */ function insert_login_method() { @@ -1339,8 +1375,8 @@ class DolibarrModules } /** - * \brief Remove activation login method from modules in llx_const - * \return int Nombre d'erreurs (0 si ok) + * Remove activation login method from modules in llx_const + * @return int Nombre d'erreurs (0 si ok) */ function delete_login_method() {