Subversion Repositories eFlore/Applications.cel

Rev

Rev 1873 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1873 Rev 1877
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
  }