Subversion Repositories Sites.obs-saisons.fr

Rev

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

Rev 41 Rev 46
1
<?php
1
<?php
2
 
2
 
3
class OdsObservation extends GestionTriple {
3
class OdsObservation extends GestionTriple {
4
 
4
 
5
	const PREFIXE = 'get';
5
	const PREFIXE = 'get';
6
	const ABBR_LISTE_EVENEMENTS = 'evenement';
6
	const ABBR_LISTE_EVENEMENTS = 'evenement';
-
 
7
	
-
 
8
	
-
 
9
/**
-
 
10
 * Méthodes d'extractions d'informations
-
 
11
 */
7
	
12
	
8
	/**
13
	/**
9
     * Méthode appelée avec une requête de type GET.
14
     * Méthode appelée avec une requête de type GET.
10
     *
15
     *
11
     */
16
     */
12
    function getElement($param = array()) {
17
    function getElement($param = array()) {
13
    	
18
    	
14
    	$type = $param[0];
19
    	$type = $param[0];
15
    	    	
20
    	    	
16
        if ($type == '*' || is_numeric($type)) {
21
        if ($type == '*' || is_numeric($type)) {
17
            $info = $this->getElementParDefaut($param);
22
            $info = $this->getElementParDefaut($param);
18
        } else {
23
        } else {
19
            $methode = self::PREFIXE.$type;
24
            $methode = self::PREFIXE.$type;
20
            if (method_exists($this, $methode)) {
25
            if (method_exists($this, $methode)) {
21
                array_shift($param);
26
                array_shift($param);
22
                $info = $this->$methode($param);
27
                $info = $this->$methode($param);
23
            } else {
28
            } else {
24
                $this->messages[] = "Le type d'information demandé '$type' n'est pas disponible.";
29
                $this->messages[] = "Le type d'information demandé '$type' n'est pas disponible.";
25
            }
30
            }
26
        }
31
        }
27
       
32
       
28
        // Envoi sur la sortie standard
33
        // Envoi sur la sortie standard
29
        $this->envoyer($info);
34
        $this->envoyer($info);
30
    }
35
    }
31
   
-
 
32
    /**
-
 
33
     * Méthode appelée pour ajouter un élément.
-
 
34
     */
-
 
35
    public function createElement($params) {
-
 
36
        // Identification de l'utilisateur
-
 
37
        list($id_utilisateur, $id_session) = $this->getIdentification($params);
-
 
38
   
-
 
39
        // Contrôle du non détournement de l'utilisateur
-
 
40
        if ($this->etreAutorise($id_utilisateur)) {
-
 
41
            try {
-
 
42
                
-
 
43
            } catch (PDOException $e) {
-
 
44
                $this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage(), $requete);
-
 
45
            }
-
 
46
        }
-
 
47
        $this->envoyer((string) $id_personne);
-
 
48
    }
-
 
49
   
-
 
50
    /**
-
 
51
     * Méthode appelée pour mettre à jour un élément
-
 
52
     */
-
 
53
    public function updateElement($uid, $params)    {
-
 
54
        //Mise à jour de la personne
-
 
55
        // Identification de l'utilisateur
-
 
56
        list($id_utilisateur, $id_session) = $this->getIdentification($params);
-
 
57
       
-
 
58
        // Contrôle du non détournement de l'utilisateur
-
 
59
        if ($this->etreAutorise($id_utilisateur)) {
-
 
60
            try {
-
 
61
 
-
 
62
            } catch (PDOException $e) {
-
 
63
                $messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage(), $requete);
-
 
64
            }
-
 
65
        }
-
 
66
       
-
 
67
        $this->envoyer();      
-
 
68
    }
-
 
69
   
-
 
70
    /**
-
 
71
     * Méthode appelée pour supprimer un élément
-
 
72
     */
-
 
