9,7 → 9,6 |
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt> |
* |
*/ |
|
class CelValidationObservation extends Cel { |
/** |
* Méthode appelée avec une requête de type POST avec un identifiant d'obs. |
41,6 → 40,13 |
// $imgKeywordDelete = @trim($pairs['imgKeywordDelete']); |
unset($pairs['obsKeywordDelete']); // , $pairs['imgKeywordDelete']); |
|
// complete les données de la proposition validée car: |
// 1) la table tb_del.del_commentaire ne contient pas toutes les informations nécessaires |
// 2) la table tb_del.del_commentaire ne *devrait* pas contenir beaucoup plus que nom_sel et nom_sel_nn |
// 3) la génération de ces données ici, au moment de l'UPDATE, est le meilleur garant de leur fiabilité |
$more_data = CelTaxonNomFrom::NN2($this->bdd, @$pairs['nom_sel_nn'], @$pairs['nom_referentiel']); |
if($more_data) $pairs = array_merge($pairs, $more_data); |
|
$modification = $gestion_observation->modifierObservationPublique($utilisateur, $id, $pairs); |
if($modification) { |
// quel impact de ces valeurs de retour ? |
51,6 → 57,7 |
header("Content-Type: text/plain; charset=utf-8"); |
die("OK"); // attention, compatibilité avec ValiderDetermination.php de DEL ! |
} |
// cf TODO: n'arrivera pas tant que l'UPDATE ajoutera systématiquement date_modification = now() |
elseif($modification === 0) { |
http_response_code(304); // Not Modified |
header("Content-Type: text/plain; charset=utf-8"); |
70,7 → 77,10 |
} |
|
// TODO: check sur 'id_observation' en tant que param est superflu ? |
$params_obligatoires = array('id_observation', 'ce_utilisateur', 'nom_sel'); |
// TODO: avec l'apparition de CelTaxonNomFrom, "nom_sel" devrait être optionnel |
// puisque nous regénérons des données valides avant l'update et puisque |
// seul un nom_sel_nn *valide* a pu nous provenir depuis une validation de proposition de la part de DEL. |
$params_obligatoires = array('id_observation', 'ce_utilisateur', 'nom_sel'); |
foreach($params_obligatoires as $param) { |
if(@trim($params[$param])) continue; |
http_response_code(412); // Precondition Failed |
79,3 → 89,49 |
} |
} |
} |
|
// pour les modifications touchants aux nom_sel(nn)/nom_ret(nn)/... |
// les clefs du tableau (= les aliases de champs) correspondent aux champs attendus |
// par tb_cel.cel_obs afin de pouvoir array_merger() et passer le résultat à modifierObservationPublique() |
class CelTaxonNomFrom { |
const db = 'tb_eflore'; |
const bdtfx = 'bdtfx_v2_00'; |
const bdtxa = 'bdtxa_v1_01'; |
const isfan = 'isfan_v2013'; |
|
// get from num_nom(_sel) |
static function NN($db, $id, $ref) { |
if(!$db || !$id || !$ref) return FALSE; |
return $db->query(sprintf("SELECT num_nom_retenu AS nom_ret_nn, num_taxon AS nt, CONCAT(nom_sci, ' ', auteur) AS nom_sel". |
" FROM cel_references". |
" WHERE referentiel = %s AND num_nom = %d", $db->quote($ref), intval($id)))->fetch(PDO::FETCH_ASSOC); |
} |
|
// get from num_nom(_sel) directement via la DB |
// ce qui nous permet l'initialisation des champs non-présents dans cel_references |
// cf TODO |
static function NN2($db, $id, $ref) { |
if(!$db || !$id || !$ref) return FALSE; |
switch($ref) { |
case "bdtfx": |
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". |
" , o.famille, CONCAT(ret.nom_sci, ' ', ret.auteur) AS nom_ret". |
" FROM %s.%s o". |
" LEFT JOIN %s.%s ret ON o.num_nom_retenu != 0 AND o.num_nom_retenu = ret.num_nom". |
" WHERE o.num_nom = %d -- %s:%d", self::db, self::bdtfx, self::db, self::bdtfx, intval($id), __FILE__, __LINE__))->fetch(PDO::FETCH_ASSOC); |
case "bdtxa": |
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" |
" , o.famille, CONCAT(ret.nom_sci, ' ', ret.auteur) AS nom_ret". |
" FROM %s.%s o". |
" LEFT JOIN %s.%s ret ON o.num_nom_retenu != 0 AND o.num_nom_retenu = ret.num_nom". |
" WHERE o.num_nom = %d -- %s:%d", self::db, self::bdtxa, self::db, self::bdtxa, intval($id), __FILE__, __LINE__))->fetch(PDO::FETCH_ASSOC); |
case "isfan": |
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". |
" , o.famille, CONCAT(ret.nom_sci, ' ', ret.auteur) AS nom_ret". |
" FROM %s.%s o". |
" LEFT JOIN %s.%s ret ON o.num_nom_retenu != 0 AND o.num_nom_retenu = ret.num_nom". |
" WHERE o.num_nom = %d -- %s:%d", self::db, self::isfan, self::db, self::isfan, intval($id), __FILE__, __LINE__))->fetch(PDO::FETCH_ASSOC); |
} |
return FALSE; |
} |
} |