Rev 289 | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php
class OdsEspece extends OdsTriple {
const PREFIXE = 'get';
const ABBR_LISTE_TYPE_ESPECE = 'type_espece';
/**
* 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);
}
/**
* Méthode appelée pour ajouter un élément.
*/
public function createElement($params) {
// fonction devant uniquement être appelée depuis le serveur
// lui-même, cad par l'application de saisie
$controle = new ControleUtilisateur($this->config);
$controle->controleAppelIpAutorisee();
$requete = 'INSERT INTO ods_especes ';
$champs = array('oe_id_espece');
$valeurs = array("''");
foreach($params as $param => $valeur) {
$champs[] = 'oe_'.$param;
$valeur = stripslashes($valeur);
$valeurs[] = $this->proteger($valeur);
}
$champs[] = 'oe_ce_climat';
$valeurs[] = $this->proteger(0);
$requete .= '('.implode(', ', $champs).') VALUES ('.implode(', ', $valeurs).')';
$ajout_espece = $this->executerRequeteSimple($requete);
if(!$ajout_espece) {
$retour['erreurs'] = 'erreur d\'ajout';
} else {
$retour = 'ok';
}
$this->envoyer($retour);
}
/**
* Méthode appelée pour mettre à jour un élément
*/
public function updateElement($uid, $params) {
// fonction devant uniquement être appelée depuis le serveur
// lui-même, cad par l'application de saisie
$controle = new ControleUtilisateur($this->config);
$controle->controleAppelIpAutorisee();
$requete = 'UPDATE ods_especes SET ';
foreach($params as $param => $valeur) {
$valeur = stripslashes($valeur);
$requete .= 'oe_'.$param.' = '.$this->proteger($valeur).', ';
}
$requete = rtrim ($requete, ', ');
$requete .= ' WHERE oe_id_espece = '.$this->proteger($uid[0]);
$modification_espece = $this->executerRequeteSimple($requete);
if(!$modification_espece) {
$retour['erreurs'] = 'erreur de modification';
} else {
$retour = 'ok';
}
$this->envoyer($retour);
}
/**
* Méthode appelée pour supprimer un élément
*/
public function deleteElement($uid) {
//TODO: méthode de suppression d'espèce spéciale aux admins
}
/** ======================= Methodes d'accès au informations ================================ */
private function getElementParDefaut() {
return $this->getEspecesParType();
}
private function getEspece($params) {
$id_espece = $params[0];
$requete_informations_espece = 'SELECT * FROM ods_especes '.
'WHERE oe_id_espece = '.$this->proteger($id_espece);
$informations_espece = $this->executerRequete($requete_informations_espece);
$informations_espece_formatees = array();
if(!empty($informations_espece)) {
$informations_espece_formatees = $this->formaterTableauEspecePourEnvoi($informations_espece[0]);
}
return $informations_espece_formatees;
}
private function getEspecesPourStation($params) {
$id_station = $params[0];
$requete_especes_pour_station = 'SELECT * FROM ods_especes '.
'WHERE oe_id_espece IN '.
'( '.
'SELECT oi_ce_espece FROM ods_individus '.
'WHERE oi_ce_station = '.$this->proteger($id_station).
') '.
' AND oe_espece_active = 1 '.
'ORDER BY oe_ce_type, oe_nom_vernaculaire';
$especes_pour_station = $this->executerRequete($requete_especes_pour_station);
foreach($especes_pour_station as &$espece_dans_station) {
$espece_dans_station = $this->formaterTableauEspecePourEnvoi($espece_dans_station);
}
return $especes_pour_station;
}
private function getEspecesActivesParType() {
return $this->getEspecesParType(true);
}
private function getEspecesParType() {
return $this->obtenirEspecesParType(false);
}
private function getEspecesParTypeAdmin() {
return $this->obtenirEspecesParType(true);
}
private function obtenirEspecesParType($toutes_les_especes = false) {
$requete_toute_espece = 'SELECT * FROM ods_especes '.
($toutes_les_especes ? '' : ' WHERE oe_espece_active = 1 ').
'ORDER BY oe_ce_type, oe_nom_vernaculaire';
$liste_espece = $this->executerRequete($requete_toute_espece);
$liste_type_espece = $this->obtenirValeursListeParAbreviation(self::ABBR_LISTE_TYPE_ESPECE);
$especes_par_type = array();
foreach($liste_espece as $espece) {
$espece = $this->formaterTableauEspecePourEnvoi($espece);
$type = $espece['type'];
$nom_type = $liste_type_espece[$type]['ot_valeur'];
if(!isset($especes_par_type[$type])) {
$especes_par_type[$type] = array(
'nom' => $nom_type,
'especes' => array()
);
}
$especes_par_type[$type]['especes'][$espece['id_espece']] = $espece;
}
return $especes_par_type;
}
public function getToutesEspeces() {
$requete_toute_espece = 'SELECT * FROM ods_especes WHERE oe_espece_active = 1 ORDER BY oe_nom_vernaculaire ';
$liste_espece = $this->executerRequete($requete_toute_espece);
$liste_type_espece = $this->obtenirValeursListeParAbreviation(self::ABBR_LISTE_TYPE_ESPECE);
$especes_par_id = array();
foreach($liste_espece as $espece) {
$espece = $this->formaterTableauEspecePourEnvoi($espece);
$especes_par_id[$espece['id_espece']] = $espece;
}
return $especes_par_id;
}
private function formaterTableauEspecePourEnvoi($espece) {
return array(
'id_espece' => $espece['oe_id_espece'],
'nom_vernaculaire' => $espece['oe_nom_vernaculaire'],
'nom_scientifique' => $espece['oe_nom_scientifique'],
'espece_ecole' => $espece['oe_espece_ecole'],
'description' => $espece['oe_description'],
'climat' => $espece['oe_ce_climat'],
'evenements' => $espece['oe_ce_evenements'],
'type' => $espece['oe_ce_type'],
'active' => $espece['oe_espece_active']
);
}
}
?>