73
    public function deleteElement($uid) {
-
 
74
        // Vérification de la présence des id passés par l'url
-
 
75
        if (!isset($uid[0]) || !isset($uid[1])) {
-
 
76
            $this->messages[] = "Identifiant d'utilisateur ou de personne manquant. Vous ne devriez pas avoir accès à ce service.";
-
 
77
        } else {
-
 
78
            list($id_utilisateur, $id_session) = $this->getIdentification($uid[0]);
-
 
79
           
-
 
80
            // Contrôle du non détournement de l'utilisateur     
-
 
81
            if ($this->etreAutorise($id_utilisateur)) {
-
 
82
                // Récupération des id passés par l'url     
-
 
83
                $identifiants = explode(',', rtrim($uid[1], ','));
-
 
84
                if (count($identifiants) == 0) {
-
 
85
                    $this->messages[] = "Aucun enregistrement n'a été supprimé.";
-
 
86
                } else {
-
 
87
                    foreach ($identifiants as $id_personne) {
-
 
88
                        try {
-
 
89
                        } catch (PDOException $e) {
-
 
90
                            $this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage(), $requete);
-
 
91
                        }
-
 
92
                    }
-
 
93
                }
-
 
94
            }
-
 
95
        }
-
 
96
       
-
 
97
        // Envoie sur la sortie standard
-
 
98
        $this->envoyer();
-
 
99
    }
-
 
100
    
36
    
101
   	private function getElementParDefaut($params) {
37
	private function getElementParDefaut($params) {
102
   		
38
   		
103
   	}
39
   	}
104
   	
40
   	
105
   	private function getObservationsPourStation($params) {
41
   	private function getObservationsPourStation($params) {
106
   		
42
   		
107
   		$id_station = $params[0];
43
   		$id_station = $params[0];
108
   		$annee = $params[1];
44
   		$annee = $params[1];
109
   		
45
   		
110
   		return ;
46
   		return ;
111
 
47
 
112
   	}
48
   	}
113
    
49
    
114
    private function getObservationsPourIndividu($params) {
50
    private function getObservationsPourIndividu($params) {
115
    	
51
    	
116
    	$id_individu = $params[0];
52
    	$id_individu = $params[0];
117
   		$annee = $params[1];
53
   		$annee = $params[1];
118
   		
54
   		
119
   		$requete_liste_observation_individu = 'SELECT * FROM ods_observations '.
55
   		$requete_liste_observation_individu = 'SELECT * FROM ods_observations '.
120
   												  'WHERE oo_ce_individu ='.$this->proteger($id_individu).' '.
56
   												  'WHERE oo_ce_individu ='.$this->proteger($id_individu).' '.
121
   												  'ORDER BY oo_date'; 
57
   												  'ORDER BY oo_date'; 
122
   		
58
   		
123
   		$liste_observation_individu = $this->executerRequete($requete_liste_observation_individu);
59
   		$liste_observation_individu = $this->executerRequete($requete_liste_observation_individu);
124
   		
60
   		
125
   		$liste_observation_individu_formatees =array();
-
 
126
   		
-
 
127
   		$requete_evenements_pour_espece_individu_1 = 'SELECT oe_ce_evenements FROM ods_especes '.
-
 
128
   											'WHERE oe_id_espece = '.
-
 
129
   											'('.
-
 
130
   												'SELECT oi_ce_espece FROM ods_individus '.
-
 
131
   												'WHERE oi_id_individu = '.$this->proteger($id_individu).' '.
-
 
132
   											')';
-
 
133
   		
-
 
134
    	
-
 
135
    	$evenements_pour_espece_chaine = $this->executerRequete($requete_evenements_pour_espece_individu_1);
-
 
136
    	$evenements_pour_espece_chaine = $evenements_pour_espece[0]['oe_ce_evenements'];
-
 
137
    	
-
 
138
    	$tableau_evenements_espece = split(',',$evenements_pour_espece_chaine);
-
 
139
    	foreach($tableau_evenements_espece as &$evenement_espece) {
-
 
140
    		$evenement_espece = $this->proteger($evenement_espece);
-
 
141
    	}
-
 
142
    	
-
 
143
    	$evenements_espece_chaine_bdd = implode(',',$tableau_evenements_espece);
-
 
144
 
-
 
145
    	$requete_liste_evenement_espece_individu = 'SELECT * FROM ods_triples '.
-
 
146
										   		'WHERE ot_id_triple IN '.
-
 
147
										   		'('.$evenements_espece_chaine_bdd.')';
-
 
148
   		
-
 
149
   		$liste_evenement_espece_individu = $this->executerRequete($requete_liste_evenement_espece_individu);
-
 
150
   		$liste_evenement_espece_individu = $liste_evenement_espece_individu[0];
61
   		$liste_observation_individu_formatees = array();
151
   		
62
   		
152
   		foreach($liste_observation_individu as $observation_individu) {
63
   		foreach($liste_observation_individu as $observation_individu) {
153
   			
64
   			
154
   			$annee_obs = date($observation_individu['oo_date'], "Y");
65
   			$annee_obs = date("Y",strtotime($observation_individu['oo_date']));
-
 
66
   			$stade_observation_complet = $this->getInformationEvenementParId($observation_individu['oo_ce_evenement']);
-
 
67
   			
155
   			$stade_observation_complet = $observation_individu['oo_ce_evenement'];
68
   			$abbr_stade_observation = $stade_observation_complet['ot_cle'];
156
   			
69
   			
157
   			$infos_stades = split('_',$stade_observation_complet);
70
   			$infos_stades = $this->renvoyerInformationStadeAPartirChaineTriple($abbr_stade_observation);
-
 
71
   			
158
   			
72
   			$titre_stade = $infos_stades['nom'];
159
   			$titre_stade = $infos_stades[1];
73
   			$numero_stade = $infos_stades['numero'];
-
 
74
   			$abreviation_stade = $infos_stades['abreviation'];
160
   			$numero_stade = $infos_stades[3];
75
   			
161
   			
76
   			$date_observation_formatee = date($this->config['appli']['format_date'], strtotime($observation_individu['oo_date']));
162
   			$date_observation_formatee = date($observation_individu['oo_date'],$this->config['appli']['format_date']);
77
   			
163
   			
78
   			$liste_observation_individu_formatees[$annee_obs][$titre_stade][$numero_stade] = $date_observation_formatee;
164
   			$liste_observation_individu_formatees[$annee_obs][$titre_stade][$numero_stade] = $date_observation_formatee;
79
   			$liste_observation_individu_formatees[$annee_obs][$titre_stade][$numero_stade] = $date_observation_formatee;
165
   			
80
   			
166
   		}
81
   		}
167
    		    	
82
    		    	
168
		return $liste_observation_individu_formatees;
83
		return $liste_observation_individu_formatees;
169
    }
84
    }
