Fix: Data in memory must always be encoded in utf8. PHP files functions need ISO, so we convert data just before and after using them.

This commit is contained in:
Laurent Destailleur
2009-10-04 17:18:09 +00:00
parent e192abc755
commit f68be991ff
15 changed files with 502 additions and 450 deletions

View File

@@ -1094,7 +1094,7 @@ class Categorie
$filename = eregi_replace($dir,'',$file); // Nom du fichier
// On efface l'image d'origine
unlink($file);
dol_delete_file($file,1);
// Si elle existe, on efface la vignette
if (eregi('(\.jpg|\.bmp|\.gif|\.png|\.tiff)$',$filename,$regs))
@@ -1102,7 +1102,7 @@ class Categorie
$photo_vignette=eregi_replace($regs[0],'',$filename).'_small'.$regs[0];
if (file_exists($dirthumb.$photo_vignette))
{
unlink($dirthumb.$photo_vignette);
dol_delete_file($dirthumb.$photo_vignette,1);
}
}
}

View File

@@ -454,23 +454,21 @@ if (eregi('\.\.',$original_file) || eregi('[<>|]',$original_file))
}
if ($action == 'remove_file')
if ($action == 'remove_file') // Remove a file
{
/*
* Suppression fichier
*/
clearstatcache();
$filename = basename($original_file);
dol_syslog("document.php remove $original_file $filename $urlsource", LOG_DEBUG);
dol_syslog("document.php remove $original_file $urlsource", LOG_DEBUG);
if (! file_exists($original_file))
// This test should be useless. We keep it to find bug more easily
$neworiginal_file=utf8_check($original_file)?utf8_decode($original_file):$original_file;
if (! file_exists($neworiginal_file))
{
dol_print_error(0,$langs->trans("ErrorFileDoesNotExists",$_GET["file"]));
exit;
}
unlink($original_file);
dol_delete_file($original_file);
dol_syslog("document.php back to ".urldecode($urlsource), LOG_DEBUG);
@@ -478,23 +476,23 @@ if ($action == 'remove_file')
return;
}
else
else // Open and return file
{
/*
* Open and return file
*/
clearstatcache();
$filename = basename($original_file);
// Output file on browser
dol_syslog("document.php download $original_file $filename content-type=$type");
$neworiginal_file=utf8_check($original_file)?utf8_decode($original_file):$original_file;
if (! file_exists($original_file))
// This test if file exists should be useless. We keep it to find bug more easily
if (! file_exists($neworiginal_file))
{
dol_print_error(0,$langs->trans("ErrorFileDoesNotExists",$original_file));
exit;
}
// Les drois sont ok et fichier trouve, on l'envoie
if ($encoding) header('Content-Encoding: '.$encoding);
@@ -506,7 +504,7 @@ else
header('Cache-Control: Public, must-revalidate');
header('Pragma: public');
readfile($original_file);
readfile($neworiginal_file); // Need a path in ISO
}
?>

View File

@@ -376,7 +376,7 @@ class FormFile
print '</a>';
if (!$iconPDF) print '</td>';
// Affiche taille fichier
if (!$iconPDF) print '<td align="right">'.dol_filesize($filedir."/".$file["name"]).'</td>';
if (!$iconPDF) print '<td align="right">'.dol_print_size(filesize($filedir."/".$file["name"])).'</td>';
// Affiche date fichier
if (!$iconPDF) print '<td align="right">'.dol_print_date(filemtime($filedir."/".$file["name"]),'dayhour').'</td>';
@@ -490,16 +490,4 @@ class FormFile
}
/**
* Return size of a file with units
*
* @param $pathoffile
* @return string File size with units translated
*/
function dol_filesize($pathoffile)
{
global $langs;
return filesize($pathoffile). ' '.$langs->trans("Bytes");
}
?>

View File

