Subversion Repositories eFlore/Applications.cel

Compare Revisions

Ignore whitespace Rev 897 → Rev 898

/trunk/jrest/services/InventoryImageLink.php
1,107 → 1,82
<?php
// ATTENTION ! Classe compatible uniquement avec nouveau format de bdd du cel //
/**
* PHP Version 5
*
* @category PHP
* @package jrest
* @author Aurélien 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/
*/
 
/**
* InventoryImageLink.php
*
* in : utf8
* out : utf8
*
* Cas d'utilisation :
* Service de liaisons d'images à des observations
*
* 2: Le service lie une ou plusieurs images à une ou plusieurs observations
* 3: Le service renvoie les observations liées à une image
*/
class InventoryImageLink extends Cel {
 
Aurelien Peronnet aurelienperonnet@gmail.com 2008
 
Ce logiciel est r?gi par la licence CeCILL soumise au droit fran?ais et
respectant les principes de diffusion des logiciels libres. Vous pouvez
utiliser, modifier et/ou redistribuer ce programme sous les conditions
de la licence CeCILL telle que diffus?e par le CEA, le CNRS et l'INRIA
sur le site "http://www.cecill.info".
En contrepartie de l'accessibilit? au code source et des droits de copie,
de modification et de redistribution accord?s par cette licence, il n'est
offert aux utilisateurs qu'une garantie limit?e. Pour les m?mes raisons,
seule une responsabilit? restreinte p?se sur l'auteur du programme, le
titulaire des droits patrimoniaux et les conc?dants successifs.
 
A cet ?gard l'attention de l'utilisateur est attir?e sur les risques
associ?s au chargement, ? l'utilisation, ? la modification et/ou au
d?veloppement et ? la reproduction du logiciel par l'utilisateur ?tant
donn? sa sp?cificit? de logiciel libre, qui peut le rendre complexe ?
manipuler et qui le r?serve donc ? des d?veloppeurs et des professionnels
avertis poss?dant des connaissances informatiques approfondies. Les
utilisateurs sont donc invit?s ? charger et tester l'ad?quation du
logiciel ? leurs besoins dans des conditions permettant d'assurer la
s?curit? de leurs syst?mes et ou de leurs donn?es et, plus g?n?ralement,
? l'utiliser et l'exploiter dans les m?mes conditions de s?curit?.
 
Le fait que vous puissiez acc?der ? cet en-t?te signifie que vous avez
pris connaissance de la licence CeCILL, et que vous en avez accept? les
termes.
 
*/
 
 
// in : utf8
// out : utf8
/*
* InventoryImageLink.php
*
* Cas d'utilisation :
* Service de liaisons d'images à des observations
*
* 2: Le service lie une ou plusieurs images à une ou plusieurs observations
* 3: Le service renvoie les observations liées à une image
*/
 
Class InventoryImageLink extends DBAccessor {
 
var $config;
 
function InventoryImageLink($config) {
 
$this->config=$config;
}
 
function createElement($pairs)
{
// Controle detournement utilisateur
session_start();
$this->controleUtilisateur($pairs['identifiant']);
$this->controleUtilisateur($pairs['ce_utilisateur']);
 
$DB=$this->connectDB($this->config,'cel_db');
 
$ids_images = $pairs['coi_ce_image'] ;
$ids_images = $pairs['id_image'] ;
$ids_images = rtrim($ids_images,',') ;
 
$ids_images_liste = explode(",",$ids_images) ;
 
$utilisateur = $pairs['identifiant'] ;
$utilisateur = $pairs['ce_utilisateur'] ;
 
$ids_observations = $pairs['coi_ce_observation'] ;
$ids_observations = $pairs['id_observation'] ;
$ids_observations = rtrim($ids_observations,',') ;
$ids_observations_liste = explode(",",$ids_observations) ;
$retour = false;
 
foreach($ids_images_liste as $image)
{
foreach($ids_observations_liste as $observation)
{
$query = 'INSERT INTO cel_obs_images (coi_ce_image, coi_ce_utilisateur, coi_ce_observation, coi_date_liaison) VALUES ("'.$DB->escapeSimple($image).'","'.$DB->escapeSimple($utilisateur).'","'.$DB->escapeSimple($observation).'", NOW()) ON DUPLICATE KEY UPDATE coi_ce_image = coi_ce_image' ;
$requete_creation_lien = 'INSERT INTO cel_obs_images (id_image, id_utilisateur, id_observation, date_liaison) '.
'VALUES '.
'("'.$this->proteger($image).'","'.$this->proteger($utilisateur).'","'.$this->proteger($observation).'", NOW()) '.
'ON DUPLICATE KEY UPDATE id_image = id_image' ;
$res =& $DB->query($query);
if (PEAR::isError($res)) {
 
die($res->getMessage());
$resultat_creation_lien = $this->executer($requete_creation_lien);
if ($resultat_creation_lien) {
$retour = "OK";
}
}
}
 
echo "OK" ;
echo $retour ;
exit ;
}
 
// renvoie les numeros des images liées à une observation ou l'inverse, suivant le paramètre
/**
* renvoie les numeros des images liées à une observation ou l'inverse, suivant le paramètre
* uid[0] : utilisateur obligatoire
* uid[1] : ordre_observation=valeur ou bien id_image=valeur
*
*/
function getElement($uid)
{
// uid[0] : utilisateur obligatoire
 
// Controle detournement utilisateur
session_start();
$this->controleUtilisateur($uid[0]);
 
$DB=$this->connectDB($this->config,'cel_db');
 
if($uid) {
 
$param = $uid[1] ;
112,134 → 87,76
$field = $tab_param[0] ;
$value = $tab_param[1] ;
 
$query = "" ;
$requete_selection_liaison = "" ;
 
if ($field == 'coi_ce_observation')
if ($field == 'id_observation')
{
$column = 'coi_ce_image' ;
$query = 'SELECT coi_ce_image, ci_meta_height , ci_meta_width '.
$column = 'id_image' ;
$requete_selection_liaison = 'SELECT cel_obs_images.id_image, hauteur , largeur '.
'FROM cel_obs_images, cel_images '.
'WHERE coi_ce_image = ci_id_image '.
'AND coi_ce_observation = "'.$DB->escapeSimple($value).'" AND coi_ce_utilisateur ="'.$DB->escapeSimple($uid[0]).'"' ;
'WHERE cel_obs_images.id_image = cel_images.id_image '.
'AND id_observation = '.$this->proteger($value).' AND id_utilisateur = '.$this->proteger($uid[0]) ;
}
else
{
$column = 'coi_ce_observation' ;
$query = 'SELECT nom_sel, num_nom_sel, nom_ret, num_nom_ret, num_taxon, famille, location, ordre, date_observation, lieudit,' .
'station, milieu, commentaire, transmission, id_location from cel_inventory WHERE ordre IN (SELECT '.$column.' FROM cel_obs_images WHERE '.$field.' = "'.$DB->escapeSimple($value).'") AND identifiant = "'.$DB->escapeSimple($uid[0]).' "' ;
$column = 'id_observation' ;
$requete_selection_liaison = 'SELECT nom_sel, nom_sel_nn, nom_ret, nom_ret_nn, nt, famille, zone_geo, ordre, date_observation, lieudit,' .
'station, milieu, commentaire, transmission, ce_zone_geo from cel_obs WHERE id_observation IN (SELECT '.$column.' FROM cel_obs_images WHERE '.$field.' = "'.$this->proteger($value).'") AND ce_utilisateur = "'.$this->proteger($uid[0]).' "' ;
}
 
}
 
$res =& $DB->query($query);
if (PEAR::isError($res)) {
$resultat_selection_liaison = $this->executer($requete_selection_liaison);
$liaisons = array();
if (is_array($resultat_selection_liaison) && count($resultat_selection_liaison) > 0) {
$liaisons = $resultat_selection_liaison;
}
 
die($res->getMessage());
}
 
while ($image_liee = $res->fetchrow(DB_FETCHMODE_ORDERED)) {
 
$images_liees[] = $image_liee ;
}
 
$res = json_encode($images_liees) ;
 
$retour_encode = json_encode($liaisons) ;
header("content-type: text/json") ;
print $res ;
print $retour_encode ;
exit() ;
}
 
// met à jour les associations entre images et observations
function updateElement($uid,$pairs)
{
/* // Controle detournement utilisateur
session_start();
if (($_SESSION['user']!="") && $_SESSION['user']['name']!=$uid[0]) {
print "Acces interdit";
return;
}
 
$DB=$this->connectDB($this->config,'cel_db');
 
$query = "SELECT * FROM cel_obs_images WHERE " ;
$query .= ' WHERE '.$ci_id_image.' = "'.$DB->escapeSimple($pairs['ci_id_image']).'"' ;
}
 
/**
* Supprimme une ou plusieurs liaisons entre images et observations
* uid[0] : utilisateur obligatoire
* uid[1] : identifiant(s) image(s) obligatoire(s)
* uid[2] : identifiant(s) observations
*
*/
function deleteElement($uid)
{
 
// uid[0] : utilisateur obligatoire
// uid[1] : identifiant(s) image(s) obligatoire(s)
 
// Controle detournement utilisateur
// Controle detournement utilisateur
session_start();
if (($_SESSION['user']!="") && $_SESSION['user']['name']!=$uid[0]) {
print "Acces interdit";
return;
}
 
$DB=$this->connectDB($this->config,'cel_db');
 
$id = rtrim($uid[1],",") ;
 
if (isset($id)) {
$query="DELETE FROM cel_images WHERE ci_id_image in (".$DB->escapeSimple($id) .")";
//$query = "DELETE FROM cel_obs_images WHERE coi_fk__image in (".$DB->escapeSimple($uid[1]) .")";
}
 
$res =& $DB->query($query);
 
if (PEAR::isError($res)) {
die($res->getMessage());
}
else
{
echo "OK" ;
exit() ;
}
 
$id_fichiers = explode(",",$id) ;
foreach($id_fichiers as $en_cours)
{
supprimer_fichier($en_cours) ;
}
 
*/
}
 
function deleteElement($uid)
{
 
// uid[0] : utilisateur obligatoire
// uid[1] : identifiant(s) image(s) obligatoire(s)
// uid[2] : identifiant(s) observations
 
// Controle detournement utilisateur
session_start();
$this->controleUtilisateur($uid[0]);
 
$DB=$this->connectDB($this->config,'cel_db');
 
$id_img = $uid[1] ;
$id_obs = $DB->escapeSimple($uid[2]) ;
$id_obs = $this->proteger($uid[2]) ;
 
$id = $uid[0] ;
 
if (isset($id)) {
$query = "DELETE FROM cel_obs_images WHERE coi_ce_image IN (".$id_img.") AND coi_ce_observation IN (".$id_obs.") AND coi_ce_utilisateur = '".$id."'" ;
$requete_suppression_lien = "DELETE FROM cel_obs_images ".
"WHERE id_image IN (".$id_img.") ".
"AND id_observation IN (".$id_obs.") AND coi_ce_utilisateur = '".$id."'" ;
}
 
$res =& $DB->query($query);
$resultat_suppression_lien = $this->executer($requete_suppression_lien);
 
if (PEAR::isError($res)) {
die($res->getMessage());
$retour = false;
if ($resultat_suppression_lien) {
$retour = "OK";
}
else
{
echo "OK" ;
exit() ;
}
 
echo $retour;
exit() ;
}
 
}