Subversion Repositories Sites.obs-saisons.fr

Rev

Rev 262 | Rev 324 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 262 Rev 320
Line 2... Line 2...
2
 
2
 
Line 3... Line 3...
3
class OdsObservation extends OdsTriple {
3
class OdsObservation extends OdsTriple {
4
 
4
 
5
	const PREFIXE = 'get';
5
	const PREFIXE = 'get';
6
	const ABBR_LISTE_EVENEMENTS = 'evenement';
6
	const ABBR_LISTE_EVENEMENTS = 'evenement';
7
	
7
 
8
	
8
 
9
/**
9
/**
10
 * Méthodes d'extractions d'informations
10
 * Méthodes d'extractions d'informations
11
 */
11
 */
12
	
12
 
13
	/**
13
	/**
14
     * Méthode appelée avec une requête de type GET.
14
     * Méthode appelée avec une requête de type GET.
15
     *
15
     *
16
     */
16
     */
17
    function getElement($param = array()) {
17
    function getElement($param = array()) {
18
    	
18
 
19
    	$type = $param[0];
19
    	$type = $param[0];
20
    	    	
20
 
21
        if ($type == '*' || is_numeric($type)) {
21
        if ($type == '*' || is_numeric($type)) {
22
            $info = $this->getElementParDefaut($param);
22
            $info = $this->getElementParDefaut($param);
23
        } else {
23
        } else {
Line 30... Line 30...
30
            }
30
            }
31
        }
31
        }
Line 32... Line 32...
32
 
32
 
33
        $this->envoyer($info);
33
        $this->envoyer($info);
34
    }
34
    }
35
    
35
 
36
	private function getElementParDefaut($params) {
36
	private function getElementParDefaut($params) {
37
   		
37
 
38
   	}
38
   	}
39
   	
39
 
40
   	private function getObservationsPourStation($params) {
40
   	private function getObservationsPourStation($params) {
41
   		
41
 
42
   		$id_station = isset($params[0]) ? $params[0] :  '';
42
   		$id_station = isset($params[0]) ? $params[0] :  '';
43
   		$annee = isset($params[1]) ? $params[1] :  '';
43
   		$annee = isset($params[1]) ? $params[1] :  '';
44
   		
44
 
Line 45... Line 45...
45
   		return ;
45
   		return ;
46
 
46
 
47
   	}
47
   	}
48
    
48
 
