Subversion Repositories eFlore/Applications.cel

Rev

Rev 416 | Rev 876 | 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
 
35
// in : utf8
36
// out : 8859
37
/*
38
 * NameImage.php
39
 *
40
 * Cas d'utilisation :
41
 * Service recherche d'image a partir d'un numero nomenclatural
42
 *
43
 * 1: Le service recoit un numero nomenclatural
44
 * 2: Le service calcul le numero taxonomique associe
45
 * 3: Le service recherche une image disponible pour ce numero taxonomique
46
 * 4: Le service redimensionne l'image et la renvoie
47
 */
48
 
49
 
50
 
51
/** Constante stockant l'URL de la page d'accueil de Photoflora.*/
52
define('EF_URL_PHOTOFLORA', 'http://photoflora.free.fr/');
53
/** Constante stockant l'URL de la page de Photoflora affichant toutes les images d'un taxon donn�es.*/
54
define('EF_URL_PHOTOFLORA_TAXON', EF_URL_PHOTOFLORA.'FiTax.php?NumTaxon=%s');
55
/** Constante stockant l'URL du dossier de photoflora contenant les images miniatures.*/
56
define('EF_URL_PHOTOFLORA_IMG_MIN', 'http://photoflora.free.fr/photos/%s/min/%s');
57
/** Constante stockant l'URL du service XML de Photoflora.*/
58
define('EF_URL_PHOTOFLORA_SERVICE', EF_URL_PHOTOFLORA.'ef_photoflora.php?nt=%s');
59
 
60
define('EF_URL_PHOTOFLORA_REGEXP_01', '/\/photos\/([^\/]+)\/max\/(.+)$/');
61
define('EF_URL_PHOTOFLORA_REGEXP_02', '/photoflora([^.]+)\.free\.fr\/max\/(.+)$/');
62
 
63
 
64
 
65
 
66
Class NameImage extends DBAccessor  {
67
 
68
 
69
	var $config;
70
 
71
	function NameImage($config) {
72
 
73
		$this->config=$config;
74
	}
75
 
76
 
77
	function getElement($uid){
78
 
79
 
80
		// Num nomenclatural
81
		$DB=$this->connectDB($this->config);
82
	    $query = "SELECT DISTINCT b.esn_id_taxon FROM eflore_nom, eflore_nom_rang," .
83
	     " eflore_selection_nom a, eflore_selection_nom b".
84
	     " WHERE a.esn_id_nom= ".$uid[0].
85
	     " AND a.esn_id_version_projet_taxon = 25 ".
86
	     " AND a.esn_id_taxon=b.esn_id_taxon ".
87
	     " AND b.esn_ce_statut=3 ".
88
	     " AND a.esn_id_version_projet_taxon=b.esn_id_version_projet_taxon" .
89
	     " AND en_ce_rang = enrg_id_rang" .
90
	     " AND en_id_nom = b.esn_id_nom" .
91
	     " AND a.esn_id_version_projet_taxon=en_id_version_projet_nom ";
92
 
93
 
94
	        $res =& $DB->query($query);
95
 
96
 
97
	        if (DB::isError($res)) {
98
    	        die($res->getMessage());
99
        	}
100
 
101
 
102
	        while ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) {
103
                $nt=$row['esn_id_taxon'];
104
    	    }
105
 
106
 
107
 
108
		$projet_photo = 'photoflora';
109
 
110
		$tab_retour[$projet_photo]=chercherIllustrationsServiceXml(sprintf(EF_URL_PHOTOFLORA_SERVICE, $nt));
111
 
112
		$value=array('null','null');
113
 
114
		foreach ($tab_retour[$projet_photo] as $cle => $illustration) {
115
 
116
 
117
			if (preg_match(EF_URL_PHOTOFLORA_REGEXP_01, $illustration['about'], $match)) {
118
                    $abreviation = $match[1];
119
                    $fichier = $match[2];
120
			}
121
			else {
122
 
123
				if (preg_match(EF_URL_PHOTOFLORA_REGEXP_02, $illustration['about'], $match)) {
124
						$abreviation = $match[1];
125
						 $fichier = $match[2];
126
				}
127
			}
128
 
129
			if (isset($abreviation)) {
130
 
131
			      	$url_miniature = sprintf(EF_URL_PHOTOFLORA_IMG_MIN, $abreviation, $fichier);;
132
			      	$url_max = $illustration['about'];
133
 
134
					$value=array($url_miniature,$url_max);
423 aurelien 135
 
136
					// Priorite aux images en png
416 aurelien 137
					if (strstr($fichier, '.png')) {
138
						break;
139
					}
140
			}
141
 
142
		}
143
 
423 aurelien 144
		$output = json_encode($value);
416 aurelien 145
		print($output);
146
	}