170
    
85
    
171
    /*private function getMajEspece() {
-
 
172
    	$id_maj = '97,98,99,100,101,102,108,109,110,111';
-
 
-
 
86
    private function getInformationEvenementParId($id_evenement) {
-
 
87
    	
173
    	$stade_ajoute = '20';
88
    	$requete_informations_evenement = 'SELECT * FROM ods_triples '.
-
 
89
   		'WHERE ot_id_triple IN '.
-
 
90
   		'('.$this->proteger($id_evenement).')';
-
 
91
    	
174
    	
92
    	$resultat_requete_informations_evenement = $this->executerRequete($requete_informations_evenement);
-
 
93
    	$informations_evenement = $resultat_requete_informations_evenement[0];
175
    	$tab = explode(',',$id_maj);
94
    	
-
 
95
    	return $informations_evenement;
176
    	
96
    }
-
 
97
 
-
 
98
/**
-
 
99
 * Méthodes de création et modification d'informations
177
    	foreach($tab as $id) {
100
 */    
-
 
101
    
178
    		
102
    /**
179
    		$requete = 'SELECT oe_ce_evenements FROM ods_especes WHERE oe_id_espece = '.$id;
103
     * Méthode appelée pour ajouter un élément.
180
    		echo $requete.'<br />';
104
     */
-
 
105
    public function createElement($params) {
-
 
106
    	
-
 
107
    	print_r($params);
181
    		$res = $this->executerRequete($requete);
108
        
-
 
109
        $this->envoyer();
-
 
110
    }
-
 
111
   
182
    		
112
        /**
-
 
113
     * Méthode appelée pour mettre à jour un élément
-
 
114
     */
183
    		print_r($res);
