Subversion Repositories eFlore/Applications.cel

Rev

Rev 483 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 483 Rev 540
1
<?php
1
<?php
2
 
2
 
3
// In : utf8
3
// In : utf8
4
// Out : utf8
4
// Out : utf8
5
 
5
 
6
 
6
 
7
// TODO : traiter image multilignes
7
// TODO : traiter image multilignes
-
 
8
// TODO : doublons
8
 
9
 
9
/*
10
/*
10
 
11
 
11
Octobre 2010 David Delon.
12
Octobre 2010 David Delon.
12
Import d'observations dans le carnet en ligne à partir d'un fichier excel chargé par l'utilisateur
13
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.
14
et liaison d'images déjà chargee aux observations ainsi crées.
14
 
15
 
15
Nom des colonnes imposé, mais présence de toutes les colonnes non obligatoires, ordre non imposé
16
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
17
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
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.
19
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.
19
Si au moins deux lignes (ou plus) sont complètement identiques on prend en compte une seule ligne (les doublons sont éliminés).
20
Si au moins deux lignes (ou plus) sont complètement identiques on prend en compte une seule ligne (les doublons sont éliminés).
20
 
21
 
21
*/
22
*/
22
 
23
 
23
 
24
 
24
// Nom des colonnes
25
// Nom des colonnes
25
 
26
 
26
define('COMMUNE','commune'); // soit un nom de commune, soit un code INSEE (5 chiffres), ou "nom de commune (numero departement)"
27
define('COMMUNE','commune'); // soit un nom de commune, soit un code INSEE (5 chiffres), ou "nom de commune (numero departement)"
27
define('LIEUDIT','lieu-dit'); // Texte libre
28
define('LIEUDIT','lieu-dit'); // Texte libre
28
define('STATION','station'); // Texte libre
29
define('STATION','station'); // Texte libre
29
define('MILIEU','milieu'); // Texte libre
30
define('MILIEU','milieu'); // Texte libre
30
define('LATITUDE','latitude'); // En decimal systeme WGS84
31
define('LATITUDE','latitude'); // En decimal systeme WGS84
31
define('LONGITUDE','longitude'); // En decimal systeme WGS84 
32
define('LONGITUDE','longitude'); // En decimal systeme WGS84 
32
define('NOTES','notes'); // Texte libre
33
define('NOTES','notes'); // Texte libre
33
define('DATEOBS','date'); // date au format jj/mm/aaaa
34
define('DATEOBS','date'); // date au format jj/mm/aaaa
34
define('ESPECE','espece'); // texte libre, nom latin, ou code nomenclatural (format BDNFFnn999999)
35
define('ESPECE','espece'); // texte libre, nom latin, ou code nomenclatural (format BDNFFnn999999)
35
define('IMAGE','image'); //  nom des fichiers images préalablement uploadés sur le CEL séparés par des "/"
36
define('IMAGE','image'); //  nom des fichiers images préalablement uploadés sur le CEL séparés par des "/"
-
 
37
define('DEPARTEMENT','departement'); //  Texte libre
-
 
38
 
36
 
39
 
37
// Resultat de l'analyse d'une ligne
40
// Resultat de l'analyse d'une ligne
38
define('LIGNE_VIDE',1); //  
41
define('LIGNE_VIDE',1); //  
39
define('LIGNE_NORMALE',2); //  
42
define('LIGNE_NORMALE',2); //  
40
define('LIGNE_IMAGE_SEULEMENT',3); //  
43
define('LIGNE_IMAGE_SEULEMENT',3); //  
41
 
44
 
42
include_once('Decoupage.class.php'); // TODO : Autoload
45
// Parser de Nom
43
include_once('DecoupageNomLatin.class.php');
-
 
44
 
-
 
45
// Element constituant une observation 
46
include('NameParser.php');
46
 
47
 
47
Class InventoryImportExcel extends DBAccessor  {
48
Class InventoryImportExcel extends DBAccessor  {
48
 
49
 
49
// Element constituant une observation 
50
// Element constituant une observation 
50
 
51
 
51
	var $format_observation=array(COMMUNE ,LIEUDIT ,STATION ,MILIEU ,LATITUDE ,LONGITUDE ,NOTES ,DATEOBS ,ESPECE ,IMAGE );
-
 
52
 
52
	var $format_observation=array(COMMUNE ,LIEUDIT ,STATION , DEPARTEMENT, MILIEU ,LATITUDE ,LONGITUDE ,NOTES ,DATEOBS ,ESPECE ,IMAGE );
53
 
53
 
54
// Fichier configuration
54
// Fichier configuration
55
	var $config;
55
	var $config;
56
 
56
 
57
// Encapsulation classe lecture fichier excel
57
// Encapsulation classe lecture fichier excel
58
 
-
 
59
	var $extendExcelReader;
58
	var $extendExcelReader;
-
 
59
 
-
 
60
// Dernier numero d'ordre utilise
-
 
61
	var $dernier_ordre=1;
60
 
62
 
61
/**
63
/**
62
 Constructeur
64
 Constructeur
63
**/
65
**/
64
	function InventoryImportExcel($config) {
66
	function InventoryImportExcel($config) {
65
 
67
 
66
		$this->config=$config;
68
		$this->config=$config;
67
		// Pas d'heritage multiple en php :(
69
		// Pas d'heritage multiple en php :(
68
 
70
 
69
		$this->extendExcelReader = new ExcelReader();
71
		$this->extendExcelReader = new ExcelReader();
70
		$this->extendExcelReader->initExcelReader();
72
		$this->extendExcelReader->initExcelReader();
-
 
73
 
-
 
74
/* Recherche dernier numero d'ordre utilise : pas de mise a jour concurente a priori */
-
 
75
 
-
 
76
 
71
	}
77
	}
72
 
78
 
73
/**
79
/**
74
 Sur post
80
 Sur post
75
**/
81
**/
76
	function createElement($pairs) {
82
	function createElement($pairs) {
77
 
83
 
78
 
84
 
79
		$pairs['utilisateur']=$_POST['identifiant'];
85
		$pairs['utilisateur']=$_POST['identifiant'];
80
			
-
 
81
 
86
			
82
		session_start();
87
        session_start();
83
                $this->controleUtilisateur($pairs['utilisateur']);
88
        $this->controleUtilisateur($pairs['utilisateur']);
84
 
-
 
85
 
89
 
86
		foreach($_FILES as $file) { // C'est le plus simple
90
 
87
 
91
        foreach($_FILES as $file) { // C'est le plus simple
88
                        $infos_fichier = $file ;
92
            $infos_fichier = $file ;
89
                }
93
        }
90
 
94
 
91
 
95
 
92
// Chargement tableau en memoire
96
// Chargement tableau en memoire
93
 
97
 
94
		$data = new Spreadsheet_Excel_Reader($infos_fichier['tmp_name'], false); // false : pour menager la memoire.
98
		$data = new Spreadsheet_Excel_Reader($infos_fichier['tmp_name'], false); // false : pour menager la memoire.
95
		$arr = array();
99
		$arr = array();
96
 
100
 
97
		$rowcount=$data->rowcount(0);
101
		$rowcount=$data->rowcount(0);
98
		$colcount=$data->colcount(0);
102
		$colcount=$data->colcount(0);
99
 
103
 
100
		if ($rowcount<=1) { // TODO : retour erreur
104
		if ($rowcount<=1) { // TODO : retour erreur
101
			print "Tableau vide";
105
			print "Tableau vide";
102
			exit;
106
			exit;
103
		}
107
		}
104
 
108
 
-
 
109
// Chargement tableau 
105
	        for($row=1;$row<=$rowcount;$row++) 
110
        for($row=1;$row<=$rowcount;$row++) 
106
        	        for($col=1;$col<=$colcount;$col++) 
111
            for($col=1;$col<=$colcount;$col++) 
107
                	        $arr[$col][$row] = $data->val($row,$col,0);
112
                $arr[$col][$row] = $data->val($row,$col,0); // Attention, inversion voulue
108
 
113
 
109
 
114
 
110
                        
115
                        
111
// 1 : Traitement colonnes 
116
// 1 : Traitement intitules
112
 
117
 
113
		$line = array();
118
		$line = array();
114
 
119
 
115
/* Les colonnes ne sont pas forcemment dans l'ordre  : on les extrait pour traitement futur  */
120
/* Les colonnes ne sont pas forcemment dans l'ordre  : on les extrait pour traitement futur  */
116
 
121
 
117
                for($col=1;$col<=$colcount;$col++) {
122
        for($col=1;$col<=$colcount;$col++) {
-
 
123
            $colonne=strtolower($arr[$col][1]);
-
 
124
            $colonne=trim($colonne);
-
 
125
            $colonne=cp1252_to_utf8($colonne);
118
			$colonne=strtolower($arr[$col][1]);
126
            $colonne=remove_accent($colonne);
119
			switch ($colonne) {  // On ne garde que les colonnes que l'on souhaite traiter
127
            switch ($colonne) {  // On ne garde que les colonnes que l'on souhaite traiter
120
				case COMMUNE:
128
                case COMMUNE:
121
				case LIEUDIT:
129
                case LIEUDIT:
122
				case STATION:
130
                case STATION:
-
 
131
                case MILIEU:
123
				case MILIEU:
132
                case DEPARTEMENT:
124
				case LATITUDE:
133
                case LATITUDE:
125
				case LONGITUDE:
134
                case LONGITUDE:
126
				case NOTES:
135
                case NOTES:
127
				case DATEOBS:
136
                case DATEOBS:
128
				case ESPECE:
137
                case ESPECE:
129
				case IMAGE:
138
                case IMAGE:
130
					$selection=array_values($arr[$col]);
139
                    $selection=array_values($arr[$col]);
131
					array_shift($selection); // On ne garde pas la premiere ligne, qui contient les intitules
140
                    array_shift($selection); // On ne garde pas la premiere ligne, qui contient les intitules
-
 
141
                    $line[$colonne]=$selection;
-
 
142
                    break;
-
 
143
 
132
					$line[$colonne]=$selection;
144
            }
133
					break;
-
 
134
 
-
 
135
			}
-
 
136
		} 
145
        } 
137
 
146
 
138
	/*	
147
 
139
		print_r($line[COMMUNE]);
148
//	print_r($line[COMMUNE]);
-
 
149
//		print_r($line[LIEUDIT]);
140
		print_r($line[LIEUDIT]);
150
//		print_r($line[STATION]);
141
		print_r($line[STATION]);
151
//		print_r($line[MILIEU]);
142
		print_r($line[MILIEU]);
152
//		print_r($line[DEPARTEMENT]);
143
		print_r($line[LATITUDE]);
153
//		print_r($line[LATITUDE]);
144
		print_r($line[LONGITUDE]);
154
//		print_r($line[LONGITUDE]);
145
		print_r($line[NOTES]);
155
//		print_r($line[NOTES]);
146
		print_r($line[DATEOBS]);
156
//		print_r($line[DATEOBS]);
147
		print_r($line[ESPECE]);
157
//		print_r($line[ESPECE]);
148
		print_r($line[IMAGE]);
158
//		print_r($line[IMAGE]);
149
	*/
159
	
150
 
160
 
151
// 1 : Traitement lignes
161
// 1 : Traitement lignes
152
 
162
 
153
		$cpt_obs=0;
163
		$cpt_obs=0;
-
 
164
 
-
 
165
 
-
 
166
        /* Recherche dernier numero d'ordre utilise : pas de mise a jour concurente a priori */
-
 
167
 
-
 
168
 
-
 
169
        $DB=$this->connectDB($this->config,'database_cel'); 
-
 
170
        $query="SELECT MAX(ordre) AS ordre FROM cel_inventory WHERE identifiant='".$DB->escapeSimple($pairs['utilisateur'])."' ";
-
 
171
 
-
 
172
        $res =& $DB->query($query);
-
 
173
        if (DB::isError($res)) {
-
 
174
            die($res->getMessage());
-
 
175
        }
-
 
176
 
-
 
177
        while ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) {
-
 
178
            $this->dernier_ordre=$row['ordre']; // 1  par defaut
-
 
179
        }
-
 
180
 
154
		for ($i=0;$i<=$rowcount-1;$i++) {
181
		for ($i=0;$i<=$rowcount-1;$i++) {
155
			// On saute les lignes vides du debut et les lignes contenant des information sur image uniquement
182
			// 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)) {
183
			while ((in_array($retour_analyse=$this->analyserLigne($line,$i),array(LIGNE_IMAGE_SEULEMENT, LIGNE_VIDE))) && ($i<=$rowcount)) {
157
				if  ($retour_analyse==LIGNE_IMAGE_SEULEMENT) {
184
				if  ($retour_analyse==LIGNE_IMAGE_SEULEMENT) {
158
	//				print "image non rattachee a une observation";
185
	//				print "image non rattachee a une observation";
159
				}
186
				}
160
				else {
187
				else {
161
	//				print "vide";
188
	//				print "vide";
162
				}
189
				}
163
				$i++;
190
				$i++;
164
			}
191
			}
165
			while (($this->analyserLigne($line,$i)==LIGNE_NORMALE) && ($i<=$rowcount)) {
192
			while (($this->analyserLigne($line,$i)==LIGNE_NORMALE) && ($i<=$rowcount)) {
166
				$ordre=$this->traiterLigne($line,$i,$pairs['utilisateur']);
193
				$ordre=$this->traiterLigne($line,$i,$pairs['utilisateur'],$DB);
167
				if ($ordre>0) {
194
				if ($ordre>0) {
168
					$cpt_obs++; // Compteur d'observations crees
195
					$cpt_obs++; // Compteur d'observations crees
169
				}
196
				}
170
				$i++;
197
				$i++;
171
				// On saute les lignes vide ou on traite les lignes suivantes contenant des informations sur image seulement
198
				// On saute les lignes vide ou on traite les lignes suivantes contenant des informations sur image seulement
172
				while ((in_array($retour_analyse=$this->analyserLigne($line,$i),array(LIGNE_IMAGE_SEULEMENT, LIGNE_VIDE))) && ($i<=$rowcount)) {
199
				while ((in_array($retour_analyse=$this->analyserLigne($line,$i),array(LIGNE_IMAGE_SEULEMENT, LIGNE_VIDE))) && ($i<=$rowcount)) {
173
					if  ($retour_analyse==LIGNE_IMAGE_SEULEMENT) {
200
					if  ($retour_analyse==LIGNE_IMAGE_SEULEMENT) {
174
						$this->traiterLigneComplement($line,$i,$pairs['utilisateur'],$ordre); // images supplementaires
201
						$this->traiterLigneComplement($line,$i,$pairs['utilisateur'],$ordre); // images supplementaires
175
					}
202
					}
176
					else {
203
					else {
177
	//					print "vide";
204
	//					print "vide";
178
					}
205
					}
179
					$i++;
206
					$i++;
180
				}	
207
				}	
181
			}
208
			}
182
			
209
			
183
	
210
	
184
		}
211
		}
-
 
212
		//print $cpt_obs ." nouvelle(s) observation(s) !";
185
		print $cpt_obs;
213
		print $cpt_obs ;
186
 
214
 
187
	}
215
	}
