Line 44... |
Line 44... |
44 |
$this->type_mime = 'application/json';
|
44 |
$this->type_mime = 'application/json';
|
Line 45... |
Line 45... |
45 |
|
45 |
|
46 |
return $donnees_formatees;
|
46 |
return $donnees_formatees;
|
Line -... |
Line 47... |
- |
|
47 |
}
|
- |
|
48 |
|
- |
|
49 |
public function getExportEvolutionPhenologiqueJson() {
|
- |
|
50 |
|
- |
|
51 |
$evenements = explode(',', $_GET['evenements']);
|
- |
|
52 |
$condition_evenements = '';
|
- |
|
53 |
$sous_condition_evenements = [];
|
- |
|
54 |
foreach($evenements as $evenement) {
|
- |
|
55 |
$sous_condition_evenements[] = 'oo_ce_evenement = '.$this->proteger($evenement);
|
- |
|
56 |
}
|
- |
|
57 |
$condition_evenements .= '('.implode(' OR ', $sous_condition_evenements).')';
|
- |
|
58 |
$condition_espece = 'oi_ce_espece = '.$this->proteger($_GET['espece']);
|
- |
|
59 |
|
- |
|
60 |
$formule_moyenne_date = 'FROM_UNIXTIME(AVG(UNIX_TIMESTAMP((oo_date))))';
|
- |
|
61 |
|
- |
|
62 |
$requete = 'SELECT '.$formule_moyenne_date.' as date_moyenne, oo_ce_evenement FROM ods_observations oo '.
|
- |
|
63 |
'LEFT JOIN ods_individus oi ON oi_id_individu = oo_ce_individu '.
|
- |
|
64 |
'INNER JOIN ods_especes oe ON oe.oe_espece_active = 1 '.
|
- |
|
65 |
'AND oe.oe_id_espece = oi_ce_espece '.
|
- |
|
66 |
'WHERE oo_date != "0000-00-00" AND DAY(oo_date) != "00" '.
|
- |
|
67 |
'AND '.$condition_espece.' '.
|
- |
|
68 |
'AND '.$condition_evenements.' '.
|
- |
|
69 |
'AND oo_ce_participant != "4" AND oo_ce_participant != 1 AND oo_absence_evenement = "0" '.
|
- |
|
70 |
'GROUP BY YEAR(oo_date), oo_ce_evenement '.
|
- |
|
71 |
'ORDER BY oo_date DESC';
|
- |
|
72 |
|
- |
|
73 |
$donnees = $this->executerRequete($requete);
|
- |
|
74 |
|
- |
|
75 |
$donnees_formatees = [];
|
- |
|
76 |
foreach($donnees as $donnee) {
|
- |
|
77 |
$stade = $donnee['oo_ce_evenement'];
|
- |
|
78 |
if(empty($donnees_formatees[$stade])) {
|
- |
|
79 |
$donnees_formatees[$stade] = ['x' => [], 'y' => []];
|
- |
|
80 |
}
|
- |
|
81 |
|
- |
|
82 |
$date_time = strtotime($donnee['date_moyenne']);
|
- |
|
83 |
// on ramène grossièrement la date de l'année à une valeur numérique
|
- |
|
84 |
// ex: le 15 janvier devient 1.5
|
- |
|
85 |
$nb_jours_dans_mois = date(' t ', strtotime($date_time));
|
- |
|
86 |
$jour_mois_num = (date('d', $date_time)/$nb_jours_dans_mois)+date('m', $date_time);
|
- |
|
87 |
|
- |
|
88 |
$donnees_formatees[$stade]['x'][] = $donnee['date_moyenne'];
|
- |
|
89 |
$donnees_formatees[$stade]['y'][] = $jour_mois_num;
|
- |
|
90 |
$donnees_formatees[$stade]['text'][] = date('d/m/Y', strtotime($donnee['date_moyenne']));
|
- |
|
91 |
}
|
- |
|
92 |
|
- |
|
93 |
$this->type_mime = 'application/json';
|
- |
|
94 |
|
- |
|
95 |
return $donnees_formatees;
|
- |
|
96 |
}
|
- |
|
97 |
|
- |
|
98 |
public function getExportPhasesPhenologiquesJson() {
|
- |
|
99 |
|
- |
|
100 |
$evenements = $this->obtenirValeursListeParAbreviation(self::ABBR_LISTE_EVENEMENTS);
|
- |
|
101 |
$evenements_a_regrouper = [];
|
- |
|
102 |
|
- |
|
103 |
foreach($evenements as $evenement) {
|
- |
|
104 |
$nom_evenement = $evenement['ot_cle'];
|
- |
|
105 |
$nom_evenement_tab = explode('_', $nom_evenement);
|
- |
|
106 |
|
- |
|
107 |
// évènement à plusieurs stades (evenement_floraison_stade_11 par exemple)
|
- |
|
108 |
if(count($nom_evenement_tab) == 4) {
|
- |
|
109 |
// on fait pointer la clé de l'évènement vers sont groupe (dans l'exemple floraison)
|
- |
|
110 |
$evenements_a_regrouper[$evenement['ot_id_triple']] = $nom_evenement_tab[1];
|
- |
|
111 |
} else {
|
- |
|
112 |
// sinon ce sont des evènements à un seul stade (comme premiere_apparition)
|
- |
|
113 |
// auquel cas on supprime juste le suffixe evenement_
|
- |
|
114 |
$evenements_a_regrouper[$evenement['ot_id_triple']] = str_replace('evenement_', '',$nom_evenement);
|
- |
|
115 |
}
|
- |
|
116 |
}
|
- |
|
117 |
|
- |
|
118 |
$requete = 'SELECT oo_date, oo_ce_evenement FROM ods_observations oo '.
|
- |
|
119 |
'LEFT JOIN ods_individus oi ON oi_id_individu = oo_ce_individu '.
|
- |
|
120 |
'INNER JOIN ods_especes oe ON oe.oe_espece_active = 1 '.
|
- |
|
121 |
'AND oe.oe_id_espece = oi_ce_espece '.
|
- |
|
122 |
'WHERE oo_date != "0000-00-00" AND DAY(oo_date) != "00" '.
|
- |
|
123 |
'AND YEAR(oo_date) = '.$this->proteger($_GET['annee']).' '.
|
- |
|
124 |
'AND oi_ce_espece = '.$this->proteger($_GET['espece']).' '.
|
- |
|
125 |
'AND oo_ce_participant != "4" AND oo_ce_participant != 1 AND oo_absence_evenement = "0" '.
|
- |
|
126 |
'ORDER BY oo_date DESC';
|
- |
|
127 |
|
- |
|
128 |
$donnees = $this->executerRequete($requete);
|
- |
|
129 |
|
- |
|
130 |
$donnees_formatees = [];
|
- |
|
131 |
// Regroupement d'évenements allant ensemble (ex.: début et fin de floraison)
|
- |
|
132 |
foreach($donnees as $donnee) {
|
- |
|
133 |
$cle_groupe_evenements = $evenements_a_regrouper[$donnee['oo_ce_evenement']];
|
- |
|
134 |
if(empty($donnees_formatees[$cle_groupe_evenements])) {
|
- |
|
135 |
$donnees_formatees[$cle_groupe_evenements] = [];
|
- |
|
136 |
}
|
- |
|
137 |
|
- |
|
138 |
$date_time = strtotime($donnee['oo_date']);
|
- |
|
139 |
// on ramène la date de l'année à une valeur numérique
|
- |
|
140 |
// ex: le 15 janvier devient 1.5 pour pouvoir afficher ça plus simplement
|
- |
|
141 |
// sur le graphique d'arrivée qui n'aura à travailler qu'avec des nombres
|
- |
|
142 |
$nb_jours_dans_mois = date(' t ', strtotime($date_time));
|
- |
|
143 |
$jour_mois_num = (date('d', $date_time)/$nb_jours_dans_mois)+date('m', $date_time);
|
- |
|
144 |
// on garde 7 chiffres après la virgule car côté client on a besoin de s'assurer d'une largeur
|
- |
|
145 |
// suffisante lors du calcul de la légende de chaque point.
|
- |
|
146 |
// En fait la largeur du nombre détermine la largeur de son conteneur affiché lorsdu hover sur le point,
|
- |
|
147 |
// or il est nécessaire de remplacer cette légende lors de l'affichage (qui contient un nombre) par une vraie date.
|
- |
|
148 |
$jour_mois_num = number_format($jour_mois_num, 7);
|
- |
|
149 |
|
- |
|
150 |
$donnees_formatees[$cle_groupe_evenements]['x'][] = $jour_mois_num;
|
- |
|
151 |
$donnees_formatees[$cle_groupe_evenements]['text'][] = date('d/m/Y', strtotime($donnee['oo_date']));
|
- |
|
152 |
|
- |
|
153 |
|
- |
|
154 |
$donnees_formatees[$cle_groupe_evenements]['text_index']["'".$jour_mois_num."'"] = date('d/m/Y', strtotime($donnee['oo_date']));
|
- |
|
155 |
}
|
- |
|
156 |
|
- |
|
157 |
$this->type_mime = 'application/json';
|
- |
|
158 |
|
- |
|
159 |
return $donnees_formatees;
|
47 |
}
|
160 |
}
|
Line 48... |
Line 161... |
48 |
|
161 |
|
49 |
public function getExportStation($start = null,$limit = null, $order_by = 'oo_date') {
|
162 |
public function getExportStation($start = null,$limit = null, $order_by = 'oo_date') {
|
50 |
|
163 |
|
Line 229... |
Line 342... |
229 |
|
342 |
|
230 |
case 'evenement':
|
343 |
case 'evenement':
|
231 |
$condition .= 'oo_ce_evenement = '.$this->proteger($valeur);
|
344 |
$condition .= 'oo_ce_evenement = '.$this->proteger($valeur);
|
Line -... |
Line 345... |
- |
|
345 |
break;
|
- |
|
346 |
|
- |
|
347 |
case 'evenements':
|
- |
|
348 |
//$condition .= 'oo_ce_evenement IN ('.$this->proteger($valeur).')';
|
- |
|
349 |
$evenements = explode(',', $valeur);
|
- |
|
350 |
$sous_condition_evenements = [];
|
- |
|
351 |
foreach($evenements as $evenement) {
|
- |
|
352 |
$sous_condition_evenements[] = 'oo_ce_evenement = '.$this->proteger($evenement);
|
- |
|
353 |
}
|
- |
|
354 |
$condition .= '('.implode(' OR ', $sous_condition_evenements).')';
|
232 |
break;
|
355 |
break;
|
233 |
|
356 |
|
234 |
case 'utilisateur':
|
357 |
case 'utilisateur':
|
Line 235... |
Line 358... |
235 |
$condition .= 'oo_ce_participant = '.$this->proteger($valeur);
|
358 |
$condition .= 'oo_ce_participant = '.$this->proteger($valeur);
|