Subversion Repositories Sites.obs-saisons.fr

Compare Revisions

Ignore whitespace Rev 329 → Rev 330

/trunk/applications/jrest/services/OdsExport.php
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;