Subversion Repositories eFlore/Applications.cel

Rev

Rev 1147 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1147 Rev 1321
Line 1... Line 1...
1
<?php
1
<?php
2
// In : utf8
2
// In : utf8
3
// Out : utf8
3
// Out : utf8
Line 4... Line -...
4
 
-
 
5
 
-
 
6
// TODO : traiter image multilignes
4
 
Line 7... Line 5...
7
// TODO : doublons
5
// TODO : doublons
8
 
-
 
9
/*
6
 
10
 
7
/**
11
Octobre 2010 David Delon.
8
Octobre 2010 David Delon.
Line 12... Line 9...
12
Import d'observations dans le carnet en ligne à partir d'un fichier excel chargé par l'utilisateur
9
Import d'observations dans le carnet en ligne à partir d'un fichier excel chargé par l'utilisateur
13
et liaison d'images déjà chargee aux observations ainsi crées.
10
et liaison d'images déjà chargee aux observations ainsi crées.
14
 
11
 
15
Nom des colonnes imposé, mais présence de toutes les colonnes non obligatoires, ordre non imposé
12
Nom des colonnes imposé, mais présence de toutes les colonnes non obligatoires, ordre non imposé
16
Aucune valeur dans les colonnes n'est obligatoire
13
Aucune valeur dans les colonnes n'est obligatoire
17
Pour une ligne donnée, si tous les champs vides on ne fait rien, ou si seul le champ image est présent.
-
 
18
Si la seule différence entre deux lignes est la valeur de la colonne image, on considère que c'est la même observation à laquelle on associe plusieurs images.
14
Pour une ligne donnée, si tous les champs vides on ne fait rien, ou si seul le champ image est présent.
19
Si au moins deux lignes (ou plus) sont complètement identiques on prend en compte une seule ligne (les doublons sont éliminés).
-
 
Line 20... Line 15...
20
 
15
Si la seule différence entre deux lignes est la valeur de la colonne image, on considère que c'est la même observation à laquelle on associe plusieurs images.
Line 21... Line 16...
21
*/
16
Si au moins deux lignes (ou plus) sont complètement identiques on prend en compte une seule ligne (les doublons sont éliminés).
22
 
17
**/
Line 40... Line 35...
40
// Resultat de l'analyse d'une ligne
35
// Resultat de l'analyse d'une ligne
41
define('LIGNE_VIDE',1); //  
36
define('LIGNE_VIDE',1); //  
42
define('LIGNE_NORMALE',2); //  
37
define('LIGNE_NORMALE',2); //  
43
define('LIGNE_IMAGE_SEULEMENT',3); //  
38
define('LIGNE_IMAGE_SEULEMENT',3); //  
Line -... Line 39...
-
 
39
 
-
 
40
 
44
 
41
//TODO: refactoriser entièrement cette classe
Line 45... Line 42...
45
class InventoryImportExcel extends Cel  {
42
class InventoryImportExcel extends Cel  {
46
 
-
 
47
// Element constituant une observation 
43
 
Line 48... Line -...
48
 
-
 
49
	var $format_observation=array(COMMUNE ,LIEUDIT ,STATION , DEPARTEMENT, MILIEU ,LATITUDE ,LONGITUDE ,NOTES ,DATEOBS ,ESPECE ,TRANSMETTRE, IMAGE );
-
 
50
 
-
 
51
// Fichier configuration
44
	// Element constituant une observation 
52
	var $config;
45
	var $format_observation=array(COMMUNE ,LIEUDIT ,STATION , DEPARTEMENT, MILIEU ,LATITUDE ,LONGITUDE ,NOTES ,DATEOBS ,ESPECE ,TRANSMETTRE, IMAGE );
Line 53... Line 46...
53
 
46
 
54
// Encapsulation classe lecture fichier excel
47
	// Encapsulation classe lecture fichier excel
Line 62... Line 55...
62
/**
55
	/**
63
 Constructeur
56
	 Constructeur
64
**/
57
	**/
65
	function InventoryImportExcel($config) {
58
	function InventoryImportExcel($config) {
Line 66... Line 59...
66
 
59
 
67
		$this->config=$config;
60
		parent::__construct($config);	
68
		// Pas d'heritage multiple en php :(
-
 
69
 
61
		// Pas d'heritage multiple en php :(
70
		$this->extendExcelReader = new ExcelReader();
62
		$this->extendExcelReader = new ExcelReader();
71
		$this->extendExcelReader->initExcelReader();
63
		$this->extendExcelReader->initExcelReader();
Line 72... Line 64...
72
	}
64
	}
73
 
65
 
74
/**
66
	/**
75
 Sur post
67
	 Sur post
Line 76... Line -...
76
**/
-
 
77
	function createElement($pairs) {
-
 
78
 
68
	**/
79
 
69
	function createElement($pairs) {
Line 80... Line 70...
80
		$pairs['utilisateur']=$_POST['identifiant'];
70
 
81
		if(!isset($_SESSION)) {session_start();}
71
		if(!isset($_SESSION)) {session_start();}
82
        $this->controleUtilisateur($pairs['utilisateur']);
72
        $this->controleUtilisateur($pairs['utilisateur']);
Line 83... Line -...
83
 
-
 
84
        foreach($_FILES as $file) { // C'est le plus simple
73
 
85
            $infos_fichier = $file ;
74
        foreach($_FILES as $file) { // C'est le plus simple
86
        }
75
            $infos_fichier = $file ;
Line 87... Line 76...
87
 
76
        }
Line 102... Line 91...
102
        for($row=1;$row<=$rowcount;$row++) 
91
        for($row=1;$row<=$rowcount;$row++) 
103
            for($col=1;$col<=$colcount;$col++) 
92
            for($col=1;$col<=$colcount;$col++) 
104
                $arr[$col][$row] = $data->val($row,$col,0); // Attention, inversion voulue
93
                $arr[$col][$row] = $data->val($row,$col,0); // Attention, inversion voulue
Line 105... Line 94...
105
              
94
              
106
// 1 : Traitement intitules
-
 
107
 
95
		// 1 : Traitement intitules
Line 108... Line 96...
108
		$line = array();
96
		$line = array();
109
 
-
 
110
/* Les colonnes ne sont pas forcemment dans l'ordre  : on les extrait pour traitement futur  */
97
 
111
 
98
		/* Les colonnes ne sont pas forcemment dans l'ordre  : on les extrait pour traitement futur  */	
112
        for($col=1;$col<=$colcount;$col++) {
99
        for($col=1;$col<=$colcount;$col++) {
113
            $colonne=strtolower($arr[$col][1]);
100
            $colonne=strtolower($arr[$col][1]);
114
            $colonne=trim($colonne);
101
            $colonne=trim($colonne);
Line 137... Line 124...
137
		// 1 : Traitement lignes
124
		// 1 : Traitement lignes
138
		$cpt_obs=0;
125
		$cpt_obs=0;
139
		$cpt_img=0;
126
		$cpt_img=0;
Line 140... Line 127...
140
 
127
 
141
        /* Recherche dernier numero d'ordre utilise : pas de mise a jour concurente a priori */
-
 
142
        $DB=$this->connectDB($this->config,'database_cel'); 
128
        /* Recherche dernier numero d'ordre utilise : pas de mise a jour concurente a priori */
143
        $query="SELECT MAX(ordre) AS ordre FROM cel_inventory WHERE identifiant='".$DB->escapeSimple($pairs['utilisateur'])."' ";
-
 
144
 
129
        $requete = "SELECT MAX(ordre) AS ordre FROM cel_obs WHERE ce_utilisateur = ".$this->proteger($pairs['utilisateur'])." ";
145
        $res =& $DB->query($query);
-
 
146
        if (DB::isError($res)) {
-
 
147
            die($res->getMessage());
-
 
Line 148... Line 130...
148
        }
130
		$resultat = $this->requeter($requete);
149
 
131
 
150
        while ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) {
132
        if(is_array($resultat) && count($resultat) > 0) {
Line 151... Line 133...
151
            $this->dernier_ordre=$row['ordre']; // 1  par defaut
133
            $this->dernier_ordre = $resultat[0]['ordre']; // 1  par defaut
152
        }
134
        }
153
 
135
 
154
		for ($i=0;$i<=$rowcount-1;$i++) {
136
		for ($i=0;$i<=$rowcount-1;$i++) {
155
			// On saute les eventuelles lignes vides du debut et les lignes contenant des information sur image uniquement
137
			// On saute les eventuelles lignes vides du debut et les lignes contenant des information sur image uniquement
156
			while ((in_array($retour_analyse=$this->analyserLigne($line,$i),array(LIGNE_IMAGE_SEULEMENT, LIGNE_VIDE))) && ($i<=$rowcount)) {
138
			while ((in_array($retour_analyse=$this->analyserLigne($line,$i),array(LIGNE_IMAGE_SEULEMENT, LIGNE_VIDE))) && ($i<=$rowcount)) {
157
				if  ($retour_analyse==LIGNE_IMAGE_SEULEMENT) {
139
				if  ($retour_analyse==LIGNE_IMAGE_SEULEMENT) {
158
	//				print "image non rattachee a une observation";
140
					// image non rattachée à une observation
159
				}
141
				}
160
				else {
142
				else {
161
	//				print "vide";
143
					// ligne vide
162
				}
144
				}
163
				$i++;
145
				$i++;
164
			}
146
			}
165
			while (($this->analyserLigne($line,$i)==LIGNE_NORMALE) && ($i<=$rowcount)) {
147
			while (($this->analyserLigne($line,$i)==LIGNE_NORMALE) && ($i<=$rowcount)) {
166
				$ordre=$this->traiterLigne($line,$i,$pairs['utilisateur'],$DB);
148
				$ordre=$this->traiterLigne($line,$i,$pairs['utilisateur']);
167
				if ($ordre>0) {
149
				if ($ordre>0) {
168
					$cpt_obs++; // Compteur d'observations crees
150
					$cpt_obs++; // Compteur d'observations crees
Line 177... Line 159...
177
	//					print "vide";
159
						// print "vide";
178
					}
160
					}
179
					$i++;
161
					$i++;
180
				}	
162
				}	
181
			}
163
			}
182
			
-
 
183
	
-
 
184
		}
164
		}
185
		$message = '';
165
		$message = '';
Line 186... Line 166...
186
		
166
		
187
		if($this->cpt_images_liees > 0) {
167
		if($this->cpt_images_liees > 0) {
188
			$message = $this->cpt_images_liees.' images liees pour ';
168
			$message = $this->cpt_images_liees.' images liees pour ';
Line 189... Line 169...
189
		}
169
		}
190
		
170
		
191
		$message .= $cpt_obs;
-
 
192
		print $message;
171
		$message .= $cpt_obs;
Line 193... Line 172...
193
 
172
		print $message;
Line 194... Line 173...
194
	}
173
	}
Line 231... Line 210...
231
		}