49
    private function getObservationsPourIndividu($params) {
49
    private function getObservationsPourIndividu($params) {
50
    	
50
 
51
    	$id_individu = isset($params[0]) ? $params[0] :  '';
51
    	$id_individu = isset($params[0]) ? $params[0] :  '';
52
   		$annee = isset($params[1]) ? $params[1] :  '';
52
   		$annee = isset($params[1]) ? $params[1] :  '';
53
   		
53
 
54
   		$requete_liste_observation_individu = 'SELECT * FROM ods_observations '.
54
   		$requete_liste_observation_individu = 'SELECT * FROM ods_observations '.
55
   												  'WHERE oo_ce_individu ='.$this->proteger($id_individu).' '.
55
   												  'WHERE oo_ce_individu ='.$this->proteger($id_individu).' '.
56
   												  'AND DAY(oo_date) != "00" '.
56
   												  'AND DAY(oo_date) != "00" '.
57
   												  'ORDER BY YEAR(oo_date) DESC, MONTH(oo_date) ASC, DAY(oo_date) ASC '; 
57
   												  'ORDER BY YEAR(oo_date) DESC, MONTH(oo_date) ASC, DAY(oo_date) ASC ';
58
   		
58
 
59
   		$liste_observation_individu = $this->executerRequete($requete_liste_observation_individu);
59
   		$liste_observation_individu = $this->executerRequete($requete_liste_observation_individu);
60
   		
60
 
61
   		$liste_observation_individu_formatees = array();
61
   		$liste_observation_individu_formatees = array();
62
   		
62
 
63
   		foreach($liste_observation_individu as $observation_individu) {
63
   		foreach($liste_observation_individu as $observation_individu) {
64
   			
64
 
65
   			$annee_obs = date("Y",strtotime($observation_individu['oo_date']));
65
   			$annee_obs = date("Y",strtotime($observation_individu['oo_date']));
66
   			$stade_observation_complet = $this->getInformationEvenementParId($observation_individu['oo_ce_evenement']);
66
   			$stade_observation_complet = $this->getInformationEvenementParId($observation_individu['oo_ce_evenement']);
67
   			
67
 
68
   			$abbr_stade_observation = $stade_observation_complet['ot_cle'];
68
   			$abbr_stade_observation = $stade_observation_complet['ot_cle'];
69
   			
69
 
70
   			$infos_stades = $this->renvoyerInformationStadeAPartirChaineTriple($abbr_stade_observation);
70
   			$infos_stades = $this->renvoyerInformationStadeAPartirChaineTriple($abbr_stade_observation);
71
   			
71
 
72
   			$titre_stade = $infos_stades['nom'];
72
   			$titre_stade = $infos_stades['nom'];
73
   			$numero_stade = $infos_stades['numero'];
73
   			$numero_stade = $infos_stades['numero'];
74
   			$abreviation_stade = $infos_stades['abreviation'];
74
   			$abreviation_stade = $infos_stades['abreviation'];
75
   			
75
 
76
   			$tableau_date =  date_parse($observation_individu['oo_date']);
76
   			$tableau_date =  date_parse($observation_individu['oo_date']);
77
   			
77
 
78
   			if(!$this->estUneDateInvalide($tableau_date['day'], $tableau_date['month'], $tableau_date['year'])) {
78
   			if(!$this->estUneDateInvalide($tableau_date['day'], $tableau_date['month'], $tableau_date['year'])) {
79
   				   			
79
 
80
	   			$date_observation_formatee = date($this->config['appli']['format_date'], strtotime($observation_individu['oo_date']));
-
 
81
	   			
80
	   			$date_observation_formatee = date($this->config['appli']['format_date'], strtotime($observation_individu['oo_date']));
82
	   			$liste_observation_individu_formatees[$annee_obs][$titre_stade][$numero_stade] = $date_observation_formatee;
81
 
83
	   			$liste_observation_individu_formatees[$annee_obs][$titre_stade][$numero_stade] = $date_observation_formatee;
82
	   			$liste_observation_individu_formatees[$annee_obs][$titre_stade][$numero_stade][$observation_individu['oo_id_observation']] = $date_observation_formatee;
84
   			}
83
   			}
85
   			
84
 
86
   		}
85
   		}
87
   		
86
 
88
   		krsort($liste_observation_individu_formatees);
87
   		krsort($liste_observation_individu_formatees);
89
    		    	
88
 
90
		return $liste_observation_individu_formatees;
89
		return $liste_observation_individu_formatees;
91
    }
90
    }
92
    
91
 
93
/**
92
/**
94
 * Méthodes de création et modification d'informations
93
 * Méthodes de création et modification d'informations
95
 */    
94
 */
96
       
95
 
97
     /**
96
     /**
98
     * Méthode appelée pour mettre à jour un élément
97
     * Méthode appelée pour mettre à jour un élément
99
     */
98
     */
