<?php

require_once('include/extract_metadonnee.php') ;
require_once('include/stockage_fichier.php') ;
/**
 
 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
/*
 * InventoryImage.php  
 * 
 * Cas d'utilisation :
 * Service recherche  et ajout d'image a partir de divers critères
 * 
 * 1: Le service recoit une image à ajouter à la base de donnée
 * 2: Le service recherche l'image correspondant au critères demandé
 * 3: Le service renvoie l'adresse de base de l'image qui permet de la localiser sous ses différents formats (X, M ou L)
 */ 

Class InventoryImage extends DBAccessor {

	var $config;
	
	function InventoryImage($config) {

		$this->config=$config;
	}
	
	
	// renvoie l'enregistrement correspond à une image
	function getElement($uid)
	{
	
			// uid[0] : utilisateur obligatoire
			// uid[1] : identifiant image obligatoire
			
		// Controle detournement utilisateur 
			   session_start();
			 	if (($_SESSION['user']!="") && $_SESSION['user']['name']!=$uid[0]) {    	  
			 		print "Acces interdit";
		 			return;
		     	}
			
		$DB=$this->connectDB($this->config,'cel_db');
		
		if (isset($uid[0])) 
		{
			$query="SELECT * FROM cel_images WHERE ci_id_image ='".$DB->escapeSimple($uid[1])."'";
		}
		
		$res =& $DB->query($query);
                if (PEAR::isError($res)) {
		
                	die($res->getMessage());
                }
		
		$image = $res->fetchrow(DB_FETCHMODE_ASSOC) ;
		
		$res = json_encode($image) ; 
		
		$fp = fopen("/opt/lampp/htdocs/org.tela_botanica.cel2/jrest/services/dump.txt","a+") ;
		fwrite($fp,"\nResultat requete en json : \n") ;
		fwrite($fp,$res);
		
		return $res ;
	}

	// met à jour les métadonnées d'une image
	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 .= ' WHERE '.$ci_id_image.' = "'.$DB->escapeSimple($pairs['ci_id_image']).'"' ;
	}
	
	
	// ajoute une image ainsi que ses metadonnées à la base du carnet
	function createElement($pairs)
	{
		// Controle detournement utilisateur 
			session_start();
			if (($_SESSION['user']!="") && $_SESSION['user']['name']!=$pairs['identifiant']) 
			{    	  
			 		print "Acces interdit";
		 			return;
		     	}
			
		$DB=$this->connectDB($this->config,'cel_db');
		
		$nouvel_id = 0 ;
		$query_id ='SELECT MAX(ci_id_image) FROM cel_images' ;
		$res =& $DB->query($query_id);
                if (PEAR::isError($res)) 
		{
			print 'ERROR : probleme durant le calcul de l\'identifiant de l\'image \n' ;
                	die($res->getMessage());
                }
		else
		{
			$row = $res->fetchrow() ;
			$nouvel_id= $row[0] + 1;
		}
		
		if(isset($nouvel_id))
		{
			$fichier = array('name' => $pairs['name'] , 'type' => $pairs['type'] , 'size' => $pairs['size'] , 'tmp_name' => $pairs['tmp_name'] ) ;
			$fichier_stocke = stocker_fichier($fichier,$nouvel_id) ;
		}
		
		if($fichier_stocke)
		{
			$fichier_meta = extraire_metadonnees($nouvel_id) ;
		}
		else
		{
			print 'ERROR : probleme durant l\'upload de l\'image \n' ;
		}
		
		if(! isset($fichier_meta))
		{
			print 'ERROR : probleme durant l\'ajout des metadonnees \n' ;
			return ;
		}
		
		
		
		$fichier_meta['ci_id_image'] = $nouvel_id ;
		$fichier_meta['ci_ce_utilisateur'] = "Aurelien" ;
		$fichier_meta['ci_ordre'] = $nouvel_id ;
		$fichier_meta['ci_publiable_eflore'] = 'false' ;
		
		
		$query_champs = '' ;
		$query_valeurs = '' ;
		
		foreach($fichier_meta as $field => $value)
		{
			$query_champs .= $field.',' ; 
		
			if(is_null($value))
			{
				$query_valeurs .= 'NULL,' ; 
			}
			else
			{
				$query_valeurs .= '"'.$DB->escapeSimple($value).'",' ; 
			}
		}
		
		$query_champs = rtrim($query_champs,',') ;
		$query_valeurs = rtrim($query_valeurs,',') ;
		
		$query ="INSERT INTO cel_images (".$query_champs.") VALUES (".$query_valeurs.")" ; ;
		
		$fp = fopen("/opt/lampp/htdocs/org.tela_botanica.UploadTest/jrest/services/dump.txt","a+") ;
		fwrite($fp,"\nNouvelle requete : \n") ;
		fwrite($fp,$query);
		
		$res =& $DB->query($query);
                if (PEAR::isError($res)) {
		
                	die($res->getMessage());
			fwrite($fp,"\n Echec de la requete : ".$res->getMessage()."\n \n") ;
			echo "ERROR : echec de l'insertion dans la base de donnees " ;
                }
		else
		{
			// l'upload demande de court-circuiter le fonctionnement normal de JREST
			fwrite($fp,"\nSucces de la requete : \n \n") ;
			header('HTTP/1.0 200 Created');
			echo "OK" ;
			exit() ;
		}
		
		fclose($fp) ;
	
	}
	
	// supprime une image et ses metadonnées associées de la base du carnet
	function deleteElement($uid){	
	
	// uid[0] : utilisateur obligatoire
	// uid[1] : identifiant(s) image(s) obligatoire(s)
	
	 // Controle detournement utilisateur 
	    session_start();
		if (($_SESSION['user']!="") && $_SESSION['user']['name']!=$uid[0]) {    	  
			print "Acces interdit";
			return;
	   	}

		$DB=$this->connectDB($this->config,'cel_db');
		
		
		if (isset($uid[1])) {
	           	$query="DELETE FROM cel_inventory WHERE ci_id_image in (".$DB->escapeSimple($uid[1]) .")";
			$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());
		}
		
		return true ;
	}

}

?>