210
			}
232
		else {
211
			else {
233
			return LIGNE_NORMALE;
212
				return LIGNE_NORMALE;
234
		}
213
			}
235
	}
214
		}
236
	
-
 
237
 
-
 
238
}
215
	}
Line 239... Line 216...
239
 
216
 
240
function traiterLigne($line,$i,$utilisateur,$DB) { // Controle donnee et insertion
-
 
-
 
217
	function traiterLigne($line,$i,$utilisateur) { 
241
	
218
		// Controle donnee et insertion
242
	$info_image=array();
219
		$info_image=array();
-
 
220
		$info_transmettre = "0";
-
 
221
		$info_espece = array('en_id_nom' => '',
-
 
222
			'nom_sel' => '',
-
 
223
			'nom_ret' => '',
-
 
224
			'nom_ret_nn' => '',
-
 
225
			'nt' => '',
-
 
226
			'famille' => ''
Line 243... Line 227...
243
	$info_transmettre = "0";
227
		);
244
	
228
		
245
	foreach ($this->format_observation as $colonne) {
229
		foreach ($this->format_observation as $colonne) {
246
		if (isset ($line[$colonne][$i]) && $line[$colonne][$i]!='') {
230
			if (isset ($line[$colonne][$i]) && $line[$colonne][$i]!='') {
Line 274... Line 258...
274
					break;
258
						break;
275
				case TRANSMETTRE:
259
					case TRANSMETTRE:
276
					$info_transmettre=$this->traiterTransmettre($line[TRANSMETTRE][$i]);
260
						$info_transmettre = $this->traiterTransmettre($line[TRANSMETTRE][$i]);
277
				break;
261
					break;
278
				case ESPECE:
262
					case ESPECE:
-
 
263
						$chercheur_infos_taxon = new RechercheInfosTaxon($this->config);
279
					$info_espece=$this->traiterEspece($line[ESPECE][$i]);
264
						$resultat_recherche_espece = $chercheur_infos_taxon->rechercherInfosSurTexteCodeOuNumTax($line[ESPECE][$i]);
280
                    if (isset($info_espece['en_id_nom']) && $info_espece['en_id_nom']!='') {
265
	                    if (isset($resultat_recherche_espece['en_id_nom']) && $resultat_recherche_espece['en_id_nom']!='') {
-
 
266
	                    	$info_espece['nom_sel'] = $resultat_recherche_espece['nom_sel'];
-
 
267
	                    	$info_espece['nom_sel_nn'] = $resultat_recherche_espece['en_id_nom'];
281
                        $complement=$this->rechercherInformationsComplementaires($info_espece['en_id_nom']);
268
	                        $complement = $chercheur_infos_taxon->rechercherInformationsComplementairesSurNumNom($resultat_recherche_espece['en_id_nom']);
282
                        $info_espece['nom_ret']=$complement['Nom_Retenu'];
269
	                        $info_espece['nom_ret'] = $complement['Nom_Retenu'];
283
                        $info_espece['num_nom_ret']=$complement['Num_Nom_Retenu'];
270
	                        $info_espece['nom_ret_nn'] = $complement['Num_Nom_Retenu'];
284
                        $info_espece['num_taxon']=$complement['Num_Taxon'];
271
	                        $info_espece['nt'] = $complement['Num_Taxon'];
285
                        $info_espece['famille']=$complement['Famille'];
272
	                        $info_espece['famille'] = $complement['Famille'];
-
 
273
	                    } else {
-
 
274
	                    	$info_espece['nom_sel'] = $line[ESPECE][$i];
286
                    }
275
	                    }
287
                    break;
276
	                    break;
288
				case IMAGE:
277
					case IMAGE:
289
					$info_image=$this->traiterImage($line[IMAGE][$i],$utilisateur); // Image separee par des / +  utilisateur
278
						$info_image=$this->traiterImage($line[IMAGE][$i],$utilisateur); // Image separee par des / +  utilisateur
290
					break;
279
						break;
291
			}
280
				}
292
		}
281
			}
293
		else {	
282
			else {	
294
		 	switch($colonne) {
283
			 	switch($colonne) {
295
				case COMMUNE:
284
					case COMMUNE:
296
					$info_commune['name']="000null";
285
						$info_commune['nom']="";
297
					break;
286
						break;
298
				case LIEUDIT:
287
					case LIEUDIT:
299
					$info_lieudit="000null";
288
						$info_lieudit="";
300
					break;
289
						break;
301
				case STATION:
290
					case STATION:
302
					$info_station="000null";
291
						$info_station="";
303
					break;
292
						break;
304
				case MILIEU:
293
					case MILIEU:
305
					$info_milieu="000null";
294
						$info_milieu="";
306
					break;
295
						break;
307
				case DEPARTEMENT:
296
					case DEPARTEMENT:
308
		            if (!isset ($info_commune['code']) || $info_commune['code']=='') {
297
			            if (!isset ($info_commune['code']) || $info_commune['code']=='') {
309
					    $info_commune['code']="000null";
298
						    $info_commune['code']="";
310
                    }
299
	                    }
311
					break;
300
						break;
312
				case LATITUDE:
301
					case LATITUDE:
313
					$info_latitude="000null";
302
						$info_latitude = "";
314
					break;
303
						break;
315
				case LONGITUDE:
304
					case LONGITUDE:
316
					$info_longitude="000null";
305
						$info_longitude = "";
317
					break;
306
						break;
318
				case NOTES:
307
					case NOTES:
319
					$info_notes='';
308
						$info_notes='';
320
					break;
309
						break;
321
				case TRANSMETTRE:
310
					case TRANSMETTRE:
322
					$info_transmettre = "0";
311
						$info_transmettre = "0";
323
				break;
312
					break;
324
 
-
 
325
			}
313
				}
326
 
-
 
327
		}
314
			}
328
	}
315
		}
