Subversion Repositories eFlore/Applications.cel

Compare Revisions

Ignore whitespace Rev 2120 → Rev 2121

/trunk/jrest/services/CelSuppressionObservation.php
New file
0,0 → 1,76
<?php
/**
* @category PHP
* @package jrest
* @author Aurélien PERONNET <aurelien@tela-botania.org>
* @author Jean-Pascal MILCENT <jpm@tela-botania.org>
* @copyright 2014 Tela-Botanica
* @license Licence CECILL <http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt>
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
*
*/
class CelSuppressionObservation extends Cel {
 
/**
* Méthode appelée avec une requête de type DELETE.
* Dépublie l'obs correspondant à l'id passé en parametre (dans le futur une suppression sera possible)
* Supporte l'appel multiple en passant plusieurs numéros séparés par des virgules
*
* @param string uid[0] : id(s) observation(s) obligatoire(s) séparés par des virgules
*
*/
public function deleteElement($uid){
if ($this->controlerAccessibiliteWs()) {
if ($this->controleAppelIpAutorisee()) {
// Initialisation des paramètres
$idObs = isset($uid[0]) ? $uid[0] : '';
 
// Vérifier les paramètres
$this->verifierIdentifiantObs($idObs);
$idObs = explode(',', $idObs);
 
$gestionnaireObs = new GestionObservation($this->config);
// par défaut on ne fait que dépublier les obs à moins que la suppression ne soit demandée
// expréssement par le paramètre mode
if(isset($_GET['mode']) && $_GET['mode'] == "supprimer") {
// TODO: suppression réelle des obs par ce mode, et réorganiser le code de suppression
// des obs à travers tous les web services et dans gestion observation
header('HTTP/1.0 501 Not Implemented');
die("La suppression réelle des observations n'est pas encore implémentée.");
} else {
$detransmissionObs = $gestionnaireObs->modifierTransmissionObservation($idObs, false);
}
 
if ($detransmissionObs) {
$this->envoyer('OK');
} else {
$this->envoyer("Les observations n'ont pas pu être dépubliées.");
}
} else {
header('Status: 401 Unauthorized');
$message = "Accès interdit. \n"."Vous n'êtes pas autorisé à accéder à ce service depuis '{$_SERVER['REMOTE_ADDR']}' !\n";
die($message);
}
}
}
 
public function controlerAccessibiliteWs() {
if (self::ARRET_SERVICE) {
header('Status: 503 Service Temporarily Unavailable');
die("La suppression d'images du CEL est temporairement désactivée.");
}
return true;
}
 
private function verifierIdentifiantObs($chaine) {
$ok = preg_match('/^(?:[0-9]+,)*[0-9]+$/', $chaine);
if ($ok == false) {
header("HTTP/1.0 412 Precondition Failed"); // TODO: PHP: 5.4 http_response_code(412);
header("Content-Type: text/plain; charset=utf-8");
die("Indiquer un ou plusieurs identifiants d'obs séparés par des virgules.");
}
return $ok;
}
}
?>
/trunk/jrest/lib/GestionObservation.php
271,6 → 271,26
return $resultat_modification;
}
 
public function modifierTransmissionObservation($ids_obs_ou_tableau, $publier) {
if(is_array($ids_obs_ou_tableau)) {
$ids_obs_ou_tableau = array_map(array(Cel::db(),'proteger'),$ids_obs_ou_tableau);
$chaine_ids_obs = implode(',',$ids_obs_ou_tableau);
} else {
$chaine_ids_obs = Cel::db()->proteger($ids_obs_ou_tableau);
}
$etat_transmission = $publier ? 1 : 0;
$requete = "UPDATE cel_obs ".
"SET transmission = ".$etat_transmission.", ".
"date_modification = NOW() ".
"WHERE id_observation IN (".$chaine_ids_obs.")";
$resultat_modif_obs = Cel::db()->executerRequeteSimple($requete);
return $resultat_modif_obs;
}
/**
* Supprime une ou plusieurs observations grâce aux paramètres fournis
*