115
    public function updateElement($uid, $params)    {
-
 
116
    	
-
 
117
    	$elements_requis = array('id_participant','id_individu');
184
    		
118
    	$erreurs = array();
185
    		if($res[0]['oe_ce_evenements'] == 0) {
119
        
186
    			$evts = ''.$stade_ajoute;
120
    	foreach($elements_requis as $requis) {
-
 
121
    		if(!isset($params[$requis])) {
-
 
122
    			$erreurs[$requis] = 'erreur ';
-
 
123
    		}
-
 
124
    	}
-
 
125
    	
-
 
126
    	if(!isset($params['annee_en_cours'])) {
-
 
127
    		$annee_en_cours = date('Y');
-
 
128
    	} else {
-
 
129
    		$annee_en_cours = $params['annee_en_cours'];
-
 
130
    	}
-
 
131
    	
-
 
132
    	if(!empty($erreurs)) {
-
 
133
    		$this->envoyer($erreurs);
-
 
134
    	}
-
 
135
    	
-
 
136
    	$id_participant = $params['id_participant'];
-
 
137
    	unset($params['id_participant']);
-
 
138
    	$id_individu = $params['id_individu'];
-
 
139
    	unset($params['id_individu']);
-
 
140
    	
-
 
141
    	$requete_obs_deja_saisies_cette_annee = 'SELECT * FROM ods_observations WHERE oo_ce_individu = '.$this->proteger($id_individu).' '.
-
 
142
    		'AND oo_ce_participant = '.$this->proteger($id_participant).' '.
-
 
143
    		'AND YEAR(oo_date) = '.$this->proteger($annee_en_cours);
-
 
144
 
-
 
145
    	$obs_deja_saisies_cette_annee = $this->executerRequete($requete_obs_deja_saisies_cette_annee);
-
 
146
    	    	    	
-
 
147
    	foreach($params as $cle => $valeur) {
-
 
148
    		if($est_une_valeur_obs = $this->renvoyerIdEvenementSiChampDeFormulaireObservation($cle)) {
-
 
149
    			
-
 
150
    			$valeur = $this->formaterDateObservationPourBdd($valeur);
-
 
151
    			    			
-
 
152
    			$obs_a_traiter = array('date_evenement' => $valeur,
-
 
153
    									'id_evenement' => $est_une_valeur_obs,
-
 
154
    									'id_individu' => $id_individu,
-
 
155
    									'commentaire' => '');
-
 
156
    			
-
 
157
    			if($a_modifier_ou_inserer = $this->renvoyerIdObservationSiEvenementDejaObserveCetteAnnee($est_une_valeur_obs,$obs_deja_saisies_cette_annee)) {
-
 
158
    				$obs_a_traiter['id_observation'] = $a_modifier_ou_inserer;
-
 
159
    				$this->modifierObservation($id_participant, $obs_a_traiter);
-
 
160
    			} else {
-
 
161
    				$this->insererObservation($id_participant, $obs_a_traiter);
-
 
162
    			}
-
 
163
    		}
-
 
164
    	}
-
 
165
       
-
 
166
        $this->envoyer();      
-
 
167
    }
-
 
168
    
-
 
169
    private function insererObservation($id_participant, $donnees_obs_a_inserer) {
-
 
170
    	
-
 
171
    	$nouvel_ordre = 1;
-
 
172
    	
-
 
173
    	$requete_max_ordre = 'SELECT MAX(oo_ordre) FROM ods_observations WHERE '.
-
 
174
    		'oo_ce_participant = '.$this->proteger($id_participant);
-
 
175
    	
-
 
176
    	$resultat_requete_ordre = $this->executerRequete($requete_max_ordre);
-
 
177
    	
-
 
178
    	if(count($resultat_requete_ordre) > 0) {
-
 
179
    		$nouvel_ordre = $resultat_requete_ordre[0]['oo_ordre'] + 1; 
-
 
180
    	}
-
 
181
    	
-
 
182
    	$requete_nouvelle_observation = 'INSERT INTO ods_observations '.
-
 
183
    		'(oo_ordre, oo_ce_individu, oo_ce_evenement, oo_date, oo_commentaire, oo_date_saisie, oo_date_modification) '.
-
 
184
    		'VALUES '.
-
 
185
    		'( '.
-
 
186
	    		$this->proteger($nouvel_ordre).','.
-
 
187
	    		$this->proteger($donnees_obs_a_inserer['id_individu']).','.
-
 
188
	    		$this->proteger($donnees_obs_a_inserer['id_evenement']).','.
-
 
189
	    		$this->proteger($donnees_obs_a_inserer['date_evenement']).','.
-
 
190
	    		'"",'.
-
 
191
	    		'NOW(),'.
-
 
192
	    		'NOW()'.
-
 
193
    		')'; 
-
 
194
	    		
-
 
195
	    return $this->executerRequeteSimple($requete_nouvelle_observation);
-
 
196
    }
-
 
197
    
-
 
198
	private function modifierObservation($id_participant, $donnees_obs_a_inserer) {
-
 
199
 
-
 
200
    	$requete_modification_observation = 'UPDATE ods_observations '.
-
 
201
    		'SET '.
-
 
202
    			'oo_date = '.$this->proteger($donnees_obs_a_inserer['date_evenement']).', '. 
-
 
203
    			'oo_commentaire = '.$this->proteger($donnees_obs_a_inserer['commentaire']).', '. 
-
 
204
    			'oo_date_modification = NOW() '.
-
 
205
    		'WHERE oo_id_observation = '.$donnees_obs_a_inserer['id_observation'].' '.
-
 
206
    		'AND oo_ce_participant = '.$this->proteger($id_participant);
-
 
207
    	
-
 
208
    	return $this->executerRequeteSimple($requete_modification_observation);
-
 
209
    }
-
 
210
    
187
    		} else {
211
    private function renvoyerIdObservationSiEvenementDejaObserveCetteAnnee($id_evenement, $tableau_observations_cette_annee) {
188
    			$evts = $res[0]['oe_ce_evenements'].','.$stade_ajoute;
212
    	
-
 
213
    	foreach($tableau_observations_cette_annee as $observation_cette_annee) {
189
    		}
214
    		
-
 
215
    		if($id_evenement == $observation_cette_annee['oo_ce_evenement']) {
-
 
216
    		    			
-
 
217
    			$observation_cette_annee['oo_ce_evenement'];
-
 
218
    			return $observation_cette_annee['oo_id_observation'];
-
 
219
    		}
190
    		
220
    	}
-
 
221
    	
191
    		$evts = $this->proteger($evts);
222
    	return false;
192
    		
223
    }
