Rev 996 | Blame | Last modification | View Log | RSS feed
<?php
//TODO migrer cette classe lorsqu'elle deviendra utile à nouveau
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 objet
if(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);
// Creating a worksheet
$this->worksheet = $this->workbook->addWorksheet('Liste');
$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
*
*
*
*/
?>