Subversion Repositories Sites.obs-saisons.fr

Rev

Rev 137 | Rev 215 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

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