Subversion Repositories Sites.obs-saisons.fr

Compare Revisions

Ignore whitespace Rev 206 → Rev 207

/trunk/applications/jrest/services/OdsExport.php
New file
0,0 → 1,267
<?php
 
class OdsExport extends OdsTriple {
const PREFIXE = 'get';
const ABBR_LISTE_EVENEMENTS = 'evenement';
const ABBR_LISTE_ESPECES = 'espece';
/**
* 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 {
$methode = self::PREFIXE.$type;
if (method_exists($this, $methode)) {
array_shift($param);
$info = $this->$methode($param);
} else {
$this->messages[] = "Le type d'information demandé '$type' n'est pas disponible.";
}
}
// Envoi sur la sortie standard
$this->envoyer($info);
}
public function getExportObservation($start = null,$limit = null, $order_by = 'oo_date') {
$requete_selection_observations = 'SELECT * FROM ods_observations '.
' LEFT JOIN ods_individus '.
' ON oi_id_individu = oo_ce_individu'.
' LEFT JOIN ods_stations '.
' ON oi_ce_station = os_id_station ';
$requete_selection_observations .= $this->construireConditionRequete();
$requete_selection_observations .= ' ORDER BY oo_date DESC';
$res_selection_observations = $this->executerRequete($requete_selection_observations);
return $res_selection_observations;
}
public function construireConditionRequete() {
$condition = ' WHERE oo_date != "0000-00-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':
$condition .= 'YEAR(oo_date) = '.$this->proteger($valeur);
break;
case 'mois':
$condition .= 'MONTH(oo_date) <= '.$this->proteger($valeur);
break;
case 'espece':
$condition .= 'oi_ce_espece = '.$this->proteger($valeur);
break;
case 'evenement':
$condition .= 'oo_ce_evenement = '.$this->proteger($valeur);
break;
case 'departement':
$condition .= 'os_ce_commune LIKE "'.$valeur.'%" ';
break;
case 'utilisateur':
$condition .= 'oo_ce_participant = '.$this->proteger($valeur);
break;
default:
break;
}
$condition .= ' AND ';
}
$condition = rtrim($condition,'AND ');
$condition .= ' AND oo_ce_participant != 4';
return $condition;
}
public function getExportObservationJson() {
$donnees = $this->getExportObservation();
$donnees_formatees = $this->formaterPourExportJson($donnees);
return $donnees_formatees;
}
public function formaterPourExportJson($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);
$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'];
$infos_formatees = array(
'date' => $date_observation_formatee,
'evenenement' => $infos_evenement['nom'],
'code_bbch' => $infos_evenement['numero'],
'nom_scientifique' => $nom_espece,
);
$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'];
//$resultats_formates[$id_station]['nom_commune'] = $gestionnaire_communes->obtenirNomCommuneParCodeInsee($observations_infos['os_ce_commune']);
$resultats_formates[$id_station]['latitude'] = $observations_infos['os_latitude'];
$resultats_formates[$id_station]['longitude'] = $observations_infos['os_longitude'];
$resultats_formates[$id_station]['altitude'] = $observations_infos['os_altitude'];
$resultats_formates[$id_station]['milieu'] = $observations_infos['os_milieu'];
$resultats_formates[$id_station]['participant'] = $observations_infos['os_ce_participant'];
}
$resultats_formates[$id_station]['obs'][$id_observation] = $infos_formatees;
}
return $resultats_formates;
}
public function getExportObservationCsv() {
$utilisateur = new Utilisateur();
$est_admin = $utilisateur->estAdmin();
if($est_admin) {
$donnees = $this->getExportObservation();
$donnees_formatees = $this->formaterPourExportCSV($donnees);
$chaine_csv = $this->convertirTableauAssocVersCSV($donnees_formatees);
$this->envoyerFichier($chaine_csv);
} else {
echo "echo non non non non non, vous êtes pas admin !!!!";
}
}
public function formaterPourExportCSV($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);
$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'];
$infos_formatees = array(
'id_observation' => $id_observation,
'date' => $date_observation_formatee,
'evenenement' => $infos_evenement['nom'],
'code_bbch' => $infos_evenement['numero'],
'nom_scientifique' => $nom_espece,
'station' => $observations_infos['os_nom'],
'code_commune' => $observations_infos['os_ce_commune'],
'nom_commune' => $gestionnaire_communes->obtenirNomCommuneParCodeInsee($observations_infos['os_ce_commune']),
'latitude' => $observations_infos['os_latitude'],
'longitude' => $observations_infos['os_longitude'],
'altitude' => $observations_infos['os_altitude'],
'milieu' => $observations_infos['os_milieu'],
'participant' => $observations_infos['os_ce_participant']
);
$resultats_formates[] = $infos_formatees;
}
return $resultats_formates;
}
public function convertirTableauAssocVersCSV($tableau) {
$csv = '';
$colonnes = array_keys($tableau[0]);
$csv .= implode(';',$colonnes).";\n";
foreach($tableau as $elements) {
$csv .= implode(';',$elements).";\n";
}
return $csv;
}
public function envoyerFichier($contenu) {
$nom_fichier = "observations_export.csv";
$chemin_fichier = $this->config['appli']['chemin_fichiers_temp'].'/'.$nom_fichier;
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) {
 
}
}
?>