# HG changeset patch # User Franck Deroche # Date 1201603952 -3600 # Node ID ec0c926a78a644fb7406ff7c100b0b9cbe57497d # Parent 829d6b0d3d0be14ba49e3cdedb935bf4cec83690 Nettoyage de la classe d'accès aux données. Petit re-arrangement: les fonctions permettant de s'assurer que l'on a bien de l'utf-8 passe désormais dans la classe TextUtils. D'autre part, la classe a été notablement modifié: 1) si on souhaite passer un nom de base de données, il faut le faire dans le constructeur (précédement, c'était dans la méthode connect, mais c'était trompeur car le code ne gére absolument pas la connexion à deux bases de données différentes sur le même objet) 2) le code essayait de faire du ref-counting sur le nombre de fois où on avait appellé la fonction de connexion, pour fermer quand on avait atteint le même nombre de déconnexion, mais ne faisait pas ca particulièrement bien 3) il y avait une auto-connexion lors de l'execution des requetes si l'on était pas déja connecté, mais il n'y avait jamais d'auto-deconnexion (le code était buggé) 4) on essayait systématiquement de s'assurer que les enregistrements obtenus depuis la base de données étaient en utf8. A priori, c'est pour des considérations de migrations hérités de Mega-Poudlard, mais je crois que ce n'est pas necessaire pour ce blog, et ca ne l'est certainement pas dans le cas général... diff -r 829d6b0d3d0b -r ec0c926a78a6 admin.php --- a/admin.php Tue Jan 29 11:33:33 2008 +0100 +++ b/admin.php Tue Jan 29 11:52:32 2008 +0100 @@ -138,7 +138,7 @@ $ar_Version[] = $versionAc; $i++; } - $Titre=$Data->utf8_ensure($val['Titre']); + $Titre=TextUtils::EnsureUTF8($val['Titre']); echo(" \t
  • {$Titre}Editer -- Supprimer -- Gérer les commentaires
  • "); } diff -r 829d6b0d3d0b -r ec0c926a78a6 includes/class.dataaccess.php --- a/includes/class.dataaccess.php Tue Jan 29 11:33:33 2008 +0100 +++ b/includes/class.dataaccess.php Tue Jan 29 11:52:32 2008 +0100 @@ -4,38 +4,40 @@ var $user; var $pass; var $db; - var $arResult; - var $query; var $connOpen; + var $results; + var $queries; var $_nbQueries; - var $infos; // Cache contenant les informations sur le visiteur - - function DataAccess($host=DB_HOST, $user=DB_USER, $pass=DB_PASSWORD) { + function DataAccess($host=DB_HOST, $user=DB_USER, $pass=DB_PASSWORD, $db=DB_NAME) { $this->host=$host; $this->user=$user; $this->pass=$pass; + $this->db = $db; + $this->connOpen = 0; $this->_nbQueries = 0; + $this->queries = array(); + $this->results = array(); $this->Connect(); } - function Connect($db=DB_NAME) { - if($this->connOpen == 1) return; - $this->db=$db; - $this->connOpen=1; - mysql_connect($this->host, $this->user, $this->pass); - mysql_select_db($this->db); + function Connect() { + if($this->connOpen == 0) { + mysql_connect($this->host, $this->user, $this->pass); + mysql_select_db($this->db); + } + $this->connOpen++; } function Query($query, $id=0) { - $this->query=$query; - if($this->connOpen != 1) $this->Connect(); - $this->arResult[$id]=mysql_query($this->query); - if($this->connOpen != 1) $this->Close(); - if(@$num_rows=mysql_num_rows($this->arResult[$id])) + $this->_nbQueries++; + $this->queries[$id]=$query; + $this->Connect(); + $this->results[$id]=mysql_query($this->queries[$id]); + $this->Close(); + if(@$num_rows=mysql_num_rows($this->results[$id])) return $num_rows; - else - return 0; + return 0; } function debugQuery($query, $id=0) { @@ -46,24 +48,17 @@ } function GetRow($id=0) { - if(@$row=mysql_fetch_assoc($this->arResult[$id])) { - foreach($row as $key => $value) - $row_utf[$key]=$this->utf8_ensure($value); - return $row_utf; - } - return 0; - } - - function GetRawRow($id=0) { - if(@$row=mysql_fetch_array($this->arResult[$id])) { + if(@$row=mysql_fetch_array($this->results[$id])) { return $row; } return 0; } function Close() { - $this->connOpen=0; - mysql_close(); + $this->connOpen--; + if($this->connOpen == 0) { + mysql_close(); + } } function getNbQueries() { @@ -73,27 +68,5 @@ function formatDate($timestamp, $decallage=2, $pattern='d/m/Y H:i:s') { return gmdate($pattern, $timestamp + $decallage * 3600); } - - function seems_utf8($Str) { - for ($i=0; $iseems_utf8($Str)?$Str:utf8_encode($Str); - } - } ?> diff -r 829d6b0d3d0b -r ec0c926a78a6 includes/class.post.php --- a/includes/class.post.php Tue Jan 29 11:33:33 2008 +0100 +++ b/includes/class.post.php Tue Jan 29 11:52:32 2008 +0100 @@ -19,7 +19,7 @@ array('

    ', '

    '), array('

    ', '

    '), $infos['Message']); - $Mess = Factory::getDB()->utf8_ensure($Mess); + $Mess = TextUtils::EnsureUTF8($Mess); $this->mess = $this->tpl->getDocumentFragment(); $this->mess->appendXML($Mess); diff -r 829d6b0d3d0b -r ec0c926a78a6 includes/class.textutils.php --- a/includes/class.textutils.php Tue Jan 29 11:33:33 2008 +0100 +++ b/includes/class.textutils.php Tue Jan 29 11:52:32 2008 +0100 @@ -40,5 +40,26 @@ public static function getMonthName($monthNumber) { return ucfirst(strftime('%B', strtotime('2007-' . $monthNumber . '-01'))); } + + public static function EnsureUTF8($string) { + return TextUtils::SeemsUTF8($string) ? $string : utf8_encode($string); + } + + public static function SeemsUTF8($Str) { + for ($i=0; $i