Line 329... Line 316...
329
 
316
	
330
                $this->dernier_ordre++;
-
 
331
 
317
        $this->dernier_ordre++;
332
                list($jour,$mois,$annee) = isset($info_dateobs) ? explode("/",$info_dateobs) : array(null,null,null);
318
        list($jour,$mois,$annee) = isset($info_dateobs) ? explode("/",$info_dateobs) : array(null,null,null);
-
 
319
        $info_dateobs=$annee."-".$mois."-".$jour." 0:0:0";
-
 
320
        $requete  = "INSERT INTO cel_obs (".
-
 
321
	        "ce_utilisateur,ordre,".
-
 
322
	        "nom_sel,nom_sel_nn,nom_ret,nom_ret_nn,nt,famille,".
-
 
323
	        "zone_geo,ce_zone_geo,".
333
                $info_dateobs=$annee."-".$mois."-".$jour." 0:0:0";
324
	        "date_observation,".
-
 
325
	        "lieudit,station, milieu, commentaire, transmission, ".
334
                $query  = "INSERT INTO cel_inventory (identifiant,ordre,nom_sel,num_nom_sel,nom_ret,num_nom_ret,num_taxon,famille,location,id_location,date_observation,lieudit,station, milieu, commentaire, transmission, date_creation,date_modification,coord_x,coord_y) " .
326
	        "date_creation,date_modification,latitude,longitude) ".
335
                    " VALUES('".$DB->escapeSimple($utilisateur)."','".
327
	        " VALUES(".$this->proteger($utilisateur).",".
336
                    $DB->escapeSimple($this->dernier_ordre)."','".
328
	        $this->proteger($this->dernier_ordre).",".
337
                    $DB->escapeSimple($info_espece['nom_sel'])."','".
329
	        $this->proteger($info_espece['nom_sel']).",".
338
                    $DB->escapeSimple($info_espece['en_id_nom'])."','".
330
	        $this->proteger($info_espece['nom_sel_nn']).",".
339
                    $DB->escapeSimple($info_espece['nom_ret'])."','".
331
	        $this->proteger($info_espece['nom_ret']).",".
340
                    $DB->escapeSimple($info_espece['num_nom_ret'])."','".
332
	        $this->proteger($info_espece['nom_ret_nn']).",".
341
                    $DB->escapeSimple($info_espece['num_taxon'])."','".
333
	        $this->proteger($info_espece['nt']).",".
342
                    $DB->escapeSimple($info_espece['famille'])."','".
334
	        $this->proteger($info_espece['famille']).",".
343
                    $DB->escapeSimple($info_commune['name'])."','".
335
	        $this->proteger($info_commune['nom']).",".
344
                    $DB->escapeSimple($info_commune['code'])."','".
336
	        $this->proteger($info_commune['code']).",".
345
                    $DB->escapeSimple($info_dateobs)."','".
337
	        $this->proteger($info_dateobs).",".
346
                    $DB->escapeSimple($info_lieudit)."','".
338
	        $this->proteger($info_lieudit).",".
347
                    $DB->escapeSimple($info_station)."','".
339
	        $this->proteger($info_station).",".
348
                    $DB->escapeSimple($info_milieu)."','".
340
	        $this->proteger($info_milieu).",".
349
                    $DB->escapeSimple($info_notes)."','".
341
	        $this->proteger($info_notes).",".
350
                    $DB->escapeSimple($info_transmettre)."',".
342
	        $this->proteger($info_transmettre).",".
351
                    "now() , now(),'".
343
	        "now() , now(),".
352
                    $DB->escapeSimple($info_latitude)."','".
344
	        $this->proteger($info_latitude).",".
Line 353... Line 345...
353
                    $DB->escapeSimple($info_longitude)."')";
345
	        $this->proteger($info_longitude).")";
354
 
-
 
355
		   $res =& $DB->query($query);
-
 
356
 
-
 
357
                if (PEAR::isError($res)) {
-
 
Line 358... Line 346...
358
                        return false;
346
	
359
                }
347
		$insertion = $this->executer($requete);
Line 360... Line 348...
360
	
348
		
361
	// creation lien image
-
 
362
	foreach ($info_image as $pic) {
-
 
Line 363... Line 349...
363
 
349
		// creation lien image
364
		$query = 'INSERT INTO cel_obs_images (coi_ce_image, coi_ce_utilisateur, coi_ce_observation ) VALUES ("'.$DB->escapeSimple($pic['ci_id_image']).'","'.$DB->escapeSimple($utilisateur).'",    "'.$DB->escapeSimple($this->dernier_ordre).'") ON DUPLICATE KEY UPDATE coi_ce_image = coi_ce_image' ;	
350
		foreach ($info_image as $pic) {
365
 
-
 
366
		$res =& $DB->query($query);
351
	
-
 
352
			$requete_liaison = 'INSERT INTO cel_obs_images (id_image, id_utilisateur, id_observation ) VALUES ('.$this->proteger($pic['id_image']).','.$this->proteger($utilisateur).', '.$this->proteger($this->dernier_ordre).') ON DUPLICATE KEY UPDATE id_image = id_image ';	
-
 
353
	
367
 
354
			$liaison = $this->executer($requete_liaison);
368
                if (PEAR::isError($res)) {
355
            if ($liaison !== false) {
Line 369... Line 356...
369
                        return false;
356
            	$this->cpt_images_liees++;
370
                } else {
-
 
371
                	$this->cpt_images_liees++;
-
 
372
                }
357
            } else {
Line 373... Line 358...
373
	}
358
            	return false;    	
Line 374... Line 359...
374
 
359
            }
375
		return $this->dernier_ordre;
-
 
376
 
360
		}
377
 
361
	
378
}
-
 
379
 
362
		return $this->dernier_ordre;
380
function traiterLigneComplement($line,$i,$utilisateur, $ordre = null) {
363
	}
381
 
-
 
382
	$info_image=$this->traiterImage($line[IMAGE][$i],$utilisateur); // Image separee par des / +  utilisateur
-
 
383
	
-
 
384
	// creation lien image
364
 