100
    public function updateElement($uid, $params)    {
99
    public function updateElement($uid, $params)    {
101
    	
100
 
102
    	$elements_requis = array('id_participant','id_individu');
101
    	$elements_requis = array('id_participant','id_individu', 'id_evenement', 'date_evenement');
103
    	$erreurs = array();
102
    	$erreurs = array();
104
        
103
 
105
    	foreach($elements_requis as $requis) {
104
    	foreach($elements_requis as $requis) {
106
    		if(!isset($params[$requis])) {
105
    		if(!isset($params[$requis])) {
107
    			$erreurs[$requis] = 'erreur ';
106
    			$erreurs[$requis] = 'erreur ';
108
    		}
107
    		}
109
    	}
108
    	}
110
    	
109
 
111
    	if(!isset($params['annee_en_cours'])) {
110
    	if(!isset($params['annee_en_cours'])) {
112
    		$annee_en_cours = date('Y');
111
    		$annee_en_cours = date('Y');
113
    	} else {
112
    	} else {
114
    		$annee_en_cours = $params['annee_en_cours'];
113
    		$annee_en_cours = $params['annee_en_cours'];
115
    	}
114
    	}
116
    	
115
 
-
 
116
    	if(!empty($erreurs)) {
117
    	if(!empty($erreurs)) {
117
    		$this->envoyer($erreurs);
118
    		$this->envoyer($erreurs);
118
				exit;
119
    	}
119
    	}
120
    	
-
 
121
    	$id_participant = $params['id_participant'];
120
 
122
    	unset($params['id_participant']);
-
 
123
    	$id_individu = $params['id_individu'];
121
    	$id_participant = $params['id_participant'];
124
    	unset($params['id_individu']);
122
    	$id_individu = $params['id_individu'];
125
    	
-
 
126
    	$requete_obs_deja_saisies_cette_annee = 'SELECT * FROM ods_observations WHERE oo_ce_individu = '.$this->proteger($id_individu).' '.
123
 
127
    		'AND oo_ce_participant = '.$this->proteger($id_participant).' '.
124
			$a_modifier_ou_inserer = !empty($params['id_observation']) ? $params['id_observation'] : false;
128
    		'AND YEAR(oo_date) = '.$this->proteger($annee_en_cours);
125
			$retour = array();
129
 
126
 
-
 
127
			$date_evenement = $this->formaterDateObservationPourBdd($params['date_evenement']);
-
 
128
 
130
    	$obs_deja_saisies_cette_annee = $this->executerRequete($requete_obs_deja_saisies_cette_annee);
129
			// dans le cas des ajouts ou modifications on vérifie que l'on insère pas une date
-
 
130
			// déjà existante, car ça n'a pas de sens pour un même individu et stade
-
 
131
			if (strpos($date_evenement, '00-00') === false) {
-
 
132
				$requete_existe_avec_cette_date = 'SELECT * FROM ods_observations '.
-
 
133
																			'WHERE oo_ce_participant = '.$this->proteger($id_participant).' AND '.
-
 
134
																			'oo_ce_individu = '.$this->proteger($id_individu).' AND '.
131
    	    	    	
135
																			'oo_ce_evenement = '.$this->proteger($params['id_evenement']).' AND '.
132
    	foreach($params as $cle => $valeur) {
136
																			'oo_date = '.$this->proteger($date_evenement);
133
    		if($est_une_valeur_obs = $this->renvoyerIdEvenementSiChampDeFormulaireObservation($cle)) {
137
				$resultat_requete_existe_avec_cette_date = $this->executerRequete($requete_existe_avec_cette_date);
-
 
138
 
-
 
139
				if(!empty($resultat_requete_existe_avec_cette_date)) {
-
 
140
					$this->envoyer([
-
 
141
						'erreurs' => [
-
 
142
							'date' => 'Une observation à cette date existe déjà pour ce stade et cet individu'
-
 
143
						]
-
 
144
					]);
-
 
145
					exit;
134
    			
146
				}
135
    			$valeur = $this->formaterDateObservationPourBdd($valeur);
147
			}
-
 
148
 
136
    			    			
149
    	$obs_a_traiter = array(
137
    			$obs_a_traiter = array('date_evenement' => $valeur,
150
				'date_evenement' => $date_evenement,
138
    									'id_evenement' => $est_une_valeur_obs,
151
    		'id_evenement' => $params['id_evenement'],
139
    									'id_individu' => $id_individu,
152
	    	'id_individu' => $params['id_individu'],
140
    									'commentaire' => '');
153
    		'commentaire' => '');
141
    			
154
 
142
    			if($a_modifier_ou_inserer = $this->renvoyerIdObservationSiEvenementDejaObserveCetteAnnee($est_une_valeur_obs,$obs_deja_saisies_cette_annee)) {
155
    	if($a_modifier_ou_inserer) {
143
    				$obs_a_traiter['id_observation'] = $a_modifier_ou_inserer;
156
    		$obs_a_traiter['id_observation'] = $a_modifier_ou_inserer;
144
    				$this->modifierObservation($id_participant, $obs_a_traiter);
157
    		$this->modifierObservation($id_participant, $obs_a_traiter);
145
    			} else {
-
 
146
    				$this->insererObservation($id_participant, $obs_a_traiter);
-
 
147
    			}
158
    	} else {
148
    		}
159
    		$retour = ['id_observation' => $this->insererObservation($id_participant, $obs_a_traiter)];
149
    	}
160
    	}
150
       
161
 
151
        $this->envoyer();      
162
      $this->envoyer($retour);
152
    }
163
    }
153
    
164
 
