Framework Update
This commit is contained in:
parent
248a3c39d4
commit
d47f8915ed
@ -1,8 +1,8 @@
|
|||||||
<?
|
<?php
|
||||||
|
class WChiffes
|
||||||
class WChiffes {
|
{
|
||||||
|
private static $tabChiffresEnLEttres = array(
|
||||||
private static $tabChiffresEnLEttres = array( 0=>'zéro',
|
0=>'zéro',
|
||||||
1=>'un',
|
1=>'un',
|
||||||
2=>'deux',
|
2=>'deux',
|
||||||
3=>'trois',
|
3=>'trois',
|
||||||
@ -38,726 +38,11 @@ class WChiffes {
|
|||||||
60=>'soixante',
|
60=>'soixante',
|
||||||
70=>'soixante dix',
|
70=>'soixante dix',
|
||||||
80=>'quatre vingt',
|
80=>'quatre vingt',
|
||||||
90=>'quatre vingt dix');
|
90=>'quatre vingt dix'
|
||||||
|
);
|
||||||
|
|
||||||
public function ChiffresEnLettres($chiffre) {
|
public function ChiffresEnLettres($chiffre)
|
||||||
|
{
|
||||||
return array_search($chiffre, self::$tabChiffresEnLEttres);
|
return array_search($chiffre, self::$tabChiffresEnLEttres);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
define('NEL_SEPTANTE', 0x0001);
|
|
||||||
define('NEL_HUITANTE', 0x0002);
|
|
||||||
define('NEL_OCTANTE', 0x0004);
|
|
||||||
define('NEL_NONANTE', 0x0008);
|
|
||||||
define('NEL_BELGIQUE', NEL_SEPTANTE|NEL_NONANTE);
|
|
||||||
define('NEL_VVF', NEL_SEPTANTE|NEL_HUITANTE|NEL_NONANTE);
|
|
||||||
define('NEL_ARCHAIQUE', NEL_SEPTANTE|NEL_OCTANTE|NEL_NONANTE);
|
|
||||||
define('NEL_SANS_MILLIARD', 0x0010);
|
|
||||||
define('NEL_AVEC_ZILLIARD', 0x0020);
|
|
||||||
define('NEL_TOUS_ZILLIONS', 0x0040);
|
|
||||||
define('NEL_RECTIF_1990', 0x0100);
|
|
||||||
define('NEL_ORDINAL', 0x0200);
|
|
||||||
define('NEL_NIEME', 0x0400);
|
|
||||||
|
|
||||||
|
|
||||||
# Le tableau associatif $NEL contient toutes les variables utilisées
|
|
||||||
# de façon globale dans ce module. ATTENTION : ce nom est assez court,
|
|
||||||
# et cela pourrait poser des problèmes de collision avec une autre
|
|
||||||
# variable si plusieurs modules sont inclus dans le même programme.
|
|
||||||
|
|
||||||
$NEL = array(
|
|
||||||
'1-99' => array(
|
|
||||||
# 0-19
|
|
||||||
'', 'un', 'deux', 'trois', 'quatre', 'cinq', 'six', 'sept',
|
|
||||||
'huit', 'neuf', 'dix', 'onze', 'douze', 'treize', 'quatorze',
|
|
||||||
'quinze', 'seize', 'dix-sept', 'dix-huit', 'dix-neuf',
|
|
||||||
# 20-29
|
|
||||||
'vingt', 'vingt et un', 'vingt-deux', 'vingt-trois',
|
|
||||||
'vingt-quatre', 'vingt-cinq', 'vingt-six',
|
|
||||||
'vingt-sept', 'vingt-huit', 'vingt-neuf',
|
|
||||||
# 30-39
|
|
||||||
'trente', 'trente et un', 'trente-deux', 'trente-trois',
|
|
||||||
'trente-quatre', 'trente-cinq', 'trente-six',
|
|
||||||
'trente-sept', 'trente-huit', 'trente-neuf',
|
|
||||||
# 40-49
|
|
||||||
'quarante', 'quarante et un', 'quarante-deux', 'quarante-trois',
|
|
||||||
'quarante-quatre', 'quarante-cinq', 'quarante-six',
|
|
||||||
'quarante-sept', 'quarante-huit', 'quarante-neuf',
|
|
||||||
# 50-59
|
|
||||||
'cinquante', 'cinquante et un', 'cinquante-deux', 'cinquante-trois',
|
|
||||||
'cinquante-quatre', 'cinquante-cinq', 'cinquante-six',
|
|
||||||
'cinquante-sept', 'cinquante-huit', 'cinquante-neuf',
|
|
||||||
# 60-69
|
|
||||||
'soixante', 'soixante et un', 'soixante-deux', 'soixante-trois',
|
|
||||||
'soixante-quatre', 'soixante-cinq', 'soixante-six',
|
|
||||||
'soixante-sept', 'soixante-huit', 'soixante-neuf',
|
|
||||||
# 70-79
|
|
||||||
'septante', 'septante et un', 'septante-deux', 'septante-trois',
|
|
||||||
'septante-quatre', 'septante-cinq', 'septante-six',
|
|
||||||
'septante-sept', 'septante-huit', 'septante-neuf',
|
|
||||||
# 80-89
|
|
||||||
'huitante', 'huitante et un', 'huitante-deux', 'huitante-trois',
|
|
||||||
'huitante-quatre', 'huitante-cinq', 'huitante-six',
|
|
||||||
'huitante-sept', 'huitante-huit', 'huitante-neuf',
|
|
||||||
# 90-99
|
|
||||||
'nonante', 'nonante et un', 'nonante-deux', 'nonante-trois',
|
|
||||||
'nonante-quatre', 'nonante-cinq', 'nonante-six',
|
|
||||||
'nonante-sept', 'nonante-huit', 'nonante-neuf'
|
|
||||||
),
|
|
||||||
|
|
||||||
'illi' => array('', 'm', 'b', 'tr', 'quatr', 'quint', 'sext'),
|
|
||||||
'maxilli' => 0, # voir plus loin
|
|
||||||
'de_maxillions' => '', # voir plus loin
|
|
||||||
|
|
||||||
'septante' => false, # valeurs possibles : (false|true)
|
|
||||||
'huitante' => false, # valeurs possibles : (false|true|'octante')
|
|
||||||
'nonante' => false, # valeurs possibles : (false|true)
|
|
||||||
'zillions' => false, # valeurs possibles : (false|true)
|
|
||||||
'zilliard' => 1, # valeurs possibles : (0|1|2)
|
|
||||||
'rectif' => false, # valeurs possibles : (false|true)
|
|
||||||
'ordinal' => false, # valeurs possibles : (false|true|'nieme')
|
|
||||||
|
|
||||||
'separateur' => ' '
|
|
||||||
);
|
|
||||||
|
|
||||||
# Si le tableau $NEL['illi'] s'arrête à 'sext', alors les deux valeurs
|
|
||||||
# suivantes sont respectivement '6' et ' de sextillions'.
|
|
||||||
$NEL['maxilli'] = count($NEL['illi']) - 1;
|
|
||||||
$NEL['de_maxillions'] = " de {$NEL['illi'][$NEL['maxilli']]}illions";
|
|
||||||
|
|
||||||
function enlettres_options($options, $separateur=NULL)
|
|
||||||
{
|
|
||||||
global $NEL;
|
|
||||||
|
|
||||||
if ($options !== NULL) {
|
|
||||||
$NEL['septante'] = ($options & NEL_SEPTANTE) ? true : false;
|
|
||||||
$NEL['huitante'] =
|
|
||||||
($options & NEL_OCTANTE) ? 'octante' :
|
|
||||||
(($options & NEL_HUITANTE) ? true : false);
|
|
||||||
$NEL['nonante'] = ($options & NEL_NONANTE) ? true : false;
|
|
||||||
$NEL['zillions'] = ($options & NEL_TOUS_ZILLIONS) ? true : false;
|
|
||||||
$NEL['zilliard'] =
|
|
||||||
($options & NEL_AVEC_ZILLIARD) ? 2 :
|
|
||||||
(($options & NEL_SANS_MILLIARD) ? 0 : 1);
|
|
||||||
$NEL['rectif'] = ($options & NEL_RECTIF_1990) ? true : false;
|
|
||||||
$NEL['ordinal'] =
|
|
||||||
($options & NEL_NIEME) ? 'nieme' :
|
|
||||||
(($options & NEL_ORDINAL) ? true : false);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($separateur !== NULL) {
|
|
||||||
$NEL['separateur'] = $separateur;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function enlettres_par3($par3)
|
|
||||||
{
|
|
||||||
global $NEL;
|
|
||||||
|
|
||||||
if ($par3 == 0) return '';
|
|
||||||
|
|
||||||
$centaine = floor($par3 / 100);
|
|
||||||
$par2 = $par3 % 100;
|
|
||||||
$dizaine = floor($par2 / 10);
|
|
||||||
|
|
||||||
# On traite à part les particularités du français de référence
|
|
||||||
# 'soixante-dix', 'quatre-vingts' et 'quatre-vingt-dix'.
|
|
||||||
$nom_par2 = NULL;
|
|
||||||
switch ($dizaine) {
|
|
||||||
case 7:
|
|
||||||
if ($NEL['septante'] === false) {
|
|
||||||
if ($par2 == 71) $nom_par2 = 'soixante et onze';
|
|
||||||
else $nom_par2 = 'soixante-' . $NEL['1-99'][$par2 - 60];
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 8:
|
|
||||||
if ($NEL['huitante'] === false) {
|
|
||||||
if ($par2 == 80) $nom_par2 = 'quatre-vingts';
|
|
||||||
else $nom_par2 = 'quatre-vingt-' . $NEL['1-99'][$par2 - 80];
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 9:
|
|
||||||
if ($NEL['nonante'] === false) {
|
|
||||||
$nom_par2 = 'quatre-vingt-' . $NEL['1-99'][$par2 - 80];
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if ($nom_par2 === NULL) {
|
|
||||||
$nom_par2 = $NEL['1-99'][$par2];
|
|
||||||
if (($dizaine == 8) and ($NEL['huitante'] === 'octante')) {
|
|
||||||
$nom_par2 = str_replace('huitante', 'octante', $nom_par2);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# Après les dizaines et les unités, il reste à voir les centaines
|
|
||||||
switch ($centaine) {
|
|
||||||
case 0: return $nom_par2;
|
|
||||||
case 1: return rtrim("cent {$nom_par2}");
|
|
||||||
}
|
|
||||||
|
|
||||||
# Assertion : $centaine = 2 .. 9
|
|
||||||
$nom_centaine = $NEL['1-99'][$centaine];
|
|
||||||
if ($par2 == 0) return "{$nom_centaine} cents";
|
|
||||||
return "{$nom_centaine} cent {$nom_par2}";
|
|
||||||
}
|
|
||||||
|
|
||||||
function enlettres_zilli($idx)
|
|
||||||
{
|
|
||||||
# Noms des 0ème à 9ème zillions
|
|
||||||
static $petit = array(
|
|
||||||
'n', 'm', 'b', 'tr', 'quatr', 'quint', 'sext', 'sept', 'oct', 'non'
|
|
||||||
);
|
|
||||||
# Composantes des 10ème à 999ème zillions
|
|
||||||
static $unite = array(
|
|
||||||
'<', 'un<', 'duo<', 'tre<sé',
|
|
||||||
'quattuor<', 'quin<', 'se<xsé',
|
|
||||||
'septe<mné', 'octo<', 'nove<mné'
|
|
||||||
);
|
|
||||||
static $dizaine = array(
|
|
||||||
'', 'né>déci<', 'ms>viginti<', 'ns>triginta<',
|
|
||||||
'ns>quadraginta<', 'ns>quinquaginta<', 'né>sexaginta<',
|
|
||||||
'né>septuaginta<', 'mxs>octoginta<', 'é>nonaginta<'
|
|
||||||
);
|
|
||||||
static $centaine = array(
|
|
||||||
'>', 'nxs>cent', 'né>ducent', 'ns>trécent',
|
|
||||||
'ns>quadringent', 'ns>quingent', 'né>sescent',
|
|
||||||
'né>septingent', 'mxs>octingent', 'é>nongent'
|
|
||||||
);
|
|
||||||
|
|
||||||
# Règles d'assimilation aux préfixes latins, modifiées pour accentuer
|
|
||||||
# un éventuel 'é' de fin de préfixe.
|
|
||||||
# (1) Si on trouve une lettre deux fois entre < > on la garde.
|
|
||||||
# S'il y a plusieurs lettres dans ce cas, on garde la première.
|
|
||||||
# (2) Sinon on efface tout ce qui est entre < >.
|
|
||||||
# (3) On remplace "treé" par "tré", "seé" par "sé", "septeé" par "septé"
|
|
||||||
# et "noveé" par "nové".
|
|
||||||
# (4) En cas de dizaine sans centaine, on supprime la voyelle en trop.
|
|
||||||
# Par exemple "déciilli" devient "décilli" et "trigintailli" devient
|
|
||||||
# "trigintilli".
|
|
||||||
#
|
|
||||||
# Il est à noter que ces règles PERL (en particulier la première qui
|
|
||||||
# est la plus complexe) sont *très* fortement inspirées du programme
|
|
||||||
# de Nicolas Graner. On pourrait même parler de plagiat s'il n'avait
|
|
||||||
# pas été au courant que je reprenais son code.
|
|
||||||
# Voir <http://www.graner.net/nicolas/nombres/nom.php>
|
|
||||||
# et <http://www.graner.net/nicolas/nombres/nom-exp.php>
|
|
||||||
#
|
|
||||||
static $recherche = array(
|
|
||||||
'/<[a-zé]*?([a-zé])[a-zé]*\1[a-zé]*>/', # (1)
|
|
||||||
'/<[a-zé]*>/', # (2)
|
|
||||||
'/eé/', # (3)
|
|
||||||
'/[ai]illi/' # (4)
|
|
||||||
);
|
|
||||||
static $remplace = array(
|
|
||||||
'\\1', # (1)
|
|
||||||
'', # (2)
|
|
||||||
'é', # (3)
|
|
||||||
'illi' # (4)
|
|
||||||
);
|
|
||||||
|
|
||||||
$nom = '';
|
|
||||||
while ($idx > 0) {
|
|
||||||
$p = $idx % 1000;
|
|
||||||
$idx = floor($idx/1000);
|
|
||||||
|
|
||||||
if ($p < 10) {
|
|
||||||
$nom = $petit[$p] . 'illi' . $nom;
|
|
||||||
} else {
|
|
||||||
$nom = $unite[$p % 10] . $dizaine[floor($p/10) % 10]
|
|
||||||
. $centaine[floor($p/100)] . 'illi' . $nom;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return preg_replace($recherche, $remplace, $nom);
|
|
||||||
}
|
|
||||||
|
|
||||||
function enlettres_illions($idx)
|
|
||||||
{
|
|
||||||
global $NEL;
|
|
||||||
|
|
||||||
if ($idx == 0) {
|
|
||||||
return '';
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($NEL['zillions']) {
|
|
||||||
return enlettres_zilli($idx) . 'ons';
|
|
||||||
}
|
|
||||||
|
|
||||||
$suffixe = '';
|
|
||||||
while ($idx > $NEL['maxilli']) {
|
|
||||||
$idx -= $NEL['maxilli'];
|
|
||||||
$suffixe .= $NEL['de_maxillions'];
|
|
||||||
}
|
|
||||||
return "{$NEL['illi'][$idx]}illions{$suffixe}";
|
|
||||||
}
|
|
||||||
|
|
||||||
function enlettres_avec_illiards($idx)
|
|
||||||
{
|
|
||||||
global $NEL;
|
|
||||||
|
|
||||||
if ($idx == 0) return false;
|
|
||||||
switch ($NEL['zilliard']) {
|
|
||||||
case 0: return false;
|
|
||||||
case 2: return true;
|
|
||||||
}
|
|
||||||
return ($idx == 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
function enlettres($nombre, $options=NULL, $separateur=NULL)
|
|
||||||
{
|
|
||||||
global $NEL;
|
|
||||||
|
|
||||||
if ($options !== NULL or $separateur !== NULL) {
|
|
||||||
$NELsave = $NEL;
|
|
||||||
enlettres_options($options, $separateur);
|
|
||||||
$nom = enlettres($nombre);
|
|
||||||
$NEL = $NELsave;
|
|
||||||
return $nom;
|
|
||||||
}
|
|
||||||
|
|
||||||
# On ne garde que les chiffres, puis on supprime les 0 du début
|
|
||||||
$nombre = preg_replace('/[^0-9]/', '', $nombre);
|
|
||||||
$nombre = ltrim($nombre, '0');
|
|
||||||
|
|
||||||
if ($nombre == '') {
|
|
||||||
if ($NEL['ordinal'] === 'nieme') return 'zéroïème';
|
|
||||||
else return 'zéro';
|
|
||||||
}
|
|
||||||
|
|
||||||
$table_noms = array();
|
|
||||||
for ($idx = 0; $nombre != ''; $idx++) {
|
|
||||||
$par6 = (int)((strlen($nombre) < 6) ? $nombre : substr($nombre, -6));
|
|
||||||
$nombre = substr($nombre, 0, -6);
|
|
||||||
|
|
||||||
if ($par6 == 0) continue;
|
|
||||||
|
|
||||||
$nom_par3_sup = enlettres_par3(floor($par6 / 1000));
|
|
||||||
$nom_par3_inf = enlettres_par3($par6 % 1000);
|
|
||||||
|
|
||||||
$illions = enlettres_illions($idx);
|
|
||||||
if (enlettres_avec_illiards($idx)) {
|
|
||||||
if ($nom_par3_inf != '') {
|
|
||||||
$table_noms[$illions] = $nom_par3_inf;
|
|
||||||
}
|
|
||||||
if ($nom_par3_sup != '') {
|
|
||||||
$illiards = preg_replace('/illion/', 'illiard', $illions, 1);
|
|
||||||
$table_noms[$illiards] = $nom_par3_sup;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
switch($nom_par3_sup) {
|
|
||||||
case '':
|
|
||||||
$nom_par6 = $nom_par3_inf;
|
|
||||||
break;
|
|
||||||
case 'un':
|
|
||||||
$nom_par6 = rtrim("mille {$nom_par3_inf}");
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
$nom_par3_sup = preg_replace('/(vingt|cent)s/', '\\1', $nom_par3_sup);
|
|
||||||
$nom_par6 = rtrim("{$nom_par3_sup} mille {$nom_par3_inf}");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
$table_noms[$illions] = $nom_par6;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$nom_enlettres = '';
|
|
||||||
foreach ($table_noms as $nom => $nombre) {
|
|
||||||
##
|
|
||||||
# $nombre est compris entre 'un' et
|
|
||||||
# 'neuf cent nonante-neuf mille neuf cent nonante-neuf'
|
|
||||||
# (ou variante avec 'quatre-vingt-dix-neuf')
|
|
||||||
##
|
|
||||||
# $nom peut valoir '', 'millions', 'milliards', 'billions', ...
|
|
||||||
# 'sextillions', 'sextilliards', 'millions de sextillions',
|
|
||||||
# 'millions de sextilliards', etc.
|
|
||||||
##
|
|
||||||
|
|
||||||
# Rectifications orthographiques de 1990
|
|
||||||
if ($NEL['rectif']) {
|
|
||||||
$nombre = str_replace(' ', '-', $nombre);
|
|
||||||
}
|
|
||||||
|
|
||||||
# Nom (éventuel) et accord (éventuel) des substantifs
|
|
||||||
$nom = rtrim("{$nombre} {$nom}");
|
|
||||||
if ($nombre == 'un') {
|
|
||||||
# Un seul million, milliard, etc., donc au singulier
|
|
||||||
# noter la limite de 1 remplacement, pour ne supprimer que le premier 's'
|
|
||||||
# dans 'billions de sextillions de sextillions'
|
|
||||||
$nom = preg_replace('/(illion|illiard)s/', '\\1', $nom, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
# Ajout d'un séparateur entre chaque partie
|
|
||||||
if ($nom_enlettres == '') {
|
|
||||||
$nom_enlettres = $nom;
|
|
||||||
} else {
|
|
||||||
$nom_enlettres = $nom . $NEL['separateur'] . $nom_enlettres;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($NEL['ordinal'] === false) {
|
|
||||||
# Nombre cardinal : le traitement est fini
|
|
||||||
return $nom_enlettres;
|
|
||||||
}
|
|
||||||
|
|
||||||
# Aucun pluriel dans les ordinaux
|
|
||||||
$nom_enlettres =
|
|
||||||
preg_replace('/(cent|vingt|illion|illiard)s/', '\\1', $nom_enlettres);
|
|
||||||
|
|
||||||
if ($NEL['ordinal'] !== 'nieme') {
|
|
||||||
# Nombre ordinal simple (sans '-ième')
|
|
||||||
return $nom_enlettres;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($nom_enlettres === 'un') {
|
|
||||||
# Le féminin n'est pas traité ici. On fait la supposition
|
|
||||||
# qu'il est plus facile de traiter ce cas à part plutôt
|
|
||||||
# que de rajouter une option rien que pour ça.
|
|
||||||
return 'premier';
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (substr($nom_enlettres, -1)) {
|
|
||||||
case 'e':
|
|
||||||
# quatre, onze à seize, trente à nonante, mille
|
|
||||||
# exemple : quatre -> quatrième
|
|
||||||
return substr($nom_enlettres, 0, -1) . 'ième';
|
|
||||||
case 'f':
|
|
||||||
# neuf -> neuvième
|
|
||||||
return substr($nom_enlettres, 0, -1) . 'vième';
|
|
||||||
case 'q':
|
|
||||||
# cinq -> cinquième
|
|
||||||
return $nom_enlettres . 'uième';
|
|
||||||
}
|
|
||||||
|
|
||||||
# Tous les autres cas.
|
|
||||||
# Exemples: deuxième, troisième, vingtième, trente et unième,
|
|
||||||
# neuf centième, un millionième, quatre-vingt milliardième.
|
|
||||||
return $nom_enlettres . 'ième';
|
|
||||||
}
|
|
||||||
|
|
||||||
function enchiffres_petit($mot)
|
|
||||||
{
|
|
||||||
static $petit = array(
|
|
||||||
# 1-16
|
|
||||||
'un' => 1,
|
|
||||||
'deux' => 2,
|
|
||||||
'trois' => 3,
|
|
||||||
'quatre' => 4,
|
|
||||||
'cinq' => 5,
|
|
||||||
'six' => 6,
|
|
||||||
'sept' => 7,
|
|
||||||
'huit' => 8,
|
|
||||||
'neuf' => 9,
|
|
||||||
'dix' => 10,
|
|
||||||
'onze' => 11,
|
|
||||||
'douze' => 12,
|
|
||||||
'treize' => 13,
|
|
||||||
'quatorze' => 14,
|
|
||||||
'quinze' => 15,
|
|
||||||
'seize' => 16,
|
|
||||||
# 20-90
|
|
||||||
'vingt' => 20,
|
|
||||||
'vingts' => 20,
|
|
||||||
'trente' => 30,
|
|
||||||
'quarante' => 40,
|
|
||||||
'cinquante' => 50,
|
|
||||||
'soixante' => 60,
|
|
||||||
'septante' => 70,
|
|
||||||
'huitante' => 80,
|
|
||||||
'octante' => 80,
|
|
||||||
'nonante' => 90,
|
|
||||||
# 100, 1000
|
|
||||||
'cent' => 100,
|
|
||||||
'cents' => 100,
|
|
||||||
'mil' => 1000,
|
|
||||||
'mille' => 1000
|
|
||||||
);
|
|
||||||
|
|
||||||
if (! isset($petit[$mot]))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
return $petit[$mot];
|
|
||||||
}
|
|
||||||
|
|
||||||
function enchiffres_zilli($mot)
|
|
||||||
{
|
|
||||||
# Noms des 0ème à 9ème zillions
|
|
||||||
static $petits = array(
|
|
||||||
'n', 'm', 'b', 'tr', 'quadr', 'quint', 'sext', 'sept', 'oct', 'non'
|
|
||||||
);
|
|
||||||
# Composantes des 10ème à 999ème zillions
|
|
||||||
static $unites = array(
|
|
||||||
'', 'un', 'duo', 'tre', 'quattuor', 'quin', 'se', 'septe', 'octo', 'nove'
|
|
||||||
);
|
|
||||||
static $dizaines = array(
|
|
||||||
'', 'dec', 'vigint', 'trigint', 'quadragint',
|
|
||||||
'quinquagint', 'sexagint', 'septuagint', 'octogint', 'nonagint'
|
|
||||||
);
|
|
||||||
static $centaines = array(
|
|
||||||
'', 'cent', 'ducent', 'trecent', 'quadringent',
|
|
||||||
'quingent', 'sescent', 'septingent', 'octingent', 'nongent'
|
|
||||||
);
|
|
||||||
# Expressions rationnelles pour extraire les composantes
|
|
||||||
static $um =
|
|
||||||
'(|un|duo|tre(?!c)|quattuor|quin|se(?!p)(?!sc)|septe|octo|nove)[mnsx]?';
|
|
||||||
static $dm =
|
|
||||||
'(|dec|(?:v|tr|quadr|quinqu|sex|septu|oct|non)[aio]gint)[ai]?';
|
|
||||||
static $cm =
|
|
||||||
'(|(?:|du|tre|ses)cent|(?:quadri|qui|septi|octi|no)ngent)';
|
|
||||||
|
|
||||||
$u = array_search($mot, $petits);
|
|
||||||
if ($u !== false) {
|
|
||||||
return '00' . $u;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (preg_match('/^'.$um.$dm.$cm.'$/', $mot, $resultat) < 1) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
$u = array_search($resultat[1], $unites);
|
|
||||||
$d = array_search($resultat[2], $dizaines);
|
|
||||||
$c = array_search($resultat[3], $centaines);
|
|
||||||
if ($u === false or $d === false or $c === false) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return $c.$d.$u;
|
|
||||||
}
|
|
||||||
|
|
||||||
function enchiffres_grand($mot)
|
|
||||||
{
|
|
||||||
# Quelques remplacements initiaux pour simplifier (les 'é' ont déjà
|
|
||||||
# été tous transformés en 'e').
|
|
||||||
# (1) Je supprime le 's' final de '-illions' ou '-illiards' pour ne
|
|
||||||
# tester que '-illion' ou '-illiard'.
|
|
||||||
# (2) Les deux orthographes étant possibles pour quadrillion ou
|
|
||||||
# quatrillion, je teste les deux. Noter que j'aurais pu changer
|
|
||||||
# 'quadr' en 'quatr' au lieu de l'inverse, mais alors cela aurait
|
|
||||||
# aussi changé 'quadragintillion' en 'quatragintillion', ce qui
|
|
||||||
# n'est pas franchement le but recherché.
|
|
||||||
# (3) En latin, on trouve parfois 'quatuor' au lieu de 'quattuor'. De même,
|
|
||||||
# avec google on trouve quelques 'quatuordecillions' au milieu des
|
|
||||||
# 'quattuordecillions' (environ 1 sur 10).
|
|
||||||
# (4) La règle de John Conway et Allan Wechsler préconisait le préfixe
|
|
||||||
# 'quinqua' au lieu de 'quin' que j'ai choisi. Pour accepter les deux,
|
|
||||||
# je remplace 'quinqua' par 'quin', sauf dans 'quinquaginta' (50)
|
|
||||||
# et dans 'quinquadraginta' (45).
|
|
||||||
static $recherche = array(
|
|
||||||
'/s$/', # (1)
|
|
||||||
'/quatr/', # (2)
|
|
||||||
'/quatuor/', # (3)
|
|
||||||
'/quinqua(?!(dra)?gint)/' # (4)
|
|
||||||
);
|
|
||||||
static $remplace = array(
|
|
||||||
'', # (1)
|
|
||||||
'quadr', # (2)
|
|
||||||
'quattuor', # (3)
|
|
||||||
'quin' # (4)
|
|
||||||
);
|
|
||||||
|
|
||||||
$mot = preg_replace($recherche, $remplace, $mot);
|
|
||||||
if ($mot == 'millier') return 1;
|
|
||||||
if ($mot == 'millinillion') return 2000;
|
|
||||||
|
|
||||||
$prefixes = explode('illi', $mot);
|
|
||||||
if (count($prefixes) < 2) {
|
|
||||||
# Il faut au moins un 'illi' dans le nom
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
switch (array_pop($prefixes)) {
|
|
||||||
case 'on':
|
|
||||||
# zillion : nombre pair de milliers
|
|
||||||
$ard = 0;
|
|
||||||
break;
|
|
||||||
case 'ard':
|
|
||||||
# zilliard : nombre impair de milliers
|
|
||||||
$ard = 1;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
# Ce n'est ni un zillion, ni un zilliard
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
$nombre = '';
|
|
||||||
foreach ($prefixes as $prefixe) {
|
|
||||||
$par3 = enchiffres_zilli($prefixe);
|
|
||||||
if ($par3 === false) return false;
|
|
||||||
$nombre .= $par3;
|
|
||||||
}
|
|
||||||
if (strlen($nombre) > 3) {
|
|
||||||
# On n'accepte que les nombres inférieurs au millinillion
|
|
||||||
# pour limiter le temps de calcul
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 2*$nombre + $ard;
|
|
||||||
}
|
|
||||||
|
|
||||||
class enchiffres_struct
|
|
||||||
{
|
|
||||||
var $valeur;
|
|
||||||
var $discr;
|
|
||||||
|
|
||||||
function enchiffres_struct($mul, $val)
|
|
||||||
{
|
|
||||||
$this->valeur = $this->discr = $val;
|
|
||||||
if ($mul != 0) {
|
|
||||||
$this->valeur *= $mul;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function enchiffres_ajouter_petit(&$table_petits, $petit)
|
|
||||||
{
|
|
||||||
$somme = 0;
|
|
||||||
while (($elem = array_pop($table_petits)) !== NULL) {
|
|
||||||
if ($elem->discr > $petit) {
|
|
||||||
array_push($table_petits, $elem);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
$somme += $elem->valeur;
|
|
||||||
}
|
|
||||||
$elem = new enchiffres_struct($somme, $petit);
|
|
||||||
array_push($table_petits, $elem);
|
|
||||||
}
|
|
||||||
|
|
||||||
function enchiffres_somme_petits($table_petits)
|
|
||||||
{
|
|
||||||
$somme = 0;
|
|
||||||
foreach ($table_petits as $elem) {
|
|
||||||
$somme += $elem->valeur;
|
|
||||||
}
|
|
||||||
return $somme;
|
|
||||||
}
|
|
||||||
|
|
||||||
function enchiffres_ajouter_grand(&$table_grands, $mantisse, $exposant)
|
|
||||||
{
|
|
||||||
while ($mantisse > 0) {
|
|
||||||
if (isset($table_grands[$exposant])) {
|
|
||||||
$mantisse += $table_grands[$exposant];
|
|
||||||
}
|
|
||||||
$table_grands[$exposant] = $mantisse % 1000;
|
|
||||||
$mantisse = floor($mantisse / 1000);
|
|
||||||
$exposant++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function enchiffres($nom)
|
|
||||||
{
|
|
||||||
$nom = preg_replace('/[éèÉÈ]/', 'e', $nom);
|
|
||||||
$nom = strtolower($nom);
|
|
||||||
$table_mots = preg_split('/[^a-z]+/', $nom);
|
|
||||||
|
|
||||||
$table_petits = array();
|
|
||||||
$mantisse = $exposant = 0;
|
|
||||||
$table_grands = array();
|
|
||||||
|
|
||||||
foreach ($table_mots as $mot) {
|
|
||||||
$petit = enchiffres_petit($mot);
|
|
||||||
if ($petit !== false) {
|
|
||||||
if ($mantisse != 0) {
|
|
||||||
enchiffres_ajouter_grand($table_grands, $mantisse, $exposant);
|
|
||||||
$mantisse = $exposant = 0;
|
|
||||||
}
|
|
||||||
enchiffres_ajouter_petit($table_petits, $petit);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
$grand = enchiffres_grand($mot);
|
|
||||||
if ($grand === false) {
|
|
||||||
# Ce n'est pas un nombre
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($grand == 0) {
|
|
||||||
# Ce nombre était trop grand (millinillion et plus) : on annule le
|
|
||||||
# tout pour limiter le temps de calcul.
|
|
||||||
$mantisse = 0;
|
|
||||||
$exposant = 0;
|
|
||||||
$table_petits = array();
|
|
||||||
} else {
|
|
||||||
if (count($table_petits) > 0) {
|
|
||||||
$mantisse = enchiffres_somme_petits($table_petits);
|
|
||||||
$exposant = 0;
|
|
||||||
$table_petits = array();
|
|
||||||
}
|
|
||||||
if ($mantisse != 0) {
|
|
||||||
$exposant += $grand;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (count($table_petits) > 0) {
|
|
||||||
$mantisse = enchiffres_somme_petits($table_petits);
|
|
||||||
$exposant = 0;
|
|
||||||
}
|
|
||||||
if ($mantisse != 0) {
|
|
||||||
enchiffres_ajouter_grand($table_grands, $mantisse, $exposant);
|
|
||||||
}
|
|
||||||
|
|
||||||
$nombre = "";
|
|
||||||
for ($exposant = 0; count($table_grands) > 0; $exposant++) {
|
|
||||||
if (isset($table_grands[$exposant])) {
|
|
||||||
$par3 = $table_grands[$exposant];
|
|
||||||
unset($table_grands[$exposant]);
|
|
||||||
} else {
|
|
||||||
$par3 = 0;
|
|
||||||
}
|
|
||||||
$nombre = sprintf("%03d", $par3) . $nombre;
|
|
||||||
}
|
|
||||||
$nombre = ltrim($nombre, '0');
|
|
||||||
if ($nombre === '') $nombre = '0';
|
|
||||||
return $nombre;
|
|
||||||
}
|
|
||||||
|
|
||||||
function enchiffres_aerer($nombre, $blanc=' ', $virgule=',', $tranche=3)
|
|
||||||
{
|
|
||||||
# Si c'est un nombre à virgule, on traite séparément les deux parties
|
|
||||||
if ($virgule !== NULL) {
|
|
||||||
$ent_dec = preg_split("/$virgule/", $nombre);
|
|
||||||
if (count($ent_dec) >= 2) {
|
|
||||||
$ent = enchiffres_aerer($ent_dec[0], $blanc, NULL, $tranche);
|
|
||||||
$dec = enchiffres_aerer($ent_dec[1], $blanc, NULL, -$tranche);
|
|
||||||
return $ent . $virgule . $dec;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# On ne garde que les chiffres
|
|
||||||
$nombre = preg_replace('/[^0-9]/', '', $nombre);
|
|
||||||
|
|
||||||
# Il est plus logique d'avoir un nombre positif pour les entiers,
|
|
||||||
# donc négatif pour la partie décimale, mais plus pratique de
|
|
||||||
# faire le contraire pour les substr().
|
|
||||||
$tranche = - (int)$tranche;
|
|
||||||
|
|
||||||
if ($tranche == 0) {
|
|
||||||
# on voulait juste supprimer les caractères en trop, pas en rajouter
|
|
||||||
return $nombre;
|
|
||||||
}
|
|
||||||
|
|
||||||
$nombre_aere = '';
|
|
||||||
if ($tranche < 0) {
|
|
||||||
# entier, ou partie entière d'un nombre décimal
|
|
||||||
while ($nombre != '') {
|
|
||||||
$par3 = substr($nombre, $tranche);
|
|
||||||
$nombre = substr($nombre, 0, $tranche);
|
|
||||||
if ($nombre_aere == '') {
|
|
||||||
$nombre_aere = $par3;
|
|
||||||
} else {
|
|
||||||
$nombre_aere = $par3 . $blanc . $nombre_aere;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
# partie décimale
|
|
||||||
while ($nombre != '') {
|
|
||||||
$par3 = substr($nombre, 0, $tranche);
|
|
||||||
$nombre = substr($nombre, $tranche);
|
|
||||||
if ($nombre_aere == '') {
|
|
||||||
$nombre_aere = $par3;
|
|
||||||
} else {
|
|
||||||
$nombre_aere .= $blanc . $par3;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return $nombre_aere;
|
|
||||||
}
|
|
||||||
|
|
||||||
*/
|
|
||||||
?>
|
|
@ -5,7 +5,6 @@ define ('TODAY', date('Ymd'));
|
|||||||
/**
|
/**
|
||||||
* Classe de gestion des méthodes relatives à la date et à l'heure
|
* Classe de gestion des méthodes relatives à la date et à l'heure
|
||||||
*/
|
*/
|
||||||
|
|
||||||
class WDate
|
class WDate
|
||||||
{
|
{
|
||||||
private static $tabMoisEnLettres = array(
|
private static $tabMoisEnLettres = array(
|
||||||
@ -27,7 +26,8 @@ define ('TODAY', date('Ymd'));
|
|||||||
* @param string Mois en toute lettres (janvier, mars, etc...)
|
* @param string Mois en toute lettres (janvier, mars, etc...)
|
||||||
* @return string Mois en Chiffe (1, 3, 12) / false en cas d'erreur
|
* @return string Mois en Chiffe (1, 3, 12) / false en cas d'erreur
|
||||||
*/
|
*/
|
||||||
public function getNumMois($moisEnLettres) {
|
public function getNumMois($moisEnLettres)
|
||||||
|
{
|
||||||
foreach (self::$tabMoisEnLettres as $num=>$mois)
|
foreach (self::$tabMoisEnLettres as $num=>$mois)
|
||||||
$tabMoisSansAccents[$num]=strtr($mois, 'ééûÉÉÛ','eeueeu');
|
$tabMoisSansAccents[$num]=strtr($mois, 'ééûÉÉÛ','eeueeu');
|
||||||
return array_search(ucfirst(strtolower(strtr($moisEnLettres, 'ééûÉÉÛ','eeuEEU'))), $tabMoisSansAccents);
|
return array_search(ucfirst(strtolower(strtr($moisEnLettres, 'ééûÉÉÛ','eeuEEU'))), $tabMoisSansAccents);
|
||||||
@ -37,7 +37,8 @@ define ('TODAY', date('Ymd'));
|
|||||||
* @param int $moisEnChiffre
|
* @param int $moisEnChiffre
|
||||||
* @return string Libellé du mois / false si le mois passé en paramètre est invalide
|
* @return string Libellé du mois / false si le mois passé en paramètre est invalide
|
||||||
*/
|
*/
|
||||||
public function getLibelleMois($moisEnChiffre) {
|
public function getLibelleMois($moisEnChiffre)
|
||||||
|
{
|
||||||
if ($moisEnChiffre>0 && $moisEnChiffre<13)
|
if ($moisEnChiffre>0 && $moisEnChiffre<13)
|
||||||
return self::$tabMoisEnLettres[$moisEnChiffre];
|
return self::$tabMoisEnLettres[$moisEnChiffre];
|
||||||
|
|
||||||
@ -50,7 +51,8 @@ define ('TODAY', date('Ymd'));
|
|||||||
** @param int $dateFin Date de fin (ultérieur à la date de début) au format Ymd
|
** @param int $dateFin Date de fin (ultérieur à la date de début) au format Ymd
|
||||||
** @return int Nombre de mois
|
** @return int Nombre de mois
|
||||||
**/
|
**/
|
||||||
function nbMoisEntre($dateDeb, $dateFin=TODAY) {
|
function nbMoisEntre($dateDeb, $dateFin=TODAY)
|
||||||
|
{
|
||||||
$dDeb=explode('-', Wdate::dateT('Ymd','Y-m-d', $dateDeb));
|
$dDeb=explode('-', Wdate::dateT('Ymd','Y-m-d', $dateDeb));
|
||||||
$dFin=explode('-', Wdate::dateT('Ymd','Y-m-d', $dateFin));
|
$dFin=explode('-', Wdate::dateT('Ymd','Y-m-d', $dateFin));
|
||||||
return ($dFin[0]*12+$dFin[1])-($dDeb[0]*12+$dDeb[1]);
|
return ($dFin[0]*12+$dFin[1])-($dDeb[0]*12+$dDeb[1]);
|
||||||
@ -63,7 +65,8 @@ define ('TODAY', date('Ymd'));
|
|||||||
* @param string Date d'entrée
|
* @param string Date d'entrée
|
||||||
* @return string Date formatée
|
* @return string Date formatée
|
||||||
*/
|
*/
|
||||||
public function dateT($formatIN, $formatOUT, $date) {
|
public function dateT($formatIN, $formatOUT, $date)
|
||||||
|
{
|
||||||
$M='';
|
$M='';
|
||||||
switch ($formatIN) {
|
switch ($formatIN) {
|
||||||
case 'd M Y': $tmp=explode(' ', $date); $d=str_replace('1er', '1', $tmp[0]); $m=self::getNumMois($tmp[1]); $Y=$tmp[2]; break;
|
case 'd M Y': $tmp=explode(' ', $date); $d=str_replace('1er', '1', $tmp[0]); $m=self::getNumMois($tmp[1]); $Y=$tmp[2]; break;
|
||||||
@ -116,7 +119,8 @@ define ('TODAY', date('Ymd'));
|
|||||||
* @param string $period (ex : cinq mois, six ans, un jour, 3 mois)
|
* @param string $period (ex : cinq mois, six ans, un jour, 3 mois)
|
||||||
* @return date
|
* @return date
|
||||||
*/
|
*/
|
||||||
function period2Days($dateIN, $period, $inThePast=false) {
|
function period2Days($dateIN, $period, $inThePast=false)
|
||||||
|
{
|
||||||
$dateV=self::dateT('Ymd', 'Ymd', $dateIN);
|
$dateV=self::dateT('Ymd', 'Ymd', $dateIN);
|
||||||
if ($dateV<>$dateIN) return NULL;
|
if ($dateV<>$dateIN) return NULL;
|
||||||
$d=substr($dateIN,6,2);
|
$d=substr($dateIN,6,2);
|
||||||
@ -145,7 +149,8 @@ define ('TODAY', date('Ymd'));
|
|||||||
* @param bool $weekend Considérer les WeekEnd comme feriés ? 1=Oui
|
* @param bool $weekend Considérer les WeekEnd comme feriés ? 1=Oui
|
||||||
* @return bool
|
* @return bool
|
||||||
**/
|
**/
|
||||||
function jourFerie($date, $weekend=false) {
|
function jourFerie($date, $weekend=false)
|
||||||
|
{
|
||||||
$date =str_replace('-','',strtr($date, '/.:','---'));
|
$date =str_replace('-','',strtr($date, '/.:','---'));
|
||||||
$jour =self::dateT('Ymd', 'd', $date);
|
$jour =self::dateT('Ymd', 'd', $date);
|
||||||
$mois =self::dateT('Ymd', 'm', $date);
|
$mois =self::dateT('Ymd', 'm', $date);
|
||||||
|
@ -55,9 +55,9 @@ class WDB
|
|||||||
try {
|
try {
|
||||||
$this->db = Zend_Db::factory($config);
|
$this->db = Zend_Db::factory($config);
|
||||||
} catch ( Exception $e ) {
|
} catch ( Exception $e ) {
|
||||||
file_put_contents('debug.log', $e->getMessage()."\n", FILE_APPEND);
|
file_put_contents(LOG_PATH . '/mysql.log', date('Y-m-d H:i:s') . ' - Erreur : ' . $e->getMessage()."\n", FILE_APPEND);
|
||||||
exit;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -69,40 +69,43 @@ class WDB
|
|||||||
*/
|
*/
|
||||||
public function insert($table, $toAdd, $debug=false, $low_priority=false)
|
public function insert($table, $toAdd, $debug=false, $low_priority=false)
|
||||||
{
|
{
|
||||||
$fields = implode(array_keys($toAdd), '`,`');
|
$this->errorCode = 0;
|
||||||
|
$this->errorMsg = '';
|
||||||
|
|
||||||
|
$fields = implode(array_keys($toAdd), ',');
|
||||||
foreach (array_values($toAdd) as $key=>$array_values)
|
foreach (array_values($toAdd) as $key=>$array_values)
|
||||||
$tmp[$key]=checkaddslashes($array_values);
|
$tmp[$key]=checkaddslashes($array_values);
|
||||||
|
|
||||||
$values = "'".implode(array_values($tmp), "','")."'"; # better
|
$values = "'".implode(array_values($tmp), "','")."'"; # better
|
||||||
$values = str_replace("'NULL'", 'NULL', $values);
|
$values = str_replace("'NULL'", 'NULL', $values);
|
||||||
|
|
||||||
if ($low_priority)
|
if ($low_priority) {
|
||||||
$query = 'INSERT DELAYED INTO '.$table.' ('.$fields.') VALUES ('.$values.');';
|
$query = 'INSERT DELAYED INTO '.$table.' ('.$fields.') VALUES ('.$values.');';
|
||||||
else
|
} else {
|
||||||
$query = 'INSERT INTO '.$table.' ('.$fields.') VALUES ('.$values.');';
|
$query = 'INSERT INTO '.$table.' ('.$fields.') VALUES ('.$values.');';
|
||||||
|
}
|
||||||
if ($debug) $tdeb=microtime_float();
|
if ($debug) $tdeb=microtime_float();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$stmt = $this->db->query($query, $debug);
|
$stmt = $this->db->query($query);
|
||||||
$res = $this->db->lastInsertId();
|
$res = $this->db->lastInsertId();
|
||||||
|
if ($debug) $this->trace($query, $res, $tdeb);
|
||||||
if ( $res == 0 ) {
|
if ( $res == 0 ) {
|
||||||
$res = true;
|
return true;
|
||||||
}
|
}
|
||||||
|
return $res;
|
||||||
} catch(Zend_Db_Exception $e) {
|
} catch(Zend_Db_Exception $e) {
|
||||||
$this->errorCode = $e->getCode();
|
$this->errorCode = $e->getCode();
|
||||||
$this->errorMsg = $e->getMessage();
|
$this->errorMsg = $e->getMessage();
|
||||||
|
$this->trace($query, $res, $tdeb);
|
||||||
$res = false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($debug) $this->trace($query, $res, $tdeb);
|
return false;
|
||||||
|
|
||||||
return $res;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
* Database Update
|
||||||
* @param unknown $table
|
* @param unknown $table
|
||||||
* @param unknown $update
|
* @param unknown $update
|
||||||
* @param unknown $where
|
* @param unknown $where
|
||||||
@ -113,17 +116,21 @@ class WDB
|
|||||||
*/
|
*/
|
||||||
public function update($table, $update, $where, $debug=false, $limit=0, $low_priority=false)
|
public function update($table, $update, $where, $debug=false, $limit=0, $low_priority=false)
|
||||||
{
|
{
|
||||||
$fields = array_keys($update);
|
$this->errorCode = 0;
|
||||||
$values = array_values($update);
|
$this->errorMsg = '';
|
||||||
$i=0;
|
|
||||||
if ($low_priority)
|
if ($low_priority) {
|
||||||
$query='UPDATE LOW_PRIORITY '.$table.' SET ';
|
$query='UPDATE LOW_PRIORITY '.$table.' SET ';
|
||||||
else
|
} else {
|
||||||
$query='UPDATE '.$table.' SET ';
|
$query='UPDATE '.$table.' SET ';
|
||||||
while(isset($fields[$i])){
|
}
|
||||||
if($i>0) { $query.=', '; }
|
$i=0;
|
||||||
$query.=' '.$fields[$i]."=".$this->db->quote($values[$i]);
|
foreach ($update as $field => $value) {
|
||||||
|
$query.= ' '.$field."=".$this->db->quote($value);
|
||||||
$i++;
|
$i++;
|
||||||
|
if ($i<count($update)) {
|
||||||
|
$query.= ',';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
$query = str_replace("'NULL'", 'NULL', $query);
|
$query = str_replace("'NULL'", 'NULL', $query);
|
||||||
$query.=' WHERE '.$where;
|
$query.=' WHERE '.$where;
|
||||||
@ -132,25 +139,25 @@ class WDB
|
|||||||
if ($debug) $tdeb=microtime_float();
|
if ($debug) $tdeb=microtime_float();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$stmt = $this->db->query($query, $debug);
|
$stmt = $this->db->query($query);
|
||||||
$res = $this->db->lastInsertId();
|
$res = $stmt->rowCount();
|
||||||
|
if ($debug) $this->trace($query, $res, $tdeb);
|
||||||
if ( $res == 0 ) {
|
if ( $res == 0 ) {
|
||||||
$res = true;
|
return false;
|
||||||
}
|
}
|
||||||
|
return $res;
|
||||||
} catch(Zend_Db_Exception $e) {
|
} catch(Zend_Db_Exception $e) {
|
||||||
$this->errorCode = $e->getCode();
|
$this->errorCode = $e->getCode();
|
||||||
$this->errorMsg = $e->getMessage();
|
$this->errorMsg = $e->getMessage();
|
||||||
|
$this->trace($query, $res, $tdeb);
|
||||||
$res = false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($debug) $this->trace($query, $res, $tdeb);
|
return false;
|
||||||
|
|
||||||
return $res;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
* Database delete
|
||||||
* @param unknown $table
|
* @param unknown $table
|
||||||
* @param unknown $where
|
* @param unknown $where
|
||||||
* @param string $debug
|
* @param string $debug
|
||||||
@ -159,6 +166,9 @@ class WDB
|
|||||||
*/
|
*/
|
||||||
public function delete($table, $where, $debug=false, $low_priority=false)
|
public function delete($table, $where, $debug=false, $low_priority=false)
|
||||||
{
|
{
|
||||||
|
$this->errorCode = 0;
|
||||||
|
$this->errorMsg = '';
|
||||||
|
|
||||||
if ($low_priority)
|
if ($low_priority)
|
||||||
$query='DELETE LOW_PRIORITY QUICK FROM `'.$table.'` WHERE '.$where.' LIMIT 1;';
|
$query='DELETE LOW_PRIORITY QUICK FROM `'.$table.'` WHERE '.$where.' LIMIT 1;';
|
||||||
else
|
else
|
||||||
@ -167,25 +177,25 @@ class WDB
|
|||||||
if ($debug) $tdeb=microtime_float();
|
if ($debug) $tdeb=microtime_float();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$stmt = $this->db->query($query, $debug);
|
$stmt = $this->db->query($query);
|
||||||
$res = $this->db->lastInsertId();
|
$res = $this->db->lastInsertId();
|
||||||
|
if ($debug) $this->trace($query, $res, $tdeb);
|
||||||
if ( $res == 0 ) {
|
if ( $res == 0 ) {
|
||||||
$res = true;
|
$res = true;
|
||||||
}
|
}
|
||||||
|
return $res;
|
||||||
} catch(Zend_Db_Exception $e) {
|
} catch(Zend_Db_Exception $e) {
|
||||||
$this->errorCode = $e->getCode();
|
$this->errorCode = $e->getCode();
|
||||||
$this->errorMsg = $e->getMessage();
|
$this->errorMsg = $e->getMessage();
|
||||||
|
$this->trace($query, $res, $tdeb);
|
||||||
$res = false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($debug) $this->trace($query, $res, $tdeb);
|
return false;
|
||||||
|
|
||||||
return $res;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
* Database select
|
||||||
* @param string $table
|
* @param string $table
|
||||||
* @param string $fields
|
* @param string $fields
|
||||||
* @param string $where
|
* @param string $where
|
||||||
@ -196,6 +206,9 @@ class WDB
|
|||||||
*/
|
*/
|
||||||
public function select($table, $fields, $where, $debug=false, $assoc=MYSQL_BOTH, $huge=false)
|
public function select($table, $fields, $where, $debug=false, $assoc=MYSQL_BOTH, $huge=false)
|
||||||
{
|
{
|
||||||
|
$this->errorCode = 0;
|
||||||
|
$this->errorMsg = '';
|
||||||
|
|
||||||
$query="SELECT $fields FROM $table WHERE $where;";
|
$query="SELECT $fields FROM $table WHERE $where;";
|
||||||
|
|
||||||
if ($debug) $tdeb=microtime_float();
|
if ($debug) $tdeb=microtime_float();
|
||||||
@ -205,7 +218,7 @@ class WDB
|
|||||||
} catch(Zend_Db_Exception $e) {
|
} catch(Zend_Db_Exception $e) {
|
||||||
$this->errorCode = $e->getCode();
|
$this->errorCode = $e->getCode();
|
||||||
$this->errorMsg = $e->getMessage();
|
$this->errorMsg = $e->getMessage();
|
||||||
file_put_contents(LOG_PATH.'/sqlerror.log', date('YmdHis')." - ".$query."\n".$e->getCode().':'. $e->getMessage());
|
$this->trace($query);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -260,13 +273,12 @@ class WDB
|
|||||||
*/
|
*/
|
||||||
public function trace($query, $res='', $tdeb = null)
|
public function trace($query, $res='', $tdeb = null)
|
||||||
{
|
{
|
||||||
|
|
||||||
if ( $tdeb === null) {
|
if ( $tdeb === null) {
|
||||||
$duree = substr(''.microtime_float()-$tdeb, 0, 5);
|
$duree = substr(''.microtime_float()-$tdeb, 0, 5);
|
||||||
} else {
|
} else {
|
||||||
$duree = 'N/D';
|
$duree = 'N/D';
|
||||||
}
|
}
|
||||||
file_put_contents(LOG_PATH . '/mysql_debug.log', date('Y/m/d - H:i:s') ." - ".$this->errorCode.":".$this->errorMsg." - $duree - $query\n", FILE_APPEND);
|
file_put_contents(LOG_PATH . '/mysql.log', date('Y-m-d H:i:s') ." - ".$query." - ".$this->errorCode.":".$this->errorMsg." - ".$duree."\n", FILE_APPEND);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -274,17 +286,20 @@ class WDB
|
|||||||
*/
|
*/
|
||||||
public function query($query, $debug=false)
|
public function query($query, $debug=false)
|
||||||
{
|
{
|
||||||
|
$this->errorCode = 0;
|
||||||
|
$this->errorMsg = '';
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$stmt = $this->db->query($query);
|
$stmt = $this->db->query($query);
|
||||||
$this->result = $stmt;
|
$this->result = $stmt;
|
||||||
} catch(Zend_Db_Exception $e) {
|
} catch(Zend_Db_Exception $e) {
|
||||||
$this->errorCode = $e->getCode();
|
$this->errorCode = $e->getCode();
|
||||||
$this->errorMsg = $e->getMessage();
|
$this->errorMsg = $e->getMessage();
|
||||||
|
$this->trace($query);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->result;
|
return $this->result->fetchAll(Zend_Db::FETCH_ASSOC);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Retourne le libellé de la dernière erreur **/
|
/** Retourne le libellé de la dernière erreur **/
|
||||||
|
@ -1,228 +1,372 @@
|
|||||||
<?php
|
<?php
|
||||||
class WDB
|
class WDB
|
||||||
{
|
{
|
||||||
private $host;
|
/**
|
||||||
private $database;
|
* @var Zend_Db_Adapter_Abstract
|
||||||
private $user;
|
*/
|
||||||
private $password;
|
protected $db = null;
|
||||||
private $con_id; // Connection ID with MySQL
|
|
||||||
private $result;
|
|
||||||
|
|
||||||
public function __construct($database='', $host='', $user='', $password='')
|
/**
|
||||||
|
*
|
||||||
|
* @var unknown
|
||||||
|
*/
|
||||||
|
protected $result = null;
|
||||||
|
|
||||||
|
protected $errorCode = 0;
|
||||||
|
|
||||||
|
protected $errorMsg = '';
|
||||||
|
|
||||||
|
public function __construct( $database = null, $host = null, $user = null, $password = null )
|
||||||
{
|
{
|
||||||
if ($host=='') $this->host=MYSQL_HOST;
|
if ( $database === null ) {
|
||||||
else $this->host=$host;
|
$database = 'jo';
|
||||||
if ($user=='') $this->user=MYSQL_USER;
|
|
||||||
else $this->user=$user;
|
|
||||||
if ($password=='') $this->password=MYSQL_PASS;
|
|
||||||
else $this->password=$password;
|
|
||||||
if ($database=='') $this->database=MYSQL_DEFAULT_DB;
|
|
||||||
else $this->database=$database;
|
|
||||||
|
|
||||||
$this->con_id = mysql_pconnect($this->host, $this->user, $this->password);
|
|
||||||
if (!($this->con_id === false)) {
|
|
||||||
if (mysql_select_db($this->database, $this->con_id) === false) {
|
|
||||||
echo date('Y/m/d - H:i:s') ." - ERREUR ".mysql_errno()." : Connection à la base de données impossible !".EOL;
|
|
||||||
echo date ('Y/m/d - H:i:s'). mysql_error();
|
|
||||||
die();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return mysql_query("SET NAMES 'utf8';", $this->con_id);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function setCharSet($charSet) {
|
if ( $host === null ) {
|
||||||
return (mysql_query("SET CHARACTER SET $charSet;", $this->con_id));
|
$c = Zend_Registry::get('config');
|
||||||
|
$config = new Zend_Config(array(
|
||||||
|
'adapter' => $c->profil->db->metier->adapter,
|
||||||
|
'params' => array(
|
||||||
|
'host' => $c->profil->db->metier->params->host,
|
||||||
|
'username'=> $c->profil->db->metier->params->username,
|
||||||
|
'password'=> $c->profil->db->metier->params->password,
|
||||||
|
'dbname'=> $database,
|
||||||
|
'driver_options' => array(
|
||||||
|
MYSQLI_INIT_COMMAND => "SET NAMES utf8",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
));
|
||||||
|
|
||||||
|
} else {
|
||||||
|
$config = new Zend_Config(array(
|
||||||
|
'adapter' => 'mysqli',
|
||||||
|
'params' => array(
|
||||||
|
'host' => $host,
|
||||||
|
'username'=> $user,
|
||||||
|
'password'=> $password,
|
||||||
|
'dbname'=> $database,
|
||||||
|
'driver_options' => array(
|
||||||
|
MYSQLI_INIT_COMMAND => "SET NAMES utf8",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
private function setDB() {
|
try {
|
||||||
return (mysql_query("USE $this->database;", $this->con_id));
|
$this->db = Zend_Db::factory($config);
|
||||||
|
} catch ( Exception $e ) {
|
||||||
|
file_put_contents(LOG_PATH . '/mysql.log', date('Y-m-d H:i:s') . ' - Erreur : ' . $e->getMessage()."\n", FILE_APPEND);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** INSERTION d'un tableau dans une table.
|
}
|
||||||
** Les index doivent avoir les mêmes noms que les champs.
|
|
||||||
** @param string Table
|
/**
|
||||||
** @param array Valeurs insérer
|
* INSERTION d'un tableau dans une table.
|
||||||
** @return int Dernière valeur de l'auto-incrément, 1 si pas d'auto-incrément et 0 si erreur
|
* Les index doivent avoir les mêmes noms que les champs.
|
||||||
**/
|
* @param string Table
|
||||||
|
* @param array Valeurs insérer
|
||||||
|
* @return int Dernière valeur de l'auto-incrément, 1 si pas d'auto-incrément et 0 si erreur
|
||||||
|
*/
|
||||||
public function insert($table, $toAdd, $debug=false, $low_priority=false)
|
public function insert($table, $toAdd, $debug=false, $low_priority=false)
|
||||||
{
|
{
|
||||||
$fields = implode(array_keys($toAdd), '`,`');
|
$this->errorCode = 0;
|
||||||
|
$this->errorMsg = '';
|
||||||
|
|
||||||
|
$fields = implode(array_keys($toAdd), ',');
|
||||||
foreach (array_values($toAdd) as $key=>$array_values)
|
foreach (array_values($toAdd) as $key=>$array_values)
|
||||||
$tmp[$key]=checkaddslashes($array_values);
|
$tmp[$key]=checkaddslashes($array_values);
|
||||||
|
|
||||||
$values = "'".implode(array_values($tmp), "','")."'"; # better
|
$values = "'".implode(array_values($tmp), "','")."'"; # better
|
||||||
$values = str_replace("'NULL'", 'NULL', $values);
|
$values = str_replace("'NULL'", 'NULL', $values);
|
||||||
|
|
||||||
if ($low_priority)
|
if ($low_priority) {
|
||||||
$query = 'INSERT DELAYED INTO `'.$table.'` (`'.$fields.'`) VALUES ('.$values.');';
|
$query = 'INSERT DELAYED INTO '.$table.' ('.$fields.') VALUES ('.$values.');';
|
||||||
else
|
} else {
|
||||||
$query = 'INSERT INTO `'.$table.'` (`'.$fields.'`) VALUES ('.$values.');';
|
$query = 'INSERT INTO '.$table.' ('.$fields.') VALUES ('.$values.');';
|
||||||
|
}
|
||||||
if ($debug) $tdeb=microtime_float();
|
if ($debug) $tdeb=microtime_float();
|
||||||
$res = mysql_query($query, $this->con_id);
|
|
||||||
if ($res!==false)
|
try {
|
||||||
{
|
$stmt = $this->db->query($query);
|
||||||
if (mysql_insert_id()>0)
|
$res = $this->db->lastInsertId();
|
||||||
$res=mysql_insert_id();
|
|
||||||
else
|
|
||||||
$res=true;
|
|
||||||
}
|
|
||||||
if ($debug) $this->trace($query, $res, $tdeb);
|
if ($debug) $this->trace($query, $res, $tdeb);
|
||||||
|
if ( $res == 0 ) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
return $res;
|
return $res;
|
||||||
|
} catch(Zend_Db_Exception $e) {
|
||||||
|
$this->errorCode = $e->getCode();
|
||||||
|
$this->errorMsg = $e->getMessage();
|
||||||
|
$this->trace($query, $res, $tdeb);
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Database Update
|
||||||
|
* @param unknown $table
|
||||||
|
* @param unknown $update
|
||||||
|
* @param unknown $where
|
||||||
|
* @param string $debug
|
||||||
|
* @param number $limit
|
||||||
|
* @param string $low_priority
|
||||||
|
* @return resource
|
||||||
|
*/
|
||||||
public function update($table, $update, $where, $debug=false, $limit=0, $low_priority=false)
|
public function update($table, $update, $where, $debug=false, $limit=0, $low_priority=false)
|
||||||
{
|
{
|
||||||
$fields = array_keys($update);
|
$this->errorCode = 0;
|
||||||
$values = array_values($update);
|
$this->errorMsg = '';
|
||||||
|
|
||||||
|
if ($low_priority) {
|
||||||
|
$query='UPDATE LOW_PRIORITY '.$table.' SET ';
|
||||||
|
} else {
|
||||||
|
$query='UPDATE '.$table.' SET ';
|
||||||
|
}
|
||||||
$i=0;
|
$i=0;
|
||||||
if ($low_priority)
|
foreach ($update as $field => $value) {
|
||||||
$query='UPDATE LOW_PRIORITY `'.$table.'` SET ';
|
$query.= ' '.$field."=".$this->db->quote($value);
|
||||||
else
|
|
||||||
$query='UPDATE `'.$table.'` SET ';
|
|
||||||
while(isset($fields[$i])){
|
|
||||||
if($i>0) { $query.=', '; }
|
|
||||||
$query.=' `'.$fields[$i]."`='".checkaddslashes($values[$i])."'";
|
|
||||||
$i++;
|
$i++;
|
||||||
|
if ($i<count($update)) {
|
||||||
|
$query.= ',';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
$query = str_replace("'NULL'", 'NULL', $query);
|
$query = str_replace("'NULL'", 'NULL', $query);
|
||||||
$query.=' WHERE '.$where;
|
$query.=' WHERE '.$where;
|
||||||
if ($limit>0) $query.=" LIMIT $limit";
|
if ($limit>0) $query.=" LIMIT $limit";
|
||||||
|
|
||||||
if ($debug) $tdeb=microtime_float();
|
if ($debug) $tdeb=microtime_float();
|
||||||
$res=mysql_query($query, $this->con_id);
|
|
||||||
|
try {
|
||||||
|
$stmt = $this->db->query($query);
|
||||||
|
$res = $stmt->rowCount();
|
||||||
if ($debug) $this->trace($query, $res, $tdeb);
|
if ($debug) $this->trace($query, $res, $tdeb);
|
||||||
|
if ( $res == 0 ) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
return $res;
|
return $res;
|
||||||
|
} catch(Zend_Db_Exception $e) {
|
||||||
|
$this->errorCode = $e->getCode();
|
||||||
|
$this->errorMsg = $e->getMessage();
|
||||||
|
$this->trace($query, $res, $tdeb);
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Database delete
|
||||||
|
* @param unknown $table
|
||||||
|
* @param unknown $where
|
||||||
|
* @param string $debug
|
||||||
|
* @param string $low_priority
|
||||||
|
* @return resource
|
||||||
|
*/
|
||||||
public function delete($table, $where, $debug=false, $low_priority=false)
|
public function delete($table, $where, $debug=false, $low_priority=false)
|
||||||
{
|
{
|
||||||
|
$this->errorCode = 0;
|
||||||
|
$this->errorMsg = '';
|
||||||
|
|
||||||
if ($low_priority)
|
if ($low_priority)
|
||||||
$query='DELETE LOW_PRIORITY QUICK FROM `'.$table.'` WHERE '.$where.' LIMIT 1;';
|
$query='DELETE LOW_PRIORITY QUICK FROM `'.$table.'` WHERE '.$where.' LIMIT 1;';
|
||||||
else
|
else
|
||||||
$query='DELETE FROM `'.$table.'` WHERE '.$where.' LIMIT 1;';
|
$query='DELETE FROM `'.$table.'` WHERE '.$where.' LIMIT 1;';
|
||||||
if ($debug) $tdeb=microtime_float();
|
|
||||||
$res=mysql_query($query, $this->con_id);
|
|
||||||
if ($debug) $this->trace($query, $res, $tdeb);
|
|
||||||
return $res;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function select($table, $fields, $where, $debug=false, $assoc=MYSQL_BOTH, $huge=false) {
|
|
||||||
if (mysql_select_db($this->database, $this->con_id) === false) {
|
|
||||||
echo date('Y/m/d - H:i:s') ." - ERREUR ".mysql_errno()." : Connection à la base de données impossible !".EOL;
|
|
||||||
echo date ('Y/m/d - H:i:s'). mysql_error();
|
|
||||||
die();
|
|
||||||
}
|
|
||||||
$query="SELECT $fields FROM $table WHERE $where;";
|
|
||||||
if ($debug) $tdeb=microtime_float();
|
if ($debug) $tdeb=microtime_float();
|
||||||
$this->result=mysql_query($query, $this->con_id);// or die(mysql_error());
|
|
||||||
if (mysql_errno()) {
|
try {
|
||||||
$fpErr=fopen(LOG_PATH.'/sqlerror.log','a');
|
$stmt = $this->db->query($query);
|
||||||
fwrite($fpErr, date('YmdHis'). ' - '.$query .EOL);
|
$res = $this->db->lastInsertId();
|
||||||
fwrite($fpErr, date('YmdHis'). ' - '.mysql_errno() .' - '. mysql_error().EOL);
|
if ($debug) $this->trace($query, $res, $tdeb);
|
||||||
|
if ( $res == 0 ) {
|
||||||
|
$res = true;
|
||||||
|
}
|
||||||
|
return $res;
|
||||||
|
} catch(Zend_Db_Exception $e) {
|
||||||
|
$this->errorCode = $e->getCode();
|
||||||
|
$this->errorMsg = $e->getMessage();
|
||||||
|
$this->trace($query, $res, $tdeb);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
// echo ;
|
|
||||||
if (!$huge) {
|
|
||||||
$tab=array();
|
|
||||||
while ($ligne = mysql_fetch_array($this->result, $assoc))
|
|
||||||
$tab[]=$ligne;
|
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Database select
|
||||||
|
* @param string $table
|
||||||
|
* @param string $fields
|
||||||
|
* @param string $where
|
||||||
|
* @param string $debug
|
||||||
|
* @param string $assoc
|
||||||
|
* @param string $huge
|
||||||
|
* @return boolean|multitype:multitype: |number
|
||||||
|
*/
|
||||||
|
public function select($table, $fields, $where, $debug=false, $assoc=MYSQL_BOTH, $huge=false)
|
||||||
|
{
|
||||||
|
$this->errorCode = 0;
|
||||||
|
$this->errorMsg = '';
|
||||||
|
|
||||||
|
$query="SELECT $fields FROM $table WHERE $where;";
|
||||||
|
|
||||||
|
if ($debug) $tdeb=microtime_float();
|
||||||
|
|
||||||
|
try {
|
||||||
|
$stmt = $this->db->query($query);
|
||||||
|
} catch(Zend_Db_Exception $e) {
|
||||||
|
$this->errorCode = $e->getCode();
|
||||||
|
$this->errorMsg = $e->getMessage();
|
||||||
|
$this->trace($query);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( !$huge ) {
|
||||||
|
switch($assoc) {
|
||||||
|
case MYSQL_NUM:
|
||||||
|
$mode = Zend_Db::FETCH_NUM;
|
||||||
|
break;
|
||||||
|
case MYSQL_ASSOC:
|
||||||
|
$mode = Zend_Db::FETCH_ASSOC;
|
||||||
|
break;
|
||||||
|
case MYSQL_BOTH:
|
||||||
|
$mode = Zend_Db::FETCH_BOTH;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
$tab = $stmt->fetchAll($mode);
|
||||||
if ($debug) $this->trace($query, sizeof($tab), $tdeb);
|
if ($debug) $this->trace($query, sizeof($tab), $tdeb);
|
||||||
return $tab;
|
return $tab;
|
||||||
} else {
|
} else {
|
||||||
$nbRows=mysql_num_rows($this->result);
|
$nbRows = $stmt->rowCount();
|
||||||
if ($debug) $this->trace($query, $nbRows, $tdeb);
|
if ($debug) $this->trace($query, $nbRows, $tdeb);
|
||||||
return $nbRows;
|
return $nbRows;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function fetch($assoc=MYSQL_BOTH) {
|
/**
|
||||||
return mysql_fetch_array($this->result, $assoc);
|
*
|
||||||
|
* @param string $assoc
|
||||||
|
* @return multitype:
|
||||||
|
*/
|
||||||
|
public function fetch($assoc=MYSQL_BOTH)
|
||||||
|
{
|
||||||
|
switch($assoc) {
|
||||||
|
case MYSQL_NUM:
|
||||||
|
$mode = Zend_Db::FETCH_NUM;
|
||||||
|
break;
|
||||||
|
case MYSQL_ASSOC:
|
||||||
|
$mode = Zend_Db::FETCH_ASSOC;
|
||||||
|
break;
|
||||||
|
case MYSQL_BOTH:
|
||||||
|
$mode = Zend_Db::FETCH_BOTH;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return $this->result->fetch($mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function trace($query, $res='', $tdeb=-1) {
|
/**
|
||||||
if (!$fp=fopen(LOG_PATH.'/mysql_insert.log', 'a'))
|
* Trace
|
||||||
return false;
|
* @param string $query
|
||||||
$errnum=mysql_errno($this->con_id);
|
* @param string $error
|
||||||
if ($tdeb>-1) $duree=substr(''.microtime_float()-$tdeb, 0, 5);
|
* @param int $tdeb
|
||||||
else $duree='N/D';
|
*/
|
||||||
if (!fwrite($fp, date('Y/m/d - H:i:s') ." - $errnum - $res - $duree - $query\n"))
|
public function trace($query, $res='', $tdeb = null)
|
||||||
return false;
|
{
|
||||||
if (!fclose($fp))
|
if ( $tdeb === null) {
|
||||||
return false;
|
$duree = substr(''.microtime_float()-$tdeb, 0, 5);
|
||||||
return true;
|
} else {
|
||||||
|
$duree = 'N/D';
|
||||||
|
}
|
||||||
|
file_put_contents(LOG_PATH . '/mysql.log', date('Y-m-d H:i:s') ." - ".$query." - ".$this->errorCode.":".$this->errorMsg." - ".$duree."\n", FILE_APPEND);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Exécute la requête passé en paramètre **/
|
/**
|
||||||
|
* Exécute la requête passé en paramètre
|
||||||
|
*/
|
||||||
public function query($query, $debug=false)
|
public function query($query, $debug=false)
|
||||||
{
|
{
|
||||||
$this->result=mysql_query($query, $this->con_id);
|
$this->errorCode = 0;
|
||||||
return $this->result;
|
$this->errorMsg = '';
|
||||||
|
|
||||||
|
try {
|
||||||
|
$stmt = $this->db->query($query);
|
||||||
|
$this->result = $stmt;
|
||||||
|
} catch(Zend_Db_Exception $e) {
|
||||||
|
$this->errorCode = $e->getCode();
|
||||||
|
$this->errorMsg = $e->getMessage();
|
||||||
|
$this->trace($query);
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Retourne le nombre de records de la dernière requête de sélection **
|
return $this->result->fetchAll(Zend_Db::FETCH_ASSOC);
|
||||||
public function getNumRows() {
|
|
||||||
return mysql_num_rows($this->con_id);
|
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
/** Retourne le libellé de la dernière erreur **/
|
/** Retourne le libellé de la dernière erreur **/
|
||||||
public function getLastErrorMsg() {
|
public function getLastErrorMsg()
|
||||||
return mysql_error($this->con_id);
|
{
|
||||||
|
return $this->errorMsg;
|
||||||
}
|
}
|
||||||
/** Retourne le numéro de la dernière erreur **/
|
/**
|
||||||
|
* Retourne le numéro de la dernière erreur
|
||||||
|
*/
|
||||||
public function getLastErrorNum()
|
public function getLastErrorNum()
|
||||||
{
|
{
|
||||||
return mysql_errno($this->con_id);
|
return $this->errorCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Retourne le libellé et le numéro de la dernière erreur **/
|
/** Retourne le libellé et le numéro de la dernière erreur **/
|
||||||
public function getLastError()
|
public function getLastError()
|
||||||
{
|
{
|
||||||
return mysql_error($this->con_id).' ('.mysql_errno($this->con_id).')';
|
return $this->errorMsg.' ('.$this->errorCode.')';
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Retourne le nombre de lignes modifiées par la dernière requête **/
|
/** Retourne le nombre de lignes modifiées par la dernière requête **/
|
||||||
public function getAffectedRows()
|
public function getAffectedRows()
|
||||||
{
|
{
|
||||||
return mysql_affected_rows($this->con_id);
|
return $this->result->rowCount();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Génère le fichier CSV pour la requete SQL
|
/**
|
||||||
**
|
* Génère le fichier CSV pour la requete SQL
|
||||||
** @param string $query
|
*
|
||||||
** @param string $fileCsv
|
* @param string $query
|
||||||
** @return bool
|
* @param string $fileCsv
|
||||||
|
* @return bool
|
||||||
*/
|
*/
|
||||||
public function exportCSV($query, $fileCsv, $sep=',', $eol=EOL) {
|
public function exportCSV($query, $fileCsv, $sep=',', $eol=EOL)
|
||||||
$i=$c=0;
|
{
|
||||||
|
$i = 0;
|
||||||
$fp = fopen($fileCsv, 'w');
|
$fp = fopen($fileCsv, 'w');
|
||||||
if (!$fp) return false;
|
if (!$fp) return false;
|
||||||
|
|
||||||
$res = $this->query($query);
|
$res = $this->query($query);
|
||||||
$nbLignes = mysql_num_rows($res);
|
$nbLignes = mysql_num_rows($res);
|
||||||
|
|
||||||
while ($ligne=$this->fetch(MYSQL_ASSOC)) {
|
while ($ligne=$this->fetch(MYSQL_ASSOC)) {
|
||||||
|
//Header
|
||||||
if ($i==0) {
|
if ($i==0) {
|
||||||
$nbCols = count($ligne);
|
$nbCols = count($ligne);
|
||||||
|
$fields = array();
|
||||||
|
$header = array();
|
||||||
foreach ($ligne as $libCol=>$col) {
|
foreach ($ligne as $libCol=>$col) {
|
||||||
$c++;
|
$header[] = $libCol;
|
||||||
if ($c<$nbCols) fwrite($fp, str_replace($sep,' ', $libCol).$sep);
|
$fields[] = $col;
|
||||||
else fwrite($fp, str_replace($sep,' ', $libCol));
|
|
||||||
}
|
}
|
||||||
fwrite($fp, $eol);
|
fputcsv($fp, $header, $sep, '"');
|
||||||
|
fputcsv($fp, $fields, $sep, '"');
|
||||||
}
|
}
|
||||||
$c=0;
|
//Content
|
||||||
|
else {
|
||||||
|
$fields = array();
|
||||||
foreach ($ligne as $libCol=>$col) {
|
foreach ($ligne as $libCol=>$col) {
|
||||||
$c++;
|
$fields[] = $col;
|
||||||
if ($c<$nbCols) fwrite($fp, str_replace($sep,' ', $col).$sep);
|
}
|
||||||
else fwrite($fp, str_replace($sep,' ', $col));
|
fputcsv($fp, $fields, $sep, '"');
|
||||||
}
|
}
|
||||||
fwrite($fp, $eol);
|
|
||||||
$i++;
|
$i++;
|
||||||
}
|
}
|
||||||
fclose($fp);
|
fclose($fp);
|
||||||
return $nbLignes;//$this->getAffectedRows();
|
return $nbLignes;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
?>
|
?>
|
@ -135,8 +135,6 @@
|
|||||||
$str = utf8_decode($str);
|
$str = utf8_decode($str);
|
||||||
$str = strtr($str,$tabReplace);
|
$str = strtr($str,$tabReplace);
|
||||||
return utf8_encode($str);
|
return utf8_encode($str);
|
||||||
//require_once 'i18n/cleanchar.php';
|
|
||||||
//return fixEncoding($str);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user