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: 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.

View File

@ -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

View File

@ -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()
{