188
 
216
 
189
function analyserLigne($line,$i) {
217
function analyserLigne($line,$i) {
190
	$ligne_vide=true;
218
	$ligne_vide=true;
191
	$ligne_image_seulement=true;
219
	$ligne_image_seulement=true;
192
	$ligne_normale=true;
220
	$ligne_normale=true;
193
	foreach ($this->format_observation as $colonne) {
221
	foreach ($this->format_observation as $colonne) {
194
		if (isset ($line[$colonne][$i]) && $line[$colonne][$i]!='') {
222
		if (isset ($line[$colonne][$i]) && $line[$colonne][$i]!='') {
195
			if ($colonne!=IMAGE) {
223
			if ($colonne!=IMAGE) {
196
				$ligne_image_seulement=false;
224
				$ligne_image_seulement=false;
197
				$ligne_vide=false;
225
				$ligne_vide=false;
198
				break;
226
				break;
199
			}		
227
			}		
200
			$ligne_vide=false;
228
			$ligne_vide=false;
201
		}
229
		}
202
	}
230
	}
203
	if ($ligne_vide) {
231
	if ($ligne_vide) {
204
		return LIGNE_VIDE;
232
		return LIGNE_VIDE;
205
	}
233
	}
206
	else {
234
	else {
207
		if ($ligne_image_seulement) {
235
		if ($ligne_image_seulement) {
208
			return LIGNE_IMAGE_SEULEMENT;
236
			return LIGNE_IMAGE_SEULEMENT;
209
		}
237
		}
210
		else {
238
		else {
211
			return LIGNE_NORMALE;
239
			return LIGNE_NORMALE;
212
		}
240
		}
213
	}
241
	}
214
	
242
	
215
 
243
 
216
}
244
}
217
 
245
 
218
function traiterLigne($line,$i,$utilisateur) { // Controle donnee et insertion
246
function traiterLigne($line,$i,$utilisateur,$DB) { // Controle donnee et insertion
219
	$info_image=array();
247
	$info_image=array();
220
	foreach ($this->format_observation as $colonne) {
248
	foreach ($this->format_observation as $colonne) {
221
		if (isset ($line[$colonne][$i]) && $line[$colonne][$i]!='') {
249
		if (isset ($line[$colonne][$i]) && $line[$colonne][$i]!='') {
222
			switch ($colonne) {  // On ne garde que les colonnes que l'on souhaite traiter
250
			switch ($colonne) {  // On ne garde que les colonnes que l'on souhaite traiter
223
				case COMMUNE:
251
				case COMMUNE:
224
					$info_commune=$this->traiterCommune($line[COMMUNE][$i]);
252
					$info_commune=$this->traiterCommune($line[COMMUNE][$i]);
225
					break;
253
					break;
226
				case LIEUDIT:
254
				case LIEUDIT:
227
					$info_lieudit=$this->traiterLieudit($line[LIEUDIT][$i]);
255
					$info_lieudit=$this->traiterLieudit($line[LIEUDIT][$i]);
228
					break;
256
					break;
229
				case STATION:
257
				case STATION:
230
					$info_station=$this->traiterStation($line[STATION][$i]);
258
					$info_station=$this->traiterStation($line[STATION][$i]);
231
					break;
259
					break;
232
				case MILIEU:
260
				case MILIEU:
233
					$info_milieu=$this->traiterMilieu($line[MILIEU][$i]);
261
					$info_milieu=$this->traiterMilieu($line[MILIEU][$i]);
234
					break;
262
					break;
-
 
263
                case DEPARTEMENT:
-
 
264
					$info_commune['code']=$this->traiterDepartement($line[DEPARTEMENT][$i]);
-
 
265
					break;
235
				case LATITUDE:
266
				case LATITUDE:
236
					$info_latitude=$this->traiterLatitude($line[LATITUDE][$i]);
267
					$info_latitude=$this->traiterLatitude($line[LATITUDE][$i]);
237
					break;
268
					break;
238
				case LONGITUDE:
269
				case LONGITUDE:
239
					$info_longitude=$this->traiterLongitude($line[LONGITUDE][$i]);
270
					$info_longitude=$this->traiterLongitude($line[LONGITUDE][$i]);
240
					break;
271
					break;
241
				case NOTES:
272
				case NOTES:
242
					$info_notes=$this->traiterNotes($line[NOTES][$i]);
273
					$info_notes=$this->traiterNotes($line[NOTES][$i]);
243
					break;
274
					break;
244
				case DATEOBS:
275
				case DATEOBS:
245
					$info_dateobs=$this->traiterDateObs($line[DATEOBS][$i]);
276
					$info_dateobs=$this->traiterDateObs($line[DATEOBS][$i]);
246
					break;
277
					break;
247
				case ESPECE:
278
				case ESPECE:
248
					$info_espece=$this->traiterEspece($line[ESPECE][$i]);
279
					$info_espece=$this->traiterEspece($line[ESPECE][$i]);
249
					if (isset($info_espece['en_id_nom']) && $info_espece['en_id_nom']!='') {
280
                    if (isset($info_espece['en_id_nom']) && $info_espece['en_id_nom']!='') {
250
						$complement=$this->rechercherInformationsComplementaires($info_espece['en_id_nom']);
281
                        $complement=$this->rechercherInformationsComplementaires($info_espece['en_id_nom']);
251
						$info_espece['nom_ret']=$complement['Nom_Retenu'];
282
                        $info_espece['nom_ret']=$complement['Nom_Retenu'];
252
	        	                        $info_espece['num_nom_ret']=$complement['Num_Nom_Retenu'];
283
                        $info_espece['num_nom_ret']=$complement['Num_Nom_Retenu'];
253
        	        	                $info_espece['num_taxon']=$complement['Num_Taxon'];
284
                        $info_espece['num_taxon']=$complement['Num_Taxon'];
254
                	        	        $info_espece['famille']=$complement['Famille'];
285
                        $info_espece['famille']=$complement['Famille'];
255
					}
286
                    }
256
 
-
 
257
 
-
 
258
					break;
287
                    break;
259
				case IMAGE:
288
				case IMAGE:
260
					$info_image=$this->traiterImage($line[IMAGE][$i],$utilisateur); // Image separee par des / +  utilisateur
289
					$info_image=$this->traiterImage($line[IMAGE][$i],$utilisateur); // Image separee par des / +  utilisateur
261
					break;
290
					break;
262
			}
291
			}
263
		}
292
		}
264
		else {	
293
		else {	
265
		 	switch($colonne) {
294
		 	switch($colonne) {
266
				case COMMUNE:
295
				case COMMUNE:
267
					$info_commune['name']="000null";
296
					$info_commune['name']="000null";
268
					$info_commune['code']="000null";
297
					$info_commune['code']="000null";
269
					break;
298
					break;
270
				case LIEUDIT:
299
				case LIEUDIT:
271
					$info_lieudit="000null";
300
					$info_lieudit="000null";
272
					break;
301
					break;
273
				case STATION:
302
				case STATION:
274
					$info_station="000null";
303
					$info_station="000null";
275
					break;
304
					break;
276
				case MILIEU:
305
				case MILIEU:
277
					$info_milieu="000null";
306
					$info_milieu="000null";
278
					break;
307
					break;
-
 
308
				case DEPARTEMENT:
-
 
309
					$info_commune['code']="000null";
-
 
310
					break;
279
				case LATITUDE:
311
				case LATITUDE:
280
					$info_latitude="000null";
312
					$info_latitude="000null";
281
					break;
313
					break;
282
				case LONGITUDE:
314
				case LONGITUDE:
283
					$info_longitude="000null";
315
					$info_longitude="000null";
284
					break;
316
					break;
285
 
317
 
286
			}
318
			}
287
 
319
 
288
		}
320
		}
289
	}
321
	}
290
 
-
 
291
                // Dernier numero d'ordre utilise :
-
 
292
 
-
 
293
                $DB=$this->connectDB($this->config,'database_cel'); // TODO / a garder en memoire pour eviter appels mutliples
-
 
294
                $query="SELECT MAX(ordre) AS ordre FROM cel_inventory WHERE identifiant='".$DB->escapeSimple($utilisateur)."' ";
-
 
295
 
-
 
296
                $res =& $DB->query($query);
-
 
297
                if (DB::isError($res)) {
-
 
298
                        die($res->getMessage());
-
 
299
                }
-
 
300
                $ordre=1;
-
 
301
 
-
 
302
                while ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) {
322
 
303
                    $ordre=$row['ordre']+1;
-
 
304
                }
323
                $this->dernier_ordre++;
305
 
324
 
306
                list($jour,$mois,$annee)=split("/",$info_dateobs);
325
                list($jour,$mois,$annee)=split("/",$info_dateobs);
307
                $info_dateobs=$annee."-".$mois."-".$jour." 0:0:0";
326
                $info_dateobs=$annee."-".$mois."-".$jour." 0:0:0";
308
 
-
 
309
 
327
 
310
	 $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, date_creation,date_modification,coord_x,coord_y) " .
