Subversion Repositories eFlore/Applications.cel

Rev

Rev 798 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 798 Rev 1115
1
<?php
1
<?php
2
/**
2
/**
3
 
3
 
4
 Aurelien Peronnet aurelienperonnet@gmail.com 2008
4
 Aurelien Peronnet aurelienperonnet@gmail.com 2008
5
 
5
 
6
 Ce logiciel est r?gi par la licence CeCILL soumise au droit fran?ais et
6
 Ce logiciel est r?gi par la licence CeCILL soumise au droit fran?ais et
7
 respectant les principes de diffusion des logiciels libres. Vous pouvez
7
 respectant les principes de diffusion des logiciels libres. Vous pouvez
8
 utiliser, modifier et/ou redistribuer ce programme sous les conditions
8
 utiliser, modifier et/ou redistribuer ce programme sous les conditions
9
 de la licence CeCILL telle que diffus?e par le CEA, le CNRS et l'INRIA 
9
 de la licence CeCILL telle que diffus?e par le CEA, le CNRS et l'INRIA 
10
 sur le site "http://www.cecill.info".
10
 sur le site "http://www.cecill.info".
11
 En contrepartie de l'accessibilit? au code source et des droits de copie,
11
 En contrepartie de l'accessibilit? au code source et des droits de copie,
12
 de modification et de redistribution accord?s par cette licence, il n'est
12
 de modification et de redistribution accord?s par cette licence, il n'est
13
 offert aux utilisateurs qu'une garantie limit?e.  Pour les m?mes raisons,
13
 offert aux utilisateurs qu'une garantie limit?e.  Pour les m?mes raisons,
14
 seule une responsabilit? restreinte p?se sur l'auteur du programme,  le
14
 seule une responsabilit? restreinte p?se sur l'auteur du programme,  le
15
 titulaire des droits patrimoniaux et les conc?dants successifs.
15
 titulaire des droits patrimoniaux et les conc?dants successifs.
16
 
16
 
17
 A cet ?gard  l'attention de l'utilisateur est attir?e sur les risques
17
 A cet ?gard  l'attention de l'utilisateur est attir?e sur les risques
18
 associ?s au chargement,  ? l'utilisation,  ? la modification et/ou au
18
 associ?s au chargement,  ? l'utilisation,  ? la modification et/ou au
19
 d?veloppement et ? la reproduction du logiciel par l'utilisateur ?tant 
19
 d?veloppement et ? la reproduction du logiciel par l'utilisateur ?tant 
20
 donn? sa sp?cificit? de logiciel libre, qui peut le rendre complexe ? 
20
 donn? sa sp?cificit? de logiciel libre, qui peut le rendre complexe ? 
21
 manipuler et qui le r?serve donc ? des d?veloppeurs et des professionnels
21
 manipuler et qui le r?serve donc ? des d?veloppeurs et des professionnels
22
 avertis poss?dant  des  connaissances  informatiques approfondies.  Les
22
 avertis poss?dant  des  connaissances  informatiques approfondies.  Les
23
 utilisateurs sont donc invit?s ? charger  et  tester  l'ad?quation  du
23
 utilisateurs sont donc invit?s ? charger  et  tester  l'ad?quation  du
24
 logiciel ? leurs besoins dans des conditions permettant d'assurer la
24
 logiciel ? leurs besoins dans des conditions permettant d'assurer la
25
 s?curit? de leurs syst?mes et ou de leurs donn?es et, plus g?n?ralement, 
25
 s?curit? de leurs syst?mes et ou de leurs donn?es et, plus g?n?ralement, 
26
 ? l'utiliser et l'exploiter dans les m?mes conditions de s?curit?. 
26
 ? l'utiliser et l'exploiter dans les m?mes conditions de s?curit?. 
27
                                                                                                      
27
                                                                                                      
28
 Le fait que vous puissiez acc?der ? cet en-t?te signifie que vous avez 
28
 Le fait que vous puissiez acc?der ? cet en-t?te signifie que vous avez 
29
 pris connaissance de la licence CeCILL, et que vous en avez accept? les
29
 pris connaissance de la licence CeCILL, et que vous en avez accept? les
30
 termes.
30
 termes.
31
 
31
 
32
 */
32
 */
33
 
33
 
34
 