147
 
148
}
149
 
150
function chercherIllustrationsServiceXml($url)
151
{
152
		return  analyserFichierRdf($url);
153
}
154
 
155
function analyserFichierRdf($chemin)
156
{
423 aurelien 157
	$aso_info = array();
158
	$dom = new DOMDocument();
159
	$dom->validateOnParse = true;
160
	if (preg_match('/^http:\/\//', $chemin)) {
161
		@$dom->loadXML(file_get_contents($chemin));
162
	} else {
163
		@$dom->load($chemin);
164
	}
416 aurelien 165
 
166
 
423 aurelien 167
	$tab_infos = array();
168
	foreach ($dom->getElementsByTagNameNS('http://www.w3.org/1999/02/22-rdf-syntax-ns#', 'Description') as $rdf_description) {
169
		$aso_info['about'] = $rdf_description->getAttribute('about');
170
		$aso_info['dc:identifier'] = $rdf_description->getAttribute('identifier');
171
		$aso_info['dc:title'] = utf8_decode($rdf_description->getAttribute('title'));
172
		$aso_info['dc:creator'] = utf8_decode($rdf_description->getAttribute('creator'));
173
		$aso_info['dc:contributor'] = utf8_decode($rdf_description->getAttribute('contributor'));
174
		$aso_info['dc:publisher'] = utf8_decode($rdf_description->getAttribute('publisher'));
175
		$aso_info['dc:type'] = utf8_decode($rdf_description->getAttribute('type'));
176
		$aso_info['dc:format'] = utf8_decode($rdf_description->getAttribute('format'));
177
		if (function_exists('date_default_timezone_set')) {
178
			date_default_timezone_set('Europe/Paris');
179
		}
180
		if (preg_match('/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/', $rdf_description->getAttribute('created'))) {
181
			$aso_info['dcterms:created'] = date('j-m-Y � H:i:s', strtotime($rdf_description->getAttribute('created')));
416 aurelien 182
		} else {
423 aurelien 183
			$aso_info['dcterms:created'] = $rdf_description->getAttribute('created');
416 aurelien 184
		}
423 aurelien 185
		$aso_info['dcterms:dateSubmitted'] = utf8_decode($rdf_description->getAttribute('dateSubmitted'));
186
		$aso_info['dcterms:spatial'] = utf8_decode($rdf_description->getAttribute('spatial'));
187
		$aso_info['dcterms:licence'] = utf8_decode($rdf_description->getAttribute('licence'));
188
		$tab_infos[$rdf_description->getAttribute('identifier')] = $aso_info;
189
	}
416 aurelien 190
 
423 aurelien 191
	return $tab_infos;
416 aurelien 192
}
193
 
194
 
195
/* +--Fin du code ---------------------------------------------------------------------------------------+
196
* $Log$
197
* Revision 1.4  2008-11-13 11:29:12  ddelon
198
* Reecriture gwt-ext
199
*
200
* Revision 1.2  2008-01-30 08:57:28  ddelon
201
* fin mise en place mygwt
202
*
203
* Revision 1.1  2007-06-06 13:31:16  ddelon
204
* v0.09
205
*
206
*
207
*
208
*
209
*/
210
 
211
 
212
?>