154
    private function insererObservation($id_participant, $donnees_obs_a_inserer) {
165
    private function insererObservation($id_participant, $donnees_obs_a_inserer) {
155
    	
166
 
156
    	$nouvel_ordre = 1;
167
    	$nouvel_ordre = 1;
157
    	
168
 
158
    	$requete_max_ordre = 'SELECT MAX(oo_ordre) as max_ordre FROM ods_observations WHERE '.
169
    	$requete_max_ordre = 'SELECT MAX(oo_ordre) as max_ordre FROM ods_observations WHERE '.
159
    		'oo_ce_participant = '.$this->proteger($id_participant);
170
    		'oo_ce_participant = '.$this->proteger($id_participant);
160
    	
171
 
161
    	$resultat_requete_ordre = $this->executerRequete($requete_max_ordre);
172
    	$resultat_requete_ordre = $this->executerRequete($requete_max_ordre);
162
    	
173
 
163
    	if(count($resultat_requete_ordre) > 0) {
174
    	if(count($resultat_requete_ordre) > 0) {
164
    		$nouvel_ordre = $resultat_requete_ordre[0]['max_ordre'] + 1; 
175
    		$nouvel_ordre = $resultat_requete_ordre[0]['max_ordre'] + 1;
165
    	}
176
    	}
166
    	
177
 
167
    	$requete_nouvelle_observation = 'INSERT INTO ods_observations '.
178
    	$requete_nouvelle_observation = 'INSERT INTO ods_observations '.
168
    		'(oo_ce_participant, oo_ordre, oo_ce_individu, oo_ce_evenement, oo_date, oo_commentaire, oo_date_saisie, oo_date_modification) '.
179
    		'(oo_ce_participant, oo_ordre, oo_ce_individu, oo_ce_evenement, oo_date, oo_commentaire, oo_date_saisie, oo_date_modification) '.
169
    		'VALUES '.
180
    		'VALUES '.
Line 174... Line 185...
174
	    		$this->proteger($donnees_obs_a_inserer['id_evenement']).','.
185
	    		$this->proteger($donnees_obs_a_inserer['id_evenement']).','.
175
	    		$this->proteger($donnees_obs_a_inserer['date_evenement']).','.
186
	    		$this->proteger($donnees_obs_a_inserer['date_evenement']).','.
176
	    		'"",'.
187
	    		'"",'.
177
	    		'NOW(),'.
188
	    		'NOW(),'.
178
	    		'NOW()'.
189
	    		'NOW()'.
179
    		')'; 
190
    		')';
180
	    		
191
 
181
	    return $this->executerRequeteSimple($requete_nouvelle_observation);
192
	    $this->executerRequeteSimple($requete_nouvelle_observation);
-
 
193
			return $this->renvoyerDernierIdInsere();
182
    }
194
    }
183
    
195
 
184
	private function modifierObservation($id_participant, $donnees_obs_a_inserer) {
196
	private function modifierObservation($id_participant, $donnees_obs_a_inserer) {
Line 185... Line 197...
185
 
197
 
186
    	$requete_modification_observation = 'UPDATE ods_observations '.
198
    	$requete_modification_observation = 'UPDATE ods_observations '.
187
    		'SET '.
199
    		'SET '.
188
    			'oo_date = '.$this->proteger($donnees_obs_a_inserer['date_evenement']).', '. 
200
    			'oo_date = '.$this->proteger($donnees_obs_a_inserer['date_evenement']).', '.
189
    			'oo_commentaire = '.$this->proteger($donnees_obs_a_inserer['commentaire']).', '. 
201
    			'oo_commentaire = '.$this->proteger($donnees_obs_a_inserer['commentaire']).', '.
190
    			'oo_date_modification = NOW() '.
202
    			'oo_date_modification = NOW() '.
191
    		'WHERE oo_id_observation = '.$donnees_obs_a_inserer['id_observation'].' '.
203
    		'WHERE oo_id_observation = '.$donnees_obs_a_inserer['id_observation'].' '.
192
    		'AND oo_ce_participant = '.$this->proteger($id_participant);
204
    		'AND oo_ce_participant = '.$this->proteger($id_participant);
193
    	
205
 
194
    	return $this->executerRequeteSimple($requete_modification_observation);
206
    	return $this->executerRequeteSimple($requete_modification_observation);
195
    }
207
    }
196
    
208
 
