2
0
forked from Wavyzz/dolibarr

Change to support different page code in HTML output

This commit is contained in:
Laurent Destailleur
2008-10-09 17:53:37 +00:00
parent 248a7d7ee2
commit d2f1cc20c1
2 changed files with 85 additions and 60 deletions

View File

@@ -79,7 +79,7 @@ class DoliDb
\param pass Mot de passe \param pass Mot de passe
\param name Nom de la database \param name Nom de la database
\param port Port of database server \param port Port of database server
\return int 1 en cas de succ<EFBFBD>s, 0 sinon \return int 1 en cas de succes, 0 sinon
*/ */
function DoliDb($type='mysql', $host, $user, $pass, $name='', $port=0) function DoliDb($type='mysql', $host, $user, $pass, $name='', $port=0)
{ {
@@ -95,12 +95,14 @@ class DoliDb
$this->transaction_opened=0; $this->transaction_opened=0;
//print "Name DB: $host,$user,$pass,$name<br>";
if (! function_exists("mysql_connect")) if (! function_exists("mysql_connect"))
{ {
$this->connected = 0; $this->connected = 0;
$this->ok = 0; $this->ok = 0;
$this->error="Mysql PHP functions for using MySql driver are not available in this version of PHP"; $this->error="Mysql PHP functions for using MySql driver are not available in this version of PHP. Try to use another driver.";
dolibarr_syslog("DoliDB::DoliDB : Mysql PHP functions for using Mysql driver are not available in this version of PHP",LOG_ERR); dolibarr_syslog("DoliDB::DoliDB : Mysql PHP functions for using Mysql driver are not available in this version of PHP. Try to use another driver.",LOG_ERR);
return $this->ok; return $this->ok;
} }
@@ -350,7 +352,7 @@ class DoliDb
if (! $this->database_name) if (! $this->database_name)
{ {
// Ordre SQL ne n<EFBFBD>cessitant pas de connexion <EFBFBD> une base (exemple: CREATE DATABASE) // Ordre SQL ne necessitant pas de connexion a une base (exemple: CREATE DATABASE)
$ret = mysql_query($query, $this->db); $ret = mysql_query($query, $this->db);
} }
else else
@@ -381,7 +383,7 @@ class DoliDb
*/ */
function fetch_object($resultset=0) function fetch_object($resultset=0)
{ {
// Si le resultset n'est pas fourni, on prend le dernier utilis<EFBFBD> sur cette connexion // Si le resultset n'est pas fourni, on prend le dernier utilise sur cette connexion
if (! is_resource($resultset)) { $resultset=$this->results; } if (! is_resource($resultset)) { $resultset=$this->results; }
return mysql_fetch_object($resultset); return mysql_fetch_object($resultset);
} }
@@ -393,7 +395,7 @@ class DoliDb
*/ */
function fetch_array($resultset=0) function fetch_array($resultset=0)
{ {
// Si le resultset n'est pas fourni, on prend le dernier utilis<EFBFBD> sur cette connexion // Si le resultset n'est pas fourni, on prend le dernier utilise sur cette connexion
if (! is_resource($resultset)) { $resultset=$this->results; } if (! is_resource($resultset)) { $resultset=$this->results; }
return mysql_fetch_array($resultset); return mysql_fetch_array($resultset);
} }
@@ -406,7 +408,7 @@ class DoliDb
*/ */
function fetch_row($resultset=0) function fetch_row($resultset=0)
{ {
// Si le resultset n'est pas fourni, on prend le dernier utilis<EFBFBD> sur cette connexion // Si le resultset n'est pas fourni, on prend le dernier utilise sur cette connexion
if (! is_resource($resultset)) { $resultset=$this->results; } if (! is_resource($resultset)) { $resultset=$this->results; }
return @mysql_fetch_row($resultset); return @mysql_fetch_row($resultset);
} }

View File

@@ -22,27 +22,27 @@
/** /**
* \file htdocs/lib/databases/mysqli.lib.php * \file htdocs/lib/databases/mysqli.lib.php
* \brief Fichier de la classe permettant de g<>rer une base mysql * \brief Class file to manage Dolibarr database access for a Mysql database
* \version $Id$ * \version $Id$
*/ */
// Pour compatibilit<EFBFBD> lors de l'upgrade // For compatibility during upgrade
if (! defined('DOL_DOCUMENT_ROOT')) define('DOL_DOCUMENT_ROOT', '../..'); if (! defined('DOL_DOCUMENT_ROOT')) define('DOL_DOCUMENT_ROOT', '../..');
if (! defined('ADODB_DATE_VERSION')) include_once(DOL_DOCUMENT_ROOT."/includes/adodbtime/adodb-time.inc.php"); if (! defined('ADODB_DATE_VERSION')) include_once(DOL_DOCUMENT_ROOT."/includes/adodbtime/adodb-time.inc.php");
/** /**
* \class DoliDb * \class DoliDb
* \brief Classe permettant de g<>r<EFBFBD>r la database de dolibarr * \brief Class to manage Dolibarr database access for a Mysql database
*/ */
class DoliDb class DoliDb
{ {
//! Handler de base //! Database handler
var $db; var $db;
//! Nom du gestionnaire //! Database type
var $type='mysqli'; var $type='mysqli';
//! Charset //! Charset used to force charset when creating database
var $forcecharset='latin1'; var $forcecharset='latin1';
//! Collate //! Collate used to force collate when creating database
var $forcecollate='latin1_swedish_ci'; var $forcecollate='latin1_swedish_ci';
//! Version min database //! Version min database
var $versionmin=array(4,1,0); var $versionmin=array(4,1,0);
@@ -79,7 +79,7 @@ class DoliDb
\param pass Mot de passe \param pass Mot de passe
\param name Nom de la database \param name Nom de la database
\param port Port of database server \param port Port of database server
\return int 1 en cas de succ<EFBFBD>s, 0 sinon \return int 1 en cas de succes, 0 sinon
*/ */
function DoliDb($type='mysqli', $host, $user, $pass, $name='', $port=0) function DoliDb($type='mysqli', $host, $user, $pass, $name='', $port=0)
{ {
@@ -101,8 +101,8 @@ class DoliDb
{ {
$this->connected = 0; $this->connected = 0;
$this->ok = 0; $this->ok = 0;
$this->error="Mysqli PHP functions are not available in this version of PHP. Try to use another driver."; $this->error="Mysqli PHP functions for using Mysqli driver are not available in this version of PHP. Try to use another driver.";
dolibarr_syslog("DoliDB::DoliDB : Mysql PHP functions are not available in this version of PHP. Try to use another driver.",LOG_ERR); dolibarr_syslog("DoliDB::DoliDB : Mysqli PHP functions for using Mysqli driver are not available in this version of PHP. Try to use another driver.",LOG_ERR);
return $this->ok; return $this->ok;
} }
@@ -116,6 +116,7 @@ class DoliDb
} }
// Essai connexion serveur // Essai connexion serveur
// We do not try to connect to database, only to server. Connect to database is done later in constrcutor
$this->db = $this->connect($host, $user, $pass, '', $port); $this->db = $this->connect($host, $user, $pass, '', $port);
if ($this->db) if ($this->db)
@@ -132,7 +133,7 @@ class DoliDb
dolibarr_syslog("DoliDB::DoliDB : Erreur Connect mysqli_connect_error=".$this->error,LOG_ERR); dolibarr_syslog("DoliDB::DoliDB : Erreur Connect mysqli_connect_error=".$this->error,LOG_ERR);
} }
// Si connexion serveur ok et si connexion base demand<EFBFBD>e, on essaie connexion base // Si connexion serveur ok et si connexion base demandee, on essaie connexion base
if ($this->connected && $name) if ($this->connected && $name)
{ {
if ($this->select_db($name)) if ($this->select_db($name))
@@ -141,13 +142,15 @@ class DoliDb
$this->database_name = $name; $this->database_name = $name;
$this->ok = 1; $this->ok = 1;
// If client connected with different charset than Dolibarr database // If client connected with different charset than Dolibarr HTML output
// (La base Dolibarr was forced to this->forcecharset during install) $clientmustbe='';
/*if (mysqli_client_encoding ( $this->db ) != $this->getDefaultCharacterSetDatabase()) if (eregi('UTF-8',$conf->character_set_client)) $clientmustbe='utf8';
if (eregi('ISO-8859-1',$conf->character_set_client)) $clientmustbe='latin1';
if (mysqli_client_encoding($this->db) != $clientmustbe)
{ {
$this->query("SET NAMES '".$this->forcecharset."'", $this->db); $this->query("SET NAMES '".$clientmustbe."'", $this->db);
$this->query("SET CHARACTER SET '".$this->forcecharset."'", $this->db); //$this->query("SET CHARACTER SET ". $this->forcecharset);
}*/ }
} }
else else
{ {
@@ -155,13 +158,26 @@ class DoliDb
$this->database_name = ''; $this->database_name = '';
$this->ok = 0; $this->ok = 0;
$this->error=$this->error(); $this->error=$this->error();
dolibarr_syslog("DoliDB::DoliDB : Erreur Select_db"); dolibarr_syslog("DoliDB::DoliDB : Erreur Select_db ".$this->error,LOG_ERR);
} }
} }
else else
{ {
// Pas de selection de base demandee, ok ou ko // Pas de selection de base demandee, ok ou ko
$this->database_selected = 0; $this->database_selected = 0;
if ($this->connected)
{
// If client connected with different charset than Dolibarr HTML output
$clientmustbe='';
if (eregi('UTF-8',$conf->character_set_client)) $clientmustbe='utf8';
if (eregi('ISO-8859-1',$conf->character_set_client)) $clientmustbe='latin1';
if (mysqli_client_encoding($this->db) != $clientmustbe)
{
$this->query("SET NAMES '".$clientmustbe."'", $this->db);
//$this->query("SET CHARACTER SET ". $this->forcecharset);
}
}
} }
return $this->ok; return $this->ok;
@@ -190,7 +206,7 @@ class DoliDb
/** /**
* \brief Connection vers le serveur * \brief Connexion to server
* \param host database server host * \param host database server host
* \param login login * \param login login
* \param passwd password * \param passwd password
@@ -201,7 +217,7 @@ class DoliDb
*/ */
function connect($host, $login, $passwd, $name, $port=0) function connect($host, $login, $passwd, $name, $port=0)
{ {
dolibarr_syslog("DoliDB::connect host=$host, port=$port, login=$login, passwd=--hidden--, name=$name"); dolibarr_syslog("DoliDB::connect host=$host, port=$port, login=$login, passwd=--hidden--, name=$name",LOG_DEBUG);
$newhost=$host; $newhost=$host;
$newport=$port; $newport=$port;
@@ -210,17 +226,8 @@ class DoliDb
if (! $newport) $newport=3306; if (! $newport) $newport=3306;
$this->db = @mysqli_connect($newhost, $login, $passwd, $name, $newport); $this->db = @mysqli_connect($newhost, $login, $passwd, $name, $newport);
// Force recors to latin1 if database is in utf8 by default
// Removed becasue faile on my PHP-Mysql.
// De plus, la base est forcement en latin1 avec
// les nouvelles version de Dolibarr car force par l'install Dolibarr.
//$this->query('SET NAMES '.$this->forcecharset);
//print "Resultat fonction connect: ".$this->db; //print "Resultat fonction connect: ".$this->db;
if ($this->db)
{
$this->query("SET NAMES '".$this->forcecharset."'", $this->db);
$this->query("SET CHARACTER SET '".$this->forcecharset."'", $this->db);
}
return $this->db; return $this->db;
} }
@@ -350,7 +357,7 @@ class DoliDb
$query = trim($query); $query = trim($query);
if (! $this->database_name) if (! $this->database_name)
{ {
// Ordre SQL ne n<EFBFBD>cessitant pas de connexion <EFBFBD> une base (exemple: CREATE DATABASE // Ordre SQL ne necessitant pas de connexion a une base (exemple: CREATE DATABASE)
$ret = mysqli_query($this->db,$query); $ret = mysqli_query($this->db,$query);
} }
else else
@@ -381,7 +388,7 @@ class DoliDb
*/ */
function fetch_object($resultset=0) function fetch_object($resultset=0)
{ {
// Si le resultset n'est pas fourni, on prend le dernier utilis<EFBFBD> sur cette connexion // Si le resultset n'est pas fourni, on prend le dernier utilise sur cette connexion
if (! is_object($resultset)) { $resultset=$this->results; } if (! is_object($resultset)) { $resultset=$this->results; }
return mysqli_fetch_object($resultset); return mysqli_fetch_object($resultset);
} }
@@ -395,7 +402,7 @@ class DoliDb
function fetch_array($resultset=0) function fetch_array($resultset=0)
{ {
// Si le resultset n'est pas fourni, on prend le dernier utilis<EFBFBD> sur cette connexion // Si le resultset n'est pas fourni, on prend le dernier utilise sur cette connexion
if (! is_object($resultset)) { $resultset=$this->results; } if (! is_object($resultset)) { $resultset=$this->results; }
return mysqli_fetch_array($resultset); return mysqli_fetch_array($resultset);
} }
@@ -408,7 +415,7 @@ class DoliDb
function fetch_row($resultset=0) function fetch_row($resultset=0)
{ {
// Si le resultset n'est pas fourni, on prend le dernier utilis<EFBFBD> sur cette connexion // Si le resultset n'est pas fourni, on prend le dernier utilise sur cette connexion
if (! is_bool($resultset)) if (! is_bool($resultset))
{ {
if (! is_object($resultset)) { $resultset=$this->results; } if (! is_object($resultset)) { $resultset=$this->results; }
@@ -416,7 +423,7 @@ class DoliDb
} }
else else
{ {
// si le curseur est un bool<EFBFBD>en on retourne la valeur 0 // si le curseur est un booleen on retourne la valeur 0
return 0; return 0;
} }
} }
@@ -521,11 +528,11 @@ class DoliDb
/** /**
* \brief Formatage (par la base de donn<6E>es) d'un champ de la base au format tms ou Date (YYYY-MM-DD HH:MM:SS) * \brief Formatage (par la base de donn<6E>es) d'un champ de la base au format TMS ou Date (YYYY-MM-DD HH:MM:SS)
* afin de retourner une donn<6E>e toujours au format universel date tms unix. * afin de retourner une donn<6E>e toujours au format universel date TMS unix.
* Fonction <20> utiliser pour g<>n<EFBFBD>rer les SELECT. * Fonction <20> utiliser pour g<>n<EFBFBD>rer les SELECT.
* \param param Date au format text <20> convertir * \param param Nom champ base de type date ou chaine 'YYYY-MM-DD HH:MM:SS'
* \return date Date au format tms. * \return date Date au format TMS.
* \TODO Remove unix_timestamp functions * \TODO Remove unix_timestamp functions
*/ */
function pdate($param) function pdate($param)
@@ -536,8 +543,8 @@ class DoliDb
/** /**
* \brief Formatage (par PHP) d'une date vers format texte pour insertion dans champ date. * \brief Formatage (par PHP) d'une date vers format texte pour insertion dans champ date.
* Fonction <20> utiliser pour g<>n<EFBFBD>rer les INSERT, UPDATE ou les clauses WHERE * Fonction <20> utiliser pour g<>n<EFBFBD>rer les INSERT, UPDATE ou les clauses WHERE
* \param param Date tms <20> convertir * \param param Date TMS <20> convertir
* \return date Date au format text YYYYMMDDHHMMSS. * \return date Date au format texte YYYYMMDDHHMMSS.
*/ */
function idate($param) function idate($param)
{ {
@@ -688,20 +695,23 @@ class DoliDb
/** /**
\brief Cr<EFBFBD>ation d'une nouvelle base de donn<6E>e * \brief Create a new database
\param database nom de la database <20> cr<63>er * \param database Database name to create
\return resource resource d<EFBFBD>finie si ok, null si k * \return resource resource defined if OK, null if KO
\remarks Ne pas utiliser les fonctions xxx_create_db (xxx=mysql, ...) car elles sont deprecated * \remarks Do not use function xxx_create_db (xxx=mysql, ...) as they are deprecated
* We force to create database with charset this->forcecharset and collate this->forcecollate
*/ */
function DDLCreateDb($database) function DDLCreateDb($database)
{ {
// ALTER DATABASE dolibarr_db DEFAULT CHARACTER SET latin DEFAULT COLLATE latin1_swedish_ci // ALTER DATABASE dolibarr_db DEFAULT CHARACTER SET latin DEFAULT COLLATE latin1_swedish_ci
$sql = 'CREATE DATABASE '.$database; $sql = 'CREATE DATABASE '.$database;
$sql.= ' DEFAULT CHARACTER SET '.$this->forcecharset.' DEFAULT COLLATE '.$this->forcecollate; $sql.= ' DEFAULT CHARACTER SET '.$this->forcecharset.' DEFAULT COLLATE '.$this->forcecollate;
dolibarr_syslog($sql,LOG_DEBUG);
$ret=$this->query($sql); $ret=$this->query($sql);
if (! $ret) if (! $ret)
{ {
// On r<>essaie pour compatibilit<EFBFBD> avec Mysql < 4.1.1 // We try again for compatibility with Mysql < 4.1.1
$sql = 'CREATE DATABASE '.$database; $sql = 'CREATE DATABASE '.$database;
$ret=$this->query($sql); $ret=$this->query($sql);
} }
@@ -721,7 +731,7 @@ class DoliDb
$like = ''; $like = '';
if ($table) $like = "LIKE '".$table."'"; if ($table) $like = "LIKE '".$table."'";
$sql="SHOW TABLES FROM ".$database." ".$like.";"; $sql="SHOW TABLES FROM ".$database." ".$like.";";
// $sql; //print $sql;
$result = $this->query($sql); $result = $this->query($sql);
while($row = $this->fetch_row($result)) while($row = $this->fetch_row($result))
{ {
@@ -799,7 +809,7 @@ class DoliDb
$sql .= ",".implode(',',$sqlk); $sql .= ",".implode(',',$sqlk);
$sql .=") type=".$type; $sql .=") type=".$type;
dolibarr_syslog($sql); dolibarr_syslog($sql,LOG_DEBUG);
if(! $this -> query($sql)) if(! $this -> query($sql))
return -1; return -1;
else else
@@ -816,7 +826,7 @@ class DoliDb
{ {
$sql="DESC ".$table." ".$field; $sql="DESC ".$table." ".$field;
dolibarr_syslog($sql); dolibarr_syslog($sql,LOG_DEBUG);
$this->results = $this->query($sql); $this->results = $this->query($sql);
return $this->results; return $this->results;
} }
@@ -850,6 +860,7 @@ class DoliDb
$sql .= " ".$field_desc['extra']; $sql .= " ".$field_desc['extra'];
$sql .= " ".$field_position; $sql .= " ".$field_position;
dolibarr_syslog($sql,LOG_DEBUG);
if(! $this -> query($sql)) if(! $this -> query($sql))
return -1; return -1;
else else
@@ -902,7 +913,8 @@ class DoliDb
* \brief Return charset used to store data in database * \brief Return charset used to store data in database
* \return string Charset * \return string Charset
*/ */
function getDefaultCharacterSetDatabase(){ function getDefaultCharacterSetDatabase()
{
$resql=$this->query('SHOW VARIABLES LIKE \'character_set_database\''); $resql=$this->query('SHOW VARIABLES LIKE \'character_set_database\'');
if (!$resql) if (!$resql)
{ {
@@ -913,7 +925,12 @@ class DoliDb
return $liste['Value']; return $liste['Value'];
} }
function getListOfCharacterSet(){ /**
* \brief Return list of available charset that can be used to store data in database
* \return array List of Charset
*/
function getListOfCharacterSet()
{
$resql=$this->query('SHOW CHARSET'); $resql=$this->query('SHOW CHARSET');
$liste = array(); $liste = array();
if ($resql) if ($resql)
@@ -937,7 +954,8 @@ class DoliDb
* \brief Return collation used in database * \brief Return collation used in database
* \return string Collation value * \return string Collation value
*/ */
function getDefaultCollationDatabase(){ function getDefaultCollationDatabase()
{
$resql=$this->query('SHOW VARIABLES LIKE \'collation_database\''); $resql=$this->query('SHOW VARIABLES LIKE \'collation_database\'');
if (!$resql) if (!$resql)
{ {
@@ -948,7 +966,12 @@ class DoliDb
return $liste['Value']; return $liste['Value'];
} }
function getListOfCollation(){ /**
* \brief Return list of available collation that can be used for database
* \return array Liste of Collation
*/
function getListOfCollation()
{
$resql=$this->query('SHOW COLLATION'); $resql=$this->query('SHOW COLLATION');
$liste = array(); $liste = array();
if ($resql) if ($resql)