1,7 → 1,7 |
<?php |
|
class OdsExport extends OdsTriple { |
|
|
const PREFIXE = 'get'; |
const ABBR_LISTE_EVENEMENTS = 'evenement'; |
const ABBR_LISTE_ESPECES = 'espece'; |
8,19 → 8,19 |
const ABBR_LISTE_MILIEUX = 'environnement'; |
|
private $type_mime = 'text/html'; |
|
|
/** |
* Méthodes d'extractions d'informations |
*/ |
|
|
/** |
* Méthode appelée avec une requête de type GET. |
* |
*/ |
function getElement($param = array()) { |
|
|
$type = $param[0]; |
|
|
if ($type == '*' || is_numeric($type)) { |
$info = $this->getElementParDefaut($param); |
} else { |
35,40 → 35,40 |
|
$this->envoyer($info,$this->type_mime); |
} |
|
|
public function getExportStationJson() { |
|
|
$donnees = $this->getExportStation(); |
$donnees_formatees = $this->formaterListeStationPourExportJson($donnees); |
|
|
$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']; |
$requete_selection_stations = 'SELECT * FROM ods_stations WHERE os_ce_participant != '.$this->proteger($id_demo); |
$requete_selection_stations = 'SELECT * FROM ods_stations WHERE os_ce_participant != '.$this->proteger($id_demo); |
$res_selection_stations = $this->executerRequete($requete_selection_stations); |
|
|
return $res_selection_stations; |
} |
|
|
public function getExportUtilisateurCsv() { |
|
|
$controle = new ControleUtilisateur($this->config); |
$controle->authentifierAdmin(); |
|
|
$gestionnaire_utilisateurs = new OdsUtilisateur($this->config); |
$utilisateurs = $gestionnaire_utilisateurs->getListeUtilisateurAvecInfosComplementairesFormateeId(); |
|
|
$utilisateurs_formates = array(); |
$premiere_annee = 2006; |
|
|
$nb_obs = $this->compterObservationsParUtilisateur(); |
$annees = array(); |
|
|
foreach ($utilisateurs as $id => $utilisateur) { |
$utilisateur_formate = array( |
'id' => isset($utilisateur['uid']) ? $utilisateur['uid'] : '', |
81,15 → 81,15 |
'type' => isset($utilisateur['profile_type']) ? $utilisateur['profile_type'] : '', |
'date inscription' => isset($utilisateur['created']) ? date('d/m/Y', $utilisateur['created']) : '', |
); |
|
|
for($i = $premiere_annee; $i <= date('Y'); $i++) { |
$annees['annee '.$i] += isset($nb_obs[$utilisateur['uid']]) && isset($nb_obs[$utilisateur['uid']][$i]) ? $nb_obs[$utilisateur['uid']][$i] : '0'; |
$utilisateur_formate['annee '.$i] = isset($nb_obs[$utilisateur['uid']]) && isset($nb_obs[$utilisateur['uid']][$i]) ? $nb_obs[$utilisateur['uid']][$i] : '0'; |
} |
|
|
$utilisateurs_formates[] = $utilisateur_formate; |
} |
|
|
$ligne_total_obs = array( |
'id' => '', |
'pseudo' => '', |
106,38 → 106,38 |
$csv = $this->convertirTableauAssocVersCSV($utilisateurs_formates); |
$this->envoyerFichier($csv, 'utilisateurs'); |
} |
|
|
private function compterObservationsParUtilisateur() { |
$requete = 'SELECT COUNT(*) as nb_obs, oo_ce_participant as participant, YEAR(oo_date) as annee '. |
'FROM `ods_observations` WHERE oo_date != "0000-00-00" GROUP BY oo_ce_participant, YEAR(oo_date)'; |
|
|
$res_selection_obs = $this->executerRequete($requete); |
$stats = array(); |
foreach ($res_selection_obs as $obs_nb) { |
$stats[$obs_nb['participant']][$obs_nb['annee']] = $obs_nb['nb_obs']; |
} |
|
|
return $stats; |
} |
|
|
public function formaterListeStationPourExportJson($tableau_stations_infos) { |
|
|
$gestionnaire_especes = new OdsEspece($this->config); |
$gestionnaire_communes = new OdsCommune($this->config); |
$gestionnaire_utilisateurs = new OdsUtilisateur($this->config); |
|
|
$especes = $gestionnaire_especes->getToutesEspeces(); |
$evenements = $this->obtenirValeursListeParAbreviation(self::ABBR_LISTE_EVENEMENTS); |
$milieux = $this->obtenirValeursListeParAbreviation(self::ABBR_LISTE_MILIEUX); |
$utilisateurs = $gestionnaire_utilisateurs->getListeUtilisateurAvecInfosComplementairesFormateeId(); |
$communes = $gestionnaire_communes->obtenirCommunesLieesAStationIndexeesCodeInsee(); |
|
|
$resultats_formates = array(); |
$stats = array('total' => count($tableau_stations_infos)); |
|
foreach($tableau_stations_infos as $stations_infos) { |
|
foreach($tableau_stations_infos as $stations_infos) { |
$commune = isset($communes[$stations_infos['os_ce_commune']]['oc_nom']) ? $communes[$stations_infos['os_ce_commune']]['oc_nom'] : ''; |
|
|
$id_station = $stations_infos['os_id_station']; |
$resultats_formates[$id_station]['nom'] = $stations_infos['os_nom']; |
$resultats_formates[$id_station]['code_commune'] = is_numeric($stations_infos['os_ce_commune']) ? substr($stations_infos['os_ce_commune'], 0, 2) : ''; |
146,7 → 146,7 |
$resultats_formates[$id_station]['longitude'] = $stations_infos['os_longitude']; |
$resultats_formates[$id_station]['altitude'] = $stations_infos['os_altitude']; |
$resultats_formates[$id_station]['type_participant'] = 'Particulier'; |
|
|
if(isset($utilisateurs[$stations_infos['os_ce_participant']])) { |
$participant = $utilisateurs[$stations_infos['os_ce_participant']]; |
$resultats_formates[$id_station]['participant']['id'] = $participant['uid']; |
163,14 → 163,14 |
$stats[$resultats_formates[$id_station]['type_participant']] = 1; |
} |
} |
$resultat = array('stats' => $stats, 'stations' => $resultats_formates); |
$resultat = array('stats' => $stats, 'stations' => $resultats_formates); |
return $resultat; |
} |
|
|
public function getExportObservation($start = null,$limit = null, $order_by = 'oo_date') { |
|
|
$requete_selection_observations = 'SELECT oo.*, oi.*, os.*, oc.* FROM ods_observations oo'. |
' LEFT JOIN ods_individus oi'. |
' LEFT JOIN ods_individus oi'. |
' ON oi_id_individu = oo_ce_individu'. |
' INNER JOIN ods_especes oe'. |
' ON oe.oe_espece_active = 1 '. |
187,7 → 187,7 |
|
return $res_selection_observations; |
} |
|
|
private function creerFiltreIdZoneGeo($valeurMasque) { |
$masque = ''; |
$dept = $valeurMasque; |
196,49 → 196,49 |
$masque = " oc_code_insee LIKE ".$this->proteger($dept); |
return $masque; |
} |
|
|
public function construireConditionRequete() { |
|
|
$condition = ' WHERE oo_date != "0000-00-00" AND DAY(oo_date) != "00" AND '; |
|
|
foreach($_GET as $cle => $valeur) { |
|
|
switch($cle) { |
|
|
case 'type_espece': |
$condition .= 'oi_ce_espece IN (SELECT oe_id_espece FROM ods_especes WHERE oe_ce_type = '.$this->proteger($valeur).')'; |
break; |
|
|
case 'annee': |
if($this->anneesMultiplesDemandees($valeur)) { |
$valeur = rtrim($valeur,','); |
$condition .= 'YEAR(oo_date) IN ('.$valeur.')'; |
$condition .= 'YEAR(oo_date) IN ('.$valeur.')'; |
} else { |
$condition .= 'YEAR(oo_date) '; |
$condition .= ' = '.$this->proteger($valeur); |
} |
break; |
|
|
case 'mois': |
$condition .= 'MONTH(oo_date) <= '.$this->proteger($valeur); |
break; |
|
|
case 'espece': |
$condition .= 'oi_ce_espece IN ('.$valeur.') '; |
break; |
|
|
case 'evenement': |
$condition .= 'oo_ce_evenement = '.$this->proteger($valeur); |
break; |
|
|
case 'utilisateur': |
$condition .= 'oo_ce_participant = '.$this->proteger($valeur); |
$condition .= 'oo_ce_participant = '.$this->proteger($valeur); |
break; |
|
|
case 'departement' : |
$condition .= $this->creerFiltreIdZoneGeo($valeur); |
break; |
|
|
case 'region' : |
$requete_association_region .= 'SELECT * FROM ods_triples WHERE ot_ce_parent = 36 AND ot_valeur = '.$valeur; |
$listeAssociationRegions = $this->executerRequete($requete_association_region); |
250,21 → 250,21 |
break; |
default: |
} |
|
|
$condition .= ' AND '; |
} |
|
|
$condition = rtrim($condition,'AND '); |
|
|
$id_demo = $this->config['appli']['id_participant_demo']; |
$id_admin = $this->config['appli']['id_participant_admin']; |
|
|
$condition .= ' AND oo_ce_participant != '.$id_demo; |
$condition .= ' AND oo_ce_participant != '.$id_admin; |
|
|
return $condition; |
} |
|
|
private function anneesMultiplesDemandees($annee) { |
// un ensemble d'identifiants est une suite d'identifiants séparés par des virgules |
// sans virgule terminale |
271,51 → 271,51 |
$reg_exp = "/^(([0-9])+,)*([0-9])+$/"; |
return preg_match($reg_exp, $annee); |
} |
|
|
public function getExportObservationPlat() { |
|
|
$donnees = $this->getExportObservation(); |
$donnees_formatees = $this->formaterListeObservationPourExportCSV($donnees); |
|
$donnees_formatees = $this->formaterListeObservationPourExportCSV($donnees); |
|
return $donnees_formatees ; |
} |
|
|
public function getExportObservationJson() { |
|
|
$donnees = $this->getExportObservation(); |
$donnees_formatees = $this->formaterListeObservationPourExportJson($donnees); |
|
$this->type_mime = 'application/json'; |
|
|
return $donnees_formatees; |
} |
|
|
public function formaterListeObservationPourExportJson($tableau_observations_infos) { |
|
|
$gestionnaire_especes = new OdsEspece($this->config); |
$gestionnaire_communes = new OdsCommune($this->config); |
|
|
$especes = $gestionnaire_especes->getToutesEspeces(); |
$evenements = $this->obtenirValeursListeParAbreviation(self::ABBR_LISTE_EVENEMENTS); |
$milieux = $this->obtenirValeursListeParAbreviation(self::ABBR_LISTE_MILIEUX); |
|
|
$resultats_formates = array(); |
|
|
foreach($tableau_observations_infos as $observations_infos) { |
|
|
$id_espece = $observations_infos['oi_ce_espece']; |
if($id_espece == 0) { |
continue; |
} |
$nom_espece = $especes[$id_espece]['nom_scientifique']; |
|
|
$id_evenement = $observations_infos['oo_ce_evenement']; |
$chaine_evenement = $evenements[$id_evenement]['ot_cle']; |
|
|
$infos_evenement = $this->renvoyerInformationStadeAPartirChaineTriple($chaine_evenement); |
|
|
$date_observation_formatee = date($this->config['appli']['format_date'], strtotime($observations_infos['oo_date'])); |
|
|
$id_observation = $observations_infos['oo_id_observation']; |
$infos_formatees = array( |
'date' => $date_observation_formatee, |
325,9 → 325,9 |
'id_espece' => $id_espece, |
'participant' => $observations_infos['os_ce_participant'] |
); |
|
|
$id_station = $observations_infos['oi_ce_station']; |
|
|
if(!isset($resultats_formates[$id_station])) { |
$resultats_formates[$id_station]['station'] = $observations_infos['os_nom']; |
$resultats_formates[$id_station]['code_commune'] = $observations_infos['os_ce_commune']; |
342,52 → 342,53 |
} |
$resultats_formates[$id_station]['participant'] = $observations_infos['os_ce_participant']; |
} |
|
|
$resultats_formates[$id_station]['obs'][$id_observation] = $infos_formatees; |
} |
|
|
return $resultats_formates; |
} |
|
|
public function getFichierExportObservationCsv() { |
|
|
$donnees = $this->getExportObservation(); |
$donnees_formatees = $this->formaterListeObservationPourExportCSV($donnees); |
$donnees_formatees = $this->formaterListeObservationPourExportCSV($donnees); |
$chaine_csv = $this->convertirTableauAssocVersCSV($donnees_formatees); |
|
|
$this->envoyerFichier($chaine_csv); |
} |
|
|
public function formaterListeObservationPourExportCSV($tableau_observations_infos) { |
|
|
$gestionnaire_especes = new OdsEspece($this->config); |
$gestionnaire_communes = new OdsCommune($this->config); |
$gestionnaire_utilisateurs = new OdsUtilisateur($this->config); |
|
|
$especes = $gestionnaire_especes->getToutesEspeces(); |
$evenements = $this->obtenirValeursListeParAbreviation(self::ABBR_LISTE_EVENEMENTS); |
$milieux = $this->obtenirValeursListeParAbreviation(self::ABBR_LISTE_MILIEUX); |
|
|
$codes_insee_communes = array(); |
|
|
$resultats_formates = array(); |
foreach($tableau_observations_infos as $observations_infos) { |
|
|
$id_espece = $observations_infos['oi_ce_espece']; |
$nom_espece = $especes[$id_espece]['nom_scientifique']; |
|
|
$id_evenement = $observations_infos['oo_ce_evenement']; |
$chaine_evenement = $evenements[$id_evenement]['ot_cle']; |
|
|
$infos_evenement = $this->renvoyerInformationStadeAPartirChaineTriple($chaine_evenement); |
|
|
$date_observation_formatee = date($this->config['appli']['format_date'], strtotime($observations_infos['oo_date'])); |
|
|
$id_observation = $observations_infos['oo_id_observation']; |
$milieu = isset($milieux[$observations_infos['os_ce_environnement']]['ot_valeur']) ? $milieux[$observations_infos['os_ce_environnement']]['ot_valeur'] : ''; |
|
|
$infos_formatees = array( |
'id_observation' => $id_observation, |
'id_individu' => $observations_infos['oo_ce_individu'], |
'date' => $date_observation_formatee, |
'evenenement' => $infos_evenement['nom'], |
'code_bbch' => $infos_evenement['numero'], |
403,9 → 404,9 |
'pseudo_participant' => '', |
'mail_participant' => '' |
); |
|
|
$resultats_formates[] = $infos_formatees; |
|
|
if(is_numeric($observations_infos['os_ce_commune'])) { |
$codes_insee_communes[] = $observations_infos['os_ce_commune']; |
} |
413,26 → 414,26 |
|
$correspondance_codes_insee_noms = $gestionnaire_communes->obtenirTableauNomsCommunesParTableauCodesInsee($codes_insee_communes); |
$correspondance_id_utilisateur = $gestionnaire_utilisateurs->getListeUtilisateurFormateeId(); |
|
|
foreach($resultats_formates as &$resultat) { |
|
if(isset($correspondance_codes_insee_noms[$resultat['code_commune']]) && trim($correspondance_codes_insee_noms[$resultat['code_commune']]) != '') { |
|
if(isset($correspondance_codes_insee_noms[$resultat['code_commune']]) && trim($correspondance_codes_insee_noms[$resultat['code_commune']]) != '') { |
$resultat['nom_commune'] = $correspondance_codes_insee_noms[$resultat['code_commune']]; |
} |
|
|
$resultat['pseudo_participant'] = isset($correspondance_id_utilisateur[$resultat['id_participant']]) ? $correspondance_id_utilisateur[$resultat['id_participant']]['name'] : ''; |
$resultat['mail_participant'] = isset($correspondance_id_utilisateur[$resultat['id_participant']]) ? $correspondance_id_utilisateur[$resultat['id_participant']]['mail'] : ''; |
} |
|
|
return $resultats_formates; |
} |
|
|
public function convertirTableauAssocVersCSV($tableau) { |
|
|
$csv = ''; |
$colonnes = array_keys($tableau[0]); |
$csv .= implode(';',$colonnes).";\n"; |
|
|
foreach($tableau as $elements) { |
$ligne = ""; |
// parcours des cases de chaque ligne nécessaire car si on utilise implode |
442,39 → 443,39 |
} |
$csv .= $ligne."\n"; |
} |
|
|
return $csv; |
} |
|
|
public function envoyerFichier($contenu, $nom = 'observations_export') { |
|
|
$nom_fichier = $nom.".csv"; |
$chemin_fichier = $this->config['appli']['chemin_fichiers_temp'].'/'.$nom_fichier; |
|
file_put_contents($chemin_fichier, $contenu); |
|
|
file_put_contents($chemin_fichier, $contenu); |
|
$contenu = file_get_contents($chemin_fichier); |
$taille_fichier = filesize($chemin_fichier); |
|
|
unlink($chemin_fichier); |
|
|
ini_set('zlib.output_compression','Off'); |
|
|
header('Pragma: public'); |
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); |
header('Cache-Control: must-revalidate, pre-check=0, post-check=0, max-age=0'); |
|
|
header('Content-Tranfer-Encoding: none'); |
|
|
header('Content-Type: application/octetstream; name="'.$nom_fichier.'"'); |
header('Content-Disposition: attachement; filename="'.$nom_fichier.'"'); |
|
|
header('Content-Length: '.$taille_fichier); |
|
|
echo $contenu; |
exit(); |
} |
|
|
private function formaterInformationPourEnvoi($tableauinfos) { |
|
} |