Subversion Repositories Sites.obs-saisons.fr

Rev

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