385
	foreach ($info_image as $pic) {
-
 
386
 
-
 
387
		$DB=$this->connectDB($this->config,'cel_db');
365
	function traiterLigneComplement($line,$i,$utilisateur, $ordre = null) {
-
 
366
	
-
 
367
		$info_image=$this->traiterImage($line[IMAGE][$i],$utilisateur); // Image separee par des / +  utilisateur	
388
		$query = 'INSERT INTO cel_obs_images (coi_ce_image, coi_ce_utilisateur, coi_ce_observation) VALUES ("'.$DB->escapeSimple($pic['ci_id_image']).'","'.$DB->escapeSimple($utilisateur).'",    "'.$DB->escapeSimple($this->dernier_ordre).'") ON DUPLICATE KEY UPDATE coi_ce_image = coi_ce_image' ;	
368
		// creation lien image
389
 
369
		foreach ($info_image as $pic) {	
390
		$res =& $DB->query($query);
370
			$requete = 'INSERT INTO cel_obs_images (id_image, id_utilisateur, id_observations) VALUES ('.$this->proteger($pic['id_image']).','.$this->proteger($utilisateur).', '.$this->proteger($this->dernier_ordre).') ON DUPLICATE KEY UPDATE id_image = id_image' ;	
391
 
-
 
Line -... Line 371...
-
 
371
			$resultat_liaison = $this->executer($requete);
-
 
372
	    	if ($resultat_liaison !== false) {
392
    	if (PEAR::isError($res)) {
373
	    		$this->cpt_images_liees++;
393
            return false;
374
	    	} else {
Line 394... Line 375...
394
    	} else {
375
	    		return false;
Line 395... Line -...
395
    		$this->cpt_images_liees++;
-
 
396
    	}
-
 
397
	}
376
	    	}
398
}
377
		}
399
function traiterCommune($identifiant_commune) {  // Recherche correspondance sur nom, si pas unique, correspondance dep. sinon code insee
378
	}
400
 
379
	
401
    $identifiant_commune=trim($identifiant_commune);
380
	function traiterCommune($identifiant_commune) {  
402
    $identifiant_commune=utf8_encode($identifiant_commune); // FIXME : devrait deja etre en utf8 a ce niveau
381
		// Recherche correspondance sur nom, si pas unique, correspondance dep. sinon code insee
403
 
382
	    $identifiant_commune=trim($identifiant_commune);
404
	preg_match('/(.*) \(([0-9][0-9]*)\)/',$identifiant_commune,$elements);
383
	    $identifiant_commune=utf8_encode($identifiant_commune); // FIXME : devrait deja etre en utf8 a ce niveau
405
 
384
	
406
    $DB=$this->connectDB($this->config,'database_cel'); // FIXME regarder si opportun ici
385
		preg_match('/(.*) \(([0-9][0-9]*)\)/',$identifiant_commune,$elements);
407
 
386
	
408
	if (isset($elements[1])) { // commune + departement : montpellier (34)
387
		if (isset($elements[1])) { // commune + departement : montpellier (34)
409
		$nom_commune=$elements[1];
388
			$nom_commune=$elements[1];
410
		$code_commune=$elements[2];
389
			$code_commune=$elements[2];
411
 	    $query="SELECT DISTINCT name, code  FROM locations WHERE name = '".$DB->escapeSimple($nom_commune)."' AND code ='".$DB->escapeSimple($code_commune)."'";
390
	 	    $requete="SELECT DISTINCT nom, code  FROM cel_zone_geo WHERE nom = ".$this->proteger($nom_commune)." AND code LIKE ".$this->proteger($code_commune.'%');
Line 424... Line 403...
424
                $nom_commune=trim($nom_commune);
403
	                $nom_commune=trim($nom_commune);
425
                $nom_commune=utf8_decode($nom_commune);
404
	                $nom_commune=utf8_decode($nom_commune);
426
                $nom_commune=cp1252_to_utf8($nom_commune);
405
	                $nom_commune=cp1252_to_utf8($nom_commune);
427
                $nom_commune=remove_accent($nom_commune);
406
	                $nom_commune=remove_accent($nom_commune);
428
                $nom_commune=preg_replace("/ /","%",$nom_commune);
407
	                $nom_commune=preg_replace("/ /","%",$nom_commune);
429
                $query="SELECT DISTINCT name, code  FROM locations WHERE name like '".$DB->escapeSimple($nom_commune)."'";
408
	                $requete="SELECT DISTINCT nom, code  FROM cel_zones_geo WHERE nom like ".$this->proteger($nom_commune.'%');
430
            }
409
	            }
431
        }
410
	        }
432
	}
411
		}
Line 433... Line 412...
433
 
412
	
434
	$res =& $DB->query($query);
-
 
435
    if (DB::isError($res)) {
-
 
436
		 die($res->getMessage());
-
 
437
	}
-
 
438
	
-
 
Line 439... Line 413...
439
	$commune_code = $res->fetchrow(DB_FETCHMODE_ASSOC);
413
		$resultat_commune = $this->requeter($requete);
440
	
414
		
441
	// cas de la commune introuvable dans le référentiel
415
		// cas de la commune introuvable dans le référentiel
442
	if(!is_array($commune_code) || count($commune_code) == 0) {
416
		if(!is_array($resultat_commune) || count($resultat_commune) == 0) {
443
		$commune_code['name'] = fix_latin($identifiant_commune);
417
			$resultat_commune['nom'] = fix_latin($identifiant_commune);
444
		$commune_code['code'] = '000null';
418
			$resultat_commune['code'] = 'NULL';
445
	}
419
		} else {
Line 446... Line 420...
446
	return $commune_code;
420
			$resultat_commune = $resultat_commune[0];
-
 
421
		}
Line 447... Line 422...
447
}
422
			
-
 
423
		return $resultat_commune;
448
 
424
	}
449
function traiterLieudit($lieudit) { // texte libre
425
 
450
 
426
	function traiterLieudit($lieudit) { 
Line 451... Line 427...
451
	//echo "traitement lieudit";
427
		// texte libre
452
    $lieudit=fix_latin($lieudit);
428
	    $lieudit=fix_latin($lieudit);
453
	return trim($lieudit);
429
		return trim($lieudit);
454
}
430
	}
455
 
431
 
Line 456... Line 432...
456
function traiterStation($station) { // texte libre
432
	function traiterStation($station) { 
457
//	echo "traitement station";
433
		// texte libre
458
    $station=fix_latin($station);
434
	    $station=fix_latin($station);
459
	return trim($station);
435
		return trim($station);
460
}
436
	}
Line 461... Line 437...
461
 
437
 
462
function traiterMilieu($milieu) { // texte libre
438
	function traiterMilieu($milieu) { 
463
//	echo "traitement milieu";
439
		// texte libre
464
    $milieu=fix_latin($milieu);
440
	    $milieu=fix_latin($milieu);
465
	return trim($milieu);
441
		return trim($milieu);
Line 466... Line 442...
466
}
442
	}
Line 480... Line 456...
480
		$departement = "0"+$departement;
456
			$departement = "0"+$departement;
481
	}
457
		}
482
	return utf8_encode(trim($departement));
458
		return utf8_encode(trim($departement));
483
}
459
	}
Line 484... Line 460...
484
 
460
 
485
function traiterLatitude($latitude) {	//  verifier formal decimal + limite france ? TODO 
461
	function traiterLatitude($latitude) {	
486
//	echo "traitement latitude";
462
		//  verifier formal decimal + limite france ? TODO 
487
	return trim($latitude);
463
		return trim($latitude);
Line 488... Line 464...
488
}
464
	}
489
 
465
	
