Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 416 Rev 664
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
		
-
 
80
		$nom_valeur = explode("=",$pair) ;
79
			$nom_valeur = explode("=",$pair) ;
81
				
-
 
82
			if($nom_valeur[0] == "ci_meta_mots_cles")
-
 
83
			{
-
 
84
				$mots_cles = rtrim($nom_valeur[1], ',') ;
-
 
85
				$mots_cles_liste = explode("," , $mots_cles) ;
-
 
86
				
-
 
87
				foreach($mots_cles_liste as $mot_cle)
-
 
88
				{
-
 
89
					$query .= $nom_valeur[0].' LIKE "%'.$DB->escapeSimple($mot_cle).'%"' ; 
-
 
90
					$query .= ' AND ' ;
-
 
91
				}
-
 
92
			}
-
 
93
			elseif($nom_valeur[0] == "ci_meta_comment")
-
 
94
			{
-
 
95
				$mots_comment_liste = explode(" " , $nom_valeur[1]) ;
-
 
96
				
80
 
97
				foreach($mots_comment_liste as $mot_comment)
-
 
98
				{
-
 
99
					$mot_comment = trim($mot_comment) ;
-
 
100
					$query .= $nom_valeur[0].' LIKE "%'.$DB->escapeSimple($mot_comment).'%"' ; 
-
 
101
					$query .= ' AND ' ;
-
 
102
				}
-
 
103
			}
-
 
104
			elseif($nom_valeur[0] == "ci_meta_date")
-
 
105
			{
-
 
106
				$query .= 'DATE_FORMAT( '.$nom_valeur[0].', \'%Y-%m-%d\' ) = "'.$DB->escapeSimple($nom_valeur[1]).'"' ; 
-
 
107
				$query .= ' AND ' ;
-
 
108
			}
-
 
109
			elseif($nom_valeur[0] == "ci_id_tampon")
81
			if(sizeof($nom_valeur) != 0)
110
			{
-
 
111
				$ids_tampon = rtrim($nom_valeur[1], ',') ;
-
 
112
				$query .= 'ci_id_image IN ( '.$DB->escapeSimple($ids_tampon).')' ; 
-
 
113
			}
-
 
114
			else
-
 
115
			{
82
			{
-
 
83
					if($nom_valeur[0] == "ci_limite")
-
 
84
					{
-
 
85
						$limite = $DB->escapeSimple($nom_valeur[1]) ;
-
 
86
					}
-
 
87
					elseif($nom_valeur[0] == "ci_numero_page")
-
 
88
					{
-
 
89
						$numero_page = $DB->escapeSimple($nom_valeur[1]) ;
-
 
90
					}
-
 
91
					elseif($nom_valeur[0] == "ci_meta_mots_cles")
-
 
92
					{
-
 
93
						$mots_cles = rtrim($nom_valeur[1], ',') ;
116
				$nom_valeur = explode("=",$pair) ;
94
						$mots_cles_liste = explode("," , $mots_cles) ;
-
 
95
 
-
 
96
						foreach($mots_cles_liste as $mot_cle)
-
 
97
						{
117
				$query .= $nom_valeur[0].' = "'.$DB->escapeSimple($nom_valeur[1]).'"' ; 
98
							$query .= $nom_valeur[0].' LIKE "%'.$DB->escapeSimple($mot_cle).'%"' ;
-
 
99
							$query .= ' AND ' ;
-
 
100
						}
-
 
101
					}
-
 
102
					elseif($nom_valeur[0] == "ci_meta_comment")
-
 
103
					{
-
 
104
						$mots_comment_liste = explode(" " , $nom_valeur[1]) ;
118
				
105
 
-
 
106
						foreach($mots_comment_liste as $mot_comment)
-
 
107
						{
-
 
108
							$mot_comment = trim($mot_comment) ;
-
 
109
							$query .= $nom_valeur[0].' LIKE "%'.$DB->escapeSimple($mot_comment).'%"' ;
-
 
110
							$query .= ' AND ' ;
-
 
111
						}
-
 
112
					}
-
 
113
					elseif($nom_valeur[0] == "annee" || $nom_valeur[0] == "mois" || $nom_valeur[0] == "jour")
-
 
114
					{
-
 
115
						$query .= $this->fabriquerSousRequeteRechercheDate($nom_valeur[0], $nom_valeur[1]) ;
119
				$query .= ' AND ' ;
116
						$query .= ' AND ' ;
-
 
117
					}
-
 
118
					elseif($nom_valeur[0] == "ci_id_tampon")
-
 
119
					{
-
 
120
						$ids_tampon = rtrim($nom_valeur[1], ',') ;
-
 
121
						$query .= 'ci_id_image IN ( '.$DB->escapeSimple($ids_tampon).')'.
-
 
122
						$query .= ' AND ';
-
 
123
					}
-
 
124
					elseif($nom_valeur[0] == "ci_recherche_generale")
-
 
125
					{
-
 
126
						$query .= $this->fabriquerSousRequeteRechercheGenerale($uid[0], $nom_valeur[1]);
-
 
127
						$query .= ' AND ';
-
 
128
					}
-
 
129
					else
-
 
130
					{
-
 
131
						$query .= $nom_valeur[0].' = "'.$DB->escapeSimple($nom_valeur[1]) ;
-
 
132
						$query .= '" AND ' ;
-
 
133
					}
120
			}
134
			}
