Subversion Repositories eFlore/Applications.cel

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
416 aurelien 1
<?php
2
 
3
 
4
// CRUD ligne d'inventaire :
5
// In get : utf8
6
// In post : utf8
7
// out : utf8
8
 
9
Class Inventory extends DBAccessor {
10
 
11
 
12
	var $config;
13
 
14
	function Inventory($config) {
15
 
16
		$this->config=$config;
17
	}
18
 
19
 
20
	function getElement($uid){
21
 
22
		   // Controle detournement utilisateur
23
		    session_start();
24
		 	$this->controleUtilisateur($uid[0]);
25
 
26
			$value=array();
27
			$DB=$this->connectDB($this->config,'database_cel');
28
 
29
			if (isset($uid[1])) {
30
	           	$query="SELECT identifiant, ordre, nom_sel, num_nom_sel, nom_ret, num_nom_ret, num_taxon, famille, location, id_location, date_observation, lieudit, station, milieu, commentaire, coord_x, coord_y FROM cel_inventory WHERE identifiant='".$DB->escapeSimple($uid[0])."' AND ordre =".$uid[1]." ORDER BY ordre";
31
			}
32
			else {
33
				if (isset($uid[0])) {
34
		           	$query="SELECT identifiant, ordre, nom_sel, num_nom_sel, nom_ret, num_nom_ret, num_taxon, famille, location, id_location, date_observation, lieudit, station, milieu, commentaire, coord_x, coord_y FROM cel_inventory WHERE identifiant='".$DB->escapeSimple($uid[0])."' ORDER BY ordre";
35
				}
36
			}
37
 
38
		    $res =& $DB->query($query);
39
 
40
 
41
	        if (DB::isError($res)) {
42
	        	$this->logger("CEL_bugs","Erreur de listage des observations :".$res->getMessage()." ".$query);
43
        	}
44
	        while ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) {
45
	        	if ($row['date_observation']!="0000-00-00 00:00:00") {
46
	                list($year,$month,$day)= split ('-',$row['date_observation']);
47
    	            list($day)= split (' ',$day);
48
	                $row['date_observation']=$day."/".$month."/".$year;
49
	        	}
50
 
51
		     	$value=array($row['nom_sel'],$row['num_nom_sel'],$row['nom_ret'],$row['num_nom_ret'],$row['num_taxon'],$row['famille'], $row['location'], $row['id_location'], $row['ordre'], $row['date_observation'],$row['lieudit'], $row['station'], $row['milieu'], $row['commentaire'], $row['coord_x'],$row['coord_y']);
52
    	    }
53
 
54
			$json = new Services_JSON();
55
			$output = $json->encode($value);
56
			print($output);
57
 
58
			return true;
59
 
60
 
61
	}
62
 
63
	function getRessource(){
64
 
65
 
66
	}
67
 
68
 
