46,6 → 46,119 |
return $donnees_formatees; |
} |
|
public function getExportEvolutionPhenologiqueJson() { |
|
$evenements = explode(',', $_GET['evenements']); |
$condition_evenements = ''; |
$sous_condition_evenements = []; |
foreach($evenements as $evenement) { |
$sous_condition_evenements[] = 'oo_ce_evenement = '.$this->proteger($evenement); |
} |
$condition_evenements .= '('.implode(' OR ', $sous_condition_evenements).')'; |
$condition_espece = 'oi_ce_espece = '.$this->proteger($_GET['espece']); |
|
$formule_moyenne_date = 'FROM_UNIXTIME(AVG(UNIX_TIMESTAMP((oo_date))))'; |
|
$requete = 'SELECT '.$formule_moyenne_date.' as date_moyenne, oo_ce_evenement FROM ods_observations oo '. |
'LEFT JOIN ods_individus oi ON oi_id_individu = oo_ce_individu '. |
'INNER JOIN ods_especes oe ON oe.oe_espece_active = 1 '. |
'AND oe.oe_id_espece = oi_ce_espece '. |
'WHERE oo_date != "0000-00-00" AND DAY(oo_date) != "00" '. |
'AND '.$condition_espece.' '. |
'AND '.$condition_evenements.' '. |
'AND oo_ce_participant != "4" AND oo_ce_participant != 1 AND oo_absence_evenement = "0" '. |
'GROUP BY YEAR(oo_date), oo_ce_evenement '. |
'ORDER BY oo_date DESC'; |
|
$donnees = $this->executerRequete($requete); |
|
$donnees_formatees = []; |
foreach($donnees as $donnee) { |
$stade = $donnee['oo_ce_evenement']; |
if(empty($donnees_formatees[$stade])) { |
$donnees_formatees[$stade] = ['x' => [], 'y' => []]; |
} |
|
$date_time = strtotime($donnee['date_moyenne']); |
// on ramène grossièrement la date de l'année à une valeur numérique |
// ex: le 15 janvier devient 1.5 |
$nb_jours_dans_mois = date(' t ', strtotime($date_time)); |
$jour_mois_num = (date('d', $date_time)/$nb_jours_dans_mois)+date('m', $date_time); |
|
$donnees_formatees[$stade]['x'][] = $donnee['date_moyenne']; |
$donnees_formatees[$stade]['y'][] = $jour_mois_num; |
$donnees_formatees[$stade]['text'][] = date('d/m/Y', strtotime($donnee['date_moyenne'])); |
} |
|
$this->type_mime = 'application/json'; |
|
return $donnees_formatees; |
} |
|
public function getExportPhasesPhenologiquesJson() { |
|
$evenements = $this->obtenirValeursListeParAbreviation(self::ABBR_LISTE_EVENEMENTS); |
$evenements_a_regrouper = []; |
|
foreach($evenements as $evenement) { |
$nom_evenement = $evenement['ot_cle']; |
$nom_evenement_tab = explode('_', $nom_evenement); |
|
// évènement à plusieurs stades (evenement_floraison_stade_11 par exemple) |
if(count($nom_evenement_tab) == 4) { |
// on fait pointer la clé de l'évènement vers sont groupe (dans l'exemple floraison) |
$evenements_a_regrouper[$evenement['ot_id_triple']] = $nom_evenement_tab[1]; |
} else { |
// sinon ce sont des evènements à un seul stade (comme premiere_apparition) |
// auquel cas on supprime juste le suffixe evenement_ |
$evenements_a_regrouper[$evenement['ot_id_triple']] = str_replace('evenement_', '',$nom_evenement); |
} |
} |
|
$requete = 'SELECT oo_date, oo_ce_evenement FROM ods_observations oo '. |
'LEFT JOIN ods_individus oi ON oi_id_individu = oo_ce_individu '. |
'INNER JOIN ods_especes oe ON oe.oe_espece_active = 1 '. |
'AND oe.oe_id_espece = oi_ce_espece '. |
'WHERE oo_date != "0000-00-00" AND DAY(oo_date) != "00" '. |
'AND YEAR(oo_date) = '.$this->proteger($_GET['annee']).' '. |
'AND oi_ce_espece = '.$this->proteger($_GET['espece']).' '. |
'AND oo_ce_participant != "4" AND oo_ce_participant != 1 AND oo_absence_evenement = "0" '. |
'ORDER BY oo_date DESC'; |
|
$donnees = $this->executerRequete($requete); |
|
$donnees_formatees = []; |
// Regroupement d'évenements allant ensemble (ex.: début et fin de floraison) |
foreach($donnees as $donnee) { |
$cle_groupe_evenements = $evenements_a_regrouper[$donnee['oo_ce_evenement']]; |
if(empty($donnees_formatees[$cle_groupe_evenements])) { |
$donnees_formatees[$cle_groupe_evenements] = []; |
} |
|
$date_time = strtotime($donnee['oo_date']); |
// on ramène la date de l'année à une valeur numérique |
// ex: le 15 janvier devient 1.5 pour pouvoir afficher ça plus simplement |
// sur le graphique d'arrivée qui n'aura à travailler qu'avec des nombres |
$nb_jours_dans_mois = date(' t ', strtotime($date_time)); |
$jour_mois_num = (date('d', $date_time)/$nb_jours_dans_mois)+date('m', $date_time); |
// on garde 7 chiffres après la virgule car côté client on a besoin de s'assurer d'une largeur |
// suffisante lors du calcul de la légende de chaque point. |
// En fait la largeur du nombre détermine la largeur de son conteneur affiché lorsdu hover sur le point, |
// or il est nécessaire de remplacer cette légende lors de l'affichage (qui contient un nombre) par une vraie date. |
$jour_mois_num = number_format($jour_mois_num, 7); |
|
$donnees_formatees[$cle_groupe_evenements]['x'][] = $jour_mois_num; |
$donnees_formatees[$cle_groupe_evenements]['text'][] = date('d/m/Y', strtotime($donnee['oo_date'])); |
|
|
$donnees_formatees[$cle_groupe_evenements]['text_index']["'".$jour_mois_num."'"] = date('d/m/Y', strtotime($donnee['oo_date'])); |
} |
|
$this->type_mime = 'application/json'; |
|
return $donnees_formatees; |
} |
|
public function getExportStation($start = null,$limit = null, $order_by = 'oo_date') { |
|
$id_demo = $this->config['appli']['id_participant_demo']; |
231,6 → 344,16 |
$condition .= 'oo_ce_evenement = '.$this->proteger($valeur); |
break; |
|
case 'evenements': |
//$condition .= 'oo_ce_evenement IN ('.$this->proteger($valeur).')'; |
$evenements = explode(',', $valeur); |
$sous_condition_evenements = []; |
foreach($evenements as $evenement) { |
$sous_condition_evenements[] = 'oo_ce_evenement = '.$this->proteger($evenement); |
} |
$condition .= '('.implode(' OR ', $sous_condition_evenements).')'; |
break; |
|
case 'utilisateur': |
$condition .= 'oo_ce_participant = '.$this->proteger($valeur); |
break; |