328
                $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, date_creation,date_modification,coord_x,coord_y) " .
311
                " VALUES('".$DB->escapeSimple($utilisateur)."','".
329
                    " VALUES('".$DB->escapeSimple($utilisateur)."','".
312
                $DB->escapeSimple($ordre)."','".
330
                    $DB->escapeSimple($this->dernier_ordre)."','".
313
                $DB->escapeSimple($info_espece['nom_sel'])."','".
331
                    $DB->escapeSimple($info_espece['nom_sel'])."','".
314
                $DB->escapeSimple($info_espece['en_id_nom'])."','".
332
                    $DB->escapeSimple($info_espece['en_id_nom'])."','".
315
                $DB->escapeSimple($info_espece['nom_ret'])."','".
333
                    $DB->escapeSimple($info_espece['nom_ret'])."','".
316
                $DB->escapeSimple($info_espece['num_nom_ret'])."','".
334
                    $DB->escapeSimple($info_espece['num_nom_ret'])."','".
317
                $DB->escapeSimple($info_espece['num_taxon'])."','".
335
                    $DB->escapeSimple($info_espece['num_taxon'])."','".
318
                $DB->escapeSimple($info_espece['famille'])."','".
336
                    $DB->escapeSimple($info_espece['famille'])."','".
319
                $DB->escapeSimple($info_commune['name'])."','".
337
                    $DB->escapeSimple($info_commune['name'])."','".
320
                $DB->escapeSimple($info_commune['code'])."','".
338
                    $DB->escapeSimple($info_commune['code'])."','".
321
                $DB->escapeSimple($info_dateobs)."','".
339
                    $DB->escapeSimple($info_dateobs)."','".
322
                $DB->escapeSimple($info_lieudit)."','".
340
                    $DB->escapeSimple($info_lieudit)."','".
323
                $DB->escapeSimple($info_station)."','".
341
                    $DB->escapeSimple($info_station)."','".
324
                $DB->escapeSimple($info_milieu)."','".
342
                    $DB->escapeSimple($info_milieu)."','".
325
                $DB->escapeSimple($info_notes)."',".
343
                    $DB->escapeSimple($info_notes)."',".
326
                "now() , now(),'".
344
                    "now() , now(),'".
327
                $DB->escapeSimple($info_latitude)."','".
345
                    $DB->escapeSimple($info_latitude)."','".
328
                $DB->escapeSimple($info_longitude)."')";
-
 
329
//		print $query;
346
                    $DB->escapeSimple($info_longitude)."')";
330
//		print "\n";
347
//		print "\n";
331
 
348
 
332
 
349
 
333
		   $res =& $DB->query($query);
350
		   $res =& $DB->query($query);
334
 
351
 
335
                if (PEAR::isError($res)) {
352
                if (PEAR::isError($res)) {
336
                        return false;
353
                        return false;
337
                }
354
                }
338
		
355
		
339
 
356
 
340
	// creation lien image
357
	// creation lien image
341
	foreach ($info_image as $pic) {
358
	foreach ($info_image as $pic) {
342
 
359
 
343
		$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($ordre).'") ON DUPLICATE KEY UPDATE coi_ce_image = coi_ce_image' ;	
360
		$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($ordre).'") ON DUPLICATE KEY UPDATE coi_ce_image = coi_ce_image' ;	
344
	
361
	
345
//print $query;
362
//print $query;
346
 
363
 
347
		$res =& $DB->query($query);
364
		$res =& $DB->query($query);
348
 
365
 
349
                if (PEAR::isError($res)) {
366
                if (PEAR::isError($res)) {
350
                        return false;
367
                        return false;
351
                }
368
                }
352
		
369
		
353
 
370
 
354
	}
371
	}
355
 
372
 
356
 
373
 
357
 
374
 
358
		return $ordre;
375
		return $this->dernier_ordre;
359
 
376
 
360
 
377
 
361
}
378
}
362
 
379
 
363
function traiterLigneComplement($line,$i,$utilisateur) {
380
function traiterLigneComplement($line,$i,$utilisateur) {
364
 
381
 
365
// TODO
382
// TODO
366
 
383
 
367
}
384
}
368
function traiterCommune($identifiant_commune) {  // Recherche correspondance sur nom, si pas unique, correspondance dep. sinon code insee
385
function traiterCommune($identifiant_commune) {  // Recherche correspondance sur nom, si pas unique, correspondance dep. sinon code insee
369
 
386
 
370
 
-
 
371
 
387
 
372
        $identifiant_commune=ltrim($identifiant_commune);
388
        $identifiant_commune=trim($identifiant_commune);
373
 
389
 
374
        $identifiant_commune=utf8_encode($identifiant_commune); // FIXME : devrait deja etre en utf8 a ce niveau
390
        $identifiant_commune=utf8_encode($identifiant_commune); // FIXME : devrait deja etre en utf8 a ce niveau
375
 
391
 
376
	preg_match('/(.*)\((.*)\)/',$identifiant_commune,$elements);
392
	preg_match('/(.*) \(([0-9][0-9]*)\)/',$identifiant_commune,$elements);
377
 
393
 
378
        $DB=$this->connectDB($this->config,'database_cel'); // FIXME regarder si opportun ici
394
        $DB=$this->connectDB($this->config,'database_cel'); // FIXME regarder si opportun ici
379
 
395
 
380
	if ($elements[1]) { // departement present
396
	if ($elements[1]) { // commune + departement : montpellier (34)
381
		$nom_commune=$elements[1];
397
		$nom_commune=$elements[1];
382
		$code_commune=$elements[2];
398
		$code_commune=$elements[2];
383
 
399
 
384
 	        $query="SELECT DISTINCT name, code  FROM locations WHERE name = '".$DB->escapeSimple($nom_commune)."' AND code ='".$DB->escapeSimple($code_commune)."'";
400
 	        $query="SELECT DISTINCT name, code  FROM locations WHERE name = '".$DB->escapeSimple($nom_commune)."' AND code ='".$DB->escapeSimple($code_commune)."'";
385
 
401
 
386
	}
402
	}
387
	else {
403
	else { // Code insee seul 
388
		preg_match('/([0-9][0-9])|(2A[0-9][0-9]*)|(2B[0-9][0-9]*)/',$identifiant_commune,$elements);
404
        preg_match('/([0-9][0-9]*)|(2A[0-9][0-9]*)|(2B[0-9][0-9]*)/',$identifiant_commune,$elements);
389
		if ($elements[1]) { // code insee  commune
405
        if ($elements[1]) { // code insee  commune
390
			$code_insee_commune=$elements[1];
406
            $code_insee_commune=$elements[1];
391
 	        	$query="SELECT DISTINCT name, code  FROM locations WHERE insee_code ='".$DB->escapeSimple($code_insee_commune)."'";
407
            $query="SELECT DISTINCT name, code  FROM locations WHERE insee_code ='".$DB->escapeSimple($code_insee_commune)."'";
392
		}	
408
        }	
-
 
409
        else { // Commune seule (le departement sera recupere dans la colonne departement si elle est presente, on prend le risque ici de retourner une mauvaise
393
		else {
410
               // Commune
394
		preg_match('/(.*)/',$identifiant_commune,$elements);
411
            preg_match('/(.*)/',$identifiant_commune,$elements);
395
			if ($elements[1]) { // commune 
412
            if ($elements[1]) { // commune 
396
				$nom_commune=$elements[1];
413
                $nom_commune=$elements[1];
397
	 	        	$query="SELECT DISTINCT name, code  FROM locations WHERE name = '".$DB->escapeSimple($nom_commune)."'";
414
                $query="SELECT DISTINCT name, code  FROM locations WHERE name = '".$DB->escapeSimple($nom_commune)."'";
398
			}
415
            }
399
		}
416
        }
400
	}
417
	}
401
 
418
 
402
	
419
	
403
	$res =& $DB->query($query);
420
	$res =& $DB->query($query);
404
 
421
 
405
        if (DB::isError($res)) {
422
        if (DB::isError($res)) {
406
		 die($res->getMessage());
423
		 die($res->getMessage());
407
	}
424
	}
408
 
425
 
409
	return $res->fetchrow(DB_FETCHMODE_ASSOC);
426
	return $res->fetchrow(DB_FETCHMODE_ASSOC);
410
 
427
 
411
	
428
	
412
 
429
 
413
 
430
 
414
}
431
}
415
 