69
	function updateElement($uid,$pairs) {
70
 
71
		 // Controle detournement utilisateur
72
			    session_start();
73
			 	$this->controleUtilisateur($uid[0]);
74
 
75
				if ($pairs['num_nom_sel']!='') {
76
 
77
 
78
 
79
				// Utilisation d'un nom faisant parti du referentiel : recherche du nom valide correspondant
80
					$complement=$this->rechercherInformationsComplementaires($pairs['num_nom_sel']);
81
 
82
 
83
			        $pairs['nom_ret']=$complement['Nom_Retenu'];
84
			        $pairs['num_nom_ret']=$complement['Num_Nom_Retenu'];
85
			        $pairs['num_taxon']=$complement['Num_Taxon'];
86
			        $pairs['famille']=$complement['Famille'];
87
 
88
				}
89
 
90
 
91
 
92
 
93
				$DB=$this->connectDB($this->config,'database_cel');
94
 
95
                // Nullifiage ...
96
 
97
				foreach($pairs as $k=>$v) {
98
					if (trim($v)=="") {
99
						$pairs[$k]="null";
100
					}
101
 
102
				}
103
 
104
				// Pour apparaitre le premier dans les tris ...
105
                if ($pairs['location']=="null") $pairs['location']="000null";
106
 
107
 
108
				// Pour apparaitre le premier dans les tris ...
109
                if ($pairs['lieudit']=="null") $pairs['lieudit']="000null";
110
 
111
 
112
				// Pour apparaitre le premier dans les tris ...
113
                if ($pairs['id_location']=="null") $pairs['id_location']="000null";
114
 
115
                // Pour apparaitre le premier dans les tris ...
116
                if ($pairs['station']=="null") $pairs['station']="000null";
117
 
118
 
119
              	// Pour apparaitre le premier dans les tris ...
120
                if ($pairs['milieu']=="null") $pairs['milieu']="000null";
121
 
122
                // Pour supprimer les séparateurs de mots clés en trop
123
                if (isset($pairs['mot_cles'])) {
124
                	$pairs['mot_cles'] = str_replace(';;',';',$pairs['mot_cles']);
125
                }
126
 
127
                // TODO : decouper avec les /
128
 
129
                if ($pairs['date_observation']!="null") {
130
                	list($jour,$mois,$annee)=split("/",$pairs['date_observation']);
131
                	$pairs['date_observation']=$annee."-".$mois."-".$jour." 0:0:0";
132
                }
133
 
134
                if ($pairs['coord_x']=="null") {
135
					$pairs['coord_x'] = "000null";
136
                }
137
 
138
                if ($pairs['coord_y']=="null") {
139
					$pairs['coord_y'] = "000null";
140
                }
141
 
142
				$query="UPDATE cel_inventory SET nom_sel = '".$DB->escapeSimple($pairs['nom_sel'])."',".
143
				"num_nom_sel = '".$DB->escapeSimple($pairs['num_nom_sel'])."',".
144
				"nom_ret = '".$DB->escapeSimple($pairs['nom_ret'])."',".
145
				"num_nom_ret = '".$DB->escapeSimple($pairs['num_nom_ret'])."',".
146
				"num_taxon = '".$DB->escapeSimple($pairs['num_taxon'])."',".
147
				"famille = '".$DB->escapeSimple($pairs['famille'])."',".
148
				"location = '".$DB->escapeSimple($pairs['location'])."',".
149
				"id_location = '".$DB->escapeSimple($pairs['id_location'])."',".
150
				"date_observation = '".$DB->escapeSimple($pairs['date_observation'])."',".
151
				"lieudit = '".$DB->escapeSimple($pairs['lieudit'])."',".
152
				"station = '".$DB->escapeSimple($pairs['station'])."',".
153
				"milieu = '".$DB->escapeSimple($pairs['milieu'])."',".
154
				"commentaire = '".$DB->escapeSimple($pairs['commentaire'])."',".
155
				"date_modification = now() ,".
156
				"mots_cles = '".$DB->escapeSimple($pairs['mots_cles'])."',".
157
				"coord_x='".$DB->escapeSimple($pairs['coord_x'])."',".
158
				"coord_y='".$DB->escapeSimple($pairs['coord_y'])."' ".
159
				"WHERE ordre = '".$DB->escapeSimple($uid[1])."' AND identifiant='".$DB->escapeSimple($uid[0])."'";
160
 
161
		    	$res =& $DB->query($query);
162
                if (PEAR::isError($res)) {
163
                	$this->logger("CEL_bugs","Erreur de modification d'une observation :".$res->getMessage()." ".$query);
164
                }
165
                return	true;
166
 
167
	}
168
 
169
 
170
	function createElement($pairs){
171
 
172
 
173
			 // Controle detournement utilisateur
174
			    session_start();
175
			 	$this->controleUtilisateur($pairs['identifiant']);
176
 
177
				if ($pairs['num_nom_sel']!='') {
178
 
179
 
180
 
181
				// Utilisation d'un nom faisant parti du referentiel : recherche du nom valide correspondant
182
 
183
 
184
					$complement=$this->rechercherInformationsComplementaires($pairs['num_nom_sel']);
185
 
186
 
187
			        $pairs['nom_ret']=$complement['Nom_Retenu'];
188
			        $pairs['num_nom_ret']=$complement['Num_Nom_Retenu'];
189
			        $pairs['num_taxon']=$complement['Num_Taxon'];
190
			        $pairs['famille']=$complement['Famille'];
191
 
192
				}
193
 
194
 
195
 
196
				// Dernier numero d'ordre utilise :
197
 
198
                $DB=$this->connectDB($this->config,'database_cel');
199
	           	$query="SELECT max(ordre) AS ordre FROM cel_inventory WHERE identifiant='".$DB->escapeSimple($pairs['identifiant'])."' ";
200
 
201
			    $res =& $DB->query($query);
202
                if (DB::isError($res)) {
203
	    	        die($res->getMessage());
204
    	    	}
205
    	    	$row['ordre']=0;
206
	    	    while ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) {
207
            	    $pairs['ordre']=$row['ordre']+1;
208
    	    	}
