Subversion Repositories eFlore/Applications.cel

Rev

Rev 416 | Rev 876 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

<?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;
                                        }
                        }
        
                }
                
                $output = json_encode($value);
                print($output);
        }
        
}

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; 
        }
                
        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
*
*
*
* 
*/

 
?>