432
 
416
function traiterLieudit($lieudit) { // texte libre
433
function traiterLieudit($lieudit) { // texte libre
417
 
434
 
418
	//echo "traitement lieudit";
435
	//echo "traitement lieudit";
419
 
436
 
420
	return utf8_encode(ltrim($lieudit));
437
	return utf8_encode(trim($lieudit));
421
}
438
}
422
 
439
 
423
function traiterStation($station) { // texte libre
440
function traiterStation($station) { // texte libre
424
//	echo "traitement station";
441
//	echo "traitement station";
425
	return utf8_encode(ltrim($station));
442
	return utf8_encode(trim($station));
426
}
443
}
427
 
444
 
428
function traiterMilieu($milieu) { // texte libre
445
function traiterMilieu($milieu) { // texte libre
429
//	echo "traitement milieu";
446
//	echo "traitement milieu";
430
	return utf8_encode(ltrim($milieu));
447
	return utf8_encode(trim($milieu));
-
 
448
}
-
 
449
 
-
 
450
function traiterDepartement($departement) { // texte libre
-
 
451
//	echo "traitement milieu";
-
 
452
	return utf8_encode(trim($departement));
431
}
453
}
432
 
454
 
433
function traiterLatitude($latitude) {	//  verifier formal decimal + limite france ? TODO 
455
function traiterLatitude($latitude) {	//  verifier formal decimal + limite france ? TODO 
434
//	echo "traitement latitude";
456
//	echo "traitement latitude";
435
	return ltrim($latitude);
457
	return trim($latitude);
436
}
458
}
437
 
459
 
438
function traiterLongitude($longitude) { // verifier format decimal + limite france ? TODO 
460
function traiterLongitude($longitude) { // verifier format decimal + limite france ? TODO 
439
//	echo "traitement longitude";
461
//	echo "traitement longitude";
440
	return ltrim($longitude);
462
	return trim($longitude);
441
}
463
}
442
 
464
 
443
function traiterNotes($notes) { // texte libre
465
function traiterNotes($notes) { // texte libre
444
//	echo "traitement notes";
466
//	echo "traitement notes";
445
	return utf8_encode(ltrim($notes));
467
	return utf8_encode(trim($notes));
446
}
468
}
447
 
469
 
448
function traiterDateObs($dateobs) { // verifier jj/mm/aaaa sinon date vide TODO 
470
function traiterDateObs($dateobs) { // verifier jj/mm/aaaa sinon date vide TODO 
449
//	echo "traitement dateobs";
471
//	echo "traitement dateobs";
450
	return ltrim($dateobs);
472
	return trim($dateobs);
451
}
473
}
452
 
474
 