209
 
210
                // Nullifiage ...
211
 
212
				foreach($pairs as $k=>$v) {
213
					if (trim($v)=="") {
214
						$pairs[$k]="null";
215
					}
216
 
217
				}
218
 
219
				// Pour apparaitre le premier dans les tris ...
220
                if ($pairs['location']=="null") $pairs['location']="000null";
221
 
222
 
223
				// Pour apparaitre le premier dans les tris ...
224
                if ($pairs['lieudit']=="null") $pairs['lieudit']="000null";
225
 
226
 
227
				// Pour apparaitre le premier dans les tris ...
228
                if ($pairs['id_location']=="null") $pairs['id_location']="000null";
229
 
230
 
231
				// Pour apparaitre le premier dans les tris ...
232
                if ($pairs['station']=="null") $pairs['station']="000null";
233
 
234
 
235
				// Pour apparaitre le premier dans les tris ...
236
                if ($pairs['milieu']=="null") $pairs['milieu']="000null";
237
 
238
 
239
                // TODO : decouper avec les /
240
 
241
                if ($pairs['date_observation']!="null") {
242
 
243
                	list($jour,$mois,$annee)=split("/",$pairs['date_observation']);
244
                	$pairs['date_observation']=$annee."-".$mois."-".$jour." 0:0:0";
245
 
246
                }
247
 
248
                if ($pairs['coord_x']=="null") {
249
					$pairs['coord_x'] = "000null";
250
                }
251
 
252
                if ($pairs['coord_y']=="null") {
253
					$pairs['coord_y'] = "000null";
254
                }
255
 
256
                $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) " .
257
                " VALUES('".$DB->escapeSimple($pairs['identifiant'])."','".
258
                $DB->escapeSimple($pairs['ordre'])."','".
259
                $DB->escapeSimple($pairs['nom_sel'])."','".
260
                $DB->escapeSimple($pairs['num_nom_sel'])."','".
261
                $DB->escapeSimple($pairs['nom_ret'])."','".
262
                $DB->escapeSimple($pairs['num_nom_ret'])."','".
263
                $DB->escapeSimple($pairs['num_taxon'])."','".
264
                $DB->escapeSimple($pairs['famille'])."','".
265
                $DB->escapeSimple($pairs['location'])."','".
266
                $DB->escapeSimple($pairs['id_location'])."','".
267
                $DB->escapeSimple($pairs['date_observation'])."','".
268
                $DB->escapeSimple($pairs['lieudit'])."','".
269
                $DB->escapeSimple($pairs['station'])."','".
270
                $DB->escapeSimple($pairs['milieu'])."','".
271
                $DB->escapeSimple($pairs['commentaire'])."',".
272
                "now() , now(),'".
273
				$DB->escapeSimple($pairs['coord_x'])."','".
274
				$DB->escapeSimple($pairs['coord_y'])."')";
275
		    	$res =& $DB->query($query);
276
 
277
                if (PEAR::isError($res)) {
278
                	$this->logger("CEL_bugs","Erreur de creation d'une observation :".$res->getMessage()." ".$query);
279
                	return false;
280
                	//die($res->getMessage());
281
                }
282
 
283
                return	true;
284
 
285
	}
286
 
287
 
288
	function deleteElement($uid){
289
 
290
	 // Controle detournement utilisateur
291
	    session_start();
292
     $this->controleUtilisateur($uid[0]);
293
 
294
		$value=array();
295
		$DB=$this->connectDB($this->config,'database_cel');
296
 
297
		if (isset($uid[1])) {
298
	           	$query="DELETE FROM cel_inventory WHERE identifiant='".$DB->escapeSimple($uid[0])."' AND ordre in (".$DB->escapeSimple($uid[1]) .")";
299
		}
300
 
301
    	$res =& $DB->query($query);
302
 
303
        if (PEAR::isError($res)) {
304
        	$this->logger("CEL_bugs","Erreur de suppression d'une observation :".$res->getMessage()." ".$query);
305
        	return false;
306
        }
307
        else {
308
        	echo "OK" ;
309
        	exit() ;
310
        }
311
 
312
        return true;
313
 
314
 
315
	}
316
 
317
 