@@ -535,10 +535,10 @@ if ($step == 3 && $datatoimport)
print '<input type="hidden" value="'.$datatoimport.'" name="datatoimport">';
print "</tr>\n";
$dir = $conf->import->dir_temp;
// Search available imports
$handle=@opendir($dir);
$dir = $conf->import->dir_temp;
$newdir=utf8_check($dir)?utf8_decode($dir):$dir; // opendir need ISO
$handle=@opendir($newdir);
if ($handle)
{
//print '<tr><td colspan="4">';
@@ -548,6 +548,9 @@ if ($step == 3 && $datatoimport)
$i=0;
while (($file = readdir($handle))!==false)
{
// readdir return value in ISO and we want UTF8 in memory
if (! utf8_check($file)) $file=utf8_encode($file);
if (eregi('^\.',$file)) continue;
$modulepart='import';
@@ -558,9 +561,9 @@ if ($step == 3 && $datatoimport)
print '<td width="16">'.img_mime($file).'</td>';
print '<td>'.$file.'</td>';
// Affiche taille fichier
print '<td align="right">'.dol_filesize($dir.'/'.$file).'</td>';
print '<td align="right">'.dol_print_size(filesize($newdir.'/'.$newfile)).'</td>';
// Affiche date fichier
print '<td align="right">'.dol_print_date(filemtime($dir.'/'.$file),'dayhour').'</td>';
print '<td align="right">'.dol_print_date(filemtime($newdir.'/'.$newfile),'dayhour').'</td>';
// Del button
print '<td align="right"><a href="'.DOL_URL_ROOT.'/document.php?action=remove_file&step=3&format='.$format.'&modulepart='.$modulepart.'&file='.urlencode($relativepath);
print '&amp;urlsource='.urlencode($urlsource);

View File

@@ -24,8 +24,8 @@
/**
\file htdocs/includes/modules/commande/modules_commande.php
\ingroup commande
\brief Fichier contenant la classe m<>re de generation des commandes en PDF
et la classe m<>re de num<75>rotation des commandes
\brief Fichier contenant la classe m<>re de generation des commandes en PDF
et la classe m<>re de num<75>rotation des commandes
\version $Id$
*/
@@ -37,14 +37,14 @@ require_once(DOL_DOCUMENT_ROOT.'/discount.class.php');
/**
\class ModelePDFCommandes
\brief Classe m<>re des mod<6F>les de commandes
\brief Classe m<>re des mod<6F>les de commandes
*/
class ModelePDFCommandes extends FPDF
{
var $error='';
/**
* \brief Renvoi le dernier message d'erreur de cr<63>ation de PDF de commande
* \brief Renvoi le dernier message d'erreur de cr<63>ation de PDF de commande
*/
function pdferror()
{
@@ -52,7 +52,7 @@ class ModelePDFCommandes extends FPDF
}
/**
* \brief Renvoi la liste des mod<6F>les actifs
* \brief Renvoi la liste des mod<6F>les actifs
* \return array Tableau des modeles (cle=id, valeur=libelle)
*/
function liste_modeles($db)
@@ -92,7 +92,7 @@ class ModelePDFCommandes extends FPDF
/**
\class ModeleNumRefCommandes
\brief Classe m<>re des mod<6F>les de num<75>rotation des r<>f<EFBFBD>rences de commandes
\brief Classe m<>re des mod<6F>les de num<75>rotation des r<>f<EFBFBD>rences de commandes
*/
class ModeleNumRefCommandes
@@ -107,7 +107,7 @@ class ModeleNumRefCommandes
return true;
}
/** \brief Renvoi la description par defaut du modele de num<75>rotation
/** \brief Renvoi la description par defaut du modele de num<75>rotation
* \return string Texte descripif
*/
function info()
@@ -117,7 +117,7 @@ class ModeleNumRefCommandes
return $langs->trans("NoDescription");
}
/** \brief Renvoi un exemple de num<75>rotation
/** \brief Renvoi un exemple de num<75>rotation
* \return string Example
*/
function getExample()
@@ -127,8 +127,8 @@ class ModeleNumRefCommandes
return $langs->trans("NoExample");
}
/** \brief Test si les num<75>ros d<>j<EFBFBD> en vigueur dans la base ne provoquent pas de
* de conflits qui empechera cette num<75>rotation de fonctionner.
/** \brief Test si les num<75>ros d<>j<EFBFBD> en vigueur dans la base ne provoquent pas de
* de conflits qui empechera cette num<75>rotation de fonctionner.
* \return boolean false si conflit, true si ok
*/
function canBeActivated()
@@ -136,7 +136,7 @@ class ModeleNumRefCommandes
return true;
}
/** \brief Renvoi prochaine valeur attribu<62>e
/** \brief Renvoi prochaine valeur attribu<62>e
* \return string Valeur
*/
function getNextValue()
@@ -162,10 +162,10 @@ class ModeleNumRefCommandes
/*
\brief Cr<43>e un bon de commande sur disque en fonction d'un mod<6F>le
\param db objet base de donn<6E>e
\param id id de la propale <20> cr<63>er
\param modele force le modele <20> utiliser ('' to not force)
\brief Cr<43>e un bon de commande sur disque en fonction d'un mod<6F>le
\param db objet base de donn<6E>e
\param id id de la propale <20> cr<63>er
\param modele force le modele <20> utiliser ('' to not force)
\param outputlangs objet lang a utiliser pour traduction
*/
function commande_pdf_create($db, $id, $modele, $outputlangs)
@@ -177,7 +177,7 @@ function commande_pdf_create($db, $id, $modele, $outputlangs)
$modelisok=0;
$liste=array();
// Positionne modele sur le nom du modele de commande <20> utiliser
// Positionne modele sur le nom du modele de commande <20> utiliser
$file = "pdf_".$modele.".modules.php";
if ($modele && file_exists($dir.$file)) $modelisok=1;
@@ -194,7 +194,7 @@ function commande_pdf_create($db, $id, $modele, $outputlangs)
{
$model=new ModelePDFCommandes();
$liste=$model->liste_modeles($db);
$modele=key($liste); // Renvoie premiere valeur de cl<63> trouv<75> dans le tableau
$modele=key($liste); // Renvoie premiere valeur de cl<63> trouv<75> dans le tableau
$file = "pdf_".$modele.".modules.php";
if (file_exists($dir.$file)) $modelisok=1;
}
@@ -240,10 +240,10 @@ function commande_pdf_create($db, $id, $modele, $outputlangs)
}
/**
\brief Supprime l'image de pr<70>visualitation, pour le cas de r<>g<EFBFBD>n<EFBFBD>ration de commande
\param db objet base de donn<6E>e
\param commandeid id de la commande <20> effacer
\param commanderef r<>f<EFBFBD>rence de la commande si besoin
\brief Supprime l'image de pr<70>visualitation, pour le cas de r<>g<EFBFBD>n<EFBFBD>ration de commande
\param db objet base de donn<6E>e
\param commandeid id de la commande <20> effacer
\param commanderef r<>f<EFBFBD>rence de la commande si besoin
*/
function commande_delete_preview($db, $commandeid, $commanderef='')
{
@@ -265,7 +265,7 @@ function commande_delete_preview($db, $commandeid, $commanderef='')
if ( file_exists( $file ) && is_writable( $file ) )
{
if ( ! unlink($file) )
if ( ! dol_delete_file($file,1) )
{
$this->error=$langs->trans("ErrorFailedToOpenFile",$file);
return 0;
@@ -279,7 +279,7 @@ function commande_delete_preview($db, $commandeid, $commanderef='')
if ( file_exists( $preview ) && is_writable( $preview ) )
{
if ( ! unlink($preview) )
if ( ! dol_delete_file($preview,1) )
{
$this->error=$langs->trans("ErrorFailedToOpenFile",$preview);
return 0;
@@ -288,5 +288,7 @@ function commande_delete_preview($db, $commandeid, $commanderef='')
}
}
}
return 1;
}
?>

View File

@@ -287,9 +287,9 @@ ITEM_" . $i . "_DESCRIPTION=\"" . str_replace("\r\n","",nl2br($fac->lignes[$i]->
/**
\brief Supprime l'image de previsualitation, pour le cas de regeneration de facture
\param db objet base de donnee
\param facid id de la facture a creer
* \brief Supprime l'image de previsualitation, pour le cas de regeneration de facture
* \param db objet base de donnee
* \param facid id de la facture a creer
*/
function facture_delete_preview($db, $facid)
{
@@ -306,12 +306,14 @@ function facture_delete_preview($db, $facid)
if ( file_exists( $file ) && is_writable( $file ) )
{
if ( ! unlink($file) )
if ( ! dol_delete_file($file,1) )
{
return 0;
}
}
}
return 1;
}
?>

View File

@@ -22,8 +22,8 @@
/**
\file htdocs/includes/modules/fichinter/modules_fichinter.php
\ingroup ficheinter
\brief Fichier contenant la classe m<>re de generation des fiches interventions en PDF
et la classe m<>re de num<75>rotation des fiches interventions
\brief Fichier contenant la classe m<>re de generation des fiches interventions en PDF
et la classe m<>re de num<75>rotation des fiches interventions
\version $Id$
*/
@@ -33,7 +33,7 @@ require_once(DOL_DOCUMENT_ROOT.'/includes/fpdf/fpdfi/fpdi_protection.php');
/**
\class ModelePDFFicheinter
\brief Classe m<>re des mod<6F>les de fiche intervention
\brief Classe m<>re des mod<6F>les de fiche intervention
*/
class ModelePDFFicheinter extends FPDF
{
@@ -48,7 +48,7 @@ class ModelePDFFicheinter extends FPDF
}
/**
\brief Renvoi le dernier message d'erreur de cr<63>ation de fiche intervention
\brief Renvoi le dernier message d'erreur de cr<63>ation de fiche intervention
*/
function pdferror()
{
@@ -56,7 +56,7 @@ class ModelePDFFicheinter extends FPDF
}
/**
* \brief Renvoi la liste des mod<6F>les actifs
* \brief Renvoi la liste des mod<6F>les actifs
*/
function liste_modeles($db)
{
@@ -93,7 +93,7 @@ class ModelePDFFicheinter extends FPDF
/**
\class ModeleNumRefFicheinter
\brief Classe m<>re des mod<6F>les de num<75>rotation des r<>f<EFBFBD>rences de fiches d'intervention
\brief Classe m<>re des mod<6F>les de num<75>rotation des r<>f<EFBFBD>rences de fiches d'intervention
*/
class ModeleNumRefFicheinter
@@ -108,7 +108,7 @@ class ModeleNumRefFicheinter
return true;
}
/** \brief Renvoi la description par defaut du modele de num<75>rotation
/** \brief Renvoi la description par defaut du modele de num<75>rotation
* \return string Texte descripif
*/
function info()
@@ -118,7 +118,7 @@ class ModeleNumRefFicheinter
return $langs->trans("NoDescription");
}
/** \brief Renvoi un exemple de num<75>rotation
/** \brief Renvoi un exemple de num<75>rotation
* \return string Example
*/
function getExample()
@@ -128,8 +128,8 @@ class ModeleNumRefFicheinter
return $langs->trans("NoExample");
}
/** \brief Test si les num<75>ros d<>j<EFBFBD> en vigueur dans la base ne provoquent pas de
* de conflits qui empechera cette num<75>rotation de fonctionner.
/** \brief Test si les num<75>ros d<>j<EFBFBD> en vigueur dans la base ne provoquent pas de
* de conflits qui empechera cette num<75>rotation de fonctionner.
* \return boolean false si conflit, true si ok
*/
function canBeActivated()
@@ -137,7 +137,7 @@ class ModeleNumRefFicheinter
return true;
}
/** \brief Renvoi prochaine valeur attribu<62>e
/** \brief Renvoi prochaine valeur attribu<62>e
* \return string Valeur
*/
function getNextValue()
@@ -163,10 +163,10 @@ class ModeleNumRefFicheinter
/**
\brief Cr<43>e une fiche intervention sur disque en fonction du mod<6F>le de FICHEINTER_ADDON_PDF
\param db objet base de donn<6E>e
\brief Cr<43>e une fiche intervention sur disque en fonction du mod<6F>le de FICHEINTER_ADDON_PDF
\param db objet base de donn<6E>e
\param object Object fichinter
\param modele force le modele <20> utiliser ('' par defaut)
\param modele force le modele <20> utiliser ('' par defaut)
\param outputlangs objet lang a utiliser pour traduction
\return int 0 si KO, 1 si OK
*/
@@ -177,7 +177,7 @@ function fichinter_create($db, $object, $modele='', $outputlangs='')
$dir = DOL_DOCUMENT_ROOT."/includes/modules/fichinter/";
// Positionne modele sur le nom du modele de facture <20> utiliser
// Positionne modele sur le nom du modele de facture <20> utiliser
if (! strlen($modele))
{
if ($conf->global->FICHEINTER_ADDON_PDF)
@@ -226,10 +226,10 @@ function fichinter_create($db, $object, $modele='', $outputlangs='')
}
/**
\brief Supprime l'image de pr<70>visualitation, pour le cas de r<>g<EFBFBD>n<EFBFBD>ration de propal
\param db objet base de donn<6E>e
\param propalid id de la propal <20> effacer
\param propalref r<>f<EFBFBD>rence de la propal si besoin
\brief Supprime l'image de pr<70>visualitation, pour le cas de r<>g<EFBFBD>n<EFBFBD>ration de propal
\param db objet base de donn<6E>e
\param propalid id de la propal <20> effacer
\param propalref r<>f<EFBFBD>rence de la propal si besoin
*/
function fichinter_delete_preview($db, $fichinterid, $fichinterref='')
{
@@ -251,7 +251,7 @@ function fichinter_delete_preview($db, $fichinterid, $fichinterref='')
if ( file_exists( $file ) && is_writable( $file ) )
{
if ( ! unlink($file) )
if ( ! dol_delete_file($file,1) )
{
$this->error=$langs->trans("ErrorFailedToOpenFile",$file);
return 0;
@@ -264,7 +264,7 @@ function fichinter_delete_preview($db, $fichinterid, $fichinterref='')
$preview = $multiple.$i;
if ( file_exists( $preview ) && is_writable( $preview ) )
{
if ( ! unlink($preview) )
if ( ! dol_delete_file($preview,1) )
{
$this->error=$langs->trans("ErrorFailedToOpenFile",$preview);
return 0;
@@ -273,6 +273,8 @@ function fichinter_delete_preview($db, $fichinterid, $fichinterref='')
}
}
}
return 1;
}
?>

View File

@@ -161,9 +161,9 @@ class ModeleNumRefDeliveryOrder
/**
* \brief Create object on disk
* \param db objet base de donn<6E>e
* \param db objet base de donn<6E>e
* \param deliveryid id object
* \param modele force le modele <20> utiliser ('' to not force)
* \param modele force le modele <20> utiliser ('' to not force)
* \param outputlangs objet lang a utiliser pour traduction
* \return int 0 si KO, 1 si OK
*/
@@ -240,12 +240,14 @@ function delivery_order_delete_preview($db, $deliveryid)
if ( file_exists( $file ) && is_writable( $file ) )
{
if ( ! unlink($file) )
if ( ! dol_delete_file($file,1) )
{
$this->error=$langs->trans("ErrorFailedToOpenFile",$file);
return 0;
}
}
}
return 1;
}
?>