453
function traiterEspece($identifiant_espece) {  // texte libre, nom scientifique , ou code nomenclatural (format BDNFFnn999999)
475
function traiterEspece($identifiant_espece) {  // texte libre, nom scientifique , ou code nomenclatural (format BDNFFnn999999) ou code taxonomique (format BDNFFnt999999)
454
 
476
 
455
//	echo "traitement  espece";
477
//	echo "traitement  espece";
456
        $identifiant_espece=ltrim($identifiant_espece);
478
        $identifiant_espece=trim($identifiant_espece);
457
 
479
 
458
        $identifiant_espece=utf8_encode($identifiant_espece); // FIXME : devrait deja etre en utf8 a ce niveau
480
        $identifiant_espece=utf8_encode($identifiant_espece); // FIXME : devrait deja etre en utf8 a ce niveau
459
 
481
 
460
	preg_match('/BDNFFnn([0-9][0-9]*)/',$identifiant_espece,$elements);
482
	    preg_match('/BDNFFnn([0-9][0-9]*)/',$identifiant_espece,$elements);
461
 
483
	
462
		if ($elements[1]) { // Numero nomenclatural 
484
		if ($elements[1]) { // Numero nomenclatural 
463
 
485
 
464
 
486
 
465
// Recherche du nom associe
487
            // Recherche du nom associe
466
                        $DB=$this->connectDB($this->config); // FIXME : gerer cache de connection
488
            $DB=$this->connectDB($this->config); // FIXME : gerer cache de connection
467
                                      $query = "SELECT DISTINCT en_nom_genre, en_epithete_espece, en_nom_supra_generique, en_epithete_infra_generique,".
489
            $query = "SELECT DISTINCT en_nom_genre, en_epithete_espece, en_nom_supra_generique, en_epithete_infra_generique,".
468
                                        "   auteur_bex.enaia_intitule_abrege AS abreviation_auteur_basio_ex ".
490
                "   auteur_bex.enaia_intitule_abrege AS abreviation_auteur_basio_ex ".
469
                                        " , auteur_b.enaia_intitule_abrege AS abreviation_auteur_basio ".
491
                " , auteur_b.enaia_intitule_abrege AS abreviation_auteur_basio ".
470
                                        " , auteur_mex.enaia_intitule_abrege AS abreviation_auteur_modif_ex ".
492
                " , auteur_mex.enaia_intitule_abrege AS abreviation_auteur_modif_ex ".
471
                                        " , auteur_m.enaia_intitule_abrege AS abreviation_auteur_modif ".
493
                " , auteur_m.enaia_intitule_abrege AS abreviation_auteur_modif ".
472
                                        " , en_epithete_espece, en_epithete_infra_specifique, enrg_abreviation_rang, en_id_nom" .
494
                " , en_epithete_espece, en_epithete_infra_specifique, enrg_abreviation_rang, en_id_nom" .
473
                                        " FROM eflore_nom, eflore_nom_rang, eflore_selection_nom a,  " .
495
                " FROM eflore_nom, eflore_nom_rang, eflore_selection_nom a,  " .
474
                                        "         eflore_naturaliste_intitule_abreviation AS auteur_bex ".
496
                " eflore_naturaliste_intitule_abreviation AS auteur_bex ".
475
                                        "   , eflore_naturaliste_intitule_abreviation AS auteur_b ".
497
                " , eflore_naturaliste_intitule_abreviation AS auteur_b ".
476
                                        "   , eflore_naturaliste_intitule_abreviation AS auteur_mex ".
498
                " , eflore_naturaliste_intitule_abreviation AS auteur_mex ".
477
                                        "   , eflore_naturaliste_intitule_abreviation AS auteur_m ".
499
                " , eflore_naturaliste_intitule_abreviation AS auteur_m ".
478
				     	" WHERE a.esn_id_nom= '".$elements[1]. "'".
500
                " WHERE a.esn_id_nom= '".$elements[1]. "'".
479
					" AND a.esn_id_version_projet_taxon = 25 ".
501
                " AND a.esn_id_version_projet_taxon = 25 ".
480
				    	" AND en_ce_rang = enrg_id_rang" .
502
                " AND en_ce_rang = enrg_id_rang" .
481
				     	" AND en_id_nom = a.esn_id_nom" .
503
                " AND en_id_nom = a.esn_id_nom" .
482
				     	" AND en_ce_auteur_basio_ex = auteur_bex.enaia_id_intitule_naturaliste_abrege ".
504
                " AND en_ce_auteur_basio_ex = auteur_bex.enaia_id_intitule_naturaliste_abrege ".
483
				        " AND en_ce_auteur_basio = auteur_b.enaia_id_intitule_naturaliste_abrege  ".
505
                " AND en_ce_auteur_basio = auteur_b.enaia_id_intitule_naturaliste_abrege  ".
484
		                        " AND en_ce_auteur_modif_ex = auteur_mex.enaia_id_intitule_naturaliste_abrege ".
506
                " AND en_ce_auteur_modif_ex = auteur_mex.enaia_id_intitule_naturaliste_abrege ".
485
                   		        " AND en_ce_auteur_modif = auteur_m.enaia_id_intitule_naturaliste_abrege ".
507
                " AND en_ce_auteur_modif = auteur_m.enaia_id_intitule_naturaliste_abrege ".
486
                                        " AND a.esn_id_version_projet_taxon=en_id_version_projet_nom ";
-
 
487
		
-
 
488
				    	$res =& $DB->query($query);
-
 
489
 
-
 
490
 
508
                " AND a.esn_id_version_projet_taxon=en_id_version_projet_nom ";
491
					if (DB::isError($res)) {
-
 
492
						die($res->getMessage());
-
 
493
					}
-
 
-
 
509
 
-
 
510
            $res =& $DB->query($query);
494
 
511
 
495
					$row =& $res->fetchrow(DB_FETCHMODE_ASSOC);
512
 
-
 
513
            if (DB::isError($res)) {
-
 
514
                die($res->getMessage());
496
		 			return array("nom_sel"=>$this->formaterNom($row),"en_id_nom"=>$elements[1]);
515
            }
497
 
516
 
498
		}
-
 
499
 
-
 
500
		else { // Nom scientifique
-
 
501
 
-
 
502
 
-
 
503
			$decoupageNomLatin=new DecoupageNomLatin();
-
 
504
			$nom_latin_decoupe=$decoupageNomLatin->decouper($identifiant_espece);
-
 
505
			
-
 
506
/*
-
 
507
 
-
 
508
    [nom_genre] => Acer
-
 
509
    [nom_sp] => monspessulanum
-
 
510
    [auteur_sp] => 
-
 
511
    [nom_complement] => 
-
 
512
    [type_infrasp] => 
517
            $row =& $res->fetchrow(DB_FETCHMODE_ASSOC);
513
    [nom_infrasp] => 
-
 
514
    [num_nomenc] => 
-
 
515
    [num_taxo] => 
518
            return array("nom_sel"=>$this->formaterNom($row),"en_id_nom"=>$elements[1]);
516
    [rang_taxonomique] => 250
-
 
517
    [nom_courant] => monspessulanum
-
 
518
    [nom_superieur] => Acer
-
 
519
    [agg] => 
-
 
520
    [nom_complet] => Acer monspessulanum
-
 
521
 
-
 
522
/*
-
 
523
 
-
 
524
  [nom_genre] => Acer
-
 
525
    [nom_sp] => monspessulanum
-
 
526
    [auteur_sp] => 
-
 
527
    [nom_complement] => 
-
 
528
    [type_infrasp] => subsp.
519
 
529
    [nom_infrasp] => monspessulanum
-
 
530
    [num_nomenc] => 
-
 
531
    [num_taxo] => 
-
 
-
 
520
		}
-
 
521
 
-
 
522
		else { //  Numero taxonomique ou nom scientifique
-
 
523
	        preg_match('/BDNFFnt([0-9][0-9]*)/',$identifiant_espece,$elements);
-
 
524
			
-
 
525
		    if ($elements[1]) { // Numero taxonomique
-
 
526
    
-
 
527
                $DB=$this->connectDB($this->config);
-
 
528
 
-
 
529
                $query = "SELECT DISTINCT en_nom_genre, en_epithete_espece, en_nom_supra_generique, en_epithete_infra_generique,".
-
 
530
                    "   auteur_bex.enaia_intitule_abrege AS abreviation_auteur_basio_ex ".
-
 
531
                    " , auteur_b.enaia_intitule_abrege AS abreviation_auteur_basio ".
-
 
532
                    " , auteur_mex.enaia_intitule_abrege AS abreviation_auteur_modif_ex ".
-
 
533
                    " , auteur_m.enaia_intitule_abrege AS abreviation_auteur_modif ".
-
 
534
                    " , en_epithete_espece, en_epithete_infra_specifique, enrg_abreviation_rang, en_id_nom" .
-
 
535
                    " FROM eflore_nom, eflore_nom_rang," .
-
 
536
                    "     eflore_naturaliste_intitule_abreviation AS auteur_bex ".
-
 
537
                    "   , eflore_naturaliste_intitule_abreviation AS auteur_b ".
-
 
538
                    "   , eflore_naturaliste_intitule_abreviation AS auteur_mex ".
-
 
539
                    "   , eflore_naturaliste_intitule_abreviation AS auteur_m ".
-
 
540
                    " , eflore_selection_nom ".
532
    [rang_taxonomique] => 280
541
                    " WHERE esn_id_taxon = '".$elements[1]. "'".
533
    [nom_courant] => monspessulanum
-
 
534
    [nom_superieur] => monspessulanum
-
 
535
    [agg] => 
-
 
536
    [nom_complet] => Acer monspessulanum subsp. monspessulanum
-
 
537
 
-
 
538
*/
-
 
539
 
-
 
540
 
-
 
541
        		$DB=$this->connectDB($this->config); // FIXME regarder si opportun ici
542
                    " AND esn_id_version_projet_taxon = 25 ".
-
 
543
                    " AND esn_ce_statut=3 ".
-
 
544
                    " AND en_id_nom = esn_id_nom" .
-
 
545
                    " AND en_ce_rang = enrg_id_rang" .
542
 
-
 
-
 
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  ".
543
                      	$query="SELECT DISTINCT en_id_nom" .
-
 
544
                                        " FROM eflore_nom, eflore_nom_rang " .
548
                    " AND en_ce_auteur_modif_ex = auteur_mex.enaia_id_intitule_naturaliste_abrege ".
545
                                        " WHERE en_id_version_projet_nom = '25' AND en_nom_genre = '".$DB->escapeSimple($nom_latin_decoupe['nom_genre'])."' " .
-
 
546
                                        " AND en_ce_rang = '".$DB->escapeSimple($nom_latin_decoupe['rang_taxonomique'])."' " ;
-
 
-
 
549
                    " AND en_ce_auteur_modif = auteur_m.enaia_id_intitule_naturaliste_abrege ".
-
 
550
                    " AND esn_id_version_projet_taxon=en_id_version_projet_nom ";
-
 
551
 
-
 
552
                $res =& $DB->query($query);
-
 
553
 
-
 
554
                if (DB::isError($res)) {
-
 
555
                    die($res->getMessage());
-
 
556
                }
-
 
557
 
-
 
558
                $row =& $res->fetchrow(DB_FETCHMODE_ASSOC);
-
 
559
                return array("nom_sel"=>$this->formaterNom($row),"en_id_nom"=>$row['en_id_nom']);
-
 
560
 
-
 
561
 
-
 
562
            }
-
 
563
 
-
 
564
            else { // Nom scientifique
-
 
565
                $nameparser=new NameParser();
-
 
566
                $nom_latin_decoupe=$nameparser->parse($identifiant_espece);
-
 
567
 
-
 
568
//print_r($nom_latin_decoupe);
-
 
569
                    $DB=$this->connectDB($this->config); // FIXME regarder si opportun ici
-
 
570
 
-
 
571
                        // requete sous espece (on privilegie les noms retenu cf tri par esn_ce_statut) 
-
 
572
                        if (isset($nom_latin_decoupe['infra']) && $nom_latin_decoupe['infra']!="") {
-
 
573
                            $query="SELECT DISTINCT en_id_nom, esn_ce_statut" .
-
 
574
                                            " FROM eflore_nom, eflore_nom_rang, eflore_selection_nom " .
-
 
575
                                            " WHERE en_id_version_projet_nom = '25' AND en_nom_genre = '".$DB->escapeSimple($nom_latin_decoupe['genus'])."' " .
-
 
576
                                            " AND enrg_abreviation_rang = '".$DB->escapeSimple($nom_latin_decoupe['infra_type'])."' " .
-
 
577
                                            " AND en_epithete_infra_specifique = '".$DB->escapeSimple($nom_latin_decoupe['infra'])."' " .
-
 
578
                                            " AND esn_id_nom= en_id_nom ".
-
 
579
                                            " AND esn_id_version_projet_taxon=en_id_version_projet_nom " .
-
 
580
                                            " AND en_epithete_espece =  '".$DB->escapeSimple($nom_latin_decoupe['species'])."' AND en_ce_rang = enrg_id_rang " .
547
					if (isset($nom_latin_decoupe['nom_infrasp']) && $nom_latin_decoupe['nom_infrasp']!="") {
581
                                            " ORDER BY esn_ce_statut ".
-
 
582
                                            " LIMIT 1";
-
 
583
                        }
-
 
584
                        else { // espece  (on privilegie les noms retenu cf tri par esn_ce_statut)
548
						$query.=" AND en_epithete_infra_specifique = '".$DB->escapeSimple($nom_latin_decoupe['nom_infrasp'])."' " ;
-
 
549
					}
-
 
550
                                        $query.=" AND en_epithete_espece =  '".$DB->escapeSimple($nom_latin_decoupe['nom_sp'])."' AND en_ce_rang = enrg_id_rang " .
-
 
551
                                        " LIMIT 1";
-
 
552
 
-
 
553
 
-
 
554
			}
-
 
555
 
-
 
556
			$res =& $DB->query($query);
-
 
557
 
-
 
558
			if (DB::isError($res)) {
-
 
559
				 die($res->getMessage());
-
 
560
			}
-
 
561
 
585
                             $query="SELECT DISTINCT en_id_nom, esn_ce_statut" .
562
			$id_nom=$res->fetchrow(DB_FETCHMODE_ASSOC);
-
 
563
 
-
 
564
			// Recherche du nom associe
-
 
565
                        $DB=$this->connectDB($this->config); // FIXME : gerer cache de connection
-
 
566
                                      $query = "SELECT DISTINCT en_nom_genre, en_epithete_espece, en_nom_supra_generique, en_epithete_infra_generique,".
-
 
567
                                        "   auteur_bex.enaia_intitule_abrege AS abreviation_auteur_basio_ex ".
-
 
568
                                        " , auteur_b.enaia_intitule_abrege AS abreviation_auteur_basio ".
-
 
569
                                        " , auteur_mex.enaia_intitule_abrege AS abreviation_auteur_modif_ex ".
-
 
570
                                        " , auteur_m.enaia_intitule_abrege AS abreviation_auteur_modif ".
-
 
-
 
586
                                            " FROM eflore_nom, eflore_nom_rang, eflore_selection_nom " .
-
 
587
                                            " WHERE en_id_version_projet_nom = '25' AND en_nom_genre = '".$DB->escapeSimple($nom_latin_decoupe['genus'])."' " .
-
 
588
                                            " AND enrg_abreviation_rang = 'sp.' " .
-
 
589
                                            " AND esn_id_nom= en_id_nom ".
-
 
590
                                            " AND esn_id_version_projet_taxon=en_id_version_projet_nom " .
-
 
591
                                            " AND en_epithete_espece =  '".$DB->escapeSimple($nom_latin_decoupe['species'])."' AND en_ce_rang = enrg_id_rang " .
-
 
592
                                            " ORDER BY esn_ce_statut ".
-
 
593
                                            " LIMIT 1";
-
 
594
                        
-
 
595
                        }
-
 
596
                $res =& $DB->query($query);
-
 
597
                if (DB::isError($res)) {
-
 
598
                     die($res->getMessage());
-
 
599
                }
-
 
600
 
-
 
601
                $id_nom=$res->fetchrow(DB_FETCHMODE_ASSOC);
-
 
602
 
-
 
603
                // Recherche du nom associe
-
 
604
                $DB=$this->connectDB($this->config); // FIXME : gerer cache de connection
-
 
605
                $query = "SELECT DISTINCT en_nom_genre, en_epithete_espece, en_nom_supra_generique, en_epithete_infra_generique,".
-
 
606
                    "   auteur_bex.enaia_intitule_abrege AS abreviation_auteur_basio_ex ".
-
 
607
                    " , auteur_b.enaia_intitule_abrege AS abreviation_auteur_basio ".
-
 
608
                    " , auteur_mex.enaia_intitule_abrege AS abreviation_auteur_modif_ex ".
571
                                        " , en_epithete_espece, en_epithete_infra_specifique, enrg_abreviation_rang, en_id_nom" .
-
 
572
                                        " FROM eflore_nom, eflore_nom_rang, eflore_selection_nom a,  " .
-
 
573
                                        "         eflore_naturaliste_intitule_abreviation AS auteur_bex ".
-
 
574
                                        "   , eflore_naturaliste_intitule_abreviation AS auteur_b ".
609
                    " , auteur_m.enaia_intitule_abrege AS abreviation_auteur_modif ".
575
                                        "   , eflore_naturaliste_intitule_abreviation AS auteur_mex ".
610
                    " , en_epithete_espece, en_epithete_infra_specifique, enrg_abreviation_rang, en_id_nom" .
-
 
611
                    " FROM eflore_nom, eflore_nom_rang, eflore_selection_nom a,  " .
-
 
612
                    "         eflore_naturaliste_intitule_abreviation AS auteur_bex ".
-
 
613
                    "   , eflore_naturaliste_intitule_abreviation AS auteur_b ".
-
 
614
                    "   , eflore_naturaliste_intitule_abreviation AS auteur_mex ".
-
 
615
                    "   , eflore_naturaliste_intitule_abreviation AS auteur_m ".
-
 
616
                    " WHERE a.esn_id_nom= '".$id_nom['en_id_nom']. "'".
-
 
617
                    " AND a.esn_id_version_projet_taxon = 25 ".
-
 
618
                    " AND en_ce_rang = enrg_id_rang" .
-
 
619
                    " AND en_id_nom = a.esn_id_nom" .
-
 
620
                    " AND en_ce_auteur_basio_ex = auteur_bex.enaia_id_intitule_naturaliste_abrege ".
576
                                        "   , eflore_naturaliste_intitule_abreviation AS auteur_m ".
621
                    " AND en_ce_auteur_basio = auteur_b.enaia_id_intitule_naturaliste_abrege  ".
577
				     	" WHERE a.esn_id_nom= '".$id_nom['en_id_nom']. "'".
622
                    " AND en_ce_auteur_modif_ex = auteur_mex.enaia_id_intitule_naturaliste_abrege ".
578
					" AND a.esn_id_version_projet_taxon = 25 ".
623
                    " AND en_ce_auteur_modif = auteur_m.enaia_id_intitule_naturaliste_abrege ".
579
				    	" AND en_ce_rang = enrg_id_rang" .
624
                    " AND a.esn_id_version_projet_taxon=en_id_version_projet_nom ";
580
				     	" AND en_id_nom = a.esn_id_nom" .
625
                $res =& $DB->query($query);
581
				     	" AND en_ce_auteur_basio_ex = auteur_bex.enaia_id_intitule_naturaliste_abrege ".
626
 
582
				        " AND en_ce_auteur_basio = auteur_b.enaia_id_intitule_naturaliste_abrege  ".
627
 
583
		                        " AND en_ce_auteur_modif_ex = auteur_mex.enaia_id_intitule_naturaliste_abrege ".
628
                if (DB::isError($res)) {
584
                   		        " AND en_ce_auteur_modif = auteur_m.enaia_id_intitule_naturaliste_abrege ".
629
                    die($res->getMessage());
585
                                        " AND a.esn_id_version_projet_taxon=en_id_version_projet_nom ";
630
                }
586
				$res =& $DB->query($query);
631
 
587
 
632
                if ($res->numRows() > 0 ) {
588
 
633
                    $row =& $res->fetchrow(DB_FETCHMODE_ASSOC);
589
					if (DB::isError($res)) {
634
                    return array("nom_sel"=>$this->formaterNom($row),"en_id_nom"=>$id_nom['en_id_nom']);
590
						die($res->getMessage());
635
                }
591
					}
636
                else {
592
 
637
                    return array("nom_sel"=>$identifiant_espece);
593
					$row =& $res->fetchrow(DB_FETCHMODE_ASSOC);
638
                }
594
		 			return array("nom_sel"=>$this->formaterNom($row),"en_id_nom"=>$id_nom['en_id_nom']);
639
 
595
 
640
 
596
 
641
                }
597
 
642
            }
598
	
643
	
599
 
644
 
600
}
645
}
601
 