318
	function rechercherInformationsComplementaires($numNom) {
319
 
320
		$DB=$this->connectDB($this->config);
321
 
322
		$query = "SELECT DISTINCT en_nom_genre, en_epithete_espece, en_nom_supra_generique, en_epithete_infra_generique,".
323
			     	       			"   auteur_bex.enaia_intitule_abrege AS abreviation_auteur_basio_ex ".
324
        	       			" , auteur_b.enaia_intitule_abrege AS abreviation_auteur_basio ".
325
        	       			" , auteur_mex.enaia_intitule_abrege AS abreviation_auteur_modif_ex ".
326
        	       			" , auteur_m.enaia_intitule_abrege AS abreviation_auteur_modif ".
327
			     " , en_epithete_espece, en_epithete_infra_specifique, enrg_abreviation_rang, b.esn_id_taxon, b.esn_id_nom" .
328
			     " FROM eflore_nom, eflore_nom_rang," .
329
			       			"  	  eflore_naturaliste_intitule_abreviation AS auteur_bex ".
330
        	       			"   , eflore_naturaliste_intitule_abreviation AS auteur_b ".
331
        	       			"   , eflore_naturaliste_intitule_abreviation AS auteur_mex ".
332
        	       			"   , eflore_naturaliste_intitule_abreviation AS auteur_m ".
333
			     " ,eflore_selection_nom a, eflore_selection_nom b".
334
			     " WHERE a.esn_id_nom= ".$numNom.
335
			     " AND a.esn_id_version_projet_taxon = 25 ".
336
			     " AND a.esn_id_taxon=b.esn_id_taxon ".
337
			     " AND b.esn_ce_statut=3 ".
338
			     " AND a.esn_id_version_projet_taxon=b.esn_id_version_projet_taxon" .
339
			     " AND en_ce_rang = enrg_id_rang" .
340
			     " AND en_id_nom = b.esn_id_nom" .
341
			     " AND en_ce_auteur_basio_ex = auteur_bex.enaia_id_intitule_naturaliste_abrege ".
342
       			 " AND en_ce_auteur_basio = auteur_b.enaia_id_intitule_naturaliste_abrege  ".
343
       			 " AND en_ce_auteur_modif_ex = auteur_mex.enaia_id_intitule_naturaliste_abrege ".
344
        	     " AND en_ce_auteur_modif = auteur_m.enaia_id_intitule_naturaliste_abrege ".
345
			     " AND a.esn_id_version_projet_taxon=en_id_version_projet_nom ";
346
 
347
 
348
	   $res =& $DB->query($query);
349
 
350
 
351
        if (DB::isError($res)) {
352
	        die($res->getMessage());
353
    	}
354
 
355
    		// Nom retenu, Num Nomen nom retenu, Num Taxon,
356
										// Famille
357
 
358
		$value=array('Nom_Retenu'=>"",'Num_Nom_Retenu'=>"0",'Num_Taxon'=>"0",'Famille'=>"");
359
 
360
	        while ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) {
361
	        	$fam=$this->rechercherFamille($row['esn_id_taxon'],$DB);
362
        	while (($fam['en_ce_rang']!='fin') && ($fam['en_ce_rang'] !=120)) {
363
	        	$fam=$this->rechercherFamille($fam['etr_id_taxon_2'],$DB);
364
        	}
365
        	if ($fam['en_ce_rang']==120) {
366
        		$famille=$fam['en_nom_supra_generique'];
367
        	}
368
        	else {
369
        		$famille="Famille inconnue";
370
        	}
371
        	$value=array('Nom_Retenu'=>$this->formaterNom($row),'Num_Nom_Retenu'=>$row['esn_id_nom'],'Num_Taxon'=>$row['esn_id_taxon'],'Famille'=>$famille);
372
 
373
 
374
	    }
375
 
376
	    return $value;
377
 
378
 
379
 
380
	}
381
 
382
 
383
function formaterNom($rawnom) {
384
 
385
 
386
                // Constitution du nom:
387
                $nom = '';
388
 
389
                if ($rawnom['en_nom_supra_generique'] != '') {
390
                    $nom .= $rawnom['en_nom_supra_generique'];
391
                } else if ($rawnom['en_epithete_infra_generique'] != '') {
392
                    $nom .= $rawnom['en_epithete_infra_generique'];
393
                } else {
394
                        if ($rawnom['en_nom_genre'] != '') {
395
                            $nom .=  $rawnom['en_nom_genre'];
396
                        }
397
                        if ($rawnom['en_epithete_espece']!= '') {
398
                            $nom .= ' '.$rawnom['en_epithete_espece'];
399
                        }
400
                        if ($rawnom['en_epithete_infra_specifique'] != '') {
401
                                if (!empty($rawnom['enrg_abreviation_rang'])) {
402
                                        $nom .= ' '.$rawnom['enrg_abreviation_rang'].'';
403
                                }
404
                                $nom .= ' '.$rawnom['en_epithete_infra_specifique'];
405
                        }
406
 
407
                }
408
 
409
                return $nom .$this->retournerAuteur($rawnom) ;
410
 
411
 }
