Rev 1610 | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php//TODO migrer cette classe lorsqu'elle deviendra utile à nouveau/****** Attention classe non migrée !!!!*/set_include_path(get_include_path() . PATH_SEPARATOR . dirname(dirname(realpath(__FILE__))) . '/lib');// la sortie est binaire (xls), mais OLE n'est pas compatible E_ALL en PHP-5.4error_reporting(error_reporting() ^ E_STRICT);require_once("lib/OLE.php");require_once("lib/Spreadsheet/Excel/Writer.php");Class InventoryImageExport extends DBAccessor {private $extendSpreadsheetProductor;private $archive;private $workbook;private $worksheet;private $chemin_export_liste;function InventoryImageExport($config) {parent::__construct($config);$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']['taille_max_archive'];$liens_archives = array();$DB=$this->connectDB($this->config,'cel');$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 objetif(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']['url_images'];$id = sprintf('%09s', $id) ;$id = wordwrap($id, 3 , '_', true) ;$niveauDossier = explode("_", $id) ;$dossierNiveau1 = $niveauDossier[0] ;$dossierNiveau2 = $niveauDossier[1] ;$chemin_sur_serveur_final = $chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2 ;$chemin_fichier = $chemin_sur_serveur_final.'/O/'.$id."_O.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']['url_images'];} else {$chemin_sur_serveur = $this->config['cel']['chemin_images'];}$id = sprintf('%09s', $id) ;$id = wordwrap($id, 3 , '_', true) ;$id_fichier = $id.".jpg" ;$niveauDossier = explode("_", $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']['url_export'];} else {return $this->config['cel']['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);$workbook->setVersion(8);// Creating a worksheet$this->worksheet = $this->workbook->addWorksheet('Liste');$worksheet->setInputEncoding('utf-8');$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****/?>