Subversion Repositories eFlore/Applications.cel

Rev

Rev 423 | Rev 892 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
416 aurelien 1
<?php
2
/**
3
 
4
 David Delon david.delon@clapas.net 2007
5
 
6
 Ce logiciel est r�gi par la licence CeCILL soumise au droit fran�ais et
7
 respectant les principes de diffusion des logiciels libres. Vous pouvez
8
 utiliser, modifier et/ou redistribuer ce programme sous les conditions
9
 de la licence CeCILL telle que diffus�e par le CEA, le CNRS et l'INRIA
10
 sur le site "http://www.cecill.info".
11
 En contrepartie de l'accessibilit� au code source et des droits de copie,
12
 de modification et de redistribution accord�s par cette licence, il n'est
13
 offert aux utilisateurs qu'une garantie limit�e.  Pour les m�mes raisons,
14
 seule une responsabilit� restreinte p�se sur l'auteur du programme,  le
15
 titulaire des droits patrimoniaux et les conc�dants successifs.
16
 
17
 A cet �gard  l'attention de l'utilisateur est attir�e sur les risques
18
 associ�s au chargement,  � l'utilisation,  � la modification et/ou au
19
 d�veloppement et � la reproduction du logiciel par l'utilisateur �tant
20
 donn� sa sp�cificit� de logiciel libre, qui peut le rendre complexe �
21
 manipuler et qui le r�serve donc � des d�veloppeurs et des professionnels
22
 avertis poss�dant  des  connaissances  informatiques approfondies.  Les
23
 utilisateurs sont donc invit�s � charger  et  tester  l'ad�quation  du
24
 logiciel � leurs besoins dans des conditions permettant d'assurer la
25
 s�curit� de leurs syst�mes et ou de leurs donn�es et, plus g�n�ralement,
26
 � l'utiliser et l'exploiter dans les m�mes conditions de s�curit�.
27
 
28
 Le fait que vous puissiez acc�der � cet en-t�te signifie que vous avez
29
 pris connaissance de la licence CeCILL, et que vous en avez accept� les
30
 termes.
31
 
32
 */
33
 
34
// in : utf8
35
// out : 8859
36
/*
37
 * NameImage.php
38
 *
39
 * Cas d'utilisation :
40
 * Service recherche d'image a partir d'un numero nomenclatural
41
 *
42
 * 1: Le service recoit un numero nomenclatural
43
 * 2: Le service calcul le numero taxonomique associe
44
 * 3: Le service recherche une image disponible pour ce numero taxonomique
45
 * 4: Le service redimensionne l'image et la renvoie
46
 */
47
 
48
/** Constante stockant l'URL de la page d'accueil de Photoflora.*/
49
define('EF_URL_PHOTOFLORA', 'http://photoflora.free.fr/');
876 aurelien 50
/** Constante stockant l'URL de la page de Photoflora affichant toutes les images d'un taxon donné.*/
416 aurelien 51
define('EF_URL_PHOTOFLORA_TAXON', EF_URL_PHOTOFLORA.'FiTax.php?NumTaxon=%s');
52
/** Constante stockant l'URL du dossier de photoflora contenant les images miniatures.*/
53
define('EF_URL_PHOTOFLORA_IMG_MIN', 'http://photoflora.free.fr/photos/%s/min/%s');
54
/** Constante stockant l'URL du service XML de Photoflora.*/
55
define('EF_URL_PHOTOFLORA_SERVICE', EF_URL_PHOTOFLORA.'ef_photoflora.php?nt=%s');
56
 
57
define('EF_URL_PHOTOFLORA_REGEXP_01', '/\/photos\/([^\/]+)\/max\/(.+)$/');
58
define('EF_URL_PHOTOFLORA_REGEXP_02', '/photoflora([^.]+)\.free\.fr\/max\/(.+)$/');
59
 