490
function traiterLongitude($longitude) { // verifier format decimal + limite france ? TODO 
466
	function traiterLongitude($longitude) { 
491
//	echo "traitement longitude";
467
		// verifier format decimal + limite france ? TODO 
Line 492... Line 468...
492
	return trim($longitude);
468
		return trim($longitude);
493
}
469
	}
494
 
470
	
495
function traiterNotes($notes) { // texte libre
471
	function traiterNotes($notes) { 
496
//	echo "traitement notes";
472
		// texte libre
Line -... Line 473...
-
 
473
	    $notes=remove_accent($notes);
497
    $notes=remove_accent($notes);
474
		return utf8_encode(trim($notes));
498
	return utf8_encode(trim($notes));
475
	}
-
 
476
	
-
 
477
	function traiterDateObs($dateobs) { 
-
 
478
		// verifier jj/mm/aaaa sinon date vide TODO 
499
}
479
		$date = trim($dateobs);
500
 
480
		if(!preg_match("#[0-9]{2}/[0-9]{2}/([0-9]{4}|[0-9]{2})#", $date)) {
Line 501... Line 481...
501
function traiterDateObs($dateobs) { // verifier jj/mm/aaaa sinon date vide TODO 
481
			$date = '00/00/0000';
502
//	echo "traitement dateobs";
-
 
503
	return trim($dateobs);
482
		}
504
}
-
 
505
 
483
		return $date;
506
function traiterTransmettre($transmettre) {
484
	}
507
	
485
 
508
	$transmission = '0';
-
 
509
	
486
	function traiterTransmettre($transmettre) {		
510
	if (trim($transmettre) == "1" || trim($transmettre) == "oui") {	
487
		$transmission = '0';		
Line 511... Line -...
511
		$transmission = '1';
-
 
512
	}
-
 
513
	
-
 
514
	return $transmission;
-
 
515
}
-
 
516
 
-
 
517
function traiterEspece($identifiant_espece) {  // texte libre, nom scientifique , ou code nomenclatural (format BDNFFnn999999) ou code taxonomique (format BDNFFnt999999)
-
 
518
 
-
 
519
//	echo "traitement  espece";
-
 
520
        $identifiant_espece=trim($identifiant_espece);
-
 
521
 
-
 
522
        $identifiant_espece=utf8_encode($identifiant_espece); // FIXME : devrait deja etre en utf8 a ce niveau
-
 
523
 
-
 
524
	    preg_match('/BDNFFnn([0-9][0-9]*)/',$identifiant_espece,$elements);
-
 
525
	
-
 
526
		if (isset($elements[1])) { // Numero nomenclatural 
-
 
527
 
-
 
528
 
-
 
529
            // Recherche du nom associe
-
 
530
            $DB=$this->connectDB($this->config); // FIXME : gerer cache de connection
-
 
531
            $query = "SELECT DISTINCT en_nom_genre, en_epithete_espece, en_nom_supra_generique, en_epithete_infra_generique,".
-
 
532
                "   auteur_bex.enaia_intitule_abrege AS abreviation_auteur_basio_ex ".
-
 
533
                " , auteur_b.enaia_intitule_abrege AS abreviation_auteur_basio ".
-
 
534
                " , auteur_mex.enaia_intitule_abrege AS abreviation_auteur_modif_ex ".
-
 
535
                " , auteur_m.enaia_intitule_abrege AS abreviation_auteur_modif ".
-
 
536
                " , en_epithete_espece, en_epithete_infra_specifique, enrg_abreviation_rang, en_id_nom" .
-
 
537
                " FROM eflore_nom, eflore_nom_rang, eflore_selection_nom a,  " .
-
 
538
                " eflore_naturaliste_intitule_abreviation AS auteur_bex ".
-
 
539
                " , eflore_naturaliste_intitule_abreviation AS auteur_b ".
-
 
540
                " , eflore_naturaliste_intitule_abreviation AS auteur_mex ".
-
 
541
                " , eflore_naturaliste_intitule_abreviation AS auteur_m ".
-
 
542
                " WHERE a.esn_id_nom= '".$elements[1]. "'".
-
 
543
                " AND a.esn_id_version_projet_taxon = 25 ".
-
 
544
                " AND en_ce_rang = enrg_id_rang" .
-
 
545
                " AND en_id_nom = a.esn_id_nom" .
-
 
546
                " AND en_ce_auteur_basio_ex = auteur_bex.enaia_id_intitule_naturaliste_abrege ".
-
 
547
                " AND en_ce_auteur_basio = auteur_b.enaia_id_intitule_naturaliste_abrege  ".
-
 
548
                " AND en_ce_auteur_modif_ex = auteur_mex.enaia_id_intitule_naturaliste_abrege ".
-
 
549
                " AND en_ce_auteur_modif = auteur_m.enaia_id_intitule_naturaliste_abrege ".
-
 
550
                " AND a.esn_id_version_projet_taxon=en_id_version_projet_nom ";
-
 
551
 
-
 
552
            $res =& $DB->query($query);
-
 
553
 
-
 
554
 
-
 
555
            if (DB::isError($res)) {
-
 
556
                die($res->getMessage());
-
 
557
            }
-
 
558
 
-
 
559
            $row =& $res->fetchrow(DB_FETCHMODE_ASSOC);
-
 
560
            return array("nom_sel"=>$this->formaterNom($row),"en_id_nom"=>$elements[1]);
-
 
561
 
-
 
562
		}
-
 
563
 
-
 
564
		else { //  Numero taxonomique ou nom scientifique
-
 
565
	        preg_match('/BDNFFnt([0-9][0-9]*)/',$identifiant_espece,$elements);
-
 
566
			
-
 
567
		    if (isset($elements[1])) { // Numero taxonomique
-
 
568
    
-
 
569
                $DB=$this->connectDB($this->config);
-
 
570
 
-
 
571
                $query = "SELECT DISTINCT en_nom_genre, en_epithete_espece, en_nom_supra_generique, en_epithete_infra_generique,".
-
 
572
                    "   auteur_bex.enaia_intitule_abrege AS abreviation_auteur_basio_ex ".
-
 
573
                    " , auteur_b.enaia_intitule_abrege AS abreviation_auteur_basio ".
-
 
574
                    " , auteur_mex.enaia_intitule_abrege AS abreviation_auteur_modif_ex ".
-
 
575
                    " , auteur_m.enaia_intitule_abrege AS abreviation_auteur_modif ".
-
 
576
                    " , en_epithete_espece, en_epithete_infra_specifique, enrg_abreviation_rang, en_id_nom" .
-
 
577
                    " FROM eflore_nom, eflore_nom_rang," .
-
 
578
                    "     eflore_naturaliste_intitule_abreviation AS auteur_bex ".
-
 
579
                    "   , eflore_naturaliste_intitule_abreviation AS auteur_b ".
-
 
580
                    "   , eflore_naturaliste_intitule_abreviation AS auteur_mex ".
-
 
581
                    "   , eflore_naturaliste_intitule_abreviation AS auteur_m ".
-
 
582
                    " , eflore_selection_nom ".
-
 
583
                    " WHERE esn_id_taxon = '".$elements[1]. "'".
-
 
584
                    " AND esn_id_version_projet_taxon = 25 ".
-
 
585
                    " AND esn_ce_statut=3 ".
-
 
586
                    " AND en_id_nom = esn_id_nom" .
-
 
587
                    " AND en_ce_rang = enrg_id_rang" .
-
 
588
                    " AND en_ce_auteur_basio_ex = auteur_bex.enaia_id_intitule_naturaliste_abrege ".
-
 
589
                    " AND en_ce_auteur_basio = auteur_b.enaia_id_intitule_naturaliste_abrege  ".
-
 
590
                    " AND en_ce_auteur_modif_ex = auteur_mex.enaia_id_intitule_naturaliste_abrege ".
-
 
591
                    " AND en_ce_auteur_modif = auteur_m.enaia_id_intitule_naturaliste_abrege ".
-
 
592
                    " AND esn_id_version_projet_taxon=en_id_version_projet_nom ";
-
 
593
 
-
 
594
                $res =& $DB->query($query);
-
 
595
 
-
 
596
                if (DB::isError($res)) {
-
 
597
                    die($res->getMessage());
-
 
598
                }
-
 
599
 
-
 
600
                $row =& $res->fetchrow(DB_FETCHMODE_ASSOC);
-
 
601
                return array("nom_sel"=>$this->formaterNom($row),"en_id_nom"=>$row['en_id_nom']);
-
 
602
 
-
 
603
 
-
 
604
            }
-
 
605
 
-
 
606
            else { // Nom scientifique
-
 
607
                $nameparser=new NameParser();
-
 
608
                $nom_latin_decoupe=$nameparser->parse($identifiant_espece);
-
 
609
 
-
 
610
                    $DB=$this->connectDB($this->config); // FIXME regarder si opportun ici
-
 
611
 
-
 
612
                        // requete sous espece (on privilegie les noms retenu cf tri par esn_ce_statut) 
-
 
613
                        if (isset($nom_latin_decoupe['infra']) && $nom_latin_decoupe['infra']!="") {
-
 
614
                            $query="SELECT DISTINCT en_id_nom, esn_ce_statut" .
-
 
615
                                            " FROM eflore_nom, eflore_nom_rang, eflore_selection_nom " .
-
 
616
                                            " WHERE en_id_version_projet_nom = '25' AND en_nom_genre = '".$DB->escapeSimple($nom_latin_decoupe['genus'])."' " .
-
 
617
                                            " AND enrg_abreviation_rang = '".$DB->escapeSimple($nom_latin_decoupe['infra_type'])."' " .
-
 
618
                                            " AND en_epithete_infra_specifique = '".$DB->escapeSimple($nom_latin_decoupe['infra'])."' " .
-
 
619
                                            " AND esn_id_nom= en_id_nom ".
-
 
620
                                            " AND esn_id_version_projet_taxon=en_id_version_projet_nom " .
-
 
621
                                            " AND en_epithete_espece =  '".$DB->escapeSimple($nom_latin_decoupe['species'])."' AND en_ce_rang = enrg_id_rang " .
-
 
622
                                            " ORDER BY esn_ce_statut ".
-
 
623
                                            " LIMIT 1";
-
 
624
                        }
-
 
625
                        else { // espece  (on privilegie les noms retenu cf tri par esn_ce_statut)
-
 
626
                             $query="SELECT DISTINCT en_id_nom, esn_ce_statut" .
-
 
627
                                            " FROM eflore_nom, eflore_nom_rang, eflore_selection_nom " .
-
 
628
                                            " WHERE en_id_version_projet_nom = '25' AND en_nom_genre = '".$DB->escapeSimple($nom_latin_decoupe['genus'])."' " .
-
 
629
                                            " AND enrg_abreviation_rang = 'sp.' " .
-
 
630
                                            " AND esn_id_nom= en_id_nom ".
-
 
631
                                            " AND esn_id_version_projet_taxon=en_id_version_projet_nom " .
-
 
632
                                            " AND en_epithete_espece =  '".$DB->escapeSimple($nom_latin_decoupe['species'])."' AND en_ce_rang = enrg_id_rang " .
-
 
633
                                            " ORDER BY esn_ce_statut ".
-
 
634
                                            " LIMIT 1";
-
 
635
                        
-
 
636
                        }
-
 
637
                $res =& $DB->query($query);
-
 
638
                if (DB::isError($res)) {
-
 
639
                     die($res->getMessage());
-
 
640
                }
-
 
641
 
-
 
642
                $id_nom=$res->fetchrow(DB_FETCHMODE_ASSOC);
-
 
643
 
-
 
644
                // Recherche du nom associe
-
 
645
                $DB=$this->connectDB($this->config); // FIXME : gerer cache de connection
-
 
646
                $query = "SELECT DISTINCT en_nom_genre, en_epithete_espece, en_nom_supra_generique, en_epithete_infra_generique,".
-
 
647
                    "   auteur_bex.enaia_intitule_abrege AS abreviation_auteur_basio_ex ".
-
 
648
                    " , auteur_b.enaia_intitule_abrege AS abreviation_auteur_basio ".
-
 
649
                    " , auteur_mex.enaia_intitule_abrege AS abreviation_auteur_modif_ex ".
-
 
650
                    " , auteur_m.enaia_intitule_abrege AS abreviation_auteur_modif ".
-
 
651
                    " , en_epithete_espece, en_epithete_infra_specifique, enrg_abreviation_rang, en_id_nom" .
-
 
652
                    " FROM eflore_nom, eflore_nom_rang, eflore_selection_nom a,  " .
-
 
653
                    "         eflore_naturaliste_intitule_abreviation AS auteur_bex ".
-
 
654
                    "   , eflore_naturaliste_intitule_abreviation AS auteur_b ".
-
 
655
                    "   , eflore_naturaliste_intitule_abreviation AS auteur_mex ".
-
 
656
                    "   , eflore_naturaliste_intitule_abreviation AS auteur_m ".
-
 
657
                    " WHERE a.esn_id_nom= '".$id_nom['en_id_nom']. "'".
-
 
658
                    " AND a.esn_id_version_projet_taxon = 25 ".
-
 
659
                    " AND en_ce_rang = enrg_id_rang" .
-
 
660
                    " AND en_id_nom = a.esn_id_nom" .
-
 
661
                    " AND en_ce_auteur_basio_ex = auteur_bex.enaia_id_intitule_naturaliste_abrege ".
-
 
662
                    " AND en_ce_auteur_basio = auteur_b.enaia_id_intitule_naturaliste_abrege  ".
-
 
663
                    " AND en_ce_auteur_modif_ex = auteur_mex.enaia_id_intitule_naturaliste_abrege ".
-
 
664
                    " AND en_ce_auteur_modif = auteur_m.enaia_id_intitule_naturaliste_abrege ".
-
 
665
                    " AND a.esn_id_version_projet_taxon=en_id_version_projet_nom ";
-
 
666
                $res =& $DB->query($query);
-
 
667
 
-
 
668
 
-
 
669
                if (DB::isError($res)) {
-
 
670
                    die($res->getMessage());
-
 
671
                }
-
 
672
 
-
 
673
                if ($res->numRows() > 0 ) {
-
 
674
                    $row =& $res->fetchrow(DB_FETCHMODE_ASSOC);
-
 
675
                    return array("nom_sel"=>$this->formaterNom($row),"en_id_nom"=>$id_nom['en_id_nom']);
-
 
676
                }
-
 
677
                else {
-
 
678
                    return array("nom_sel"=>$identifiant_espece);
-
 
679
                }
-
 
680
 
-
 
681
 
-
 
682
                }
-
 
683
            }
-
 
684
	
488
		if (trim($transmettre) == "1" || trim($transmettre) == "oui") {	
685
 
-
 
686
}
-
 
687
 
-
 
688
 
489
			$transmission = '1';
689
 
-
 
690
function traiterImage($images,$utilisateur) { // recherche id image de ce nom 
490
		}			
691
 
491
		return $transmission;
692
        $DB=$this->connectDB($this->config,'cel_db');
-
 
693
 
492
	}
694
	$liste_images = explode("/",$images) ;
-
 
695
 
493
	
696
	$row =array();
-
 
697
        foreach($liste_images as $image) {
-
 
698
 
-
 
699
		$query="SELECT * FROM cel_images WHERE ci_ce_utilisateur='".$DB->escapeSimple($utilisateur)."' AND ci_nom_original='".$DB->escapeSimple($image)."'";
-
 
700
 
-
 
701
	        $res  =& $DB->query($query);
-
 
702
		$row [] =& $res->fetchrow(DB_FETCHMODE_ASSOC);
-
 
703
 
-
 
704
	        if (DB::isError($res)) {
-
 
705
        	    die($res->getMessage());
-
 
706
	        }
-
 
707
 
-
 
708
	}
-
 
709
	return $row;
-
 
710
 
-
 
711
 
-
 
712
}
-
 