646
 
602
 
647
 
603
 
648
 
604
function traiterImage($images,$utilisateur) { // recherche id image de ce nom 
649
function traiterImage($images,$utilisateur) { // recherche id image de ce nom 
605
 
650
 
606
	//echo "traitement  image";
651
	//echo "traitement  image";
607
        $DB=$this->connectDB($this->config,'cel_db');
652
        $DB=$this->connectDB($this->config,'cel_db');
608
 
653
 
609
	$liste_images = explode("/",$images) ;
654
	$liste_images = explode("/",$images) ;
610
 
655
 
611
	$row =array();
656
	$row =array();
612
        foreach($liste_images as $image) {
657
        foreach($liste_images as $image) {
613
 
658
 
614
		$query="SELECT * FROM cel_images WHERE ci_ce_utilisateur='".$DB->escapeSimple($utilisateur)."' AND ci_nom_original='".$DB->escapeSimple($image)."'";
659
		$query="SELECT * FROM cel_images WHERE ci_ce_utilisateur='".$DB->escapeSimple($utilisateur)."' AND ci_nom_original='".$DB->escapeSimple($image)."'";
615
 
660
 
616
	        $res  =& $DB->query($query);
661
	        $res  =& $DB->query($query);
617
		$row [] =& $res->fetchrow(DB_FETCHMODE_ASSOC);
662
		$row [] =& $res->fetchrow(DB_FETCHMODE_ASSOC);
618
 
663
 
619
	        if (DB::isError($res)) {
664
	        if (DB::isError($res)) {
620
        	    die($res->getMessage());
665
        	    die($res->getMessage());
621
	        }
666
	        }
622
 
667
 
623
	}
668
	}
624
	return $row;
669
	return $row;
625
 
670
 
626
 
671
 
627
}
672
}
628
 
-
 
629
 
-
 
630
// utilitaire : FIXME mutualiser avec autres scripts
-
 
631
 
673
 
632
       function rechercherInformationsComplementaires($numNom) {
674
       function rechercherInformationsComplementaires($numNom) { // Num taxon, Num retenu ...
633
 
675
 
634
                $DB=$this->connectDB($this->config);
676
                $DB=$this->connectDB($this->config);
635
 
677
 
636
                $query = "SELECT DISTINCT en_nom_genre, en_epithete_espece, en_nom_supra_generique, en_epithete_infra_generique,".
678
                $query = "SELECT DISTINCT en_nom_genre, en_epithete_espece, en_nom_supra_generique, en_epithete_infra_generique,".
637
                                                        "   auteur_bex.enaia_intitule_abrege AS abreviation_auteur_basio_ex ".
679
                    "   auteur_bex.enaia_intitule_abrege AS abreviation_auteur_basio_ex ".
638
                                        " , auteur_b.enaia_intitule_abrege AS abreviation_auteur_basio ".
680
                    " , auteur_b.enaia_intitule_abrege AS abreviation_auteur_basio ".
639
                                        " , auteur_mex.enaia_intitule_abrege AS abreviation_auteur_modif_ex ".
681
                    " , auteur_mex.enaia_intitule_abrege AS abreviation_auteur_modif_ex ".
640
                                        " , auteur_m.enaia_intitule_abrege AS abreviation_auteur_modif ".
682
                    " , auteur_m.enaia_intitule_abrege AS abreviation_auteur_modif ".
641
                             " , en_epithete_espece, en_epithete_infra_specifique, enrg_abreviation_rang, b.esn_id_taxon, b.esn_id_nom" .
683
                    " , en_epithete_espece, en_epithete_infra_specifique, enrg_abreviation_rang, b.esn_id_taxon, b.esn_id_nom" .
642
                             " FROM eflore_nom, eflore_nom_rang," .
684
                    " FROM eflore_nom, eflore_nom_rang," .
643
                                                "         eflore_naturaliste_intitule_abreviation AS auteur_bex ".
685
                    "     eflore_naturaliste_intitule_abreviation AS auteur_bex ".
644
                                        "   , eflore_naturaliste_intitule_abreviation AS auteur_b ".
686
                    "   , eflore_naturaliste_intitule_abreviation AS auteur_b ".
645
                                        "   , eflore_naturaliste_intitule_abreviation AS auteur_mex ".
687
                    "   , eflore_naturaliste_intitule_abreviation AS auteur_mex ".
646
                                        "   , eflore_naturaliste_intitule_abreviation AS auteur_m ".
688
                    "   , eflore_naturaliste_intitule_abreviation AS auteur_m ".
647
                             " ,eflore_selection_nom a, eflore_selection_nom b".
689
                    " ,eflore_selection_nom a, eflore_selection_nom b".
648
                             " WHERE a.esn_id_nom= ".$numNom.
690
                    " WHERE a.esn_id_nom= ".$numNom.
649
                             " AND a.esn_id_version_projet_taxon = 25 ".
691
                    " AND a.esn_id_version_projet_taxon = 25 ".
650
                             " AND a.esn_id_taxon=b.esn_id_taxon ".
692
                    " AND a.esn_id_taxon=b.esn_id_taxon ".
651
                             " AND b.esn_ce_statut=3 ".
693
                    " AND b.esn_ce_statut=3 ".
652
                             " AND a.esn_id_version_projet_taxon=b.esn_id_version_projet_taxon" .
694
                    " AND a.esn_id_version_projet_taxon=b.esn_id_version_projet_taxon" .
653
                             " AND en_ce_rang = enrg_id_rang" .
695
                    " AND en_ce_rang = enrg_id_rang" .
654
                             " AND en_id_nom = b.esn_id_nom" .
696
                    " AND en_id_nom = b.esn_id_nom" .
655
                             " AND en_ce_auteur_basio_ex = auteur_bex.enaia_id_intitule_naturaliste_abrege ".
697
                    " AND en_ce_auteur_basio_ex = auteur_bex.enaia_id_intitule_naturaliste_abrege ".
656
                         " AND en_ce_auteur_basio = auteur_b.enaia_id_intitule_naturaliste_abrege  ".
698
                    " AND en_ce_auteur_basio = auteur_b.enaia_id_intitule_naturaliste_abrege  ".
657
                         " AND en_ce_auteur_modif_ex = auteur_mex.enaia_id_intitule_naturaliste_abrege ".
699
                    " AND en_ce_auteur_modif_ex = auteur_mex.enaia_id_intitule_naturaliste_abrege ".
658
                     " AND en_ce_auteur_modif = auteur_m.enaia_id_intitule_naturaliste_abrege ".
700
                    " AND en_ce_auteur_modif = auteur_m.enaia_id_intitule_naturaliste_abrege ".
659
                             " AND a.esn_id_version_projet_taxon=en_id_version_projet_nom ";
701
                    " AND a.esn_id_version_projet_taxon=en_id_version_projet_nom ";
660
 
702
 
661
 
703
 
662
           $res =& $DB->query($query);
704
                $res =& $DB->query($query);
663
 
705
 
664
 
706
 
665
 
707
 
666
        if (DB::isError($res)) {
708
                if (DB::isError($res)) {
667
                die($res->getMessage());
709
                    die($res->getMessage());
668
        }
710
                }
669
 
-
 
670
                // Nom retenu, Num Nomen nom retenu, Num Taxon,
711
 
671
                                                                                // Famille
712
                // Nom retenu, Num Nomenclatural nom retenu, Num Taxon,
672
 
713
 
673
                $value=array('Nom_Retenu'=>"",'Num_Nom_Retenu'=>"0",'Num_Taxon'=>"0",'Famille'=>"");
714
                $value=array('Nom_Retenu'=>"",'Num_Nom_Retenu'=>"0",'Num_Taxon'=>"0",'Famille'=>"");
674
 
715
 
675
                while ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) {
716
                while ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) {
676
                        $fam=$this->rechercherFamille($row['esn_id_taxon'],$DB);
717
                    $fam=$this->rechercherFamille($row['esn_id_taxon'],$DB);
-
 
718
 
-
 
719
                    // Recherche Famille 
677
                while (($fam['en_ce_rang']!='fin') && ($fam['en_ce_rang'] !=120)) {
720
                    while (($fam['en_ce_rang']!='fin') && ($fam['en_ce_rang'] !=120)) {
678
                        $fam=$this->rechercherFamille($fam['etr_id_taxon_2'],$DB);
721
                        $fam=$this->rechercherFamille($fam['etr_id_taxon_2'],$DB);
679
                }
722
                    }
680
                if ($fam['en_ce_rang']==120) {
723
                    if ($fam['en_ce_rang']==120) {
681
                        $famille=$fam['en_nom_supra_generique'];
724
                        $famille=$fam['en_nom_supra_generique'];
682
                }
725
                    }
683
                else {
726
                    else {
684
                        $famille="Famille inconnue";
727
                        $famille="Famille inconnue";
685
                }
728
                    }
686
                $value=array('Nom_Retenu'=>$this->formaterNom($row),'Num_Nom_Retenu'=>$row['esn_id_nom'],'Num_Taxon'=>$row['esn_id_taxon'],'Famille'=>$famille);
-
 
687
 
-
 
-
 
729
 
688
 
730
                    $value=array('Nom_Retenu'=>$this->formaterNom($row),'Num_Nom_Retenu'=>$row['esn_id_nom'],'Num_Taxon'=>$row['esn_id_taxon'],'Famille'=>$famille);
689
            }
731
                }