View File

@@ -22,8 +22,8 @@
/**
\file htdocs/includes/modules/propale/modules_propale.php
\ingroup propale
\brief Fichier contenant la classe m<>re de generation des propales en PDF
et la classe m<>re de num<75>rotation des propales
\brief Fichier contenant la classe m<>re de generation des propales en PDF
et la classe m<>re de num<75>rotation des propales
\version $Id$
*/
@@ -161,8 +161,8 @@ class ModeleNumRefPropales
/**
\brief Cree une propale sur disque en fonction du modele de PROPALE_ADDON_PDF
\param db objet base de donnee
\param id id de la propale <20> creer
\param modele force le modele <20> utiliser ('' to not force)
\param id id de la propale <20> creer
\param modele force le modele <20> utiliser ('' to not force)
\param outputlangs objet lang a utiliser pour traduction
\return int 0 si KO, 1 si OK
*/
@@ -240,7 +240,7 @@ function propale_pdf_create($db, $id, $modele, $outputlangs)
/**
\brief Supprime l'image de previsualitation, pour le cas de regeneration de propal
\param db objet base de donn<6E>e
\param db objet base de donn<6E>e
\param propalid id de la propal a effacer
\param propalref reference de la propal si besoin
*/
@@ -264,7 +264,7 @@ function propale_delete_preview($db, $propalid, $propalref='')
if ( file_exists( $file ) && is_writable( $file ) )
{
if ( ! unlink($file) )
if ( ! dol_delete_file($file,1) )
{
$this->error=$langs->trans("ErrorFailedToOpenFile",$file);
return 0;
@@ -287,5 +287,7 @@ function propale_delete_preview($db, $propalid, $propalref='')
}
}
}
return 1;
}
?>

