Subversion Repositories eFlore/Applications.cel

Compare Revisions

Ignore whitespace Rev 1511 → Rev 1512

/trunk/jrest/lib/GestionChampsEtendus.php
New file
0,0 → 1,226
<?php
 
/**
* PHP Version 5
*
* @category PHP
* @package jrest
* @author Aurelien Peronnet <aurelien@tela-botanica.org>
* @copyright 2010 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @version SVN: <svn_id>
* @link /doc/jrest/
*/
 
/**
* Classe de gestion de l'ajout, modification et suppression des champs supplémentaires des obs et images
*
* in=utf8
* out=utf8
*
*/
class GestionChampsEtendus extends Cel {
private $mode = null;
private $table_champs_etendus = null;
private $champ_id = null;
public function GestionChampsEtendus($config, $mode) {
parent::__construct($config);
$this->mode = $mode;
if($this->mode == 'obs') {
$this->mode = 'obs';
$this->table_champs_etendus = 'cel_obs_etendues';
$this->champ_id = 'id_observation';
} else if($this->mode == 'image') {
$this->mode = 'image';
$this->table_champs_etendus = 'cel_images_etendues';
$this->champ_id = 'id_image';
} else {
throw new Exception('Mode inconnu, les modes autorisés sont "obs" et "image"');
}
}
/**
* Renvoie true ou false suivant que l'element indiqué possède une valeur
* pour la clé indiquée
*
* @param int $id_element_lie
* @param string $cle
* @param string $valeur
* @return bool
*/
public function champEtenduExistePourElement($id_element_lie, $cle) {
$requete = "SELECT COUNT(*) >= 1 as existe FROM ".$this->table_champs_etendus." ".
"WHERE ".$this->champ_id." = ".$this->proteger($id_element_lie)." ".
"AND cle = ".$this->proteger($cle);
 
$resultat = $this->executerRequete($requete);
return ($resultat[0]['existe'] == "1");
}
/**
* Renvoie tous les champs étendus associé à l'élément passé en paramètre
*
* @param int $id_element_lie
* @return array
*/
public function obtenirChampsEtendusPourElement($id_element_lie) {
$requete = "SELECT * FROM ".$this->table_champs_etendus." ".
"WHERE ".$this->champ_id." = ".$this->proteger($id_element_lie)." ";
$resultat = $this->executerRequete($requete);
return $resultat;
}
/**
* Renvoie tous les champs étendus associés aux éléments passés en paramètre
* Sous forme tableau de tableaux associatifs clé valeur regroupé par id d'élement
*
* @param array $ids_element_lies
* @return array
*/
public function obtenirChampsEtendusPourElementsMultiples($ids_element_lies) {
$ids_element_lies = array_map(array($this, 'proteger'),$ids_element_lies);
$requete = "SELECT * FROM ".$this->table_champs_etendus." ".
"WHERE ".$this->champ_id." IN (".implode(',',$ids_element_lies).") ";
 
$resultats = $this->executerRequete($requete);
$champs_etendus_par_element = array();
foreach ($resultats as &$ligne) {
$id_element = $ligne[$this->champ_id];
if(!isset($champs_etendus_par_element[$id_element])) {
$champs_etendus_par_element[$id_element] = array();
}
$champs_etendus_par_element[$id_element][$ligne['cle']] = $ligne['valeur'];
}
return $champs_etendus_par_element;
}
/**
* Ajoute un champ étendu à l'élément passé en paramètre,
* si la clé existe déjà, seule valeur du champ est mise à jour
*
* @param int $id_element_lie
* @param string $cle
* @param string $valeur
* @return bool
*/
public function ajouterChampEtendu($id_element_lie, $cle, $valeur) {
$requete = "INSERT INTO ".$this->table_champs_etendus." ".
"(".$this->champ_id.", cle, valeur) ".
"VALUES (".$this->proteger($id_element_lie).",".$this->proteger($cle).",".$this->proteger($valeur).") ".
"ON DUPLICATE KEY UPDATE valeur = VALUES(valeur)";
 
// la partie on duplicate key est spécifique mysql mais il sera facile de s'en passer le jour
// où l'on change de sgbd
$ajout = $this->executerRequeteSimple($requete);
return ($ajout !== false);
}
/**
* Ajoute des champs étendus à l'élément passé en paramètre,
* si la clé existe déjà, seule la valeur du champ est mise à jour
*
* @param int $id_element_lie
* @param array $cles_valeurs tableau de clés => valeurs à associer à l'élément
* @return bool
*/
public function ajouterChampsEtendusMultiples($id_element_lie, $cles_valeurs) {
$lignes = array();
foreach($cles_valeurs as $cle => $valeur) {
$lignes[] = "(".$this->proteger($id_element_lie).",".$this->proteger($cle).",".$this->proteger($valeur).")";
}
$requete = "INSERT INTO ".$this->table_champs_etendus." ".
"(".$this->champ_id.", cle, valeur) ".
"VALUES ".implode(',', $lignes)." ".
"ON DUPLICATE KEY UPDATE valeur = VALUES(valeur)";
// la partie on duplicate key est spécifique mysql mais il sera facile de s'en passer le jour
// où l'on change de sgbd
$ajout = $this->executerRequeteSimple($requete);
return ($ajout !== false);
}
/**
* Ajoute des champs étendus aux éléments passés en paramètre,
* si la clé existe déjà, seule la valeur du champ est mise à jour
*
* @param array $elements_cles_valeurs tableau associatif de la forme id, cle, valeur
* @return bool
*/
public function ajouterChampsEtendusMultiplesAElementsMultiples($elements_cles_valeurs) {
$lignes = array();
foreach($elements_cles_valeurs as &$element) {
$lignes[] = "(".$this->proteger($element['id']).",".$this->proteger($element['cle']).",".$this->proteger($element['valeur']).")";
}
$requete = "INSERT INTO ".$this->table_champs_etendus." ".
"(".$this->champ_id.", cle, valeur) ".
"VALUES ".implode(',', $lignes)." ".
"ON DUPLICATE KEY UPDATE valeur = VALUES(valeur)";
 
// la partie on duplicate key est spécifique mysql mais il sera facile de s'en passer le jour
// où l'on change de sgbd
$ajout = $this->executerRequeteSimple($requete);
return ($ajout !== false);
}
/**
* Modifie un champ étendu associé à l'élément passé en paramètre
*
* @param int $id_element_lie
* @param string $cle
* @param string $valeur
* @return bool
*/
public function modifierChampEtendu($id_element_lie, $cle, $valeur) {
$requete = "UPDATE ".$this->table_champs_etendus." ".
"SET valeur = ".$this->proteger($valeur)." ".
"WHERE cle = ".$this->proteger($cle)." AND ".
$this->champ_id." = ".$this->proteger($id_element_lie);
$modif = $this->executerRequeteSimple($requete);
return ($modif !== false);
}
/**
* Supprime le champ champ étendu associé à l'élément et au nom de clé passés en paramètre
*
* @param int $id_element_lie
* @param string $cle
* @return bool
*/
public function supprimerChampEtendu($id_element_lie, $cle) {
$requete = "DELETE FROM ".$this->table_champs_etendus." ".
"WHERE cle = ".$this->proteger($cle)." AND ".
$this->champ_id." = ".$this->proteger($id_element_lie);
$suppr = $this->executerRequeteSimple($requete);
return ($suppr !== false);
}
/**
* Supprime tous les champs champ étendu associés à l'élément passés en paramètre
*
* @param int $id_element_lie
* @return bool
*/
public function supprimerChampsEtendusAElement($id_element_lie) {
$requete = "DELETE FROM ".$this->table_champs_etendus." ".
"WHERE ".$this->champ_id." = ".$this->proteger($id_element_lie);
$suppr = $this->executerRequeteSimple($requete);
return ($suppr !== false);
}
}
?>
/trunk/jrest/services/CelWidgetSaisie.php
19,6 → 19,7
private $projet = null;
private $tagsObs = null;
private $tagsImg = null;
private $champsEtendusObs = null;
private $utilisateur_id = null;
const DUREE_DE_VIE_IMG = 86400;// 3600 * 24 * 2 = 172 800
const ARRET_SERVICE = false;// Permet de bloquer le service en cas de problème sur le serveur
90,6 → 91,8
$obsAAjouter['date_creation'] = date('Y-m-d H:i:s');
$obsAAjouter['date_modification'] = $obsAAjouter['date_creation'];
$obsAAjouter['date_transmission'] = $obsAAjouter['date_creation'];
$this->champsEtendusObs[$ordreObs] = isset($obs['obs_etendue']) ? $obs['obs_etendue'] : array();
 