690
 
732
 
691
            return $value;
733
                return $value;
692
 
734
 
693
 
735
 
694
 
736
 
695
        }
737
        }
696
 
738
 
697
function formaterNom($rawnom) {
739
function formaterNom($rawnom) {
698
 
740
 
699
 
741
 
700
                // Constitution du nom:
742
                // Constitution du nom:
701
                $nom = '';
743
                $nom = '';
702
 
744
 
703
                if ($rawnom['en_nom_supra_generique'] != '') {
745
                if ($rawnom['en_nom_supra_generique'] != '') {
704
                    $nom .= $rawnom['en_nom_supra_generique'];
746
                    $nom .= $rawnom['en_nom_supra_generique'];
705
                } else if ($rawnom['en_epithete_infra_generique'] != '') {
747
                } else if ($rawnom['en_epithete_infra_generique'] != '') {
706
                    $nom .= $rawnom['en_epithete_infra_generique'];
748
                    $nom .= $rawnom['en_epithete_infra_generique'];
707
                } else {
749
                } else {
708
                        if ($rawnom['en_nom_genre'] != '') {
750
                        if ($rawnom['en_nom_genre'] != '') {
709
                            $nom .=  $rawnom['en_nom_genre'];
751
                            $nom .=  $rawnom['en_nom_genre'];
710
                        }
752
                        }
711
                        if ($rawnom['en_epithete_espece']!= '') {
753
                        if ($rawnom['en_epithete_espece']!= '') {
712
                            $nom .= ' '.$rawnom['en_epithete_espece'];
754
                            $nom .= ' '.$rawnom['en_epithete_espece'];
713
                        }
755
                        }
714
                        if ($rawnom['en_epithete_infra_specifique'] != '') {
756
                        if ($rawnom['en_epithete_infra_specifique'] != '') {
715
                                if (!empty($rawnom['enrg_abreviation_rang'])) {
757
                                if (!empty($rawnom['enrg_abreviation_rang'])) {
716
                                        $nom .= ' '.$rawnom['enrg_abreviation_rang'].'';
758
                                        $nom .= ' '.$rawnom['enrg_abreviation_rang'].'';
717
                                }
759
                                }
718
                                $nom .= ' '.$rawnom['en_epithete_infra_specifique'];
760
                                $nom .= ' '.$rawnom['en_epithete_infra_specifique'];
719
                        }
761
                        }
720
 
762
 
721
                }
763
                }
722
 
764
 
723
                return $nom .$this->retournerAuteur($rawnom) ;
765
                return $nom .$this->retournerAuteur($rawnom) ;
724
 
766
 
725
 }
767
 }
726
 
768
 
727
 
769
 
728
function rechercherFamille($taxon,&$DB) {
770
function rechercherFamille($taxon,&$DB) {
729
 
771
 
730
        $row=array();
772
    $row=array();
731
 
773
 
732
        $query="SELECT DISTINCT en_ce_rang, etr_id_taxon_2, en_id_nom, en_nom_supra_generique ".
774
    $query="SELECT DISTINCT en_ce_rang, etr_id_taxon_2, en_id_nom, en_nom_supra_generique ".
733
        " FROM eflore_taxon_relation, eflore_selection_nom, eflore_nom ".
775
        " FROM eflore_taxon_relation, eflore_selection_nom, eflore_nom ".
734
        " WHERE etr_id_taxon_1 = ".$taxon.
776
        " WHERE etr_id_taxon_1 = ".$taxon.
735
        " AND etr_id_version_projet_taxon_1 = 25 ".
777
        " AND etr_id_version_projet_taxon_1 = 25 ".
736
        " AND etr_id_categorie_taxon = 3 ".
778
        " AND etr_id_categorie_taxon = 3 ".
737
        " AND etr_id_valeur_taxon = 3 ".
779
        " AND etr_id_valeur_taxon = 3 ".
738
        " AND esn_id_taxon =  etr_id_taxon_2 ".
780
        " AND esn_id_taxon =  etr_id_taxon_2 ".
739
        " AND esn_ce_statut = 3 ".
781
        " AND esn_ce_statut = 3 ".
740
        " AND esn_id_version_projet_taxon = etr_id_version_projet_taxon_1 ".
782
        " AND esn_id_version_projet_taxon = etr_id_version_projet_taxon_1 ".
741
        " AND en_id_nom = esn_id_nom ".
783
        " AND en_id_nom = esn_id_nom ".
742
        " AND esn_id_version_projet_taxon=en_id_version_projet_nom  ";
784
        " AND esn_id_version_projet_taxon=en_id_version_projet_nom  ";
743
        $res =& $DB->query($query);
785
    $res =& $DB->query($query);
744
 
786
 
745
        if (DB::isError($res)) {
787
    if (DB::isError($res)) {
746
         die($res->getMessage());
788
        die($res->getMessage());
747
        }
789
    }
748
 
790
 
749
        if ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) {
791
    if ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) {
750
                return $row;
792
        return $row;
751
    }
793
    }
752
    else {
794
    else {
753
        $row['en_ce_rang']='fin';
795
        $row['en_ce_rang']='fin';
754
        return $row;
796
        return $row;
755
    }
797
    }
756
 
798
 
757
}
799
}
758
 
800
 
759
 
801
 
