Line 1... |
Line 1... |
1 |
<?php
|
1 |
<?php
|
- |
|
2 |
/**
|
- |
|
3 |
* @category PHP
|
- |
|
4 |
* @package jrest
|
- |
|
5 |
* @author Aurélien Peronnet <aurelien@tela-botania.org>
|
- |
|
6 |
* @author Raphaël Droz <raphael@tela-botania.org>
|
- |
|
7 |
* @copyright 2013 Tela-Botanica
|
- |
|
8 |
* @license Licence CECILL <http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt>
|
- |
|
9 |
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
|
- |
|
10 |
*
|
- |
|
11 |
*/
|
2 |
class CelValidationObservation extends Cel {
|
12 |
class CelValidationObservation extends Cel {
|
3 |
|
- |
|
4 |
/**
|
13 |
/**
|
5 |
* Méthode appelée avec une requête de type POST avec un identifiant d'obs.
|
14 |
* Méthode appelée avec une requête de type POST avec un identifiant d'obs.
|
6 |
* Modifie le taxon associé à une observation avec les informations envoyées
|
15 |
* Modifie le taxon associé à une observation avec les informations envoyées
|
- |
|
16 |
* Utilisé par:
|
- |
|
17 |
* - del/services/modules/0.1/determinations/ValiderDetermination.php::modifierObservationParDetermination()
|
7 |
*
|
18 |
*
|
8 |
* @param int $uid[0] identifiant observation
|
19 |
* @param int $uid[0] identifiant observation
|
9 |
* @param pairs array tableau contenant les valeurs à modifier
|
20 |
* @param pairs array tableau contenant les valeurs à modifier
|
- |
|
21 |
* @param pairs['obsKeywordDelete'] optional string: mot-clef à délier à cette observation
|
10 |
*/
|
22 |
*/
|
11 |
public function updateElement($uid,$pairs)
|
23 |
public function updateElement($uid, $pairs) {
|
12 |
{
|
- |
|
13 |
// ce service est uniquement destiné à être appelé en local,
|
24 |
// ce service est uniquement destiné à être appelé en local,
|
14 |
// depuis le serveur lui même
|
25 |
// depuis le serveur lui même
|
15 |
// en particulier par l'application identiplante
|
26 |
// en particulier par l'application identiplante
|
16 |
$this->controleAppelIpAutorisee();
|
27 |
$this->controleAppelIpAutorisee();
|
17 |
$this->verifierParametresObligatoires($uid, $pairs);
|
28 |
self::verifierParametresObligatoires($uid, $pairs);
|
18 |
$id = $uid[0];
|
29 |
$id = $uid[0];
|
Line 19... |
Line 30... |
19 |
|
30 |
|
- |
|
31 |
$gestion_observation = new GestionObservation($this->config);
|
20 |
$gestion_observation = new GestionObservation($this->config);
|
32 |
$pairs = array_map('trim', $pairs);
|
21 |
$utilisateur = $pairs['ce_utilisateur'];
|
33 |
$utilisateur = $pairs['ce_utilisateur'];
|
- |
|
34 |
unset($pairs['ce_utilisateur'], $pairs['id_observation']);
|
- |
|
35 |
|
- |
|
36 |
// mise à jour des mots-clefs suite à une validation:
|
- |
|
37 |
// typiquement, DEL modifierObservationParDetermination()
|
- |
|
38 |
// nous enverra obsKeywordDelete=aDeterminer en plus de certitude=Certaine
|
- |
|
39 |
$obsKeywordDelete = @trim($pairs['obsKeywordDelete']);
|
- |
|
40 |
// $imgKeywordDelete = @trim($pairs['imgKeywordDelete']);
|
- |
|
41 |
unset($pairs['obsKeywordDelete']); // , $pairs['imgKeywordDelete']);
|
- |
|
42 |
|
- |
|
43 |
// complete les données de la proposition validée car:
|
- |
|
44 |
// 1) la table tb_del.del_commentaire ne contient pas toutes les informations nécessaires
|
- |
|
45 |
// 2) la table tb_del.del_commentaire ne *devrait* pas contenir beaucoup plus que nom_sel et nom_sel_nn
|
- |
|
46 |
// 3) la génération de ces données ici, au moment de l'UPDATE, est le meilleur garant de leur fiabilité
|
- |
|
47 |
$more_data = CelTaxonNomFrom::NN2($this->bdd, @$pairs['nom_sel_nn'], @$pairs['nom_referentiel']);
|
- |
|
48 |
if($more_data) $pairs = array_merge($pairs, $more_data);
|
22 |
unset($pairs['ce_utilisateur']);
|
49 |
|
- |
|
50 |
$modification = $gestion_observation->modifierObservationPublique($utilisateur, $id, $pairs);
|
- |
|
51 |
if($modification) {
|
- |
|
52 |
// quel impact de ces valeurs de retour ?
|
- |
|
53 |
if($kid = InventoryKeyWordList::getMotsClefId($utilisateur, 'obs', $obsKeywordDelete))
|
- |
|
54 |
InventoryKeyWordObsLink::unlinkKeyword($this->config, 'obs', explode(',', $id), $utilisateur, $kid);
|
- |
|
55 |
/* if($kid = InventoryKeyWordList::getMotsClefId($utilisateur, 'images', $imgKeywordDelete))
|
- |
|
56 |
InventoryKeyWordObsLink::unlinkKeyword($this->config, 'obs', explode(',', $id), $utilisateur, $kid); */
|
- |
|
57 |
header("Content-Type: text/plain; charset=utf-8");
|
23 |
$modification = $gestion_observation->modifierObservationPublique($utilisateur, $id, $pairs);
|
58 |
die("OK"); // attention, compatibilité avec ValiderDetermination.php de DEL !
|
- |
|
59 |
}
|
24 |
|
60 |
// cf TODO: n'arrivera pas tant que l'UPDATE ajoutera systématiquement date_modification = now()
|
- |
|
61 |
elseif($modification === 0) {
|
25 |
if($modification !== false) {
|
62 |
header("HTTP/1.0 304 Not Modified"); // XXX: PHP 5.4 // http_response_code(304); // Not Modified
|
26 |
$resultat = 'ok';
|
63 |
header("Content-Type: text/plain; charset=utf-8");
|
27 |
$this->envoyer($resultat);
|
64 |
die("Not Modified");
|
28 |
exit;
|
65 |
}
|
- |
|
66 |
else {
|
29 |
} else {
|
67 |
header("HTTP/1.0 500 Internal Server Error"); // XXX: PHP: 5.4 // http_response_code(500); // Internal Server Error
|
30 |
$info = array();
|
68 |
header("Content-Type: text/plain; charset=utf-8");
|
31 |
$info = 'Impossible de modifier l\'observation associée à cet identifiant ';
|
- |
|
32 |
$this->envoyer($info, 'text/html', 'utf-8', false);
|
- |
|
33 |
exit;
|
69 |
die("Impossible de modifier l'observation associée à cet identifiant " . mysql_error());
|
34 |
}
|
70 |
}
|
Line 35... |
Line 71... |
35 |
}
|
71 |
}
|
36 |
|
72 |
|
37 |
private function verifierParametresObligatoires($uid ,$params) {
|
- |
|
38 |
$params_obligatoires = array('id_observation',
|
- |
|
39 |
'ce_utilisateur',
|
- |
|
40 |
'nom_sel');
|
- |
|
41 |
$info = array();
|
73 |
static function verifierParametresObligatoires($uid, $params) {
|
42 |
|
74 |
if(!@intval($uid[0]) || !@intval($params['id_observation'])) {
|
43 |
if(!isset($uid[0]) || !is_numeric($uid[0])) {
|
75 |
header("Content-Type: text/plain; charset=utf-8");
|
44 |
$info .= 'l\' identifiant doit être un entier ';
|
76 |
die("L'identifiant d'observation doit être un entier");
|
- |
|
77 |
}
|
- |
|
78 |
|
- |
|
79 |
// TODO: check sur 'id_observation' en tant que param est superflu ?
|
- |
|
80 |
// TODO: avec l'apparition de CelTaxonNomFrom, "nom_sel" devrait être optionnel
|
- |
|
81 |
// puisque nous regénérons des données valides avant l'update et puisque
|
45 |
}
|
82 |
// seul un nom_sel_nn *valide* a pu nous provenir depuis une validation de proposition de la part de DEL.
|
46 |
|
83 |
$params_obligatoires = array('id_observation', 'ce_utilisateur', 'nom_sel');
|
47 |
foreach($params_obligatoires as $param) {
|
84 |
foreach($params_obligatoires as $param) {
|
48 |
if(!isset($params[$param]) || trim($params[$param]) == "") {
|
- |
|
49 |
$info = 'le paramètre '.$param.' doit exister et ne peut pas être vide ';
|
- |
|
50 |
}
|
- |
|
51 |
}
|
85 |
if(@trim($params[$param])) continue;
|
52 |
|
86 |
header("HTTP/1.0 412 Precondition Failed"); // XXX: PHP: 5.4 // http_response_code(412); // Precondition Failed
|
53 |
if(!empty($info)) {
|
- |
|
54 |
$this->envoyer($info, 'text/html', 'utf-8', false);
|
87 |
header("Content-Type: text/plain; charset=utf-8");
|
55 |
exit;
|
88 |
die(sprintf("Paramètre %s manquant (parmi %s)", $param, implode(', ', $params_obligatoires)));
|
56 |
}
|
89 |
}
|
57 |
}
|
- |
|
58 |
}
|
90 |
}
|
- |
|
91 |
}
|
- |
|
92 |
|
- |
|
93 |
// pour les modifications touchants aux nom_sel(nn)/nom_ret(nn)/...
|
- |
|
94 |
// les clefs du tableau (= les aliases de champs) correspondent aux champs attendus
|
- |
|
95 |
// par tb_cel.cel_obs afin de pouvoir array_merger() et passer le résultat à modifierObservationPublique()
|
- |
|
96 |
class CelTaxonNomFrom {
|
- |
|
97 |
const db = 'tb_eflore';
|
- |
|
98 |
const bdtfx = 'bdtfx_v2_00';
|
- |
|
99 |
const bdtxa = 'bdtxa_v1_01';
|
- |
|
100 |
const isfan = 'isfan_v2013';
|
- |
|
101 |
|
- |
|
102 |
// get from num_nom(_sel)
|
- |
|
103 |
static function NN($db, $id, $ref) {
|
- |
|
104 |
if(!$db || !$id || !$ref) return FALSE;
|
- |
|
105 |
return $db->query(sprintf("SELECT num_nom_retenu AS nom_ret_nn, num_taxon AS nt, CONCAT(nom_sci, ' ', auteur) AS nom_sel".
|
- |
|
106 |
" FROM cel_references".
|
- |
|
107 |
" WHERE referentiel = %s AND num_nom = %d", $db->quote($ref), intval($id)))->fetch(PDO::FETCH_ASSOC);
|
- |
|
108 |
}
|
- |
|
109 |
|
- |
|
110 |
// get from num_nom(_sel) directement via la DB
|
- |
|
111 |
// ce qui nous permet l'initialisation des champs non-présents dans cel_references
|
- |
|
112 |
// cf TODO
|
- |
|
113 |
static function NN2($db, $id, $ref) {
|
- |
|
114 |
if(!$db || !$id || !$ref) return FALSE;
|
- |
|
115 |
switch($ref) {
|
- |
|
116 |
case "bdtfx":
|
- |
|
117 |
return $db->query(sprintf("SELECT o.num_nom_retenu AS nom_ret_nn, o.num_taxonomique AS nt, CONCAT(o.nom_sci, ' ', o.auteur) AS nom_sel".
|
- |
|
118 |
" , o.famille, CONCAT(ret.nom_sci, ' ', ret.auteur) AS nom_ret".
|
- |
|
119 |
" FROM %s.%s o".
|
- |
|
120 |
" LEFT JOIN %s.%s ret ON o.num_nom_retenu != 0 AND o.num_nom_retenu = ret.num_nom".
|
- |
|
121 |
" WHERE o.num_nom = %d -- %s:%d", self::db, self::bdtfx, self::db, self::bdtfx, intval($id), __FILE__, __LINE__))->fetch(PDO::FETCH_ASSOC);
|
- |
|
122 |
case "bdtxa":
|
- |
|
123 |
return $db->query(sprintf("SELECT o.num_nom_retenu AS nom_ret_nn, o.num_tax AS nt, CONCAT(o.nom_sci, ' ', o.auteur) AS nom_sel". // subtilité: "num_tax"
|
- |
|
124 |
" , o.famille, CONCAT(ret.nom_sci, ' ', ret.auteur) AS nom_ret".
|
- |
|
125 |
" FROM %s.%s o".
|
- |
|
126 |
" LEFT JOIN %s.%s ret ON o.num_nom_retenu != 0 AND o.num_nom_retenu = ret.num_nom".
|
- |
|
127 |
" WHERE o.num_nom = %d -- %s:%d", self::db, self::bdtxa, self::db, self::bdtxa, intval($id), __FILE__, __LINE__))->fetch(PDO::FETCH_ASSOC);
|
- |
|
128 |
case "isfan":
|
- |
|
129 |
return $db->query(sprintf("SELECT o.num_nom_retenu AS nom_ret_nn, o.num_taxonomique AS nt, CONCAT(o.nom_sci, ' ', o.auteur) AS nom_sel".
|
- |
|
130 |
" , o.famille, CONCAT(ret.nom_sci, ' ', ret.auteur) AS nom_ret".
|
- |
|
131 |
" FROM %s.%s o".
|
- |
|
132 |
" LEFT JOIN %s.%s ret ON o.num_nom_retenu != 0 AND o.num_nom_retenu = ret.num_nom".
|
- |
|
133 |
" WHERE o.num_nom = %d -- %s:%d", self::db, self::isfan, self::db, self::isfan, intval($id), __FILE__, __LINE__))->fetch(PDO::FETCH_ASSOC);
|
- |
|
134 |
}
|
- |
|
135 |
return FALSE;
|
- |
|
136 |
}
|