34
 
35
// in : utf8
35
// in : utf8
36
// out : utf8
36
// out : utf8
37
/*
37
/*
38
 * InventoryImageCount.php  
38
 * InventoryImageCount.php  
39
 * 
39
 * 
40
 * Cas d'utilisation :
40
 * Cas d'utilisation :
41
 * Service recherche du nombre a partir de divers crit�res
41
 * Service recherche du nombre a partir de divers crit�res
42
 * 
42
 * 
43
 * 2: Le service recherche le nombre d'images correspondant au crit�res demand�
43
 * 2: Le service recherche le nombre d'images correspondant au crit�res demand�
44
 * 3: Le service renvoie le nombre calcule
44
 * 3: Le service renvoie le nombre calcule
45
 */ 
45
 */ 
46
 
46
 
47
 Class InventoryImageCount extends DBAccessor {
47
 Class InventoryImageCount extends DBAccessor {
48
 
48
 
49
	var $config;
49
	var $config;
50
	
50
	
51
	function InventoryImageCount($config) {
51
	function InventoryImageCount($config) {
52
 
52
 
53
		$this->config=$config;
53
		$this->config=$config;
54
	}
54
	}
55
	
55
	
56
	
56
	
57
	// renvoie lee nombre d'images correspondant aux criteres 
57
	// renvoie lee nombre d'images correspondant aux criteres 
58
	function getElement($uid)
58
	function getElement($uid)
59
	{
59
	{
60
			// uid[0] : utilisateur obligatoire
60
			// uid[0] : utilisateur obligatoire
61
			// uid[1] : crit�res de filtrage de la forme crit�re1:valeur1;crit�re2:valeur2
61
			// uid[1] : crit�res de filtrage de la forme crit�re1:valeur1;crit�re2:valeur2
62
			
62
			
63
		// Controle detournement utilisateur 
63
		// Controle detournement utilisateur 
64
		$this->controleUtilisateur($uid[0]);
64
		$this->controleUtilisateur($uid[0]);
65
			
65
			
66
		$DB=$this->connectDB($this->config,'cel_db');
66
		$DB=$this->connectDB($this->config,'cel_db');
67
		
67
		
68
		$criteres = array() ;
68
		$criteres = array() ;
69
		
69
		
70
		if(isset($uid[1]))
70
		if(isset($uid[1]))
71
		{
71
		{
72
			$criteres = explode("&", $uid[1]) ;
72
			$criteres = explode("&", $uid[1]) ;
73
		}
73
		}
74
 
74
 
75
		$query='SELECT COUNT(*) FROM cel_images WHERE ci_ce_utilisateur = "'.$DB->escapeSimple($uid[0]).'" AND '  ;
75
		$query='SELECT COUNT(*) FROM cel_images WHERE ci_ce_utilisateur = "'.$DB->escapeSimple($uid[0]).'" AND '  ;
76
			
76
			
77
		foreach($criteres as $pair)
77
		foreach($criteres as $pair)
78
		{
78
		{
79
			$nom_valeur = explode("=",$pair) ;
79
			$nom_valeur = explode("=",$pair) ;
80
 
80
 
81
			if(sizeof($nom_valeur) != 0)
81
			if(sizeof($nom_valeur) != 0)
82
			{
82
			{
83
					if($nom_valeur[0] == "ci_limite")
83
					if($nom_valeur[0] == "ci_limite")
84
					{
84
					{
85
						$limite = $DB->escapeSimple($nom_valeur[1]) ;
85
						$limite = $DB->escapeSimple($nom_valeur[1]) ;
86
					}
86
					}
87
					elseif($nom_valeur[0] == "ci_numero_page")
87
					elseif($nom_valeur[0] == "ci_numero_page")
88
					{
88
					{
89
						$numero_page = $DB->escapeSimple($nom_valeur[1]) ;
89
						$numero_page = $DB->escapeSimple($nom_valeur[1]) ;
90
					}
90
					}
91
					elseif($nom_valeur[0] == "ci_meta_mots_cles")
91
					elseif($nom_valeur[0] == "ci_meta_mots_cles")
92
					{
92
					{
93
						$mots_cles = rtrim($nom_valeur[1], ',') ;
93
						$mots_cles = rtrim($nom_valeur[1], ',') ;
94
						$mots_cles_liste = explode("," , $mots_cles) ;
94
						$mots_cles_liste = explode("," , $mots_cles) ;
95
 
95
 
96
						foreach($mots_cles_liste as $mot_cle)
96
						foreach($mots_cles_liste as $mot_cle)
97
						{
97
						{
98
							$query .= $nom_valeur[0].' LIKE "%'.$DB->escapeSimple($mot_cle).'%"' ;
98
							$query .= $nom_valeur[0].' LIKE "%'.$DB->escapeSimple($mot_cle).'%"' ;
99
							$query .= ' AND ' ;
99
							$query .= ' AND ' ;
100
						}
100
						}
101
					}
101
					}
102
					elseif($nom_valeur[0] == "ci_meta_comment")
102
					elseif($nom_valeur[0] == "ci_meta_comment")
103
					{
103
					{
104
						$mots_comment_liste = explode(" " , $nom_valeur[1]) ;
104
						$mots_comment_liste = explode(" " , $nom_valeur[1]) ;
105
 
105
 
106
						foreach($mots_comment_liste as $mot_comment)
106
						foreach($mots_comment_liste as $mot_comment)
107
						{
107
						{
108
							$mot_comment = trim($mot_comment) ;
108
							$mot_comment = trim($mot_comment) ;
109
							$query .= $nom_valeur[0].' LIKE "%'.$DB->escapeSimple($mot_comment).'%"' ;
109
							$query .= $nom_valeur[0].' LIKE "%'.$DB->escapeSimple($mot_comment).'%"' ;
110
							$query .= ' AND ' ;
110
							$query .= ' AND ' ;
111
						}
111
						}
112
					}
112
					}
113
					elseif($nom_valeur[0] == "annee" || $nom_valeur[0] == "mois" || $nom_valeur[0] == "jour")
113
					elseif($nom_valeur[0] == "annee" || $nom_valeur[0] == "mois" || $nom_valeur[0] == "jour")
114
					{
114
					{
115
						$query .= $this->fabriquerSousRequeteRechercheDate($nom_valeur[0], $nom_valeur[1]) ;
115
						$query .= $this->fabriquerSousRequeteRechercheDate($nom_valeur[0], $nom_valeur[1]) ;
116
						$query .= ' AND ' ;
116
						$query .= ' AND ' ;
117
					}
117
					}
118
					elseif($nom_valeur[0] == "ci_id_tampon")
118
					elseif($nom_valeur[0] == "ci_id_tampon")
119
					{
119
					{
120
						$ids_tampon = rtrim($nom_valeur[1], ',') ;
120
						$ids_tampon = rtrim($nom_valeur[1], ',') ;
121
						$query .= 'ci_id_image IN ( '.$DB->escapeSimple($ids_tampon).')'.
121
						$query .= 'ci_id_image IN ( '.$DB->escapeSimple($ids_tampon).')'.
122
						$query .= ' AND ';
122
						$query .= ' AND ';
123
					}
123
					}
124
					elseif($nom_valeur[0] == "ci_recherche_generale")
124
					elseif($nom_valeur[0] == "ci_recherche_generale")
125
					{
125
					{
126
						$query .= $this->fabriquerSousRequeteRechercheGenerale($uid[0], $nom_valeur[1]);
126
						$query .= $this->fabriquerSousRequeteRechercheGenerale($uid[0], $nom_valeur[1]);
127
						$query .= ' AND ';
127
						$query .= ' AND ';
128
					}
128
					}
129
					else
129
					else
130
					{
130
					{
131
						$query .= $nom_valeur[0].' = "'.$DB->escapeSimple($nom_valeur[1]) ;
131
						$query .= $nom_valeur[0].' = "'.$DB->escapeSimple($nom_valeur[1]) ;
132
						$query .= '" AND ' ;
132
						$query .= '" AND ' ;
133
					}
133
					}
134
			}
134
			}
135
		}
135
		}
136
		
136
		
137
		$query = rtrim($query,' AND ') ;
137
		$query = rtrim($query,' AND ') ;
138
		
138
		
139
		$res =& $DB->query($query);
139
		$res =& $DB->query($query);
140
                if (PEAR::isError($res)) {
140
                if (PEAR::isError($res)) {
141
		
141
		
142
                	die($res->getMessage());
142
                	die($res->getMessage());
143
                }
143
                }
144
		
144
		
145
		$results = array() ; 
145
		$results = array() ; 
146
		
146
		
147
		while($image = $res->fetchrow(DB_FETCHMODE_ORDERED)) 
147
		while($image = $res->fetchrow(DB_FETCHMODE_ORDERED)) 
148
		{
148
		{
149
			$result[] = $image[0] ;
149
			$result[] = $image[0] ;
150
		}
150
		}
151
		
151
		
152
		$res = json_encode($result) ; 
152
		$res = json_encode($result) ; 
153
		
153
		
154
		header("content-type: text/json") ;
154
		header("content-type: application/json") ;
155
		print $res ;
155
		print $res ;
156
		exit() ;
156
		exit() ;
157
	}
157
	}
158
	
158
	
159
	private function fabriquerSousRequeteRechercheGenerale($id_utilisateur, $chaine_recherche) {
159
	private function fabriquerSousRequeteRechercheGenerale($id_utilisateur, $chaine_recherche) {
160
		
160
		
161
		$requete_recherche_taxon .= 'SELECT coi_ce_image 
161
		$requete_recherche_taxon = 'SELECT coi_ce_image 
162
								FROM cel_obs_images
162
								FROM cel_obs_images
163
								WHERE coi_ce_observation IN ' .
163
								WHERE coi_ce_observation IN ' .
164
								'(SELECT ordre ' .
164
								'(SELECT ordre ' .
165
									'FROM cel_inventory '.
165
									'FROM cel_inventory '.
166
									'WHERE identifiant ="'.$id_utilisateur.'" '.
166
									'WHERE identifiant ="'.$id_utilisateur.'" '.
167
									'AND nom_sel LIKE "'.$chaine_recherche.'%" '.
167
									'AND nom_sel LIKE "'.$chaine_recherche.'%" '.
168
								')';
168
								')';
169
								
169
								
170
		$requete_recherche_comm = ' ci_meta_comment LIKE "%'.$chaine_recherche.'%" ';
170
		$requete_recherche_comm = ' ci_meta_comment LIKE "%'.$chaine_recherche.'%" ';
171
		
-
 
-
 
171
		$requete_recherche_nom_or = ' ci_nom_original LIKE "%'.$chaine_recherche.'%" ';
172
		$requete_recherche_generale = '(ci_id_image IN ( '.($requete_recherche_taxon).') OR ('.$requete_recherche_comm.'))' ;
172
		$requete_recherche_generale = '(ci_id_image IN ( '.($requete_recherche_taxon).') OR ('.$requete_recherche_comm.') OR ('.$requete_recherche_nom_or.'))' ;
173
							
173
 
174
		return $requete_recherche_generale;
174
		return $requete_recherche_generale;
175
	}
175
	}
176
	
176
	
177
	private function fabriquerSousRequeteRechercheDate($intervalle, $valeur) {
177
	private function fabriquerSousRequeteRechercheDate($intervalle, $valeur) {
178
		
178
		
179
		$correspondance_champ = array('annee' => 'YEAR','mois' => 'MONTH','jour' => 'DAY');
179
		$correspondance_champ = array('annee' => 'YEAR','mois' => 'MONTH','jour' => 'DAY');
180
		
180
		
181
		$requete_recherche_date = '';
181
		$requete_recherche_date = '';
182
		
182
		
183
		if(is_numeric($valeur) && $valeur != "00") { 
183
		if(is_numeric($valeur) && $valeur != "00") { 
184
			$requete_recherche_date = $correspondance_champ[$intervalle].'(ci_meta_date) = "'.$valeur.'" ';
184
			$requete_recherche_date = $correspondance_champ[$intervalle].'(ci_meta_date) = "'.$valeur.'" ';
185
		} else {
185
		} else {
186
			$requete_recherche_date = '( ci_meta_date IS NULL OR ci_meta_date = "0000-00-00")';
186
			$requete_recherche_date = '( ci_meta_date IS NULL OR ci_meta_date = "0000-00-00")';
187
		}
187
		}
188
							
188
							
189
		return $requete_recherche_date;
189
		return $requete_recherche_date;
190
	}
190
	}
191
}
191
}
192
?>
192
?>