713
 
-
 
714
       function rechercherInformationsComplementaires($numNom) { // Num taxon, Num retenu ...
-
 
715
 
-
 
716
                $DB=$this->connectDB($this->config);
-
 
717
 
-
 
718
                $query = "SELECT DISTINCT en_nom_genre, en_epithete_espece, en_nom_supra_generique, en_epithete_infra_generique,".
-
 
719
                    "   auteur_bex.enaia_intitule_abrege AS abreviation_auteur_basio_ex ".
-
 
720
                    " , auteur_b.enaia_intitule_abrege AS abreviation_auteur_basio ".
-
 
721
                    " , auteur_mex.enaia_intitule_abrege AS abreviation_auteur_modif_ex ".
-
 
722
                    " , auteur_m.enaia_intitule_abrege AS abreviation_auteur_modif ".
-
 
723
                    " , en_epithete_espece, en_epithete_infra_specifique, enrg_abreviation_rang, b.esn_id_taxon, b.esn_id_nom" .
-
 
724
                    " FROM eflore_nom, eflore_nom_rang," .
-
 
725
                    "     eflore_naturaliste_intitule_abreviation AS auteur_bex ".
-
 
726
                    "   , eflore_naturaliste_intitule_abreviation AS auteur_b ".
-
 
727
                    "   , eflore_naturaliste_intitule_abreviation AS auteur_mex ".
-
 
728
                    "   , eflore_naturaliste_intitule_abreviation AS auteur_m ".
-
 
729
                    " ,eflore_selection_nom a, eflore_selection_nom b".
-
 
730
                    " WHERE a.esn_id_nom= ".$numNom.
-
 
731
                    " AND a.esn_id_version_projet_taxon = 25 ".
-
 
732
                    " AND a.esn_id_taxon=b.esn_id_taxon ".
-
 
733
                    " AND b.esn_ce_statut=3 ".
-
 
734
                    " AND a.esn_id_version_projet_taxon=b.esn_id_version_projet_taxon" .
-
 
735
                    " AND en_ce_rang = enrg_id_rang" .
-
 
736
                    " AND en_id_nom = b.esn_id_nom" .
-
 
737
                    " AND en_ce_auteur_basio_ex = auteur_bex.enaia_id_intitule_naturaliste_abrege ".
-
 
738
                    " AND en_ce_auteur_basio = auteur_b.enaia_id_intitule_naturaliste_abrege  ".
-
 
739
                    " AND en_ce_auteur_modif_ex = auteur_mex.enaia_id_intitule_naturaliste_abrege ".
-
 
740
                    " AND en_ce_auteur_modif = auteur_m.enaia_id_intitule_naturaliste_abrege ".
-
 
741
                    " AND a.esn_id_version_projet_taxon=en_id_version_projet_nom ";
-
 
742
 
494
	function traiterImage($images,$utilisateur) { // recherche id image de ce nom 	
743
 
-
 
744
                $res =& $DB->query($query);
-
 
745
 
-
 
746
 
-
 
747
 
-
 
748
                if (DB::isError($res)) {
-
 
749
                    die($res->getMessage());
-
 
750
                }
-
 
751
 
-
 
752
                // Nom retenu, Num Nomenclatural nom retenu, Num Taxon,
-
 
753
 
-
 
754
                $value=array('Nom_Retenu'=>"",'Num_Nom_Retenu'=>"0",'Num_Taxon'=>"0",'Famille'=>"");
-
 
755
 
-
 
756
                while ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) {
-
 
757
                    $fam=$this->rechercherFamille($row['esn_id_taxon'],$DB);
-
 
758
 
-
 
759
                    // Recherche Famille 
-
 
760
                    while (($fam['en_ce_rang']!='fin') && ($fam['en_ce_rang'] !=120)) {
-
 
761
                        $fam=$this->rechercherFamille($fam['etr_id_taxon_2'],$DB);
-
 
762
                    }
-
 
763
                    if ($fam['en_ce_rang']==120) {
-
 
764
                        $famille=$fam['en_nom_supra_generique'];
-
 
765
                    }
-
 
766
                    else {
-
 
767
                        $famille="Famille inconnue";
-
 
768
                    }
-
 
769
 
-
 
770
                    $value=array('Nom_Retenu'=>$this->formaterNom($row),'Num_Nom_Retenu'=>$row['esn_id_nom'],'Num_Taxon'=>$row['esn_id_taxon'],'Famille'=>$famille);
-
 
771
                }
-
 
772
 
-
 
773
                return $value;
-
 
774
 
-
 
775
 
-
 
776
 
-
 
777
        }