197
    private function renvoyerIdObservationSiEvenementDejaObserveCetteAnnee($id_evenement, $tableau_observations_cette_annee) {
209
    private function renvoyerIdObservationSiEvenementDejaObserveCetteAnnee($id_evenement, $tableau_observations_cette_annee) {
198
    	
210
 
199
    	foreach($tableau_observations_cette_annee as $observation_cette_annee) {
211
    	foreach($tableau_observations_cette_annee as $observation_cette_annee) {
200
    		
212
 
201
    		if($id_evenement == $observation_cette_annee['oo_ce_evenement']) {
213
    		if($id_evenement == $observation_cette_annee['oo_ce_evenement']) {
202
    			return $observation_cette_annee['oo_id_observation'];
214
    			return $observation_cette_annee['oo_id_observation'];
203
    		}
215
    		}
204
    	}
216
    	}
205
    	
217
 
206
    	return false;
218
    	return false;
207
    }
219
    }
208
    
220
 
209
	private function renvoyerIdEvenementSiChampDeFormulaireObservation($champ) {
221
	private function renvoyerIdEvenementSiChampDeFormulaireObservation($champ) {
210
    	    	
222
 
211
    	$tab_champ = explode('observation_',$champ);
223
    	$tab_champ = explode('observation_',$champ);
212
    	
224
 
213
    	if(count($tab_champ) > 1 && is_numeric($tab_champ[1])) {
225
    	if(count($tab_champ) > 1 && is_numeric($tab_champ[1])) {
214
    		return $tab_champ[1];
226
    		return $tab_champ[1];
215
    	}
227
    	}
216
    	
228
 
217
    	return false;
229
    	return false;
218
    }
230
    }
219
    
231
 
220
    private function formaterDateObservationPourBdd($date) {
232
    private function formaterDateObservationPourBdd($date) {
221
		    		
233
 
222
		$format = $this->config['appli']['format_date'];
234
		$format = $this->config['appli']['format_date'];
223
					
235
 
224
		if(!isset($format)) {
236
		if(!isset($format)) {
225
			$format = 'd/m/Y';
237
			$format = 'd/m/Y';
226
		}
238
		}
227
		
239
 
228
		$recherche = array('d','m','Y');
240
		$recherche = array('d','m','Y');
229
		$remplacement = array('([0-9]{1,2})','([0-9]{1,2})','([0-9]{4})');
241
		$remplacement = array('([0-9]{1,2})','([0-9]{1,2})','([0-9]{4})');
230
		
242
 
231
		$pattern_date_simple = str_replace($recherche, $remplacement, $format);
243
		$pattern_date_simple = str_replace($recherche, $remplacement, $format);
232
		
244
 
233
		$date_tab = explode('/', $date);
245
		$date_tab = explode('/', $date);
234
		$time = mktime(0,0,0,$date_tab[1],$date_tab[0],$date_tab[2]);
246
		$time = mktime(0,0,0,$date_tab[1],$date_tab[0],$date_tab[2]);
235
		
247
 
236
		if($this->estUneDateInvalide($date_tab[1],$date_tab[0],$date_tab[2])) {
248
		if($this->estUneDateInvalide($date_tab[1],$date_tab[0],$date_tab[2])) {
237
			$date_a_renvoyer = $date_tab[2].'-'.$date_tab[1].'-'.$date_tab[0];
249
			$date_a_renvoyer = $date_tab[2].'-'.$date_tab[1].'-'.$date_tab[0];
238
		} else {
-
 
239
			
-
 
240
			if(!ereg($pattern_date_simple, $date)) {			
-
 
241
				$time = strtotime($date);
-
 
242
			}
-
 
243
			
250
		} else {
244
			$date_a_renvoyer = date('Y-m-d h:i:s', $time); 	
251
			$date_a_renvoyer = date('Y-m-d', $time);
245
		}	
252
		}
246
		
253
 
247
		return $date_a_renvoyer;
254
		return $date_a_renvoyer;
248
	} 
255
	}
249
	
256
 
250
	private function estUneDateInvalide($jour, $mois, $annee) {
257
	private function estUneDateInvalide($jour, $mois, $annee) {
251
		return ($jour == '00' || $mois == '00' || $annee == '0000');
258
		return ($jour == '00' || $mois == '00' || $annee == '0000');
252
	}
259
	}
253
   
260
 
254
    /**
261
    /**
255
     * Méthode appelée pour supprimer un élément
262
     * Méthode appelée pour supprimer un élément
256
     */
263
     */
257
    public function deleteElement($uid) {
264
    public function deleteElement($uid) {
258
        
265
 
259
        // Envoie sur la sortie standard
266
        // Envoie sur la sortie standard
260
        $this->envoyer();
267
        $this->envoyer();
261
    }
268
    }
262
}
-
 
263
?>
269
}
-
 
270
?>