dolibarr/htdocs/includes/modules/DolibarrModules.class.php

502 lines
15 KiB
PHP
Raw Normal View History

<?php
2003-11-15 18:41:07 +01:00
/* Copyright (C) 2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
* Copyright (C) 2004 Sebastien Di Cintio <sdicintio@ressource-toi.org>
* Copyright (C) 2004 Benoit Mortier <benoit.mortier@opensides.be>
* Copyright (C) 2004 Eric Seigne <eric.seigne@ryxeo.com>
* Copyright (C) 2005 Laurent Destailleur <eldy@users.sourceforge.net>
2003-11-15 18:41:07 +01:00
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
* $Id$
* $Source$
*
*/
/**
\file htdocs/includes/modules/DolibarrModules.class.php
\brief Fichier de description et activation des modules Dolibarr
*/
/**
\class DolibarrModules
\brief Classe m<EFBFBD>re des classes de description et activation des modules Dolibarr
*/
2003-11-15 18:41:07 +01:00
class DolibarrModules
{
var $db; // Handler d'acc<63>s aux bases
var $boxes; // Tableau des boites
var $const; // Tableau des constantes
var $rights; // Tableau des droits
var $dbversion;
/**
* \brief Constructeur
* \param DB handler d'acc<EFBFBD>s base
*/
function DolibarrModules($DB)
{
$this->db = $DB ;
$this->dbversion = "-";
}
/**
* \brief Fonction d'activation. Ins<EFBFBD>re en base les constantes et boites du module
* \param array_sql tableau de requete sql a ex<EFBFBD>cuter <EFBFBD> l'activation
* \return int 1 si ok, 0 si erreur
*/
function _init($array_sql)
{
global $langs;
// Ins<6E>re une entr<74>e dans llx_dolibarr_modules
$err+=$this->_dbactive();
// Ins<6E>re la constante d'activation module
$err+=$this->_active();
// Ins<6E>re les boites dans llx_boxes_def
$err+=$this->insert_boxes();
// Ins<6E>re les constantes associ<63>es au module dans llx_const
$err+=$this->insert_const();
// Ins<6E>re les permissions associ<63>es au module actif dans llx_rights_def
$err+=$this->insert_permissions();
// Cr<43><72> 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<45>cute les requetes sql compl<70>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<EFBFBD>sactivation. Supprime de la base les constantes et boites du module
* \param array_sql tableau de requete sql a ex<EFBFBD>cuter <EFBFBD> la d<EFBFBD>sactivation
* \return int 1 si ok, 0 si erreur
*/
function _remove($array_sql)
{
$err = 0;
// Supprime entr<74>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<45>cute les requetes sql compl<70>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<EFBFBD>fini par d<EFBFBD>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<EFBFBD>finie par d<EFBFBD>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 <EFBFBD> l'<27>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;
}
2005-04-08 16:48:37 +02:00
/**
\brief Ins<EFBFBD>re ligne module
\return int Nombre d'erreurs (0 si ok)
*/
function _dbactive()
{
$err = 0;
$sql_del = "DELETE FROM ".MAIN_DB_PREFIX."dolibarr_modules WHERE numero=".$this->numero.";";
$this->db->query($sql_del);
$sql ="INSERT INTO ".MAIN_DB_PREFIX."dolibarr_modules (numero,active,active_date,active_version)";
$sql .= " VALUES (";
$sql .= $this->numero.",1,now(),'".$this->version."')";
$this->db->query($sql);
return $err;
}
/**
\brief Supprime ligne module
\return int Nombre d'erreurs (0 si ok)
*/
function _dbunactive()
{
$err = 0;
$sql_del = "DELETE FROM ".MAIN_DB_PREFIX."dolibarr_modules WHERE numero=".$this->numero.";";
$this->db->query($sql_del);
return $err;
}
2005-04-08 16:48:37 +02:00
/**
\brief Ins<EFBFBD>re constante d'activation module
\return int Nombre d'erreurs (0 si ok)
*/
function _active()
{
$err = 0;
$sql_del = "DELETE FROM ".MAIN_DB_PREFIX."const WHERE name = '".$this->const_name."';";
$this->db->query($sql_del);
$sql ="INSERT INTO ".MAIN_DB_PREFIX."const (name,value,visible) VALUES
('".$this->const_name."','1',0);";
if (!$this->db->query($sql))
{
$err++;
}
return $err;
}
2005-04-08 16:48:37 +02:00
/**
\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<EFBFBD>re les boites associ<EFBFBD>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)
{
$titre = $this->boxes[$key][0];
$file = $this->boxes[$key][1];
$sql = "SELECT count(*) FROM ".MAIN_DB_PREFIX."boxes_def WHERE name ='".$titre."'";
$result=$this->db->query($sql);
if ($result)
{
$row = $this->db->fetch_row($result);
if ($row[0] == 0)
{
$sql = "INSERT INTO ".MAIN_DB_PREFIX."boxes_def (name, file) VALUES ('".$titre."','".$file."')";
if (! $this->db->query($sql))
{
$err++;
}
}
}
else
{
$err++;
}
}
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++;
}
}
2005-04-08 16:48:37 +02:00
return $err;
}
/**
\brief Ins<EFBFBD>re les constantes associ<EFBFBD>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)
{
$name = $this->const[$key][0];
$type = $this->const[$key][1];
$val = $this->const[$key][2];
$note = $this->const[$key][3];
$visible= $this->const[$key][4];
$sql = "SELECT count(*) FROM ".MAIN_DB_PREFIX."const WHERE name ='".$name."'";
$result=$this->db->query($sql);
if ($result)
{
$row = $this->db->fetch_row($result);
if ($row[0] == 0)
{
if (! $visible) $visible='0';
if (strlen($note))
{
$sql = "INSERT INTO ".MAIN_DB_PREFIX."const (name,type,value,note,visible) VALUES ('$name','$type','$val','$note','$visible');";
}
elseif (strlen($val))
{
$sql = "INSERT INTO ".MAIN_DB_PREFIX."const (name,type,value,visible) VALUES ('$name','$type','$val','$visible');";
}
else
{
$sql = "INSERT INTO ".MAIN_DB_PREFIX."const (name,type,visible) VALUES ('$name','$type','$visible');";
}
if (! $this->db->query($sql) )
{
$err++;
}
}
}
else
{
$err++;
}
}
return $err;
}
2005-04-08 16:48:37 +02:00
/**
\brief Ins<EFBFBD>re les permissions associ<EFBFBD>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)
{
$r_id = $this->rights[$key][0];
$r_desc = $this->rights[$key][1];
$r_type = $this->rights[$key][2];
$r_def = $this->rights[$key][3];
$r_perms = $this->rights[$key][4];
$r_subperms = $this->rights[$key][5];
$r_modul = $this->rights_class;
if (strlen($r_perms) )
{
if (strlen($r_subperms) )
{
$sql = "INSERT INTO ".MAIN_DB_PREFIX."rights_def ";
$sql .= " (id, libelle, module, type, bydefault, perms, subperms)";
$sql .= " VALUES ";
$sql .= "(".$r_id.",'".addslashes($r_desc)."','".$r_modul."','".$r_type."',".$r_def.",'".$r_perms."','".$r_subperms."');";
}
else
{
$sql = "INSERT INTO ".MAIN_DB_PREFIX."rights_def ";
$sql .= " (id, libelle, module, type, bydefault, perms)";
$sql .= " VALUES ";
$sql .= "(".$r_id.",'".addslashes($r_desc)."','".$r_modul."','".$r_type."',".$r_def.",'".$r_perms."');";
}
}
else
{
$sql = "INSERT INTO ".MAIN_DB_PREFIX."rights_def ";
$sql .= " (id, libelle, module, type, bydefault)";
$sql .= " VALUES ";
$sql .= "(".$r_id.",'".addslashes($r_desc)."','".$r_modul."','".$r_type."',".$r_def.");";
}
$this->db->query($sql);
}
return $err;
}
/**
\brief Supprime les permissions
\return int Nombre d'erreurs (0 si ok)
*/
function delete_permissions()
{
$err=0;
$sql = "DELETE FROM ".MAIN_DB_PREFIX."rights_def WHERE module = '".$this->rights_class."';";
if (!$this->db->query($sql))
{
$err++;
}
return $err;
}
2003-11-15 18:41:07 +01:00
}
?>