412
 
413
 
414
function rechercherFamille($taxon,&$DB) {
415
 
416
	$row=array();
417
 
418
	$query="SELECT DISTINCT en_ce_rang, etr_id_taxon_2, en_id_nom, en_nom_supra_generique ".
419
	" FROM eflore_taxon_relation, eflore_selection_nom, eflore_nom ".
420
	" WHERE etr_id_taxon_1 = ".$taxon.
421
	" AND etr_id_version_projet_taxon_1 = 25 ".
422
	" AND etr_id_categorie_taxon = 3 ".
423
	" AND etr_id_valeur_taxon = 3 ".
424
	" AND esn_id_taxon =  etr_id_taxon_2 ".
425
	" AND esn_ce_statut = 3 ".
426
	" AND esn_id_version_projet_taxon = etr_id_version_projet_taxon_1 ".
427
	" AND en_id_nom = esn_id_nom ".
428
	" AND esn_id_version_projet_taxon=en_id_version_projet_nom  ";
429
	$res =& $DB->query($query);
430
 
431
	if (DB::isError($res)) {
432
         die($res->getMessage());
433
   	}
434
 
435
	if ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) {
436
		return $row;
437
    }
438
    else {
439
    	$row['en_ce_rang']='fin';
440
    	return $row;
441
    }
442
 
443
}
444
 
445
 
446
 
447
function retournerAuteur($rawnom) {
448
		$auteurs = '';
449
		$auteur_basio = '';
450
		$auteur_modif = '';
451
		if (!empty($rawnom['abreviation_auteur_basio_ex']) && $rawnom['abreviation_auteur_basio_ex']!='-' )  {
452
		    $auteur_basio .= $rawnom['abreviation_auteur_basio_ex'];
453
		    if (!empty($rawnom['abreviation_auteur_basio']) && $rawnom['abreviation_auteur_basio']!='-') {
454
		        $auteur_basio .= ' ex '.$rawnom['abreviation_auteur_basio'];
455
		    }
456
		} else if (!empty($rawnom['abreviation_auteur_basio']) && $rawnom['abreviation_auteur_basio']!='-') {
457
		    $auteur_basio .= $rawnom['abreviation_auteur_basio'];
458
		}
459
 
460
		if (!empty($rawnom['abreviation_auteur_modif_ex']) && $rawnom['abreviation_auteur_modif_ex']!='-') {
461
		    $auteur_modif .= $rawnom['abreviation_auteur_modif_ex'];
462
		    if (!empty($rawnom['abreviation_auteur_modif']) && $rawnom['abreviation_auteur_modif']!='-') {
463
		        $auteur_modif .= ' ex '.$rawnom['abreviation_auteur_modif'];
464
		    }
465
		} else if (!empty($rawnom['abreviation_auteur_modif']) && $rawnom['abreviation_auteur_modif']!='-')  {
466
		    $auteur_modif .= $rawnom['abreviation_auteur_modif'];
467
		}
468
 
469
		if (!empty($auteur_modif)) {
470
		    $auteurs = ' ('.$auteur_basio.') '.$auteur_modif;
471
		} elseif (!empty($auteur_basio)) {
472
		    $auteurs = ' '.$auteur_basio;
473
		}
474
 
475
		return $auteurs ;
476
	}
477
 
478
 
479
 
480
}
481
 
482
/* +--Fin du code ---------------------------------------------------------------------------------------+
483
* $Log$
484
* Revision 1.11  2008-11-13 11:29:12  ddelon
485
* Reecriture gwt-ext
486
*
487
* Revision 1.10  2008-01-30 08:57:28  ddelon
488
* fin mise en place mygwt
489
*
490
* Revision 1.9  2007-05-22 12:54:09  ddelon
491
* Securisation acces utilisateur
492
*
493
*
494
*
495
*/
496
 
497
?>