Line 7... |
Line 7... |
7 |
* @copyright 2013 Tela-Botanica
|
7 |
* @copyright 2013 Tela-Botanica
|
8 |
* @license Licence CECILL <http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt>
|
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>
|
9 |
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
|
10 |
*
|
10 |
*
|
11 |
*/
|
11 |
*/
|
12 |
|
- |
|
13 |
class CelValidationObservation extends Cel {
|
12 |
class CelValidationObservation extends Cel {
|
14 |
/**
|
13 |
/**
|
15 |
* 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.
|
16 |
* Modifie le taxon associé à une observation avec les informations envoyées
|
15 |
* Modifie le taxon associé à une observation avec les informations envoyées
|
17 |
* Utilisé par:
|
16 |
* Utilisé par:
|
Line 39... |
Line 38... |
39 |
// nous enverra obsKeywordDelete=aDeterminer en plus de certitude=Certaine
|
38 |
// nous enverra obsKeywordDelete=aDeterminer en plus de certitude=Certaine
|
40 |
$obsKeywordDelete = @trim($pairs['obsKeywordDelete']);
|
39 |
$obsKeywordDelete = @trim($pairs['obsKeywordDelete']);
|
41 |
// $imgKeywordDelete = @trim($pairs['imgKeywordDelete']);
|
40 |
// $imgKeywordDelete = @trim($pairs['imgKeywordDelete']);
|
42 |
unset($pairs['obsKeywordDelete']); // , $pairs['imgKeywordDelete']);
|
41 |
unset($pairs['obsKeywordDelete']); // , $pairs['imgKeywordDelete']);
|
Line -... |
Line 42... |
- |
|
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);
|
43 |
|
49 |
|
44 |
$modification = $gestion_observation->modifierObservationPublique($utilisateur, $id, $pairs);
|
50 |
$modification = $gestion_observation->modifierObservationPublique($utilisateur, $id, $pairs);
|
45 |
if($modification) {
|
51 |
if($modification) {
|
46 |
// quel impact de ces valeurs de retour ?
|
52 |
// quel impact de ces valeurs de retour ?
|
47 |
if($kid = InventoryKeyWordList::getMotsClefId($utilisateur, 'obs', $obsKeywordDelete))
|
53 |
if($kid = InventoryKeyWordList::getMotsClefId($utilisateur, 'obs', $obsKeywordDelete))
|
48 |
InventoryKeyWordObsLink::unlinkKeyword($this->config, 'obs', explode(',', $id), $utilisateur, $kid);
|
54 |
InventoryKeyWordObsLink::unlinkKeyword($this->config, 'obs', explode(',', $id), $utilisateur, $kid);
|
49 |
/* if($kid = InventoryKeyWordList::getMotsClefId($utilisateur, 'images', $imgKeywordDelete))
|
55 |
/* if($kid = InventoryKeyWordList::getMotsClefId($utilisateur, 'images', $imgKeywordDelete))
|
50 |
InventoryKeyWordObsLink::unlinkKeyword($this->config, 'obs', explode(',', $id), $utilisateur, $kid); */
|
56 |
InventoryKeyWordObsLink::unlinkKeyword($this->config, 'obs', explode(',', $id), $utilisateur, $kid); */
|
51 |
header("Content-Type: text/plain; charset=utf-8");
|
57 |
header("Content-Type: text/plain; charset=utf-8");
|
52 |
die("OK"); // attention, compatibilité avec ValiderDetermination.php de DEL !
|
58 |
die("OK"); // attention, compatibilité avec ValiderDetermination.php de DEL !
|
- |
|
59 |
}
|
53 |
}
|
60 |
// cf TODO: n'arrivera pas tant que l'UPDATE ajoutera systématiquement date_modification = now()
|
54 |
elseif($modification === 0) {
|
61 |
elseif($modification === 0) {
|
55 |
http_response_code(304); // Not Modified
|
62 |
http_response_code(304); // Not Modified
|
56 |
header("Content-Type: text/plain; charset=utf-8");
|
63 |
header("Content-Type: text/plain; charset=utf-8");
|
57 |
die("Not Modified");
|
64 |
die("Not Modified");
|
Line 68... |
Line 75... |
68 |
header("Content-Type: text/plain; charset=utf-8");
|
75 |
header("Content-Type: text/plain; charset=utf-8");
|
69 |
die("L'identifiant d'observation doit être un entier");
|
76 |
die("L'identifiant d'observation doit être un entier");
|
70 |
}
|
77 |
}
|
Line 71... |
Line 78... |
71 |
|
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
|
72 |
// TODO: check sur 'id_observation' en tant que param est superflu ?
|
82 |
// seul un nom_sel_nn *valide* a pu nous provenir depuis une validation de proposition de la part de DEL.
|
73 |
$params_obligatoires = array('id_observation', 'ce_utilisateur', 'nom_sel');
|
83 |
$params_obligatoires = array('id_observation', 'ce_utilisateur', 'nom_sel');
|
74 |
foreach($params_obligatoires as $param) {
|
84 |
foreach($params_obligatoires as $param) {
|
75 |
if(@trim($params[$param])) continue;
|
85 |
if(@trim($params[$param])) continue;
|
76 |
http_response_code(412); // Precondition Failed
|
86 |
http_response_code(412); // Precondition Failed
|
77 |
header("Content-Type: text/plain; charset=utf-8");
|
87 |
header("Content-Type: text/plain; charset=utf-8");
|
78 |
die(sprintf("Paramètre %s manquant (parmi %s)", $param, implode(', ', $params_obligatoires)));
|
88 |
die(sprintf("Paramètre %s manquant (parmi %s)", $param, implode(', ', $params_obligatoires)));
|
79 |
}
|
89 |
}
|
80 |
}
|
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 |
}
|