Rev 2458 | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php// declare(encoding='UTF-8');/*** Service générant un PDF d'export des observations pour réaliser des étiquettes d'herbier.** @internal Mininum PHP version : 5.2* @category CEL* @package Services* @subpackage Export* @version 0.1* @author Mathias CHOUET <mathias@tela-botanica.org>* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>* @author Aurelien PERONNET <aurelien@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>* @copyright 1999-2014 Tela Botanica <accueil@tela-botanica.org>*//** 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 Cel {var $extendPDFProductor;public function __construct($config) {parent::__construct($config);$this->config = $config;// Pas d'heritage multiple en php :($this->extendPDFProductor = new PDFProductor();$this->extendPDFProductor->initPDF();}/*** 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)*/public function getElement($uid){// Controle detournement utilisateur$this->controleUtilisateur($uid[0]);if (!isset($uid[1]) || $uid[1] == '' || $uid[1] == 'all' ) {$uid[1] = 'all';$requete_location = '';} else {$requete_location = ' AND location= '.Cel::db()->proteger($uid[1]).' ';}if (!isset($uid[2]) || $uid[2] == '' || $uid[2] == 'all') {$uid[2] = 'all';$requete_date = '';} else {$requete_date = ' AND date_observation= '.Cel::db()->proteger($uid[2]).' ';}if (!isset($uid[3]) || $uid[3] == '' || $uid[3] == 'all') {$uid[3] = 'all';$requete_libre = '';} else {$requete_libre = ' AND (nom_sel LIKE '.Cel::db()->proteger('%'.$uid[3].'%').' OR nom_ret LIKE '.Cel::db()->proteger('%'.$uid[3].'%').' OR station LIKE '.Cel::db()->proteger('%'.$uid[3].'%').' OR commentaire LIKE '.Cel::db()->proteger('%'.$uid[3].'%');}if (!isset($uid[4]) || $uid[4] == '' || $uid[4] == 'all') {$uid[4] = 'all';$requete_station ='';} else {$requete_station = ' AND station= '.Cel::db()->proteger($uid[4]).' ';}$value = array();$requete = 'SELECT ce_utilisateur, ordre, nom_sel, nom_sel_nn, nom_ret, nom_ret_nn, nt, famille, zone_geo, date_observation, '.'station, commentaire, transmission '.'FROM cel_obs '.'WHERE ce_utilisateur = '.Cel::db()->proteger($uid[0]).' '.$requete_location.$requete_date.$requete_libre.$requete_station.' '.'ORDER BY ordre '.' -- '.__FILE__.':'.__LINE__;$resultat = Cel::db()->requeter($requete);$observations = array();;if (is_array($resultat)) {$observations = $resultat;}// 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('', '');foreach ($observations as $obs) {// Denullifiageforeach($obs as $k=>$v) {if (($v == 'null') || ($v == '000null')) {$obs[$k] = '';} else {$obs[$k] = utf8_decode($v);}}if ($obs['date_observation'] != '0000-00-00 00:00:00') {list($year,$month,$day)= explode('-', $obs['date_observation']);list($day)= explode(' ', $day);$obs['date_observation'] = "$day/$month/$year";} else {$obs['date_observation'] = '00/00/0000';}$text = $obs['nom_sel']." ".$obs['nom_sel_nn']." ".$obs['nom_ret']." ".$obs['nom_ret_nn']." ".$obs['nt']." ".$obs['famille']." ".$obs['zone_geo']." ".$obs['ce_zone_geo']." ".$obs['date_observation']." ".$obs['station'];$obs['commentaire'];$pdf->write(10, $text."\n");$projet_photo = 'photoflora';$tab_retour[$projet_photo] = $this->analyserRdf(sprintf(EF_URL_PHOTOFLORA_SERVICE, $obs['nt']));$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 pngif (strstr($fichier, '.png')) {break;}}}if ($url_miniature != '') {list($debut,$ext)=explode('\.',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++;}echo $pdf->output('Rapport');}private function analyserRdf($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;}}