495
		$liste_images = explode("/",$images) ;
778
 
-
 
779
function formaterNom($rawnom) {
-
 
780
 
-
 
781
 
-
 
782
                // Constitution du nom:
-
 
783
                $nom = '';
-
 
784
 
-
 
785
                if ($rawnom['en_nom_supra_generique'] != '') {
-
 
786
                    $nom .= $rawnom['en_nom_supra_generique'];
-
 
787
                } else if ($rawnom['en_epithete_infra_generique'] != '') {
-
 
788
                    $nom .= $rawnom['en_epithete_infra_generique'];
-
 
789
                } else {
-
 
790
                        if ($rawnom['en_nom_genre'] != '') {
-
 
791
                            $nom .=  $rawnom['en_nom_genre'];
-
 
792
                        }
-
 
793
                        if ($rawnom['en_epithete_espece']!= '') {
496
		$row =array();
794
                            $nom .= ' '.$rawnom['en_epithete_espece'];
-
 
795
                        }
497
	   	foreach($liste_images as $image) {
796
                        if ($rawnom['en_epithete_infra_specifique'] != '') {
-
 
797
                                if (!empty($rawnom['enrg_abreviation_rang'])) {
-
 
798
                                        $nom .= ' '.$rawnom['enrg_abreviation_rang'].'';
-
 
799
                                }
-
 
800
                                $nom .= ' '.$rawnom['en_epithete_infra_specifique'];
-
 
801
                        }
-
 
802
 
-
 
803
                }
-
 
804
 
-
 
805
                return $nom .$this->retournerAuteur($rawnom) ;
-
 
806
 
-
 
807
 }
-
 
808
 
-
 
809
 
-
 
810
function rechercherFamille($taxon,&$DB) {
-
 
811
 
-
 
812
    $row=array();
-
 
813
 
-
 
814
    $query="SELECT DISTINCT en_ce_rang, etr_id_taxon_2, en_id_nom, en_nom_supra_generique ".
-
 
815
        " FROM eflore_taxon_relation, eflore_selection_nom, eflore_nom ".
-
 
816
        " WHERE etr_id_taxon_1 = ".$taxon.
-
 
817
        " AND etr_id_version_projet_taxon_1 = 25 ".
-
 
818
        " AND etr_id_categorie_taxon = 3 ".
-
 
819
        " AND etr_id_valeur_taxon = 3 ".
-
 
820
        " AND esn_id_taxon =  etr_id_taxon_2 ".
-
 
821
        " AND esn_ce_statut = 3 ".
-
 
822
        " AND esn_id_version_projet_taxon = etr_id_version_projet_taxon_1 ".
-
 
823
        " AND en_id_nom = esn_id_nom ".
-
 
824
        " AND esn_id_version_projet_taxon=en_id_version_projet_nom  ";
-
 
825
    $res =& $DB->query($query);
-
 
826
 
-
 
827
    if (DB::isError($res)) {
-
 
828
        die($res->getMessage());
-
 
829
    }
-
 
830
 
498
			$requete = "SELECT * FROM cel_images WHERE ce_utilisateur = ".$this->proteger($utilisateur)." AND nom_original= ".$this->proteger($image);
831
    if ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) {
499
			$ligne = $this->requeter($requete);
832
        return $row;
-
 
833
    }
-
 
834
    else {
-
 
835
        $row['en_ce_rang']='fin';
-
 
836
        return $row;
-
 
837
    }
-
 
838
 
-
 
839
}
-
 