760
function retournerAuteur($rawnom) {
802
function retournerAuteur($rawnom) {
761
                $auteurs = '';
-
 
762
                $auteur_basio = '';
-
 
763
                $auteur_modif = '';
-
 
764
                if (!empty($rawnom['abreviation_auteur_basio_ex']) && $rawnom['abreviation_auteur_basio_ex']!='-' )  {
-
 
765
                    $auteur_basio .= $rawnom['abreviation_auteur_basio_ex'];
-
 
766
                    if (!empty($rawnom['abreviation_auteur_basio']) && $rawnom['abreviation_auteur_basio']!='-') {
-
 
767
                        $auteur_basio .= ' ex '.$rawnom['abreviation_auteur_basio'];
-
 
768
                    }
-
 
769
                } else if (!empty($rawnom['abreviation_auteur_basio']) && $rawnom['abreviation_auteur_basio']!='-') {
-
 
770
                    $auteur_basio .= $rawnom['abreviation_auteur_basio'];
-
 
771
                }
-
 
-
 
803
 
-
 
804
    $auteurs = '';
-
 
805
    $auteur_basio = '';
772
 
806
    $auteur_modif = '';
773
                if (!empty($rawnom['abreviation_auteur_modif_ex']) && $rawnom['abreviation_auteur_modif_ex']!='-') {
807
    if (!empty($rawnom['abreviation_auteur_basio_ex']) && $rawnom['abreviation_auteur_basio_ex']!='-' )  {
774
                    $auteur_modif .= $rawnom['abreviation_auteur_modif_ex'];
808
        $auteur_basio .= $rawnom['abreviation_auteur_basio_ex'];
775
                    if (!empty($rawnom['abreviation_auteur_modif']) && $rawnom['abreviation_auteur_modif']!='-') {
809
        if (!empty($rawnom['abreviation_auteur_basio']) && $rawnom['abreviation_auteur_basio']!='-') {
776
                        $auteur_modif .= ' ex '.$rawnom['abreviation_auteur_modif'];
810
            $auteur_basio .= ' ex '.$rawnom['abreviation_auteur_basio'];
777
                    }
811
        }
778
                } else if (!empty($rawnom['abreviation_auteur_modif']) && $rawnom['abreviation_auteur_modif']!='-')  {
812
    } else if (!empty($rawnom['abreviation_auteur_basio']) && $rawnom['abreviation_auteur_basio']!='-') {
779
                    $auteur_modif .= $rawnom['abreviation_auteur_modif'];
813
        $auteur_basio .= $rawnom['abreviation_auteur_basio'];
-
 
814
    }
-
 
815
 
-
 
816
    if (!empty($rawnom['abreviation_auteur_modif_ex']) && $rawnom['abreviation_auteur_modif_ex']!='-') {
-
 
817
        $auteur_modif .= $rawnom['abreviation_auteur_modif_ex'];
-
 
818
        if (!empty($rawnom['abreviation_auteur_modif']) && $rawnom['abreviation_auteur_modif']!='-') {
-
 
819
            $auteur_modif .= ' ex '.$rawnom['abreviation_auteur_modif'];
-
 
820
        }
-
 
821
    } else if (!empty($rawnom['abreviation_auteur_modif']) && $rawnom['abreviation_auteur_modif']!='-')  {
-
 
822
        $auteur_modif .= $rawnom['abreviation_auteur_modif'];
780
                }
823
    }
781
 
824
 
782
                if (!empty($auteur_modif)) {
825
    if (!empty($auteur_modif)) {
783
                    $auteurs = ' ('.$auteur_basio.') '.$auteur_modif;
826
        $auteurs = ' ('.$auteur_basio.') '.$auteur_modif;
784
                } elseif (!empty($auteur_basio)) {
827
    } elseif (!empty($auteur_basio)) {
785
                    $auteurs = ' '.$auteur_basio;
828
        $auteurs = ' '.$auteur_basio;
786
                }
829
    }
787
 
830
 
788
                return $auteurs ;
831
    return $auteurs ;
789
}
832
}
790
 
833
 
791
 
834
 
792
 
835
 
793
 
836
 
794
}
837
}
795
 
838
 
-
 
839
 
-
 
840
function remove_accent($str)
-
 
841
{
-
 
842
  $a = array('À', 'Á', 'Â', 'Ã', 'Ä', 'Å', 'Æ', 'Ç', 'È', 'É', 'Ê', 'Ë', 'Ì', 'Í', 'Î',
-
 
843
             'Ï', 'Ð', 'Ñ', 'Ò', 'Ó', 'Ô', 'Õ', 'Ö', 'Ø', 'Ù', 'Ú', 'Û', 'Ü', 'Ý', 'ß',
-
 
844
             'à', 'á', 'â', 'ã', 'ä', 'å', 'æ', 'ç', 'è', 'é', 'ê', 'ë', 'ì', 'í', 'î',
-
 
845
             'ï', 'ñ', 'ò', 'ó', 'ô', 'õ', 'ö', 'ø', 'ù', 'ú', 'û', 'ü', 'ý', 'ÿ', 'Ā',
-
 
846
             'ā', 'Ă', 'ă', 'Ą', 'ą', 'Ć', 'ć', 'Ĉ', 'ĉ', 'Ċ', 'ċ', 'Č', 'č', 'Ď', 'ď',
-
 
847
             'Đ', 'đ', 'Ē', 'ē', 'Ĕ', 'ĕ', 'Ė', 'ė', 'Ę', 'ę', 'Ě', 'ě', 'Ĝ', 'ĝ', 'Ğ',
-
 
848
             'ğ', 'Ġ', 'ġ', 'Ģ', 'ģ', 'Ĥ', 'ĥ', 'Ħ', 'ħ', 'Ĩ', 'ĩ', 'Ī', 'ī', 'Ĭ', 'ĭ',
-
 
849
             'Į', 'į', 'İ', 'ı', 'IJ', 'ij', 'Ĵ', 'ĵ', 'Ķ', 'ķ', 'Ĺ', 'ĺ', 'Ļ', 'ļ', 'Ľ',
-
 
850
             'ľ', 'Ŀ', 'ŀ', 'Ł', 'ł', 'Ń', 'ń', 'Ņ', 'ņ', 'Ň', 'ň', 'ʼn', 'Ō', 'ō', 'Ŏ',
-
 
851
             'ŏ', 'Ő', 'ő', 'Œ', 'œ', 'Ŕ', 'ŕ', 'Ŗ', 'ŗ', 'Ř', 'ř', 'Ś', 'ś', 'Ŝ', 'ŝ',
-
 
852
             'Ş', 'ş', 'Š', 'š', 'Ţ', 'ţ', 'Ť', 'ť', 'Ŧ', 'ŧ', 'Ũ', 'ũ', 'Ū', 'ū', 'Ŭ',
-
 
853
             'ŭ', 'Ů', 'ů', 'Ű', 'ű', 'Ų', 'ų', 'Ŵ', 'ŵ', 'Ŷ', 'ŷ', 'Ÿ', 'Ź', 'ź', 'Ż',
-
 
854
             'ż', 'Ž', 'ž', 'ſ', 'ƒ', 'Ơ', 'ơ', 'Ư', 'ư', 'Ǎ', 'ǎ', 'Ǐ', 'ǐ', 'Ǒ', 'ǒ',
-
 
855
             'Ǔ', 'ǔ', 'Ǖ', 'ǖ', 'Ǘ', 'ǘ', 'Ǚ', 'ǚ', 'Ǜ', 'ǜ', 'Ǻ', 'ǻ', 'Ǽ', 'ǽ', 'Ǿ', 'ǿ');
-
 
856
             
-
 
857
  $b = array('A', 'A', 'A', 'A', 'A', 'A', 'AE', 'C', 'E', 'E', 'E', 'E', 'I', 'I', 'I',
-
 
858
             'I', 'D', 'N', 'O', 'O', 'O', 'O', 'O', 'O', 'U', 'U', 'U', 'U', 'Y', 's',
-
 
859
             'a', 'a', 'a', 'a', 'a', 'a', 'ae', 'c', 'e', 'e', 'e', 'e', 'i', 'i', 'i',
-
 
860
             'i', 'n', 'o', 'o', 'o', 'o', 'o', 'o', 'u', 'u', 'u', 'u', 'y', 'y', 'A', 'a',
-
 
861
             'A', 'a', 'A', 'a', 'C', 'c', 'C', 'c', 'C', 'c', 'C', 'c', 'D', 'd', 'D', 'd',
-
 
862
             'E', 'e', 'E', 'e', 'E', 'e', 'E', 'e', 'E', 'e', 'G', 'g', 'G', 'g', 'G', 'g',
-
 
863
             'G', 'g', 'H', 'h', 'H', 'h', 'I', 'i', 'I', 'i', 'I', 'i', 'I', 'i', 'I', 'i',
-
 
864
             'IJ', 'ij', 'J', 'j', 'K', 'k', 'L', 'l', 'L', 'l', 'L', 'l', 'L', 'l', 'l', 'l',
-
 
865
             'N', 'n', 'N', 'n', 'N', 'n', 'n', 'O', 'o', 'O', 'o', 'O', 'o', 'OE', 'oe', 'R',
-
 
866
             'r', 'R', 'r', 'R', 'r', 'S', 's', 'S', 's', 'S', 's', 'S', 's', 'T', 't', 'T', 't',
-
 
867
             'T', 't', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'W', 'w', 'Y',
-
 
868
             'y', 'Y', 'Z', 'z', 'Z', 'z', 'Z', 'z', 's', 'f', 'O', 'o', 'U', 'u', 'A', 'a', 'I',
-
 
869
             'i', 'O', 'o', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'A', 'a', 'AE', 'ae', 'O', 'o');
-
 
870
  return str_replace($a, $b, $str);
-
 
871
}
-
 
872
 
-
 
873
 
-
 
874
function cp1252_to_utf8($str) {
-
 
875
$cp1252_map = array ("\xc2\x80" => "\xe2\x82\xac",
-
 
876
"\xc2\x82" => "\xe2\x80\x9a",
-
 
877
"\xc2\x83" => "\xc6\x92",    
-
 
878
"\xc2\x84" => "\xe2\x80\x9e",
-
 
879
"\xc2\x85" => "\xe2\x80\xa6",
-
 
880
"\xc2\x86" => "\xe2\x80\xa0",
-
 
881
"\xc2\x87" => "\xe2\x80\xa1",
-
 
882
"\xc2\x88" => "\xcb\x86",
-
 
883
"\xc2\x89" => "\xe2\x80\xb0",
-
 
884
"\xc2\x8a" => "\xc5\xa0",
-
 
885
"\xc2\x8b" => "\xe2\x80\xb9",
-
 
886
"\xc2\x8c" => "\xc5\x92",
-
 
887
"\xc2\x8e" => "\xc5\xbd",
-
 
888
"\xc2\x91" => "\xe2\x80\x98",
-
 
889
"\xc2\x92" => "\xe2\x80\x99",
-
 
890
"\xc2\x93" => "\xe2\x80\x9c",
-
 
891
"\xc2\x94" => "\xe2\x80\x9d",
-
 
892
"\xc2\x95" => "\xe2\x80\xa2",
-
 
893
"\xc2\x96" => "\xe2\x80\x93",
-
 
894
"\xc2\x97" => "\xe2\x80\x94",
-
 
895
 
-
 
896
"\xc2\x98" => "\xcb\x9c",
-
 
897
"\xc2\x99" => "\xe2\x84\xa2",
-
 
898
"\xc2\x9a" => "\xc5\xa1",
-
 
899
"\xc2\x9b" => "\xe2\x80\xba",
-
 
900
"\xc2\x9c" => "\xc5\x93",
-
 
901
"\xc2\x9e" => "\xc5\xbe",
-
 
902
"\xc2\x9f" => "\xc5\xb8"
-
 
903
);
-
 
904
return strtr ( utf8_encode ( $str ), $cp1252_map );
796
 
905
}
797
 
906
 
798
/* +--Fin du code ---------------------------------------------------------------------------------------+
907
/* +--Fin du code ---------------------------------------------------------------------------------------+
799
* $Log$
908
* $Log$
800
*
909
*
801
*
910
*
802
*/
911
*/
803
 
912
 
804
 
913
 
805
?>
914
?>