| Line 1... |
Line 1... |
| 1 |
<?php
|
1 |
<?php
|
| 2 |
|
- |
|
| 3 |
/**
|
2 |
/**
|
| 4 |
* @category PHP
|
3 |
* @category PHP
|
| 5 |
* @package jrest
|
4 |
* @package jrest
|
| 6 |
* @author Raphaël Droz <raphael@tela-botania.org>
|
5 |
* @author Raphaël Droz <raphael@tela-botania.org>
|
| 7 |
* @copyright 2013 Tela-Botanica
|
6 |
* @copyright 2013 Tela-Botanica
|
| Line 9... |
Line 8... |
| 9 |
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
|
8 |
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
|
| 10 |
*/
|
9 |
*/
|
| Line 11... |
Line 10... |
| 11 |
|
10 |
|
| 12 |
/**
|
11 |
/**
|
| 13 |
* Service d'import de données d'observation du CEL au format XLS
|
12 |
* Service d'import de données d'observation du CEL au format XLS
|
| - |
|
13 |
*
|
| - |
|
14 |
* Sont define()'d commme n° de colonne tous les abbrevs retournés par
|
| 14 |
*/
|
15 |
* ExportXLS::nomEnsembleVersListeColonnes() préfixés par C_ cf: detectionEntete()
|
| - |
|
16 |
*
|
| - |
|
17 |
* Exemple d'un test:
|
| 15 |
|
18 |
* $ GET "/jrest/ExportXLS/22506?format=csv&range=*&limite=13" \
|
| 16 |
// sont define()'d commme n° de colonne tous les abbrevs retournés par ExportXLS::nomEnsembleVersListeColonnes()
|
19 |
* | curl -F "upload=@-" -F utilisateur=22506 "/jrest/ImportXLS"
|
| - |
|
20 |
* # 13 observations importées
|
| - |
|
21 |
* + cf MySQL general_log = 1
|
| - |
|
22 |
*
|
| Line 17... |
Line 23... |
| 17 |
// préfixés par C_ cf: detectionEntete()
|
23 |
**/
|
| 18 |
|
24 |
|
| 19 |
set_include_path(get_include_path() . PATH_SEPARATOR . dirname(dirname(realpath(__FILE__))) . '/lib');
|
25 |
set_include_path(get_include_path() . PATH_SEPARATOR . dirname(dirname(realpath(__FILE__))) . '/lib');
|
| 20 |
// TERM
|
26 |
// TERM
|
| Line 77... |
Line 83... |
| 77 |
"ce_zone_geo",
|
83 |
"ce_zone_geo",
|
| 78 |
"date_observation",
|
84 |
"date_observation",
|
| 79 |
"lieudit",
|
85 |
"lieudit",
|
| 80 |
"station",
|
86 |
"station",
|
| 81 |
"milieu",
|
87 |
"milieu",
|
| - |
|
88 |
"mots_cles_texte",
|
| 82 |
"commentaire",
|
89 |
"commentaire",
|
| 83 |
"transmission",
|
90 |
"transmission",
|
| 84 |
"date_creation",
|
91 |
"date_creation",
|
| 85 |
"date_modification",
|
92 |
"date_modification",
|
| - |
|
93 |
"date_transmission",
|
| 86 |
"latitude",
|
94 |
"latitude",
|
| 87 |
"longitude",
|
95 |
"longitude",
|
| - |
|
96 |
"abondance",
|
| - |
|
97 |
"certitude",
|
| 88 |
"phenologie",
|
98 |
"phenologie",
|
| 89 |
"code_insee_calcule"
|
99 |
"code_insee_calcule"
|
| 90 |
);
|
100 |
);
|
| Line -... |
Line 101... |
| - |
|
101 |
|
| 91 |
|
102 |
// cf: initialiser_pdo_ordered_statements()
|
| 92 |
// eg: "INSERT INTO cel_obs (ce_utilisateur, ..., phenologie, code_insee_calcule) VALUES"
|
103 |
// eg: "INSERT INTO cel_obs (ce_utilisateur, ..., phenologie, code_insee_calcule) VALUES"
|
| 93 |
// colonnes statiques d'abord, les autres ensuite, dans l'ordre de $ordre_BDD
|
104 |
// colonnes statiques d'abord, les autres ensuite, dans l'ordre de $ordre_BDD
|
| 94 |
static $insert_prefix_ordre;
|
- |
|
| 95 |
|
- |
|
| 96 |
// seconde possibilité
|
- |
|
| 97 |
// eg: "INSERT INTO cel_obs (ce_utilisateur, ..., date_creation, ...phenologie, code_insee_calcule) VALUES"
|
- |
|
| 98 |
static $insert_prefix;
|
- |
|
| 99 |
|
105 |
static $insert_prefix_ordre;
|
| 100 |
// eg: "(<id>, <prenom>, <nom>, <email>, now(), now(), ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
|
106 |
// eg: "(<id>, <prenom>, <nom>, <email>, now(), now(), ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
|
| 101 |
// dont le nombre de placeholder dépend du nombre de colonnes non-statiques
|
107 |
// dont le nombre de placeholder dépend du nombre de colonnes non-statiques
|
| 102 |
// colonnes statiques d'abord, les autres ensuite, dans l'ordre de $ordre_BDD
|
108 |
// colonnes statiques d'abord, les autres ensuite, dans l'ordre de $ordre_BDD
|
| Line 103... |
Line 109... |
| 103 |
static $insert_ligne_pattern_ordre;
|
109 |
static $insert_ligne_pattern_ordre;
|
| - |
|
110 |
|
| - |
|
111 |
// seconde (meilleure) possibilité
|
| - |
|
112 |
// cf: initialiser_pdo_statements()
|
| 104 |
|
113 |
// eg: "INSERT INTO cel_obs (ce_utilisateur, ..., date_creation, ...phenologie, code_insee_calcule) VALUES"
|
| 105 |
// seconde possibilité:
|
114 |
static $insert_prefix;
|
| 106 |
// eg: "(<id>, <prenom>, <nom>, <email>, ?, ?, ?, now(), now(), ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
|
115 |
// eg: "(<id>, <prenom>, <nom>, <email>, ?, ?, ?, now(), now(), ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
|
| Line 107... |
Line 116... |
| 107 |
// dont le nombre de placeholder dépend du nombre de colonnes non-statiques
|
116 |
// dont le nombre de placeholder dépend du nombre de colonnes non-statiques
|
| 108 |
static $insert_ligne_pattern;
|
117 |
static $insert_ligne_pattern;
|
| 109 |
|
118 |
|
| 110 |
/*
|
119 |
/*
|
| 111 |
Ces colonnes:
|
120 |
Ces colonnes:
|
| 112 |
- sont propres à l'ensemble des enregistrements uploadés
|
121 |
- sont propres à l'ensemble des enregistrements uploadés
|
| - |
|
122 |
- sont indépendantes du numéro de lignes
|
| - |
|
123 |
- n'ont pas de valeur par défaut dans la structure de la table
|
| 113 |
- sont indépendantes du numéro de lignes
|
124 |
- nécessitent une initialisation dans le cadre de l'upload
|
| 114 |
- n'ont pas de valeur par défaut dans la structure de la table
|
125 |
|
| 115 |
- nécessitent une initialisation dans le cadre de l'upload
|
126 |
initialiser_colonnes_statiques() y merge les données d'identification utilisateur
|
| 116 |
*/
|
127 |
*/
|
| 117 |
public $colonnes_statiques = Array(
|
128 |
public $colonnes_statiques = Array(
|
| Line 126... |
Line 137... |
| 126 |
"date_creation" => "now()",
|
137 |
"date_creation" => "now()",
|
| 127 |
"date_modification" => "now()",
|
138 |
"date_modification" => "now()",
|
| 128 |
);
|
139 |
);
|
| Line 129... |
Line 140... |
| 129 |
|
140 |
|
| - |
|
141 |
public $id_utilisateur = NULL;
|
| 130 |
public $id_utilisateur = NULL;
|
142 |
|
| 131 |
// erreurs d'import
|
143 |
// erreurs d'import
|
| Line -... |
Line 144... |
| - |
|
144 |
public $bilan = Array();
|
| 132 |
public $bilan = Array();
|
145 |
|
| 133 |
|
146 |
|
| 134 |
function ExportXLS($config) {
|
147 |
function ExportXLS($config) {
|
| Line 135... |
Line 148... |
| 135 |
parent::__construct($config);
|
148 |
parent::__construct($config);
|
| 136 |
}
|
149 |
}
|
| 137 |
|
150 |
|
| 138 |
function createElement($pairs) {
|
151 |
function createElement($pairs) {
|
| - |
|
152 |
if(!isset($pairs['utilisateur']) || trim($pairs['utilisateur']) == '') {
|
| 139 |
if(!isset($pairs['utilisateur']) || trim($pairs['utilisateur']) == '') {
|
153 |
echo '0'; exit;
|
| 140 |
echo '0'; exit;
|
154 |
}
|
| Line 141... |
Line 155... |
| 141 |
}
|
155 |
|
| 142 |
$id_utilisateur = intval($pairs['utilisateur']);
|
156 |
$id_utilisateur = intval($pairs['utilisateur']);
|
| Line 143... |
Line 157... |
| 143 |
$this->id_utilisateur = $id_utilisateur; // pour traiterImage();
|
157 |
$this->id_utilisateur = $id_utilisateur; // pour traiterImage();
|
| - |
|
158 |
|
| 144 |
|
159 |
if(!isset($_SESSION)) session_start();
|
| Line 145... |
Line 160... |
| 145 |
if(!isset($_SESSION)) session_start();
|
160 |
$this->controleUtilisateur($id_utilisateur);
|
| 146 |
$this->controleUtilisateur($id_utilisateur);
|
161 |
|
| 147 |
|
162 |
$this->utilisateur = $this->getInfosComplementairesUtilisateur($id_utilisateur);
|
| 148 |
$this->utilisateur = $this->getInfosComplementairesUtilisateur($id_utilisateur);
|
- |
|
| 149 |
$this->initialiser_colonnes_statiques($id_utilisateur);
|
163 |
|
| 150 |
|
- |
|
| 151 |
// initialisation du statement PDO/MySQL
|
- |
|
| 152 |
self::$insert_prefix_ordre = 'INSERT INTO cel_obs ('.
|
164 |
$this->initialiser_colonnes_statiques($id_utilisateur);
|
| 153 |
implode(', ', array_keys($this->colonnes_statiques)) .
|
- |
|
| 154 |
', ' .
|
- |
|
| 155 |
implode(', ', array_diff(self::$ordre_BDD, array_keys($this->colonnes_statiques))) .
|
- |
|
| 156 |
') VALUES ';
|
- |
|
| 157 |
|
165 |
|
| 158 |
self::$insert_prefix = 'INSERT INTO cel_obs ('.
|
- |
|
| 159 |
implode(', ', self::$ordre_BDD) . ') VALUES ';
|
- |
|
| 160 |
|
- |
|
| 161 |
self::$insert_ligne_pattern_ordre =
|
- |
|
| Line 162... |
Line -... |
| 162 |
'(' .
|
- |
|
| 163 |
implode(', ', $this->colonnes_statiques) .
|
- |
|
| 164 |
', ' .
|
- |
|
| 165 |
str_repeat('?, ', count(self::$ordre_BDD) - count($this->colonnes_statiques) - 1) .
|
- |
|
| 166 |
'?' .
|
- |
|
| 167 |
')';
|
- |
|
| 168 |
|
- |
|
| 169 |
self::$insert_ligne_pattern =
|
- |
|
| 170 |
'(' .
|
- |
|
| Line 171... |
Line 166... |
| 171 |
implode(', ', array_values(array_map(
|
166 |
// initialisation du statement PDO/MySQL
|
| Line 172... |
Line 167... |
| 172 |
function($item) { return is_null($item) ? '?' : $item; },
|
167 |
// première version, pattern de requête pas génial
|
| 173 |
array_merge(
|
168 |
/* list(self;;$insert_prefix_ordre, self::$insert_ligne_pattern_ordre) =
|
| Line 266... |
Line 261... |
| 266 |
$this->bdd->beginTransaction();
|
261 |
$this->bdd->beginTransaction();
|
| 267 |
$stmt = $this->bdd->prepare($sql_pattern);
|
262 |
$stmt = $this->bdd->prepare($sql_pattern);
|
| 268 |
$donnees = array();
|
263 |
$donnees = array();
|
| 269 |
foreach($enregistrements as $e) $donnees = array_merge($donnees, array_values($e));
|
264 |
foreach($enregistrements as $e) $donnees = array_merge($donnees, array_values($e));
|
| Line 270... |
Line -... |
| 270 |
|
- |
|
| 271 |
echo $sql_pattern;
|
265 |
|
| 272 |
var_dump($enregistrements);
|
- |
|
| Line 273... |
Line 266... |
| 273 |
var_dump($donnees);die;
|
266 |
/* debug ici: echo $sql_pattern . "\n"; var_dump($enregistrements, $donnees); die;*/
|
| Line 274... |
Line 267... |
| 274 |
|
267 |
|
| 275 |
$stmt->execute($donnees);
|
268 |
$stmt->execute($donnees);
|
| Line 408... |
Line 401... |
| 408 |
$requete = sprintf($images_insert, implode(', ', $images_obs_assoc));
|
401 |
$requete = sprintf($images_insert, implode(', ', $images_obs_assoc));
|
| 409 |
echo "$requete\n";
|
402 |
echo "$requete\n";
|
| 410 |
}
|
403 |
}
|
| 411 |
}
|
404 |
}
|
| Line 412... |
Line 405... |
| 412 |
|
405 |
|
| - |
|
406 |
/*
|
| - |
|
407 |
Aucune des valeurs présentes dans $enregistrement n'est quotée
|
| - |
|
408 |
cad aucune des valeurs retournée par traiter{Espece|Localisation}()
|
| - |
|
409 |
car ce tableau est passé à un PDO::preparedStatement() qui applique
|
| - |
|
410 |
proprement les règle d'échappement.
|
| 413 |
|
411 |
*/
|
| 414 |
static function chargerLigne($ligne, $dernier_ordre, $cel) {
|
412 |
static function chargerLigne($ligne, $dernier_ordre, $cel) {
|
| 415 |
// en premier car le résultat est utile pour
|
413 |
// en premier car le résultat est utile pour
|
| 416 |
// traiter longitude et latitude (traiterLonLat())
|
414 |
// traiter longitude et latitude (traiterLonLat())
|
| Line 423... |
Line 421... |
| 423 |
|
421 |
|
| 424 |
// $localisation est rempli à partir de plusieurs champs: C_ZONE_GEO et C_CE_ZONE_GEO
|
422 |
// $localisation est rempli à partir de plusieurs champs: C_ZONE_GEO et C_CE_ZONE_GEO
|
| 425 |
$localisation = Array(C_ZONE_GEO => NULL, C_CE_ZONE_GEO => NULL);
|
423 |
$localisation = Array(C_ZONE_GEO => NULL, C_CE_ZONE_GEO => NULL);
|
| Line -... |
Line 424... |
| - |
|
424 |
self::traiterLocalisation($ligne, $localisation, $cel);
|
| - |
|
425 |
|
| - |
|
426 |
// $transmission est utilisé pour date_transmission
|
| - |
|
427 |
$transmission = in_array(strtolower(trim($ligne[C_TRANSMISSION])), array(1, 'oui')) ? 1 : 0;
|
| 426 |
self::traiterLocalisation($ligne, $localisation, $cel);
|
428 |
|
| 427 |
|
429 |
|
| 428 |
// Dans ce tableau, seules devraient apparaître les données variable pour chaque ligne.
|
430 |
// Dans ce tableau, seules devraient apparaître les données variable pour chaque ligne.
|
| 429 |
// Dans ce tableau, l'ordre des clefs n'importe pas (cf: self::sortArrayByArray())
|
431 |
// Dans ce tableau, l'ordre des clefs n'importe pas (cf: self::sortArrayByArray())
|
| Line 430... |
Line -... |
| 430 |
$enregistrement = Array(
|
- |
|
| 431 |
"ordre" => $dernier_ordre,
|
432 |
$enregistrement = Array(
|
| 432 |
|
433 |
"ordre" => $dernier_ordre,
|
| 433 |
// $this->quoteNonNull() est déjà appliquée dans traiterEspece()
|
434 |
|
| 434 |
"nom_sel" => $espece[C_NOM_SEL],
|
435 |
"nom_sel" => $espece[C_NOM_SEL],
|
| 435 |
"nom_sel_nn" => $espece[C_NOM_SEL_NN],
|
436 |
"nom_sel_nn" => $espece[C_NOM_SEL_NN],
|
| 436 |
"nom_ret" => $espece[C_NOM_RET],
|
437 |
"nom_ret" => $espece[C_NOM_RET],
|
| Line 437... |
Line 438... |
| 437 |
"nom_ret_nn" => $espece[C_NOM_RET_NN],
|
438 |
"nom_ret_nn" => $espece[C_NOM_RET_NN],
|
| Line 438... |
Line -... |
| 438 |
"nt" => $espece[C_NT],
|
- |
|
| 439 |
"famille" => $espece[C_FAMILLE],
|
439 |
"nt" => $espece[C_NT],
|
| 440 |
|
440 |
"famille" => $espece[C_FAMILLE],
|
| Line 441... |
Line 441... |
| 441 |
"nom_referentiel" => $cel->quoteNonNull($referentiel),
|
441 |
|
| 442 |
|
442 |
"nom_referentiel" => $referentiel,
|
| Line 443... |
Line 443... |
| 443 |
// $this->quoteNonNull() est déjà appliquée dans traiterLocalisation()
|
443 |
|
| 444 |
"zone_geo" => $localisation[C_ZONE_GEO],
|
444 |
"zone_geo" => $localisation[C_ZONE_GEO],
|
| 445 |
"ce_zone_geo" => $localisation[C_CE_ZONE_GEO],
|
445 |
"ce_zone_geo" => $localisation[C_CE_ZONE_GEO],
|
| 446 |
|
- |
|
| Line -... |
Line 446... |
| - |
|
446 |
|
| - |
|
447 |
// $ligne: uniquement pour les infos en cas de gestion d'erreurs (date incompréhensible)
|
| Line -... |
Line 448... |
| - |
|
448 |
"date_observation" => self::traiterDateObs($ligne[C_DATE_OBSERVATION], $ligne),
|
| 447 |
// $ligne: uniquement pour les infos en cas de gestion d'erreurs (date incompréhensible)
|
449 |
|
| Line 448... |
Line 450... |
| 448 |
"date_observation" => $cel->quoteNonNull(self::traiterDateObs($ligne[C_DATE_OBSERVATION], $ligne)),
|
450 |
"lieudit" => trim($ligne[C_LIEUDIT]),
|
| 449 |
|
451 |
"station" => trim($ligne[C_STATION]),
|
| 450 |
"lieudit" => $cel->quoteNonNull(trim($ligne[C_LIEUDIT])),
|
452 |
"milieu" => trim($ligne[C_MILIEU]),
|
| Line 451... |
Line 453... |
| 451 |
"station" => $cel->quoteNonNull(trim($ligne[C_STATION])),
|
453 |
|
| 452 |
"milieu" => $cel->quoteNonNull(trim($ligne[C_MILIEU])),
|
454 |
"mots_cles_texte" => NULL, // TODO: foreign-key
|
| 453 |
"commentaire" => NULL, //$cel->quoteNonNull(trim($ligne[C_COMMENTAIRE])), // TODO: foreign-key
|
455 |
"commentaire" => trim($ligne[C_COMMENTAIRE]),
|
| 454 |
|
456 |
|
| Line 455... |
Line 457... |
| 455 |
|
457 |
"transmission" => $transmission,
|
| 456 |
"transmission" => in_array(strtolower(trim($ligne[C_TRANSMISSION])), array(1, 'oui')) ? 1 : 0,
|
458 |
"date_transmission" => $transmission ? date("Y-m-d H:i:s") : NULL, // pas de fonction SQL dans un PDO statement, <=> now()
|
| Line 457... |
Line 459... |
| 457 |
|
459 |
|
| 458 |
// $ligne: uniquement pour les infos en cas de gestion d'erreurs (lon/lat incompréhensible)
|
460 |
// $ligne: uniquement pour les infos en cas de gestion d'erreurs (lon/lat incompréhensible)
|
| 459 |
"latitude" => self::traiterLonLat(NULL, $ligne[C_LATITUDE], $referentiel, $ligne),
|
461 |
"latitude" => self::traiterLonLat(NULL, $ligne[C_LATITUDE], $referentiel, $ligne),
|
| Line 476... |
Line 478... |
| 476 |
}
|
478 |
}
|
| Line 477... |
Line 479... |
| 477 |
|
479 |
|
| 478 |
static function traiterImage($str, $cel, &$enregistrement) {
|
480 |
static function traiterImage($str, $cel, &$enregistrement) {
|
| 479 |
$liste_images = array_filter(explode("/", $str));
|
481 |
$liste_images = array_filter(explode("/", $str));
|
| 480 |
array_walk($liste_images,
|
482 |
array_walk($liste_images,
|
| 481 |
function($item, $key, $obj) { $item = $obj->quoteNonNull_real(trim($item)); },
|
483 |
function($item, $key, $obj) { $item = $obj->quoteNonNull(trim($item)); },
|
| 482 |
$cel);
|
484 |
$cel);
|
| 483 |
$requete = sprintf(
|
485 |
$requete = sprintf(
|
| 484 |
"SELECT id_image, nom_original FROM cel_images WHERE ce_utilisateur = %d AND nom_original IN (\"%s\")",
|
486 |
"SELECT id_image, nom_original FROM cel_images WHERE ce_utilisateur = %d AND nom_original IN (\"%s\")",
|
| 485 |
$cel->id_utilisateur,
|
487 |
$cel->id_utilisateur,
|
| Line 588... |
Line 590... |
| 588 |
$resultat_recherche_espece = $taxon_info_webservice->rechercherInfosSurTexteCodeOuNumTax($ligne[C_NOM_SEL]);
|
590 |
$resultat_recherche_espece = $taxon_info_webservice->rechercherInfosSurTexteCodeOuNumTax($ligne[C_NOM_SEL]);
|
| Line 589... |
Line 591... |
| 589 |
|
591 |
|
| 590 |
// on supprime les noms retenus et renvoi tel quel
|
592 |
// on supprime les noms retenus et renvoi tel quel
|
| 591 |
// on réutilise les define pour les noms d'indexes, tant qu'à faire
|
593 |
// on réutilise les define pour les noms d'indexes, tant qu'à faire
|
| 592 |
if (empty($resultat_recherche_espece['en_id_nom'])) {
|
594 |
if (empty($resultat_recherche_espece['en_id_nom'])) {
|
| Line 593... |
Line 595... |
| 593 |
$espece[C_NOM_SEL] = $cel->quoteNonNull(trim($ligne[C_NOM_SEL]));
|
595 |
$espece[C_NOM_SEL] = trim($ligne[C_NOM_SEL]);
|
| 594 |
|
596 |
|
| 595 |
// le reste reste à NULL
|
597 |
// le reste reste à NULL
|
| 596 |
// TODO: si empty(C_NOM_SEL) et !empty(C_NOM_SEL_NN) : recherche info à partir de C_NOM_SEL_NN
|
598 |
// TODO: si empty(C_NOM_SEL) et !empty(C_NOM_SEL_NN) : recherche info à partir de C_NOM_SEL_NN
|
| Line 602... |
Line 604... |
| 602 |
|
604 |
|
| 603 |
return;
|
605 |
return;
|
| Line 604... |
Line 606... |
| 604 |
}
|
606 |
}
|
| 605 |
|
607 |
|
| 606 |
// succès de la détection, récupération des infos
|
608 |
// succès de la détection, récupération des infos
|
| Line 607... |
Line 609... |
| 607 |
$espece[C_NOM_SEL] = $cel->quoteNonNull($resultat_recherche_espece['nom_sel']);
|
609 |
$espece[C_NOM_SEL] = $resultat_recherche_espece['nom_sel'];
|
| 608 |
$espece[C_NOM_SEL_NN] = $cel->quoteNonNull($resultat_recherche_espece['en_id_nom']);
|
610 |
$espece[C_NOM_SEL_NN] = $resultat_recherche_espece['en_id_nom'];
|
| 609 |
|
611 |
|
| 610 |
$complement = $taxon_info_webservice->rechercherInformationsComplementairesSurNumNom($resultat_recherche_espece['en_id_nom']);
|
612 |
$complement = $taxon_info_webservice->rechercherInformationsComplementairesSurNumNom($resultat_recherche_espece['en_id_nom']);
|
| 611 |
$espece[C_NOM_RET] = $cel->quoteNonNull($complement['Nom_Retenu']);
|
613 |
$espece[C_NOM_RET] = $complement['Nom_Retenu'];
|
| 612 |
$espece[C_NOM_RET_NN] = $cel->quoteNonNull($complement['Num_Nom_Retenu']);
|
614 |
$espece[C_NOM_RET_NN] = $complement['Num_Nom_Retenu'];
|
| Line 613... |
Line 615... |
| 613 |
$espece[C_NT] = $cel->quoteNonNull($complement['Num_Taxon']);
|
615 |
$espece[C_NT] = $complement['Num_Taxon'];
|
| 614 |
$espece[C_FAMILLE] = $cel->quoteNonNull($complement['Famille']);
|
616 |
$espece[C_FAMILLE] = $complement['Famille'];
|
| Line 628... |
Line 630... |
| 628 |
if (preg_match('/(.*) \((\d+)\)/', $identifiant_commune, $elements)) {
|
630 |
if (preg_match('/(.*) \((\d+)\)/', $identifiant_commune, $elements)) {
|
| 629 |
// commune + departement : montpellier (34)
|
631 |
// commune + departement : montpellier (34)
|
| 630 |
$nom_commune=$elements[1];
|
632 |
$nom_commune=$elements[1];
|
| 631 |
$code_commune=$elements[2];
|
633 |
$code_commune=$elements[2];
|
| 632 |
$requete = sprintf("%s WHERE nom = %s AND code LIKE %s",
|
634 |
$requete = sprintf("%s WHERE nom = %s AND code LIKE %s",
|
| 633 |
$select, $cel->quoteNonNull_real($nom_commune), $cel->quoteNonNull_real($code_commune.'%'));
|
635 |
$select, $cel->quoteNonNull($nom_commune), $cel->quoteNonNull($code_commune.'%'));
|
| 634 |
}
|
636 |
}
|
| 635 |
elseif (preg_match('/^(\d+|(2[ab]\d+))$/i', $identifiant_commune, $elements)) {
|
637 |
elseif (preg_match('/^(\d+|(2[ab]\d+))$/i', $identifiant_commune, $elements)) {
|
| 636 |
// Code insee seul
|
638 |
// Code insee seul
|
| 637 |
$code_insee_commune=$elements[1];
|
639 |
$code_insee_commune=$elements[1];
|
| 638 |
$requete = sprintf("%s WHERE code = %s", $select, $cel->quoteNonNull_real($code_insee_commune));
|
640 |
$requete = sprintf("%s WHERE code = %s", $select, $cel->quoteNonNull($code_insee_commune));
|
| 639 |
}
|
641 |
}
|
| 640 |
else {
|
642 |
else {
|
| 641 |
// Commune seule (le departement sera recupere dans la colonne departement si elle est presente)
|
643 |
// Commune seule (le departement sera recupere dans la colonne departement si elle est presente)
|
| 642 |
// on prend le risque ici de retourner une mauvaise Commune
|
644 |
// on prend le risque ici de retourner une mauvaise Commune
|
| 643 |
$nom_commune = str_replace(" ", "%", iconv('UTF-8', 'ASCII//TRANSLIT', $identifiant_commune));
|
645 |
$nom_commune = str_replace(" ", "%", iconv('UTF-8', 'ASCII//TRANSLIT', $identifiant_commune));
|
| 644 |
$requete = sprintf("%s WHERE nom LIKE %s", $select, $cel->quoteNonNull_real($nom_commune.'%'));
|
646 |
$requete = sprintf("%s WHERE nom LIKE %s", $select, $cel->quoteNonNull($nom_commune.'%'));
|
| 645 |
}
|
647 |
}
|
| Line 646... |
Line 648... |
| 646 |
|
648 |
|
| 647 |
$resultat_commune = $cel->requeter($requete);
|
649 |
$resultat_commune = $cel->requeter($requete);
|
| Line 668... |
Line 670... |
| 668 |
// if(strlen($departement) <= 9) return "INSEE-C:0" . $departement; // ? ... TODO
|
670 |
// if(strlen($departement) <= 9) return "INSEE-C:0" . $departement; // ? ... TODO
|
| Line 669... |
Line 671... |
| 669 |
|
671 |
|
| Line 670... |
Line 672... |
| 670 |
$departement = trim($departement); // TODO
|
672 |
$departement = trim($departement); // TODO
|
| 671 |
|
673 |
|
| 672 |
protectloc:
|
674 |
protectloc:
|
| 673 |
$localisation[C_ZONE_GEO] = $cel->quoteNonNull($localisation[C_ZONE_GEO]);
|
675 |
$localisation[C_ZONE_GEO] = $localisation[C_ZONE_GEO];
|
| Line 674... |
Line 676... |
| 674 |
$localisation[C_CE_ZONE_GEO] = $cel->quoteNonNull($localisation[C_CE_ZONE_GEO]);
|
676 |
$localisation[C_CE_ZONE_GEO] = $localisation[C_CE_ZONE_GEO];
|
| Line 698... |
Line 700... |
| 698 |
'EST' => 9.7, // Corse
|
700 |
'EST' => 9.7, // Corse
|
| 699 |
'OUEST' => -5.2); // Ouessan
|
701 |
'OUEST' => -5.2); // Ouessan
|
| 700 |
return FALSE;
|
702 |
return FALSE;
|
| 701 |
}
|
703 |
}
|
| Line 702... |
Line -... |
| 702 |
|
- |
|
| - |
|
704 |
|
| - |
|
705 |
// ces valeurs ne sont pas inséré via les placeholders du PDO::preparedStatement
|
| 703 |
|
706 |
// et doivent donc être échappées correctement.
|
| 704 |
public function initialiser_colonnes_statiques() {
|
707 |
public function initialiser_colonnes_statiques() {
|
| 705 |
$this->colonnes_statiques = array_merge($this->colonnes_statiques,
|
708 |
$this->colonnes_statiques = array_merge($this->colonnes_statiques,
|
| 706 |
Array(
|
709 |
Array(
|
| 707 |
"ce_utilisateur" => $this->id_utilisateur,
|
710 |
"ce_utilisateur" => $this->id_utilisateur,
|
| 708 |
"prenom_utilisateur" => $this->quoteNonNull_real($this->utilisateur['prenom']),
|
711 |
"prenom_utilisateur" => $this->quoteNonNull($this->utilisateur['prenom']),
|
| 709 |
"nom_utilisateur" => $this->quoteNonNull_real($this->utilisateur['nom']),
|
712 |
"nom_utilisateur" => $this->quoteNonNull($this->utilisateur['nom']),
|
| 710 |
"courriel_utilisateur" => $this->quoteNonNull_real($this->utilisateur['courriel']),
|
713 |
"courriel_utilisateur" => $this->quoteNonNull($this->utilisateur['courriel']),
|
| Line 711... |
Line 714... |
| 711 |
));
|
714 |
));
|
| Line 712... |
Line 715... |
| 712 |
|
715 |
|
| - |
|
716 |
}
|
| 713 |
}
|
717 |
|
| 714 |
|
718 |
static function initialiser_pdo_ordered_statements($colonnes_statiques) {
|
| - |
|
719 |
return Array(
|
| - |
|
720 |
// insert_ligne_pattern_ordre
|
| - |
|
721 |
sprintf('INSERT INTO cel_obs (%s, %s) VALUES',
|
| - |
|
722 |
implode(', ', array_keys($colonnes_statiques)),
|
| - |
|
723 |
implode(', ', array_diff(self::$ordre_BDD, array_keys($colonnes_statiques)))),
|
| 715 |
private function quoteNonNull_real($chaine) {
|
724 |
|
| - |
|
725 |
// insert_ligne_pattern_ordre
|
| - |
|
726 |
sprintf('(%s, %s ?)',
|
| - |
|
727 |
implode(', ', $colonnes_statiques),
|
| - |
|
728 |
str_repeat('?, ', count(self::$ordre_BDD) - count($colonnes_statiques) - 1))
|
| - |
|
729 |
);
|
| - |
|
730 |
}
|
| - |
|
731 |
|
| - |
|
732 |
static function initialiser_pdo_statements($colonnes_statiques) {
|
| - |
|
733 |
return Array(
|
| - |
|
734 |
// insert_prefix
|
| - |
|
735 |
sprintf('INSERT INTO cel_obs (%s) VALUES ',
|
| - |
|
736 |
implode(', ', self::$ordre_BDD)),
|
| - |
|
737 |
|
| - |
|
738 |
// insert_ligne_pattern =
|
| - |
|
739 |
'(' .
|
| - |
|
740 |
implode(', ', array_values(array_map(
|
| - |
|
741 |
function($item) { return is_null($item) ? '?' : $item; },
|
| - |
|
742 |
array_merge(
|
| - |
|
743 |
array_map(function() { return NULL; }, array_flip(self::$ordre_BDD)),
|
| - |
|
744 |
$colonnes_statiques
|
| 716 |
if(is_null($chaine)) return "NULL";
|
745 |
)))) .
|
| Line 717... |
Line 746... |
| 717 |
if(!is_string($chaine)) die("erreur __FILE__, __LINE__");
|
746 |
')'
|
| 718 |
return $this->bdd->quote($chaine);
|
747 |
);
|
| 719 |
}
|
748 |
}
|
| 720 |
|
- |
|
| 721 |
// équivalent à CEL->Bdd->proteger() (qui wrap PDO::quote),
|
749 |
|
| 722 |
// sans transformer NULL en ""
|
750 |
// équivalent à CEL->Bdd->proteger() (qui wrap PDO::quote),
|
| 723 |
private function quoteNonNull($chaine) {
|
751 |
// sans transformer NULL en ""
|
| 724 |
return $chaine;
|
752 |
private function quoteNonNull($chaine) {
|