Qual: Amélioration du code pour isoler les méthodes d'insertion des permissions, boites et constantes,

This commit is contained in:
Laurent Destailleur 2005-04-09 15:52:07 +00:00
parent 65b44101d2
commit 3c6dff12ec

View File

@ -24,22 +24,29 @@
* *
*/ */
/** \file htdocs/includes/modules/DolibarrModules.class.php /**
\file htdocs/includes/modules/DolibarrModules.class.php
\brief Fichier de description et activation des modules Dolibarr \brief Fichier de description et activation des modules Dolibarr
*/ */
/** \class DolibarrModules /**
\class DolibarrModules
\brief Classe mère des classes de description et activation des modules Dolibarr \brief Classe mère des classes de description et activation des modules Dolibarr
*/ */
class DolibarrModules class DolibarrModules
{ {
var $db; // Handler d'accès aux base var $db; // Handler d'accès aux bases
var $boxes; // Tableau des boites var $boxes; // Tableau des boites
var $const; // Tableau des constantes var $const; // Tableau des constantes
var $rights; // Tableau des droits
var $dbversion;
/** \brief Constructeur /**
* \brief Constructeur
* \param DB handler d'accès base * \param DB handler d'accès base
*/ */
function DolibarrModules($DB) function DolibarrModules($DB)
@ -49,9 +56,200 @@ class DolibarrModules
} }
/**
* \brief Fonction d'activation. Insère en base les constantes et boites du module
* \param array_sql tableau de requete sql a exécuter à l'activation
* \return int 1 si ok, 0 si erreur
*/
function _init($array_sql)
{
global $langs;
// Insère une entrée dans llx_dolibarr_modules
$err+=$this->_dbactive();
// Insère la constante d'activation module
$err+=$this->_active();
// Insère les boites dans llx_boxes_def
$err+=$this->insert_boxes();
// Insère les constantes associées au module dans llx_const
$err+=$this->insert_const();
// Insère les permissions associées au module actif dans llx_rights_def
$err+=$this->insert_permissions();
// Créé les répertoires
if (is_array($this->dirs))
{
foreach ($this->dirs as $key => $value)
{
$dir = $value;
if ($dir && ! file_exists($dir))
{
umask(0);
if (! @mkdir($dir, 0755))
{
$this->error = $langs->trans("ErrorCanNotCreateDir",$dir);
dolibarr_syslog("DolibarrModules::_init error");
}
}
}
}
// Exécute les requetes sql complémentaires
for ($i = 0 ; $i < sizeof($array_sql) ; $i++)
{
if (! $this->db->query($array_sql[$i]))
{
$err++;
}
}
// Renvoi valeur de retour
if ($err > 0) return 0;
return 1;
}
/** \brief Fonction de désactivation. Supprime de la base les constantes et boites du module
* \param array_sql tableau de requete sql a exécuter à la désactivation
* \return int 1 si ok, 0 si erreur
*/
function _remove($array_sql)
{
$err = 0;
// Supprime entrée des modules
$err+=$this->_dbunactive();
// Supprime la constante d'activation du module
$err+=$this->_unactive();
// Supprime les droits de la liste des droits disponibles
$err+=$this->delete_permissions();
// Supprime les boites de la liste des boites disponibles
$err+=$this->delete_boxes();
// Exécute les requetes sql complémentaires
for ($i = 0 ; $i < sizeof($array_sql) ; $i++)
{
if (!$this->db->query($array_sql[$i]))
{
$err++;
}
}
// Renvoi valeur de retour
if ($err > 0) return 0;
return 1;
}
/**
\brief Retourne le nom traduit du module si la traduction existe dans admin.lang,
sinon le nom défini par défaut dans le module.
\return string Nom du module traduit
*/
function getName()
{
global $langs;
$langs->load("admin");
if ($langs->trans("Module".$this->numero."Name") != ("Module".$this->numero."Name"))
{
// Si traduction du nom du module existe
return $langs->trans("Module".$this->numero."Name");
}
else
{
// Si traduction du nom du module n'existe pas, on prend définition en dur dans module
return $this->name;
}
}
/**
\brief Retourne la description traduite du module si la traduction existe dans admin.lang,
sinon la description définie par défaut dans le module.
\return string Nom du module traduit
*/
function getDesc()
{
global $langs;
$langs->load("admin");
if ($langs->trans("Module".$this->numero."Desc") != ("Module".$this->numero."Desc"))
{
// Si traduction de la description du module existe
return $langs->trans("Module".$this->numero."Desc");
}
else
{
// Si traduction de la description du module n'existe pas, on prend définition en dur dans module
return $this->description;
}
}
/**
\brief Retourne la version du module.
Pour les modules à l'état 'experimental', retourne la traduction de 'experimental'
Pour les modules 'dolibarr', retourne la version de Dolibarr
Pour les autres modules, retourne la version du module
\return string Nom du module traduit
*/
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");
}
/**
\brief Retourne la version en base du module.
\return string Nom du module traduit
*/
function getDbVersion()
{
$sql ="SELECT active_version FROM ".MAIN_DB_PREFIX."dolibarr_modules";
$sql .= " WHERE numero=".$this->numero." AND active = 1";
$resql = $this->db->query($sql);
if ($resql)
{
$num = $this->db->num_rows($resql);
if ($num > 0)
{
$row = $this->db->fetch_row($resql);
$this->dbversion = $row[0];
}
$this->db->free($resql);
}
return $this->dbversion;
}
/**
\brief Insère ligne module
\return int Nombre d'erreurs (0 si ok)
*/
function _dbactive() function _dbactive()
{ {
$err = 0; $err = 0;
$sql_del = "DELETE FROM ".MAIN_DB_PREFIX."dolibarr_modules WHERE numero=".$this->numero.";"; $sql_del = "DELETE FROM ".MAIN_DB_PREFIX."dolibarr_modules WHERE numero=".$this->numero.";";
$this->db->query($sql_del); $this->db->query($sql_del);
@ -60,26 +258,34 @@ class DolibarrModules
$sql .= $this->numero.",1,now(),'".$this->version."')"; $sql .= $this->numero.",1,now(),'".$this->version."')";
$this->db->query($sql); $this->db->query($sql);
return $err;
} }
/**
\brief Supprime ligne module
\return int Nombre d'erreurs (0 si ok)
*/
function _dbunactive() function _dbunactive()
{ {
$err = 0; $err = 0;
$sql_del = "DELETE FROM ".MAIN_DB_PREFIX."dolibarr_modules WHERE numero=".$this->numero.";"; $sql_del = "DELETE FROM ".MAIN_DB_PREFIX."dolibarr_modules WHERE numero=".$this->numero.";";
$this->db->query($sql_del); $this->db->query($sql_del);
return $err;
} }
/** \brief Fonction d'activation. Insère en base les constantes et boites du module
* \param array_sql tableau de requete sql a exécuter à l'activation /**
\brief Insère constante d'activation module
\return int Nombre d'erreurs (0 si ok)
*/ */
function _init($array_sql) function _active()
{ {
global $langs;
$this->_dbactive();
// Insère les constantes
$err = 0; $err = 0;
$sql_del = "DELETE FROM ".MAIN_DB_PREFIX."const WHERE name = '".$this->const_name."';"; $sql_del = "DELETE FROM ".MAIN_DB_PREFIX."const WHERE name = '".$this->const_name."';";
$this->db->query($sql_del); $this->db->query($sql_del);
@ -90,7 +296,33 @@ class DolibarrModules
$err++; $err++;
} }
// Insère les boxes dans llx_boxes_def return $err;
}
/**
\brief Supprime constante d'activation module
\return int Nombre d'erreurs (0 si ok)
*/
function _unactive()
{
$err = 0;
$sql_del = "DELETE FROM ".MAIN_DB_PREFIX."const WHERE name = '".$this->const_name."';";
$this->db->query($sql_del);
return $err;
}
/**
\brief Insère les boites associées au module dans llx_boxes_def
\return int Nombre d'erreurs (0 si ok)
*/
function insert_boxes()
{
$err=0;
foreach ($this->boxes as $key => $value) foreach ($this->boxes as $key => $value)
{ {
$titre = $this->boxes[$key][0]; $titre = $this->boxes[$key][0];
@ -117,7 +349,41 @@ class DolibarrModules
} }
} }
// Définit les constantes associées return $err;
}
/**
\brief Supprime les boites
\return int Nombre d'erreurs (0 si ok)
*/
function delete_boxes()
{
$err=0;
foreach ($this->boxes as $key => $value)
{
$titre = $this->boxes[$key][0];
$file = $this->boxes[$key][1];
$sql = "DELETE FROM ".MAIN_DB_PREFIX."boxes_def WHERE file = '".$file."'";
if (! $this->db->query($sql) )
{
$err++;
}
}
return $err;
}
/**
\brief Insère les constantes associées au module dans llx_const
\return int Nombre d'erreurs (0 si ok)
*/
function insert_const()
{
$err=0;
foreach ($this->const as $key => $value) foreach ($this->const as $key => $value)
{ {
$name = $this->const[$key][0]; $name = $this->const[$key][0];
@ -161,9 +427,17 @@ class DolibarrModules
} }
} }
// Définit les permissions associées au module actif return $err;
if (is_array($this->rights)) }
/**
\brief Insère les permissions associées au module dans llx_rights_def
\return int Nombre d'erreurs (0 si ok)
*/
function insert_permissions()
{ {
$err=0;
foreach ($this->rights as $key => $value) foreach ($this->rights as $key => $value)
{ {
$r_id = $this->rights[$key][0]; $r_id = $this->rights[$key][0];
@ -201,185 +475,27 @@ class DolibarrModules
$this->db->query($sql); $this->db->query($sql);
} }
}
// Créé les répertoires return $err;
if (is_array($this->dirs))
{
foreach ($this->dirs as $key => $value)
{
$dir = $value;
if ($dir && ! file_exists($dir))
{
umask(0);
if (! @mkdir($dir, 0755))
{
$this->error = $langs->trans("ErrorCanNotCreateDir",$dir);
dolibarr_syslog("DolibarrModules::_init error");
}
}
}
}
// Exécute les requetes sql complémentaires
for ($i = 0 ; $i < sizeof($array_sql) ; $i++)
{
if (! $this->db->query($array_sql[$i]))
{
$err++;
}
}
if ($err > 0)
{
return 0;
}
else
{
return 1;
}
} }
/** \brief Fonction de désactivation. Supprime de la base les constantes et boites du module /**
* \param array_sql tableau de requete sql a exécuter à la désactivation \brief Supprime les permissions
* \return int 0 si erreur, 1 si ok \return int Nombre d'erreurs (0 si ok)
*/ */
function _remove($array_sql) function delete_permissions()
{ {
$err=0; $err=0;
$this->_dbunactive();
// Supprime la constante d'activation du module
$sql = "DELETE FROM ".MAIN_DB_PREFIX."const WHERE name = '".$this->const_name."'";
if (!$this->db->query($sql))
{
$err++;
}
// Supprime les droits de la liste des droits disponibles
$sql = "DELETE FROM ".MAIN_DB_PREFIX."rights_def WHERE module = '".$this->rights_class."';"; $sql = "DELETE FROM ".MAIN_DB_PREFIX."rights_def WHERE module = '".$this->rights_class."';";
if (!$this->db->query($sql)) if (!$this->db->query($sql))
{ {
$err++; $err++;
} }
// Supprime les boites de la liste des boites disponibles return $err;
foreach ($this->boxes as $key => $value)
{
$titre = $this->boxes[$key][0];
$file = $this->boxes[$key][1];
$sql = "DELETE FROM ".MAIN_DB_PREFIX."boxes_def WHERE file = '".$file."'";
if (! $this->db->query($sql) )
{
$err++;
}
} }
// Exécute les requets sql complémentaires
for ($i = 0 ; $i < sizeof($array_sql) ; $i++)
{
if (!$this->db->query($array_sql[$i]))
{
$err++;
}
}
if ($err > 0)
{
return 0;
}
else
{
return 1;
}
}
/** \brief Retourne le nom traduit du module si la traduction existe dans admin.lang,
* sinon le nom défini par défaut dans le module.
* \return string Nom du module traduit
*/
function getName()
{
global $langs;
$langs->load("admin");
if ($langs->trans("Module".$this->numero."Name") != ("Module".$this->numero."Name"))
{
// Si traduction du nom du module existe
return $langs->trans("Module".$this->numero."Name");
}
else
{
// Si traduction du nom du module n'existe pas, on prend définition en dur dans module
return $this->name;
}
}
/** \brief Retourne la description traduite du module si la traduction existe dans admin.lang,
* sinon la description définie par défaut dans le module.
* \return string Nom du module traduit
*/
function getDesc()
{
global $langs;
$langs->load("admin");
if ($langs->trans("Module".$this->numero."Desc") != ("Module".$this->numero."Desc"))
{
// Si traduction de la description du module existe
return $langs->trans("Module".$this->numero."Desc");
}
else
{
// Si traduction de la description du module n'existe pas, on prend définition en dur dans module
return $this->description;
}
}
/** \brief Retourne la version du module.
* Pour les modules à l'état 'experimental', retourne la traduction de 'experimental'
* Pour les modules 'dolibarr', retourne la version de Dolibarr
* Pour les autres modules, retourne la version du module
* \return string Nom du module traduit
*/
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 getDbVersion()
{
$sql ="SELECT active_version FROM ".MAIN_DB_PREFIX."dolibarr_modules";
$sql .= " WHERE numero=".$this->numero." AND active = 1";
$resql = $this->db->query($sql);
if ($resql)
{
$num = $this->db->num_rows($resql);
if ($num > 0)
{
$row = $this->db->fetch_row($resql);
$this->dbversion = $row[0];
}
$this->db->free($resql);
}
return $this->dbversion;
}
} }
?> ?>