$imgAAjouter = null;
if (!empty($obs['image_nom'])) {
130,6 → 133,9
$obs_a_taguer_ids = $this->obtenirIdsObsPourTableauOrdres($this->utilisateur_id, $obs_a_taguer_ordres);
$this->taguerObs($obs_a_taguer_ids);
$this->taguerImg($img_a_taguer_ids);
// Les champs taggés sont des champs supplémentaires stockés sous forme de clé => valeur
$this->ajouterChampsEtendusObs($obs_a_taguer_ids, $this->champsEtendusObs);
} else {
$this->messages[] = "Un nouveau numéro d'ordre d'observation n'a pu être généré.";
}
147,6 → 153,28
$this->envoyerJson($retour);
}
private function ajouterChampsEtendusObs($obs_ids, $obs_a_champs_etendus) {
$champs_etendus_obs = array();
foreach($obs_ids as $id_obs) {
$champs = array_shift($obs_a_champs_etendus);
if($champs != null && is_array($champs)) {
foreach($champs as $champ_etendu => $valeur) {
$champs_etendus_obs[] = array(
'id' => $id_obs,
'cle' => $champ_etendu,
'valeur' => $valeur
);
}
}
}
$gestion_champs_etendus = new GestionChampsEtendus($this->config, 'obs');
$ajout_champ_etendus = $gestion_champs_etendus->ajouterChampsEtendusMultiplesAElementsMultiples($champs_etendus_obs);
return $ajout_champ_etendus;
}
private function traiterImagesALierAObs($id_utilisateur, $ordreObs, $obs) {
$imgAAjouter = null;
if(is_array($obs['image_nom'])) {