-
 
224
    
-
 
225
	private function renvoyerIdEvenementSiChampDeFormulaireObservation($champ) {
193
    		$requete = 'UPDATE ods_especes SET oe_ce_evenements = '.$evts.' WHERE `oe_id_espece` = '.$id;
226
    	    	
194
    		
227
    	$tab_champ = split('observation_',$champ);
-
 
228
    	
-
 
229
    	if(count($tab_champ) > 1 && is_numeric($tab_champ[1])) {
-
 
230
    		return $tab_champ[1];
-
 
231
    	}
-
 
232
    	
-
 
233
    	return false;
-
 
234
    }
-
 
235
    
-
 
236
    private function formaterDateObservationPourBdd($date) {
-
 
237
		
-
 
238
		$format = $this->config['appli']['format_date'];
-
 
239
					
-
 
240
		if(!isset($format)) {
-
 
241
			$format = 'd/m/Y';
-
 
242
		}
-
 
243
		
-
 
244
		$recherche = array('d','m','Y');
-
 
245
		$remplacement = array('([0-9]{1,2})','([0-9]{1,2})','([0-9]{4})');
-
 
246
		
-
 
247
		$pattern_date_simple = str_replace($recherche, $remplacement, $format);;
-
 
248
 
-
 
249
		if(ereg($pattern_date_simple, $date)) {
-
 
250
			$date_tab = split('/', $date);
-
 
251
			$time = mktime(0,0,0,$date_tab[1],$date_tab[0],$date_tab[2]);	
-
 
252
		} else {			
-
 
253
			$time = strtotime($date);
-
 
254
		}
-
 
255
		
195
    		    	
256
		return date('Y-m-d h:i:s', $time); 	
-
 
257
	} 
-
 
258
   
-
 
259
    /**
-
 
260
     * Méthode appelée pour supprimer un élément
-
 
261
     */
196
    		echo $requete.'<br />';;
262
    public function deleteElement($uid) {
197
    		$this->executerRequeteSimple($requete);
263
        
198
    	}
264
        // Envoie sur la sortie standard
199
 
265
        $this->envoyer();
200
    }*/
266
    }
201
}
267
}
202
?>
268
?>