876 aurelien 60
class NameImage extends Cel  {
416 aurelien 61
 
62
	function getElement($uid){
63
 
64
		// Num nomenclatural
876 aurelien 65
		$requete_num_nom = "SELECT DISTINCT b.esn_id_taxon FROM eflore_nom, eflore_nom_rang," .
66
		" eflore_selection_nom a, eflore_selection_nom b".
67
		" WHERE a.esn_id_nom= ".$this->proteger($uid[0]).
68
		" AND a.esn_id_version_projet_taxon = 25 ".
69
		" AND a.esn_id_taxon=b.esn_id_taxon ".
70
		" AND b.esn_ce_statut=3 ".
71
		" AND a.esn_id_version_projet_taxon=b.esn_id_version_projet_taxon" .
72
		" AND en_ce_rang = enrg_id_rang" .
73
		" AND en_id_nom = b.esn_id_nom" .
74
		" AND a.esn_id_version_projet_taxon=en_id_version_projet_nom ";
416 aurelien 75
 
876 aurelien 76
	    $res_num_nom = $this->requeter($requete_num_nom);
77
 
78
		$nt = null;
79
		if(is_array($res_num_nom) && count($res_num_nom) > 0) {
80
			$nt=$res_num_nom[0]['esn_id_taxon'];
81
		}
416 aurelien 82
 
83
		$projet_photo = 'photoflora';
84
 
85
		$tab_retour[$projet_photo]=chercherIllustrationsServiceXml(sprintf(EF_URL_PHOTOFLORA_SERVICE, $nt));
86
 
87
		$value=array('null','null');
88
 
89
		foreach ($tab_retour[$projet_photo] as $cle => $illustration) {
90
 
91
 
92
			if (preg_match(EF_URL_PHOTOFLORA_REGEXP_01, $illustration['about'], $match)) {
93
                    $abreviation = $match[1];
94
                    $fichier = $match[2];
95
			}
96
			else {
97
 
98
				if (preg_match(EF_URL_PHOTOFLORA_REGEXP_02, $illustration['about'], $match)) {
99
						$abreviation = $match[1];
100
						 $fichier = $match[2];
101
				}
102
			}
103
 
104
			if (isset($abreviation)) {
105
 
106
			      	$url_miniature = sprintf(EF_URL_PHOTOFLORA_IMG_MIN, $abreviation, $fichier);;
107
			      	$url_max = $illustration['about'];
108
 
109
					$value=array($url_miniature,$url_max);
423 aurelien 110
 
111
					// Priorite aux images en png
416 aurelien 112
					if (strstr($fichier, '.png')) {
113
						break;
114
					}
115
			}
116
 
117
		}
118
 
423 aurelien 119
		$output = json_encode($value);
416 aurelien 120
		print($output);
121
	}
122
 
123
}
124
 
125
function chercherIllustrationsServiceXml($url)
126
{
127
		return  analyserFichierRdf($url);
128
}
129
 
130
function analyserFichierRdf($chemin)
131
{
423 aurelien 132
	$aso_info = array();
133
	$dom = new DOMDocument();
134
	$dom->validateOnParse = true;
135
	if (preg_match('/^http:\/\//', $chemin)) {
136
		@$dom->loadXML(file_get_contents($chemin));
137
	} else {
138
		@$dom->load($chemin);
139
	}
416 aurelien 140
 
141
 
423 aurelien 142
	$tab_infos = array();
143
	foreach ($dom->getElementsByTagNameNS('http://www.w3.org/1999/02/22-rdf-syntax-ns#', 'Description') as $rdf_description) {
144
		$aso_info['about'] = $rdf_description->getAttribute('about');
145
		$aso_info['dc:identifier'] = $rdf_description->getAttribute('identifier');
146
		$aso_info['dc:title'] = utf8_decode($rdf_description->getAttribute('title'));
147
		$aso_info['dc:creator'] = utf8_decode($rdf_description->getAttribute('creator'));
148
		$aso_info['dc:contributor'] = utf8_decode($rdf_description->getAttribute('contributor'));
149
		$aso_info['dc:publisher'] = utf8_decode($rdf_description->getAttribute('publisher'));
150
		$aso_info['dc:type'] = utf8_decode($rdf_description->getAttribute('type'));
151
		$aso_info['dc:format'] = utf8_decode($rdf_description->getAttribute('format'));
152
		if (function_exists('date_default_timezone_set')) {
153
			date_default_timezone_set('Europe/Paris');
154
		}
155
		if (preg_match('/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/', $rdf_description->getAttribute('created'))) {
876 aurelien 156
			$aso_info['dcterms:created'] = date('j-m-Y à H:i:s', strtotime($rdf_description->getAttribute('created')));
416 aurelien 157
		} else {
423 aurelien 158
			$aso_info['dcterms:created'] = $rdf_description->getAttribute('created');
416 aurelien 159
		}
423 aurelien 160
		$aso_info['dcterms:dateSubmitted'] = utf8_decode($rdf_description->getAttribute('dateSubmitted'));
161
		$aso_info['dcterms:spatial'] = utf8_decode($rdf_description->getAttribute('spatial'));
162
		$aso_info['dcterms:licence'] = utf8_decode($rdf_description->getAttribute('licence'));
163
		$tab_infos[$rdf_description->getAttribute('identifier')] = $aso_info;
164
	}
416 aurelien 165
 
423 aurelien 166
	return $tab_infos;
416 aurelien 167
}
168
 
169
 
170
/* +--Fin du code ---------------------------------------------------------------------------------------+
171
* $Log$
172
* Revision 1.4  2008-11-13 11:29:12  ddelon
173
* Reecriture gwt-ext
174
*
175
* Revision 1.2  2008-01-30 08:57:28  ddelon
176
* fin mise en place mygwt
177
*
178
* Revision 1.1  2007-06-06 13:31:16  ddelon
179
* v0.09
180
*
181
*/
876 aurelien 182
?>