840
 
-
 
841
 
-
 
842
function retournerAuteur($rawnom) {
-
 
843
 
-
 
844
    $auteurs = '';
-
 
845
    $auteur_basio = '';
-
 
846
    $auteur_modif = '';
-
 
847
    if (!empty($rawnom['abreviation_auteur_basio_ex']) && $rawnom['abreviation_auteur_basio_ex']!='-' )  {
-
 
848
        $auteur_basio .= $rawnom['abreviation_auteur_basio_ex'];
-
 
849
        if (!empty($rawnom['abreviation_auteur_basio']) && $rawnom['abreviation_auteur_basio']!='-') {
-
 
850
            $auteur_basio .= ' ex '.$rawnom['abreviation_auteur_basio'];
-
 
851
        }
-
 
852
    } else if (!empty($rawnom['abreviation_auteur_basio']) && $rawnom['abreviation_auteur_basio']!='-') {
-
 
853
        $auteur_basio .= $rawnom['abreviation_auteur_basio'];
-
 
854
    }
-
 
855
 
-
 
856
    if (!empty($rawnom['abreviation_auteur_modif_ex']) && $rawnom['abreviation_auteur_modif_ex']!='-') {
-
 
857
        $auteur_modif .= $rawnom['abreviation_auteur_modif_ex'];
-
 
858
        if (!empty($rawnom['abreviation_auteur_modif']) && $rawnom['abreviation_auteur_modif']!='-') {
-
 
859
            $auteur_modif .= ' ex '.$rawnom['abreviation_auteur_modif'];
-
 
860
        }
-
 
861
    } else if (!empty($rawnom['abreviation_auteur_modif']) && $rawnom['abreviation_auteur_modif']!='-')  {
-
 
862
        $auteur_modif .= $rawnom['abreviation_auteur_modif'];
-
 
863
    }
-
 
864
 
-
 
865
    if (!empty($auteur_modif)) {
-
 
866
        $auteurs = ' ('.$auteur_basio.') '.$auteur_modif;
-
 
867
    } elseif (!empty($auteur_basio)) {
-
 
868
        $auteurs = ' '.$auteur_basio;
-
 
869
    }
-
 
870
 
-
 
871
    return $auteurs ;
500
		    if(is_array($ligne) && !empty($ligne)) {
Line 872... Line 501...
872
}
501
		    	$row[] = $ligne[0];
873
 
502
		    }
874
 
503
		}
Line 947... Line 576...
947
        $instr=$rest;
576
        $instr=$rest;
948
    }
577
    }
949
    return $outstr;
578
    return $outstr;
950
}
579
}
Line 951... Line -...
951
 
-
 
952
 
580
 
953
function remove_accent($str)
-
 
954
{
581
function remove_accent($str) {
955
  $a = array('À', 'Á', 'Â', 'Ã', 'Ä', 'Å', 'Æ', 'Ç', 'È', 'É', 'Ê', 'Ë', 'Ì', 'Í', 'Î',
582
  $a = array('À', 'Á', 'Â', 'Ã', 'Ä', 'Å', 'Æ', 'Ç', 'È', 'É', 'Ê', 'Ë', 'Ì', 'Í', 'Î',
956
             'Ï', 'Ð', 'Ñ', 'Ò', 'Ó', 'Ô', 'Õ', 'Ö', 'Ø', 'Ù', 'Ú', 'Û', 'Ü', 'Ý', 'ß',
583
             'Ï', 'Ð', 'Ñ', 'Ò', 'Ó', 'Ô', 'Õ', 'Ö', 'Ø', 'Ù', 'Ú', 'Û', 'Ü', 'Ý', 'ß',
957
             'à', 'á', 'â', 'ã', 'ä', 'å', 'æ', 'ç', 'è', 'é', 'ê', 'ë', 'ì', 'í', 'î',
584
             'à', 'á', 'â', 'ã', 'ä', 'å', 'æ', 'ç', 'è', 'é', 'ê', 'ë', 'ì', 'í', 'î',
958
             'ï', 'ñ', 'ò', 'ó', 'ô', 'õ', 'ö', 'ø', 'ù', 'ú', 'û', 'ü', 'ý', 'ÿ', 'Ā',
585
             'ï', 'ñ', 'ò', 'ó', 'ô', 'õ', 'ö', 'ø', 'ù', 'ú', 'û', 'ü', 'ý', 'ÿ', 'Ā',
Line 981... Line 608...
981
             'y', 'Y', 'Z', 'z', 'Z', 'z', 'Z', 'z', 's', 'f', 'O', 'o', 'U', 'u', 'A', 'a', 'I',
608
             'y', 'Y', 'Z', 'z', 'Z', 'z', 'Z', 'z', 's', 'f', 'O', 'o', 'U', 'u', 'A', 'a', 'I',
982
             'i', 'O', 'o', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'A', 'a', 'AE', 'ae', 'O', 'o');
609
             'i', 'O', 'o', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'A', 'a', 'AE', 'ae', 'O', 'o');
983
  return str_replace($a, $b, $str);
610
  return str_replace($a, $b, $str);
984
}
611
}
Line 985... Line -...
985
 
-
 
986
 
612
 
987
function cp1252_to_utf8($str) {
613
function cp1252_to_utf8($str) {
988
$cp1252_map = array ("\xc2\x80" => "\xe2\x82\xac",
614
	$cp1252_map = array ("\xc2\x80" => "\xe2\x82\xac",
989
"\xc2\x82" => "\xe2\x80\x9a",
615
		"\xc2\x82" => "\xe2\x80\x9a",
990
"\xc2\x83" => "\xc6\x92",    
616
		"\xc2\x83" => "\xc6\x92",    
Line 1014... Line 640...
1014
"\xc2\x9e" => "\xc5\xbe",
640
		"\xc2\x9e" => "\xc5\xbe",
1015
"\xc2\x9f" => "\xc5\xb8"
641
		"\xc2\x9f" => "\xc5\xb8"
1016
);
642
	);
1017
return strtr ( utf8_encode ( $str ), $cp1252_map );
643
	return strtr(utf8_encode($str), $cp1252_map);
1018
}
644
}
1019
 
-
 
1020
/* +--Fin du code ---------------------------------------------------------------------------------------+
-
 
1021
* $Log$
-
 
1022
*
-
 
1023
*
-
 
1024
*/
-
 
1025
 
-
 
1026
 
-
 
1027
?>
645
?>