121
		}
135
		}
122
		
136
		
123
		$query = rtrim($query,' AND ') ;
137
		$query = rtrim($query,' AND ') ;
-
 
138
		
124
		$res =& $DB->query($query);
139
		$res =& $DB->query($query);
125
                if (PEAR::isError($res)) {
140
                if (PEAR::isError($res)) {
126
		
141
		
127
                	die($res->getMessage());
142
                	die($res->getMessage());
128
                }
143
                }
129
		
144
		
130
		$results = array() ; 
145
		$results = array() ; 
131
		
146
		
132
		while($image = $res->fetchrow(DB_FETCHMODE_ORDERED)) 
147
		while($image = $res->fetchrow(DB_FETCHMODE_ORDERED)) 
133
		{
148
		{
134
			$result[] = $image[0] ;
149
			$result[] = $image[0] ;
135
		}
150
		}
136
		
151
		
137
		$res = json_encode($result) ; 
152
		$res = json_encode($result) ; 
138
		
153
		
139
		header("content-type: text/json") ;
154
		header("content-type: text/json") ;
140
		print $res ;
155
		print $res ;
141
		exit() ;
156
		exit() ;
142
	}
157
	}
-
 
158
	
-
 
159
	private function fabriquerSousRequeteRechercheGenerale($id_utilisateur, $chaine_recherche) {
-
 
160
		
-
 
161
		$requete_recherche_taxon .= 'SELECT coi_ce_image 
-
 
162
								FROM cel_obs_images
-
 
163
								WHERE coi_ce_observation IN ' .
-
 
164
								'(SELECT ordre ' .
-
 
165
									'FROM cel_inventory '.
-
 
166
									'WHERE identifiant ="'.$id_utilisateur.'" '.
-
 
167
									'AND nom_sel LIKE "'.$chaine_recherche.'%" '.
-
 
168
								')';
-
 
169
								
-
 
170
		$requete_recherche_comm = ' ci_meta_comment LIKE "%'.$chaine_recherche.'%" ';
-
 
171
		
-
 
172
		$requete_recherche_generale = '(ci_id_image IN ( '.($requete_recherche_taxon).') OR ('.$requete_recherche_comm.'))' ;
-
 
173
							
-
 
174
		return $requete_recherche_generale;
-
 
175
	}
-
 
176
	
-
 
177
	private function fabriquerSousRequeteRechercheDate($intervalle, $valeur) {
-
 
178
		
-
 
179
		$correspondance_champ = array('annee' => 'YEAR','mois' => 'MONTH','jour' => 'DAY');
-
 
180
		
-
 
181
		$requete_recherche_date = '';
-
 
182
		
-
 
183
		if(is_numeric($valeur)) { 
-
 
184
			$requete_recherche_date = $correspondance_champ[$intervalle].'(ci_meta_date) = "'.$valeur.'" ';
-
 
185
		}
-
 
186
							
-
 
187
		return $requete_recherche_date;
-
 
188
	}
143
}
189
}
144
?>
190
?>