New: A module can overwrite all default language files by forcing priority on langs directories on its own lang directory.

This commit is contained in:
Laurent Destailleur 2011-01-30 16:05:57 +00:00
parent 1aa3409b52
commit 26d102c7b0
3 changed files with 71 additions and 34 deletions

View File

@ -5,12 +5,12 @@ For users:
- New: Can add information on current user on odt generation - New: Can add information on current user on odt generation
- New: Prefix on third party is not used by default. Hidden option - New: Prefix on third party is not used by default. Hidden option
SOCIETE_USEPREFIX can restore old feature. SOCIETE_USEPREFIX can restore old feature.
- New: Standing orders module use bank account from banks module - New: Standing orders module use bank account from banks module.
- New: Ask password when creating a user from a contact - New: Ask password when creating a user from a contact.
For developers: For developers:
- New: External modules can add their own menu manager - New: External modules can add their own menu manager.
- New: External modules can remove tabs - New: External modules can remove tabs.
- New: A module can overwrite all default language files by forcing - New: A module can overwrite all default language files by forcing
priority on langs directories on its own lang directory. priority on langs directories on its own lang directory.

View File

@ -88,15 +88,16 @@ class modMyModule extends DolibarrModules
// Dependencies // Dependencies
$this->depends = array(); // List of modules id that must be enabled if this module is enabled $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->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->phpmin = array(5,0); // Minimum version of PHP required by module
$this->need_dolibarr_version = array(2,5); // Minimum version of Dolibarr required by module $this->need_dolibarr_version = array(3,0); // Minimum version of Dolibarr required by module
$this->langfiles = array("langfiles@mymodule"); $this->langfiles = array("langfiles@mymodule");
// Constants // 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), // 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) ); // 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) // 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 // 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 // Example: $this->tabs = array('objecttype:+tabname1:Title1:@mymodule:/mymodule/mynewtab1.php?id=__ID__', // To add a new tab

View File

@ -55,8 +55,8 @@ class DolibarrModules
/** /**
* \brief Constructeur * Constructor
* \param DB handler d'acces base * @param DB Database access handler
*/ */
function DolibarrModules($DB) function DolibarrModules($DB)
{ {
@ -66,10 +66,10 @@ class DolibarrModules
/** /**
* \brief Fonction d'activation. Insere en base les constantes et boites du module * 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 array_sql Tableau de requete sql a executer a l'activation
* \param options Options when enabling module ('', 'noboxes') * @param options Options when enabling module ('', 'noboxes')
* \return int 1 if OK, 0 if KO * @return int 1 if OK, 0 if KO
*/ */
function _init($array_sql, $options='') function _init($array_sql, $options='')
{ {
@ -96,7 +96,7 @@ class DolibarrModules
// Insert activation login method // Insert activation login method
if (! $err) $err+=$this->insert_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(); if (! $err) $err+=$this->insert_const();
// Insere les boites dans llx_boxes_def // 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 * 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 array_sql tableau de requete sql a executer a la desactivation
* \param options Options when disabling module ('', 'noboxes') * @param options Options when disabling module ('', 'noboxes')
* \return int 1 if OK, 0 if KO * @return int 1 if OK, 0 if KO
*/ */
function _remove($array_sql, $options='') 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) // Remove activation of module's authentification method (MAIN_MODULE_MYMODULE_LOGIN_METHOD in llx_const)
if (! $err) $err+=$this->delete_login_method(); 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) // Remove list of module's available boxes (entry in llx_boxes)
if (! $err && $options != 'noboxes') $err+=$this->delete_boxes(); if (! $err && $options != 'noboxes') $err+=$this->delete_boxes();
@ -418,8 +421,8 @@ class DolibarrModules
/** /**
* \brief Insert constant to activate module * Insert constant to activate module
* \return int Nb of errors (0 if OK) * @return int Nb of errors (0 if OK)
*/ */
function _active() function _active()
{ {
@ -453,8 +456,8 @@ class DolibarrModules
/** /**
* \brief Remove activation line * Remove activation line
* \return int Nb of errors (0 if OK) * @return int Nb of errors (0 if OK)
**/ **/
function _unactive() function _unactive()
{ {
@ -807,8 +810,8 @@ class DolibarrModules
} }
/** /**
* \brief Insert constants defined into $this->const array into table llx_const * Insert constants defined into $this->const array into table llx_const
* \return int Number of errors (0 if OK) * @return int Number of errors (0 if OK)
*/ */
function insert_const() function insert_const()
{ {
@ -823,7 +826,7 @@ class DolibarrModules
$val = $this->const[$key][2]; $val = $this->const[$key][2];
$note = isset($this->const[$key][3])?$this->const[$key][3]:''; $note = isset($this->const[$key][3])?$this->const[$key][3]:'';
$visible = isset($this->const[$key][4])?$this->const[$key][4]:0; $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 // Clean
if (empty($visible)) $visible='0'; if (empty($visible)) $visible='0';
@ -873,6 +876,39 @@ class DolibarrModules
return $err; 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 * \brief Insert permissions definitions related to the module into llx_rights_def
* \param $reinitadminperms If 1, we also grant them to admin user * \param $reinitadminperms If 1, we also grant them to admin user
@ -975,8 +1011,8 @@ class DolibarrModules
/** /**
\brief Supprime les permissions * \brief Supprime les permissions
\return int Nombre d'erreurs (0 si ok) * \return int Nombre d'erreurs (0 si ok)
*/ */
function delete_permissions() function delete_permissions()
{ {
@ -991,7 +1027,7 @@ class DolibarrModules
if (! $this->db->query($sql)) if (! $this->db->query($sql))
{ {
$this->error=$this->db->lasterror(); $this->error=$this->db->lasterror();
dol_syslog("DolibarrModules::delete_dirs ".$this->error, LOG_ERR); dol_syslog("DolibarrModules::delete_permissions ".$this->error, LOG_ERR);
$err++; $err++;
} }
@ -1000,8 +1036,8 @@ class DolibarrModules
/** /**
* \brief Insere les menus dans llx_menu* * \brief Insert menus entries into llx_menu*
* \return int Nombre d'erreurs (0 si ok) * \return int Nb of errors (0 if OK)
*/ */
function insert_menus() function insert_menus()
{ {
@ -1299,8 +1335,8 @@ class DolibarrModules
} }
/** /**
* \brief Insert activation login method from modules in llx_const * Insert activation login method from modules in llx_const
* \return int Number of errors (0 if ok) * @return int Number of errors (0 if ok)
*/ */
function insert_login_method() function insert_login_method()
{ {
@ -1339,8 +1375,8 @@ class DolibarrModules
} }
/** /**
* \brief Remove activation login method from modules in llx_const * Remove activation login method from modules in llx_const
* \return int Nombre d'erreurs (0 si ok) * @return int Nombre d'erreurs (0 si ok)
*/ */
function delete_login_method() function delete_login_method()
{ {