/trunk/jrest/services/UserOpenId.php |
---|
New file |
0,0 → 1,248 |
<?php |
/** |
David Delon david.delon@clapas.net 2007 |
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. |
*/ |
/* |
* User.php |
* |
* Cas d'utilisation : |
* Service identification utilisateur |
* |
* |
* 1: Aucun identifiant ni mot de passe transmis |
* 1: L'application retourne l'identifiant de session en cours |
* 2: Une identification est toujours active, cette identification est retournee |
* |
* 1: L'application recoit un identifiant et un mot de passe |
* 1 : On tente login |
* 2 : Si reussi etat connecte |
* 3 : sinon pas connecte |
* |
* 1: L'application recoit un identifiant et pas de mot de passe : |
* 1 : Deconnection |
* |
/* En resume : |
* /User/ : retour id si jamais connecte, sinon retour login_utilisateur |
* /User/login_utilisateur : logout |
* /User/login_utilisateur/password : login |
* |
*/ |
Class UserOpenId extends DBAccessor { |
function UserOpenId($config) { |
$this->config=$config; |
} |
// TODO : controle systematique ....dans tous les services |
// Si connected : name cookie = name service |
function getRessource(){ |
$expireTime = 60*60*24*100; // 100 jours |
session_set_cookie_params($expireTime); |
$connected=false; |
$admin=false; |
session_start(); |
if (!$this->GetUser()) { |
if (isset($_COOKIE["cel_name"]) && ($this->RememberedUser($_COOKIE["cel_name"], $_COOKIE["cel_password"]))) { |
$retour= $this->GetUserName(); |
$connected=true; |
} |
else { |
$retour = session_id(); |
$connected=false; |
} |
} |
else { |
$retour= $this->GetUserName(); |
$connected=true; |
} |
$admin = $this->isAdmin($retour) ; |
$json = new Services_JSON(); |
$output = $json->encode(array($retour,$connected,$admin)); |
print($output); |
} |
function getElement($uid){ |
$connected=false; |
session_start(); |
// Non connect� : verification |
if (isset($uid[1])) { // Identification |
if (!$this->GetUser()) { // Si non identifi� |
if ($this->LoginUser($uid[0],$uid[1],1)) { // identification reussi |
$retour= $this->GetUserName(); |
$connected=true; |
} |
else { |
$retour = session_id(); |
$connected=false; |
} |
} |
else { // Deja identifi� |
$retour= $this->GetUserName(); |
$connected=true; |
} |
} |
else { // Deconnection |
$this->LogoutUser(); |
$retour = session_id(); |
$connected=false; |
} |
$admin = $this->isAdmin($retour) ; |
$json = new Services_JSON(); |
$output = $json->encode(array($retour,$connected,$admin)); |
print($output); |
} |
// USERS |
function LoadUser($name) { |
$password = ; |
$admin = $this->isAdmin($name) ; |
$retour= array("name"=>$name,"password"=>$password,"admin"=>$admin); |
return $retour; |
} |
function GetUserName() { |
if ($user = $this->GetUser()) { |
$name = $user["name"]; |
} |
else { |
$name =""; |
} |
return $name; |
} |
function GetUser() { |
return (isset($_SESSION["user"]) ? $_SESSION["user"] : ''); |
} |
function SetUser($user, $remember=1) { |
$_SESSION["user"] = $user; |
$this->SetPersistentCookie("cel_name", $user["name"], $remember); |
$this->SetPersistentCookie("cel_password", $user["password"], $remember); |
$this->SetPersistentCookie("cel_remember", $remember, $remember); |
} |
function LogoutUser() { |
$_SESSION["user"] = ""; |
$this->DeleteCookie("cel_name"); |
$this->DeleteCookie("cel_password"); |
$this->DeleteCookie("cel_remember"); |
} |
function SetPersistentCookie($name, $value, $remember = 1) { |
SetCookie($name, $value, time() + ($remember ? 90*24*60*60 : 60 * 60),'/'); |
$_COOKIE[$name] = $value; |
} |
function DeleteCookie($name) { |
SetCookie($name, "", 1,'/'); $_COOKIE[$name] = ""; |
} |
function LoginUser($name,$password,$remember=1) { |
if ($existingUser = $this->LoadUser($name)) { |
if ($password!="debug") { |
if ($existingUser["password"] == md5($password)) { |
$this->SetUser($existingUser, $remember); |
return true; |
} |
else { |
return false; |
} |
} |
else { |
$this->SetUser($existingUser, $remember); |
return true; |
} |
} |
} |
function RememberedUser($name,$password,$remember=1) { |
if ($existingUser = $this->LoadUser($name)) { |
if ($existingUser["password"] == $password) { |
$this->SetUser($existingUser, $remember); |
return true; |
} |
else { |
return false; |
} |
} |
} |
} |
/* +--Fin du code ---------------------------------------------------------------------------------------+ |
* $Log$ |
* Revision 1.5 2008-01-30 08:57:28 ddelon |
* fin mise en place mygwt |
* |
* Revision 1.4 2007-05-22 12:54:09 ddelon |
* Securisation acces utilisateur |
* |
* Revision 1.3 2007-05-21 18:12:20 ddelon |
* Gestion des importations locale de releves |
* |
* |
*/ |
?> |
/trunk/jrest/services/PlantNetRss.php |
---|
New file |
0,0 → 1,225 |
<?php |
/** |
* PHP Version 5 |
* |
* @category PHP |
* @package jrest |
* @author aurelien <aurelien@tela-botanica.org> |
* @copyright 2009 Tela-Botanica |
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL |
* @version SVN: <svn_id> |
* @link /doc/jrest/ |
*/ |
class PlantNetRss extends DBAccessor { |
var $config; |
function PlantNetRss($config) { |
$this->config=$config; |
} |
function getElement($uid){ |
$rss = "<?xml version=\"1.0\" encoding=\"UTF-8\"?> \n"; |
$rss .= "<rss version=\"2.0\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\">\n"; |
$rss .=' |
<channel> |
<title>Carnet en ligne</title> |
<link>http://www.tela-botanica.org/cel/jrest/ImageRss</link> |
<description>Carnet en ligne</description> |
<language>fr</language>'; |
$DB=$this->connectDB($this->config,'cel_db'); |
$motcle = 'plantnet'; |
$query_id_id_img = 'SELECT cmc_id_mot_cle_utilisateur, cmc_id_proprietaire FROM cel_mots_cles_images WHERE cmc_id_mot_cle_general = md5("'.$motcle.'")' ; |
$res =& $DB->query($query_id_id_img); |
if (DB::isError($res)) { |
die($res->getMessage()); |
} |
$query='SELECT * FROM cel_images'; |
$premier_item = true ; |
while ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) { |
if($premier_item) { |
$query .= ' WHERE '; |
$premier_item = false ; |
} |
else{ |
$query .= ' OR '; |
} |
$query .= '(ci_meta_mots_cles LIKE "%'.$row['cmc_id_mot_cle_utilisateur'].'%" AND ci_ce_utilisateur ="'.$row['cmc_id_proprietaire'].'")' ; |
} |
$query .= ' ORDER BY ci_meta_date_ajout DESC LIMIT 0,100' ; |
$res =& $DB->query($query); |
if (DB::isError($res)) { |
die($res->getMessage()); |
} |
while ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) { |
$row['ci_nom_original'] = htmlspecialchars($row['ci_nom_original']); |
$row['ci_id_image'] = htmlspecialchars($row['ci_id_image']); |
$row['ci_meta_date_ajout'] = htmlspecialchars($row['ci_meta_date_ajout']); |
$row['ci_ce_utilisateur'] = htmlspecialchars($row['ci_ce_utilisateur']); |
$row['ci_meta_user_comment'] = htmlspecialchars($row['ci_meta_user_comment']); |
$row['ci_note_image'] = htmlspecialchars($row['ci_note_image']); |
$tailleXY = $this->calculerDimensions(array($row['ci_meta_width'], $row['ci_meta_height'])); |
$id = $row['ci_id_image']; |
$chemin_sur_serveur = $this->config['cel_db']['url_images']; |
$req_liaison = 'SELECT * FROM cel_inventory WHERE ordre IN (SELECT coi_ce_observation FROM cel_obs_images WHERE coi_ce_image = "'.$row['ci_id_image'].'") AND identifiant = "'.$row['ci_ce_utilisateur'].'"' ; |
$res_liaison =& $DB->query($req_liaison); |
if (DB::isError($res_liaison)) { |
die($res_liaison->getMessage()); |
} |
if (DB::isError($res_liaison)) { |
die($res_liaison->getMessage()); |
} |
$id = sprintf('%09s', $id) ; |
$id = wordwrap($id, 3 , '_', true) ; |
$id_fichier = $id.".jpg" ; |
$niveauDossier = split("_", $id) ; |
$dossierNiveau1 = $niveauDossier[0] ; |
$dossierNiveau2 = $niveauDossier[1] ; |
$chemin_sur_serveur_final = $chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2 ; |
$chemin_fichier = $chemin_sur_serveur_final.'/L/'.$id."_L.jpg" ; |
$chemin_fichier_m = $chemin_sur_serveur_final.'/M/'.$id."_M.jpg" ; |
$rss.= ' <item> |
<title>'.$row['ci_nom_original']." (".$row['ci_id_image'].") ". ' par ' . $row['ci_ce_utilisateur'].'</title> |
<author>'.$row['ci_ce_utilisateur'].'</author> |
<link>'.$chemin_fichier.'</link> |
<guid>'.$chemin_fichier.'</guid> |
<description>'. |
' <![CDATA[<img src="'.$chemin_fichier_m.'" alt="'.$row['ci_nom_original'].'" height="'.$tailleXY[1].'px" width="'.$tailleXY[0].'px"></img><br/>'. |
$row['ci_nom_original']. ' modifiée le ' .$row['ci_meta_date_ajout'] . ' par ' . $row['ci_ce_utilisateur'].'<br/>' ; |
if(trim($row['ci_meta_mots_cles']) != '') { |
$row['ci_meta_mots_cles'] = rtrim($row['ci_meta_mots_cles'],','); |
$mots_cles_chaine = '' ; |
$mots_cles_tab = split(',',$row['ci_meta_mots_cles']); |
foreach($mots_cles_tab as $item) { |
$mots_cles_chaine .= '\''.$item.'\','; |
} |
$mots_cles_chaine = rtrim($mots_cles_chaine,','); |
$req_mots_cles = 'SELECT cmc_mot_cle FROM cel_mots_cles_images WHERE cmc_id_mot_cle_utilisateur IN ('.$mots_cles_chaine.') AND cmc_id_proprietaire = "'.$row['ci_ce_utilisateur'].'"' ; |
$res_mots_cles =& $DB->query($req_mots_cles); |
if (DB::isError($res_mots_cles)) { |
die($res_mots_cles->getMessage()); |
} |
$mots_cles = '' ; |
while($mot_cle = & $res_mots_cles->fetchrow(DB_FETCHMODE_ASSOC)) { |
$mots_cles .= $mot_cle['cmc_mot_cle'].' , ' ; |
} |
$mots_cles = rtrim($mots_cles,', '); |
if(trim($mots_cles) != '') { |
// $rss .= 'Mot clés : '.mb_convert_encoding($mots_cles,'HTML-ENTITIES','UTF-8').' <br/>' ; |
} |
} |
if(trim($row['ci_meta_comment']) != '') { |
// $rss .= 'Commentaire : '.mb_convert_encoding($row['ci_meta_comment'],'HTML-ENTITIES','UTF-8').' <br/>'; |
} |
/* while($ligne = & $res_liaison->fetchrow(DB_FETCHMODE_ASSOC)) { |
$rss .= '<p> Liée à l\'observation '.$ligne['id'].'<br/>' ; |
$rss .= 'Nom saisi : '.$ligne['nom_sel'].'<br/>' ; |
$rss .= 'Nom retenu : '.$ligne['nom_ret'].'<br/>' ; |
$rss .= 'Datée du '.$ligne['date_observation'].'<br/>' ; |
$rss .= 'Lieu : '.trim($ligne['location'],'000null').' ('.trim($ligne['id_location'],'000null').') '.trim($ligne['station'],'000null').' '.trim($ligne['lieudit'],'000null').'<br/></p>' ; |
}*/ |
$rss .= ']]>' ; |
$rss .= '</description> |
<dc:format>text/html</dc:format> |
</item>'; |
} |
$rss.= '</channel> </rss>'; |
header("Content-Type: text/xml; charset=UTF-8"); |
print $rss; |
exit; |
} |
function getRessource(){ |
$uid[] = array() ; |
$this->getElement($uid); |
} |
function calculerDimensions($tailleXY) { |
$tailleOr = 300 ; |
if($tailleXY[1] == 0) { |
$tailleXY[1] = $tailleOr; |
} |
if($tailleXY[0] == 0) { |
$tailleXY[0] = $tailleOr; |
} |
$maxTaille = max($tailleXY[1],$tailleXY[0]) ; |
if($maxTaille == $tailleXY[1]) { |
$rapport = $tailleXY[1]/$tailleXY[0] ; |
$tailleXY[1] = 300 ; |
$tailleXY[0] = round($tailleXY[1]/$rapport,0) ; |
}else { |
$rapport = $tailleXY[0]/$tailleXY[1] ; |
$tailleXY[0] = 300 ; |
$tailleXY[1] = round($tailleXY[0]/$rapport,0) ; |
} |
return $tailleXY ; |
} |
} |
/* +--Fin du code ---------------------------------------------------------------------------------------+ |
* $Log$ |
* Revision 1.5 2008-11-13 11:29:12 ddelon |
* Reecriture gwt-ext |
* |
* Revision 1.4 2007-06-06 13:31:16 ddelon |
* v0.09 |
* |
* Revision 1.3 2007-05-22 12:54:09 ddelon |
* Securisation acces utilisateur |
* |
* |
* |
*/ |
?> |
/trunk/jrest/services/NameMap.php |
---|
New file |
0,0 → 1,139 |
<?php |
/** |
David Delon david.delon@clapas.net 2007 |
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 |
/* |
* NameMap.php |
* |
* Cas d'utilisation : |
* Service recherche d'image a partir d'un numero nomenclatural |
* |
* 1: Le service recoit un numero nomenclatural |
* 2: Le service calcul le numero taxonomique associe |
* 3: Le service recherche une carte disponible |
* A: Pas de carte disponible, generation de l'image |
*/ |
/** Constante stockant l'URL o. sont accessible les cartes. Le %s correspond au nom du fichier.*/ |
define('EF_URL_CARTO', 'http://www.tela-botanica.org/sites/eflore/generique/images/cartes/'); |
// france_BDNFF_4.02_nt8523.png |
/** Constante stockant l'URL d'appel du module chorologie*/ |
define('EF_URL_CHORO', 'http://www.tela-botanica.org/eflore/BDNFF/4.02/nn/'); |
// 182/chorologie |
Class NameMap extends DBAccessor { |
var $config; |
var $extendMapProductor; |
function NameMap($config) { |
$this->config=$config; |
} |
function getElement($uid){ |
// Num nomenclatural : recherche nt |
$DB=$this->connectDB($this->config); |
$query = "SELECT DISTINCT b.esn_id_taxon FROM eflore_nom, eflore_nom_rang," . |
" eflore_selection_nom a, eflore_selection_nom b". |
" WHERE a.esn_id_nom= ".$uid[0]. |
" AND a.esn_id_version_projet_taxon = 25 ". |
" AND a.esn_id_taxon=b.esn_id_taxon ". |
" AND b.esn_ce_statut=3 ". |
" AND a.esn_id_version_projet_taxon=b.esn_id_version_projet_taxon" . |
" AND en_ce_rang = enrg_id_rang" . |
" AND en_id_nom = b.esn_id_nom" . |
" AND a.esn_id_version_projet_taxon=en_id_version_projet_nom "; |
$res =& $DB->query($query); |
if (DB::isError($res)) { |
die($res->getMessage()); |
} |
while ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) { |
$nt=$row['esn_id_taxon']; |
} |
// si le taxon cherché n'existe pas |
if(!$nt) { |
$json = new Services_JSON(); |
$output = $json->encode(array('')); |
print($output); |
exit(); |
} |
$file = EF_URL_CARTO."france_BDNFF_4.02_nt".$nt.".png"; |
$file_headers = @get_headers($file); |
if($file_headers[0] == 'HTTP/1.1 404 Not Found') { |
} |
else { |
$service=EF_URL_CHORO.$uid[0].'/chorologie'; |
@get_headers($service); |
} |
$json = new Services_JSON(); |
$output = $json->encode(array($file)); |
print($output); |
} |
} |
/* +--Fin du code ---------------------------------------------------------------------------------------+ |
* $Log$ |
* Revision 1.1 2008-01-30 08:57:28 ddelon |
* fin mise en place mygwt |
* |
* Revision 1.1 2007-06-06 13:31:16 ddelon |
* v0.09 |
* |
* |
* |
* |
*/ |
?> |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/trunk/jrest/services/InventoryKeyWordObsLink.php |
---|
New file |
0,0 → 1,139 |
<?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 |
/* |
* 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 InventoryKeyWordObsLink extends DBAccessor { |
var $config; |
function InventoryKeyWordObsLink($config) { |
$this->config=$config; |
} |
// 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,'database_cel'); |
if(!isset($pairs['mots_cles']) || !isset($uid[1])) { |
return; |
} |
if(isset($pairs['action'])) { |
$action = $pairs['action']; |
} |
$valeur = $pairs['mots_cles']; |
$valeur = trim($valeur, "null"); |
$valeur = trim($valeur, ";;"); |
$query="UPDATE cel_inventory SET " ; |
$query .= "mots_cles = CONCAT(IFNULL(mots_cles,''),'".$DB->escapeSimple($valeur).";') "; |
$query .= "WHERE ordre IN (".$uid[1].") AND identifiant = '".$DB->escapeSimple($uid[0])."'"; |
echo $query; |
$res =& $DB->query($query); |
if (PEAR::isError($res)) { |
$this->logger("CEL_bugs","Erreur d'ajout de plusieurs observations :".$res->getMessage()." ".$query); |
die($res->getMessage()); |
} |
echo $query; |
return true; |
} |
function deleteElement($uid){ |
// Controle detournement utilisateur |
session_start(); |
if (($_SESSION['user']!="") && $_SESSION['user']['name']!=$uid[0]) { |
print "Acces interdit"; |
return; |
} |
$DB=$this->connectDB($this->config,'database_cel'); |
if(!isset($uid[2]) || !isset($uid[1])) { |
echo 'pas de mots clés'; |
return; |
} |
$valeur = $uid[2] ; |
$valeur = trim($valeur, "null"); |
$valeur = trim($valeur, ";;"); |
$query="UPDATE cel_inventory SET " ; |
$chaine = $DB->escapeSimple($valeur); |
$query .= "mots_cles = REPLACE(REPLACE(mots_cles,'".$chaine."',''),';;',';') "; |
$query .= "WHERE ordre IN (".$uid[1].") AND identifiant = '".$DB->escapeSimple($uid[0])."'"; |
$res =& $DB->query($query); |
if (PEAR::isError($res)) { |
$this->logger("CEL_bugs","Erreur de suppression des mots clés de plusieurs observations :".$res->getMessage()." ".$query); |
die($res->getMessage()); |
} |
return true; |
} |
} |
?> |
/trunk/jrest/services/CelSyndicationObservation.php |
---|
New file |
0,0 → 1,431 |
<?php |
/** |
* Service fournissant des informations concernant le CEL au format RSS1, RSS2 ou ATOM. |
* Encodage en entrée : utf8 |
* Encodage en sortie : utf8 |
* Format du service : |
* /CelSyndicationObservation/liste-des-flux |
* /CelSyndicationObservation/opml |
* /CelSyndicationObservation/par-defaut/(rss1|rss2|atom)?start=0&limit=150 |
* /CelSyndicationObservation/pour-admin/(rss1|rss2|atom)?start=0&limit=150 |
* /CelSyndicationObservation/par-mots-cles/(rss1|rss2|atom)/mot-cle?start=0&limit=150 |
* /CelSyndicationObservation/par-commune/(rss1|rss2|atom)/nom-commune?start=0&limit=150 |
* |
* Les paramêtres : |
* - "start" indique le numéro du premier item à afficher |
* - "limit" nombre d'items à afficher |
* |
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org> |
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt> |
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt> |
* @version $Id$ |
* @copyright 2010 |
*/ |
class CelSyndicationObservation extends Cel { |
private $format = null; |
private $service = null; |
private $parametres = null; |
private $squelette = null; |
private $squelette_dossier = null; |
private $flux = array(); |
/** |
* Méthode appelée avec une requête de type GET. |
*/ |
public function getElement($params = array()) { |
// Initialisation des variables |
$info = array(); |
$contenu = ''; |
// Pré traitement des paramêtres |
$pour_bdd = false; |
$p = $this->traiterParametres(array('service', 'format'), $params, $pour_bdd); |
extract($p); |
$this->parametres = $params; |
$this->squelette_dossier = dirname(__FILE__).DIRECTORY_SEPARATOR.'squelettes'.DIRECTORY_SEPARATOR; |
// Récupération de la liste des flux |
$this->chargerListeDesFlux(); |
// Chargement du bon type de service demandé |
if (isset($service)) { |
$this->service = $this->traiterNomService($service); |
$methode = $this->getNomMethodeService(); |
if (method_exists($this, $methode)) { |
if (isset($format) && preg_match('/^(?:rss1|rss2|atom)$/i', $format)) { |
// Mise en minuscule de l'indication du format |
$this->format = strtolower($format); |
// Définition du fichier squelette demandé |
$this->squelette = $this->squelette_dossier.$this->format.'.tpl.xml'; |
} else if (isset($this->flux[$this->service])) { |
$this->format = ''; |
$this->messages[] = "Le service CEL Syndication nécessite d'indiquer en second paramètre le format : rss1, rss2 ou atom."; |
} |
if (!isset($this->flux[$this->service]) || isset($this->format)) { |
// Suppression des paramêtres inutile pour le reste des méthodes |
array_shift($this->parametres); |
array_shift($this->parametres); |
// Récupération du contenu à renvoyer |
$contenu = $this->$methode(); |
} |
} else { |
$this->messages[] = "Le type d'information demandé '$this->service' n'est pas disponible."; |
} |
} else { |
$this->messages[] = "Le service CEL Syndication Observation nécessite d'indiquer en premier paramètre le type d'information demandé."; |
} |
// Envoie sur la sortie standard |
$encodage = 'utf-8'; |
$mime = $this->getTypeMime(); |
$formatage_json = $this->getFormatageJson(); |
$this->envoyer($contenu, $mime, $encodage, $formatage_json); |
} |
private function getUrlBase() { |
$url_base = sprintf($this->config['settings']['baseURLAbsoluDyn'], get_class($this).'/'); |
return $url_base; |
} |
private function getUrlServiceBase() { |
$url_service = $this->getUrlBase().$this->service.'/'.$this->format; |
return $url_service; |
} |
private function traiterNomService($nom) { |
$nom = strtolower($nom); |
return $nom; |
} |
private function getNomMethodeService() { |
$methode = ''; |
$service_formate = str_replace(' ', '', ucwords(implode(' ', explode('-', $this->service)))); |
$methode = 'getService'.$service_formate; |
return $methode; |
} |
private function getTypeMime() { |
$mime = ''; |
$test = isset($this->format) ? $this->format : $this->service; |
switch ($test) { |
case 'atom' : |
$mime = 'application/atom+xml'; |
break; |
case 'rss1' : |
case 'rss2' : |
$mime = 'application/rss+xml'; |
break; |
case 'opml' : |
$mime = 'text/x-opml'; |
break; |
default: |
$mime = 'text/html'; |
} |
return $mime; |
} |
private function getFormatageJson() { |
$json = false; |
switch ($this->service) { |
case 'liste-des-flux' : |
$json = true; |
break; |
default: |
$json = false; |
} |
return $json; |
} |
private function getFlux($nom) { |
return isset($this->flux[$nom]) ? $this->flux[$nom] : array(); |
} |
private function setFlux($nom, $titre, $description) { |
$url_base = $this->getUrlBase(); |
$formats = array('atom', 'rss2', 'rss1'); |
$flux = array(); |
foreach ($formats as $format) { |
$url = $url_base.$nom.'/'.$format; |
$flux[$format] = $url; |
} |
$this->flux[$nom] = array('titre' => $titre, 'description' => $description, 'urls' => $flux); |
} |
private function chargerListeDesFlux() { |
$this->setFlux('par-defaut', 'Flux de syndication des observations publiques du CEL', |
'Ce flux fournit des informations sur les observations du CEL.'); |
$this->setFlux('par-mots-cles', 'Flux de syndication des observations publiques du CEL filtrées par mots clés', |
"Ce flux fournit des informations sur les observations du CEL filtrées par mots-clés. Il nécessite d'être |
paramétré en indiquant en dernier position de l'url le mot-clé à rechercher."); |
$this->setFlux('par-commune','Flux de syndication des observations publiques du CEL filtrées par commune', |
"Ce flux fournit des informations sur les observations du CEL filtrées par commune. Il nécessite d'être |
paramétré en indiquant en dernier position de l'url le nom de la commune à rechercher."); |
} |
private function getServiceListeDesFlux() { |
return $this->flux; |
} |
private function getServiceOpml() { |
$donnees = array(); |
$id = 1; |
foreach ($this->flux as $flux_nom => $flux){ |
$info = array(); |
$info['type'] = 'atom'; |
$info['titre'] = $flux['titre']; |
$info['texte'] = "CEL - Obs - $flux_nom"; |
$info['description'] = $flux['description']; |
$info['url_xml'] = $this->getUrlBase().$flux_nom.'/atom'; |
$info['url_html'] = $this->config['settings']['aideCelUrl'].'FluxSyndication'; |
$donnees['liste_flux'][] = $info; |
} |
$this->squelette = $this->squelette_dossier.'opml.tpl.xml'; |
$contenu = Cel::traiterSquelettePhp($this->squelette, $donnees); |
return $contenu; |
} |
private function getServiceParDefaut() { |
// Construction de la requête |
$requete = (($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').' * '. |
'FROM cel_inventory '. |
'WHERE transmission = 1 '. |
'ORDER BY '.((!is_null($this->orderby)) ? $this->orderby : 'date_modification DESC').' '. |
"LIMIT $this->start,$this->limit "; |
$elements = $this->executerRequete($requete); |
// Création du contenu |
$contenu = $this->executerService($elements); |
return $contenu; |
} |
private function getServicePourAdmin() { |
$contenu = ''; |
if ($this->authentifier()) { |
// Construction de la requête |
$requete = (($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').' * '. |
'FROM cel_inventory '. |
'ORDER BY '.((!is_null($this->orderby)) ? $this->orderby : 'date_modification DESC').' '. |
"LIMIT $this->start,$this->limit "; |
$elements = $this->executerRequete($requete); |
// Création du contenu |
$contenu = $this->executerService($elements); |
} |
return $contenu; |
} |
private function getServiceParMotsCles() { |
$contenu = ''; |
$mot_cle = $this->parametres[0]; |
if (isset($mot_cle)) { |
$mot_cle_encode = $this->bdd->quote($this->encoderMotCle($mot_cle)); |
// Construction de la requête |
$requete = 'SELECT * '. |
'FROM cel_mots_cles_obs '. |
"WHERE cmc_id_mot_cle_general = $mot_cle_encode "; |
$elements = $this->executerRequete($requete); |
if ($elements != false && count($elements) > 0) { |
// Pré-construction du where de la requête |
$tpl_where = '(mots_cles LIKE "%%%s%%" AND identifiant = %s )'; |
$requete_where = array(); |
foreach ($elements as $occurence) { |
$requete_where[] = sprintf($tpl_where, $occurence['cmc_id_mot_cle_utilisateur'], $this->bdd->quote($occurence['cmc_id_proprietaire'])); |
} |
// Construction de la requête |
$requete = 'SELECT * '. |
'FROM cel_inventory '. |
'WHERE transmission = 1 '. |
'AND '.implode(" \nOR ", $requete_where).' '. |
'ORDER BY '.((!is_null($this->orderby)) ? $this->orderby : 'date_modification, date_creation DESC').' '. |
"LIMIT $this->start,$this->limit "; |
$elements = $this->executerRequete($requete); |
// Création du contenu |
$contenu = $this->executerService($elements); |
} else { |
$this->messages[] = "Aucune observation ne correspond à ce mot clé."; |
} |
} else { |
$this->messages[] = "Le service demandé nécessite d'indiquer un mot-clé en dernier paramêtre."; |
} |
return $contenu; |
} |
private function getServiceParCommune() { |
$contenu = ''; |
$commune = $this->parametres[0]; |
if (isset($commune)) { |
$commune = $this->bdd->quote($commune); |
// Construction de la requête |
$requete = (($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').' * '. |
'FROM cel_inventory '. |
'WHERE transmission = 1 '. |
"AND location = $commune ". |
'ORDER BY '.((!is_null($this->orderby)) ? $this->orderby : 'date_modification DESC, location ASC').' '. |
"LIMIT $this->start,$this->limit "; |
$elements = $this->executerRequete($requete); |
// Création du contenu |
$contenu = $this->executerService($elements); |
} else { |
$this->messages[] = "Le service demandé nécessite d'indiquer une nom de commune en dernier paramêtre."; |
} |
return $contenu; |
} |
private function executerService($elements) { |
$contenu = ''; |
if (is_array($elements)) { |
// Prétraitement des données |
$donnees = $this->construireDonneesCommunesAuFlux($elements); |
foreach ($elements as $element) { |
$donnees['items'][] = $this->construireDonneesCommunesAuxItems($element); |
} |
// Création du contenu à partir d'un template PHP |
if (isset($this->squelette)) { |
$contenu = Cel::traiterSquelettePhp($this->squelette, $donnees); |
} |
} |
return $contenu; |
} |
private function construireDonneesCommunesAuFlux($observations) { |
$donnees = $this->getFlux($this->service); |
$donnees['guid'] = $this->getUrlServiceBase(); |
$donnees['lien_service'] = $this->creerUrlService(); |
$donnees['lien_cel'] = $this->config['settings']['celUrlAbsolu']; |
$donnees['editeur'] = $this->config['settings']['editeur']; |
$derniere_info_en_date = reset($observations); |
$date_modification_timestamp = strtotime($derniere_info_en_date['date_modification']); |
$donnees['date_maj_RSS'] = date(DATE_RSS, $date_modification_timestamp); |
$donnees['date_maj_ATOM'] = date(DATE_ATOM, $date_modification_timestamp); |
$donnees['date_maj_W3C'] = date(DATE_W3C, $date_modification_timestamp); |
$donnees['annee_courante'] = date('Y'); |
$donnees['generateur'] = 'CEL - Jrest - CelSyndicationObservation'; |
preg_match('/([0-9]+)/', '$Revision$', $match); |
$donnees['generateur_version'] = $match[1]; |
return $donnees; |
} |
private function construireDonneesCommunesAuxItems($observation) { |
$item = array(); |
$date_modification_timestamp = strtotime($observation['date_modification']); |
$item['date_maj_simple'] = strftime('%A %d %B %Y à %H:%M', $date_modification_timestamp); |
$item['date_maj_RSS'] = date(DATE_RSS, $date_modification_timestamp); |
$item['date_maj_ATOM'] = date(DATE_ATOM, $date_modification_timestamp); |
$item['date_maj_W3C'] = date(DATE_W3C, $date_modification_timestamp); |
$item['date_creation_simple'] = strftime('%A %d %B %Y à %H:%M', strtotime($observation['date_creation'])); |
$item['titre'] = $this->creerTitre($observation); |
$item['guid'] = $this->creerGuidItem($observation); |
$item['lien'] = $this->creerLienItem($observation); |
$item['description'] = $this->creerDescription($observation, $item); |
$item['categorie'] = $this->creerCategorie($item); |
$item['description_encodee'] = htmlspecialchars($item['description']); |
$item['modifier_par'] = $this->creerAuteur($observation['identifiant']); |
return $item; |
} |
private function creerTitre($obs) { |
$nom_plante = $obs['nom_sel'].' [nn'.$obs['num_nom_sel'].']'; |
$lieu = $obs['location'].' ('.$obs['id_location'].')'; |
$utilisateur = $this->creerAuteur($obs['identifiant']); |
$titre = "$nom_plante à $lieu par $utilisateur"; |
$titre = $this->nettoyerTexte($titre); |
return $titre; |
} |
private function creerAuteur($courriel) { |
$auteur = ($this->etreFluxAdmin()) ? $courriel : $this->traiterCourriel($courriel); |
return $auteur; |
} |
private function traiterCourriel($courriel) { |
$courriel = preg_replace('/[^@]+$/i', '...', $courriel); |
return $courriel; |
} |
private function nettoyerTexte($txt) { |
$txt = preg_replace('/&(?!(a-z+|#0-9+|#x0-9a-f+);)/i', '&', $txt); |
$txt = preg_replace('/000null/i', '', $txt); |
return $txt; |
} |
private function creerGuidItem($element) { |
$guid = sprintf($this->config['settings']['guidObsTpl'], 'obs'.$element['id']); |
return $guid; |
} |
private function creerLienItem($element) { |
$lien = sprintf($this->config['settings']['efloreUrlTpl'], urlencode($element['num_nom_sel'])); |
return $lien; |
} |
private function creerDescription($obs, $item) { |
$lien_correction = sprintf($this->config['settings']['phpEditUrlTpl'], $obs['id']); |
$description = |
'<ul>'. |
' <li>Nom saisi : '.$obs['nom_sel'].'</li>'. |
(($obs['nom_sel'] != $obs['nom_ret']) ? ' <li>Nom retenu : '.$obs['nom_ret'].'</li>' : ''). |
' <li>Lieu : '.$obs['location'].' ('.$obs['id_location'].')</li>'. |
($this->etreNull($obs['station']) ? '': ' <li>Station : '.$obs['station'].'</li>'). |
($this->etreNull($obs['milieu']) ? '': ' <li>Milieu : '.$obs['milieu'].'</li>'). |
($this->etreNull($obs['commentaire']) ? '': ' <li>Commentaire : '.$obs['commentaire'].'</li>'). |
(($this->etreFluxAdmin()) ? ' <li>Transmis (= public) : '.($obs['transmission'] == 1 ? 'oui' : 'non').'</li>' : ''). |
' <li>Modifiée le : '.$item['date_maj_simple'].'</li>'. |
' <li>Créée le : '.$item['date_creation_simple'].'</li>'. |
(($this->etreFluxAdmin()) ? ' <li><a href="'.$lien_correction.'">Corriger cette observation</a></li>' : ''). |
'</ul>'; |
$description = $this->nettoyerTexte($description); |
return $description; |
} |
private function creerCategorie($element) { |
$categorie = ''; |
$categorie = 'Observation'; |
$categorie = $this->nettoyerTexte($categorie); |
return $categorie; |
} |
private function etreFluxAdmin() { |
return ($this->service == 'pour-admin') ? true : false; |
} |
private function etreNull($valeur) { |
$etre_null = false; |
if ($valeur == '' || $valeur == null || $valeur == '000null' || $valeur == 'null') { |
$etre_null = true; |
} |
return $etre_null; |
} |
private function creerUrlService() { |
$url_service = $this->getUrlServiceBase(); |
if (isset($this->start) || isset($this->limit)) { |
$arguments = array(); |
if (isset($this->start) && isset($_GET['start'])) { |
$arguments[] = 'start='.$this->start; |
} |
if (isset($this->limit) && isset($_GET['limit'])) { |
$arguments[] = 'limit='.($this->limit); |
} |
if (count($arguments) > 0) { |
$url_service .= '?'.implode('&', $arguments); |
} |
} |
return $url_service; |
} |
} |
/trunk/jrest/services/InventoryPDF.php |
---|
New file |
0,0 → 1,252 |
<?php |
// In : utf8 |
// Out : iso8859 |
// Formatage pdf d'un releve (a revoir) |
/** Constante stockant l'URL de la page d'accueil de Photoflora.*/ |
define('EF_URL_PHOTOFLORA', 'http://photoflora.free.fr/'); |
/** Constante stockant l'URL de la page de Photoflora affichant toutes les images d'un taxon donn.es.*/ |
define('EF_URL_PHOTOFLORA_TAXON', EF_URL_PHOTOFLORA.'FiTax.php?NumTaxon=%s'); |
/** Constante stockant l'URL du dossier de photoflora contenant les images miniatures.*/ |
define('EF_URL_PHOTOFLORA_IMG_MIN', 'http://www.tela-botanica.org/~photoflo/photos/%s/min/%s'); |
/** Constante stockant l'URL du dossier de photoflora contenant les images normale.*/ |
define('EF_URL_PHOTOFLORA_IMG_MAX', 'http://www.tela-botanica.org/~photoflo/photos/%s/max/%s'); |
/** Constante stockant l'expression r.guli.re r.cup.rant l'abr.viation du photographe et le nom du fichier.*/ |
define('EF_URL_PHOTOFLORA_REGEXP', '/\/photos\/([^\/]+)\/max\/(.+)$/'); |
/** Constante stockant l'URL du service XML de Photoflora.*/ |
define('EF_URL_PHOTOFLORA_SERVICE', EF_URL_PHOTOFLORA.'ef_photoflora.php?nt=%s'); |
Class InventoryPDF extends DBAccessor { |
var $config; |
var $extendPDFProductor; |
function InventoryPDF($config) { |
$this->config=$config; |
// Pas d'heritage multiple en php :( |
$this->extendPDFProductor = new PDFProductor(); |
$this->extendPDFProductor->initPDF(); |
} |
function getElement($uid){ |
// Controle detournement utilisateur |
session_start(); |
$this->controleUtilisateur($uid[0]); |
// uid[0] : utilisateur obligatoire |
// uid[1] : si absent : valeur 'all' (commune) |
// uid[2] : si absent : valeur 'all' (date) |
// uid[3] : si absent : valeur 'all' (recherche libre) |
// uid[4] : si absent : valeur 'all' (station) |
$DB=$this->connectDB($this->config,'database_cel'); |
if (!isset($uid[1]) || $uid[1]=="" || $uid[1]=="all" ) { |
$uid[1]="all"; |
$query_location=""; |
} |
else { |
$query_location=" AND location='".$DB->escapeSimple($uid[1])."' "; |
} |
if (!isset($uid[2]) || $uid[2]=="" || $uid[2]=="all") { |
$uid[2]="all"; |
$query_date=""; |
} |
else { |
$query_date=" AND date_observation='".$DB->escapeSimple($uid[2])."' "; |
} |
if (!isset($uid[3]) || $uid[3]=="" || $uid[3]=="all") { |
$uid[3]="all"; |
$query_libre=""; |
} |
else { |
$query_libre=" AND (nom_sel like '%".$DB->escapeSimple($uid[3])."%' OR nom_ret like '%".$DB->escapeSimple($uid[3])."%' OR station like '%".$DB->escapeSimple($uid[3])."%' OR commentaire like '%".$DB->escapeSimple($uid[3])."%') "; |
} |
if (!isset($uid[4]) || $uid[4]=="" || $uid[4]=="all") { |
$uid[4]="all"; |
$query_station=""; |
} |
else { |
$query_station=" AND station='".$DB->escapeSimple($uid[4])."' "; |
} |
$value=array(); |
$query="SELECT identifiant, ordre, nom_sel, num_nom_sel, nom_ret, num_nom_ret, num_taxon, famille, location, date_observation," . |
" station, commentaire, transmission FROM cel_inventory WHERE identifiant='".$DB->escapeSimple($uid[0])."' " . |
$query_location. |
$query_date. |
$query_libre. |
$query_station. |
" ORDER BY ordre "; |
$res =& $DB->query($query); |
if (DB::isError($res)) { |
die($res->getMessage()); |
} |
// Set up the pdf object. |
$pdf = &File_PDF::factory(array('orientation' => 'P', 'format' => 'A4')); |
// DesActivate compression. |
$pdf->setCompression(false); |
$pdf->setMargins(0, 0); |
// Enable automatic page breaks. |
$pdf->setAutoPageBreak(true); |
// Start the document. |
$pdf->open(); |
// Start a page. |
$pdf->addPage(); |
$pdf->setFont('Times', '' , 12); |
$i=1; |
$tempfn = tempnam("",""); |
while ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) { |
// Denullifiage |
foreach($row as $k=>$v) { |
if (($v=="null") || ($v=="000null")) { |
$row[$k]=""; |
} |
else { |
$row[$k]=utf8_decode($v); |
} |
} |
if ($row['date_observation']!="0000-00-00 00:00:00") { |
list($year,$month,$day)= split ('-',$row['date_observation']); |
list($day)= split (' ',$day); |
$row['date_observation']=$day."/".$month."/".$year; |
} |
else { |
$row['date_observation']="00/00/0000"; |
} |
$text= $row['nom_sel']." ".$row['num_nom_sel']." ".$row['nom_ret']." ".$row['num_nom_ret']." ".$row['num_taxon']." ". |
$row['famille']." ".$row['location']." ".$row['id_location']." ".$row['date_observation']." ".$row['station']; |
$row['commentaire']; |
$pdf->write(10, $text."\n"); |
$projet_photo = 'photoflora'; |
$tab_retour[$projet_photo]=chercherIllustrationsServiceXml(sprintf(EF_URL_PHOTOFLORA_SERVICE, $row['num_taxon'])); |
$url_miniature =''; |
foreach ($tab_retour[$projet_photo] as $cle => $illustration) { |
if (preg_match(EF_URL_PHOTOFLORA_REGEXP, $illustration['about'], $match)) { |
$abreviation = $match[1]; |
$fichier = $match[2]; |
$url_miniature = sprintf(EF_URL_PHOTOFLORA_IMG_MIN, $abreviation, $fichier);; |
// Priorite aux images en png |
if (strstr($fichier, '.png')) { |
break; |
} |
} |
} |
if ($url_miniature!='') { |
list($debut,$ext)=split("\.",basename($url_miniature)); |
$temp = fopen($tempfn, "w"); |
$buf=file_get_contents($url_miniature); |
fwrite($temp,$buf); |
fclose($temp); |
$pdf->image($tempfn,10,($i*10),0,0,$ext); |
} |
$i++; |
} |
// Print the generated file. |
echo $pdf->output("Rapport"); |
} |
} |
function chercherIllustrationsServiceXml($url) |
{ |
return analyserFichierRdf($url); |
} |
function analyserFichierRdf($chemin) |
{ |
$aso_info = array(); |
$dom = new DOMDocument(); |
$dom->validateOnParse = true; |
if (preg_match('/^http:\/\//', $chemin)) { |
$dom->loadXML(file_get_contents($chemin)); |
} else { |
$dom->load($chemin); |
} |
$tab_infos = array(); |
foreach ($dom->getElementsByTagNameNS('http://www.w3.org/1999/02/22-rdf-syntax-ns#', 'Description') as $rdf_description) { |
$aso_info['about'] = $rdf_description->getAttribute('about'); |
$aso_info['dc:identifier'] = $rdf_description->getAttribute('identifier'); |
$aso_info['dc:title'] = utf8_decode($rdf_description->getAttribute('title')); |
$aso_info['dc:creator'] = utf8_decode($rdf_description->getAttribute('creator')); |
$aso_info['dc:contributor'] = utf8_decode($rdf_description->getAttribute('contributor')); |
$aso_info['dc:publisher'] = utf8_decode($rdf_description->getAttribute('publisher')); |
$aso_info['dc:type'] = utf8_decode($rdf_description->getAttribute('type')); |
$aso_info['dc:format'] = utf8_decode($rdf_description->getAttribute('format')); |
if (function_exists('date_default_timezone_set')) { |
date_default_timezone_set('Europe/Paris'); |
} |
if (preg_match('/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/', $rdf_description->getAttribute('created'))) { |
$aso_info['dcterms:created'] = date('j-m-Y � H:i:s', strtotime($rdf_description->getAttribute('created'))); |
} else { |
$aso_info['dcterms:created'] = $rdf_description->getAttribute('created'); |
} |
$aso_info['dcterms:dateSubmitted'] = utf8_decode($rdf_description->getAttribute('dateSubmitted')); |
$aso_info['dcterms:spatial'] = utf8_decode($rdf_description->getAttribute('spatial')); |
$aso_info['dcterms:licence'] = utf8_decode($rdf_description->getAttribute('licence')); |
$tab_infos[$rdf_description->getAttribute('identifier')] = $aso_info; |
} |
//echo '<pre>'.$chemin.print_r($tab_infos, true).'</pre>'; |
return $tab_infos; |
} |
/* +--Fin du code ---------------------------------------------------------------------------------------+ |
* $Log$ |
* Revision 1.2 2008-01-30 08:57:28 ddelon |
* fin mise en place mygwt |
* |
* Revision 1.1 2007-06-06 13:31:16 ddelon |
* v0.09 |
* |
* Revision 1.4 2007-05-22 12:54:09 ddelon |
* Securisation acces utilisateur |
* |
* |
* |
*/ |
?> |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/trunk/jrest/services/InventoryImport.php |
---|
New file |
0,0 → 1,125 |
<?php |
/** |
David Delon david.delon@clapas.net 2007 |
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 |
/* |
* InventoryImport.php |
* |
* Cas d'utilisation : |
* Service importation releve en cours |
* |
* 1 : L'utilisateur � traiter est communique au service |
* 2 : Les releves associ� � la session en cours sont transfer�s � l'utilisateur transmis |
*/ |
Class InventoryImport extends DBAccessor { |
var $config; |
function InventoryImport($config) { |
$this->config=$config; |
} |
function getElement($uid){ |
// Controle detournement utilisateur |
session_start(); |
$this->controleUtilisateur($uid[0]); |
// uid[0] : utilisateur obligatoire |
// Recuperation Dernier num�ro d'ordre utilis� : |
$DB=$this->connectDB($this->config,'database_cel'); |
$query="SELECT max(ordre) AS ordre FROM cel_inventory WHERE identifiant='".$DB->escapeSimple($uid[0])."' "; |
$res =& $DB->query($query); |
if (DB::isError($res)) { |
die($res->getMessage()); |
} |
$ordre=0; |
while ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) { |
$ordre=$row['ordre']+1; |
} |
// Recuperation relev�s associ�s a la session |
session_start(); |
$query=" SELECT ordre FROM cel_inventory WHERE identifiant = '".session_id()."' ORDER BY ordre"; |
$res =& $DB->query($query); |
if (DB::isError($res)) { |
die($res->getMessage()); |
} |
while ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) { |
$query="UPDATE cel_inventory set identifiant ='".$DB->escapeSimple($uid[0]). |
"',ordre='".$ordre."' WHERE identifiant = '".session_id()."' AND ordre = '".$row['ordre']."' "; |
$res_update =& $DB->query($query); |
if (DB::isError($res_update)) { |
die($res_update->getMessage()); |
} |
print $query; |
$ordre++; |
} |
} |
} |
/* +--Fin du code ---------------------------------------------------------------------------------------+ |
* $Log$ |
* Revision 1.3 2008-01-30 08:57:28 ddelon |
* fin mise en place mygwt |
* |
* Revision 1.2 2007-05-22 12:54:09 ddelon |
* Securisation acces utilisateur |
* |
* Revision 1.1 2007-05-21 18:12:20 ddelon |
* Gestion des importations locale de releves |
* |
* |
*/ |
?> |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/trunk/jrest/services/InventoryUserList.php |
---|
New file |
0,0 → 1,96 |
<?php |
// in utf8 |
// out utf8 |
// List des stations par utilisateur et par commune |
Class InventoryUserList extends DBAccessor { |
var $config; |
function InventoryUserList($config) { |
$this->config=$config; |
} |
function getElement($uid){ |
// Controle detournement utilisateur |
session_start(); |
$this->controleUtilisateur($uid[0]); |
// uid[0] : utilisateur obligatoire |
$DB=$this->connectDB($this->config,'database_cel'); |
$value=array(); |
$query='SELECT DISTINCT identifiant FROM cel_inventory' ; |
if(isset($uid[1]) && $uid[1] != null && $uid[1] != '*') { |
$query .= ' WHERE identifiant LIKE "'.$DB->escapeSimple($uid[1]).'%"'; |
} |
$res =& $DB->query($query); |
if (DB::isError($res)) { |
die($res->getMessage()); |
} |
$i = 0; |
while ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) { |
$value[$i] =$row['identifiant']; |
$i++; |
} |
usort($value,'trierUtilisateurs'); |
$json = new Services_JSON(); |
$output = $json->encode($value); |
print($output); |
return true; |
} |
} |
function trierUtilisateurs($val1, $val2) { |
if(strstr($val1,'@')) { |
if(strstr($val2,'@')) { |
return strcmp($val1,$val2); |
} |
else |
{ |
return -1 ; |
} |
} |
else |
{ |
if(strstr($val2,'@')) { |
return 1 ; |
} |
else |
{ |
return strcmp($val1,$val2) ; |
} |
} |
} |
/* +--Fin du code ---------------------------------------------------------------------------------------+ |
* $Log$ |
* Revision 1.3 2008-01-30 08:57:28 ddelon |
* fin mise en place mygwt |
* |
* Revision 1.2 2007-05-22 12:54:09 ddelon |
* Securisation acces utilisateur |
* |
* |
* |
*/ |
?> |
/trunk/jrest/services/CelImageDoublon.php |
---|
New file |
0,0 → 1,115 |
<?php |
/** |
* Service fournissant une liste d'images doublon. |
* Encodage en entrée : utf8 |
* Encodage en sortie : utf8 |
* |
* Cas d'utilisation : |
* /CelImageDoublon/Sortie/Utilisateur : images doublon d'un utilisateur. |
* |
* Sortie = Type de sortie : html ou json. Par défaut : html |
* Utilisateur = identifiant (= courriel) de l'utilisateur. |
* |
* @author Jean-Pascal MILCENT <jpm@clapas.org> |
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt> |
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt> |
* @version $Id$ |
* @copyright © 2010, Jean-Pascal MILCENT |
*/ |
class CelImageDoublon extends Cel { |
/** |
* Méthode appelée avec une requête de type GET. |
*/ |
public function getElement($params) { |
$retour = null; |
$parametres = $this->traiterParametres(array('sortie', 'utilisateur'), $params, false); |
extract($parametres); |
if (isset($sortie)) { |
$methode = $this->traiterNomMethodeGet($sortie); |
if (method_exists($this, $methode)) { |
$retour = $this->$methode($parametres); |
} else { |
$this->messages[] = "Ce type de carte '$methode' n'est pas disponible."; |
} |
} else { |
$this->messages[] = "Vous devez indiquer un type de sortie."; |
} |
if (is_null($retour)) { |
$info = 'Un problème est survenu : '.print_r($this->messages, true); |
$this->envoyer($info); |
} else { |
if ($retour['type'] == 'widget') { |
$squelette = dirname(__FILE__).DIRECTORY_SEPARATOR.'squelettes'.DIRECTORY_SEPARATOR.$retour['squelette'].'.tpl.html'; |
$html = $this->traiterSquelettePhp($squelette, $retour['donnees']); |
$this->envoyer($html); |
} else if ($retour['type'] == 'json') { |
$this->envoyer($retour['donnees']); |
} |
} |
} |
/** |
* Carte par défaut |
*/ |
public function getDoublonHtml($parametres) { |
$widget = null; |
extract($parametres); |
// Création des infos du widget |
$widget['type'] = 'widget'; |
$widget['donnees']['utilisateur'] = $utilisateur; |
$widget['donnees']['doublons'] = $this->getImagesDoublon($utilisateur); |
$widget['squelette'] = 'doublon_defaut'; |
return $widget; |
} |
/** |
* Images en doublon d'un utilisateur |
*/ |
private function getImagesDoublon($utilisateur) { |
$doublons = null; |
if (isset($utilisateur)) { |
// Un utilisateur en particulier |
$requete = 'SELECT ci_id_image, ci_ordre, ci_nom_original, ci_md5 '. |
'FROM cel_images '. |
"WHERE ci_ce_utilisateur = '$utilisateur' "; |
$images = $this->executerRequete($requete); |
// Traitement |
$doublons = array(); |
$md5 = array(); |
foreach ($images as $img) { |
if (!isset($md5[$img['ci_md5']])) { |
$md5[$img['ci_md5']][] = array('url' => $this->creerUrlImage($img['ci_id_image']), 'num' => $img['ci_ordre']); |
} else { |
if (!isset($doublons[$img['ci_md5']])) { |
$doublons[$img['ci_md5']] = $md5[$img['ci_md5']]; |
} |
$doublons[$img['ci_md5']][] = array('url' => $this->creerUrlImage($img['ci_id_image']), 'num' => $img['ci_ordre']); |
} |
} |
} |
//echo '<pre>'.print_r($doublons, true).'</pre>'; |
return $doublons; |
} |
private function creerUrlImage($id_image, $taille = 'S') { |
$chemin_sur_serveur = $this->config['cel_db']['url_images']; |
$id_image = sprintf('%09s', $id_image); |
$id_image = wordwrap($id_image, 3 , '_', true); |
$niveauDossier = split('_', $id_image); |
$dossierNiveau1 = $niveauDossier[0]; |
$dossierNiveau2 = $niveauDossier[1]; |
$chemin_sur_serveur_final = $chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2; |
$chemin_img = "$chemin_sur_serveur_final/$taille/{$id_image}_$taille.jpg"; |
return $chemin_img; |
} |
} |
/trunk/jrest/services/export/.directory |
---|
New file |
0,0 → 1,5 |
[Dolphin] |
Timestamp=2010,10,19,15,0,36 |
[Settings] |
ShowDotFiles=true |
/trunk/jrest/services/InventoryImageList.php |
---|
New file |
0,0 → 1,257 |
<?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 |
/* |
* InventoryImageList.php |
* |
* Cas d'utilisation : |
* Service recherche d'images a partir de divers crit�res |
* |
* 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 InventoryImageList extends DBAccessor { |
var $config; |
function InventoryImageList($config) { |
$this->config=$config; |
} |
// renvoie l'enregistrement correspond � une image |
function getElement($uid) |
{ |
// uid[0] : utilisateur obligatoire |
// uid[1] : crit�res de filtrage de la forme crit�re1:valeur1;crit�re2:valeur2 |
// Controle detournement utilisateur |
session_start(); |
$this->controleUtilisateur($uid[0]); |
$DB=$this->connectDB($this->config,'cel_db'); |
$criteres = array() ; |
if(isset($uid[1])) |
{ |
$criteres = explode("&", $uid[1]) ; |
} |
$query='SELECT * FROM cel_images WHERE ci_ce_utilisateur = "'.$uid[0].'" AND ' ; |
$numero_page = 0 ; |
$limite = 50 ; |
foreach($criteres as $pair) |
{ |
$nom_valeur = explode("=",$pair) ; |
if(sizeof($nom_valeur) != 0) |
{ |
if($nom_valeur[0] == "ci_limite") |
{ |
$limite = $DB->escapeSimple($nom_valeur[1]) ; |
} |
elseif($nom_valeur[0] == "ci_numero_page") |
{ |
$numero_page = $DB->escapeSimple($nom_valeur[1]) ; |
} |
elseif($nom_valeur[0] == "ci_meta_mots_cles") |
{ |
$mots_cles = rtrim($nom_valeur[1], ',') ; |
$mots_cles_liste = explode("," , $mots_cles) ; |
foreach($mots_cles_liste as $mot_cle) |
{ |
$query .= $nom_valeur[0].' LIKE "%'.$DB->escapeSimple($mot_cle).'%"' ; |
$query .= ' AND ' ; |
} |
} |
elseif($nom_valeur[0] == "ci_meta_comment") |
{ |
$mots_comment_liste = explode(" " , $nom_valeur[1]) ; |
foreach($mots_comment_liste as $mot_comment) |
{ |
$mot_comment = trim($mot_comment) ; |
$query .= $nom_valeur[0].' LIKE "%'.$DB->escapeSimple($mot_comment).'%"' ; |
$query .= ' AND ' ; |
} |
} |
elseif($nom_valeur[0] == "ci_meta_date") |
{ |
$query .= 'DATE_FORMAT( '.$nom_valeur[0].', \'%Y-%m-%d\' ) = "'.$DB->escapeSimple($nom_valeur[1]).'"' ; |
$query .= ' AND ' ; |
} |
elseif($nom_valeur[0] == "ci_id_tampon") |
{ |
$ids_tampon = rtrim($nom_valeur[1], ',') ; |
$query .= 'ci_id_image IN ( '.$DB->escapeSimple($ids_tampon).')' ; |
} |
else |
{ |
$query .= $nom_valeur[0].' = "'.$DB->escapeSimple($nom_valeur[1]) ; |
$query .= '" AND ' ; |
} |
} |
} |
$debut = $limite*$numero_page ; |
$query = rtrim($query,' AND ') ; |
$query .= ' ORDER BY ci_ordre LIMIT '.$debut.','.$limite ; |
$res =& $DB->query($query); |
if (PEAR::isError($res)) { |
die($res->getMessage()); |
} |
$result = array() ; |
while($image = $res->fetchrow(DB_FETCHMODE_ASSOC)) |
{ |
$date = split("-",$image['ci_meta_date']) ; |
if(count($date) > 2) |
{ |
$image['ci_meta_date'] = $date[2].'/'.$date[1].'/'.$date[0] ; |
} |
$image['ci_ce_observation'] = ''; |
$requete_table_liaison = 'SELECT coi_ce_observation FROM cel_obs_images WHERE coi_ce_image = '.$image['ci_id_image'].' AND coi_ce_utilisateur ="'.$uid[0].'"'; |
$res_table_liaison =& $DB->query($requete_table_liaison); |
if (PEAR::isError($res_table_liaison)) { |
die($res_table_liaison->getMessage()); |
} |
$ids_obs = ''; |
while($liaison = $res_table_liaison->fetchrow(DB_FETCHMODE_ASSOC)) |
{ |
$ids_obs .= $liaison['coi_ce_observation'].","; |
} |
$ids_obs = rtrim($ids_obs,','); |
if(trim($ids_obs) != '') { |
$requete_obs_liees = 'SELECT * FROM cel_inventory WHERE ordre IN ('.$ids_obs.') AND identifiant ="'.$uid[0].'"'; |
$res_obs_liees =& $DB->query($requete_obs_liees); |
if (PEAR::isError($res_obs_liees)) { |
die($res_obs_liees->getMessage()); |
} |
while($obs_liee = $res_obs_liees->fetchrow(DB_FETCHMODE_ASSOC)) |
{ |
$image['ci_ce_observation'] .= $obs_liee['ordre'].'#'.$obs_liee['nom_sel'].'#'.$obs_liee['transmission'].';;' ; |
} |
} |
$result[] = $image ; |
} |
$res = json_encode($result) ; |
header("content-type: text/json") ; |
print $res ; |
exit() ; |
} |
// met � jour les m�tadonn�es d'une image |
function updateElement($uid,$pairs) |
{ |
// Controle detournement utilisateur |
session_start(); |
$this->controleUtilisateur($uid[0]); |
$DB=$this->connectDB($this->config,'cel_db'); |
$query .= ' WHERE '.$ci_id_image.' = "'.$DB->escapeSimple($pairs['ci_id_image']).'"' ; |
} |
function deleteElement($uid) |
{ |
// uid[0] : utilisateur obligatoire |
// uid[1] : identifiant(s) image(s) obligatoire(s) |
// Controle detournement utilisateur |
session_start(); |
$this->controleUtilisateur($uid[0]); |
$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_sup_lien = "DELETE FROM cel_obs_images WHERE coi_ce_image in (".$DB->escapeSimple($id) .")"; |
} |
$res =& $DB->query($query); |
if (PEAR::isError($res)) { |
die($res->getMessage()); |
} |
else |
{ |
$res =& $DB->query($query_sup_lien); |
if(PEAR::isError($res)) |
{ |
die($res->getMessage()); |
} |
$id_fichiers = explode(",",$id) ; |
foreach($id_fichiers as $en_cours) |
{ |
supprimer_fichier($en_cours,$this->config['cel_db']['chemin_images']) ; |
} |
echo "OK" ; |
exit() ; |
} |
} |
} |
?> |
/trunk/jrest/services/.directory |
---|
New file |
0,0 → 1,5 |
[Dolphin] |
Timestamp=2010,10,19,15,0,30 |
[Settings] |
ShowDotFiles=true |
/trunk/jrest/services/CoordSearch.php |
---|
New file |
0,0 → 1,63 |
<?php |
// CRUD ligne d'inventaire : |
// In get : utf8 |
// In post : utf8 |
// out : utf8 |
Class CoordSearch extends DBAccessor { |
function Inventory($config) { |
$this->config=$config; |
} |
function getElement($uid){ |
// Controle detournement utilisateur |
session_start(); |
$value=array(); |
$lat = str_replace('"','',urldecode($uid[0])); |
$lng = str_replace('"','',urldecode($uid[1])); |
$commune = urldecode($uid[2]); |
$code_postal = str_replace('"','',urldecode($uid[3])); |
if(isset($uid[4]) && $uid[4] != "*" && $uid[4] != "?") { |
$code_pays = urldecode($uid[4]); |
} else { |
$code_pays = 'FR'; |
} |
if($lat != '*' && $lng != '*') { |
$commune_json = file_get_contents("http://ws.geonames.org/findNearbyJSON?featureClass=ADM4&lat=".urlencode($lat)."&lng=".urlencode($lng)."&style=full") ; |
header("Content-Type: text/html; charset=UTF-8"); |
$value = $commune_json ; |
} elseif($commune != '*') { |
$requete = "http://ws.geonames.org/postalCodeSearchJSON?placename_startsWith=".urlencode($commune); |
if($code_postal != '*') { |
$requete .= "&postalcode_startsWith=".urlencode($code_postal); |
} |
$requete .= "&country=".urlencode($code_pays)."&maxRows=10" ; |
$coord_json = file_get_contents($requete); |
header("Content-Type: text/html; charset=UTF-8"); |
$value = $coord_json ; |
} else { |
header('HTTP/1.0 400 Bad Request'); |
echo "Commune ou Coordonnées non spécifiées " ; |
exit; |
} |
print $value; |
} |
} |
?> |
/trunk/jrest/services/InventoryExport.php |
---|
New file |
0,0 → 1,237 |
<?php |
// In : utf8 |
// Out : iso8859 |
// Export vers feuille de calcul d'une selection de releves |
Class InventoryExport extends DBAccessor { |
var $config; |
var $extendSpreadsheetProductor; |
function InventoryExport($config) { |
$this->config=$config; |
// Pas d'heritage multiple en php :( |
$this->extendSpreadsheetProductor = new SpreadsheetProductor(); |
$this->extendSpreadsheetProductor->initSpreadsheet(); |
} |
function getElement($uid){ |
// Controle detournement utilisateur |
session_start(); |
$this->controleUtilisateur($uid[0]); |
$DB=$this->connectDB($this->config,'database_cel'); |
$criteres = array() ; |
if(isset($uid[1])) |
{ |
$criteres = explode("&", $uid[1]) ; |
} |
$query="SELECT identifiant, ordre, nom_sel, num_nom_sel, nom_ret, num_nom_ret, num_taxon, famille, location, id_location, date_observation," . |
" lieudit, station, milieu, commentaire, transmission, coord_x, coord_y, ref_geo FROM cel_inventory WHERE identifiant='".$DB->escapeSimple($uid[0])."' AND " ; |
foreach($criteres as $pair) |
{ |
$nom_valeur = explode("=",$pair) ; |
if(sizeof($nom_valeur) != 0) { |
if($nom_valeur[0] == 'limite') |
{ |
$limite = $DB->escapeSimple($nom_valeur[1]) ; |
} |
elseif($nom_valeur[0] == 'numero_page') { |
$numero_page = $DB->escapeSimple($nom_valeur[1]) ; |
} |
elseif($nom_valeur[0] == 'annee') { |
$query .= "year(date_observation) = '".$DB->escapeSimple($nom_valeur[1])."'" ; |
$query .= ' AND ' ; |
} |
elseif($nom_valeur[0] == 'mois') { |
$query .= "month(date_observation) = '".$DB->escapeSimple($nom_valeur[1])."'" ; |
$query .= ' AND ' ; |
} |
elseif($nom_valeur[0] == 'jour') { |
$query .= "day(date_observation) = '".$DB->escapeSimple($nom_valeur[1])."'" ; |
$query .= ' AND ' ; |
} |
elseif($nom_valeur[0] == 'mots_cles') { |
$liste_mc = explode(";",$nom_valeur[1]); |
$query .= '(' ; |
foreach($liste_mc as $mot) { |
if(trim($mot) != '') |
{ |
$query .= "mots_cles LIKE '%".$DB->escapeSimple($mot)."%' OR " ; |
} |
} |
$query = rtrim($query,' OR '); |
$query .= ') AND ' ; |
} |
elseif ($nom_valeur[0] == 'nom_taxon') { |
$nom_valeur[1] = str_replace("*","%",$nom_valeur[1]); |
$query .= "(nom_sel LIKE '%".$DB->escapeSimple($nom_valeur[1]). |
"%' OR identifiant LIKE '%".$DB->escapeSimple($nom_valeur[1]). |
"%' OR ordre LIKE '%".$DB->escapeSimple($nom_valeur[1]). |
"%' OR nom_sel LIKE '%".$DB->escapeSimple($nom_valeur[1]). |
"%' OR num_nom_sel LIKE '%".$DB->escapeSimple($nom_valeur[1]). |
"%' OR nom_ret LIKE '%".$DB->escapeSimple($nom_valeur[1]). |
"%' OR num_nom_ret LIKE '%".$DB->escapeSimple($nom_valeur[1]). |
"%' OR num_taxon LIKE '%".$DB->escapeSimple($nom_valeur[1]). |
"%' OR location LIKE '%".$DB->escapeSimple($nom_valeur[1]). |
"%' OR id_location LIKE '%".$DB->escapeSimple($nom_valeur[1]). |
"%' OR date_observation LIKE '%".$DB->escapeSimple($nom_valeur[1]). |
"%' OR lieudit LIKE '%".$DB->escapeSimple($nom_valeur[1]). |
"%' OR station LIKE '%".$DB->escapeSimple($nom_valeur[1]). |
"%' OR milieu LIKE '%".$DB->escapeSimple($nom_valeur[1]). |
"%' OR commentaire LIKE '%".$DB->escapeSimple($nom_valeur[1]). |
"%' OR transmission LIKE '%".$DB->escapeSimple($nom_valeur[1]). |
"%' OR coord_x LIKE '%".$DB->escapeSimple($nom_valeur[1]). |
"%' OR coord_y LIKE '%".$DB->escapeSimple($nom_valeur[1]). |
"%')"; |
//"%' OR famille LIKE '%".$DB->escapeSimple($nom_valeur[1]). |
} |
else { |
if(trim($nom_valeur[0]) != '') |
{ |
$query .= $nom_valeur[0]." = '".$DB->escapeSimple($nom_valeur[1])."'" ; |
$query .= ' AND ' ; |
} |
} |
} |
} |
$query = rtrim($query,' AND ') ; |
$query .=" ORDER BY ordre "; |
$res =& $DB->query($query); |
if (DB::isError($res)) { |
die($res->getMessage()); |
} |
// Creating a workbook |
$workbook = new Spreadsheet_Excel_Writer(); |
// Creating a worksheet |
$worksheet = $workbook->addWorksheet('Liste'); |
$worksheet->write(0,0,'Nom saisi'); |
$worksheet->write(0,1,'Numero nomenclatural'); |
$worksheet->write(0,2,'Nom retenu'); |
$worksheet->write(0,3,'Numero nomenclatural nom retenu'); |
$worksheet->write(0,4,'Numero taxonomique'); |
$worksheet->write(0,5,'Famille'); |
$worksheet->write(0,6,'Commune'); |
$worksheet->write(0,7,'Identifiant Commune'); |
$worksheet->write(0,8,'Date Observation'); |
$worksheet->write(0,9,'Lieu dit'); |
$worksheet->write(0,10,'Station'); |
$worksheet->write(0,11,'Milieu'); |
$worksheet->write(0,12,'Commentaire'); |
$worksheet->write(0,13,'X'); |
$worksheet->write(0,14,'Y'); |
$worksheet->write(0,15,'Referentiel Geographique'); |
$i=1; |
while ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) { |
// Denullifiage |
foreach($row as $k=>$v) { |
if (($v=="null") || ($v=="000null")) { |
$row[$k]=""; |
} |
else { |
$row[$k]=utf8_decode($v); |
} |
} |
if ($row['date_observation']!="0000-00-00 00:00:00") { |
list($year,$month,$day)= split ('-',$row['date_observation']); |
list($day)= split (' ',$day); |
$row['date_observation']=$day."/".$month."/".$year; |
} |
else { |
$row['date_observation']="00/00/0000"; |
} |
$worksheet->write($i,0,$row['nom_sel']); |
$worksheet->write($i,1,$row['num_nom_sel']); |
$worksheet->write($i,2,$row['nom_ret']); |
$worksheet->write($i,3,$row['num_nom_ret']); |
$worksheet->write($i,4,$row['num_taxon']); |
$worksheet->write($i,5,$row['famille']); |
$worksheet->write($i,6,$row['location']); |
$worksheet->write($i,7,$row['id_location']); |
$worksheet->write($i,8,$row['date_observation']); |
$worksheet->write($i,9,$row['lieudit']); |
$worksheet->write($i,10,$row['station']); |
$worksheet->write($i,11,$row['milieu']); |
$worksheet->write($i,12,$row['commentaire']); |
$worksheet->write($i,13,$row['coord_x']); |
$worksheet->write($i,14,$row['coord_y']); |
$worksheet->write($i,15,$row['ref_geo']); |
$i++; |
} |
// sending HTTP headers |
$workbook->send('liste.xls'); |
$workbook->close(); |
exit(); |
} |
} |
/* +--Fin du code ---------------------------------------------------------------------------------------+ |
* $Log$ |
* Revision 1.7 2008-11-13 11:29:12 ddelon |
* Reecriture gwt-ext |
* |
* Revision 1.6 2008-01-30 08:57:28 ddelon |
* fin mise en place mygwt |
* |
* Revision 1.5 2007-06-06 13:31:16 ddelon |
* v0.09 |
* |
* Revision 1.4 2007-05-22 12:54:09 ddelon |
* Securisation acces utilisateur |
* |
* |
* |
*/ |
?> |
/trunk/jrest/services/InventoryMaintenance.php |
---|
New file |
0,0 → 1,59 |
<?php |
/** |
* PHP Version 5 |
* |
* @category PHP |
* @package jrest |
* @author aurelien <aurelien@tela-botanica.org> |
* @copyright 2009 Tela-Botanica |
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL |
* @version SVN: <svn_id> |
* @link /doc/jrest/ |
*/ |
Class InventoryMaintenance extends DBAccessor { |
function InventoryMaintenance($config) { |
$this->config=$config; |
} |
// renvoie l'enregistrement correspond � une image |
function getElement($uid) |
{ |
if($this->isAdmin($uid[0])) { |
// uid[0] : utilisateur obligatoire |
// uid[1] : identifiant fonction |
// Controle detournement utilisateur |
session_start(); |
$this->controleUtilisateur($uid[0]); |
if($uid[1] == "dates_images") { |
$this->reparerDatesImages(); |
} |
} |
} |
private function reparerDatesImages() { |
$query= 'UPDATE cel_images SET ci_meta_date = ci_meta_date_time '; |
'WHERE ci_meta_date IS NULL AND ci_meta_date_time IS NOT NULL' ; |
$DB=$this->connectDB($this->config,'cel_db'); |
$res =& $DB->query($query); |
if (PEAR::isError($res)) { |
logger('InventoryMaintenance','Erreur lors de la réparation des dates '.$query); |
die($res->getMessage()); |
} |
header("content-type: text/html") ; |
print "Reparation des dates effectuées" ; |
exit() ; |
} |
} |
?> |
/trunk/jrest/services/InventoryImage.php |
---|
New file |
0,0 → 1,288 |
<?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(); |
$this->controleUtilisateur($uid[0]); |
$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) ; |
header("content-type: text/json") ; |
print $res ; |
exit() ; |
} |
// met � jour les m�tadonn�es d'une image |
function updateElement($uid,$pairs) |
{ |
// Controle detournement utilisateur |
$this->controleUtilisateur($uid[0]); |
/*$fp = fopen('dump.txt','w+') ; |
fwrite($fp,print_r($pairs,true)) ; |
fclose($fp) ;*/ |
$DB=$this->connectDB($this->config,'cel_db'); |
$query = 'UPDATE cel_images SET ' ; |
foreach($pairs as $champ => $valeur) |
{ |
if($champ == 'ci_meta_date') { |
$date_tab = split('/',$valeur) ; |
$date = $date_tab[2].'-'.$date_tab[1].'-'.$date_tab[0] ; |
$query .= $champ.' = "'.$date.'" , ' ; |
} |
else { |
$query .= $champ.' = "'.$DB->escapeSimple($valeur).'" , ' ; |
} |
} |
$query = rtrim($query," , ") ; |
$query .= ' WHERE ci_id_image = "'.$DB->escapeSimple($pairs['ci_id_image']).'"' ; |
$res =& $DB->query($query); |
if (PEAR::isError($res)) |
{ |
return false ; |
} |
else |
{ |
echo "OK" ; |
exit() ; |
} |
} |
// ajoute une image ainsi que ses metadonn�es � la base du carnet |
function createElement($pairs) |
{ |
// Controle detournement utilisateur |
session_start(); |
$this->controleUtilisateur($pairs['identifiant']); |
foreach($_FILES as $file) { |
$infos_fichier = $file ; |
} |
$DB=$this->connectDB($this->config,'cel_db'); |
$nouvel_ordre = 0 ; |
$query_ordre ='SELECT MAX(ci_ordre) FROM cel_images WHERE ci_ce_utilisateur = "'.$DB->escapeSimple($pairs['identifiant']).'"' ; |
$res =& $DB->query($query_ordre); |
if (PEAR::isError($res)) |
{ |
$erreur = 'ERROR : probleme durant le calcul de l\'ordre de l\'image \n' ; |
die($res->getMessage()); |
} |
else |
{ |
$row = $res->fetchrow() ; |
$nouvel_ordre = $row[0] + 1; |
} |
if($nouvel_ordre) |
{ |
$fichier_meta = extraire_metadonnees($infos_fichier['tmp_name']) ; |
} |
else |
{ |
$erreur = 'ERROR : probleme durant l\'upload de l\'image \n' ; |
} |
$fichier_meta['ci_ordre'] = $nouvel_ordre ; |
$fichier_meta['ci_publiable_eflore'] = 'false' ; |
$fichier_meta['ci_nom_original'] = $infos_fichier['name'] ; |
$fichier_meta['ci_md5'] = md5_file($infos_fichier['tmp_name']) ; |
$fichier_meta['ci_ce_utilisateur'] = $pairs['identifiant'] ; |
$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 .= 'ci_meta_date_ajout' ; |
$query_valeurs .= 'CURRENT_TIMESTAMP()' ; |
//$query_champs = rtrim($query_champs,',') ; |
//$query_valeurs = rtrim($query_valeurs,',') ; |
$query ="INSERT INTO cel_images (".$query_champs.") VALUES (".$query_valeurs.")" ; |
$res =& $DB->query($query); |
if (PEAR::isError($res)) { |
//die($res->getMessage()); |
$erreur = "ERROR : echec de l'insertion dans la base de donnees : ".$query ; |
} |
$query_id ='SELECT ci_id_image FROM cel_images WHERE ci_ce_utilisateur = "'.$DB->escapeSimple($pairs['identifiant']).'" AND ci_ordre = "'.$nouvel_ordre.'"' ; |
$res =& $DB->query($query_id); |
if (PEAR::isError($res)) |
{ |
$erreur = 'ERROR : probleme durant le calcul de l\'id de l\'image \n' ; |
//die($res->getMessage()); |
} |
else |
{ |
$row = $res->fetchrow() ; |
$id = $row[0] ; |
} |
if(isset($id)) |
{ |
$fichier = array('name' => $infos_fichier['name'] , 'type' => $infos_fichier['type'] , 'size' => $infos_fichier['size'] , 'tmp_name' => $infos_fichier['tmp_name'] ) ; |
$fichier_stocke = stocker_fichier($fichier,$id,$this->config['cel_db']['chemin_images'],$this->config['cel_db']['taille_max']) ; |
// l'upload demande de court-circuiter le fonctionnement normal de JREST |
header('HTTP/1.0 200 Created'); |
echo "OK" ; |
exit() ; |
} |
else |
{ |
$erreur = 'ERROR : probleme durant l\'ajout des metadonnees \n' ; |
exit ; |
} |
} |
// 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(); |
$this->controleUtilisateur($uid[0]); |
$DB=$this->connectDB($this->config,'cel_db'); |
$id = $uid[1] ; |
if (isset($uid[1])) { |
$query="DELETE FROM cel_images WHERE ci_id_image in (".$DB->escapeSimple($uid[1]) .")"; |
$query_sup_lien = "DELETE FROM cel_obs_images WHERE coi_ce_image in (".$DB->escapeSimple($id) .")"; |
} |
$res =& $DB->query($query); |
if (PEAR::isError($res)) { |
die($res->getMessage()); |
} |
else |
{ |
$res =& $DB->query($query_sup_lien); |
if(PEAR::isError($res)) |
{ |
die($res->getMessage()); |
} |
supprimer_fichier($id,$this->config['cel_db']['chemin_images']); |
echo "OK" ; |
exit() ; |
} |
} |
} |
?> |
/trunk/jrest/services/CelWidgetMap.php |
---|
New file |
0,0 → 1,137 |
<?php |
/** |
* Service fournissant une carte dynamique des obsertions publiques du CEL. |
* Encodage en entrée : utf8 |
* Encodage en sortie : utf8 |
* |
* Cas d'utilisation : |
* /CelWidgetMap/Carte/Utilisateur : carte des observations publiques d'un utilisateur. |
* /CelWidgetMap/Carte/Utilisateur/Projet : carte des observations publiques d'un utilisateur pour un projet. |
* |
* Carte = Type de carte. Valeurs possible : defaut, |
* Utilisateur = identifiant (= courriel) de l'utilisateur ou * pour tous les utilisateurs. |
* Projet = mot-clé du projet |
* |
* @author Jean-Pascal MILCENT <jpm@clapas.org> |
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt> |
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt> |
* @version $Id$ |
* @copyright © 2010, Jean-Pascal MILCENT |
*/ |
class CelWidgetMap extends Cel { |
/** |
* Méthode appelée avec une requête de type GET. |
*/ |
public function getElement($params) { |
$retour = null; |
$parametres = $this->traiterParametres(array('carte', 'utilisateur', 'projet'), $params, false); |
extract($parametres); |
if (isset($carte)) { |
$methode = $this->traiterNomMethodeGet($carte); |
if (method_exists($this, $methode)) { |
$retour = $this->$methode($parametres); |
} else { |
$this->messages[] = "Ce type de carte '$methode' n'est pas disponible."; |
} |
} else { |
$this->messages[] = "Vous devez indiquer le type de carte."; |
} |
if (is_null($retour)) { |
$info = 'Un problème est survenu : '.print_r($this->messages, true); |
$this->envoyer($info); |
} else if ($retour['type'] == 'widget') { |
$squelette = dirname(__FILE__).DIRECTORY_SEPARATOR.'squelettes'.DIRECTORY_SEPARATOR.$retour['squelette'].'.tpl.html'; |
$html = $this->traiterSquelettePhp($squelette, $retour['donnees']); |
$this->envoyer($html); |
} else if ($retour['type'] == 'json') { |
$this->envoyerJson($retour['variable_js'], $retour['donnees']); |
} |
} |
/** |
* Carte par défaut |
*/ |
public function getCarteDefaut($parametres) { |
$widget = null; |
extract($parametres); |
// Création url données json |
$url_json = sprintf($this->config['settings']['baseURLAbsoluDyn'], 'CelWidgetMap'); |
$url_json .= '/carte-defaut-json/'; |
$url_json .= (isset($utilisateur) ? $utilisateur : '*'); |
$url_base = sprintf($this->config['settings']['baseURLAbsoluDyn'], ''); |
// Création des infos du widget |
$widget['type'] = 'widget'; |
$widget['donnees']['url_json'] = $url_json; |
$widget['donnees']['url_base'] = $url_base; |
$widget['squelette'] = 'carte_defaut'; |
return $widget; |
} |
/** |
* Données de la carte par défaut |
*/ |
public function getCarteDefautJson($parametres) { |
$json = null; |
extract($parametres); |
$requete = 'SELECT sector, x_utm, y_utm, coord_x, coord_y, ref_geo '. |
'FROM cel_inventory AS i '. |
' LEFT JOIN locations AS l '. |
' ON (l.name = i.location AND l.code = i.id_location) '. |
"WHERE transmission = '1' ". |
(isset($utilisateur) ? " AND identifiant = '$utilisateur' " : ''); |
$resultats = $this->executerRequete($requete); |
// Traitement des résultats |
$mm = array('min_x' => 0,'max_x' => 0,'min_y' => 0,'max_y' => 0); |
$points = array(); |
foreach ($resultats as $enrg) { |
if ($enrg['coord_x'] == '' && $enrg['coord_y'] == '' && $enrg['x_utm'] != '' && $enrg['y_utm'] != '') { |
$convertisseur = new gPoint(); |
$convertisseur->setUTM($enrg['x_utm'], $enrg['y_utm'], $enrg['sector']); |
$convertisseur->convertTMtoLL(); |
$enrg['coord_x'] = $convertisseur->Lat(); |
$enrg['coord_y'] = $convertisseur->Long(); |
} |
$id = $enrg['coord_x'].'-'.$enrg['coord_y']; |
if (!isset($points[$id])) { |
$points[$id] = $enrg; |
$points[$id]['nbre'] = 1; |
} else { |
$points[$id]['nbre']++; |
} |
// Détermination x et y min et max |
$mm['min_x'] = ($mm['min_x'] > $enrg['coord_x']) ? $enrg['coord_x'] : $mm['min_x']; |
$mm['min_y'] = ($mm['min_y'] > $enrg['coord_y']) ? $enrg['coord_y'] : $mm['min_y']; |
$mm['max_x'] = ($mm['max_x'] < $enrg['coord_x']) ? $enrg['coord_x'] : $mm['max_x']; |
$mm['max_y'] = ($mm['max_y'] < $enrg['coord_y']) ? $enrg['coord_y'] : $mm['max_y']; |
} |
// Post-traitement des résultats |
$x_moyen = str_replace(',', '.', ($mm['max_x'] - $mm['min_x'])); |
$y_moyen = str_replace(',', '.', ($mm['max_y'] - $mm['min_y'])); |
$points = array_values($points); |
// Création des infos du widget |
$json['type'] = 'json'; |
$json['variable_js'] = 'obs'; |
$json['donnees']['points'] = $points; |
$json['donnees']['nombre'] = count($points); |
$json['donnees']['centre_x'] = $x_moyen; |
$json['donnees']['centre_y'] = $y_moyen; |
//echo '<pre>'.print_r($json, true).'</pre>'; |
return $json; |
} |
} |
/trunk/jrest/services/PlantNetRssParEspece.php |
---|
New file |
0,0 → 1,173 |
<?php |
/** |
* PHP Version 5 |
* |
* @category PHP |
* @package jrest |
* @author aurelien <aurelien@tela-botanica.org> |
* @copyright 2009 Tela-Botanica |
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL |
* @version SVN: <svn_id> |
* @link /doc/jrest/ |
*/ |
class PlantNetRssParEspece extends DBAccessor { |
var $config; |
function PlantNetRss($config) { |
$this->config=$config; |
} |
function getElement($uid){ |
$rss = "<?xml version=\"1.0\" encoding=\"UTF-8\"?> \n"; |
$rss .= "<rss version=\"2.0\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\">\n"; |
$rss .=' |
<channel> |
<title>Carnet en ligne</title> |
<link>http://www.tela-botanica.org/cel/jrest/PlantnetRss</link> |
<description>Derniers scans de feuilles</description> |
<language>fr</language>'; |
$motcle = 'plantnet' ; |
$DB=$this->connectDB($this->config,'cel_db'); |
$query_id_id_img = 'SELECT cmc_id_mot_cle_utilisateur, cmc_id_proprietaire FROM cel_mots_cles WHERE cmc_id_mot_cle_general = md5("'.$motcle.'")' ; |
$res =& $DB->query($query_id_id_img); |
if (DB::isError($res)) { |
echo $res->getMessage(); |
} |
$query='SELECT * FROM cel_images'; |
$premier_item = true ; |
while ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) { |
if($premier_item) { |
$query .= ' WHERE '; |
$premier_item = false ; |
} |
else{ |
$query .= ' OR '; |
} |
$query .= '(ci_meta_mots_cles LIKE "%'.$row['cmc_id_mot_cle_utilisateur'].'%" AND ci_ce_utilisateur ="'.$row['cmc_id_proprietaire'].'")' ; |
} |
$query .= ' ORDER BY ci_meta_date_ajout DESC LIMIT 0,100' ; |
$res =& $DB->query($query); |
if (DB::isError($res)) { |
print("req partie 2"); |
die($res->getMessage()); |
} |
while ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) { |
$row['ci_nom_original'] = htmlspecialchars($row['ci_nom_original']); |
$row['ci_id_image'] = htmlspecialchars($row['ci_id_image']); |
$row['ci_meta_date_ajout'] = htmlspecialchars($row['ci_meta_date_ajout']); |
$row['ci_ce_utilisateur'] = htmlspecialchars($row['ci_ce_utilisateur']); |
$row['ci_meta_user_comment'] = htmlspecialchars($row['ci_meta_user_comment']); |
$row['ci_note_image'] = htmlspecialchars($row['ci_note_image']); |
$tailleXY = $this->calculerDimensions(array($row['ci_meta_width'], $row['ci_meta_height'])); |
$id = $row['ci_id_image']; |
$chemin_sur_serveur = $this->config['cel_db']['url_images']; |
$id = sprintf('%09s', $id) ; |
$id = wordwrap($id, 3 , '_', true) ; |
$id_fichier = $id.".jpg" ; |
$niveauDossier = split("_", $id) ; |
$dossierNiveau1 = $niveauDossier[0] ; |
$dossierNiveau2 = $niveauDossier[1] ; |
$chemin_sur_serveur_final = $chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2 ; |
$chemin_fichier = $chemin_sur_serveur_final.'/L/'.$id."_L.jpg" ; |
$chemin_fichier_m = $chemin_sur_serveur_final.'/M/'.$id."_M.jpg" ; |
$rss.= ' <item> |
<title>'.$row['ci_nom_original']." (".$row['ci_id_image'].") ". ' par ' . $row['ci_ce_utilisateur'].'</title> |
<author>'.$row['ci_ce_utilisateur'].'</author> |
<link>'.$chemin_fichier.'</link> |
<description>'. |
' <![CDATA[<img src="'.$chemin_fichier_m.'" alt="'.$row['ci_nom_original'].'" height="'.$tailleXY[1].'px" width="'.$tailleXY[0].'px"></img><br/>]]>'. |
$row['ci_nom_original']. ' ajouté le ' .$row['ci_meta_date_ajout'] . ' par ' . $row['ci_ce_utilisateur'].' |
</description> |
<dc:format>text/html</dc:format> |
</item>'; |
} |
$rss.= '</channel> </rss>'; |
header("Content-Type: text/xml; charset=UTF-8"); |
print $rss; |
exit; |
} |
function getRessource(){ |
$uid[] = array() ; |
$this->getElement($uid); |
} |
function calculerDimensions($tailleXY) { |
$tailleOr = 300 ; |
if($tailleXY[1] == 0) { |
$tailleXY[1] = $tailleOr; |
} |
if($tailleXY[0] == 0) { |
$tailleXY[0] = $tailleOr; |
} |
$maxTaille = max($tailleXY[1],$tailleXY[0]) ; |
if($maxTaille == $tailleXY[1]) { |
$rapport = $tailleXY[1]/$tailleXY[0] ; |
$tailleXY[1] = 300 ; |
$tailleXY[0] = round($tailleXY[1]/$rapport,0) ; |
}else { |
$rapport = $tailleXY[0]/$tailleXY[1] ; |
$tailleXY[0] = 300 ; |
$tailleXY[1] = round($tailleXY[0]/$rapport,0) ; |
} |
return $tailleXY ; |
} |
} |
/* +--Fin du code ---------------------------------------------------------------------------------------+ |
* $Log$ |
* Revision 1.5 2008-11-13 11:29:12 ddelon |
* Reecriture gwt-ext |
* |
* Revision 1.4 2007-06-06 13:31:16 ddelon |
* v0.09 |
* |
* Revision 1.3 2007-05-22 12:54:09 ddelon |
* Securisation acces utilisateur |
* |
* |
* |
*/ |
?> |
/trunk/jrest/services/NameSearch.php |
---|
New file |
0,0 → 1,224 |
<?php |
// in : utf8 |
// out : utf8 |
/** |
David Delon david.delon@clapas.net 2007 |
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. |
*/ |
/* |
* Informations recues en iso8859-1 |
* NameSearch.php |
* |
* Cas d'utilisation : |
* Service completion nom scientifique |
* |
* 1 : L'application recoit un debut de nom scientifique |
* 2 : Si le genre recu est >1, l'application retourne les 50 premieres genre commencant par ce prefixe |
* 3 : Si l'espece est presente l'application retourne les 50 premieres genre+espece commencant par ce prefixe |
*/ |
Class NameSearch extends DBAccessor { |
var $config; |
function NameSearch($config) { |
$this->config=$config; |
} |
function getElement($uid){ |
$value=array(); |
// Genre et Espece |
if (isset($uid[1]) && isset($uid[0])) { |
$genre=$uid[0]; |
$espece=$uid[1]; |
if (strlen($espece) > 0 ) { |
$espece=ereg_replace('\*+','%',$espece); |
$DB=$this->connectDB($this->config); |
$query="SELECT DISTINCT en_nom_genre, en_epithete_espece, en_nom_supra_generique, en_epithete_infra_generique,". |
" auteur_bex.enaia_intitule_abrege AS abreviation_auteur_basio_ex ". |
" , auteur_b.enaia_intitule_abrege AS abreviation_auteur_basio ". |
" , auteur_mex.enaia_intitule_abrege AS abreviation_auteur_modif_ex ". |
" , auteur_m.enaia_intitule_abrege AS abreviation_auteur_modif ". |
" , en_epithete_espece, en_epithete_infra_specifique, enrg_abreviation_rang, en_id_nom, esn_ce_statut" . |
" FROM eflore_nom, eflore_nom_rang, " . |
" eflore_naturaliste_intitule_abreviation AS auteur_bex ". |
" , eflore_naturaliste_intitule_abreviation AS auteur_b ". |
" , eflore_naturaliste_intitule_abreviation AS auteur_mex ". |
" , eflore_naturaliste_intitule_abreviation AS auteur_m ". |
" , eflore_selection_nom". |
" WHERE en_id_version_projet_nom = '25' AND en_nom_genre LIKE '".$DB->escapeSimple($genre)."%' " . |
" AND en_ce_rang > 160 " . |
" AND en_epithete_espece like '".$DB->escapeSimple($espece)."%' AND en_ce_rang = enrg_id_rang " . |
" AND en_ce_auteur_basio_ex = auteur_bex.enaia_id_intitule_naturaliste_abrege ". |
" AND en_ce_auteur_basio = auteur_b.enaia_id_intitule_naturaliste_abrege ". |
" AND en_ce_auteur_modif_ex = auteur_mex.enaia_id_intitule_naturaliste_abrege ". |
" AND en_ce_auteur_modif = auteur_m.enaia_id_intitule_naturaliste_abrege ". |
" AND esn_id_version_projet_taxon=en_id_version_projet_nom " . |
" AND esn_id_nom= en_id_nom ". |
" ORDER BY esn_ce_statut, en_ce_rang, en_epithete_espece, en_nom_genre LIMIT 50"; |
} |
else { |
print "[]"; |
return; |
} |
} |
else { |
if (isset($uid[0])) { |
$genre=$uid[0]; |
$genre=ereg_replace('\*+','%',$genre); |
if ((strlen($genre) > 1) && ($genre != '%')) { |
$DB=$this->connectDB($this->config); |
$query="SELECT DISTINCT en_nom_genre, en_id_nom, 0 as esn_ce_statut FROM eflore_nom WHERE en_id_version_projet_nom = '25'" . |
"AND en_ce_rang = 160 " . |
"AND en_nom_genre LIKE '".$DB->escapeSimple($genre)."%' ORDER BY esn_ce_statut, en_nom_genre LIMIT 50"; |
} |
else { |
print "[]"; |
return ; |
} |
} |
else { |
print "[]"; |
return ; |
} |
} |
$res =& $DB->query($query); |
if (DB::isError($res)) { |
die($res->getMessage()); |
} |
while ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) { |
$value[]=array($this->formaterNom($row),$row['en_id_nom'], $row['esn_ce_statut']); |
} |
$json = new Services_JSON(); |
$output = $json->encode($value); |
print($output); |
} |
function getRessource(){ |
print "[]"; |
return; |
} |
function formaterNom($rawnom) { |
// Constitution du nom: |
$nom = ''; |
if ($rawnom['en_nom_supra_generique'] != '') { |
$nom .= $rawnom['en_nom_supra_generique']; |
} else if ($rawnom['en_epithete_infra_generique'] != '') { |
$nom .= $rawnom['en_epithete_infra_generique']; |
} else { |
if ($rawnom['en_nom_genre'] != '') { |
$nom .= $rawnom['en_nom_genre']; |
} |
if ($rawnom['en_epithete_espece']!= '') { |
$nom .= ' '.$rawnom['en_epithete_espece']; |
} |
if ($rawnom['en_epithete_infra_specifique'] != '') { |
if (!empty($rawnom['enrg_abreviation_rang'])) { |
$nom .= ' '.$rawnom['enrg_abreviation_rang'].''; |
} |
$nom .= ' '.$rawnom['en_epithete_infra_specifique']; |
} |
} |
return $nom .retournerAuteur($rawnom) ; |
} |
} |
function retournerAuteur($rawnom) { |
$auteurs = ''; |
$auteur_basio = ''; |
$auteur_modif = ''; |
if (!empty($rawnom['abreviation_auteur_basio_ex']) && $rawnom['abreviation_auteur_basio_ex']!='-' ) { |
$auteur_basio .= $rawnom['abreviation_auteur_basio_ex']; |
if (!empty($rawnom['abreviation_auteur_basio']) && $rawnom['abreviation_auteur_basio']!='-') { |
$auteur_basio .= ' ex '.$rawnom['abreviation_auteur_basio']; |
} |
} else if (!empty($rawnom['abreviation_auteur_basio']) && $rawnom['abreviation_auteur_basio']!='-') { |
$auteur_basio .= $rawnom['abreviation_auteur_basio']; |
} |
if (!empty($rawnom['abreviation_auteur_modif_ex']) && $rawnom['abreviation_auteur_modif_ex']!='-') { |
$auteur_modif .= $rawnom['abreviation_auteur_modif_ex']; |
if (!empty($rawnom['abreviation_auteur_modif']) && $rawnom['abreviation_auteur_modif']!='-') { |
$auteur_modif .= ' ex '.$rawnom['abreviation_auteur_modif']; |
} |
} else if (!empty($rawnom['abreviation_auteur_modif']) && $rawnom['abreviation_auteur_modif']!='-') { |
$auteur_modif .= $rawnom['abreviation_auteur_modif']; |
} |
if (!empty($auteur_modif)) { |
$auteurs = ' ('.$auteur_basio.') '.$auteur_modif; |
} elseif (!empty($auteur_basio)) { |
$auteurs = ' '.$auteur_basio; |
} |
return $auteurs ; |
} |
/* +--Fin du code ---------------------------------------------------------------------------------------+ |
* $Log$ |
* Revision 1.6 2008-01-30 08:57:28 ddelon |
* fin mise en place mygwt |
* |
* Revision 1.5 2007-05-21 18:13:30 ddelon |
* Refactoring et documentation |
* |
* |
*/ |
?> |
/trunk/jrest/services/CodeAsync.php |
---|
New file |
0,0 → 1,32 |
<?php |
// CRUD ligne d'inventaire : |
// In get : utf8 |
// In post : utf8 |
// out : utf8 |
Class CodeAsync extends DBAccessor { |
function Inventory($config) { |
$this->config=$config; |
} |
function getElement($uid){ |
// Controle detournement utilisateur |
session_start(); |
$value=array(); |
$cle = urldecode($uid[0]); |
$addr = "http://maps.google.com/maps?file=api&v=2&sensor=true&key=".$cle; |
$script = file_get_contents($addr) ; |
header("Content-Type: text/plain; charset=UTF-8"); |
$value = json_encode($script) ; |
echo $value; |
} |
} |
?> |
/trunk/jrest/services/InventoryImageCount.php |
---|
New file |
0,0 → 1,144 |
<?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 |
/* |
* InventoryImageCount.php |
* |
* Cas d'utilisation : |
* Service recherche du nombre a partir de divers crit�res |
* |
* 2: Le service recherche le nombre d'images correspondant au crit�res demand� |
* 3: Le service renvoie le nombre calcule |
*/ |
Class InventoryImageCount extends DBAccessor { |
var $config; |
function InventoryImageCount($config) { |
$this->config=$config; |
} |
// renvoie lee nombre d'images correspondant aux criteres |
function getElement($uid) |
{ |
// uid[0] : utilisateur obligatoire |
// uid[1] : crit�res de filtrage de la forme crit�re1:valeur1;crit�re2:valeur2 |
// Controle detournement utilisateur |
$this->controleUtilisateur($uid[0]); |
$DB=$this->connectDB($this->config,'cel_db'); |
$criteres = array() ; |
if(isset($uid[1])) |
{ |
$criteres = explode("&", $uid[1]) ; |
} |
$query='SELECT COUNT(*) FROM cel_images WHERE ci_ce_utilisateur = "'.$DB->escapeSimple($uid[0]).'" AND ' ; |
foreach($criteres as $pair) |
{ |
$nom_valeur = explode("=",$pair) ; |
if($nom_valeur[0] == "ci_meta_mots_cles") |
{ |
$mots_cles = rtrim($nom_valeur[1], ',') ; |
$mots_cles_liste = explode("," , $mots_cles) ; |
foreach($mots_cles_liste as $mot_cle) |
{ |
$query .= $nom_valeur[0].' LIKE "%'.$DB->escapeSimple($mot_cle).'%"' ; |
$query .= ' AND ' ; |
} |
} |
elseif($nom_valeur[0] == "ci_meta_comment") |
{ |
$mots_comment_liste = explode(" " , $nom_valeur[1]) ; |
foreach($mots_comment_liste as $mot_comment) |
{ |
$mot_comment = trim($mot_comment) ; |
$query .= $nom_valeur[0].' LIKE "%'.$DB->escapeSimple($mot_comment).'%"' ; |
$query .= ' AND ' ; |
} |
} |
elseif($nom_valeur[0] == "ci_meta_date") |
{ |
$query .= 'DATE_FORMAT( '.$nom_valeur[0].', \'%Y-%m-%d\' ) = "'.$DB->escapeSimple($nom_valeur[1]).'"' ; |
$query .= ' AND ' ; |
} |
elseif($nom_valeur[0] == "ci_id_tampon") |
{ |
$ids_tampon = rtrim($nom_valeur[1], ',') ; |
$query .= 'ci_id_image IN ( '.$DB->escapeSimple($ids_tampon).')' ; |
} |
else |
{ |
$nom_valeur = explode("=",$pair) ; |
$query .= $nom_valeur[0].' = "'.$DB->escapeSimple($nom_valeur[1]).'"' ; |
$query .= ' AND ' ; |
} |
} |
$query = rtrim($query,' AND ') ; |
$res =& $DB->query($query); |
if (PEAR::isError($res)) { |
die($res->getMessage()); |
} |
$results = array() ; |
while($image = $res->fetchrow(DB_FETCHMODE_ORDERED)) |
{ |
$result[] = $image[0] ; |
} |
$res = json_encode($result) ; |
header("content-type: text/json") ; |
print $res ; |
exit() ; |
} |
} |
?> |
/trunk/jrest/services/ImageRss.php |
---|
New file |
0,0 → 1,368 |
<?php |
Class ImageRss extends DBAccessor { |
var $config; |
function ImageRss($config) { |
$this->config=$config; |
} |
function getElement($uid){ |
$this->authentifier(); |
$rss = "<?xml version=\"1.0\" encoding=\"UTF-8\"?> \n"; |
$rss .= "<rss version=\"2.0\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\">\n"; |
$rss .=' |
<channel> |
<title>Carnet en ligne</title> |
<link>http://www.tela-botanica.org/cel/jrest/ImageRss</link> |
<description>Carnet en ligne</description> |
<language>fr</language>'; |
$DB=$this->connectDB($this->config,'cel_db'); |
$query_id_id_img = 'SELECT cmc_id_mot_cle_utilisateur, cmc_id_proprietaire FROM cel_mots_cles WHERE cmc_id_mot_cle_general = md5("'.$DB->escapeSimple($uid[0]).'")' ; |
$res =& $DB->query($query_id_id_img); |
if (DB::isError($res)) { |
die($res->getMessage()); |
} |
$query='SELECT * FROM cel_images'; |
$premier_item = true ; |
while ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) { |
if($premier_item) { |
$query .= ' WHERE '; |
$premier_item = false ; |
} |
else{ |
$query .= ' OR '; |
} |
$query .= '(ci_meta_mots_cles LIKE "%'.$row['cmc_id_mot_cle_utilisateur'].'%" AND ci_ce_utilisateur ="'.$row['cmc_id_proprietaire'].'")' ; |
} |
$query .= ' ORDER BY ci_meta_date_ajout DESC LIMIT 0,100' ; |
$res =& $DB->query($query); |
if (DB::isError($res)) { |
die($res->getMessage()); |
} |
while ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) { |
$row['ci_nom_original'] = htmlspecialchars($row['ci_nom_original']); |
$row['ci_id_image'] = htmlspecialchars($row['ci_id_image']); |
$row['ci_meta_date_ajout'] = htmlspecialchars($row['ci_meta_date_ajout']); |
$row['ci_ce_utilisateur'] = htmlspecialchars($row['ci_ce_utilisateur']); |
$row['ci_meta_user_comment'] = htmlspecialchars($row['ci_meta_user_comment']); |
$row['ci_note_image'] = htmlspecialchars($row['ci_note_image']); |
$tailleXY = $this->calculerDimensions(array($row['ci_meta_width'], $row['ci_meta_height'])); |
$id = $row['ci_id_image']; |
$chemin_sur_serveur = $this->config['cel_db']['url_images']; |
$req_liaison = 'SELECT * FROM cel_inventory WHERE ordre IN (SELECT coi_ce_observation FROM cel_obs_images WHERE coi_ce_image = "'.$row['ci_id_image'].'") AND identifiant = "'.$row['ci_ce_utilisateur'].'"' ; |
$res_liaison =& $DB->query($req_liaison); |
if (DB::isError($res_liaison)) { |
die($res_liaison->getMessage()); |
} |
if (DB::isError($res_liaison)) { |
die($res_liaison->getMessage()); |
} |
$id = sprintf('%09s', $id) ; |
$id = wordwrap($id, 3 , '_', true) ; |
$id_fichier = $id.".jpg" ; |
$niveauDossier = split("_", $id) ; |
$dossierNiveau1 = $niveauDossier[0] ; |
$dossierNiveau2 = $niveauDossier[1] ; |
$chemin_sur_serveur_final = $chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2 ; |
$chemin_fichier = $chemin_sur_serveur_final.'/L/'.$id."_L.jpg" ; |
$chemin_fichier_m = $chemin_sur_serveur_final.'/M/'.$id."_M.jpg" ; |
$rss.= ' <item> |
<title>'.$row['ci_nom_original']." (".$row['ci_id_image'].") ". ' par ' . $row['ci_ce_utilisateur'].'</title> |
<author>'.$row['ci_ce_utilisateur'].'</author> |
<link>'.$chemin_fichier.'</link> |
<description>'. |
' <![CDATA[<img src="'.$chemin_fichier_m.'" alt="'.$row['ci_nom_original'].'" height="'.$tailleXY[1].'px" width="'.$tailleXY[0].'px"></img><br/>'. |
$row['ci_nom_original']. ' modifie le ' .$row['ci_meta_date_ajout'] . ' par ' . $row['ci_ce_utilisateur'].'<br/>' ; |
if(trim($row['ci_meta_mots_cles']) != '') { |
$row['ci_meta_mots_cles'] = rtrim($row['ci_meta_mots_cles'],','); |
$mots_cles_chaine = '' ; |
$mots_cles_tab = split(',',$row['ci_meta_mots_cles']); |
foreach($mots_cles_tab as $item) { |
$mots_cles_chaine .= '\''.$item.'\','; |
} |
$mots_cles_chaine = rtrim($mots_cles_chaine,','); |
$req_mots_cles = 'SELECT cmc_mot_cle FROM cel_mots_cles WHERE cmc_id_mot_cle_utilisateur IN ('.$mots_cles_chaine.') AND cmc_id_proprietaire = "'.$row['ci_ce_utilisateur'].'"' ; |
$res_mots_cles =& $DB->query($req_mots_cles); |
if (DB::isError($res_mots_cles)) { |
die($res_mots_cles->getMessage()); |
} |
$mots_cles = '' ; |
while($mot_cle = & $res_mots_cles->fetchrow(DB_FETCHMODE_ASSOC)) { |
$mots_cles .= $mot_cle['cmc_mot_cle'].' , ' ; |
} |
$mots_cles = rtrim($mots_cles,', '); |
if(trim($mots_cles) != '') { |
$rss .= 'Mot clés : '.htmlentities($mots_cles).' <br/>' ; |
} |
} |
while($ligne = & $res_liaison->fetchrow(DB_FETCHMODE_ASSOC)) { |
$rss .= '<p> Liée à l\'observation '.$ligne['id'].'<br/>' ; |
$rss .= 'Nom saisi : '.$ligne['nom_sel'].'<br/>' ; |
$rss .= 'Nom retenu : '.$ligne['nom_ret'].'<br/>' ; |
$rss .= 'Datée du '.$ligne['date_observation'].'<br/>' ; |
$rss .= 'Lieu : '.trim($ligne['location'],'000null').' ('.trim($ligne['id_location'],'000null').') '.trim($ligne['station'],'000null').' '.trim($ligne['lieudit'],'000null').'<br/></p>' ; |
} |
$rss .= ']]>' ; |
$rss .= '</description> |
<dc:format>text/html</dc:format> |
</item>'; |
} |
$rss.= '</channel> </rss>'; |
header("Content-Type: text/xml; charset=UTF-8"); |
print $rss; |
exit; |
} |
function getRessource(){ |
$this->authentifier(); |
$DB=$this->connectDB($this->config,'cel_db'); |
$rss = "<?xml version=\"1.0\" encoding=\"UTF-8\"?> \n"; |
$rss .= "<rss version=\"2.0\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\">\n"; |
$rss .=' |
<channel> |
<title>Carnet en ligne</title> |
<link>http://www.tela-botanica.org/cel/jrest/ImageRss</link> |
<description>Carnet en ligne</description> |
<language>fr</language>'; |
$query='SELECT * FROM cel_images order by ci_meta_date_ajout DESC LIMIT 0,100'; |
$res =& $DB->query($query); |
if (DB::isError($res)) { |
die($res->getMessage()); |
} |
while ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) { |
$row['ci_nom_original'] = htmlspecialchars($row['ci_nom_original']); |
$row['ci_id_image'] = htmlspecialchars($row['ci_id_image']); |
$row['ci_meta_date_ajout'] = htmlspecialchars($row['ci_meta_date_ajout']); |
$row['ci_ce_utilisateur'] = htmlspecialchars($row['ci_ce_utilisateur']); |
$row['ci_meta_user_comment'] = htmlspecialchars($row['ci_meta_user_comment']); |
$row['ci_note_image'] = htmlspecialchars($row['ci_note_image']); |
$tailleXY = $this->calculerDimensions(array($row['ci_meta_width'], $row['ci_meta_height'])); |
$id = $row['ci_id_image']; |
$chemin_sur_serveur = $this->config['cel_db']['url_images']; |
$req_liaison = 'SELECT * FROM cel_inventory WHERE ordre IN (SELECT coi_ce_observation FROM cel_obs_images WHERE coi_ce_image = "'.$row['ci_id_image'].'") AND identifiant = "'.$row['ci_ce_utilisateur'].'"' ; |
$res_liaison =& $DB->query($req_liaison); |
if (DB::isError($res_liaison)) { |
die($res_liaison->getMessage()); |
} |
$id = sprintf('%09s', $id) ; |
$id = wordwrap($id, 3 , '_', true) ; |
$id_fichier = $id.".jpg" ; |
$niveauDossier = split("_", $id) ; |
$dossierNiveau1 = $niveauDossier[0] ; |
$dossierNiveau2 = $niveauDossier[1] ; |
$chemin_sur_serveur_final = $chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2 ; |
$chemin_fichier = $chemin_sur_serveur_final.'/L/'.$id."_L.jpg" ; |
$chemin_fichier_m = $chemin_sur_serveur_final.'/M/'.$id."_M.jpg" ; |
$rss.= ' <item> |
<title>'.$row['ci_nom_original']." (".$row['ci_id_image'].") ". ' par ' . $row['ci_ce_utilisateur'].'</title> |
<author>'.$row['ci_ce_utilisateur'].'</author> |
<link>'.$chemin_fichier.'</link> |
<description>'. |
' <![CDATA[<img src="'.$chemin_fichier_m.'" alt="'.$row['ci_nom_original'].'" height="'.$tailleXY[1].'px" width="'.$tailleXY[0].'px"></img><br/>'. |
$row['ci_nom_original']. ' modifie le ' .$row['ci_meta_date_ajout'] . ' par ' . $row['ci_ce_utilisateur'].'<br/>' ; |
if(trim($row['ci_meta_mots_cles']) != '') { |
$row['ci_meta_mots_cles'] = rtrim($row['ci_meta_mots_cles'],','); |
$mots_cles_chaine = '' ; |
$mots_cles_tab = split(',',$row['ci_meta_mots_cles']); |
foreach($mots_cles_tab as $item) { |
$mots_cles_chaine .= '\''.$item.'\','; |
} |
$mots_cles_chaine = rtrim($mots_cles_chaine,','); |
$req_mots_cles = 'SELECT cmc_mot_cle FROM cel_mots_cles WHERE cmc_id_mot_cle_utilisateur IN ('.$mots_cles_chaine.') AND cmc_id_proprietaire = "'.$row['ci_ce_utilisateur'].'"' ; |
$res_mots_cles =& $DB->query($req_mots_cles); |
if (DB::isError($res_mots_cles)) { |
die($res_mots_cles->getMessage()); |
} |
$mots_cles = '' ; |
while($mot_cle = & $res_mots_cles->fetchrow(DB_FETCHMODE_ASSOC)) { |
$mots_cles .= $mot_cle['cmc_mot_cle'].' , ' ; |
} |
$mots_cles = rtrim($mots_cles,', '); |
if(trim($mots_cles) != '') { |
$rss .= 'Mot clés : '.htmlentities($mots_cles).' <br/>' ; |
} |
} |
while($ligne = & $res_liaison->fetchrow(DB_FETCHMODE_ASSOC)) { |
$rss .= '<p> Liée à l\'observation '.$ligne['id'].'<br/>' ; |
$rss .= 'Nom saisi : '.$ligne['nom_sel'].'<br/>' ; |
$rss .= 'Nom retenu : '.$ligne['nom_ret'].'<br/>' ; |
$rss .= 'Datée du '.$ligne['date_observation'].'<br/>' ; |
$rss .= 'Lieu : '.trim($ligne['location'],'000null').' ('.trim($ligne['id_location'],'000null').') '.trim($ligne['station'],'000null').' '.trim($ligne['lieudit'],'000null').'<br/></p>' ; |
} |
$rss .= ']]>' ; |
$rss .= '</description> |
<dc:format>text/html</dc:format> |
</item>'; |
} |
$rss.= '</channel> </rss>'; |
header("Content-Type: text/xml; charset=UTF-8"); |
print $rss; |
exit; |
} |
function calculerDimensions($tailleXY) { |
$tailleOr = 300 ; |
if($tailleXY[1] == 0) { |
$tailleXY[1] = $tailleOr; |
} |
if($tailleXY[0] == 0) { |
$tailleXY[0] = $tailleOr; |
} |
$maxTaille = max($tailleXY[1],$tailleXY[0]) ; |
if($maxTaille == $tailleXY[1]) { |
$rapport = $tailleXY[1]/$tailleXY[0] ; |
$tailleXY[1] = 300 ; |
$tailleXY[0] = round($tailleXY[1]/$rapport,0) ; |
}else { |
$rapport = $tailleXY[0]/$tailleXY[1] ; |
$tailleXY[0] = 300 ; |
$tailleXY[1] = round($tailleXY[0]/$rapport,0) ; |
} |
return $tailleXY ; |
} |
public function authentifier() { |
if (!isset($_SERVER['PHP_AUTH_USER'])) { |
header('WWW-Authenticate: Basic realm="www.tela-botanica.org"'); |
header('HTTP/1.0 401 Unauthorized'); |
header('Content-type: text/html; charset=UTF-8'); |
echo 'Accès interdit'; |
exit; |
} else { |
if($this->verifierAcces($_SERVER['PHP_AUTH_USER'])) { |
return ; |
} |
else |
{ |
header('WWW-Authenticate: Basic realm="www.tela-botanica.org"'); |
header('HTTP/1.0 401 Unauthorized'); |
header('Content-type: text/html; charset=UTF-8'); |
echo 'Accès interdit'; |
exit ; |
} |
} |
} |
public function verifierAcces($id) { |
$DB=$this->connectDB($this->config,'database_ident'); |
$query="SELECT ".$this->config['database_ident']['ann_id']." as name FROM ".$this->config['database_ident']['annuaire']." WHERE ".$this->config['database_ident']['ann_id']." ='".$DB->escapeSimple($id) |
."' AND ".$this->config['database_ident']['ann_pwd']." = ".$this->config['database_ident']['pass_crypt_funct']."('".$DB->escapeSimple($_SERVER['PHP_AUTH_PW'])."')" ; |
$res =& $DB->getOne($query); |
if($res == "") { |
return false ; |
} |
if (DB::isError($res)) { |
die($res->getMessage()); |
} |
return $this->isAdmin($id) ; |
} |
} |
/* +--Fin du code ---------------------------------------------------------------------------------------+ |
* $Log$ |
* Revision 1.5 2008-11-13 11:29:12 ddelon |
* Reecriture gwt-ext |
* |
* Revision 1.4 2007-06-06 13:31:16 ddelon |
* v0.09 |
* |
* Revision 1.3 2007-05-22 12:54:09 ddelon |
* Securisation acces utilisateur |
* |
* |
* |
*/ |
?> |
/trunk/jrest/services/CelSyndicationImage.php |
---|
New file |
0,0 → 1,365 |
<?php |
/** |
* Service fournissant des informations concernant le CEL au format RSS1, RSS2 ou ATOM. |
* Encodage en entrée : utf8 |
* Encodage en sortie : utf8 |
* |
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org> |
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt> |
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt> |
* @version $Id$ |
* @copyright 2010 |
*/ |
class CelSyndicationImage extends Cel { |
private $format = null; |
private $service = null; |
private $squelette = null; |
private $squelette_dossier = null; |
private $flux = array(); |
private $format_image = 'L'; |
/** |
* Méthode appelée avec une requête de type GET. |
*/ |
public function getElement($param = array()) { |
// Initialisation des variables |
$info = array(); |
$contenu = ''; |
// Pré traitement des paramêtres |
$pour_bdd = false; |
$p = $this->traiterParametres(array('service', 'format'), $param, $pour_bdd); |
unset($param[0]); |
unset($param[1]); |
sort($param); |
extract($p); |
// Récupération de la liste des flux |
$this->chargerListeDesFlux(); |
// Chargement du bon type de service demandé |
if (isset($service)) { |
$this->service = $service; |
$methode = $this->getNomMethodeService(); |
if (method_exists($this, $methode)) { |
if ($this->service != 'liste_des_flux') { |
if (isset($format) && preg_match('/^(?:rss1|rss2|atom)$/i', $format)) { |
// Multiplication par deux de la limite car nous récupérons deux lignes par item |
$this->limit = $this->limit*2; |
// Mise en minuscule de l'indication du format |
$this->format = strtolower($format); |
// Définition du fichier squelette demandé |
$this->squelette_dossier = dirname(__FILE__).DIRECTORY_SEPARATOR.'squelettes'.DIRECTORY_SEPARATOR; |
$this->squelette = $this->squelette_dossier.$this->format.'.tpl.xml'; |
} else { |
$this->format = ''; |
$this->messages[] = "Le service CEL Syndication nécessite d'indiquer en second paramètre le format : rss1, rss2 ou atom."; |
} |
} |
// Récupération du contenu à renvoyer |
$contenu = $this->$methode($param); |
} else { |
$this->messages[] = "Le type d'information demandé '$this->service' n'est pas disponible."; |
} |
} else { |
$this->messages[] = "Le service CEL Syndication Image nécessite d'indiquer en premier paramètre le type d'information demandé."; |
} |
// Envoie sur la sortie standard |
$encodage = 'utf-8'; |
$mime = $this->getTypeMime(); |
$formatage_json = $this->getFormatageJson(); |
$this->envoyer($contenu, $mime, $encodage, $formatage_json); |
} |
private function getUrlServiceBase() { |
$url_service = $this->config['settings']['baseURLAbsoluDyn'].'CelSyndicationImage/'.$this->service.'/'.$this->format; |
return $url_service; |
} |
private function getUrlImageBase($id, $format = 'L') { |
$chemin_sur_serveur = $this->config['cel_db']['url_images']; |
$id = sprintf('%09s', $id) ; |
$id = wordwrap($id, 3 , '_', true) ; |
$id_fichier = $id.".jpg" ; |
$niveauDossier = split("_", $id) ; |
$dossierNiveau1 = $niveauDossier[0] ; |
$dossierNiveau2 = $niveauDossier[1] ; |
$chemin_sur_serveur_final = $chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2 ; |
$chemin_fichier = $chemin_sur_serveur_final.'/'.$format.'/'.$id.'_'.$format.'.jpg'; |
return $chemin_fichier; |
} |
private function getNomMethodeService() { |
$methode = ''; |
$service_formate = str_replace(' ', '', ucwords(implode(' ', explode('_', $this->service)))); |
$methode = 'getService'.$service_formate; |
return $methode; |
} |
private function getTypeMime() { |
$mime = ''; |
switch ($this->format) { |
case 'atom' : |
$mime = 'application/atom+xml'; |
break; |
case 'rss1' : |
case 'rss2' : |
$mime = 'application/rss+xml'; |
break; |
default: |
$mime = 'text/html'; |
} |
return $mime; |
} |
private function getFormatageJson() { |
$json = false; |
switch ($this->service) { |
case 'liste_des_flux' : |
$json = true; |
break; |
default: |
$json = false; |
} |
return $json; |
} |
private function getFlux($nom) { |
return isset($this->flux[$nom]) ? $this->flux[$nom] : array(); |
} |
private function setFlux($nom, $titre, $description) { |
$url_base = $this->config['settings']['baseURLAbsoluDyn'].'CoelSyndicationImage/'; |
$formats = array('atom', 'rss2', 'rss1'); |
$flux = array(); |
foreach ($formats as $format) { |
$url = $url_base.$nom.'/'.$format; |
$flux[$format] = $url; |
} |
$this->flux[$nom] = array('titre' => $titre, 'description' => $description, 'urls' => $flux); |
} |
private function chargerListeDesFlux() { |
$this->setFlux('RssParDefaut', 'Flux de syndication par défaut', |
'Ce flux fournit des informations sur les images du CEL.'); |
$this->setFlux('RssParMotsCles', 'Flux des images filtré par mots clés', |
'Ce flux fournit des informations sur les images du CEL filtrées par mots-clés.'); |
$this->setFlux('RssParLocalisation','Flux des images filtré par localisation', |
'Ce flux fournit des informations sur les images du CEL filtrées par localisation.'); |
} |
private function getServiceListeDesFlux() { |
return $this->flux; |
} |
private function getServiceParDefaut() { |
// Construction de la requête |
$requete = (($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').' * '. |
'ORDER BY '.((!is_null($this->orderby)) ? $this->orderby : 'date_modification DESC').' '. |
"LIMIT $this->start,$this->limit "; |
$elements = $this->executerRequete($requete); |
// Création du contenu |
$contenu = $this->executerService($elements); |
return $contenu; |
} |
private function getServiceSimple($params) { |
if(isset($params[0])) { |
$this->format_image = $params[0]; |
} |
$this->start = 0; |
$this->limit = 10; |
// Construction de la requête |
$requete = (($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').' * '. |
'FROM cel_obs_images a '. |
'INNER JOIN cel_inventory b '. |
'ON a.coi_ce_observation = b.ordre AND a.coi_ce_utilisateur = b.identifiant '. |
'INNER JOIN cel_images c '. |
'ON a.coi_ce_image = c.ci_id_image AND a.coi_ce_utilisateur = c.ci_ce_utilisateur '. |
'WHERE b.transmission = 1 AND b.identifiant = c.ci_ce_utilisateur '. |
'ORDER BY '.((!is_null($this->orderby)) ? $this->orderby : 'ci_meta_date_ajout DESC').' '. |
"LIMIT $this->start,$this->limit "; |
$elements = $this->executerRequete($requete); |
// Création du contenu |
$contenu = $this->executerService($elements); |
return $contenu; |
} |
protected function executerRequete($requete) { |
try { |
$infos = $this->bdd->query($requete)->fetchAll(PDO::FETCH_ASSOC); |
if ($infos === false) { |
$this->messages[] = "La requête suivante a retourné aucun résultat :\n$requete"; |
} |
} catch (PDOException $e) { |
$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage()); |
} |
return $infos; |
} |
private function executerService($elements) { |
// Prétraitement des données |
$donnees = $this->construireDonneesCommunesAuFlux($elements); |
foreach ($elements as $element) { |
$donnees['items'][] = $this->construireDonneesCommunesAuxItems($element); |
} |
// Création du contenu à partir d'un template PHP |
$contenu = Cel::traiterSquelettePhp($this->squelette, $donnees); |
return $contenu; |
} |
private function construireDonneesCommunesAuFlux($infos) { |
$donnees = $this->getFlux($this->service); |
$donnees['guid'] = $this->getUrlServiceBase(); |
$donnees['lien_service'] = $this->creerUrlService(); |
$donnees['lien_cel'] = sprintf($this->config['settings']['efloreUrlTpl'], $infos['num_nom_sel']); |
$donnees['editeur'] = $this->config['settings']['editeur']; |
$derniere_info_en_date = reset($infos); |
$date_modification_timestamp = strtotime($derniere_info_en_date['ci_meta_date_ajout']); |
$donnees['date_maj_RSS'] = date(DATE_RSS, $date_modification_timestamp); |
$donnees['date_maj_ATOM'] = date(DATE_ATOM, $date_modification_timestamp); |
$donnees['date_maj_W3C'] = date(DATE_W3C, $date_modification_timestamp); |
$donnees['annee_courante'] = date('Y'); |
$donnees['generateur'] = 'CEL - Jrest - CelSyndicationImage'; |
preg_match('/([0-9]+)/', '$Revision$', $match); |
$donnees['generateur_version'] = $match[1]; |
return $donnees; |
} |
private function construireDonneesCommunesAuxItems($info) { |
$item = array(); |
$date_modification_timestamp = strtotime($info['ci_meta_date_ajout']); |
$item['date_maj_simple'] = strftime('%A %d %B %Y à %H:%M', $date_modification_timestamp); |
$item['date_maj_RSS'] = date(DATE_RSS, $date_modification_timestamp); |
$item['date_maj_ATOM'] = date(DATE_ATOM, $date_modification_timestamp); |
$item['date_maj_W3C'] = date(DATE_W3C, $date_modification_timestamp); |
$item['titre'] = $this->creerTitre($info); |
$item['guid'] = $this->creerGuidItem($info); |
$item['lien'] = $this->creerLienItem($info); |
$item['description'] = $this->creerDescription($info); |
$item['description_encodee'] = htmlspecialchars($item['description']); |
return $item; |
} |
private function creerTitre($element) { |
$titre = ''; |
$titre = $element['nom_sel'].' [nn'.$element['num_nom_sel'].'] par '.$this->creerAuteur($element['identifiant']); |
return $titre; |
} |
private function nettoyerTexte($txt) { |
$txt = preg_replace('/&(?!(a-z+|#0-9+|#x0-9a-f+);)/i', '&', $txt, -1); |
return $txt; |
} |
private function creerGuidItem($element) { |
$guid = sprintf($this->config['settings']['guidImgTpl'], $element['ci_id_image']); |
return $guid; |
} |
private function creerLienItem($element) { |
$lien = $this->getUrlImageBase($element['ci_id_image'],$this->format_image); |
return $lien; |
} |
private function creerDescription($element) { |
$description = sprintf($this->config['settings']['efloreUrlTpl'], urlencode($element['num_nom_sel'])); |
$description = $this->nettoyerTexte($description); |
return $description; |
} |
private function creerAuteur($courriel) { |
$auteur = ($this->etreFluxAdmin()) ? $courriel : $this->traiterCourriel($courriel); |
return $auteur; |
} |
private function traiterCourriel($courriel) { |
$courriel = preg_replace('/[^@]+$/i', '...', $courriel); |
return $courriel; |
} |
private function etreFluxAdmin() { |
return ($this->service == 'pour-admin') ? true : false; |
} |
private function etreNull($valeur) { |
$etre_null = false; |
if ($valeur == '' || $valeur == null || $valeur == '000null' || $valeur == 'null') { |
$etre_null = true; |
} |
return $etre_null; |
} |
private function creerUrlService() { |
$url_service = $this->getUrlServiceBase(); |
if (isset($this->start) || isset($this->limit)) { |
$arguments = array(); |
if (isset($this->start) && isset($_GET['start'])) { |
$arguments[] = 'start='.$this->start; |
} |
if (isset($this->limit) && isset($_GET['limit'])) { |
$arguments[] = 'limit='.($this->limit/2); |
} |
if (count($arguments) > 0) { |
$url_service .= '?'.implode('&', $arguments); |
} |
} |
return $url_service; |
} |
function calculerDimensions($tailleXY, $tailleoR = 300) { |
if($tailleXY[1] == 0) { |
$tailleXY[1] = $tailleOr; |
} |
if($tailleXY[0] == 0) { |
$tailleXY[0] = $tailleOr; |
} |
$maxTaille = max($tailleXY[1],$tailleXY[0]) ; |
if($maxTaille == $tailleXY[1]) { |
$rapport = $tailleXY[1]/$tailleXY[0] ; |
$tailleXY[1] = $tailleOr ; |
$tailleXY[0] = round($tailleXY[1]/$rapport,0) ; |
}else { |
$rapport = $tailleXY[0]/$tailleXY[1] ; |
$tailleXY[0] = $tailleOr ; |
$tailleXY[1] = round($tailleXY[0]/$rapport,0) ; |
} |
return $tailleXY ; |
} |
} |
/trunk/jrest/services/InventoryImageLink.php |
---|
New file |
0,0 → 1,246 |
<?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 |
/* |
* 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']); |
$DB=$this->connectDB($this->config,'cel_db'); |
$ids_images = $pairs['coi_ce_image'] ; |
$ids_images = rtrim($ids_images,',') ; |
$ids_images_liste = explode(",",$ids_images) ; |
$utilisateur = $pairs['identifiant'] ; |
$ids_observations = $pairs['coi_ce_observation'] ; |
$ids_observations = rtrim($ids_observations,',') ; |
$ids_observations_liste = explode(",",$ids_observations) ; |
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) VALUES ("'.$DB->escapeSimple($image).'","'.$DB->escapeSimple($utilisateur).'","'.$DB->escapeSimple($observation).'") ON DUPLICATE KEY UPDATE coi_ce_image = coi_ce_image' ; |
$res =& $DB->query($query); |
if (PEAR::isError($res)) { |
die($res->getMessage()); |
} |
} |
} |
echo "OK" ; |
exit ; |
} |
// renvoie les numeros des images liées à une observation ou l'inverse, suivant le paramètre |
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] ; |
$param = ltrim($param,'&') ; |
$tab_param = split('=',$param) ; |
$field = $tab_param[0] ; |
$value = $tab_param[1] ; |
$query = "" ; |
if ($field == 'coi_ce_observation') |
{ |
$column = 'coi_ce_image' ; |
$query = 'SELECT coi_ce_image, ci_meta_height , ci_meta_width '. |
'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]).'"' ; |
} |
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]).' "' ; |
} |
} |
$res =& $DB->query($query); |
if (PEAR::isError($res)) { |
die($res->getMessage()); |
} |
while ($image_liee = $res->fetchrow(DB_FETCHMODE_ORDERED)) { |
$images_liees[] = $image_liee ; |
} |
$res = json_encode($images_liees) ; |
header("content-type: text/json") ; |
print $res ; |
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']).'"' ; |
} |
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'); |
$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 = $DB->escapeSimple($uid[1]) ; |
$id_obs = $DB->escapeSimple($uid[2]) ; |
$id = $uid[0] ; |
if (isset($id)) { |
$query = "DELETE FROM cel_obs_images WHERE coi_ce_image = ".$id_img." AND coi_ce_observation IN (".$id_obs.") AND coi_ce_utilisateur = '".$id."'" ; |
} |
$res =& $DB->query($query); |
if (PEAR::isError($res)) { |
die($res->getMessage()); |
} |
else |
{ |
echo "OK" ; |
exit() ; |
} |
} |
} |
?> |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/trunk/jrest/services/ImageRDF.php |
---|
New file |
0,0 → 1,132 |
<?php |
/** |
* PHP Version 5 |
* |
* Retourne un RDF des images pour eflore |
* |
* @category PHP |
* @package jrest |
* @author david <david@tela-botania.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/ |
*/ |
Class ImageRDF extends DBAccessor { |
var $config; |
function ImageRDF($config) { |
$this->config=$config; |
} |
/** |
* Recherche des images associee au numero nomenclatural |
* @param numeric $uid [0] : numero nomenclatural obligatoire , $uid[1] (optionnel) : taille image : S , M, L (default) |
*/ |
// TODO : recherche taxon ? |
function getElement($uid){ |
// Taille |
if (isset($uid[1])) { |
$taille=$uid[1]; // S , M ou L |
} |
else { |
$taille='L'; |
} |
$DB=$this->connectDB($this->config,'cel_db'); |
// Recherche de toutes les observations transmises du taxon pour lesquelles une photo est associee. |
$query = 'SELECT * FROM cel_inventory, cel_obs_images, cel_images '. |
' WHERE cel_inventory.num_nom_sel = "'.mysql_escape_string($uid[0]).'"'. |
' AND cel_obs_images.coi_ce_utilisateur = cel_inventory.identifiant '. |
' AND cel_obs_images.coi_ce_observation = cel_inventory.ordre '. |
' AND cel_inventory.transmission = 1 '. |
' AND cel_images.ci_ce_utilisateur = cel_obs_images.coi_ce_utilisateur '. |
' AND ci_id_image = cel_obs_images.coi_ce_image'; |
$result =& $DB->query($query); |
if (DB::isError($result)) { |
die($result->getMessage()); |
} |
$picture_path = $this->config['cel_db']['url_images']; |
// Formatage du xml |
$xml = '<?xml version="1.0" encoding="utf-8"?>'."\n"; |
$xml .= '<rdf:RDF'."\n"; |
$xml .= ' xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"'."\n"; |
$xml .= ' xmlns:dc="http://purl.org/dc/elements/1.1/"'."\n"; |
$xml .= ' xmlns:dcterms="http://purl.org/dc/terms">'."\n"; |
while ($picture =& $result->fetchrow(DB_FETCHMODE_ASSOC)) { |
// Calcul du chemin sur le serveur en fonction de l'identifiant (id) |
$id = $picture['ci_id_image']; |
$id = sprintf('%09s', $id) ; |
$id = wordwrap($id, 3 , '_', true) ; |
$id_fichier = $id.".jpg" ; |
$niveauDossier = split("_", $id) ; |
$dossierNiveau1 = $niveauDossier[0] ; |
$dossierNiveau2 = $niveauDossier[1] ; |
$picture_path_with_level = $picture_path.'/'.$dossierNiveau1.'/'.$dossierNiveau2 ; |
$xml .= ' <rdf:Description about="'.$picture_path_with_level.'/'.$taille.'/'.$id.'_'.$taille.'.jpg'.'"'."\n"; |
$xml .= ' dc:identifier="'.'urn:lsid:tela-botanica.org:celpic:'.$picture['ci_id_image'].'"'."\n"; |
$xml .= ' dc:title="'.$picture['nom_sel'].'"'."\n"; |
$xml .= ' dc:description="'.$picture['nom_sel']." - [fichier_origine:".$picture['ci_nom_original'].'][image_identifiant:'.$picture['ci_id_image'].']'; |
$xml .= '[image_ordre:'.$picture['ci_ordre'].']'; |
$xml .= '[observation_identifiant:'.$picture['id'].']'; |
$xml .= '[observation_ordre:'.$picture['ordre'].']'.'"'."\n"; |
list($identifiant) = split("@", $picture['identifiant']); |
$creator=$identifiant."@..."; |
$xml .= ' dc:creator="'.$creator.'"'."\n"; |
$xml .= ' dc:publisher="CEL"'."\n"; |
$xml .= ' dcterms:spatial="'.utf8_decode($picture['location'])." (".$picture['id_location'].")".'"'."\n"; |
if ($picture['date_observation'] != '0000-00-00 00:00:00') { |
list($year,$month,$day) = split ('-',$picture['date_observation']); |
list($day) = split (' ',$day); |
$created = $day.'/'.$month.'/'.$year; |
$xml .= ' dcterms:created="'.$created.'"'."\n"; |
} |
$xml .= ' dcterms:licence="CC BY-SA"/>'."\n"; |
} |
$xml .= '</rdf:RDF>'."\n"; |
// Envoi du xml au navigateur |
header("Content-Type: text/xml"); |
echo utf8_encode(html_entity_decode(str_replace(' & ', ' & ', $xml))); |
} |
} |
?> |
/trunk/jrest/services/User.php |
---|
New file |
0,0 → 1,260 |
<?php |
/** |
David Delon david.delon@clapas.net 2007 |
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. |
*/ |
/* |
* User.php |
* |
* Cas d'utilisation : |
* Service identification utilisateur |
* |
* |
* 1: Aucun identifiant ni mot de passe transmis |
* 1: L'application retourne l'identifiant de session en cours |
* 2: Une identification est toujours active, cette identification est retournee |
* |
* 1: L'application recoit un identifiant et un mot de passe |
* 1 : On tente login |
* 2 : Si reussi etat connecte |
* 3 : sinon pas connecte |
* |
* 1: L'application recoit un identifiant et pas de mot de passe : |
* 1 : Deconnection |
* |
/* En resume : |
* /User/ : retour id si jamais connecte, sinon retour login_utilisateur |
* /User/login_utilisateur : logout |
* /User/login_utilisateur/password : login |
* |
*/ |
Class User extends DBAccessor { |
function User($config) { |
$this->config=$config; |
} |
// TODO : controle systematique ....dans tous les services |
// Si connected : name cookie = name service |
function getRessource(){ |
$expireTime = 60*60*24*100; // 100 jours |
session_set_cookie_params($expireTime); |
$connected=false; |
$admin=false; |
session_start(); |
if (!$this->GetUser()) { |
if (isset($_COOKIE["cel_name"]) && ($this->RememberedUser($_COOKIE["cel_name"], $_COOKIE["cel_password"]))) { |
$retour= $this->GetUserName(); |
$connected=true; |
} |
else { |
$retour = session_id(); |
$connected=false; |
} |
} |
else { |
$retour= $this->GetUserName(); |
$connected=true; |
} |
$admin = $this->isAdmin($retour) ; |
$json = new Services_JSON(); |
$output = $json->encode(array($retour,$connected,$admin)); |
print($output); |
} |
function getElement($uid){ |
$connected=false; |
session_start(); |
// Non connect� : verification |
if (isset($uid[1])) { // Identification |
if (!$this->GetUser()) { // Si non identifi� |
if ($this->LoginUser($uid[0],$uid[1],1)) { // identification reussi |
$retour= $this->GetUserName(); |
$connected=true; |
} |
else { |
$retour = session_id(); |
$connected=false; |
} |
} |
else { // Deja identifi� |
$retour= $this->GetUserName(); |
$connected=true; |
} |
} |
else { // Deconnection |
$this->LogoutUser(); |
$retour = session_id(); |
$connected=false; |
} |
$admin = $this->isAdmin($retour) ; |
$json = new Services_JSON(); |
$output = $json->encode(array($retour,$connected,$admin)); |
print($output); |
} |
// USERS |
function LoadUser($name) { |
$DB=$this->connectDB($this->config,'database_ident'); |
$query="SELECT ".$this->config['database_ident']['ann_id']." as name, ".$this->config['database_ident']['ann_pwd']." as password FROM ".$this->config['database_ident']['annuaire']." WHERE ".$this->config['database_ident']['ann_id']." ='".$DB->escapeSimple($name)."'"; |
$res =& $DB->query($query); |
if (DB::isError($res)) { |
die($res->getMessage()); |
} |
while ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) { |
$password=$row['password']; |
} |
$admin = $this->isAdmin($name) ; |
$retour= array("name"=>$name,"password"=>$password,"admin"=>$admin); |
return $retour; |
} |
function GetUserName() { |
if ($user = $this->GetUser()) { |
$name = $user["name"]; |
} |
else { |
$name =""; |
} |
return $name; |
} |
function GetUser() { |
return (isset($_SESSION["user"]) ? $_SESSION["user"] : ''); |
} |
function SetUser($user, $remember=1) { |
$_SESSION["user"] = $user; |
$this->SetPersistentCookie("cel_name", $user["name"], $remember); |
$this->SetPersistentCookie("cel_password", $user["password"], $remember); |
$this->SetPersistentCookie("cel_remember", $remember, $remember); |
} |
function LogoutUser() { |
$_SESSION["user"] = ""; |
$this->DeleteCookie("cel_name"); |
$this->DeleteCookie("cel_password"); |
$this->DeleteCookie("cel_remember"); |
} |
function SetPersistentCookie($name, $value, $remember = 1) { |
SetCookie($name, $value, time() + ($remember ? 90*24*60*60 : 60 * 60),'/'); |
$_COOKIE[$name] = $value; |
} |
function DeleteCookie($name) { |
SetCookie($name, "", 1,'/'); $_COOKIE[$name] = ""; |
} |
function LoginUser($name,$password,$remember=1) { |
if ($existingUser = $this->LoadUser($name)) { |
if ($password!="debug") { |
if ($existingUser["password"] == md5($password)) { |
$this->SetUser($existingUser, $remember); |
return true; |
} |
else { |
return false; |
} |
} |
else { |
$this->SetUser($existingUser, $remember); |
return true; |
} |
} |
} |
function RememberedUser($name,$password,$remember=1) { |
if ($existingUser = $this->LoadUser($name)) { |
if ($existingUser["password"] == $password) { |
$this->SetUser($existingUser, $remember); |
return true; |
} |
else { |
return false; |
} |
} |
} |
} |
/* +--Fin du code ---------------------------------------------------------------------------------------+ |
* $Log$ |
* Revision 1.5 2008-01-30 08:57:28 ddelon |
* fin mise en place mygwt |
* |
* Revision 1.4 2007-05-22 12:54:09 ddelon |
* Securisation acces utilisateur |
* |
* Revision 1.3 2007-05-21 18:12:20 ddelon |
* Gestion des importations locale de releves |
* |
* |
*/ |
?> |
/trunk/jrest/services/InventoryTransmit.php |
---|
New file |
0,0 → 1,62 |
<?php |
// In : utf8 |
// out : utf8 |
// Transmission observation vers Tela |
Class InventoryTransmit extends DBAccessor { |
var $config; |
function InventoryTransmit($config) { |
$this->config=$config; |
} |
function updateElement($uid,$pairs) { |
// Controle detournement utilisateur |
session_start(); |
$this->controleUtilisateur($uid[0]); |
$DB=$this->connectDB($this->config,'database_cel'); |
if (isset($uid[1])) { |
$query="UPDATE cel_inventory " . |
"SET transmission = '".$DB->escapeSimple($pairs['transmission'])."',". |
"date_modification = now(), date_transmission = now() ". |
"WHERE identifiant='".$DB->escapeSimple($uid[0])."' AND ordre in (".$DB->escapeSimple($uid[1]) .")"; |
} |
$res =& $DB->query($query); |
if (PEAR::isError($res)) { |
die($res->getMessage()); |
} |
return true; |
} |
} |
/* +--Fin du code ---------------------------------------------------------------------------------------+ |
* $Log$ |
* Revision 1.3 2008-01-30 08:57:28 ddelon |
* fin mise en place mygwt |
* |
* Revision 1.2 2007-05-22 12:54:09 ddelon |
* Securisation acces utilisateur |
* |
* |
* |
*/ |
?> |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/trunk/jrest/services/Name.php |
---|
New file |
0,0 → 1,200 |
<?php |
/** |
David Delon david.delon@clapas.net 2007 |
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 |
/* |
* Name.php |
* |
* Cas d'utilisation : |
* Service recherche nom retenu depuis un numero nomenclatural pour la BDNFF |
* |
* 1 : L'application recoit un numero nomenclatural |
* 2 : L'application retourne le nom retenu associé |
*/ |
Class Name extends DBAccessor { |
var $config; |
function Name($config) { |
$this->config=$config; |
} |
function getElement($uid){ |
$value=array(); |
// Num nomenclatural |
if (isset($uid[0])) { |
$DB=$this->connectDB($this->config); |
$query = "SELECT DISTINCT en_nom_genre, en_epithete_espece, en_nom_supra_generique, en_epithete_infra_generique,". |
" auteur_bex.enaia_intitule_abrege AS abreviation_auteur_basio_ex ". |
" , auteur_b.enaia_intitule_abrege AS abreviation_auteur_basio ". |
" , auteur_mex.enaia_intitule_abrege AS abreviation_auteur_modif_ex ". |
" , auteur_m.enaia_intitule_abrege AS abreviation_auteur_modif ". |
" , en_epithete_espece, en_epithete_infra_specifique, enrg_abreviation_rang, en_id_nom" . |
" FROM eflore_nom, eflore_nom_rang, eflore_selection_nom a, " . |
" eflore_naturaliste_intitule_abreviation AS auteur_bex ". |
" , eflore_naturaliste_intitule_abreviation AS auteur_b ". |
" , eflore_naturaliste_intitule_abreviation AS auteur_mex ". |
" , eflore_naturaliste_intitule_abreviation AS auteur_m ". |
" WHERE a.esn_id_nom= '".$uid[0]. "'". |
" AND a.esn_id_version_projet_taxon = 25 ". |
" AND en_ce_rang = enrg_id_rang" . |
" AND en_id_nom = a.esn_id_nom" . |
" AND en_ce_auteur_basio_ex = auteur_bex.enaia_id_intitule_naturaliste_abrege ". |
" AND en_ce_auteur_basio = auteur_b.enaia_id_intitule_naturaliste_abrege ". |
" AND en_ce_auteur_modif_ex = auteur_mex.enaia_id_intitule_naturaliste_abrege ". |
" AND en_ce_auteur_modif = auteur_m.enaia_id_intitule_naturaliste_abrege ". |
" AND a.esn_id_version_projet_taxon=en_id_version_projet_nom "; |
} |
else { |
print "[\"null\"]"; |
return ; |
} |
$res =& $DB->query($query); |
if (DB::isError($res)) { |
die($res->getMessage()); |
} |
$value=array("null"); |
while ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) { |
$value=array(($this->formaterNom($row))); |
} |
$json = new Services_JSON(); |
$output = $json->encode($value); |
print($output); |
} |
function getRessource(){ |
print "[\"null\"]"; |
return; |
} |
function formaterNom($rawnom) { |
// Constitution du nom: |
$nom = ''; |
if ($rawnom['en_nom_supra_generique'] != '') { |
$nom .= $rawnom['en_nom_supra_generique']; |
} else if ($rawnom['en_epithete_infra_generique'] != '') { |
$nom .= $rawnom['en_epithete_infra_generique']; |
} else { |
if ($rawnom['en_nom_genre'] != '') { |
$nom .= $rawnom['en_nom_genre']; |
} |
if ($rawnom['en_epithete_espece']!= '') { |
$nom .= ' '.$rawnom['en_epithete_espece']; |
} |
if ($rawnom['en_epithete_infra_specifique'] != '') { |
if (!empty($rawnom['enrg_abreviation_rang'])) { |
$nom .= ' '.$rawnom['enrg_abreviation_rang'].''; |
} |
$nom .= ' '.$rawnom['en_epithete_infra_specifique']; |
} |
} |
return $nom .retournerAuteur($rawnom) ; |
} |
} |
function retournerAuteur($rawnom) { |
$auteurs = ''; |
$auteur_basio = ''; |
$auteur_modif = ''; |
if (!empty($rawnom['abreviation_auteur_basio_ex']) && $rawnom['abreviation_auteur_basio_ex']!='-' ) { |
$auteur_basio .= $rawnom['abreviation_auteur_basio_ex']; |
if (!empty($rawnom['abreviation_auteur_basio']) && $rawnom['abreviation_auteur_basio']!='-') { |
$auteur_basio .= ' ex '.$rawnom['abreviation_auteur_basio']; |
} |
} else if (!empty($rawnom['abreviation_auteur_basio']) && $rawnom['abreviation_auteur_basio']!='-') { |
$auteur_basio .= $rawnom['abreviation_auteur_basio']; |
} |
if (!empty($rawnom['abreviation_auteur_modif_ex']) && $rawnom['abreviation_auteur_modif_ex']!='-') { |
$auteur_modif .= $rawnom['abreviation_auteur_modif_ex']; |
if (!empty($rawnom['abreviation_auteur_modif']) && $rawnom['abreviation_auteur_modif']!='-') { |
$auteur_modif .= ' ex '.$rawnom['abreviation_auteur_modif']; |
} |
} else if (!empty($rawnom['abreviation_auteur_modif']) && $rawnom['abreviation_auteur_modif']!='-') { |
$auteur_modif .= $rawnom['abreviation_auteur_modif']; |
} |
if (!empty($auteur_modif)) { |
$auteurs = ' ('.$auteur_basio.') '.$auteur_modif; |
} elseif (!empty($auteur_basio)) { |
$auteurs = ' '.$auteur_basio; |
} |
return $auteurs ; |
} |
/* +--Fin du code ---------------------------------------------------------------------------------------+ |
* $Log$ |
* Revision 1.3 2008-01-30 08:57:28 ddelon |
* fin mise en place mygwt |
* |
* Revision 1.2 2007-05-21 18:13:30 ddelon |
* Refactoring et documentation |
* |
* |
*/ |
?> |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/trunk/jrest/services/InventoryObservationCount.php |
---|
New file |
0,0 → 1,140 |
<?php |
/** |
David Delon 2008 |
Cecill / GPL V3 |
*/ |
// in : utf8 |
// out : utf8 |
/* |
* InventoryObservationCount.php |
* |
* Cas d'utilisation : |
* Service recherche du nombre a partir de divers crit�res |
* |
* 2: Le service recherche le nombre d'images correspondant au crit�res demand� |
* 3: Le service renvoie le nombre calcule |
*/ |
Class InventoryObservationCount extends DBAccessor { |
var $config; |
function InventoryObservationCount($config) { |
$this->config=$config; |
} |
// renvoie le nombre d' observation correspondant aux criteres |
function getElement($uid) |
{ |
// uid[0] : utilisateur obligatoire |
// uid[1] : criteres de filtrage de la forme critere1:valeur1;critere2:valeur2 |
// Controle detournement utilisateur |
$this->controleUtilisateur($uid[0]); |
$DB=$this->connectDB($this->config,'database_cel'); |
$criteres = array() ; |
if(isset($uid[1])) |
{ |
$criteres = explode("&", $uid[1]) ; |
} |
$query="SELECT count(*) as count FROM cel_inventory WHERE identifiant='".$DB->escapeSimple($uid[0])."' AND " ; |
foreach($criteres as $pair) |
{ |
$nom_valeur = explode("=",$pair) ; |
if(sizeof($nom_valeur) != 0) |
{ |
if($nom_valeur[0] == 'annee') { |
$query .= "year(date_observation) = '".$DB->escapeSimple($nom_valeur[1])."'" ; |
$query .= ' AND ' ; |
} |
elseif($nom_valeur[0] == 'mois') { |
$query .= "month(date_observation) = '".$DB->escapeSimple($nom_valeur[1])."'" ; |
$query .= ' AND ' ; |
} |
elseif($nom_valeur[0] == 'jour') { |
$query .= "day(date_observation) = '".$DB->escapeSimple($nom_valeur[1])."'" ; |
$query .= ' AND ' ; |
} |
elseif($nom_valeur[0] == 'mots_cles') { |
$liste_mc = explode(";",$nom_valeur[1]); |
$query .= '(' ; |
foreach($liste_mc as $mot) { |
if(trim($mot) != '') |
{ |
$query .= "mots_cles LIKE '%".$DB->escapeSimple($mot)."%' OR " ; |
} |
} |
$query = rtrim($query,' OR '); |
$query .= ') AND ' ; |
} |
elseif ($nom_valeur[0] == 'nom_taxon') { |
$nom_valeur[1] = str_replace("*","%",$nom_valeur[1]); |
$query .= "(nom_sel LIKE '%".$DB->escapeSimple($nom_valeur[1]). |
"%' OR identifiant LIKE '%".$DB->escapeSimple($nom_valeur[1]). |
"%' OR ordre LIKE '%".$DB->escapeSimple($nom_valeur[1]). |
"%' OR nom_sel LIKE '%".$DB->escapeSimple($nom_valeur[1]). |
"%' OR num_nom_sel LIKE '%".$DB->escapeSimple($nom_valeur[1]). |
"%' OR nom_ret LIKE '%".$DB->escapeSimple($nom_valeur[1]). |
"%' OR num_nom_ret LIKE '%".$DB->escapeSimple($nom_valeur[1]). |
"%' OR num_taxon LIKE '%".$DB->escapeSimple($nom_valeur[1]). |
"%' OR location LIKE '%".$DB->escapeSimple($nom_valeur[1]). |
"%' OR id_location LIKE '%".$DB->escapeSimple($nom_valeur[1]). |
"%' OR date_observation LIKE '%".$DB->escapeSimple($nom_valeur[1]). |
"%' OR lieudit LIKE '%".$DB->escapeSimple($nom_valeur[1]). |
"%' OR station LIKE '%".$DB->escapeSimple($nom_valeur[1]). |
"%' OR milieu LIKE '%".$DB->escapeSimple($nom_valeur[1]). |
"%' OR commentaire LIKE '%".$DB->escapeSimple($nom_valeur[1]). |
"%' OR transmission LIKE '%".$DB->escapeSimple($nom_valeur[1]). |
"%' OR coord_x LIKE '%".$DB->escapeSimple($nom_valeur[1]). |
"%' OR coord_y LIKE '%".$DB->escapeSimple($nom_valeur[1]). |
"%')"; |
//"%' OR famille LIKE '%".$DB->escapeSimple($nom_valeur[1]). |
} |
else { |
if(trim($nom_valeur[0]) != '') |
{ |
$query .= $nom_valeur[0]." = '".$DB->escapeSimple($nom_valeur[1])."'" ; |
$query .= ' AND ' ; |
} |
} |
} |
} |
$query = rtrim($query,' AND ') ; |
$res =& $DB->query($query); |
if (PEAR::isError($res)) { |
$erreur = 'ERROR : probleme de liste des observations' ; |
$this->logger('CEL_bugs',$erreur.' '.$query); |
} |
$results = array() ; |
while($observation = $res->fetchrow(DB_FETCHMODE_ORDERED)) |
{ |
$result[] = $observation[0] ; |
} |
$res = json_encode($result) ; |
print($res); |
exit() ; |
} |
} |
?> |
/trunk/jrest/services/InventoryLocationList.php |
---|
New file |
0,0 → 1,101 |
<?php |
// In : utf8 |
// Out : utf8 |
// Liste des communes par utilisateur |
Class InventoryLocationList extends DBAccessor { |
var $config; |
function InventoryLocationList($config) { |
$this->config=$config; |
} |
function getElement($uid){ |
// Controle detournement utilisateur |
session_start(); |
$this->controleUtilisateur($uid[0]); |
$DB=$this->connectDB($this->config,'database_cel'); |
$value=array(); |
// cmc_mot_cle, cmc_id_mot_cle_utilisateur, cmc_id_parent |
/*$query0="SELECT \"racine_entite\" , MD5(\"racine_entite\"), MD5(\"000null\") ". |
" FROM cel_inventory WHERE 1 " ; |
$query1="SELECT DISTINCT id_location , MD5(CONCAT(id_location,\"racine_entite\")), MD5(\"racine_entite\") ". |
" FROM cel_inventory WHERE identifiant='".$DB->escapeSimple($uid[0])."' " . |
" ORDER BY id_location"; |
$query2="SELECT DISTINCT location , MD5(CONCAT(location,id_location)), MD5(CONCAT(id_location,\"racine_entite\")) ". |
" FROM cel_inventory WHERE identifiant='".$DB->escapeSimple($uid[0])."' " . |
" ORDER BY location"; |
$query3="SELECT DISTINCT lieudit, MD5(CONCAT(lieudit,location)), MD5(CONCAT(location,id_location)) ". |
" FROM cel_inventory WHERE identifiant='".$DB->escapeSimple($uid[0])."' " . |
" ORDER BY lieudit"; |
*/ |
/* |
$query4="SELECT DISTINCT station, MD5(station), MD5(lieudit) ". |
" FROM cel_inventory WHERE identifiant='".$DB->escapeSimple($uid[0])."' " . |
" ORDER BY station"; |
*/ |
//$query="(".$query0.") UNION (". $query1.") UNION (".$query2.") UNION (".$query3 .") UNION (".$query4 .")" ; |
//$query="(".$query0.") UNION (". $query1.") UNION (".$query2.") UNION (".$query3 .") " ; |
$query = 'SELECT DISTINCT id_location, location, lieudit, station FROM cel_inventory |
WHERE identifiant="'.$DB->escapeSimple($uid[0]).'" ORDER BY id_location ASC, location ASC, lieudit ASC, station ASC' ; |
//print $query |
$res =& $DB->query($query); |
if (DB::isError($res)) { |
die($res->getMessage()); |
} |
while ($row =& $res->fetchrow(DB_FETCHMODE_ORDERED)) { |
$value[] = $row; |
} |
$json = new Services_JSON(); |
$output = $json->encode($value); |
print($output); |
return true; |
} |
} |
/* +--Fin du code ---------------------------------------------------------------------------------------+ |
* $Log$ |
* Revision 1.6 2008-01-30 08:57:28 ddelon |
* fin mise en place mygwt |
* |
* Revision 1.5 2007-05-22 12:54:09 ddelon |
* Securisation acces utilisateur |
* |
* |
* |
*/ |
?> |
/trunk/jrest/services/ImageContribution.php |
---|
New file |
0,0 → 1,132 |
<?php |
/** |
* PHP Version 5 |
* |
* @category PHP |
* @package jrest |
* @author aurelien <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/ |
*/ |
Class ImageContribution extends DBAccessor { |
var $config; |
function ImageContribution($config) { |
$this->config=$config; |
} |
function getElement($uid){ |
$DB=$this->connectDB($this->config,'cel_db'); |
/* $query='SELECT * FROM cel_images'; |
$query .= ' WHERE ci_ce_utilisateur ="'.$uid[0].'"' ; |
$query .= ' ORDER BY ci_meta_date_ajout DESC LIMIT 0,5' ;*/ |
$query = 'SELECT * FROM cel_inventory'. |
' WHERE identifiant = "'.$uid[1].'"'. |
' AND ordre IN (SELECT coi_ce_observation |
FROM cel_obs_images |
WHERE coi_ce_utilisateur ="'.$uid[1].'" )'. |
' AND transmission = 1'. |
' ORDER BY date_modification DESC LIMIT 0,5'; |
$res =& $DB->query($query); |
if (DB::isError($res)) { |
die($res->getMessage()); |
} |
$html = '<div id="resume_cel">'; |
while ($obs =& $res->fetchrow(DB_FETCHMODE_ASSOC)) { |
$chemin_sur_serveur = $this->config['cel_db']['url_images']; |
$req_liaison = 'SELECT * FROM cel_images WHERE ci_id_image IN (SELECT coi_ce_image FROM cel_obs_images WHERE coi_ce_observation = "'.$obs['ordre'].'") AND ci_ce_utilisateur = "'.$obs['identifiant'].'"' ; |
$res_liaison =& $DB->query($req_liaison); |
if (DB::isError($res_liaison)) { |
die($res_liaison->getMessage()); |
} |
while ($img =& $res_liaison->fetchrow(DB_FETCHMODE_ASSOC)) { |
$row = $img; |
} |
$row['ci_nom_original'] = htmlspecialchars($row['ci_nom_original']); |
$row['ci_id_image'] = htmlspecialchars($row['ci_id_image']); |
$id = $row['ci_id_image']; |
$tailleXY = $this->calculerDimensions(array($row['ci_meta_width'], $row['ci_meta_height'])); |
$id = sprintf('%09s', $id) ; |
$id = wordwrap($id, 3 , '_', true) ; |
$id_fichier = $id.".jpg" ; |
$niveauDossier = split("_", $id) ; |
$dossierNiveau1 = $niveauDossier[0] ; |
$dossierNiveau2 = $niveauDossier[1] ; |
$chemin_sur_serveur_final = $chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2 ; |
$chemin_fichier = $chemin_sur_serveur_final.'/L/'.$id."_L.jpg" ; |
$chemin_fichier_s = $chemin_sur_serveur_final.'/M/'.$id."_M.jpg" ; |
$html .= '<div class="item_resume_cel">'; |
$html .= '<h4><a href="'.$chemin_fichier.'">'.$obs['nom_ret'].'</a></h4>'. |
'<img src="'.$chemin_fichier_s.'" alt="'.$row['ci_nom_original'].'" height="'.$tailleXY[1].'px" width="'.$tailleXY[0].'px"></img><br/>'; |
$html .= '<span>Datée du '.$obs['date_modification'].'<br/>' ; |
$html .= 'Lieu : '.trim($obs['location'],'000null').' ('.trim($obs['id_location'],'000null').') '.trim($obs['station'],'000null').' '.trim($obs['lieudit'],'000null').'<br/></p>' ; |
$html .= '</span>'; |
$html .= '</div>'; |
} |
$html.= '</div>'; |
header("Content-Type: text/html; charset=UTF-8"); |
print $html; |
exit; |
} |
public function calculerDimensions($tailleXY) { |
$tailleOr = 75 ; |
if($tailleXY[1] == 0) { |
$tailleXY[1] = $tailleOr; |
} |
if($tailleXY[0] == 0) { |
$tailleXY[0] = $tailleOr; |
} |
$maxTaille = max($tailleXY[1],$tailleXY[0]) ; |
if($maxTaille == $tailleXY[1]) { |
$rapport = $tailleXY[1]/$tailleXY[0] ; |
$tailleXY[1] = 75 ; |
$tailleXY[0] = round($tailleXY[1]/$rapport,0) ; |
}else { |
$rapport = $tailleXY[0]/$tailleXY[1] ; |
$tailleXY[0] = 75 ; |
$tailleXY[1] = round($tailleXY[0]/$rapport,0) ; |
} |
return $tailleXY ; |
} |
} |
?> |
/trunk/jrest/services/NameImage.php |
---|
New file |
0,0 → 1,218 |
<?php |
/** |
David Delon david.delon@clapas.net 2007 |
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 : 8859 |
/* |
* NameImage.php |
* |
* Cas d'utilisation : |
* Service recherche d'image a partir d'un numero nomenclatural |
* |
* 1: Le service recoit un numero nomenclatural |
* 2: Le service calcul le numero taxonomique associe |
* 3: Le service recherche une image disponible pour ce numero taxonomique |
* 4: Le service redimensionne l'image et la renvoie |
*/ |
/** Constante stockant l'URL de la page d'accueil de Photoflora.*/ |
define('EF_URL_PHOTOFLORA', 'http://photoflora.free.fr/'); |
/** Constante stockant l'URL de la page de Photoflora affichant toutes les images d'un taxon donn�es.*/ |
define('EF_URL_PHOTOFLORA_TAXON', EF_URL_PHOTOFLORA.'FiTax.php?NumTaxon=%s'); |
/** Constante stockant l'URL du dossier de photoflora contenant les images miniatures.*/ |
define('EF_URL_PHOTOFLORA_IMG_MIN', 'http://photoflora.free.fr/photos/%s/min/%s'); |
/** Constante stockant l'URL du service XML de Photoflora.*/ |
define('EF_URL_PHOTOFLORA_SERVICE', EF_URL_PHOTOFLORA.'ef_photoflora.php?nt=%s'); |
define('EF_URL_PHOTOFLORA_REGEXP_01', '/\/photos\/([^\/]+)\/max\/(.+)$/'); |
define('EF_URL_PHOTOFLORA_REGEXP_02', '/photoflora([^.]+)\.free\.fr\/max\/(.+)$/'); |
Class NameImage extends DBAccessor { |
var $config; |
function NameImage($config) { |
$this->config=$config; |
} |
function getElement($uid){ |
// Num nomenclatural |
$DB=$this->connectDB($this->config); |
$query = "SELECT DISTINCT b.esn_id_taxon FROM eflore_nom, eflore_nom_rang," . |
" eflore_selection_nom a, eflore_selection_nom b". |
" WHERE a.esn_id_nom= ".$uid[0]. |
" AND a.esn_id_version_projet_taxon = 25 ". |
" AND a.esn_id_taxon=b.esn_id_taxon ". |
" AND b.esn_ce_statut=3 ". |
" AND a.esn_id_version_projet_taxon=b.esn_id_version_projet_taxon" . |
" AND en_ce_rang = enrg_id_rang" . |
" AND en_id_nom = b.esn_id_nom" . |
" AND a.esn_id_version_projet_taxon=en_id_version_projet_nom "; |
$res =& $DB->query($query); |
if (DB::isError($res)) { |
die($res->getMessage()); |
} |
while ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) { |
$nt=$row['esn_id_taxon']; |
} |
$projet_photo = 'photoflora'; |
$tab_retour[$projet_photo]=chercherIllustrationsServiceXml(sprintf(EF_URL_PHOTOFLORA_SERVICE, $nt)); |
$value=array('null','null'); |
foreach ($tab_retour[$projet_photo] as $cle => $illustration) { |
if (preg_match(EF_URL_PHOTOFLORA_REGEXP_01, $illustration['about'], $match)) { |
$abreviation = $match[1]; |
$fichier = $match[2]; |
} |
else { |
if (preg_match(EF_URL_PHOTOFLORA_REGEXP_02, $illustration['about'], $match)) { |
$abreviation = $match[1]; |
$fichier = $match[2]; |
} |
} |
if (isset($abreviation)) { |
$url_miniature = sprintf(EF_URL_PHOTOFLORA_IMG_MIN, $abreviation, $fichier);; |
$url_max = $illustration['about']; |
$value=array($url_miniature,$url_max); |
// Priorite aux images en png |
if (strstr($fichier, '.png')) { |
break; |
} |
} |
} |
$json = new Services_JSON(); |
$output = $json->encode($value); |
print($output); |
} |
} |
function chercherIllustrationsServiceXml($url) |
{ |
return analyserFichierRdf($url); |
} |
function analyserFichierRdf($chemin) |
{ |
//print $chemin; |
$aso_info = array(); |
$dom = new DOMDocument(); |
$dom->validateOnParse = true; |
if (preg_match('/^http:\/\//', $chemin)) { |
@$dom->loadXML(file_get_contents($chemin)); |
} else { |
@$dom->load($chemin); |
} |
$tab_infos = array(); |
foreach ($dom->getElementsByTagNameNS('http://www.w3.org/1999/02/22-rdf-syntax-ns#', 'Description') as $rdf_description) { |
$aso_info['about'] = $rdf_description->getAttribute('about'); |
$aso_info['dc:identifier'] = $rdf_description->getAttribute('identifier'); |
$aso_info['dc:title'] = utf8_decode($rdf_description->getAttribute('title')); |
$aso_info['dc:creator'] = utf8_decode($rdf_description->getAttribute('creator')); |
$aso_info['dc:contributor'] = utf8_decode($rdf_description->getAttribute('contributor')); |
$aso_info['dc:publisher'] = utf8_decode($rdf_description->getAttribute('publisher')); |
$aso_info['dc:type'] = utf8_decode($rdf_description->getAttribute('type')); |
$aso_info['dc:format'] = utf8_decode($rdf_description->getAttribute('format')); |
if (function_exists('date_default_timezone_set')) { |
date_default_timezone_set('Europe/Paris'); |
} |
if (preg_match('/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/', $rdf_description->getAttribute('created'))) { |
$aso_info['dcterms:created'] = date('j-m-Y � H:i:s', strtotime($rdf_description->getAttribute('created'))); |
} else { |
$aso_info['dcterms:created'] = $rdf_description->getAttribute('created'); |
} |
$aso_info['dcterms:dateSubmitted'] = utf8_decode($rdf_description->getAttribute('dateSubmitted')); |
$aso_info['dcterms:spatial'] = utf8_decode($rdf_description->getAttribute('spatial')); |
$aso_info['dcterms:licence'] = utf8_decode($rdf_description->getAttribute('licence')); |
$tab_infos[$rdf_description->getAttribute('identifier')] = $aso_info; |
} |
//echo '<pre>'.$chemin.print_r($tab_infos, true).'</pre>'; |
//print_r($tab_infos); |
return $tab_infos; |
} |
/* +--Fin du code ---------------------------------------------------------------------------------------+ |
* $Log$ |
* Revision 1.4 2008-11-13 11:29:12 ddelon |
* Reecriture gwt-ext |
* |
* Revision 1.2 2008-01-30 08:57:28 ddelon |
* fin mise en place mygwt |
* |
* Revision 1.1 2007-06-06 13:31:16 ddelon |
* v0.09 |
* |
* |
* |
* |
*/ |
?> |
/trunk/jrest/services/InventoryDateList.php |
---|
New file |
0,0 → 1,113 |
<?php |
// in : utf8 |
// out : utf8 |
// Liste les date de releves par utilisateur |
Class InventoryDateList extends DBAccessor { |
var $config; |
function InventoryDateList($config) { |
$this->config=$config; |
} |
function getElement($uid){ |
// uid[0] : utilisateur obligatoire |
// uid[1] : si absent : valeur 'all' (annee) |
// uid[2] : si absent : valeur 'all' (mois) |
// uid[3] : si absent : valeur 'all' (jour) |
// Controle detournement utilisateur |
session_start(); |
$this->controleUtilisateur($uid[0]); |
$DB=$this->connectDB($this->config,'database_cel'); |
$select = "date_observation" ; |
if (!isset($uid[1]) || $uid[1]=="" || $uid[1]=="all" ) { |
$uid[1]="all"; |
if ($select=="") $select="year(date_observation) "; |
} |
else { |
$query_year=" AND year(date_observation)='".$DB->escapeSimple($uid[1])."' "; |
} |
if (!isset($uid[2]) || $uid[2]=="" || $uid[2]=="all" ) { |
$uid[2]="all"; |
if ($select=="") $select="month(date_observation) "; |
} |
else { |
$query_month=" AND month(date_observation)='".$DB->escapeSimple($uid[2])."' "; |
} |
if (!isset($uid[3]) || $uid[3]=="" || $uid[3]=="all" ) { |
$uid[3]="all"; |
if ($select=="") $select="day(date_observation) "; |
} |
else { |
$query_day=" AND day(date_observation)='".$DB->escapeSimple($uid[3])."' "; |
} |
$value=array(); |
$query="SELECT DISTINCT ". |
$select. " AS id" . |
" FROM cel_inventory WHERE identifiant='".$DB->escapeSimple($uid[0])."' " . |
$query_year. |
$query_month. |
$query_day. |
" ORDER BY ".$select; |
$res =& $DB->query($query); |
if (DB::isError($res)) { |
die($res->getMessage()); |
} |
while ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) { |
$value[]=array($row['id']); |
} |
$json = new Services_JSON(); |
$output = $json->encode($value); |
print($output); |
return true; |
} |
} |
/* +--Fin du code ---------------------------------------------------------------------------------------+ |
* $Log$ |
* Revision 1.4 2008-01-30 08:57:28 ddelon |
* fin mise en place mygwt |
* |
* Revision 1.3 2007-05-22 12:54:09 ddelon |
* Securisation acces utilisateur |
* |
* |
* |
*/ |
?> |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/trunk/jrest/services/CelDao.php |
---|
New file |
0,0 → 1,219 |
<?php |
// declare(encoding='UTF-8'); |
/** |
* Classe modèle spécifique à l'application, donc d'accés au données, elle ne devrait pas être appelée de l'extérieur. |
* Elle est abstraite donc doit obligatoirement être étendue. |
* |
* @category Php5 |
* @package Referentiel |
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org> |
* @copyright 2010 Tela-Botanica |
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL |
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL |
* @version SVN: $Id$ |
*/ |
class CelDao { |
const ORDRE_ASCENDANT = 'ASC'; |
const ORDRE_DESCENDANT = 'DESC'; |
const HTTP_REQUETE_SEPARATEUR = '&'; |
protected $distinction = '0'; |
protected $limite_debut = null; |
protected $limite_nbre = null; |
protected $ordre = null; |
public $url_jrest = null; |
public function __construct($url_jrest_distant) { |
$this->url_jrest = $url_jrest_distant; |
} |
//+----------------------------------------------------------------------------------------------------------------+ |
// ACCESSEURS |
public function setDistinction($distinct) { |
$this->distinction = $distinct; |
} |
public function getDistinction() { |
return $this->distinction; |
} |
public function viderDistinction() { |
$this->distinction = null; |
} |
public function avoirLimitation() { |
$limitation = false; |
if (!is_null($this->limite_debut) && !is_null($this->limite_nbre)) { |
$limitation = true; |
} |
return $limitation; |
} |
public function setLimitation($limite_debut, $limite_nbre) { |
$this->limite_debut = $limite_debut; |
$this->limite_nbre = $limite_nbre; |
} |
public function getLimiteDebut() { |
return $this->limite_debut; |
} |
public function getLimiteNbre() { |
return $this->limite_nbre; |
} |
public function viderLimite() { |
$this->limite_debut = null; |
$this->limite_nbre = null; |
} |
public function addOrdre($champ, $trie = self::ORDRE_ASCENDANT) { |
if (!isset($this->ordre[$champ])) { |
if (self::ORDRE_ASCENDANT == $trie || self::ORDRE_DESCENDANT == $trie) { |
$this->ordre[$champ] = $trie; |
} else { |
$e = "La valeur pour le trie doit être : {self::ORDRE_ASCENDANT} ou {self::ORDRE_DESCENDANT}."; |
trigger_error($e, E_USER_WARNING); |
} |
} else { |
$e = "Le champ $champ existe déjà dans le tableau des ordres."; |
trigger_error($e, E_USER_WARNING); |
} |
} |
public function getOrdre() { |
$champs = array(); |
foreach ($this->ordre as $champ => $trie) { |
$champs[] = "$champ $trie"; |
} |
return implode(', ', $champs); |
} |
public function viderOrdre() { |
$this->ordre = null; |
} |
//+----------------------------------------------------------------------------------------------------------------+ |
// MÉTHODES |
public function envoyerRequeteConsultation($url) { |
$url = $this->traiterUrlParametres($url); |
$retour = $this->envoyerRequete($url, 'GET'); |
return $retour; |
} |
public function envoyerRequeteAjout($url, Array $donnees) { |
$retour = $this->envoyerRequete($url, 'PUT', $donnees); |
return $retour; |
} |
public function envoyerRequeteModif($url, Array $donnees) { |
$retour = $this->envoyerRequete($url, 'POST', $donnees); |
return $retour; |
} |
public function envoyerRequeteSuppression($url) { |
$retour = $this->envoyerRequete($url, 'DELETE'); |
return $retour; |
} |
private function envoyerRequete($url, $mode, Array $donnees = array()) { |
$contenu = false; |
if ($mode != 'GET' && $mode != 'PUT' && $mode != 'POST' && $mode != 'DELETE') { |
$e = "Le mode de requête '$mode' n'est pas accepté!"; |
trigger_error($e, E_USER_WARNING); |
} else { |
$contexte = stream_context_create(array( |
'http' => array( |
'method' => $mode, |
'header' => "Content-type: application/x-www-form-urlencoded\r\n", |
'content' => http_build_query($donnees, null, self::HTTP_REQUETE_SEPARATEUR)))); |
$flux = @fopen($url, 'r', false, $contexte); |
if (!$flux) { |
$this->traiterEntete($http_response_header, $url); |
$e = "L'ouverture de l'url '$url' par la méthode HTTP '$mode' a échoué!"; |
trigger_error($e, E_USER_WARNING); |
} else { |
// Informations sur les en-têtes et métadonnées du flux |
$entetes = stream_get_meta_data($flux); |
$this->traiterEntete($entetes, $url); |
// Contenu actuel de $url |
$contenu = stream_get_contents($flux); |
fclose($flux); |
} |
} |
$this->reinitialiser(); |
return $contenu; |
} |
private function traiterUrlParametres($url) { |
$parametres = array(); |
if (! is_null($this->getLimiteDebut())) { |
$parametres[] = 'start='.$this->getLimiteDebut(); |
} |
if (! is_null($this->getLimiteNbre())) { |
$parametres[] = 'limit='.$this->getLimiteNbre(); |
} |
if (! is_null($this->ordre)) { |
$parametres[] = 'orderby='.urlencode($this->getOrdre()); |
} |
if ($this->getDistinction() != 0) { |
$parametres[] = 'distinct='.$this->getDistinction(); |
} |
if (count($parametres) > 0) { |
$url_parametres = implode('&', $parametres); |
$url = $url.'?'.$url_parametres; |
} |
return $url; |
} |
private function traiterEntete($entetes, $uri) { |
$infos = $this->analyserEntete($entetes, $uri); |
$this->traiterEnteteDebug($infos); |
$this->traiterEnteteMessage($infos); |
} |
private function analyserEntete($entetes, $uri) { |
$infos = array('date' => null, 'uri' => $uri, 'debugs' => null, 'messages' => null); |
if (isset($entetes['wrapper_data'])) { |
$entetes = $entetes['wrapper_data']; |
} |
foreach ($entetes as $entete) { |
if (preg_match('/^X-DebugJrest-Data: (.+)$/', $entete, $match)) { |
$infos['debugs'] = json_decode($match[1]); |
} |
if (preg_match('/^X-MessageJrest-Data: (.+)$/', $entete, $match)) { |
$infos['messages'] = json_decode($match[1]); |
} |
if (preg_match('/^Date: .+ ([012][0-9]:[012345][0-9]:[012345][0-9]) .*$/', $entete, $match)) { |
$infos['date'] = $match[1]; |
} |
} |
return $infos; |
} |
private function traiterEnteteDebug($entetes) { |
if (isset($entetes['debugs'])) { |
$date = $entetes['date']; |
$uri = $entetes['uri']; |
$debugs = $entetes['debugs']; |
foreach ($debugs as $debug) { |
$e = "DEBUG : $date - $uri :\n$debug"; |
trigger_error($e, E_USER_NOTICE); |
} |
} |
} |
private function traiterEnteteMessage($entetes) { |
if (isset($entetes['messages'])) { |
$date = $entetes['date']; |
$uri = $entetes['uri']; |
$messages = $entetes['messages']; |
foreach ($messages as $message) { |
$e = "MESSAGE : $date - $uri :\n$message"; |
trigger_error($e, E_USER_NOTICE); |
} |
} |
} |
private function reinitialiser() { |
$this->viderDistinction(); |
$this->viderLimite(); |
$this->viderOrdre(); |
} |
} |
/trunk/jrest/services/InventoryContributionList.php |
---|
New file |
0,0 → 1,81 |
<?php |
Class InventoryContributionList extends DBAccessor { |
protected $config; |
function InventoryContributionList($config) { |
$this->config=$config; |
} |
function getRessource() { |
echo ''; |
} |
function getElement($uid){ |
if(!isset($uid[0])) { |
echo ''; |
} |
$DB=$this->connectDB($this->config,'database_cel'); |
$query="SELECT * FROM cel_inventory ". |
"WHERE identifiant = '".$DB->escapeSimple($uid[0])."' ". |
"ORDER BY date_modification DESC LIMIT 0,5"; |
$res =& $DB->query($query); |
if (DB::isError($res)) { |
die($res->getMessage()); |
} |
$resume = ""; |
while ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) { |
$row['nom_sel'] = htmlspecialchars($row['nom_sel']); |
$row['identifiant'] = htmlspecialchars($row['identifiant']); |
$row['location'] = htmlspecialchars($row['location']); |
$row['id_location'] = htmlspecialchars($row['id_location']); |
$row['station'] = htmlspecialchars($row['station']); |
$row['milieu'] = htmlspecialchars($row['milieu']); |
$row['commentaire'] = htmlspecialchars($row['commentaire']); |
$row['transmission'] = htmlspecialchars($row['transmission']); |
$resume.= '<p>'.$row['nom_sel'] ." (".$row['num_nom_sel'].") ". |
'Location : '. $row['location'].",". $row['station'] . "," . $row['milieu'] . "," . $row['commentaire'] . "," . $row['transmission'] . |
'</p>'; |
} |
header("Content-Type: text/html; charset=ISO-8859-1"); |
print $resume; |
exit; |
} |
} |
/* +--Fin du code ---------------------------------------------------------------------------------------+ |
* $Log$ |
* Revision 1.5 2008-11-13 11:29:12 ddelon |
* Reecriture gwt-ext |
* |
* Revision 1.4 2007-06-06 13:31:16 ddelon |
* v0.09 |
* |
* Revision 1.3 2007-05-22 12:54:09 ddelon |
* Securisation acces utilisateur |
* |
* |
* |
*/ |
?> |
/trunk/jrest/services/InventoryStationList.php |
---|
New file |
0,0 → 1,115 |
<?php |
// in utf8 |
// out utf8 |
// List des stations par utilisateur et par commune |
Class InventoryStationList extends DBAccessor { |
var $config; |
function InventoryStationList($config) { |
$this->config=$config; |
} |
function getElement($uid){ |
// Controle detournement utilisateur |
session_start(); |
$this->controleUtilisateur($uid[0]); |
// uid[0] : utilisateur obligatoire |
// uid[1] : si absent : valeur 'all' (commune) |
// uid[2] et uid[3] : selection intervalle |
$DB=$this->connectDB($this->config,'database_cel'); |
if (!isset($uid[1]) || $uid[1]=="" || $uid[1]=="all" ) { |
$uid[1]="all"; |
$query_location=""; |
} |
else { |
$query_location=" AND location='".$DB->escapeSimple($uid[1])."' "; |
} |
$value=array(); |
if (isset($uid[3]) && isset($uid[2])) { |
// les n � partir de x |
$query="SELECT DISTINCT station FROM cel_inventory WHERE identifiant='".$DB->escapeSimple($uid[0])."'" . |
$query_location. |
" ORDER BY station LIMIT ".$uid[2].",".$uid[3]; |
} |
else { |
if (isset($uid[2])) { |
$query="SELECT DISTINCT station FROM cel_inventory WHERE identifiant='".$DB->escapeSimple($uid[0])."' " . |
$query_location. |
"ORDER BY station LIMIT ".$uid[2].",18446744073709551615"; |
} |
else { |
// le nombre total |
$query="SELECT count(DISTINCT station) as count FROM cel_inventory WHERE identifiant='".$DB->escapeSimple($uid[0])."' " . |
$query_location; |
$res =& $DB->query($query); |
if (DB::isError($res)) { |
die($res->getMessage()); |
} |
while ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) { |
$value=$row['count']; |
} |
$json = new Services_JSON(); |
$output = $json->encode((integer)$value); |
print($output); |
return true; |
} |
} |
$res =& $DB->query($query); |
if (DB::isError($res)) { |
die($res->getMessage()); |
} |
while ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) { |
$value[]=array($row['station']); |
} |
$json = new Services_JSON(); |
$output = $json->encode($value); |
print($output); |
return true; |
} |
} |
/* +--Fin du code ---------------------------------------------------------------------------------------+ |
* $Log$ |
* Revision 1.3 2008-01-30 08:57:28 ddelon |
* fin mise en place mygwt |
* |
* Revision 1.2 2007-05-22 12:54:09 ddelon |
* Securisation acces utilisateur |
* |
* |
* |
*/ |
?> |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/trunk/jrest/services/InventoryCheck.php |
---|
New file |
0,0 → 1,83 |
<?php |
// In utf8 |
// Out utf8 |
// Utilitaire mise a jour enregistrement inventaire |
Class InventoryCheck extends DBAccessor { |
var $config; |
function InventoryCheck($config) { |
$this->config=$config; |
} |
function getRessource(){ |
$DB=$this->connectDB($this->config,'database_cel'); |
// $query="SELECT id, location, id_location, date_observation, identifiant FROM cel_inventory WHERE transmission=1 "; |
$query="SELECT id, location, id_location, date_observation, identifiant FROM cel_inventory"; |
$res =& $DB->query($query); |
if (DB::isError($res)) { |
die($res->getMessage()); |
} |
while ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) { |
if ($row['id_location']!="000null") { |
$query="select * from locations where name = '".mysql_escape_string($row['location'])."' and code='".mysql_escape_string($row['id_location'])."' limit 1"; |
} |
else { |
$query="select * from locations where name = '".mysql_escape_string($row['location'])."' limit 1"; |
} |
$resloc =& $DB->query($query); |
if (DB::isError($resloc)) { |
die($resloc->getMessage()); |
} |
if ($resloc->numRows() == 0) { |
print $row['id']; |
print " "; |
print $row['identifiant']; |
print " : "; |
print $row['location']; |
print " - "; |
print $row['id_location']; |
print " - "; |
$lk="http://www.tela-botanica.org/cel/jrest/util/cel_inventory.php?PME_sys_fl=0&PME_sys_fm=0&PME_sys_sfn[0]=0&PME_sys_operation=PME_op_Change&PME_sys_rec=".$row['id']; |
$link_desc=' <a href="'.$lk.'">Correction</a>'; |
print $link_desc; |
print "<br>"; |
} |
} |
} |
} |
/* +--Fin du code ---------------------------------------------------------------------------------------+ |
* $Log$ |
* Revision 1.2 2008-01-30 08:57:28 ddelon |
* fin mise en place mygwt |
* |
* Revision 1.1 2007-06-06 13:31:16 ddelon |
* v0.09 |
* |
* Revision 1.3 2007-05-22 12:54:09 ddelon |
* Securisation acces utilisateur |
* |
* |
* |
*/ |
?> |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/trunk/jrest/services/include/extract_metadonnee.php |
---|
New file |
0,0 → 1,481 |
<?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 |
/* |
* extractmetadonnee.php |
* |
* Cas d'utilisation : |
* exitraire des metadonnees exif et iptc d'une image |
* |
*/ |
function extraire_metadonnees($url) |
{ |
$iptc = extraire_iptc($url) ; |
$exif = extraire_exif($url) ; |
$meta = array_merge($exif,$iptc); |
fin_tableau_meta(&$meta) ; |
return $meta ; |
} |
/** |
* Extraction des metadonnées exif |
**/ |
function extraire_exif($url) |
{ |
$exif_tab = preparer_tableau_exif() ; |
$exif = exif_read_data($url,"EXIF,COMPUTED,IFD0,FILE,COMMENT",true,false); |
foreach ($exif as $key => $section) |
{ |
foreach ($section as $name => $val) |
{ |
if($name != "MakerNote") |
{ |
construire_tableau_insertion_exif($name, $val ,&$exif_tab) ; |
} |
} |
} |
return $exif_tab ; |
} |
/** |
* Extraction des metadonnées iptc |
**/ |
function extraire_iptc($url) |
{ |
$iptc_tab = preparer_tableau_iptc() ; |
// geimagesize renvoie le infos iptc dans le tableau info |
$size = getimagesize($url, $info); |
// s'il existe |
if (isset($info["APP13"])) |
{ |
// on parse les donnees |
$iptc = iptcparse($info["APP13"]); |
// et on les analyse |
foreach($iptc as $marker => $section) |
{ |
foreach($section as $nom => $val) |
{ |
// pour remplir le tableau de donnees |
construire_tableau_insertion_iptc($marker, $val ,&$iptc_tab) ; |
} |
} |
} |
return $iptc_tab ; |
} |
// construit le tableau pour la requete avec les metadonnees exif |
function construire_tableau_insertion_exif($nom, $val ,$data_tab) |
{ |
switch($nom) |
{ |
case "Height" : |
$data_tab['ci_meta_height'] = $val ; |
break ; |
case "Width" : |
$data_tab['ci_meta_width'] = $val ; |
break ; |
case "Make" : |
$data_tab['ci_meta_make'] = $val ; |
break ; |
case "Model" : |
$data_tab['ci_meta_model'] = $val ; |
break ; |
case "XResolution" : |
$data_tab['ci_meta_x_resolution'] = $val ; |
break ; |
case "YResolution" : |
$data_tab['ci_meta_y_resolution'] = $val ; |
break ; |
case "DateTimeOriginal" : |
$data_tab['ci_meta_date_time'] = $val ; |
break ; |
case "GPS" : |
$data_tab['ci_meta_gps'] = $val ; |
break ; |
case "UserComment" : |
$data_tab['ci_meta_user_comment'] = '"'.$val.'"' ; |
break ; |
case "ExposureTime" : |
$data_tab['ci_meta_exif_exposure_time'] = $val ; |
break ; |
case "FNumber" : |
$data_tab['ci_meta_exif_f_number'] = $val ; |
break ; |
case "ExifVersion" : |
$data_tab['ci_meta_exif_exif_version'] = $val ; |
break ; |
case "CompressedBitsPerPixel" : |
$data_tab['ci_meta_exif_compressed_bits_per_pixel'] = $val ; |
break ; |
case "ShutterSpeedValue" : |
$data_tab['ci_meta_exif_shutter_speed_value'] = $val ; |
break ; |
case "ApertureValue" : |
$data_tab['ci_meta_exif_aperture_value'] = $val ; |
break ; |
case "ExposureBiasValue" : |
$data_tab['ci_meta_exif_exposure_bias_value'] = $val ; |
break ; |
case "MaxApertureValue" : |
$data_tab['ci_meta_exif_max_aperture_value'] = $val ; |
break ; |
case "MeteringMode" : |
$data_tab['ci_meta_exif_metering_mode'] = $val ; |
break ; |
case "LightSource" : |
$data_tab['ci_meta_exif_light_source'] = $val ; |
break ; |
case "Flash" : |
$data_tab['ci_meta_exif_flash'] = $val ; |
break ; |
case "FocalLength" : |
$data_tab['ci_meta_exif_focal_length'] = $val ; |
break ; |
case "FlashpixVersion" : |
$data_tab['ci_meta_exif_flash_pix_version'] = $val ; |
break ; |
case "ColorSpace" : |
$data_tab['ci_meta_exif_color_space'] = $val ; |
break ; |
case "InteroperabilityOffset" : |
$data_tab['ci_meta_exif_interoperability_offset'] = $val ; |
break ; |
case "FocalPlaneXResolution" : |
$data_tab['ci_meta_exif_focal_plane_x_resolution'] = $val ; |
break ; |
case "FocalPlaneYResolution" : |
$data_tab['ci_meta_exif_focal_plane_y_resolution'] = $val ; |
break ; |
case "FocalPlaneResolutionUnit" : |
$data_tab['ci_meta_exif_focal_plane_resolution_unit'] = $val ; |
break ; |
case "SensingMethod" : |
$data_tab['ci_meta_exif_sensing_method'] = $val ; |
break ; |
case "FileSource" : |
$data_tab['ci_meta_exif_file_source'] = $val ; |
break ; |
case "CustomRendered" : |
$data_tab['ci_meta_exif_custom_rendered'] = $val ; |
break ; |
case "ExposureMode" : |
$data_tab['ci_meta_exif_exposure_mode'] = $val ; |
break ; |
case "WhiteBalance" : |
$data_tab['ci_meta_exif_white_balance'] = $val ; |
break ; |
case "DigitalZoomRatio" : |
$data_tab['ci_meta_exif_digital_zoom_ratio'] = $val ; |
break ; |
case "SceneCaptureType" : |
$data_tab['ci_meta_exif_scene_capture_type'] = $val ; |
break ; |
case "GainControl" : |
$data_tab['ci_meta_exif_gain_control'] = $val ; |
break ; |
case "Contrast" : |
$data_tab['ci_meta_exif_contrast'] = $val ; |
break ; |
case "Saturation" : |
$data_tab['ci_meta_exif_saturation'] = $val ; |
break ; |
case "Sharpness" : |
$data_tab['ci_meta_exif_sharpness'] = $val ; |
break ; |
case "SubjectDistanceRange" : |
$data_tab['ci_meta_exif_subject_distance_range'] = $val ; |
break ; |
default : |
$data_tab['ci_meta_exif_autres'] .= $nom.":".$val.";" ; |
} |
} |
// construit le tableau pour la requete avec les metadonnees iptc |
function construire_tableau_insertion_iptc($nom, $val ,$data_tab) |
{ |
switch($nom) |
{ |
// mots cles iptc |
case "2#005" : |
$data_tab['ci_meta_iptc_category'] = $val ; |
break; |
case "2#025" : |
$data_tab['ci_meta_iptc_mots_cles'] = $val ; |
break; |
// champ by line |
case "2#080" : |
$data_tab['ci_meta_iptc_by_line'] = $val ; |
break ; |
// cahmp by line titre |
case "2#085" : |
$data_tab['ci_meta_iptc_by_line_title'] = $val ; |
break ; |
// ville |
case "2#090" : |
$data_tab['ci_meta_iptc_city'] = $val ; |
break ; |
// sous location |
case "2#092" : |
$data_tab['ci_meta_iptc_sub_location'] = $val ; |
break ; |
// etat (pour les us) |
case "2#095" : |
$data_tab['ci_meta_iptc_province_state'] = $val ; |
break ; |
// code pays |
case "2#100" : |
$data_tab['ci_meta_iptc_country_primary_location_code'] = $val ; |
break ; |
// code pays |
case "2#101" : |
$data_tab['ci_meta_iptc_country_name'] = $val ; |
break ; |
// titre principal |
case "2#105" : |
$data_tab['ci_meta_iptc_headline'] = $val ; |
break ; |
// credit |
case "2#110" : |
$data_tab['ci_meta_iptc_credit'] = $val ; |
break ; |
// copyright |
case "2#116" : |
$data_tab['ci_meta_iptc_copyright_notice'] = $val ; |
break ; |
// contact |
case "2#118" : |
$data_tab['ci_meta_iptc_contact'] = $val ; |
break ; |
// autres (pour les champs qu'on ne prend pas en compte) |
default : |
$data_tab['ci_meta_iptc_autres'] .= $nom.":".$val.";" ; |
} |
} |
function preparer_tableau_iptc() |
{ |
$data_tab = array() ; |
$data_tab['ci_meta_iptc_category'] = NULL ; |
$data_tab['ci_meta_iptc_mots_cles'] = NULL ; |
$data_tab['ci_meta_iptc_by_line'] = NULL ; |
$data_tab['ci_meta_iptc_by_line_title'] = NULL ; |
$data_tab['ci_meta_iptc_city'] = NULL ; |
$data_tab['ci_meta_iptc_sub_location'] = NULL ; |
$data_tab['ci_meta_iptc_province_state'] = NULL ; |
$data_tab['ci_meta_iptc_country_primary_location_code'] = NULL ; |
$data_tab['ci_meta_iptc_country_name'] = NULL ; |
$data_tab['ci_meta_iptc_headline'] = NULL ; |
$data_tab['ci_meta_iptc_credit'] = NULL ; |
$data_tab['ci_meta_iptc_copyright_notice'] = NULL ; |
$data_tab['ci_meta_iptc_contact'] = NULL ; |
$data_tab['ci_meta_iptc_autres'] .= " " ; |
return $data_tab ; |
} |
function preparer_tableau_exif() |
{ |
$data_tab = array() ; |
$data_tab['ci_meta_height'] = 0 ; |
$data_tab['ci_meta_width'] = 0 ; |
$data_tab['ci_meta_make'] = NULL ; |
$data_tab['ci_meta_model'] = NULL ; |
$data_tab['ci_meta_x_resolution'] = NULL ; |
$data_tab['ci_meta_y_resolution'] = NULL ; |
$data_tab['ci_meta_date_time'] = NULL ; |
$data_tab['ci_meta_gps'] = NULL ; |
$data_tab['ci_meta_user_comment'] = NULL ; |
$data_tab['ci_meta_exif_exposure_time'] = NULL ; |
$data_tab['ci_meta_exif_f_number'] = NULL ; |
$data_tab['ci_meta_exif_exif_version'] = NULL ; |
$data_tab['ci_meta_exif_compressed_bits_per_pixel'] = NULL ; |
$data_tab['ci_meta_exif_shutter_speed_value'] = NULL ; |
$data_tab['ci_meta_exif_aperture_value'] = NULL ; |
$data_tab['ci_meta_exif_exposure_bias_value'] = NULL ; |
$data_tab['ci_meta_exif_max_aperture_value'] = NULL ; |
$data_tab['ci_meta_exif_metering_mode'] = NULL ; |
$data_tab['ci_meta_exif_flash'] = NULL ; |
$data_tab['ci_meta_exif_light_source'] = NULL ; |
$data_tab['ci_meta_exif_focal_length'] = NULL ; |
$data_tab['ci_meta_exif_flash_pix_version'] = NULL ; |
$data_tab['ci_meta_exif_color_space'] = NULL ; |
$data_tab['ci_meta_exif_interoperability_offset'] = NULL ; |
$data_tab['ci_meta_exif_focal_plane_x_resolution'] = NULL ; |
$data_tab['ci_meta_exif_focal_plane_y_resolution'] = NULL ; |
$data_tab['ci_meta_exif_focal_plane_resolution_unit'] = NULL ; |
$data_tab['ci_meta_exif_sensing_method'] = NULL ; |
$data_tab['ci_meta_exif_file_source'] = NULL ; |
$data_tab['ci_meta_exif_custom_rendered'] = NULL ; |
$data_tab['ci_meta_exif_exposure_mode'] = NULL ; |
$data_tab['ci_meta_exif_white_balance'] = NULL ; |
$data_tab['ci_meta_exif_digital_zoom_ratio'] = NULL ; |
$data_tab['ci_meta_exif_scene_capture_type'] = NULL ; |
$data_tab['ci_meta_exif_gain_control'] = NULL ; |
$data_tab['ci_meta_exif_contrast'] = NULL ; |
$data_tab['ci_meta_exif_saturation'] = NULL ; |
$data_tab['ci_meta_exif_sharpness'] = NULL ; |
$data_tab['ci_meta_exif_subject_distance_range'] = NULL ; |
$data_tab['ci_meta_exif_autres'] .= " " ; |
return $data_tab ; |
} |
function fin_tableau_meta($tab) |
{ |
$tab['ci_meta_exif_autres'] .= " " ; |
$tab['ci_meta_iptc_autres'] .= " " ; |
$tab['ci_nom_original'] = NULL ; |
$tab['ci_md5'] = NULL ; |
} |
?> |
/trunk/jrest/services/include/stockage_fichier.php |
---|
New file |
0,0 → 1,222 |
<?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 |
/* |
* stockage_fichier.php |
* |
* Cas d'utilisation : |
* le service reçoit les informations d'upload d'une image et une id (nom de fichier) |
* et crée les miniatures associées à l'image et stocke le tout |
*/ |
// traite l'upload d'une fichier et le deplace en le renommant selon un identtifiant donne |
function stocker_fichier($fichier,$id,$chemin_base,$taillemax) |
{ |
$droits = 0755; |
$chemin_sur_serveur = $chemin_base ; |
$id = sprintf('%09s', $id) ; |
$id = wordwrap($id, 3 , '_', true) ; |
$id_fichier = $id.".jpg" ; |
$niveauDossier = split("_", $id) ; |
$dossierNiveau1 = $niveauDossier[0] ; |
$dossierNiveau2 = $niveauDossier[1] ; |
if(!file_exists($chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/S')) |
{ |
if(mkdir($chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/S',$droits, true)) { |
chmod($chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/S',$droits); |
} |
else |
{ |
$erreur = 'ERROR : probleme durant l\'écriture du dossier s \n' ; |
$this->logger('CEL_bugs',$erreur); |
return false; |
} |
} |
if(!file_exists($chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/M')) |
{ |
if(mkdir($chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/M',$droits, true)) { |
chmod($chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/M',$droits); |
} |
else |
{ |
$erreur = 'ERROR : probleme durant l\'écriture du dossier m \n' ; |
$this->logger('CEL_bugs',$erreur); |
return false; |
} |
} |
if(!file_exists($chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/L')) |
{ |
if(mkdir($chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/L',$droits, true)) { |
chmod($chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/L',$droits); |
} |
else |
{ |
$erreur = 'ERROR : probleme durant l\'écriture du dossier l \n' ; |
$this->logger('CEL_bugs',$erreur); |
return false; |
} |
} |
$chemin_sur_serveur_final = $chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2 ; |
$chemin_fichier = $chemin_sur_serveur_final.'/L/'.$id.".jpg" ; |
if(move_uploaded_file($fichier['tmp_name'],$chemin_fichier)) |
{ |
// on redimensionne |
list($width, $height) = getimagesize($chemin_fichier); |
$small_width = 100; |
$small_height = 100; |
$medium_width = 300; |
$medium_height = 300; |
// on reechantillonne |
$image_p = imagecreatetruecolor($small_width, $small_height); |
$image_m = imagecreatetruecolor($medium_width, $medium_height); |
$image_l = imagecreatetruecolor($width, $height); |
$image = imagecreatefromjpeg($chemin_fichier); |
$ratio_compression = 100 ; |
if(filesize($chemin_fichier) >= $taillemax) { |
$ratio_compression = 85 ; |
} |
if($image == null) |
{ |
$erreur = 'ERROR : probleme durant la création des images resamplées l \n' ; |
$this->logger('CEL_bugs',$erreur); |
return false ; |
} |
// et on copie les nouvelles images (pour la galerie et la liste) |
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $small_width, $small_height, $width, $height); |
imagecopyresampled($image_m, $image, 0, 0, 0, 0, $medium_width, $medium_height, $width, $height); |
imagecopyresampled($image_l, $image, 0, 0, 0, 0, $width, $height, $width, $height); |
imagejpeg($image_p, $chemin_sur_serveur_final.'/S/'.$id.'_S.jpg', 85); |
chmod($chemin_sur_serveur_final.'/S/'.$id.'_S.jpg',$droits); |
imagejpeg($image_m,$chemin_sur_serveur_final.'/M/'.$id.'_M.jpg', 85); |
chmod($chemin_sur_serveur_final.'/M/'.$id.'_M.jpg',$droits); |
imagejpeg($image_l,$chemin_sur_serveur_final.'/L/'.$id.'_L.jpg', $ratio_compression); |
chmod($chemin_sur_serveur_final.'/L/'.$id.'_L.jpg',$droits); |
unlink($chemin_fichier) ; |
return true ; |
} |
else |
{ |
$erreur = 'ERROR : probleme durant le déplacement du fichier temporaire \n' ; |
$this->logger('CEL_bugs',$erreur); |
return false ; |
} |
} |
function supprimer_fichier($id,$chemin_base) |
{ |
$chemin_sur_serveur = $chemin_base ; |
$id = sprintf('%09s', $id) ; |
$id = wordwrap($id, 3 , '_', true) ; |
$id_fichier = $id.".jpg" ; |
$niveauDossier = split("_", $id) ; |
$dossierNiveau1 = $niveauDossier[0] ; |
$dossierNiveau2 = $niveauDossier[1] ; |
$fichier_s = $chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/S/'.$id.'_S.jpg' ; |
$fichier_m = $chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/M/'.$id.'_M.jpg' ; |
$fichier_l = $chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/L/'.$id.'_L.jpg' ; |
if(file_exists($fichier_s)) |
{ |
$suppression_s = unlink($fichier_s) ; |
if(!$suppression_s) { |
$erreur = 'ERROR : probleme durant la suppression de l\'image '.$fichier_s.' \n' ; |
$this->logger('CEL_images_bugs',$erreur); |
} |
} else { |
$erreur = 'ERROR : probleme : l\'image '.$fichier_s.' n\'existe pas \n' ; |
$this->logger('CEL_images_bugs',$erreur); |
} // Si le fichier existe |
if(file_exists($fichier_m)) |
{ |
$suppression_m = unlink($fichier_m) ; |
if(!$suppression_m) { |
$erreur = 'ERROR : probleme durant la suppression de l\'image '.$fichier_m.' \n' ; |
$this->logger('CEL_images_bugs',$erreur); |
} |
} else { |
$erreur = 'ERROR : probleme : l\'image '.$fichier_m.' n\'existe pas \n' ; |
$this->logger('CEL_images_bugs',$erreur); |
} // Si le fichier existe |
if(file_exists($fichier_l)) |
{ |
$suppression_l = unlink($fichier_l) ; |
if(!$suppression_l) { |
$erreur = 'ERROR : probleme durant la suppression de l\'image '.$fichier_l.' \n' ; |
$this->logger('CEL_images_bugs',$erreur); |
} |
} else { |
$erreur = 'ERROR : probleme : l\'image '.$fichier_l.' n\'existe pas \n' ; |
$this->logger('CEL_images_bugs',$erreur); |
} // Si le fichier existe |
return true; |
} |
?> |
/trunk/jrest/services/include/.directory |
---|
New file |
0,0 → 1,5 |
[Dolphin] |
Timestamp=2010,10,19,15,0,48 |
[Settings] |
ShowDotFiles=true |
/trunk/jrest/services/Inventory.php |
---|
New file |
0,0 → 1,497 |
<?php |
// CRUD ligne d'inventaire : |
// In get : utf8 |
// In post : utf8 |
// out : utf8 |
Class Inventory extends DBAccessor { |
var $config; |
function Inventory($config) { |
$this->config=$config; |
} |
function getElement($uid){ |
// Controle detournement utilisateur |
session_start(); |
$this->controleUtilisateur($uid[0]); |
$value=array(); |
$DB=$this->connectDB($this->config,'database_cel'); |
if (isset($uid[1])) { |
$query="SELECT identifiant, ordre, nom_sel, num_nom_sel, nom_ret, num_nom_ret, num_taxon, famille, location, id_location, date_observation, lieudit, station, milieu, commentaire, coord_x, coord_y FROM cel_inventory WHERE identifiant='".$DB->escapeSimple($uid[0])."' AND ordre =".$uid[1]." ORDER BY ordre"; |
} |
else { |
if (isset($uid[0])) { |
$query="SELECT identifiant, ordre, nom_sel, num_nom_sel, nom_ret, num_nom_ret, num_taxon, famille, location, id_location, date_observation, lieudit, station, milieu, commentaire, coord_x, coord_y FROM cel_inventory WHERE identifiant='".$DB->escapeSimple($uid[0])."' ORDER BY ordre"; |
} |
} |
$res =& $DB->query($query); |
if (DB::isError($res)) { |
$this->logger("CEL_bugs","Erreur de listage des observations :".$res->getMessage()." ".$query); |
} |
while ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) { |
if ($row['date_observation']!="0000-00-00 00:00:00") { |
list($year,$month,$day)= split ('-',$row['date_observation']); |
list($day)= split (' ',$day); |
$row['date_observation']=$day."/".$month."/".$year; |
} |
$value=array($row['nom_sel'],$row['num_nom_sel'],$row['nom_ret'],$row['num_nom_ret'],$row['num_taxon'],$row['famille'], $row['location'], $row['id_location'], $row['ordre'], $row['date_observation'],$row['lieudit'], $row['station'], $row['milieu'], $row['commentaire'], $row['coord_x'],$row['coord_y']); |
} |
$json = new Services_JSON(); |
$output = $json->encode($value); |
print($output); |
return true; |
} |
function getRessource(){ |
} |
function updateElement($uid,$pairs) { |
// Controle detournement utilisateur |
session_start(); |
$this->controleUtilisateur($uid[0]); |
if ($pairs['num_nom_sel']!='') { |
// Utilisation d'un nom faisant parti du referentiel : recherche du nom valide correspondant |
$complement=$this->rechercherInformationsComplementaires($pairs['num_nom_sel']); |
$pairs['nom_ret']=$complement['Nom_Retenu']; |
$pairs['num_nom_ret']=$complement['Num_Nom_Retenu']; |
$pairs['num_taxon']=$complement['Num_Taxon']; |
$pairs['famille']=$complement['Famille']; |
} |
$DB=$this->connectDB($this->config,'database_cel'); |
// Nullifiage ... |
foreach($pairs as $k=>$v) { |
if (trim($v)=="") { |
$pairs[$k]="null"; |
} |
} |
// Pour apparaitre le premier dans les tris ... |
if ($pairs['location']=="null") $pairs['location']="000null"; |
// Pour apparaitre le premier dans les tris ... |
if ($pairs['lieudit']=="null") $pairs['lieudit']="000null"; |
// Pour apparaitre le premier dans les tris ... |
if ($pairs['id_location']=="null") $pairs['id_location']="000null"; |
// Pour apparaitre le premier dans les tris ... |
if ($pairs['station']=="null") $pairs['station']="000null"; |
// Pour apparaitre le premier dans les tris ... |
if ($pairs['milieu']=="null") $pairs['milieu']="000null"; |
// Pour supprimer les séparateurs de mots clés en trop |
if (isset($pairs['mot_cles'])) { |
$pairs['mot_cles'] = str_replace(';;',';',$pairs['mot_cles']); |
} |
// TODO : decouper avec les / |
if ($pairs['date_observation']!="null") { |
list($jour,$mois,$annee)=split("/",$pairs['date_observation']); |
$pairs['date_observation']=$annee."-".$mois."-".$jour." 0:0:0"; |
} |
if ($pairs['coord_x']=="null") { |
$pairs['coord_x'] = "000null"; |
} |
if ($pairs['coord_y']=="null") { |
$pairs['coord_y'] = "000null"; |
} |
$query="UPDATE cel_inventory SET nom_sel = '".$DB->escapeSimple($pairs['nom_sel'])."',". |
"num_nom_sel = '".$DB->escapeSimple($pairs['num_nom_sel'])."',". |
"nom_ret = '".$DB->escapeSimple($pairs['nom_ret'])."',". |
"num_nom_ret = '".$DB->escapeSimple($pairs['num_nom_ret'])."',". |
"num_taxon = '".$DB->escapeSimple($pairs['num_taxon'])."',". |
"famille = '".$DB->escapeSimple($pairs['famille'])."',". |
"location = '".$DB->escapeSimple($pairs['location'])."',". |
"id_location = '".$DB->escapeSimple($pairs['id_location'])."',". |
"date_observation = '".$DB->escapeSimple($pairs['date_observation'])."',". |
"lieudit = '".$DB->escapeSimple($pairs['lieudit'])."',". |
"station = '".$DB->escapeSimple($pairs['station'])."',". |
"milieu = '".$DB->escapeSimple($pairs['milieu'])."',". |
"commentaire = '".$DB->escapeSimple($pairs['commentaire'])."',". |
"date_modification = now() ,". |
"mots_cles = '".$DB->escapeSimple($pairs['mots_cles'])."',". |
"coord_x='".$DB->escapeSimple($pairs['coord_x'])."',". |
"coord_y='".$DB->escapeSimple($pairs['coord_y'])."' ". |
"WHERE ordre = '".$DB->escapeSimple($uid[1])."' AND identifiant='".$DB->escapeSimple($uid[0])."'"; |
$res =& $DB->query($query); |
if (PEAR::isError($res)) { |
$this->logger("CEL_bugs","Erreur de modification d'une observation :".$res->getMessage()." ".$query); |
} |
return true; |
} |
function createElement($pairs){ |
// Controle detournement utilisateur |
session_start(); |
$this->controleUtilisateur($pairs['identifiant']); |
if ($pairs['num_nom_sel']!='') { |
// Utilisation d'un nom faisant parti du referentiel : recherche du nom valide correspondant |
$complement=$this->rechercherInformationsComplementaires($pairs['num_nom_sel']); |
$pairs['nom_ret']=$complement['Nom_Retenu']; |
$pairs['num_nom_ret']=$complement['Num_Nom_Retenu']; |
$pairs['num_taxon']=$complement['Num_Taxon']; |
$pairs['famille']=$complement['Famille']; |
} |
// Dernier numero d'ordre utilise : |
$DB=$this->connectDB($this->config,'database_cel'); |
$query="SELECT max(ordre) AS ordre FROM cel_inventory WHERE identifiant='".$DB->escapeSimple($pairs['identifiant'])."' "; |
$res =& $DB->query($query); |
if (DB::isError($res)) { |
die($res->getMessage()); |
} |
$row['ordre']=0; |
while ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) { |
$pairs['ordre']=$row['ordre']+1; |
} |
// Nullifiage ... |
foreach($pairs as $k=>$v) { |
if (trim($v)=="") { |
$pairs[$k]="null"; |
} |
} |
// Pour apparaitre le premier dans les tris ... |
if ($pairs['location']=="null") $pairs['location']="000null"; |
// Pour apparaitre le premier dans les tris ... |
if ($pairs['lieudit']=="null") $pairs['lieudit']="000null"; |
// Pour apparaitre le premier dans les tris ... |
if ($pairs['id_location']=="null") $pairs['id_location']="000null"; |
// Pour apparaitre le premier dans les tris ... |
if ($pairs['station']=="null") $pairs['station']="000null"; |
// Pour apparaitre le premier dans les tris ... |
if ($pairs['milieu']=="null") $pairs['milieu']="000null"; |
// TODO : decouper avec les / |
if ($pairs['date_observation']!="null") { |
list($jour,$mois,$annee)=split("/",$pairs['date_observation']); |
$pairs['date_observation']=$annee."-".$mois."-".$jour." 0:0:0"; |
} |
if ($pairs['coord_x']=="null") { |
$pairs['coord_x'] = "000null"; |
} |
if ($pairs['coord_y']=="null") { |
$pairs['coord_y'] = "000null"; |
} |
$query = "INSERT INTO cel_inventory (identifiant,ordre,nom_sel,num_nom_sel,nom_ret,num_nom_ret,num_taxon,famille,location,id_location,date_observation,lieudit,station, milieu, commentaire, date_creation,date_modification,coord_x,coord_y) " . |
" VALUES('".$DB->escapeSimple($pairs['identifiant'])."','". |
$DB->escapeSimple($pairs['ordre'])."','". |
$DB->escapeSimple($pairs['nom_sel'])."','". |
$DB->escapeSimple($pairs['num_nom_sel'])."','". |
$DB->escapeSimple($pairs['nom_ret'])."','". |
$DB->escapeSimple($pairs['num_nom_ret'])."','". |
$DB->escapeSimple($pairs['num_taxon'])."','". |
$DB->escapeSimple($pairs['famille'])."','". |
$DB->escapeSimple($pairs['location'])."','". |
$DB->escapeSimple($pairs['id_location'])."','". |
$DB->escapeSimple($pairs['date_observation'])."','". |
$DB->escapeSimple($pairs['lieudit'])."','". |
$DB->escapeSimple($pairs['station'])."','". |
$DB->escapeSimple($pairs['milieu'])."','". |
$DB->escapeSimple($pairs['commentaire'])."',". |
"now() , now(),'". |
$DB->escapeSimple($pairs['coord_x'])."','". |
$DB->escapeSimple($pairs['coord_y'])."')"; |
$res =& $DB->query($query); |
if (PEAR::isError($res)) { |
$this->logger("CEL_bugs","Erreur de creation d'une observation :".$res->getMessage()." ".$query); |
return false; |
//die($res->getMessage()); |
} |
return true; |
} |
function deleteElement($uid){ |
// Controle detournement utilisateur |
session_start(); |
$this->controleUtilisateur($uid[0]); |
$value=array(); |
$DB=$this->connectDB($this->config,'database_cel'); |
if (isset($uid[1])) { |
$query="DELETE FROM cel_inventory WHERE identifiant='".$DB->escapeSimple($uid[0])."' AND ordre in (".$DB->escapeSimple($uid[1]) .")"; |
} |
$res =& $DB->query($query); |
if (PEAR::isError($res)) { |
$this->logger("CEL_bugs","Erreur de suppression d'une observation :".$res->getMessage()." ".$query); |
return false; |
} |
else { |
echo "OK" ; |
exit() ; |
} |
return true; |
} |
function rechercherInformationsComplementaires($numNom) { |
$DB=$this->connectDB($this->config); |
$query = "SELECT DISTINCT en_nom_genre, en_epithete_espece, en_nom_supra_generique, en_epithete_infra_generique,". |
" auteur_bex.enaia_intitule_abrege AS abreviation_auteur_basio_ex ". |
" , auteur_b.enaia_intitule_abrege AS abreviation_auteur_basio ". |
" , auteur_mex.enaia_intitule_abrege AS abreviation_auteur_modif_ex ". |
" , auteur_m.enaia_intitule_abrege AS abreviation_auteur_modif ". |
" , en_epithete_espece, en_epithete_infra_specifique, enrg_abreviation_rang, b.esn_id_taxon, b.esn_id_nom" . |
" FROM eflore_nom, eflore_nom_rang," . |
" eflore_naturaliste_intitule_abreviation AS auteur_bex ". |
" , eflore_naturaliste_intitule_abreviation AS auteur_b ". |
" , eflore_naturaliste_intitule_abreviation AS auteur_mex ". |
" , eflore_naturaliste_intitule_abreviation AS auteur_m ". |
" ,eflore_selection_nom a, eflore_selection_nom b". |
" WHERE a.esn_id_nom= ".$numNom. |
" AND a.esn_id_version_projet_taxon = 25 ". |
" AND a.esn_id_taxon=b.esn_id_taxon ". |
" AND b.esn_ce_statut=3 ". |
" AND a.esn_id_version_projet_taxon=b.esn_id_version_projet_taxon" . |
" AND en_ce_rang = enrg_id_rang" . |
" AND en_id_nom = b.esn_id_nom" . |
" AND en_ce_auteur_basio_ex = auteur_bex.enaia_id_intitule_naturaliste_abrege ". |
" AND en_ce_auteur_basio = auteur_b.enaia_id_intitule_naturaliste_abrege ". |
" AND en_ce_auteur_modif_ex = auteur_mex.enaia_id_intitule_naturaliste_abrege ". |
" AND en_ce_auteur_modif = auteur_m.enaia_id_intitule_naturaliste_abrege ". |
" AND a.esn_id_version_projet_taxon=en_id_version_projet_nom "; |
$res =& $DB->query($query); |
if (DB::isError($res)) { |
die($res->getMessage()); |
} |
// Nom retenu, Num Nomen nom retenu, Num Taxon, |
// Famille |
$value=array('Nom_Retenu'=>"",'Num_Nom_Retenu'=>"0",'Num_Taxon'=>"0",'Famille'=>""); |
while ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) { |
$fam=$this->rechercherFamille($row['esn_id_taxon'],$DB); |
while (($fam['en_ce_rang']!='fin') && ($fam['en_ce_rang'] !=120)) { |
$fam=$this->rechercherFamille($fam['etr_id_taxon_2'],$DB); |
} |
if ($fam['en_ce_rang']==120) { |
$famille=$fam['en_nom_supra_generique']; |
} |
else { |
$famille="Famille inconnue"; |
} |
$value=array('Nom_Retenu'=>$this->formaterNom($row),'Num_Nom_Retenu'=>$row['esn_id_nom'],'Num_Taxon'=>$row['esn_id_taxon'],'Famille'=>$famille); |
} |
return $value; |
} |
function formaterNom($rawnom) { |
// Constitution du nom: |
$nom = ''; |
if ($rawnom['en_nom_supra_generique'] != '') { |
$nom .= $rawnom['en_nom_supra_generique']; |
} else if ($rawnom['en_epithete_infra_generique'] != '') { |
$nom .= $rawnom['en_epithete_infra_generique']; |
} else { |
if ($rawnom['en_nom_genre'] != '') { |
$nom .= $rawnom['en_nom_genre']; |
} |
if ($rawnom['en_epithete_espece']!= '') { |
$nom .= ' '.$rawnom['en_epithete_espece']; |
} |
if ($rawnom['en_epithete_infra_specifique'] != '') { |
if (!empty($rawnom['enrg_abreviation_rang'])) { |
$nom .= ' '.$rawnom['enrg_abreviation_rang'].''; |
} |
$nom .= ' '.$rawnom['en_epithete_infra_specifique']; |
} |
} |
return $nom .$this->retournerAuteur($rawnom) ; |
} |
function rechercherFamille($taxon,&$DB) { |
$row=array(); |
$query="SELECT DISTINCT en_ce_rang, etr_id_taxon_2, en_id_nom, en_nom_supra_generique ". |
" FROM eflore_taxon_relation, eflore_selection_nom, eflore_nom ". |
" WHERE etr_id_taxon_1 = ".$taxon. |
" AND etr_id_version_projet_taxon_1 = 25 ". |
" AND etr_id_categorie_taxon = 3 ". |
" AND etr_id_valeur_taxon = 3 ". |
" AND esn_id_taxon = etr_id_taxon_2 ". |
" AND esn_ce_statut = 3 ". |
" AND esn_id_version_projet_taxon = etr_id_version_projet_taxon_1 ". |
" AND en_id_nom = esn_id_nom ". |
" AND esn_id_version_projet_taxon=en_id_version_projet_nom "; |
$res =& $DB->query($query); |
if (DB::isError($res)) { |
die($res->getMessage()); |
} |
if ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) { |
return $row; |
} |
else { |
$row['en_ce_rang']='fin'; |
return $row; |
} |
} |
function retournerAuteur($rawnom) { |
$auteurs = ''; |
$auteur_basio = ''; |
$auteur_modif = ''; |
if (!empty($rawnom['abreviation_auteur_basio_ex']) && $rawnom['abreviation_auteur_basio_ex']!='-' ) { |
$auteur_basio .= $rawnom['abreviation_auteur_basio_ex']; |
if (!empty($rawnom['abreviation_auteur_basio']) && $rawnom['abreviation_auteur_basio']!='-') { |
$auteur_basio .= ' ex '.$rawnom['abreviation_auteur_basio']; |
} |
} else if (!empty($rawnom['abreviation_auteur_basio']) && $rawnom['abreviation_auteur_basio']!='-') { |
$auteur_basio .= $rawnom['abreviation_auteur_basio']; |
} |
if (!empty($rawnom['abreviation_auteur_modif_ex']) && $rawnom['abreviation_auteur_modif_ex']!='-') { |
$auteur_modif .= $rawnom['abreviation_auteur_modif_ex']; |
if (!empty($rawnom['abreviation_auteur_modif']) && $rawnom['abreviation_auteur_modif']!='-') { |
$auteur_modif .= ' ex '.$rawnom['abreviation_auteur_modif']; |
} |
} else if (!empty($rawnom['abreviation_auteur_modif']) && $rawnom['abreviation_auteur_modif']!='-') { |
$auteur_modif .= $rawnom['abreviation_auteur_modif']; |
} |
if (!empty($auteur_modif)) { |
$auteurs = ' ('.$auteur_basio.') '.$auteur_modif; |
} elseif (!empty($auteur_basio)) { |
$auteurs = ' '.$auteur_basio; |
} |
return $auteurs ; |
} |
} |
/* +--Fin du code ---------------------------------------------------------------------------------------+ |
* $Log$ |
* Revision 1.11 2008-11-13 11:29:12 ddelon |
* Reecriture gwt-ext |
* |
* Revision 1.10 2008-01-30 08:57:28 ddelon |
* fin mise en place mygwt |
* |
* Revision 1.9 2007-05-22 12:54:09 ddelon |
* Securisation acces utilisateur |
* |
* |
* |
*/ |
?> |
/trunk/jrest/services/LocationSearch.php |
---|
New file |
0,0 → 1,137 |
<?php |
/** |
David Delon david.delon@clapas.net 2007 |
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 |
/* |
* |
* |
/* |
* LocationSearch.php |
* |
* Cas d'utilisation : |
* Service completion nom de commune |
* |
* 1 : L'application recoit un debut de nom de commune |
* 2 : Si la longueur du prefix est >2, l'application retourne les 50 premieres communes commencant par ce prefix |
*/ |
Class LocationSearch extends DBAccessor { |
var $config; |
function LocationSearch($config) { |
$this->config=$config; |
} |
function getElement($uid){ |
$value=array(); |
if (isset($uid[0])) { |
foreach ($uid as $element) { |
$lieu=$lieu." ".$element; |
} |
$lieu=ltrim($lieu); |
$lieu=ereg_replace('\*+','%',$lieu); |
if ((strlen($lieu) > 0) && ($lieu != '%')) { |
$DB=$this->connectDB($this->config,'database_cel'); |
$query="SELECT DISTINCT name, code FROM locations WHERE " . |
"maj_name LIKE '".$DB->escapeSimple($lieu)."%' OR name LIKE '".$DB->escapeSimple($lieu)."%' ORDER BY name LIMIT 50"; |
} |
else { |
print "[]"; |
return ; |
} |
} |
else { |
print "[]"; |
return ; |
} |
$res =& $DB->query($query); |
if (DB::isError($res)) { |
die($res->getMessage()); |
} |
while ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) { |
// $value[]=array($row['name']." (".sprintf("%02s",$row['code']).")",$row['code']); |
$value[]=array($row['name']." (".sprintf("%02s",$row['code']).")",$row['code']); |
} |
$json = new Services_JSON(); |
$output = $json->encode($value); |
print($output); |
} |
function getRessource(){ |
print "[]"; |
return; |
} |
} |
/* +--Fin du code ---------------------------------------------------------------------------------------+ |
* $Log$ |
* Revision 1.4 2008-01-30 08:57:28 ddelon |
* fin mise en place mygwt |
* |
* Revision 1.3 2007-05-21 18:13:03 ddelon |
* Correction bug recherche commune du type "la canourgue" |
* |
* |
*/ |
?> |
/trunk/jrest/services/InventoryKeyWordList.php |
---|
New file |
0,0 → 1,630 |
<?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 |
/* |
* InventoryKeyWordList.php |
* |
* Cas d'utilisation : |
* Service recherche et modifie l'arbre des mots cl�s associ�s � un id |
* |
* 1: Le service recoit un mot cl� � ajouter � l'arbre |
* 2: Le service recherche l'arbre ou sous arbre correspondant au crit�res demand� |
* 3: Le service renvoie l'arbre au format json |
*/ |
Class InventoryKeyWordList extends DBAccessor { |
var $config ; |
protected $suffix = ""; |
function InventoryKeyWordList($config) { |
$this->config=$config; |
} |
function verifierPresenceRacine($id) |
{ |
$DB=$this->connectDB($this->config,'cel_db'); |
$query = 'SELECT COUNT(*) FROM cel_mots_cles'.$this->suffix.' WHERE cmc_id_proprietaire = "'.$DB->escapeSimple($id).'"' ; |
$res =& $DB->query($query); |
if (PEAR::isError($res)) { |
die($res->getMessage()); |
} |
else |
{ |
$valeurs = $res->fetchrow(DB_FETCHMODE_ORDERED) ; |
switch ($this->suffix) { |
case "_obs": |
$nom_racine = 'Projets'; |
$id_racine = 'racine_obs'; |
break; |
case "_images": |
$nom_racine = 'Mots clés'; |
$id_racine = 'racine'; |
break; |
default: |
$nom_racine = $this->suffix; |
$id_racine = $this->suffix; |
} |
if($valeurs[0] == 0) |
{ |
$query = 'INSERT INTO cel_mots_cles'.$this->suffix.' VALUES ("'.$nom_racine.'",1,2,"'.$id_racine.'","'.$id_racine.'","'.$DB->escapeSimple($id).'","",0) ' ; |
$res =& $DB->query($query); |
if (PEAR::isError($res)) { |
die($res->getMessage()); |
} |
} |
} |
} |
function desactiverAutoCommitEtCommencerTransaction() |
{ |
$DB=$this->connectDB($this->config,'cel_db'); |
// desactive l'autocommit le temps de la maniulation de l'arbre |
$query = "SET AUTOCOMMIT = 0" ; |
$res =& $DB->query($query); |
// et debute une nouvelle transaction |
$query = "BEGIN " ; |
$res =& $DB->query($query); |
} |
function reactiverAutoCommitEtCompleterTransaction() |
{ |
$DB=$this->connectDB($this->config,'cel_db'); |
// complete la transaction |
$query = "COMMIT " ; |
$res =& $DB->query($query); |
// reactive l'autocommit le temps de la maniulation de l'arbre |
$query = "SET AUTOCOMMIT = 1" ; |
$res =& $DB->query($query); |
echo "OK" ; |
} |
function reactiverAutoCommitEtAnnulerTransaction() |
{ |
$DB=$this->connectDB($this->config,'cel_db'); |
// annule la transaction |
$query = "ROLLBACK " ; |
$res =& $DB->query($query); |
// reactive l'autocommit le temps de la maniulation de l'arbre |
$query = "SET AUTOCOMMIT = 1" ; |
$res =& $DB->query($query); |
echo "ERROR" ; |
} |
// renvoie les bornes d'un noeud de l'arbre des mots cl�s |
function calculerBornesEtNiveau($id_mot_cle,$id_utilisateur) |
{ |
$DB=$this->connectDB($this->config,'cel_db'); |
$query = 'SELECT cmc_bd, cmc_bg, cmc_niveau FROM cel_mots_cles'.$this->suffix.' WHERE cmc_id_mot_cle_utilisateur = "'.$DB->escapeSimple($id_mot_cle).'" AND cmc_id_proprietaire = "'.$DB->escapeSimple($id_utilisateur).'"' ; |
$res =& $DB->query($query); |
if (PEAR::isError($res)) { |
die($res->getMessage()); |
} |
$results = array() ; |
$valeurs = $res->fetchrow(DB_FETCHMODE_ASSOC) ; |
return $valeurs ; |
} |
// decale les bornes de deux pour inserer un nouvel element |
function decalerBornesPlusDeux($valeur,$id_utilisateur) |
{ |
$DB=$this->connectDB($this->config,'cel_db'); |
// decalage borne droite |
$query = 'UPDATE cel_mots_cles'.$this->suffix.' SET cmc_bd = cmc_bd + 2 WHERE cmc_bd >= "'.$DB->escapeSimple($valeur).'" AND cmc_id_proprietaire = "'.$DB->escapeSimple($id_utilisateur).'"' ; |
$res =& $DB->query($query); |
if (PEAR::isError($res)) { |
die($res->getMessage()); |
$reussi_1 = false ; |
} |
else |
{ |
$reussi_1 = true ; |
} |
// decalage borne gauche |
$query = 'UPDATE cel_mots_cles'.$this->suffix.' SET cmc_bg = cmc_bg + 2 WHERE cmc_bg >= "'.$DB->escapeSimple($valeur).'" AND cmc_id_proprietaire = "'.$DB->escapeSimple($id_utilisateur).'"' ; |
$res =& $DB->query($query); |
if (PEAR::isError($res)) { |
die($res->getMessage()); |
$reussi_2 = false ; |
} |
else |
{ |
$reussi_2 = true ; |
} |
$reussi = $reussi_1 && $reussi_2 ; |
return $reussi ; |
} |
// decale les bornes d'un intervalle negatif donne (pour la suppression d'un sous arbre) |
function decalerBornesMoinsIntervalle($bg, $bd,$id_utilisateur) |
{ |
$DB=$this->connectDB($this->config,'cel_db'); |
$decalage = $bd - $bg + 1 ; |
// decalage borne droite |
$query = 'UPDATE cel_mots_cles'.$this->suffix.' SET cmc_bd = cmc_bd - "'.$DB->escapeSimple($decalage).'" WHERE cmc_bd >= "'.$DB->escapeSimple($bg).'" AND cmc_id_proprietaire = "'.$DB->escapeSimple($id_utilisateur).'"' ; |
$res =& $DB->query($query); |
if (PEAR::isError($res)) { |
die($res->getMessage()); |
$reussi_1 = false ; |
} |
else |
{ |
$reussi_1 = true ; |
} |
// decalage borne gauche |
$query = 'UPDATE cel_mots_cles'.$this->suffix.' SET cmc_bg = cmc_bg - "'.$DB->escapeSimple($decalage).'" WHERE cmc_bg > "'.$DB->escapeSimple($bg).'" AND cmc_id_proprietaire = "'.$DB->escapeSimple($id_utilisateur).'"' ; |
$res =& $DB->query($query); |
if (PEAR::isError($res)) { |
die($res->getMessage()); |
$reussi_2 = false ; |
} |
else |
{ |
$reussi_2 = true ; |
} |
$reussi = $reussi_1 && $reussi_2 ; |
return $reussi ; |
} |
// decale � droite des bornes don�es d'un intervalle positif donne (pour l'ajout d'un sous arbre) |
function decalerBornesPlusIntervalle($valeur_bornes, $largeur,$id_utilisateur) |
{ |
$DB=$this->connectDB($this->config,'cel_db'); |
$decalage = $largeur ; |
// decalage borne droite |
$query = 'UPDATE cel_mots_cles'.$this->suffix.' SET cmc_bd = cmc_bd + "'.$DB->escapeSimple($decalage).'" WHERE cmc_bd >= "'.$DB->escapeSimple($valeur_bornes).'" AND cmc_id_proprietaire = "'.$DB->escapeSimple($id_utilisateur).'"' ; |
$res =& $DB->query($query); |
if (PEAR::isError($res)) { |
die($res->getMessage()); |
$reussi_1 = false ; |
} |
else |
{ |
$reussi_1 = true ; |
} |
// decalage borne gauche |
$query = 'UPDATE cel_mots_cles'.$this->suffix.' SET cmc_bg = cmc_bg + "'.$DB->escapeSimple($decalage).'" WHERE cmc_bg >= "'.$DB->escapeSimple($valeur_bornes).'" AND cmc_id_proprietaire = "'.$DB->escapeSimple($id_utilisateur).'"' ; |
$res =& $DB->query($query); |
if (PEAR::isError($res)) { |
die($res->getMessage()); |
$reussi_2 = false ; |
} |
else |
{ |
$reussi_2 = true ; |
} |
$reussi = $reussi_1 && $reussi_2 ; |
return $reussi ; |
} |
// inverse les bornes dun intervalle pour l'exclure des modifications sur l'arbre sans changer la hierarchie |
function exclureIntervalle($bg, $bd, $id_utilisateur) |
{ |
$DB=$this->connectDB($this->config,'cel_db'); |
// decalage bornes |
$query = 'UPDATE cel_mots_cles'.$this->suffix.' SET cmc_bd = cmc_bd - "'.$DB->escapeSimple($bd).'" - 1 , cmc_bg = cmc_bg - "'.$DB->escapeSimple($bd).'" - 1 WHERE cmc_bd <= "'.$DB->escapeSimple($bd).'" AND cmc_bg >= "'.$DB->escapeSimple($bg).'" AND cmc_id_proprietaire = "'.$DB->escapeSimple($id_utilisateur).'"' ; |
$res =& $DB->query($query); |
if (PEAR::isError($res)) { |
die($res->getMessage()); |
return false ; |
} |
else |
{ |
return true ; |
} |
} |
// recale les bornes dun intervalle pour l'inclure dans l'arbre � la bonne place |
function inclureIntervalle($bg, $bd, $decalage,$modif_niveau, $id_utilisateur) |
{ |
$DB=$this->connectDB($this->config,'cel_db'); |
// decalage borne droite |
$query = 'UPDATE cel_mots_cles'.$this->suffix.' SET cmc_bg = cmc_bg + "'.$DB->escapeSimple($decalage).'" , cmc_bd = cmc_bd + "'.$DB->escapeSimple($decalage).'", cmc_niveau = cmc_niveau + "'.$modif_niveau.'" WHERE cmc_bg >= "'.$DB->escapeSimple($bg).'" AND cmc_bd <= "'.$DB->escapeSimple($bd).'" AND cmc_id_proprietaire = "'.$DB->escapeSimple($id_utilisateur).'"' ; |
$res =& $DB->query($query); |
if (PEAR::isError($res)) { |
die($res->getMessage()); |
return false ; |
} |
else |
{ |
return true ; |
} |
} |
function changerPere($id_mot_cle, $id_pere, $id_utilisateur) |
{ |
$DB=$this->connectDB($this->config,'cel_db'); |
$query = 'UPDATE cel_mots_cles'.$this->suffix.' SET cmc_id_parent = "'.$DB->escapeSimple($id_pere).'" WHERE cmc_id_mot_cle_utilisateur = "'.$DB->escapeSimple($id_mot_cle).'" AND cmc_id_proprietaire = "'.$DB->escapeSimple($id_utilisateur).'"' ; |
$res =& $DB->query($query); |
if (PEAR::isError($res)) { |
die($res->getMessage()); |
return false ; |
} |
else |
{ |
return true ; |
} |
} |
function getElement($uid) |
{ |
// Controle detournement utilisateur |
session_start(); |
$this->controleUtilisateur($uid[1]); |
$DB=$this->connectDB($this->config,'cel_db'); |
$this->suffix = '_'.$uid[0]; |
$id_utilisateur = $uid[1] ; |
$query = 'SELECT cmc_mot_cle, cmc_id_mot_cle_utilisateur, cmc_id_parent FROM cel_mots_cles'.$this->suffix.' WHERE cmc_id_proprietaire = "'.$DB->escapeSimple($id_utilisateur).'" ORDER BY cmc_niveau' ; |
$result = array() ; |
$res =& $DB->query($query); |
if (PEAR::isError($res)) |
{ |
die($res->getMessage()); |
} |
else |
{ |
while($motcle = $res->fetchrow(DB_FETCHMODE_ASSOC)) |
{ |
$result[] = $motcle ; |
} |
$res = json_encode($result) ; |
header("content-type: text/json") ; |
print $res ; |
exit() ; |
} |
} |
// met � jour les mots clés d'une image |
function updateElement($uid,$pairs) |
{ |
// Controle detournement utilisateur |
session_start(); |
$this->controleUtilisateur($uid[1]); |
$this->suffix = '_'.$uid[0]; |
$id_utilisateur = $uid[1] ; |
$id_mot_cle = $pairs['id'] ; |
$action = $pairs['action'] ; |
if($action == 'modification') |
{ |
$nouveau_nom = $pairs['motcle'] ; |
$nouvel_id_general = md5($nouveau_nom) ; |
$DB=$this->connectDB($this->config,'cel_db'); |
$query = 'UPDATE cel_mots_cles'.$this->suffix.' SET cmc_mot_cle = "'.$DB->escapeSimple($nouveau_nom).'" , cmc_id_mot_cle_general = "'.$DB->escapeSimple($nouvel_id_general).'" WHERE cmc_id_mot_cle_utilisateur = "'.$DB->escapeSimple($id_mot_cle).'" AND cmc_id_proprietaire = "'.$DB->escapeSimple($id_utilisateur).'"' ; |
$res =& $DB->query($query); |
if (PEAR::isError($res)) |
{ |
die($res->getMessage()); |
$transaction_reussie_1 = false ; |
} |
else |
{ |
$transaction_reussie_1 = true ; |
echo "OK" ; |
} |
} |
if($action == 'deplacement') |
{ |
$this->desactiverAutoCommitEtCommencerTransaction() ; |
$transaction_reussie_1 = true ; |
$id_pere = $pairs['parent'] ; |
$bornes = $this->calculerBornesEtNiveau($id_mot_cle,$id_utilisateur) ; |
$bg = $bornes['cmc_bg'] ; |
$bd = $bornes['cmc_bd'] ; |
$niveau = $bornes['cmc_niveau'] ; |
// on inverse l'intervalle de l'�l�ment d�plac� et du sous arbre |
if($this->exclureIntervalle($bg,$bd,$id_utilisateur)) |
{ |
$transaction_reussie_2 = true ; |
} |
else |
{ |
$transaction_reussie_2 = false ; |
} |
$bg_negative = $bg - $bd - 1 ; |
$bd_negative = $bd - $bd - 1 ; |
// on recalcule les intervalles de l'arbre priv� de ce sous arbre |
if($this->decalerBornesMoinsIntervalle($bg,$bd,$id_utilisateur)) |
{ |
$transaction_reussie_3 = true ; |
} |
else |
{ |
$transaction_reussie_3 = false ; |
} |
$bornes_pere = $this->calculerBornesEtNiveau($id_pere,$id_utilisateur) ; |
$bg_pere = $bornes_pere['cmc_bg'] ; |
$bd_pere = $bornes_pere['cmc_bd'] ; |
$niveau_pere = $bornes_pere['cmc_niveau'] ; |
$decalage = $bd - $bg + 1 ; |
// on decale les bornes droite du pere pour pr�parer l'insertion |
if($this->decalerBornesPlusIntervalle($bd_pere, $decalage, $id_utilisateur)) |
{ |
$transaction_reussie_4 = true ; |
} |
else |
{ |
$transaction_reussie_4 = false ; |
} |
$nouvelle_bd = $bd_pere + $decalage ; |
$modif_niveau = $niveau_pere - $niveau + 1 ; |
if($this->inclureIntervalle($bg_negative,$bd_negative,$nouvelle_bd,$modif_niveau,$id_utilisateur)) |
{ |
$transaction_reussie_5 = true ; |
} |
else |
{ |
$transaction_reussie_5 = false ; |
} |
if($this->changerPere($id_mot_cle,$id_pere,$id_utilisateur)) |
{ |
$transaction_reussie_6 = true ; |
} |
else |
{ |
$transaction_reussie_6 = false ; |
} |
if($transaction_reussie_1 && $transaction_reussie_2 && $transaction_reussie_3 && $transaction_reussie_4 && $transaction_reussie_5 && $transaction_reussie_6) |
{ |
$this->reactiverAutoCommitEtCompleterTransaction() ; |
} |
else |
{ |
$this->reactiverAutoCommitEtAnnulerTransaction() ; |
} |
} |
} |
function createElement($pairs) |
{ |
// Controle detournement utilisateur |
session_start(); |
$this->controleUtilisateur($pairs['identifiant']); |
$this->suffix = '_'.$pairs['mode']; |
$id_utilisateur = $pairs['identifiant'] ; |
$mot_cle = $pairs['motcle'] ; |
// TODO supprimer accents et majuscules |
$id_mot_cle_general = md5(mb_strtolower($mot_cle)) ; |
$id_mot_cle = $pairs['id'] ; |
$id_parent = $pairs['parent'] ; |
$this->verifierPresenceRacine($id_utilisateur) ; |
$transaction_reussie = false ; |
$this->desactiverAutoCommitEtCommencerTransaction() ; |
$bornes = $this->calculerBornesEtNiveau($id_parent,$id_utilisateur) ; |
$bg = $bornes['cmc_bd'] ; |
$bd = $bg + 1 ; |
$borne_pere = $bornes['cmc_bd'] ; |
$niveau = $bornes['cmc_niveau'] + 1; |
if($this->decalerBornesPlusDeux($borne_pere,$id_utilisateur)) |
{ |
$transaction_reussie_1 = true ; |
} |
else |
{ |
$transaction_reussie_1 = false ; |
} |
$DB=$this->connectDB($this->config,'cel_db'); |
$query = 'INSERT INTO cel_mots_cles'.$this->suffix.' VALUES (' ; |
$query .= '"'.$DB->escapeSimple($mot_cle).'",' ; |
$query .= '"'.$DB->escapeSimple($bg).'",' ; |
$query .= '"'.$DB->escapeSimple($bd).'",' ; |
$query .= '"'.$DB->escapeSimple($id_mot_cle_general).'",' ; |
$query .= '"'.$DB->escapeSimple($id_mot_cle).'",' ; |
$query .= '"'.$DB->escapeSimple($id_utilisateur).'",' ; |
$query .= '"'.$DB->escapeSimple($id_parent).'",' ; |
$query .= '"'.$DB->escapeSimple($niveau).'"' ; |
$query .= ')' ; |
$res =& $DB->query($query); |
if (PEAR::isError($res)) |
{ |
die($res->getMessage()); |
$transaction_reussie_2 = false ; |
} |
else |
{ |
$transaction_reussie_2 = true ; |
} |
if($transaction_reussie_1 && $transaction_reussie_2) |
{ |
$this->reactiverAutoCommitEtCompleterTransaction() ; |
echo "OK" ; |
} |
else |
{ |
$this->reactiverAutoCommitEtAnnulerTransaction() ; |
} |
} |
function deleteElement($uid){ |
session_start(); |
$this->controleUtilisateur($uid[1]); |
$this->suffix = '_'.$uid[0]; |
$DB=$this->connectDB($this->config,'cel_db'); |
$this->desactiverAutoCommitEtCommencerTransaction() ; |
$id_mot_cle= $uid[2] ; |
$id_utilisateur = $uid[1] ; |
$bornes = $this->calculerBornesEtNiveau($id_mot_cle,$id_utilisateur) ; |
$bg = $bornes['cmc_bg'] ; |
$bd = $bornes['cmc_bd'] ; |
$query = 'DELETE FROM cel_mots_cles'.$this->suffix.' WHERE cmc_bg >= "'.$DB->escapeSimple($bg).'" AND cmc_bd <= "'.$DB->escapeSimple($bd).'" AND cmc_id_proprietaire = "'.$DB->escapeSimple($id_utilisateur).'"' ; |
$res =& $DB->query($query); |
if (PEAR::isError($res)) |
{ |
die($res->getMessage()); |
$transaction_reussie_1 = false ; |
} |
else |
{ |
if($DB->affectedRows() <= 0) |
{ |
$transaction_reussie_1 = false ; |
} |
else |
{ |
$transaction_reussie_1 = true ; |
} |
} |
if($this->decalerBornesMoinsIntervalle($bg,$bd, $id_utilisateur)) |
{ |
$transaction_reussie_2 = true ; |
} |
else |
{ |
$transaction_reussie_2 = false ; |
} |
if($transaction_reussie_1 && $transaction_reussie_2) |
{ |
$this->reactiverAutoCommitEtCompleterTransaction() ; |
} |
else |
{ |
$this->reactiverAutoCommitEtAnnulerTransaction() ; |
} |
} |
} |
?> |
/trunk/jrest/services/Resume.php |
---|
New file |
0,0 → 1,140 |
<?php |
/** |
* PHP Version 5 |
* |
* @category PHP |
* @package papyrus_bp |
* @author aurelien <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/papyrus_bp/ |
*/ |
Class Resume extends DBAccessor { |
function Resume($config) { |
$this->config=$config; |
} |
function getElement($uid){ |
$DB=$this->connectDB($this->config,'cel_db'); |
$query = 'SELECT * FROM cel_inventory'. |
' WHERE identifiant = "'.$uid[1].'"'. |
/*' AND ordre IN (SELECT coi_ce_observation |
FROM cel_obs_images |
WHERE coi_ce_utilisateur ="'.$uid[1].'" )'.*/ |
' AND transmission = 1'. |
' ORDER BY date_modification DESC LIMIT 0,5'; |
$res =& $DB->query($query); |
if (DB::isError($res)) { |
die($res->getMessage()); |
} |
$resume = array(); |
$resume['titre'] = 'Vos dernières observations publiées'; |
$resume['lien_appli'] = '<a href="www.tela-botanica.org/appli:cel2"> Accéder au carnet en ligne </a>'; |
if(!$res || $res->numRows() == 0) { |
$resume['message'] = 'Aucune observation saisie pour le moment'; |
} |
while ($obs =& $res->fetchrow(DB_FETCHMODE_ASSOC)) { |
$chemin_sur_serveur = $this->config['cel_db']['url_images']; |
$req_liaison = 'SELECT * FROM cel_images WHERE ci_id_image IN (SELECT coi_ce_image FROM cel_obs_images WHERE coi_ce_observation = "'.$obs['ordre'].'") AND ci_ce_utilisateur = "'.$obs['identifiant'].'"' ; |
$res_liaison =& $DB->query($req_liaison); |
if (DB::isError($res_liaison)) { |
die($res_liaison->getMessage()); |
} |
$date = 'Datée du '.$obs['date_modification'].'<br/>' ; |
$lieu = 'Lieu : '.trim($obs['location'],'000null').' ('.trim($obs['id_location'],'000null').') '.trim($obs['station'],'000null').' '.trim($obs['lieudit'],'000null').'<br/>' ; |
$image =''; |
$cible_lien = ''; |
$row = null; |
while ($img =& $res_liaison->fetchrow(DB_FETCHMODE_ASSOC)) { |
$row = $img; |
} |
if($row != null) { |
$row['ci_nom_original'] = htmlspecialchars($row['ci_nom_original']); |
$row['ci_id_image'] = htmlspecialchars($row['ci_id_image']); |
$id = $row['ci_id_image']; |
$tailleXY = $this->calculerDimensions(array($row['ci_meta_width'], $row['ci_meta_height'])); |
$id = sprintf('%09s', $id) ; |
$id = wordwrap($id, 3 , '_', true) ; |
$id_fichier = $id.".jpg" ; |
$niveauDossier = split("_", $id) ; |
$dossierNiveau1 = $niveauDossier[0] ; |
$dossierNiveau2 = $niveauDossier[1] ; |
$chemin_sur_serveur_final = $chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2 ; |
$chemin_fichier = $chemin_sur_serveur_final.'/L/'.$id."_L.jpg" ; |
$chemin_fichier_s = $chemin_sur_serveur_final.'/M/'.$id."_M.jpg" ; |
$image = '<img src="'.$chemin_fichier_s.'" alt="'.$row['ci_nom_original'].'" height="'.$tailleXY[1].'px" width="'.$tailleXY[0].'px"></img>'; |
$cible_lien = $chemin_fichier; |
} |
$resume_item = array('element' => $obs['nom_ret'].$date.$lieu, 'lien' => $cible_lien,'image' => $image); |
$resume['elements'][] = $resume_item; |
} |
header("Content-Type: text/html; charset=UTF-8"); |
print json_encode($resume); |
exit; |
} |
public function calculerDimensions($tailleXY) { |
$tailleOr = 75 ; |
if($tailleXY[1] == 0) { |
$tailleXY[1] = $tailleOr; |
} |
if($tailleXY[0] == 0) { |
$tailleXY[0] = $tailleOr; |
} |
$maxTaille = max($tailleXY[1],$tailleXY[0]) ; |
if($maxTaille == $tailleXY[1]) { |
$rapport = $tailleXY[1]/$tailleXY[0] ; |
$tailleXY[1] = 75 ; |
$tailleXY[0] = round($tailleXY[1]/$rapport,0) ; |
}else { |
$rapport = $tailleXY[0]/$tailleXY[1] ; |
$tailleXY[0] = 75 ; |
$tailleXY[1] = round($tailleXY[0]/$rapport,0) ; |
} |
return $tailleXY ; |
} |
} |
?> |
/trunk/jrest/services/InventoryImageExport.php |
---|
New file |
0,0 → 1,393 |
<?php |
Class InventoryImageExport extends DBAccessor { |
private $extendSpreadsheetProductor; |
private $archive; |
private $workbook; |
private $worksheet; |
private $chemin_export_liste; |
function InventoryImageExport($config) { |
parent::__construct($config); |
require_once('lib/zip.php'); |
$this->config=$config; |
$this->extendSpreadsheetProductor = new SpreadsheetProductor(); |
$this->extendSpreadsheetProductor->initSpreadsheet(); |
} |
function getElement($uid){ |
$this->authentifier(); |
$tableau = array(); |
$tag = $uid[0]; |
$limite = 0; |
$pas = 0; |
//ini_set('max_execution_time',120); |
/*if(isset($uid[1]) && isset($uid[2])) { |
$limite = $uid[] |
}*/ |
$taille_archive_courante = 0; |
$index_archive_courante = 0; |
$taille_max_archive = $this->config['cel_db']['taille_max_archive']; |
$liens_archives = array(); |
$DB=$this->connectDB($this->config,'cel_db'); |
$query_id_id_img = 'SELECT cmc_id_mot_cle_utilisateur, cmc_id_proprietaire FROM cel_mots_cles_images WHERE cmc_id_mot_cle_general = md5("'.$DB->escapeSimple($tag).'")' ; |
$res =& $DB->query($query_id_id_img); |
if (DB::isError($res)) { |
$this->logger("InventoryImageExport",'Erreur de requete '.$query_id_id_img); |
die($res->getMessage()); |
} |
$query='SELECT * FROM cel_images'; |
$premier_item = true ; |
while ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) { |
$tableau['mots cles'] = array('utilisateur' => $row['cmc_id_proprietaire'], 'mot cle' => $row['cmc_id_mot_cle_utilisateur']); |
if($premier_item) { |
$query .= ' WHERE '; |
$premier_item = false ; |
} |
else{ |
$query .= ' OR '; |
} |
$query .= '(ci_meta_mots_cles LIKE "%'.$row['cmc_id_mot_cle_utilisateur'].'%" AND ci_ce_utilisateur ="'.$row['cmc_id_proprietaire'].'")' ; |
} |
$query .= ' ORDER BY ci_meta_date_ajout' ; |
$res =& $DB->query($query); |
if (DB::isError($res)) { |
die($res->getMessage()); |
} |
$this->logger('Requetes',$query); |
// création d'un objet 'zipfile' |
$this->archive = new zipfile(); |
$i = 1; |
$this->initialiserWorkBook($index_archive_courante); |
while ($image =& $res->fetchrow(DB_FETCHMODE_ASSOC)) { |
$image['ci_nom_original'] = htmlspecialchars($image['ci_nom_original']); |
$image['ci_id_image'] = htmlspecialchars($image['ci_id_image']); |
$image['ci_meta_date_ajout'] = htmlspecialchars($image['ci_meta_date_ajout']); |
$image['ci_ce_utilisateur'] = htmlspecialchars($image['ci_ce_utilisateur']); |
$image['ci_meta_user_comment'] = htmlspecialchars($image['ci_meta_user_comment']); |
$image['ci_note_image'] = htmlspecialchars($image['ci_note_image']); |
$id = $image['ci_id_image']; |
$tableau[$id]['image'] = $image; |
if($filename = $this->renvoyerCheminSurServeur($id,false)) { |
// appel de la classe |
// nom du fichier à ajouter dans l'archive |
// contenu du fichier |
$fp = fopen ($filename, 'r'); |
$content = fread($fp, filesize($filename)); |
fclose ($fp); |
// ajout du fichier dans cet objet |
if(preg_match('/\.(?:jpg|jpeg)$/i',$image['ci_nom_original'])) { |
$nom_fichier_image = preg_replace('/\.(?:jpg|jpeg)$/i','_'.$id.'.jpg', $image['ci_nom_original']); |
} else { |
$nom_fichier_image = $image['ci_nom_original'].'_'.$id.'.jpg'; |
} |
$chemin_sur_serveur = $this->config['cel_db']['url_images']; |
$id = sprintf('%09s', $id) ; |
$id = wordwrap($id, 3 , '_', true) ; |
$niveauDossier = split("_", $id) ; |
$dossierNiveau1 = $niveauDossier[0] ; |
$dossierNiveau2 = $niveauDossier[1] ; |
$chemin_sur_serveur_final = $chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2 ; |
$chemin_fichier = $chemin_sur_serveur_final.'/L/'.$id."_L.jpg" ; |
$obs_liee['url_image_liee'] = $chemin_fichier; |
$taille_fichier = filesize($filename); |
$req_liaison = 'SELECT * FROM cel_inventory WHERE ordre IN (SELECT coi_ce_observation FROM cel_obs_images WHERE coi_ce_image = "'.$image['ci_id_image'].'") AND identifiant = "'.$image['ci_ce_utilisateur'].'"' ; |
$res_liaison =& $DB->query($req_liaison); |
if (DB::isError($res_liaison)) { |
die($res_liaison->getMessage()); |
} |
if (DB::isError($res_liaison)) { |
die($res_liaison->getMessage()); |
} |
while($obs_liee = & $res_liaison->fetchrow(DB_FETCHMODE_ASSOC)) { |
$tableau[$id]['obs'] = $obs_liee; |
$obs_liee['nom_image_liee'] = $nom_fichier_image; |
$obs_liee['url_image_liee'] = $chemin_fichier; |
$this->ecrireLigneWorkBook($i,$obs_liee); |
$i++; |
} |
//$this->archive->addfile($content, $nom_fichier_image); |
//$taille_archive_courante += $taille_fichier; |
if($taille_archive_courante <= $taille_max_archive) { |
} else { |
// fermeture du workbook |
$this->workbook->close(); |
$i = 1; |
// ajout du fichier liste dans cet objet |
// contenu du fichier |
$fp = fopen($this->chemin_export_liste, 'r'); |
$contenu = fread($fp, filesize($this->chemin_export_liste)); |
fclose ($fp); |
$this->archive->addfile($contenu,'liste.'.md5($tag).'_'.$index_archive_courante.'.xls'); |
$liens_archives[] = $this->enregistrerArchive($this->archive,$index_archive_courante,$tag); |
$index_archive_courante++; |
$taille_archive_courante = 0; |
$this->archive = new zipfile(); |
$this->initialiserWorkBook($index_archive_courante); |
} |
} |
//$this->verifierOuRelancerExecution(); |
//$this->logger('InventoryImageExport'," Temps d'éxécution à l'image ".$id." : ".$this->getTempsEcoule()); |
} |
// fermeture du workbook |
$this->workbook->close(); |
$i = 1; |
// ajout du fichier liste dans cet objet |
// contenu du fichier |
$fp = fopen($this->chemin_export_liste, 'r'); |
$contenu = fread($fp, filesize($this->chemin_export_liste)); |
fclose ($fp); |
$this->archive->addfile($contenu,'liste.'.md5($tag).'_'.$index_archive_courante.'.xls'); |
$liens_archives[] = $this->enregistrerArchive($this->archive,$index_archive_courante,$tag); |
$index_archive_courante++; |
$j = 1; |
$sortie = '<div><ul>'; |
foreach($liens_archives as $lien) { |
$sortie .= '<li> <a href = "'.$lien.'"> Partie '.$j.'</a></li>'; |
$j++; |
} |
$sortie .= '</div></ul>'; |
//$this->logger('InventoryImageExport',count($tableau)); |
//$this->logger('InventoryImageExport',print_r($tableau,true)); |
header('Content-Type: text/html'); |
echo $sortie; |
} |
function getRessource(){ |
//$this->getElement(); |
} |
public function authentifier() { |
if (!isset($_SERVER['PHP_AUTH_USER'])) { |
header('WWW-Authenticate: Basic realm="www.tela-botanica.org"'); |
header('HTTP/1.0 401 Unauthorized'); |
header('Content-type: text/html; charset=UTF-8'); |
echo 'Accès interdit'; |
exit; |
} else { |
if($this->verifierAcces($_SERVER['PHP_AUTH_USER'])) { |
return ; |
} |
else |
{ |
header('WWW-Authenticate: Basic realm="www.tela-botanica.org"'); |
header('HTTP/1.0 401 Unauthorized'); |
header('Content-type: text/html; charset=UTF-8'); |
echo 'Accès interdit'; |
exit ; |
} |
} |
} |
public function verifierAcces($id) { |
$DB=$this->connectDB($this->config,'database_ident'); |
$query="SELECT ".$this->config['database_ident']['ann_id']." as name FROM ".$this->config['database_ident']['annuaire']." WHERE ".$this->config['database_ident']['ann_id']." ='".$DB->escapeSimple($id) |
."' AND ".$this->config['database_ident']['ann_pwd']." = ".$this->config['database_ident']['pass_crypt_funct']."('".$DB->escapeSimple($_SERVER['PHP_AUTH_PW'])."')" ; |
$res =& $DB->getOne($query); |
if($res == "") { |
return false ; |
} |
if (DB::isError($res)) { |
die($res->getMessage()); |
} |
return $this->isAdmin($id) ; |
} |
private function renvoyerCheminSurServeur($id,$url = true) { |
if($url) { |
$chemin_sur_serveur = $this->config['cel_db']['url_images']; |
} else { |
$chemin_sur_serveur = $this->config['cel_db']['chemin_images']; |
} |
$id = sprintf('%09s', $id) ; |
$id = wordwrap($id, 3 , '_', true) ; |
$id_fichier = $id.".jpg" ; |
$niveauDossier = split("_", $id) ; |
$dossierNiveau1 = $niveauDossier[0] ; |
$dossierNiveau2 = $niveauDossier[1] ; |
$chemin_sur_serveur_final = $chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2 ; |
$chemin_fichier = $chemin_sur_serveur_final.'/L/'.$id."_L.jpg" ; |
return $chemin_fichier; |
} |
private function renvoyerCheminExport($url = true) { |
if($url) { |
return $this->config['cel_db']['url_export']; |
} else { |
return $this->config['cel_db']['chemin_export']; |
} |
} |
private function enregistrerArchive($zip,$index,$tag) { |
// production de l'archive' Zip |
$this->archive = $zip->file(); |
$chemin_export = $this->renvoyerCheminExport(false); |
$url_export = $this->renvoyerCheminExport(true); |
$chemin_archive = $chemin_export.'/'.md5($tag).'_'.$index.'.zip'; |
$url_archive = $url_export.'/'.md5($tag).'_'.$index.'.zip'; |
$fp = fopen($chemin_archive,'w+'); |
$ecriture = fwrite($fp,$this->archive); |
fclose($fp); |
if($ecriture) { |
return $url_archive; |
} else { |
return false; |
} |
} |
private function initialiserWorkBook($index) { |
// Creating a workbook |
$this->chemin_export_liste = $this->renvoyerCheminExport(false).'/liste'.$index.'.xls'; |
$this->workbook = new Spreadsheet_Excel_Writer($this->chemin_export_liste); |
// Creating a worksheet |
$this->worksheet = $this->workbook->addWorksheet('Liste'); |
$this->worksheet->write(0,0,'url de l\'image'); |
$this->worksheet->write(0,1,'Nom original de l\'image'); |
//$this->worksheet->write(0,1,'Nom saisi'); |
//$this->worksheet->write(0,2,'Numero nomenclatural'); |
$this->worksheet->write(0,2,'Nom retenu'); |
$this->worksheet->write(0,3,'Numero nomenclatural nom retenu'); |
$this->worksheet->write(0,4,'Numero taxonomique'); |
$this->worksheet->write(0,5,'Famille'); |
//$this->worksheet->write(0,7,'Commune'); |
//$this->worksheet->write(0,8,'Identifiant Commune'); |
$this->worksheet->write(0,6,'Date Observation'); |
// $this->worksheet->write(0,10,'Lieu dit'); |
//$this->worksheet->write(0,11,'Station'); |
//$this->worksheet->write(0,12,'Milieu'); |
$this->worksheet->write(0,7,'Contributeur'); |
$this->worksheet->write(0,8,'Commentaire'); |
} |
private function ecrireLigneWorkBook($index, $observation) { |
$this->worksheet->write($index,0,$observation['url_image_liee']); |
$this->worksheet->write($index,1,$observation['nom_image_liee']); |
//$this->worksheet->write($index,1,$observation['nom_sel']); |
//$this->worksheet->write($index,2,$observation['num_nom_sel']); |
$this->worksheet->write($index,2,$observation['nom_ret']); |
$this->worksheet->write($index,3,$observation['num_nom_ret']); |
$this->worksheet->write($index,4,$observation['num_taxon']); |
$this->worksheet->write($index,5,$observation['famille']); |
//$this->worksheet->write($index,7,$observation['location']); |
//$this->worksheet->write($index,8,$observation['id_location']); |
$this->worksheet->write($index,6,$observation['date_observation']); |
//$this->worksheet->write($index,10,$observation['lieudit']); |
//$this->worksheet->write($index,11,$observation['station']); |
//$this->worksheet->write($index,12,$observation['milieu']); |
$this->worksheet->write($index,7,$observation['identifiant']); |
$this->worksheet->write($index,8,$observation['commentaire']); |
} |
} |
/* +--Fin du code ---------------------------------------------------------------------------------------+ |
* $Log$ |
* Revision 1.5 2008-11-13 11:29:12 ddelon |
* Reecriture gwt-ext |
* |
* Revision 1.4 2007-06-06 13:31:16 ddelon |
* v0.09 |
* |
* Revision 1.3 2007-05-22 12:54:09 ddelon |
* Securisation acces utilisateur |
* |
* |
* |
*/ |
?> |
/trunk/jrest/services/CelStatistique.php |
---|
New file |
0,0 → 1,909 |
<?php |
/** |
* Service fournissant des urls vers des images de graphiques sur les statistiques de l'application CEL. |
* Encodage en entrée : utf8 |
* Encodage en sortie : utf8 |
* |
* Cas d'utilisation : |
* /CelStatistique/TypeDeGraph : retourne le graphique demandé |
* /CelStatistique/TypeDeGraph/1 : retourne le graphique demandé sur le serveur 1 (voir http://code.google.com/intl/fr/apis/chart/docs/making_charts.html#enhancements) |
* |
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org> |
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt> |
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt> |
* @version $Id$ |
* @copyright 2009 |
*/ |
class CelStatistique extends Cel { |
/** |
* Méthode appelée avec une requête de type GET. |
*/ |
public function getElement($param) { |
$graph = null; |
$serveur = ''; |
if (isset($param[0])) { |
$graph_demande = array_shift($param); |
$methode = 'get'.$graph_demande; |
if (method_exists($this, $methode)) { |
$serveur = isset($param[1]) ? array_shift($param).'.' : ''; |
$graph = $this->$methode($param); |
} else { |
$this->messages[] = "Ce type de graphique '$graph_demande' n'est pas disponible."; |
} |
} else { |
$this->messages[] = "Le premier paramêtre du service CEL Statistique doit correspondre au type de graphique."; |
} |
if (!is_null($graph)) { |
$url = "http://{$serveur}chart.apis.google.com/chart"; |
$contexte = stream_context_create( |
array('http' => array( |
'method' => 'POST', |
'content' => http_build_query($graph)))); |
$image = file_get_contents($url, false, $contexte); |
$this->envoyer($image, 'image/png', null, false); |
} else { |
$info = 'Un problème est survenu : '.print_r($this->messages, true); |
$this->envoyer($info); |
} |
} |
private function getEvolImgLieesParMois($param) { |
// Récupération des données |
$requete = "SELECT DATE_FORMAT(ci_meta_date_ajout, '%Y%m') AS periode, COUNT(ci_id_image) AS nbre ". |
"FROM cel_obs_images LEFT JOIN cel_images ON (coi_ce_image = ci_id_image) ". |
"WHERE ci_meta_date_ajout != '0000-00-00 00:00:00' ". |
'GROUP BY periode '. |
'ORDER BY periode '; |
$resulats = $this->executerRequete($requete); |
$img_totale = array(); |
foreach ($resulats as $info) { |
$img_totale[$info['periode']] = $info['nbre']; |
} |
// Trie des dates pour les étiquettes des axes |
$dates = array(); |
$annees = array(); |
$les_mois = array(); |
$pas = 1; // intervalle de mois entre deux étiquettes |
$periode = 0; |
$cumul = 0; |
$img_totale_cumul = array(); |
foreach ($img_totale as $annee_mois => $nbre) { |
$annee = substr($annee_mois, 0, 4); |
$mois = substr($annee_mois, 4, 2); |
$mois_fmt_B = strftime('%b', strtotime("0000-$mois-01")); |
$cumul += $nbre; |
$img_totale_cumul[$annee_mois] = $cumul; |
if (!isset($dates[$annee][$mois])) { |
$annees[] = (!isset($dates[$annee]) ? $annee : ''); |
$les_mois[] = is_int($periode++ / $pas) ? $mois_fmt_B : ''; |
// Ajouter au tableau dates tjrs à la fin |
$dates[$annee][$mois] = 1; |
} |
} |
// Post traitement des données |
$titre = "Évolution des images liées aux observations par mois"; |
$valeurs_y = implode(',', $img_totale); |
$valeurs_r = implode(',', $img_totale_cumul); |
$valeurs_max_y = max($img_totale); |
$valeurs_max_r = max($img_totale_cumul); |
$y_val_fin = $valeurs_max_y; |
$y_pas = 200; |
$r_val_fin = $valeurs_max_r; |
$r_pas = 1000; |
$etiquettes_x1 = implode('|', $les_mois); |
$etiquettes_x2 = implode('|', $annees); |
$etiquettes_y = 'Images'; |
// Construire de l'url de l'image |
$graph = array('cht' => 'lc', |
'chtt' => $titre, |
'chs' => '600x200', |
'chco' => '007F00,99CC00', |
'chd' => 't:'.$valeurs_y.'|'.$valeurs_r, |
'chds' => "0,$valeurs_max_y,0,$valeurs_max_r", |
'chxt' => 'y,y,x,x,r', |
'chxl' => '1:|'.$etiquettes_y.'|3:|'.$etiquettes_x2.'|2:|'.$etiquettes_x1.'', |
'chxp' => '1,50|3,0', |
'chxr' => "0,0,$y_val_fin,$y_pas|4,0,$r_val_fin,$r_pas", |
'chm' => 'N ** ,000000,0,-1,8,1.0,ht', |
'chxs' => '0,007F00|4,99CC00'); |
return $graph; |
} |
private function getEvolImgParMois($param) { |
// Récupération des données |
$requete = "SELECT DATE_FORMAT(ci_meta_date_ajout, '%Y%m') AS periode, COUNT(ci_id_image) AS nbre ". |
"FROM cel_images ". |
"WHERE ci_meta_date_ajout != '0000-00-00 00:00:00' ". |
'GROUP BY periode '. |
'ORDER BY periode '; |
$resulats = $this->executerRequete($requete); |
$img_totale = array(); |
foreach ($resulats as $info) { |
$img_totale[$info['periode']] = $info['nbre']; |
} |
// Trie des dates pour les étiquettes des axes |
$dates = array(); |
$annees = array(); |
$les_mois = array(); |
$pas = 1; // intervalle de mois entre deux étiquettes |
$periode = 0; |
$cumul = 0; |
$img_totale_cumul = array(); |
foreach ($img_totale as $annee_mois => $nbre) { |
$annee = substr($annee_mois, 0, 4); |
$mois = substr($annee_mois, 4, 2); |
$mois_fmt_B = strftime('%b', strtotime("0000-$mois-01")); |
$cumul += $nbre; |
$img_totale_cumul[$annee_mois] = $cumul; |
if (!isset($dates[$annee][$mois])) { |
$annees[] = (!isset($dates[$annee]) ? $annee : ''); |
$les_mois[] = is_int($periode++ / $pas) ? $mois_fmt_B : ''; |
// Ajouter au tableau dates tjrs à la fin |
$dates[$annee][$mois] = 1; |
} |
} |
// Post traitement des données |
$titre = "Évolution du dépôt d'images par mois"; |
$valeurs_y = implode(',', $img_totale); |
$valeurs_r = implode(',', $img_totale_cumul); |
$valeurs_max_y = max($img_totale); |
$valeurs_max_r = max($img_totale_cumul); |
$y_val_fin = $valeurs_max_y; |
$y_pas = 500; |
$r_val_fin = $valeurs_max_r; |
$r_pas = 1000; |
$etiquettes_x1 = implode('|', $les_mois); |
$etiquettes_x2 = implode('|', $annees); |
$etiquettes_y = 'Images'; |
// Construire de l'url de l'image |
$graph = array('cht' => 'lc', |
'chtt' => $titre, |
'chs' => '600x200', |
'chco' => '007F00,99CC00', |
'chd' => 't:'.$valeurs_y.'|'.$valeurs_r, |
'chds' => "0,$valeurs_max_y,0,$valeurs_max_r", |
'chxt' => 'y,y,x,x,r', |
'chxl' => '1:|'.$etiquettes_y.'|3:|'.$etiquettes_x2.'|2:|'.$etiquettes_x1.'', |
'chxp' => '1,50|3,0', |
'chxr' => "0,0,$y_val_fin,$y_pas|4,0,$r_val_fin,$r_pas", |
'chm' => 'h,C3C3C3,0,0.5,1,-1|N ** ,000000,0,-1,8,1.0,ht', |
'chxs' => '0,007F00|4,99CC00'); |
return $graph; |
} |
private function getEvolUtilisateurParMois($param) { |
// Récupération des données |
$requete = 'SELECT DISTINCT identifiant , '. |
' MIN(date_creation) AS date_min, MAX(date_creation) AS date_max, '. |
' COUNT(id) AS obs_nbre '. |
'FROM cel_inventory '. |
"WHERE date_creation != '0000-00-00 00:00:00' ". |
" AND identifiant LIKE '%@%' ". |
'GROUP BY identifiant '. |
'ORDER BY date_min ASC '; |
$resultats = $this->executerRequete($requete); |
// Trie des données et des dates pour les étiquettes des axes |
$dates = array(); |
$annees = array(); |
$utilisateurs = array(); |
$les_mois = array(); |
$pas = 2; // intervalle de mois entre deux étiquettes |
$periode = 0; |
foreach ($resultats as $enrg) { |
$annee = substr($enrg['date_min'], 0, 4); |
$mois = substr($enrg['date_min'], 5, 2); |
$mois_fmt_B = strftime('%b', strtotime("0000-$mois-01")); |
if (!isset($dates[$annee][$mois])) { |
$annees[] = (!isset($dates[$annee]) ? $annee : ''); |
$les_mois[] = is_int($periode++ / $pas) ? $mois_fmt_B : ''; |
$utilisateurs["$annee-$mois"] = 1; |
// Ajouter au tableau dates tjrs à la fin |
$dates[$annee][$mois] = 1; |
} else { |
$utilisateurs["$annee-$mois"]++; |
} |
} |
// Post traitement des données |
$titre = 'Évolution des utilisateurs par mois'; |
$valeurs = implode(',', $utilisateurs); |
$valeurs_max = max($utilisateurs); |
$y_val_fin = $valeurs_max; |
$y_pas = 2; |
$etiquettes_x1 = implode('|', $les_mois); |
$etiquettes_x2 = implode('|', $annees); |
$etiquettes_y = 'utilisateurs'; |
// Construire de l'url de l'image |
$graph = array('cht' => 'lc', |
'chtt' => $titre, |
'chs' => '600x200', |
'chco' => '0000FF',//4D89F9 |
'chd' => 't:'.$valeurs, |
'chds' => '0,'.$valeurs_max, |
'chxt' => 'y,y,x,x', |
'chxl' => '1:|'.$etiquettes_y.'|3:|'.$etiquettes_x2.'|2:|'.$etiquettes_x1.'', |
'chxp' => '1,50|3,0', |
'chxr' => "0,0,$y_val_fin,$y_pas", |
'chm' => 'h,C3C3C3,0,0.5,1,-1|N ** ,000000,0,2::2,8,1.0,ht'); |
return $graph; |
} |
private function getEvolObsParMoisGlissant($param) { |
// Récupération des données |
$format_date = '%Y%m%d'; |
$where = 'date_creation > DATE_SUB(NOW(), INTERVAL 31 DAY)'; |
$obs_totale = $this->executerRequeteEvol('cel_inventory', 'id', $format_date, $where); |
// Trie des dates pour les étiquettes des axes |
$dates = array(); |
$annees = array(); |
$annees_mois = array(); |
$jours = array(); |
foreach ($obs_totale as $annee_mois_jours => $nbre) { |
$annee = substr($annee_mois_jours, 0, 4); |
$mois = substr($annee_mois_jours, 4, 2); |
$annee_mois_fmt_B = strftime('%B %Y', strtotime($annee.'-'.($mois+1).'-00')); |
$jour = substr($annee_mois_jours, 6, 2); |
if (!isset($dates[$annee][$mois][$jour])) { |
$annees_mois[] = (!isset($dates[$annee][$mois]) ? $annee_mois_fmt_B : ''); |
$jours[] = $jour; |
// Ajouter au tableau dates tjrs à la fin |
$dates[$annee][$mois][$jour] = 1; |
} |
} |
// Post traitement des données |
$titre = 'Évolution des observations sur un mois glissant'; |
$valeurs = implode(',', $obs_totale); |
$valeurs_max = max($obs_totale); |
$y_val_fin = $valeurs_max; |
$y_pas = 25; |
$etiquettes_x1 = implode('|', $jours); |
$etiquettes_x2 = implode('|', $annees_mois); |
$etiquettes_y1 = 'observations'; |
// Construire de l'url de l'image |
$graph = array('cht' => 'lc', |
'chtt' => $titre, |
'chs' => '600x200', |
'chco' => '822013', |
'chd' => 't:'.$valeurs, |
'chds' => '0,'.$valeurs_max, |
'chxt' => 'y,y,x,x', |
'chxl' => '1:|'.$etiquettes_y1.'|3:|'.$etiquettes_x2.'|2:|'.$etiquettes_x1, |
'chxp' => '0,0|1,50', |
'chxr' => "0,0,$y_val_fin,$y_pas", |
'chm' => 'h,C3C3C3,0,0.5,1,-1|N,000000,0,1::1,8,1.0,ht'); |
return $graph; |
} |
private function getEvolObsParMois($param) { |
// Récupération des données |
$obs_totale = $this->executerRequeteEvol('cel_inventory', 'id'); |
// Trie des dates pour les étiquettes des axes |
$dates = array(); |
$annees = array(); |
$les_mois = array(); |
$pas = 2; // intervalle de mois entre deux étiquettes |
$periode = 0; |
$cumul = 0; |
$obs_totale_cumul = array(); |
foreach ($obs_totale as $annee_mois => $nbre) { |
$annee = substr($annee_mois, 0, 4); |
$mois = substr($annee_mois, 4, 2); |
$mois_fmt_B = strftime('%b', strtotime("0000-$mois-01")); |
$cumul += $nbre; |
$obs_totale_cumul[$annee_mois] = $cumul; |
if (!isset($dates[$annee][$mois])) { |
$annees[] = (!isset($dates[$annee]) ? $annee : ''); |
$les_mois[] = is_int($periode++ / $pas) ? $mois_fmt_B : ''; |
// Ajouter au tableau dates tjrs à la fin |
$dates[$annee][$mois] = 1; |
} |
} |
// Post traitement des données |
$titre = 'Évolution des observations par mois'; |
$valeurs_y = implode(',', $obs_totale); |
$valeurs_r = implode(',', $obs_totale_cumul); |
$valeurs_max_y = max($obs_totale); |
$valeurs_max_r = max($obs_totale_cumul); |
$y_val_fin = $valeurs_max_y; |
$y_pas = 500; |
$r_val_fin = $valeurs_max_r; |
$r_pas = 2500; |
$etiquettes_x1 = implode('|', $les_mois); |
$etiquettes_x2 = implode('|', $annees); |
$etiquettes_y = 'Observations'; |
// Construire de l'url de l'image |
$graph = array('cht' => 'lc', |
'chtt' => $titre, |
'chs' => '600x200', |
'chco' => '822013,F1841D', |
'chd' => 't:'.$valeurs_y.'|'.$valeurs_r, |
'chds' => "0,$valeurs_max_y,0,$valeurs_max_r", |
'chxt' => 'y,y,x,x,r', |
'chxl' => '1:|'.$etiquettes_y.'|3:|'.$etiquettes_x2.'|2:|'.$etiquettes_x1.'', |
'chxp' => '1,50|3,0', |
'chxr' => "0,0,$y_val_fin,$y_pas|4,0,$r_val_fin,$r_pas", |
'chm' => 'N ** ,000000,0,2::2,8,1.0,ht', |
'chxs' => '0,822013|4,F1841D'); |
return $graph; |
} |
private function getEvolObsParAn($param) { |
// Récupération des données |
$obs_totale = $this->executerRequeteEvol('cel_inventory', 'id', '%Y'); |
// Trie des dates pour les étiquettes des axes |
$dates = array(); |
$annees = array(); |
foreach ($obs_totale as $annee => $nbre) { |
if (!isset($dates[$annee])) { |
$annees[] = $annee; |
$dates[$annee] = 1; |
} |
} |
// Post traitement des données |
$titre = 'Évolution des observations par année'; |
$valeurs = implode(',', $obs_totale); |
$valeurs_max = max($obs_totale); |
$valeurs_min = min($obs_totale); |
$y_val_deb = preg_replace('/[0-9]{2}$/', '00', $valeurs_min); |
$y_val_fin = $valeurs_max; |
$y_pas = 1000; |
$etiquettes_x = implode('|', $annees);; |
$etiquettes_y = 'observations'; |
// Construire de l'url de l'image |
$graph = array('cht' => 'lc', |
'chtt' => $titre, |
'chs' => '600x200', |
'chco' => '822013', |
'chd' => 't:'.$valeurs, |
'chds' => "$valeurs_min,$valeurs_max", |
'chxt' => 'y,y,x', |
'chxl' => '1:|'.$etiquettes_y.'|2:|'.$etiquettes_x.'', |
'chxp' => '0,0|1,50|2,0', |
'chxr' => "0,$y_val_deb,$y_val_fin,$y_pas", |
'chm' => 'h,C3C3C3,0,0.5,1,-1|N,000000,0,1::1,8,1.0,ht'); |
return $graph; |
} |
private function getEvolObsHisto($param) { |
// Récupération des données |
$obs_totale = $this->executerRequeteEvol('cel_inventory', 'id'); |
$obs_identifiee = $this->executerRequeteEvol('cel_inventory', 'id', "identifiant LIKE '%@%' "); |
$lignes = array('total', 'obs. identifiée'); |
// Post traitement des données |
$titre = 'Évolution des observations'; |
$valeurs = implode(',', $obs_totale).'|'.implode(',', $obs_identifiee); |
$valeurs_max = max($obs_totale); |
$etiquettes = implode('|', array_keys($lignes)); |
// Construire de l'url de l'image |
$graph = array('cht' => 'lc', |
'chtt' => $titre, |
'chs' => '500x300', |
'chco' => 'FF0000,00FF00', |
'chd' => 't:'.$valeurs, |
'chds' => "0,$valeurs_max", |
'chxt' => 'y', |
'chxl' => '0:|'.$etiquettes.'', |
'chm' => 'N,000000,0,-1,10'); |
return $graph; |
} |
private function getNbreObsIdVsTest($param) { |
// Récupération des données |
$obs_totale = $this->executerRequeteNombre('cel_inventory', 'id'); |
$obs_identifiee = $this->executerRequeteNombre('cel_inventory', 'id', "identifiant LIKE '%@%' "); |
$obs_test = $obs_totale - $obs_identifiee; |
$pourcent_identifiee = round(($obs_identifiee / ($obs_totale / 100)), 2).'%'; |
$pourcent_anonyme = round(($obs_test / ($obs_totale / 100)), 2).'%'; |
// Post traitement des données de la base de données |
$titre = "Nombre d'observations|tests vs. identifiées"; |
$etiquette_obs_test = "tests ($obs_test - $pourcent_anonyme)"; |
$etiquette_obs_id = "identifiées ($obs_identifiee - $pourcent_identifiee)"; |
$donnees = array($etiquette_obs_test => $obs_test, $etiquette_obs_id => $obs_identifiee); |
$valeurs = implode(',', $donnees); |
$etiquettes = implode('|', array_keys($donnees)); |
// Construire les paramêtres de l'url de l'image |
$graph = array('cht' => 'p3', |
'chtt' => $titre, |
'chs' => '250x200', |
'chco' => 'FF0000,00FF00', |
'chd' => 't:'.$valeurs, |
'chds' => "0,$obs_totale", |
'chdl' => $etiquettes, |
'chdlp' => 'bv|r', |
'chts' => '000000,12'); |
return $graph; |
} |
private function getNbreObsPublicVsPrivee($param) { |
// Récupération des données |
$obs_totale = $this->executerRequeteNombre('cel_inventory', 'id'); |
$obs_public = $this->executerRequeteNombre('cel_inventory', 'id', 'transmission = 1'); |
$obs_privee = $obs_totale - $obs_public; |
$pourcent_privee = round(($obs_privee / ($obs_totale / 100)), 2).'%'; |
$pourcent_public = round(($obs_public / ($obs_totale / 100)), 2).'%'; |
// Post traitement des données de la base de données |
$titre = "Nombre d'observations|publiques vs. privées"; |
$etiquette_obs_public = "publiques ($obs_public - $pourcent_public)"; |
$etiquette_obs_privee = "privées ($obs_privee - $pourcent_privee)"; |
$donnees = array($etiquette_obs_privee => $obs_privee, $etiquette_obs_public => $obs_public); |
$valeurs = implode(',', $donnees); |
$etiquettes = implode('|', array_keys($donnees)); |
// Construire les paramêtres du graph |
$graph = array('cht' => 'p3', |
'chtt' => $titre, |
'chs' => '250x200', |
'chco' => 'FF0000,00FF00', |
'chd' => 't:'.$valeurs, |
'chds' => "0,$obs_totale", |
'chdl' => $etiquettes, |
'chdlp' => 'bv|r', |
'chts' => '000000,12'); |
return $graph; |
} |
private function getNbreObsDetermineeVsInconnue($param) { |
// Récupération des données |
$obs_totale = $this->executerRequeteNombre('cel_inventory', 'id'); |
$obs_determinee = $this->executerRequeteNombre('cel_inventory', 'id', 'num_nom_sel != 0'); |
$obs_inconnue = $obs_totale - $obs_determinee; |
$pourcent_determinee = round(($obs_determinee / ($obs_totale / 100)), 2).'%'; |
$pourcent_inconnue = round(($obs_inconnue / ($obs_totale / 100)), 2).'%'; |
// Post traitement des données de la base de données |
$titre = "Nombre d'observations|determinées vs. inconnues"; |
$etiquette_obs_determinee = "determinées ($obs_determinee - $pourcent_determinee)"; |
$etiquette_obs_inconnue = "non déterminées ($obs_inconnue - $pourcent_inconnue)"; |
$donnees = array($etiquette_obs_inconnue => $obs_inconnue, $etiquette_obs_determinee => $obs_determinee); |
$valeurs = implode(',', $donnees); |
$etiquettes = implode('|', array_keys($donnees)); |
// Construire les paramêtres du graph |
$graph = array('cht' => 'p3', |
'chtt' => $titre, |
'chs' => '250x200', |
'chco' => 'FF0000,00FF00', |
'chd' => 't:'.$valeurs, |
'chds' => "0,$obs_totale", |
'chdl' => $etiquettes, |
'chdlp' => 'bv|r', |
'chts' => '000000,12'); |
return $graph; |
} |
private function getNbreObsAvecIndicationGeo($param) { |
// Récupération des données |
$total = $this->executerRequeteNombre('cel_inventory', 'id'); |
$obs['commune'] = $this->executerRequeteNombre('cel_inventory', 'id', "location != '000null' AND location != '' AND location IS NOT NULL"); |
$obs['commune identifiée'] = $this->executerRequeteNombre('cel_inventory', 'id', "id_location != '000null' AND id_location != '' AND id_location IS NOT NULL"); |
$obs['lieu-dit'] = $this->executerRequeteNombre('cel_inventory', 'id', "lieudit != '000null' AND lieudit != '' AND lieudit IS NOT NULL"); |
$obs['station'] = $this->executerRequeteNombre('cel_inventory', 'id', "station != '000null' AND station != '' AND station IS NOT NULL"); |
$obs['milieu'] = $this->executerRequeteNombre('cel_inventory', 'id', "milieu != '000null' AND milieu != '' AND milieu IS NOT NULL"); |
$obs['coordonnée'] = $this->executerRequeteNombre('cel_inventory', 'id', "coord_x != '000null' AND coord_x != '' AND coord_x IS NOT NULL AND coord_y != '000null' AND coord_y != '' AND coord_y IS NOT NULL"); |
$donnees = array(); |
$num = 1; |
foreach ($obs as $etiquette => $nbre) { |
$pourcent = round(($obs[$etiquette] / ($total / 100)), 1).'%'; |
$legende = "$num : $etiquette ($nbre - $pourcent)"; |
$donnees['valeurs'][] = $nbre; |
$donnees['etiquettes'][] = $num++; |
$donnees['legendes'][] = $legende; |
} |
// Post traitement des données de la base de données |
$titre = "Nombre d'observations|avec indications géographiques"; |
$valeurs = implode(',', $donnees['valeurs']); |
$etiquettes = implode('|', $donnees['etiquettes']); |
$legendes = implode('|', $donnees['legendes']); |
// Construire les paramêtres du graph |
$graph = array('cht' => 'rs', |
'chtt' => $titre, |
'chs' => '600x300', |
'chco' => 'FFFFFF', |
'chd' => 't:'.$valeurs, |
'chds' => "0,$total", |
'chdl' => $legendes, |
'chxt' => 'x', |
'chxl' => "0:|$etiquettes", |
//'chxp' => '1,0,20,40,60,80,100',// Grille sous forme de cible |
'chm' => 'B,FF000080,0,1.0,5.0'); |
return $graph; |
} |
private function getUtilisationJournaliere($param) { |
// Sur quel jour, voulons nous estimer l'utilisation |
$aujourdhui = date('Y-m-d'); |
if (isset($param[0]) && preg_match('/^[0-9]{4}(?:-[0-9]{2}){2}$/', $param[0])) { |
$aujourdhui = $param[0]; |
} |
$aujourdhui_fmt = strftime('%d %b %Y', strtotime($aujourdhui)); |
// Récupération des données |
$max_obs = array(); |
$max_obs[] = $this->executerRequeteEvol('cel_inventory', 'id', '%Y%m%d', |
"date_creation NOT LIKE '$aujourdhui%' ", 'date_creation'); |
$max_obs[] = $this->executerRequeteEvol('cel_inventory', 'id', '%Y%m%d', |
"date_modification NOT LIKE '$aujourdhui%' ", 'date_modification'); |
$max_obs[] = $this->executerRequeteEvol('cel_inventory', 'id', '%Y%m%d', |
"date_transmission NOT LIKE '$aujourdhui%' ", 'date_transmission'); |
$obs_aujourdhui = $this->executerRequeteNombre('cel_inventory', 'id', |
"date_creation LIKE '$aujourdhui%' |
OR date_modification LIKE '$aujourdhui%' |
OR date_transmission LIKE '$aujourdhui%' "); |
// Cummul des obs crées, modifiées, transmises par jour |
$donnees = array(); |
foreach ($max_obs as $obs_par_jour) { |
foreach ($obs_par_jour as $annee_mois_jour => $nbre) { |
if (!isset($donnees[$annee_mois_jour])) { |
$donnees[$annee_mois_jour] = $nbre; |
} else { |
$donnees[$annee_mois_jour] += $nbre; |
} |
} |
} |
// Post traitement des données |
$valeur = $obs_aujourdhui; |
$valeur_max = 400;max($donnees); |
if ($valeur > $valeur_max) { |
$pourcentage = 100; |
} else { |
$pourcentage = round(($valeur / ($valeur_max / 100)), 0); |
} |
$etiquettes_x = $aujourdhui_fmt; |
$etiquettes_y = "faible|moyenne|forte"; |
$titre = "Intensité d'utilisation pour le $aujourdhui_fmt"; |
$legende = "$valeur changements"; |
// Construire de l'url de l'image |
$graph = array('cht' => 'gom', |
'chtt' => $titre, |
'chdl' => "$legende", |
'chdlp' => 'b', |
'chs' => '350x200', |
'chco' => 'FFFF00,0A7318', |
'chls' => '3|10', |
'chma' => '0,0,0,0|300,40', |
'chd' => 't:'.$pourcentage, |
'chxt' => 'x,y', |
'chxl' => '0:|'.$etiquettes_x.'|1:|'.$etiquettes_y.'', |
'chxp' => '0,50'); |
return $graph; |
} |
private function getNbreObsParUtilisateur($param) { |
// Récupération des données |
$requete = 'SELECT identifiant, COUNT(id) AS nbre '. |
'FROM cel_inventory '. |
'GROUP BY identifiant '; |
$utilisateurs = $this->executerRequete($requete); |
// Création des classes d'utilisateurs |
$classes = array('00->10' => 0, '11->50' => 0, '51->100' => 0, '101->500' => 0, '500->∞' => 0); |
$donnees['Utilisateurs'] = $classes; |
$valeur_max = 0; |
foreach ($utilisateurs as $utilisateur) { |
$id = $utilisateur['identifiant']; |
$nbre = $utilisateur['nbre']; |
// Détermination de la classe |
$classe = ''; |
if (0 < $nbre && $nbre <= 10) { |
$classe = '00->10'; |
} else if (10 < $nbre && $nbre <= 50) { |
$classe = '11->50'; |
} else if (50 < $nbre && $nbre <= 100) { |
$classe = '51->100'; |
} else if (100 < $nbre && $nbre <= 500) { |
$classe = '101->500'; |
} else if (500 < $nbre) { |
$classe = '500->∞'; |
} |
// Détermination du type d'utilisateur |
if (strstr($id, '@')) { |
$type = 'Utilisateurs'; |
// Incrémentation du tableau de données et récupration de la valeur max |
$donnees[$type][$classe]++; |
if ($donnees[$type][$classe] > $valeur_max) { |
$valeur_max = $donnees[$type][$classe]; |
} |
} |
} |
// Post traitement des données |
$titre = "Nombre d'observations par utilisateur"; |
$y1_val_fin = $valeur_max; |
$y1_pas = '100'; |
$valeurs = implode(',', $donnees['Utilisateurs']); |
$etiquettes_x1 = implode('|', array_keys($classes)); |
$etiquettes_x2 = 'Observations'; |
$etiquettes_y2 = 'Utilisateurs'; |
$legendes = implode('|', array_keys($donnees)); |
// Construire de l'url de l'image |
$graph = array('cht' => 'bvg', |
'chtt' => $titre, |
'chs' => '400x200', |
'chco' => '00FF00,FF0000', |
'chbh' => 'r,0.3,1', |
'chd' => 't:'.$valeurs, |
'chds' => "0,$valeur_max", |
'chxt' => 'x,x,y,y', |
'chxl' => '0:|'.$etiquettes_x1.'|1:|'.$etiquettes_x2.'|3:|'.$etiquettes_y2.'', |
'chxp' => '1,100|3,100', |
'chxr' => "2,0,$y1_val_fin,$y1_pas", |
'chm' => 'h,C3C3C3,0,0.5,1,-1|N,000000,0,0::1,8,1.0,e'); |
//echo '<pre>'.print_r($graph,true).'</pre>'; |
return $graph; |
} |
private function getNbreObsParUtilisateurEtTest($param) { |
// Récupération des données |
$requete = 'SELECT identifiant, COUNT(id) AS nbre '. |
'FROM cel_inventory '. |
'GROUP BY identifiant '; |
$utilisateurs = $this->executerRequete($requete); |
// Création des classes d'utilisateurs |
$classes = array('00->10' => 0, '11->50' => 0, '51->100' => 0, '101->500' => 0, '500->∞' => 0); |
$donnees['Utilisateurs'] = $classes; |
$donnees['Tests'] = $classes; |
$valeur_max = 0; |
foreach ($utilisateurs as $utilisateur) { |
$id = $utilisateur['identifiant']; |
$nbre = $utilisateur['nbre']; |
// Détermination de la classe |
$classe = ''; |
if (0 < $nbre && $nbre <= 10) { |
$classe = '00->10'; |
} else if (10 < $nbre && $nbre <= 50) { |
$classe = '11->50'; |
} else if (50 < $nbre && $nbre <= 100) { |
$classe = '51->100'; |
} else if (100 < $nbre && $nbre <= 500) { |
$classe = '101->500'; |
} else if (500 < $nbre) { |
$classe = '500->∞'; |
} |
// Détermination du type d'utilisateur |
if (strstr($id, '@')) { |
$type = 'Utilisateurs'; |
} else { |
$type = 'Tests'; |
} |
// Incrémentation du tableau de données et récupration de la valeur max |
$donnees[$type][$classe]++; |
if ($donnees[$type][$classe] > $valeur_max) { |
$valeur_max = $donnees[$type][$classe]; |
} |
} |
// Post traitement des données |
$titre = "Nombre d'observations par utilisateur et test"; |
$y1_val_fin = $valeur_max; |
$y1_pas = '100'; |
$valeurs = implode(',', $donnees['Utilisateurs']).'|'.implode(',', $donnees['Tests']); |
$etiquettes_x1 = implode('|', array_keys($classes)); |
$etiquettes_x2 = 'Observations'; |
$etiquettes_y2 = 'Utilisateurs'; |
$legendes = implode('|', array_keys($donnees)); |
// Construire de l'url de l'image |
$graph = array('cht' => 'bvg', |
'chtt' => $titre, |
'chs' => '400x200', |
'chco' => '00FF00,FF0000', |
'chbh' => 'r,0.3,1', |
'chd' => 't:'.$valeurs, |
'chds' => "0,$valeur_max", |
'chxt' => 'x,x,y,y', |
'chxl' => '0:|'.$etiquettes_x1.'|1:|'.$etiquettes_x2.'|3:|'.$etiquettes_y2.'', |
'chxp' => '1,100|3,100', |
'chxr' => "2,0,$y1_val_fin,$y1_pas", |
'chm' => 'h,C3C3C3,0,0.5,1,-1|N,000000,0,0::1,8,1.0,e|N,000000,1,0::1,8,1.0,e', |
'chdl' => $legendes, |
'chdlp' => 'b'); |
//echo '<pre>'.print_r($graph,true).'</pre>'; |
return $graph; |
} |
private function getNuagePointsObsParHeureEtJourSemaine($param) { |
// Récupération des données de la base |
$observations = $this->executerRequeteEvol('cel_inventory', 'id', '%w-%H', null, 'date_creation'); |
// Postraitement des données |
// Jour de la semaine |
$donnees['joursSemaine'] = array(); |
for ($njs = 0; $njs < 7; $njs++) { |
$donnees['joursSemaine'][] = strftime('%A', strtotime('2010-05-'.(16+$njs))); |
} |
// Heure |
$donnees['heures'] = array(); |
for ($h = 0; $h < 24; $h++) { |
$heure_fmt = sprintf('%02s', $h);// Format numérique 00 |
$donnees['heures'][] = strftime('%H', strtotime("0000-00-00 $heure_fmt:00:00")); |
} |
// Nbre |
$valeur_max = max($observations); |
for ($njs = 0; $njs < 7; $njs++) { |
for ($h = 0; $h < 24; $h++) { |
$hfmt = sprintf('%02s', $h);// Format numérique 00 |
$periode = $njs.'-'.$hfmt; |
$donnees['valeurs_x'][] = round(($h + 1) * (100 / 24), 0); |
$donnees['valeurs_y'][] = round(($njs + 1) * (100 / 7), 0); |
$ps = 0; |
if (isset($observations[$periode])) { |
$ps = round($observations[$periode] * (100 / $valeur_max), 0); |
} |
$donnees['valeurs_ps'][] = $ps; |
} |
} |
//echo '<pre>'.print_r($donnees,true).'</pre>'; |
// Préparation des paramêtres du graph |
$titre = "Nombre de création d'observation|par heure et jour de la semaine"; |
$valeurs = implode(',', $donnees['valeurs_x'])."|".implode(',', $donnees['valeurs_y'])."|".implode(',', $donnees['valeurs_ps']); |
$etiquettes_x1 = '|'.implode('|', $donnees['heures']); |
$etiquettes_x2 = 'Heures'; |
$etiquettes_y1 = '|'.implode('|', $donnees['joursSemaine']); |
$x_axis_step_size = str_replace(',', '.', (100 / 24)); |
$y_axis_step_size = str_replace(',', '.', (100 / 7)); |
// Construction du tableau des paramêtres du graph |
$graph = array('cht' => 's', |
'chtt' => $titre, |
'chs' => '400x200', |
'chco' => '00FF00', |
'chd' => 't:'.$valeurs, |
'chxt' => 'x,x,y', |
'chxr' => "0,-1,23,1|2,-1,6,1", |
'chxp' => '1,100', |
'chxl' => '0:|'.$etiquettes_x1.'|1:|'.$etiquettes_x2.'|2:|'.$etiquettes_y1.'', |
'chg' => "$x_axis_step_size,$y_axis_step_size,1,5"); |
//echo '<pre>'.print_r($graph,true).'</pre>'; |
return $graph; |
} |
private function getNuagePointsObsAnciennete($param) { |
// Récupération des données de la base |
$requete = 'SELECT DISTINCT identifiant , '. |
' MIN(date_creation) AS date_min, MAX(date_creation) AS date_max, '. |
' COUNT(id) AS obs_nbre '. |
'FROM cel_inventory '. |
"WHERE date_creation != '0000-00-00 00:00:00' ". |
" AND identifiant LIKE '%@%' ". |
'GROUP BY identifiant '. |
'ORDER BY date_min ASC '; |
$resultats = $this->executerRequete($requete); |
// Trie des données |
$max_obs = 0; |
$max_obs_log = 0; |
$max_anciennete = 0; |
$donnees = array(); |
foreach ($resultats as $enrg) { |
$tps_deb = strtotime($enrg['date_min']); |
$tps_fin = strtotime($enrg['date_max']); |
$donnee = array(); |
if (($tps_fin - $tps_deb) == 0) { |
$donnee['anciennete'] = 1; |
} else { |
$donnee['anciennete'] = round((($tps_fin - $tps_deb) / 86400), 0); |
} |
$donnee['obs'] = $enrg['obs_nbre']; |
$donnee['obs_log'] = log10($enrg['obs_nbre']); |
$donnees[] = $donnee; |
$max_obs_log = ($donnee['obs_log'] > $max_obs_log) ? $donnee['obs_log'] : $max_obs_log; |
$max_obs = ($donnee['obs'] > $max_obs) ? $donnee['obs'] : $max_obs; |
$max_anciennete = ($donnee['anciennete'] > $max_anciennete) ? $donnee['anciennete'] : $max_anciennete; |
} |
// Postraitement des données |
foreach ($donnees as $donnee) { |
$donnees['valeurs_x'][] = round($donnee['anciennete'] * (100 / $max_anciennete), 0); |
$donnees['valeurs_y'][] = round($donnee['obs_log'] * (100 / $max_obs_log), 0); |
$donnees['valeurs_ps'][] = 20; |
} |
// Échelle log des obs |
$donnees['echelle_y1'] = array(); |
$pas = $max_obs_log / 100 ; |
for ($i = 0 ; $i < 5 ; $i++) { |
$donnees['echelle_y1'][] = round(pow(10, (($i*20) * $pas)), 0); |
} |
$donnees['echelle_y1'][] = $max_obs; |
//echo '<pre>'.print_r($donnees['valeurs_x'],true).'</pre>'; |
// Préparation des paramêtres du graph |
$titre = "Répartition des utilisateurs en fonction|du nombre d'observations et de l'ancienneté"; |
$valeurs = implode(',', $donnees['valeurs_x'])."|".implode(',', $donnees['valeurs_y'])."|".implode(',', $donnees['valeurs_ps']); |
$etiquettes_x2 = 'Ancienneté en jours'; |
$etiquettes_y1 = implode('|', $donnees['echelle_y1']); |
$etiquettes_y2 = 'Observations'; |
$x_axis_step_size = $max_anciennete; |
// Construction du tableau des paramêtres du graph |
$graph = array('cht' => 's', |
'chtt' => $titre, |
'chs' => '400x200', |
'chco' => '0000FF', |
'chxt' => 'x,x,y,y', |
'chd' => 't:'.$valeurs, |
'chxr' => "0,0,$x_axis_step_size|2,0,$max_obs",//|2,0,$y_axis_step_size,$pas |
'chxp' => '1,100|3,100', |
'chm' => 'h,C3C3C3,0,-0.2,0.2,-1', |
'chxl' => '1:|'.$etiquettes_x2.'|2:|'.$etiquettes_y1.'|3:|'.$etiquettes_y2.'');// |
//echo '<pre>'.print_r($graph,true).'</pre>'; |
return $graph; |
} |
private function executerRequeteEvol($table, $champ, $format_date = '%Y%m', $where = null, $champ_date = 'date_creation', $order_by = null, $limit = null) { |
$requete = "SELECT DATE_FORMAT($champ_date, '$format_date') AS periode, COUNT($champ) AS nbre ". |
"FROM $table ". |
"WHERE $champ_date != '0000-00-00 00:00:00' ". |
((is_null($where)) ? '' : " AND $where "). |
'GROUP BY periode '. |
((is_null($order_by)) ? '' : "ORDER BY $order_by "); |
((is_null($limit)) ? '' : "LIMIT $limit "); |
$evolution = $this->executerRequete($requete); |
// Traitement du tableau |
$donnees_traitees = array(); |
foreach ($evolution as $info) { |
$donnees_traitees[$info['periode']] = $info['nbre']; |
} |
return $donnees_traitees; |
} |
private function executerRequeteNombre($table, $champ, $where = null) { |
$requete = "SELECT COUNT($champ) AS nbre ". |
"FROM $table ". |
((is_null($where)) ? '' : "WHERE $where "); |
$nbre = $this->executerRequete($requete, 'Column'); |
return $nbre; |
} |
} |
/trunk/jrest/services/Cel.php |
---|
New file |
0,0 → 1,328 |
<?php |
/** |
* Classe mère abstraite contenant les méthodes génériques des services. |
* Encodage en entrée : utf8 |
* Encodage en sortie : utf8 |
* |
* @author Jean-Pascal MILCENT <jpm@clapas.org> |
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt> |
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt> |
* @version $Id$ |
* @copyright © 2010, Jean-Pascal MILCENT |
*/ |
abstract class Cel { |
public $config; |
protected $bdd; |
protected $messages = array(); |
protected $debug = array(); |
public function __construct($config) { |
// Tableau contenant la config de Jrest |
$this->config = $config; |
// Réglages de PHP |
setlocale(LC_ALL, $this->config['settings']['locale']); |
date_default_timezone_set($this->config['settings']['fuseauHoraire']); |
// Connection à la base de données |
$this->bdd = $this->connecterPDO($this->config, 'database_cel'); |
// Nettoyage du _GET (sécurité) |
$this->recupererParametresUrl(); |
$this->definirParametresUrlParDefaut(); |
// Définition de variable générale dans la config |
$this->config['settings']['baseURLAbsoluDyn'] = 'http://'.$_SERVER['SERVER_NAME'].$this->config['settings']['baseURL'].'%s'; |
} |
//+----------------------------------------------------------------------------------------------------------------+ |
// GESTION de la BASE de DONNÉES |
private function connecterPDO($config, $base = 'database') { |
$cfg = $config[$base]; |
$dsn = $cfg['phptype'].':dbname='.$cfg['database'].';host='.$cfg['hostspec']; |
try { |
$PDO = new PDO($dsn, $cfg['username'], $cfg['password']); |
} catch (PDOException $e) { |
echo 'La connexion à la base de donnée via PDO a échouée : ' . $e->getMessage(); |
} |
// Passe en UTF-8 la connexion à la BDD |
$PDO->exec("SET NAMES 'utf8'"); |
// Affiche les erreurs détectées par PDO (sinon mode silencieux => aucune erreur affiché) |
$PDO->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); |
return $PDO; |
} |
protected function executerRequete($requete, $retour = 'All', $mode = PDO::FETCH_ASSOC) { |
try { |
switch ($retour) { |
case 'All' : |
$resultat = $this->bdd->query($requete)->fetchAll($mode); |
break; |
case 'Column' : |
$resultat = $this->bdd->query($requete)->fetchColumn(); |
break; |
default: |
$resultat = false; |
$this->messages[] = "Le type de retour '$retour' est inconnu."; |
} |
if ($resultat === false) { |
$this->messages[] = "La requête a retourné aucun résultat."; |
} |
} catch (PDOException $e) { |
$this->messages[] = sprintf($this->getTxt('sql_erreur_requete'), $e->getFile(), $e->getLine(), $e->getMessage(), $requete); |
} |
return $resultat; |
} |
protected function getTxt($id) { |
$sortie = ''; |
switch ($id) { |
case 'sql_erreur' : $sortie = 'Requête echec. Fichier : "%s". Ligne : "%s". Message : %s'; break; |
case 'sql_erreur_requete' : $sortie = "Requête echec.\nFichier : %s.\nLigne : %s.\nMessage : %s.\nRequête : %s"; break; |
default : $sortie = $id; |
} |
return $sortie; |
} |
//+----------------------------------------------------------------------------------------------------------------+ |
// TRAITEMENT des URLs et des PARAMÊTRES |
private function recupererParametresUrl() { |
if (isset($_GET)) { |
$get_params = array('orderby', 'distinct', 'start', 'limit', 'formatRetour'); |
foreach ($get_params as $get) { |
if (isset($_GET[$get])) { |
$verifier = array('NULL', "\n", "\r", "\\", "'", '"', "\x00", "\x1a", ';'); |
$_GET[$get] = strip_tags(str_replace($verifier, '', $_GET[$get])); |
if ($_GET[$get] != '') { |
if (!isset($this->$get)) { |
$this->$get = $_GET[$get]; |
} else { |
$e = "Impossible d'ajouter l'attribut $get à la classe du service car elle possède déjà un attribut nommé : $get"; |
trigger_error($e, E_USER_WARNING); |
} |
} else { |
$_GET[$get] = null; |
} |
} |
} |
} |
} |
private function definirParametresUrlParDefaut() { |
if (!isset($this->start)) { |
$this->start = 0; |
} |
if (!isset($this->limit)) { |
$this->limit = 150; |
} |
} |
protected function traiterParametres($params_attendu, $params, $pourBDD = true) { |
$sortie = array(); |
foreach ($params_attendu as $num => $nom) { |
if (isset($params[$num]) && $params[$num] != '*') { |
if ($pourBDD) { |
$params[$num] = $this->bdd->quote($params[$num]); |
} |
$sortie[$nom] = $params[$num]; |
} |
} |
return $sortie; |
} |
protected function traiterNomMethodeGet($nom) { |
$methode = 'get'; |
$methode .= str_replace(' ', '', ucwords(str_replace('-', ' ', strtolower($nom)))); |
return $methode; |
} |
//+----------------------------------------------------------------------------------------------------------------+ |
// GESTION de l'ENVOIE au NAVIGATEUR |
protected function envoyerJson($variable, $donnees = null, $encodage = 'utf-8') { |
$contenu = "var $variable = ".json_encode($donnees); |
$this->envoyer($contenu, 'text/html', $encodage); |
} |
protected function envoyer($donnees = null, $mime = 'text/html', $encodage = 'utf-8', $json = false) { |
// Traitements des messages d'erreurs et données |
if (count($this->messages) != 0) { |
header('HTTP/1.1 500 Internal Server Error'); |
$mime = 'text/html'; |
$encodage = 'utf-8'; |
$json = true; |
$sortie = $this->messages; |
} else { |
$sortie = $donnees; |
if (is_null($donnees)) { |
$sortie = 'OK'; |
} |
} |
// Gestion de l'envoie du déboguage |
$this->envoyerDebogage(); |
// Encodage au format et JSON et envoie sur la sortie standard |
$contenu = $json ? json_encode($sortie) : $sortie; |
$this->envoyerContenu($encodage, $mime, $contenu); |
} |
private function envoyerDebogage() { |
if (!is_array($this->debug)) { |
$this->debug[] = $this->debug; |
} |
if (count($this->debug) != 0) { |
foreach ($this->debug as $cle => $val) { |
if (is_array($val)) { |
$this->debug[$cle] = print_r($val, true); |
} |
} |
header('X-DebugJrest-Data:'.json_encode($this->debug)); |
} |
} |
private function envoyerContenu($encodage, $mime, $contenu) { |
if (!is_null($mime) && !is_null($encodage)) { |
header("Content-Type: $mime; charset=$encodage"); |
} else if (!is_null($mime) && is_null($encodage)) { |
header("Content-Type: $mime"); |
} |
print $contenu; |
} |
private function envoyerAuth($message_accueil, $message_echec) { |
header('HTTP/1.0 401 Unauthorized'); |
header('WWW-Authenticate: Basic realm="'.mb_convert_encoding($message_accueil, 'ISO-8859-1', 'UTF-8').'"'); |
header('Content-type: text/plain; charset=UTF-8'); |
print $message_echec; |
exit(0); |
} |
//+----------------------------------------------------------------------------------------------------------------+ |
// GESTION DU DAO |
protected function getDao() { |
if (isset($this->dao)) { |
return $this->dao; |
} else { |
$e = "Le DAO n'a pas été initialisé. Utiliser la méthode initialiserDao()."; |
trigger_error($e, E_USER_WARNING); |
} |
} |
protected function initialiserDao($url_services_distant) { |
if (is_null($this->dao)) { |
$this->dao = new CelDao($url_services_distant); |
} else { |
$this->dao->url_jrest = $url_services_distant; |
} |
} |
//+----------------------------------------------------------------------------------------------------------------+ |
// GESTION DE L'IDENTIFICATION |
public function authentifier() { |
$message_accueil = "Veuillez vous identifier avec votre compte Tela Botanica."; |
$message_echec = "Accès limité aux administrateurs du CEL.\n". |
"Votre tentative d'identification a échouée.\n". |
"Actualiser la page pour essayer à nouveau."; |
if (!isset($_SERVER['PHP_AUTH_USER'])) { |
$this->envoyerAuth($message_accueil, $message_echec); |
} else { |
if ($this->etreAutorise($_SERVER['PHP_AUTH_USER']) == false) { |
$this->envoyerAuth($message_accueil, $message_echec); |
} |
} |
return true; |
} |
public function etreAutorise($identifiant) { |
$this->initialiserDao('http://www.tela-botanica.org/client/annuaire_nouveau/actuelle/jrest/'); |
$mdp = md5($_SERVER['PHP_AUTH_PW']); |
$url = $this->getDao()->url_jrest."TestLoginMdp/$identifiant/$mdp"; |
$json = $this->getDao()->envoyerRequeteConsultation($url); |
$existe = json_decode($json); |
$autorisation = false; |
if ($existe == true && $this->etreAdminCel($identifiant)) { |
$autorisation = true; |
} |
return $autorisation; |
} |
public function etreAdminCel($courriel) { |
$admins = $this->config['jrest_admin']['admin']; |
$courriels_autorises = explode(',', $admins); |
$autorisation = (in_array($courriel, $courriels_autorises)) ? true : false ; |
return $autorisation; |
} |
//+----------------------------------------------------------------------------------------------------------------+ |
// GESTION DE MÉTHODES COMMUNES ENTRE LES SERVICES |
protected function encoderMotCle($mot_cle) { |
return md5(mb_strtolower($mot_cle)); |
} |
//+----------------------------------------------------------------------------------------------------------------+ |
// GESTION DES SQUELETTES PHP |
/** |
* Méthode prenant en paramètre un chemin de fichier squelette et un tableau associatif de données, |
* en extrait les variables, charge le squelette et retourne le résultat des deux combinés. |
* |
* @param String $fichier le chemin du fichier du squelette |
* @param Array $donnees un tableau associatif contenant les variables a injecter dans le squelette. |
* |
* @return boolean false si le squelette n'existe pas, sinon la chaine résultat. |
*/ |
public static function traiterSquelettePhp($fichier, Array $donnees = array()) { |
$sortie = false; |
if (file_exists($fichier)) { |
// Extraction des variables du tableau de données |
extract($donnees); |
// Démarage de la bufferisation de sortie |
ob_start(); |
// Si les tags courts sont activés |
if ((bool) @ini_get('short_open_tag') === true) { |
// Simple inclusion du squelette |
include $fichier; |
} else { |
// Sinon, remplacement des tags courts par la syntaxe classique avec echo |
$html_et_code_php = self::traiterTagsCourts($fichier); |
// Pour évaluer du php mélangé dans du html il est nécessaire de fermer la balise php ouverte par eval |
$html_et_code_php = '?>'.$html_et_code_php; |
// Interprétation du html et du php dans le buffer |
echo eval($html_et_code_php); |
} |
// Récupèration du contenu du buffer |
$sortie = ob_get_contents(); |
// Suppression du buffer |
@ob_end_clean(); |
} else { |
$msg = "Le fichier du squelette '$fichier' n'existe pas."; |
trigger_error($msg, E_USER_WARNING); |
} |
// Retourne le contenu |
return $sortie; |
} |
/** |
* Fonction chargeant le contenu du squelette et remplaçant les tags court php (<?= ...) par un tag long avec echo. |
* |
* @param String $chemin_squelette le chemin du fichier du squelette |
* |
* @return string le contenu du fichier du squelette php avec les tags courts remplacés. |
*/ |
private static function traiterTagsCourts($chemin_squelette) { |
$contenu = file_get_contents($chemin_squelette); |
// Remplacement de tags courts par un tag long avec echo |
$contenu = str_replace('<?=', '<?php echo ', $contenu); |
// Ajout systématique d'un point virgule avant la fermeture php |
$contenu = preg_replace("/;*\s*\?>/", "; ?>", $contenu); |
return $contenu; |
} |
} |
/trunk/jrest/services/InventoryByDept.php |
---|
New file |
0,0 → 1,153 |
<?php |
// In utf8 |
// Out iso3859 |
// Liste des Nouvelles observations par departement |
Class InventoryByDept extends DBAccessor { |
var $config; |
var $extendSpreadsheetProductor; |
function InventoryByDept($config) { |
$this->config=$config; |
// Pas d'heritage multiple en php :( |
$this->extendSpreadsheetProductor = new SpreadsheetProductor(); |
$this->extendSpreadsheetProductor->initSpreadsheet(); |
} |
function getRessource(){ |
$DB=$this->connectDB($this->config,'database_cel'); |
$query="SELECT id_location, identifiant, ordre, nom_sel, num_nom_sel, nom_ret, num_nom_ret, num_taxon, famille, location, date_observation," . |
" lieudit, station, milieu, commentaire, transmission FROM cel_inventory ". |
"where id_location!='000null' and transmission=1 and num_taxon!=0 order by round(id_location), nom_ret"; |
$res =& $DB->query($query); |
if (DB::isError($res)) { |
die($res->getMessage()); |
} |
// Creating a workbook |
$workbook = new Spreadsheet_Excel_Writer(); |
// Creating a worksheet |
$worksheet = $workbook->addWorksheet('Liste'); |
$worksheet->write(0,0,'Departement'); |
$worksheet->write(0,1,'Nom saisi'); |
$worksheet->write(0,2,'Numero nomenclatural'); |
$worksheet->write(0,3,'Nom retenu'); |
$worksheet->write(0,4,'Numero nomenclatural nom retenu'); |
$worksheet->write(0,5,'Numero taxonomique'); |
$worksheet->write(0,6,'Famille'); |
$worksheet->write(0,7,'Commune'); |
$worksheet->write(0,8,'Date Observation'); |
$worksheet->write(0,9,'Lieu dit'); |
$worksheet->write(0,10,'Station'); |
$worksheet->write(0,11,'Milieu'); |
$worksheet->write(0,12,'Commentaire'); |
$worksheet->write(0,13,'Observateur'); |
$DB2=$this->connectDB($this->config); |
$i=1; |
while ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) { |
$query2="SELECT ecd_ce_taxon FROM eflore_zg, eflore_chorologie_donnee WHERE ecd_ce_taxon =".$row['num_taxon']." and ezg_code=".$row['id_location']." and ecd_ce_zone_geo=ezg_id_zone_geo and ezg_id_projet_zg =ecd_ce_version_projet_zg and ecd_ce_version_projet_taxon=25"; |
$res2 =& $DB2->query($query2); |
if (DB::isError($res2)) { |
die($res2->getMessage()); |
} |
if ($res2->numRows() == 0) { |
// Denullifiage |
foreach($row as $k=>$v) { |
if (($v=="null") || ($v=="000null")) { |
$row[$k]=""; |
} |
else { |
$row[$k]=utf8_decode($v); |
} |
} |
if ($row['date_observation']!="0000-00-00 00:00:00") { |
list($year,$month,$day)= split ('-',$row['date_observation']); |
list($day)= split (' ',$day); |
$row['date_observation']=$day."/".$month."/".$year; |
} |
else { |
$row['date_observation']="00/00/0000"; |
} |
$worksheet->write($i,0,$row['id_location']); |
$worksheet->write($i,1,$row['nom_sel']); |
$worksheet->write($i,2,$row['num_nom_sel']); |
$worksheet->write($i,3,$row['nom_ret']); |
$worksheet->write($i,4,$row['num_nom_ret']); |
$worksheet->write($i,5,$row['num_taxon']); |
$worksheet->write($i,6,$row['famille']); |
$worksheet->write($i,7,$row['location']); |
$worksheet->write($i,8,$row['date_observation']); |
$worksheet->write($i,9,$row['lieudit']); |
$worksheet->write($i,10,$row['station']); |
$worksheet->write($i,11,$row['milieu']); |
$worksheet->write($i,12,$row['commentaire']); |
$worksheet->write($i,13,$row['identifiant']); |
$i++; |
} |
} |
// sending HTTP headers |
$workbook->send('liste.xls'); |
$workbook->close(); |
exit(); |
} |
} |
/* +--Fin du code ---------------------------------------------------------------------------------------+ |
* $Log$ |
* Revision 1.1 2008-11-13 11:29:12 ddelon |
* Reecriture gwt-ext |
* |
* Revision 1.2 2008-01-30 08:57:28 ddelon |
* fin mise en place mygwt |
* |
* Revision 1.1 2007-06-06 13:31:16 ddelon |
* v0.09 |
* |
* Revision 1.3 2007-05-22 12:54:09 ddelon |
* Securisation acces utilisateur |
* |
* |
* |
*/ |
?> |
/trunk/jrest/services/InventoryObservationList.php |
---|
New file |
0,0 → 1,461 |
<?php |
/** |
David Delon Cecill / GPL 2008 |
*/ |
// in : utf8 |
// out : utf8 |
/* |
* InventoryObservationList.php |
* |
* Cas d'utilisation : |
* Service recherche d'Observations a partir de divers crit�res |
* |
* 2: Le service recherche l'Observation correspondant au crit�res demand� |
* 3: Le service renvoie l'adresse de base de l'Observation qui permet de la localiser sous ses diff�rents formats (X, M ou L) |
*/ |
Class InventoryObservationList extends DBAccessor { |
var $config; |
function InventoryObservationList($config) { |
$this->config=$config; |
} |
// renvoie l'enregistrement correspond a une Observation |
function getElement($uid) |
{ |
// uid[0] : utilisateur obligatoire |
// uid[1] : criteres de filtrage de la forme critere1:valeur1;critere2:valeur2 |
// Controle detournement utilisateur |
session_start(); |
$this->controleUtilisateur($uid[0]); |
$DB=$this->connectDB($this->config,'database_cel'); |
$criteres = array() ; |
if(isset($uid[1])) |
{ |
$criteres = explode("&", $uid[1]) ; |
} |
//$query="SELECT identifiant, ordre, nom_sel, num_nom_sel, nom_ret, num_nom_ret, num_taxon, famille, location, date_observation," . |
//" lieudit, station, milieu, commentaire, transmission FROM cel_inventory WHERE identifiant='".$DB->escapeSimple($uid[0])."' AND " ; |
$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, coord_x, coord_y, mots_cles FROM cel_inventory WHERE identifiant='".$DB->escapeSimple($uid[0])."' AND " ; |
$numero_page = 0 ; |
$limite = 30 ; // limite par defaut |
foreach($criteres as $pair) { |
$nom_valeur = explode("=",$pair) ; |
if(sizeof($nom_valeur) != 0) { |
if($nom_valeur[0] == 'limite') |
{ |
$limite = $DB->escapeSimple($nom_valeur[1]) ; |
} |
elseif($nom_valeur[0] == 'numero_page') { |
$numero_page = $DB->escapeSimple($nom_valeur[1]) ; |
} |
elseif($nom_valeur[0] == 'annee') { |
$query .= "year(date_observation) = '".$DB->escapeSimple($nom_valeur[1])."'" ; |
$query .= ' AND ' ; |
} |
elseif($nom_valeur[0] == 'mois') { |
$query .= "month(date_observation) = '".$DB->escapeSimple($nom_valeur[1])."'" ; |
$query .= ' AND ' ; |
} |
elseif($nom_valeur[0] == 'jour') { |
$query .= "day(date_observation) = '".$DB->escapeSimple($nom_valeur[1])."'" ; |
$query .= ' AND ' ; |
} |
elseif($nom_valeur[0] == 'mots_cles') { |
$liste_mc = explode(";",$nom_valeur[1]); |
$query .= '(' ; |
foreach($liste_mc as $mot) { |
if(trim($mot) != '') |
{ |
$query .= "mots_cles LIKE '%".$DB->escapeSimple($mot)."%' OR " ; |
} |
} |
$query = rtrim($query,' OR '); |
$query .= ') AND ' ; |
} |
elseif ($nom_valeur[0] == 'nom_taxon') { |
$nom_valeur[1] = str_replace("*","%",$nom_valeur[1]); |
$query .= "(nom_sel LIKE '%".$DB->escapeSimple($nom_valeur[1]). |
"%' OR identifiant LIKE '%".$DB->escapeSimple($nom_valeur[1]). |
"%' OR ordre LIKE '%".$DB->escapeSimple($nom_valeur[1]). |
"%' OR nom_sel LIKE '%".$DB->escapeSimple($nom_valeur[1]). |
"%' OR num_nom_sel LIKE '%".$DB->escapeSimple($nom_valeur[1]). |
"%' OR nom_ret LIKE '%".$DB->escapeSimple($nom_valeur[1]). |
"%' OR num_nom_ret LIKE '%".$DB->escapeSimple($nom_valeur[1]). |
"%' OR num_taxon LIKE '%".$DB->escapeSimple($nom_valeur[1]). |
"%' OR location LIKE '%".$DB->escapeSimple($nom_valeur[1]). |
"%' OR id_location LIKE '%".$DB->escapeSimple($nom_valeur[1]). |
"%' OR date_observation LIKE '%".$DB->escapeSimple($nom_valeur[1]). |
"%' OR lieudit LIKE '%".$DB->escapeSimple($nom_valeur[1]). |
"%' OR station LIKE '%".$DB->escapeSimple($nom_valeur[1]). |
"%' OR milieu LIKE '%".$DB->escapeSimple($nom_valeur[1]). |
"%' OR commentaire LIKE '%".$DB->escapeSimple($nom_valeur[1]). |
"%' OR transmission LIKE '%".$DB->escapeSimple($nom_valeur[1]). |
"%' OR coord_x LIKE '%".$DB->escapeSimple($nom_valeur[1]). |
"%' OR coord_y LIKE '%".$DB->escapeSimple($nom_valeur[1]). |
"%')"; |
//"%' OR famille LIKE '%".$DB->escapeSimple($nom_valeur[1]). |
} |
else { |
if(trim($nom_valeur[0]) != '') |
{ |
$query .= $nom_valeur[0]." = '".$DB->escapeSimple($nom_valeur[1])."'" ; |
$query .= ' AND ' ; |
} |
} |
} |
} |
$query = rtrim($query,' AND ') ; |
$query .= ' ORDER BY ordre LIMIT '.$limite*$numero_page.','.$limite ; |
$res =& $DB->query($query); |
/* $fp = fopen('dump.txt','w+') ; |
fwrite($fp,print_r($query,true)) ; |
fclose($fp) ;*/ |
if (PEAR::isError($res)) { |
$this->logger("CEL_bugs","Erreur de récupération d'une liste d'observation :".$res->getMessage()." ".$query); |
die($res->getMessage()); |
} |
$result = array() ; |
while($observation = $res->fetchrow(DB_FETCHMODE_ORDERED)) { |
$result[] = $observation; |
} |
$res = json_encode($result) ; |
print($res); |
exit() ; |
} |
// met à jour les métadonnées d'une Observation |
function updateElement($uid,$pairs) { |
// Controle detournement utilisateur |
session_start(); |
$this->controleUtilisateur($uid[0]); |
if ($pairs['num_nom_sel']!='') { |
// Utilisation d'un nom faisant parti du referentiel : recherche du nom valide correspondant |
$complement=$this->rechercherInformationsComplementaires($pairs['num_nom_sel']); |
$pairs['nom_ret']=$complement['Nom_Retenu']; |
$pairs['num_nom_ret']=$complement['Num_Nom_Retenu']; |
$pairs['num_taxon']=$complement['Num_Taxon']; |
$pairs['famille']=$complement['Famille']; |
} |
$DB=$this->connectDB($this->config,'database_cel'); |
// Nullifiage ... |
foreach($pairs as $k=>$v) { |
if (trim($v)=="") { |
$pairs[$k]="null"; |
} |
} |
// Pour apparaitre le premier dans les tris ... |
if ($pairs['location']=="null") $pairs['location']="000null"; |
// Pour apparaitre le premier dans les tris ... |
if ($pairs['lieudit']=="null") $pairs['lieudit']="000null"; |
// Pour apparaitre le premier dans les tris ... |
if ($pairs['id_location']=="null") $pairs['id_location']="000null"; |
// Pour apparaitre le premier dans les tris ... |
if ($pairs['station']=="null") $pairs['station']="000null"; |
// Pour apparaitre le premier dans les tris ... |
if ($pairs['milieu']=="null") $pairs['milieu']="000null"; |
// Vérification sur les ordre donnés en paramètres |
if(strrpos($uid[1],",") == strlen($uid[1]) -1) { |
$uid[1] = rtrim($uid[1],","); |
} |
// TODO : decouper avec les / |
if (isset($pairs['date_observation']) && $pairs['date_observation']!="null") { |
list($jour,$mois,$annee)=split("/",$pairs['date_observation']); |
$pairs['date_observation']=$annee."-".$mois."-".$jour." 0:0:0"; |
} |
if ($pairs['coord_x']=="null") { |
$pairs['coord_x'] = "000null"; |
} |
if ($pairs['coord_y']=="null") { |
$pairs['coord_y'] = "000null"; |
} |
$query="UPDATE cel_inventory SET " ; |
foreach($pairs as $critere => $valeur) { |
$query .= $critere." = '".$DB->escapeSimple($valeur)."',"; |
} |
$query .= "date_modification = now() WHERE ordre IN (".$DB->escapeSimple($uid[1]).") AND identifiant = '".$DB->escapeSimple($uid[0])."'"; |
$res =& $DB->query($query); |
if (PEAR::isError($res)) { |
$this->logger("CEL_bugs","Erreur de mise à jour d'une liste d'observations :".$res->getMessage()." ".$query); |
die($res->getMessage()); |
} |
return true; |
} |
function deleteElement($uid) |
{ |
// uid[0] : utilisateur obligatoire |
// uid[1] : identifiant(s) Observation(s) obligatoire(s) |
// Controle detournement utilisateur |
$this->controleUtilisateur($uid[0]); |
$DB=$this->connectDB($this->config,'database_cel'); |
$id = rtrim($uid[1],",") ; |
if (isset($id)) { |
$query_supp='DELETE FROM cel_inventory WHERE identifiant = "'.$DB->escapeSimple($uid[0]).'" AND ordre in ('.$DB->escapeSimple($id) .')'; |
} |
$res =& $DB->query($query_supp); |
if (PEAR::isError($res)) { |
$this->logger("CEL_bugs","Erreur de suppression d'une liste d'observations :".$res->getMessage()." ".$query_supp); |
die($res->getMessage()); |
} |
else |
{ |
$query_supp_lien = 'DELETE FROM cel_obs_images WHERE coi_ce_utilisateur = "'.$DB->escapeSimple($uid[0]).'" AND coi_ce_observation in ('.$DB->escapeSimple($id).')'; |
/* $fp = fopen('dump.txt','w+') ; |
fwrite($fp,print_r($query_supp_lien,true)) ; |
fclose($fp) ; |
*/ |
$res =& $DB->query($query_supp_lien); |
if (PEAR::isError($res)) { |
$this->logger("CEL_bugs","Erreur de suppression d'une liste de liaison entre observations et images :".$res->getMessage()." ".$query_supp_lien); |
die($res->getMessage()); |
} |
else |
{ |
echo "OK" ; |
exit() ; |
} |
} |
} |
function rechercherInformationsComplementaires($numNom) { |
$DB=$this->connectDB($this->config); |
$query = "SELECT DISTINCT en_nom_genre, en_epithete_espece, en_nom_supra_generique, en_epithete_infra_generique,". |
" auteur_bex.enaia_intitule_abrege AS abreviation_auteur_basio_ex ". |
" , auteur_b.enaia_intitule_abrege AS abreviation_auteur_basio ". |
" , auteur_mex.enaia_intitule_abrege AS abreviation_auteur_modif_ex ". |
" , auteur_m.enaia_intitule_abrege AS abreviation_auteur_modif ". |
" , en_epithete_espece, en_epithete_infra_specifique, enrg_abreviation_rang, b.esn_id_taxon, b.esn_id_nom" . |
" FROM eflore_nom, eflore_nom_rang," . |
" eflore_naturaliste_intitule_abreviation AS auteur_bex ". |
" , eflore_naturaliste_intitule_abreviation AS auteur_b ". |
" , eflore_naturaliste_intitule_abreviation AS auteur_mex ". |
" , eflore_naturaliste_intitule_abreviation AS auteur_m ". |
" ,eflore_selection_nom a, eflore_selection_nom b". |
" WHERE a.esn_id_nom= ".$numNom. |
" AND a.esn_id_version_projet_taxon = 25 ". |
" AND a.esn_id_taxon=b.esn_id_taxon ". |
" AND b.esn_ce_statut=3 ". |
" AND a.esn_id_version_projet_taxon=b.esn_id_version_projet_taxon" . |
" AND en_ce_rang = enrg_id_rang" . |
" AND en_id_nom = b.esn_id_nom" . |
" AND en_ce_auteur_basio_ex = auteur_bex.enaia_id_intitule_naturaliste_abrege ". |
" AND en_ce_auteur_basio = auteur_b.enaia_id_intitule_naturaliste_abrege ". |
" AND en_ce_auteur_modif_ex = auteur_mex.enaia_id_intitule_naturaliste_abrege ". |
" AND en_ce_auteur_modif = auteur_m.enaia_id_intitule_naturaliste_abrege ". |
" AND a.esn_id_version_projet_taxon=en_id_version_projet_nom "; |
$res =& $DB->query($query); |
if (DB::isError($res)) { |
die($res->getMessage()); |
} |
// Nom retenu, Num Nomen nom retenu, Num Taxon, |
// Famille |
$value=array('Nom_Retenu'=>"",'Num_Nom_Retenu'=>"0",'Num_Taxon'=>"0",'Famille'=>""); |
while ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) { |
$fam=$this->rechercherFamille($row['esn_id_taxon'],$DB); |
while (($fam['en_ce_rang']!='fin') && ($fam['en_ce_rang'] !=120)) { |
$fam=$this->rechercherFamille($fam['etr_id_taxon_2'],$DB); |
} |
if ($fam['en_ce_rang']==120) { |
$famille=$fam['en_nom_supra_generique']; |
} |
else { |
$famille="Famille inconnue"; |
} |
$value=array('Nom_Retenu'=>$this->formaterNom($row),'Num_Nom_Retenu'=>$row['esn_id_nom'],'Num_Taxon'=>$row['esn_id_taxon'],'Famille'=>$famille); |
} |
return $value; |
} |
function formaterNom($rawnom) { |
// Constitution du nom: |
$nom = ''; |
if ($rawnom['en_nom_supra_generique'] != '') { |
$nom .= $rawnom['en_nom_supra_generique']; |
} else if ($rawnom['en_epithete_infra_generique'] != '') { |
$nom .= $rawnom['en_epithete_infra_generique']; |
} else { |
if ($rawnom['en_nom_genre'] != '') { |
$nom .= $rawnom['en_nom_genre']; |
} |
if ($rawnom['en_epithete_espece']!= '') { |
$nom .= ' '.$rawnom['en_epithete_espece']; |
} |
if ($rawnom['en_epithete_infra_specifique'] != '') { |
if (!empty($rawnom['enrg_abreviation_rang'])) { |
$nom .= ' '.$rawnom['enrg_abreviation_rang'].''; |
} |
$nom .= ' '.$rawnom['en_epithete_infra_specifique']; |
} |
} |
return $nom .$this->retournerAuteur($rawnom) ; |
} |
function rechercherFamille($taxon,&$DB) { |
$row=array(); |
$query="SELECT DISTINCT en_ce_rang, etr_id_taxon_2, en_id_nom, en_nom_supra_generique ". |
" FROM eflore_taxon_relation, eflore_selection_nom, eflore_nom ". |
" WHERE etr_id_taxon_1 = ".$taxon. |
" AND etr_id_version_projet_taxon_1 = 25 ". |
" AND etr_id_categorie_taxon = 3 ". |
" AND etr_id_valeur_taxon = 3 ". |
" AND esn_id_taxon = etr_id_taxon_2 ". |
" AND esn_ce_statut = 3 ". |
" AND esn_id_version_projet_taxon = etr_id_version_projet_taxon_1 ". |
" AND en_id_nom = esn_id_nom ". |
" AND esn_id_version_projet_taxon=en_id_version_projet_nom "; |
$res =& $DB->query($query); |
if (DB::isError($res)) { |
die($res->getMessage()); |
} |
if ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) { |
return $row; |
} |
else { |
$row['en_ce_rang']='fin'; |
return $row; |
} |
} |
function retournerAuteur($rawnom) { |
$auteurs = ''; |
$auteur_basio = ''; |
$auteur_modif = ''; |
if (!empty($rawnom['abreviation_auteur_basio_ex']) && $rawnom['abreviation_auteur_basio_ex']!='-' ) { |
$auteur_basio .= $rawnom['abreviation_auteur_basio_ex']; |
if (!empty($rawnom['abreviation_auteur_basio']) && $rawnom['abreviation_auteur_basio']!='-') { |
$auteur_basio .= ' ex '.$rawnom['abreviation_auteur_basio']; |
} |
} else if (!empty($rawnom['abreviation_auteur_basio']) && $rawnom['abreviation_auteur_basio']!='-') { |
$auteur_basio .= $rawnom['abreviation_auteur_basio']; |
} |
if (!empty($rawnom['abreviation_auteur_modif_ex']) && $rawnom['abreviation_auteur_modif_ex']!='-') { |
$auteur_modif .= $rawnom['abreviation_auteur_modif_ex']; |
if (!empty($rawnom['abreviation_auteur_modif']) && $rawnom['abreviation_auteur_modif']!='-') { |
$auteur_modif .= ' ex '.$rawnom['abreviation_auteur_modif']; |
} |
} else if (!empty($rawnom['abreviation_auteur_modif']) && $rawnom['abreviation_auteur_modif']!='-') { |
$auteur_modif .= $rawnom['abreviation_auteur_modif']; |
} |
if (!empty($auteur_modif)) { |
$auteurs = ' ('.$auteur_basio.') '.$auteur_modif; |
} elseif (!empty($auteur_basio)) { |
$auteurs = ' '.$auteur_basio; |
} |
return $auteurs ; |
} |
} |
?> |
/trunk/jrest/services/squelettes/rss2.tpl.xml |
---|
New file |
0,0 → 1,23 |
<?php echo '<?xml version="1.0" encoding="UTF-8"?>'."\n";?> |
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"> |
<channel> |
<title><?=$titre?></title> |
<link><?=$lien?></link> |
<atom:link href="<?=$lien_service?>" rel="self" type="application/rss+xml" /> |
<description><?=$description?></description> |
<?php if (isset($items)) : ?> |
<?php foreach ($items as $item) : ?> |
<item> |
<guid><?=$item['guid']?></guid> |
<title><?=$item['titre']?></title> |
<link><?=$item['lien']?></link> |
<description><?=$item['description_encodee']?></description> |
<category><?= $item['categorie'] ?></category> |
<pubDate><?=$item['date_maj_RSS']?></pubDate> |
</item> |
<?php endforeach; ?> |
<?php endif; ?> |
</channel> |
</rss> |
/trunk/jrest/services/squelettes/carte_defaut.tpl.html |
---|
New file |
0,0 → 1,68 |
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> |
<html xmlns="http://www.w3.org/1999/xhtml"> |
<head> |
<title>Google Maps API Example - Observations</title> |
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/> |
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> |
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script> |
<script type="text/javascript" src="<?=$url_base?>services/squelettes/markerclusterer_compiled.js"></script> |
<script src="<?=$url_json?>" type="text/javascript"></script> |
<script type="text/javascript"> |
//<![CDATA[ |
var markerClusterer = null; |
var map = null; |
var imageUrl = 'http://chart.apis.google.com/chart?cht=mm&chs=24x32&chco=FFFFFF,008CFF,000000&ext=.png'; |
var carteCentre = new google.maps.LatLng(46.4, 3.10); |
var carteOptions = { |
zoom: 6, |
center: carteCentre, |
mapTypeId: google.maps.MapTypeId.ROADMAP |
}; |
function refreshMap() { |
if (markerClusterer) { |
markerClusterer.clearMarkers(); |
} |
var markers = []; |
var markerImage = new google.maps.MarkerImage(imageUrl, new google.maps.Size(24, 32)); |
for (var i = 0; i < obs.nombre; ++i) { |
var latLng = new google.maps.LatLng(obs.points[i].coord_x, obs.points[i].coord_y); |
var marker = new google.maps.Marker({ |
position: latLng, |
draggable: true, |
icon: markerImage |
}); |
markers.push(marker); |
} |
markerClusterer = new MarkerClusterer(map, markers); |
} |
function initialize() { |
map = new google.maps.Map(document.getElementById('carte'), carteOptions); |
refreshMap(); |
} |
//]]> |
</script> |
<style type="text/css"> |
html, body { |
margin:0; |
padding:0; |
height: 100%; |
font-family: Arial; |
font-size: 12px;} |
#carte { |
width:100%; |
height:100%; |
</style> |
</head> |
<body onload="initialize()"> |
<div id="carte"></div> |
</body> |
</html> |
/trunk/jrest/services/squelettes/doublon_defaut.tpl.html |
---|
New file |
0,0 → 1,33 |
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> |
<html xmlns="http://www.w3.org/1999/xhtml"> |
<head> |
<title>Images en doublon - <?=$utilisateur?></title> |
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/> |
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> |
<style type="text/css"> |
html, body { |
margin:0; |
padding:0; |
height: 100%; |
font-family: Arial; |
font-size: 12px;} |
#carte { |
width:100%; |
height:100%; |
</style> |
</head> |
<body> |
<h1>Images en doublon - <?=$utilisateur?></h1> |
<ul> |
<?php foreach ($doublons as $doublon) : ?> |
<li> |
<?php foreach ($doublon as $img) : ?> |
<?=$img['num']?><img src="<?=$img['url']?>" /> |
<?php endforeach; ?> |
</li> |
<?php endforeach; ?> |
</ul> |
</body> |
</html> |
/trunk/jrest/services/squelettes/atom.tpl.xml |
---|
New file |
0,0 → 1,33 |
<?php echo '<?xml version="1.0" encoding="UTF-8"?>'."\n";?> |
<feed xmlns="http://www.w3.org/2005/Atom"> |
<title><?=$titre?></title> |
<link href="<?=$lien_cel?>" rel="alternate" type="text/html" hreflang="fr" /> |
<link href="<?=$lien_service?>" rel="self" type="application/atom+xml"/> |
<updated><?=$date_maj_ATOM?></updated> |
<author> |
<name><?=$editeur?></name> |
</author> |
<id><?=$guid?></id> |
<rights>Copyright (c) <?=$annee_courante?>, <?=$editeur?></rights> |
<generator uri="<?=$lien_coel?>" version="<?=$generateur_version?>"><?=$generateur?></generator> |
<?php if (isset($items)) : ?> |
<?php foreach ($items as $item) : ?> |
<entry> |
<id><?=$item['guid']?></id> |
<title><?=$item['titre']?></title> |
<link href="<?=$item['lien']?>"/> |
<updated><?=$item['date_maj_ATOM']?></updated> |
<author><name><?=$item['modifier_par']?></name></author> |
<content type="xhtml" xml:lang="fr"> |
<div xmlns="http://www.w3.org/1999/xhtml"> |
<?=$item['description'];?> |
</div> |
</content> |
</entry> |
<?php endforeach; ?> |
<?php endif; ?> |
</feed> |
/trunk/jrest/services/squelettes/markerclusterer_compiled.js |
---|
New file |
0,0 → 1,0 |
function d(a){return function(b){this[a]=b}}function f(a){return function(){return this[a]}}var g; function i(a,b,c){this.extend(i,google.maps.OverlayView);this.b=a;this.a=[];this.l=[];this.V=[53,56,66,78,90];this.j=[];this.v=false;c=c||{};this.f=c.gridSize||60;this.R=c.maxZoom||null;this.j=c.styles||[];this.Q=c.imagePath||this.J;this.P=c.imageExtension||this.I;this.W=c.zoomOnClick||true;k(this);this.setMap(a);this.D=this.b.getZoom();var e=this;google.maps.event.addListener(this.b,"zoom_changed",function(){if(this.D!=e.b.getZoom()){this.D=e.b.getZoom();e.m()}});google.maps.event.addListener(this.b, "bounds_changed",function(){e.i()});b&&b.length&&this.z(b,false)}g=i.prototype;g.J="http://google-maps-utility-library-v3.googlecode.com/svn/trunk/markerclusterer/images/m";g.I="png";g.extend=function(a,b){return function(c){for(property in c.prototype)this.prototype[property]=c.prototype[property];return this}.apply(a,[b])};g.onAdd=function(){if(!this.v){this.v=true;l(this)}};g.O=function(){};g.draw=function(){}; function k(a){for(var b=0,c;c=a.V[b];b++)a.j.push({url:a.Q+(b+1)+"."+a.P,height:c,width:c})}g=i.prototype;g.u=f("j");g.L=f("a");g.N=f("a");g.C=function(){return this.R||this.b.mapTypes[this.b.getMapTypeId()].maxZoom};g.A=function(a,b){for(var c=0,e=a.length,h=e;h!==0;){h=parseInt(h/10,10);c++}c=Math.min(c,b);return{text:e,index:c}};g.T=d("A");g.B=f("A");g.z=function(a,b){for(var c=0,e;e=a[c];c++)m(this,e);b||this.i()}; function m(a,b){b.setVisible(false);b.setMap(null);b.q=false;b.draggable&&google.maps.event.addListener(b,"dragend",function(){b.q=false;a.m();a.i()});a.a.push(b)}g=i.prototype;g.o=function(a,b){m(this,a);b||this.i()};g.S=function(a){var b=-1;if(this.a.indexOf)b=this.a.indexOf(a);else for(var c=0,e;e=this.a[c];c++)if(e==a)b=c;if(b==-1)return false;this.a.splice(b,1);a.setVisible(false);a.setMap(null);this.m();this.i();return true};g.M=function(){return this.l.length};g.getMap=f("b");g.setMap=d("b"); g.t=f("f");g.U=d("f");function n(a,b){var c=a.getProjection(),e=new google.maps.LatLng(b.getNorthEast().lat(),b.getNorthEast().lng()),h=new google.maps.LatLng(b.getSouthWest().lat(),b.getSouthWest().lng());e=c.fromLatLngToDivPixel(e);e.x+=a.f;e.y-=a.f;h=c.fromLatLngToDivPixel(h);h.x-=a.f;h.y+=a.f;e=c.fromDivPixelToLatLng(e);c=c.fromDivPixelToLatLng(h);b.extend(e);b.extend(c);return b}i.prototype.K=function(){this.m();this.a=[]}; i.prototype.m=function(){for(var a=0,b;b=this.l[a];a++)b.remove();for(a=0;b=this.a[a];a++){b.q=false;b.setMap(null);b.setVisible(false)}this.l=[]};i.prototype.i=function(){l(this)}; function l(a){if(a.v)for(var b=n(a,new google.maps.LatLngBounds(a.b.getBounds().getSouthWest(),a.b.getBounds().getNorthEast())),c=0,e;e=a.a[c];c++){var h=false;if(!e.q&&b.contains(e.getPosition())){for(var q=0,j;j=a.l[q];q++)if(!h&&j.getCenter()&&j.s.contains(e.getPosition())){h=true;j.o(e);break}if(!h){j=new o(a);j.o(e);a.l.push(j)}}}}function o(a){this.h=a;this.b=a.getMap();this.f=a.t();this.d=null;this.a=[];this.s=null;this.k=new p(this,a.u(),a.t())} o.prototype.o=function(a){var b;a:if(this.a.indexOf)b=this.a.indexOf(a)!=-1;else{b=0;for(var c;c=this.a[b];b++)if(c==a){b=true;break a}b=false}if(b)return false;if(!this.d){this.d=a.getPosition();r(this)}if(this.a.length==0){a.setMap(this.b);a.setVisible(true)}else if(this.a.length==1){this.a[0].setMap(null);this.a[0].setVisible(false)}a.q=true;this.a.push(a);if(this.b.getZoom()>this.h.C())for(a=0;b=this.a[a];a++){b.setMap(this.b);b.setVisible(true)}else if(this.a.length<2)s(this.k);else{a=this.h.u().length; b=this.h.B()(this.a,a);this.k.setCenter(this.d);a=this.k;a.w=b;a.ba=b.text;a.X=b.index;if(a.c)a.c.innerHTML=b.text;b=Math.max(0,a.w.index-1);b=Math.min(a.j.length-1,b);b=a.j[b];a.H=b.url;a.g=b.height;a.n=b.width;a.F=b.Z;a.anchor=b.Y;a.G=b.$;this.k.show()}return true};o.prototype.getBounds=function(){r(this);return this.s};o.prototype.remove=function(){this.k.remove();delete this.a};o.prototype.getCenter=f("d");function r(a){a.s=n(a.h,new google.maps.LatLngBounds(a.d,a.d))}o.prototype.getMap=f("b"); function p(a,b,c){a.h.extend(p,google.maps.OverlayView);this.j=b;this.aa=c||0;this.p=a;this.d=null;this.b=a.getMap();this.w=this.c=null;this.r=false;this.setMap(this.b)} p.prototype.onAdd=function(){this.c=document.createElement("DIV");if(this.r){this.c.style.cssText=t(this,u(this,this.d));this.c.innerHTML=this.w.text}this.getPanes().overlayImage.appendChild(this.c);var a=this;google.maps.event.addDomListener(this.c,"click",function(){var b=a.p.h;google.maps.event.trigger(b,"clusterclick",[a.p]);if(b.W){a.b.panTo(a.p.getCenter());a.b.fitBounds(a.p.getBounds())}})}; function u(a,b){var c=a.getProjection().fromLatLngToDivPixel(b);c.x-=parseInt(a.n/2,10);c.y-=parseInt(a.g/2,10);return c}p.prototype.draw=function(){if(this.r){var a=u(this,this.d);this.c.style.top=a.y+"px";this.c.style.left=a.x+"px"}};function s(a){if(a.c)a.c.style.display="none";a.r=false}p.prototype.show=function(){if(this.c){this.c.style.cssText=t(this,u(this,this.d));this.c.style.display=""}this.r=true};p.prototype.remove=function(){this.setMap(null)}; p.prototype.onRemove=function(){if(this.c&&this.c.parentNode){s(this);this.c.parentNode.removeChild(this.c);this.c=null}};p.prototype.setCenter=d("d"); function t(a,b){var c=[];document.all?c.push('filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale,src="'+a.H+'");'):c.push("background:url("+a.H+");");if(typeof a.e==="object"){typeof a.e[0]==="number"&&a.e[0]>0&&a.e[0]<a.g?c.push("height:"+(a.g-a.e[0])+"px; padding-top:"+a.e[0]+"px;"):c.push("height:"+a.g+"px; line-height:"+a.g+"px;");typeof a.e[1]==="number"&&a.e[1]>0&&a.e[1]<a.n?c.push("width:"+(a.n-a.e[1])+"px; padding-left:"+a.e[1]+"px;"):c.push("width:"+a.n+"px; text-align:center;")}else c.push("height:"+ a.g+"px; line-height:"+a.g+"px; width:"+a.n+"px; text-align:center;");c.push("cursor:pointer; top:"+b.y+"px; left:"+b.x+"px; color:"+(a.F?a.F:"black")+"; position:absolute; font-size:"+(a.G?a.G:11)+"px; font-family:Arial,sans-serif; font-weight:bold");return c.join("")}window.MarkerClusterer=i;i.prototype.addMarker=i.prototype.o;i.prototype.addMarkers=i.prototype.z;i.prototype.clearMarkers=i.prototype.K;i.prototype.getCalculator=i.prototype.B;i.prototype.getGridSize=i.prototype.t; i.prototype.getMap=i.prototype.getMap;i.prototype.getMarkers=i.prototype.L;i.prototype.getMaxZoom=i.prototype.C;i.prototype.getStyles=i.prototype.u;i.prototype.getTotalClusters=i.prototype.M;i.prototype.getTotalMarkers=i.prototype.N;i.prototype.redraw=i.prototype.i;i.prototype.removeMarker=i.prototype.S;i.prototype.resetViewport=i.prototype.m;i.prototype.setCalculator=i.prototype.T;i.prototype.setGridSize=i.prototype.U;i.prototype.onAdd=i.prototype.onAdd;i.prototype.draw=i.prototype.draw; i.prototype.idle=i.prototype.O;p.prototype.onAdd=p.prototype.onAdd;p.prototype.draw=p.prototype.draw;p.prototype.onRemove=p.prototype.onRemove; |
/trunk/jrest/services/squelettes/.directory |
---|
New file |
0,0 → 1,5 |
[Dolphin] |
Timestamp=2010,10,19,15,0,41 |
[Settings] |
ShowDotFiles=true |
/trunk/jrest/services/squelettes/opml.tpl.xml |
---|
New file |
0,0 → 1,18 |
<?php echo '<?xml version="1.0" encoding="UTF-8"?>'."\n";?> |
<opml version="1.0"> |
<head> |
<text/> |
</head> |
<body> |
<outline text="CEL"> |
<?php foreach ($liste_flux as $flux) : ?> |
<outline title="<?=$flux['titre']?>" |
description="<?=$flux['description']?>" |
htmlUrl="<?=$flux['url_html']?>" |
xmlUrl="<?=$flux['url_xml']?>" |
type="<?=$flux['type']?>" |
text="<?=$flux['texte']?>"/> |
<?php endforeach; ?> |
</outline> |
</body> |
</opml> |
/trunk/jrest/services/squelettes/rss1.tpl.xml |
---|
New file |
0,0 → 1,46 |
<?php echo '<?xml version="1.0" encoding="UTF-8"?>'."\n";?> |
<!DOCTYPE rdf:RDF [ |
<!ENTITY % HTMLlat1 PUBLIC |
"-//W3C//ENTITIES Latin 1 for XHTML//EN" |
"http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent"> |
%HTMLlat1; |
]> |
<rdf:RDF |
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" |
xmlns:dc="http://purl.org/dc/elements/1.1/" |
xmlns="http://purl.org/rss/1.0/"> |
<channel rdf:about="<?=$guid?>"> |
<title><?=$titre?></title> |
<link><?=$lien?></link> |
<description><?=$description?></description> |
<dc:publisher><?=$editeur?></dc:publisher> |
<dc:date><?=$date_maj_W3C?></dc:date> |
<?php if (isset($items)) : ?> |
<items> |
<rdf:Seq> |
<?php foreach ($items as $item) : ?> |
<rdf:li resource="<?=$item['guid']?>" /> |
<?php endforeach; ?> |
</rdf:Seq> |
</items> |
<?php endif; ?> |
</channel> |
<?php if (isset($items)) : ?> |
<?php foreach ($items as $item) : ?> |
<item rdf:about="<?=$item['guid']?>"> |
<title><?=$item['titre']?></title> |
<link><?=$item['lien']?></link> |
<description><?=$item['description_encodee']?></description> |
<category><?= $item['categorie'] ?></category> |
<dc:date><?=$item['date_maj_W3C']?></dc:date> |
</item> |
<?php endforeach; ?> |
<?php endif; ?> |
</rdf:RDF> |
/trunk/jrest/services/InventoryItemList.php |
---|
New file |
0,0 → 1,201 |
<?php |
// In : utf8 |
// Out : utf8 |
Class InventoryItemList extends DBAccessor { |
var $config; |
function InventoryItemList($config) { |
$this->config=$config; |
} |
function getElement($uid){ |
// Controle detournement utilisateur |
session_start(); |
$this->controleUtilisateur($uid[0]); |
// uid[0] : utilisateur obligatoire |
// uid[1] : si absent : valeur 'all' (departement) |
// uid[2] : si absent : valeur 'all' (commune) |
// uid[3] : si absent : valeur 'all' (annee) |
// uid[4] : si absent : valeur 'all' (mois) |
// uid[5] : si absent : valeur 'all' (jour) |
// uid[6] : si absent : valeur 'all' (recherche libre) |
// uid[7] : si absent : valeur 'all' (lieudit) |
// uid[8] et uid[9] : selection intervalle |
$DB=$this->connectDB($this->config,'database_cel'); |
if (!isset($uid[1]) || $uid[1]=="" || $uid[1]=="all" ) { |
$uid[1]="all"; |
$query_id_location=""; |
} |
else { |
$query_id_location=" AND id_location='".$DB->escapeSimple($uid[1])."' "; |
} |
if (!isset($uid[2]) || $uid[2]=="" || $uid[2]=="all" ) { |
$uid[2]="all"; |
$query_location=""; |
} |
else { |
$query_location=" AND location='".$DB->escapeSimple($uid[2])."' "; |
} |
if (!isset($uid[3]) || $uid[3]=="" || $uid[3]=="all") { |
$uid[3]="all"; |
$query_year=""; |
} |
else { |
$query_year=" AND year(date_observation)='".$DB->escapeSimple($uid[3])."' "; |
} |
if (!isset($uid[4]) || $uid[4]=="" || $uid[4]=="all") { |
$uid[4]="all"; |
$query_month=""; |
} |
else { |
$query_month=" AND month(date_observation)='".$DB->escapeSimple($uid[4])."' "; |
} |
if (!isset($uid[5]) || $uid[5]=="" || $uid[5]=="all") { |
$uid[5]="all"; |
$query_day=""; |
} |
else { |
$query_day=" AND day(date_observation)='".$DB->escapeSimple($uid[5])."' "; |
} |
if (!isset($uid[6]) || $uid[6]=="" || $uid[6]=="all") { |
$uid[6]="all"; |
$query_libre=""; |
} |
else { |
$query_libre=" AND (nom_sel like '%".$DB->escapeSimple($uid[6])."%' OR nom_ret like '%".$DB->escapeSimple($uid[6])."%' OR station like '%".$DB->escapeSimple($uid[6])."%' OR milieu like '%".$DB->escapeSimple($uid[6])."%' OR commentaire like '%".$DB->escapeSimple($uid[6])."%') "; |
} |
if (!isset($uid[7]) || $uid[7]=="" || $uid[7]=="all") { |
$uid[7]="all"; |
$query_lieudit=""; |
} |
else { |
$query_lieudit=" AND lieudit='".$DB->escapeSimple($uid[7])."' "; |
} |
$value=array(); |
if (isset($uid[8]) && isset($uid[9])) { |
$query="SELECT identifiant, ordre, nom_sel, num_nom_sel, nom_ret, num_nom_ret, num_taxon, famille, location, date_observation," . |
" lieudit, station, milieu, commentaire, transmission FROM cel_inventory WHERE identifiant='".$DB->escapeSimple($uid[0])."' " . |
$query_id_location. |
$query_location. |
$query_year. |
$query_month. |
$query_day. |
$query_libre. |
$query_lieudit. |
" ORDER BY ordre LIMIT ".$uid[8].",".$uid[9]; |
} |
else { |
if (isset($uid[8])) { |
// les n derniers |
$query="SELECT identifiant, ordre, nom_sel, num_nom_sel, nom_ret, num_nom_ret, num_taxon, famille, location, date_observation," . |
" lieudit, station, milieu, commentaire, transmission FROM cel_inventory WHERE identifiant='".$DB->escapeSimple($uid[0])."' " . |
$query_id_location. |
$query_location. |
$query_year. |
$query_month. |
$query_day. |
$query_libre. |
$query_lieudit. |
" ORDER BY ordre LIMIT ".$uid[8].",18446744073709551615"; |
} |
else { |
$query="SELECT count(*) as count FROM cel_inventory WHERE identifiant='".$DB->escapeSimple($uid[0])."'" . |
$query_id_location. |
$query_location. |
$query_year. |
$query_month. |
$query_day. |
$query_libre. |
$query_lieudit; |
$res =& $DB->query($query); |
if (DB::isError($res)) { |
die($res->getMessage()); |
} |
while ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) { |
$value=$row['count']; |
} |
$json = new Services_JSON(); |
$output = $json->encode((integer)$value); |
print($output); |
return true; |
} |
} |
$res =& $DB->query($query); |
if (DB::isError($res)) { |
die($res->getMessage()); |
} |
while ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) { |
if ($row['date_observation']!="0000-00-00 00:00:00") { |
list($year,$month,$day)= split ('-',$row['date_observation']); |
list($day)= split (' ',$day); |
$row['date_observation']=$day."/".$month."/".$year; |
} |
$value[]=array($row['nom_sel'], $row['num_nom_sel'],$row['nom_ret'],$row['num_nom_ret'],$row['num_taxon'],$row['famille'], $row['location'], $row['ordre'], $row['date_observation'], $row['lieudit'], $row['station'], $row['milieu'], $row['commentaire'], $row['transmission']); |
} |
$json = new Services_JSON(); |
$output = $json->encode($value); |
print($output); |
return true; |
} |
} |
/* +--Fin du code ---------------------------------------------------------------------------------------+ |
* $Log$ |
* Revision 1.7 2008-11-13 11:29:12 ddelon |
* Reecriture gwt-ext |
* |
* Revision 1.6 2008-01-30 08:57:28 ddelon |
* fin mise en place mygwt |
* |
* Revision 1.5 2007-05-22 12:54:08 ddelon |
* Securisation acces utilisateur |
* |
* |
* |
*/ |
?> |