View File

@@ -238,12 +238,14 @@ function supplier_order_delete_preview($db, $propalid)
if ( file_exists( $file ) && is_writable( $file ) )
{
if ( ! unlink($file) )
if ( ! dol_delete_file($file) )
{
$this->error=$langs->trans("ErrorFailedToOpenFile",$file);
return 0;
}
}
}
return 1;
}
?>

View File

@@ -196,7 +196,7 @@ function dol_mimetype($file)
*/
function dol_dir_is_emtpy($folder)
{
$newfolder=utf8_check($folder)?utf8_decode($folder):$folder; // The opendir need ISO strings
$newfolder=utf8_check($folder)?utf8_decode($folder):$folder; // The is_dir and opendir need ISO strings
if (is_dir($newfolder))
{
$handle = opendir($newfolder);
@@ -244,4 +244,41 @@ function dol_count_nb_of_line($file)
return $nb;
}
/**
* Return size of a file
*
* @param $pathoffile
* @return string File size
*/
function dol_filesize($pathoffile)
{
$newpathoffile=check_utf8($pathoffile)?utf8_decode($pathoffile):$pathoffile;
return filesize($pathoffile);
}
/**
* Return time of a file
*
* @param $pathoffile
* @return timestamp Time of file
*/
function dol_filetime($pathoffile)
{
$newpathoffile=check_utf8($pathoffile)?utf8_decode($pathoffile):$pathoffile;
return filemtime($nrwpathoffile);
}
/**
* Return if path is a file
*
* @param $pathoffile
* @return boolean True or false
*/
function dol_is_file($pathoffile)
{
$newpathoffile=utf8_check($pathoffile)?utf8_decode($pathoffile):$pathoffile;
return is_file($newpathoffile);
}
?>

View File

@@ -2124,20 +2124,30 @@ function print_fleche_navigation($page,$file,$options='',$nextpage,$betweenarrow
/**
* \brief Remove a file
* \param file Fichier a effacer ou masque de fichier a effacer
* \param boolean true if file deleted, false if error
* \brief Remove a file or several files with a mask
* \param file File to delete or mask of file to delete
* \param disableglob Disable usage of globa like *
* \param boolean True if file deleted, False if error
*/
function dol_delete_file($file)
function dol_delete_file($file,$disableglob=0)
{
$ok=true;
$newfile=utf8_check($file)?utf8_decode($file):$file; // glob function accepts only ISO string
if (empty($disableglob))
{
foreach (glob($newfile) as $filename)
{
$ok=unlink($filename);
$ok=unlink($filename); // The unlink encapsulated by dolibarr
if ($ok) dol_syslog("Removed file ".$filename,LOG_DEBUG);
else dol_syslog("Failed to remove file ".$filename,LOG_ERR);
}
}
else
{
$ok=unlink($newfile); // The unlink encapsulated by dolibarr
if ($ok) dol_syslog("Removed file ".$newfile,LOG_DEBUG);
else dol_syslog("Failed to remove file ".$newfile,LOG_ERR);
}
return $ok;
}
@@ -3006,5 +3016,4 @@ function utf8_check($Str)
return true;
}
?>

View File

@@ -2487,33 +2487,38 @@ class Product extends CommonObject
*/
function liste_photos($dir,$nbmax=0)
{
include_once(DOL_DOCUMENT_ROOT.'/lib/files.lib.php');
$nbphoto=0;
$tabobj=array();
$dirthumb = $dir.'thumbs/';
$newdir=utf8_check($dir)?utf8_decode($dir):$dir;
if (file_exists($dir))
$handle=@opendir($newdir);
if ($handle)
{
$handle=opendir($dir);
while (($file = readdir($handle)) != false)
{
if (is_file($dir.$file))
if (! utf8_check($file)) $file=utf8_encode($file); // readdir returns ISO
if (dol_is_file($dir.$file))
{
$nbphoto++;
$photo = $file;
// On determine nom du fichier vignette
$photo=$file;
$photo_vignette='';
if (eregi('(\.jpg|\.bmp|\.gif|\.png|\.tiff)$',$photo,$regs))
{
$photo_vignette=eregi_replace($regs[0],'',$photo).'_small'.$regs[0];
}
$dirthumb = $dir.'thumbs/';
// Objet
$obj=array();
$obj['photo']=$photo;
if ($photo_vignette && is_file($dirthumb.$photo_vignette)) $obj['photo_vignette']=$photo_vignette;
if ($photo_vignette && dol_is_file($dirthumb.$photo_vignette)) $obj['photo_vignette']=$photo_vignette;
else $obj['photo_vignette']="";
$tabobj[$nbphoto-1]=$obj;
@@ -2540,7 +2545,7 @@ class Product extends CommonObject
$filename = eregi_replace($dir,'',$file); // Nom du fichier
// On efface l'image d'origine
unlink($file);
dol_delete_file($file);
// Si elle existe, on efface la vignette
if (eregi('(\.jpg|\.bmp|\.gif|\.png|\.tiff)$',$filename,$regs))
@@ -2548,7 +2553,7 @@ class Product extends CommonObject
$photo_vignette=eregi_replace($regs[0],'',$filename).'_small'.$regs[0];
if (file_exists($dirthumb.$photo_vignette))
{
unlink($dirthumb.$photo_vignette);
dol_delete_file($dirthumb.$photo_vignette);
}
}
}
@@ -2559,7 +2564,8 @@ class Product extends CommonObject
*/
function get_image_size($file)
{
$infoImg = getimagesize($file); // Get information on image
$newfile=utf8_check($file)?utf8_decode($file):$file;
$infoImg = getimagesize($newfile); // Get information on image
$this->imgWidth = $infoImg[0]; // Largeur de l'image
$this->imgHeight = $infoImg[1]; // Hauteur de l'image
}

View File

@@ -1,6 +1,6 @@
<?php
/* Copyright (C) 2001-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
* Copyright (C) 2004-2008 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) 2004-2009 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) 2005 Eric Seigne <eric.seigne@ryxeo.com>
* Copyright (C) 2005-2009 Regis Houssin <regis@dolibarr.fr>
*
@@ -171,7 +171,7 @@ if ($_GET["id"] || $_GET["ref"])
print "\n</div>\n";
/*
* Ajouter une photo
* Add a photo
*/
if ($_GET["action"] == 'ajout_photo' && ($user->rights->produit->creer || $user->rights->service->creer) && ! empty($conf->global->MAIN_UPLOAD_DOC))
{
@@ -204,7 +204,7 @@ if ($_GET["id"] || $_GET["ref"])
if ($nbbyrow && ($nbphoto % $nbbyrow == 1)) print '<tr align=center valign=middle border=1>';
if ($nbbyrow) print '<td width="'.ceil(100/$nbbyrow).'%" class="photo">';
print '<a href="'.DOL_URL_ROOT.'/viewimage.php?modulepart=product&file='.urlencode($pdir.$obj['photo']).'" alt="Taille origine" target="_blank">';
print '<a href="'.DOL_URL_ROOT.'/viewimage.php?modulepart=product&file='.urlencode($pdir.$obj['photo']).'" alt="'.dol_escape_htmltag($langs->trans("OriginalSize")).'" target="_blank">';
// Si fichier vignette disponible, on l'utilise, sinon on utilise photo origine
if ($obj['photo_vignette'])

View File

@@ -376,17 +376,16 @@ if ($modulepart == 'barcode')
$result=$module->buildBarCode($code,$encoding,$readable);
}
}
else
else // Open and return file
{
// Ouvre et renvoi fichier
clearstatcache();
// Output files on disk
$filename = basename($original_file);
// Output files on browser
dol_syslog("viewimage.php return file $original_file content-type=$type");
$neworiginal_file=utf8_check($original_file)?utf8_decode($original_file):$original_file;
dol_syslog("viewimage.php return file $original_file $filename content-type=$type");
if (! file_exists($original_file))
// This test if file exists should be useless. We keep it to find bug more easily
if (! file_exists($neworiginal_file))
{
$langs->load("main");
dol_print_error(0,$langs->trans("ErrorFileDoesNotExists",$_GET["file"]));
@@ -403,7 +402,7 @@ else
header('Content-type: image/png');
}
readfile($original_file);
readfile($neworiginal_file); // Need a path in ISO
}
?>