Fix: File functions works with filename with special chars

This commit is contained in:
Laurent Destailleur 2009-12-15 11:30:49 +00:00
parent 9c5f2c803d
commit 3f97012399
3 changed files with 51 additions and 46 deletions

View File

@ -2576,21 +2576,20 @@ function get_default_tva($societe_vendeuse, $societe_acheteuse, $taux_produit, $
/**
\brief Fonction qui renvoie si tva doit etre tva percue recuperable
\remarks Si vendeur non assujeti a TVA, TVA par defaut=0. Fin de regle.
Si le (pays vendeur = pays acheteur) alors TVA par defaut=TVA du produit vendu. Fin de regle.
Si (vendeur et acheteur dans Communaute europeenne) et (bien vendu = moyen de transports neuf comme auto, bateau, avion) alors TVA par defaut=0 (La TVA doit etre paye par acheteur au centre d'impots de son pays et non au vendeur). Fin de regle.
Si (vendeur et acheteur dans Communaute europeenne) et (acheteur = particulier ou entreprise sans num TVA intra) alors TVA par defaut=TVA du produit vendu. Fin de regle
Si (vendeur et acheteur dans Communaute europeenne) et (acheteur = entreprise avec num TVA) intra alors TVA par defaut=0. Fin de regle
Sinon TVA proposee par defaut=0. Fin de regle.
\param societe_vendeuse Objet societe vendeuse
\param societe_acheteuse Objet societe acheteuse
\param taux_produit Taux par defaut du produit vendu
\return float 0 or 1
* \brief Fonction qui renvoie si tva doit etre tva percue recuperable
* \remarks Si vendeur non assujeti a TVA, TVA par defaut=0. Fin de regle.
* Si le (pays vendeur = pays acheteur) alors TVA par defaut=TVA du produit vendu. Fin de regle.
* Si (vendeur et acheteur dans Communaute europeenne) et (bien vendu = moyen de transports neuf comme auto, bateau, avion) alors TVA par defaut=0 (La TVA doit etre paye par acheteur au centre d'impots de son pays et non au vendeur). Fin de regle.
* Si (vendeur et acheteur dans Communaute europeenne) et (acheteur = particulier ou entreprise sans num TVA intra) alors TVA par defaut=TVA du produit vendu. Fin de regle
* Si (vendeur et acheteur dans Communaute europeenne) et (acheteur = entreprise avec num TVA) intra alors TVA par defaut=0. Fin de regle
* Sinon TVA proposee par defaut=0. Fin de regle.
* \param societe_vendeuse Objet societe vendeuse
* \param societe_acheteuse Objet societe acheteuse
* \param taux_produit Taux par defaut du produit vendu
* \return float 0 or 1
*/
function get_default_npr($societe_vendeuse, $societe_acheteuse, $taux_produit)
{
return 0;
}
@ -2644,7 +2643,7 @@ function get_exdir($num,$level=3,$alpha=0)
/**
* \brief Creation of a directory (recursive)
* \param $dir Directory to create
* \return int < 0 if KO, >= 0 if OK
* \return int < 0 if KO, 0 = already exists, > 0 if OK
*/
function create_exdir($dir)
{
@ -2652,7 +2651,8 @@ function create_exdir($dir)
dol_syslog("functions.lib::create_exdir: dir=".$dir,LOG_INFO);
if (@is_dir($dir)) return 0;
$dir_osencoded=dol_osencode($dir);
if (@is_dir($dir_osencoded)) return 0;
$nberr=0;
$nbcreated=0;
@ -2669,7 +2669,8 @@ function create_exdir($dir)
// (ex selon config de open_basedir)
if ($ccdir)
{
if (! @is_dir($ccdir))
$ccdir_osencoded=dol_osencode($ccdir);
if (! @is_dir($ccdir_osencoded))
{
dol_syslog("functions.lib::create_exdir: Directory '".$ccdir."' does not exists or is outside open_basedir PHP setting.",LOG_DEBUG);
@ -2677,7 +2678,7 @@ function create_exdir($dir)
$dirmaskdec=octdec('0755');
if (! empty($conf->global->MAIN_UMASK)) $dirmaskdec=octdec($conf->global->MAIN_UMASK);
$dirmaskdec |= octdec('0110');
if (! @mkdir($ccdir, $dirmaskdec))
if (! @mkdir($ccdir_osencoded, $dirmaskdec))
{
// Si le is_dir a renvoye une fausse info, alors on passe ici.
dol_syslog("functions.lib::create_exdir: Fails to create directory '".$ccdir."' or directory already exists.",LOG_WARNING);

View File

@ -2311,19 +2311,17 @@ class Product extends CommonObject
$dir = $sdir .'/'. get_exdir($this->id,2) . $this->id ."/";
$dir .= "photos/";
if (! file_exists($dir))
{
create_exdir($dir);
}
create_exdir($dir);
if (file_exists($dir))
$dir_osencoded=$dir;
if (file_exists($dir_osencoded))
{
$originImage = $dir . $file['name'];
// Cree fichier en taille origine
$result=dol_move_uploaded_file($file['tmp_name'], $originImage, 1);
if (file_exists($originImage))
if (file_exists(dol_osencode($originImage)))
{
// Cree fichier en taille vignette
$this->add_thumb($originImage,$maxWidth,$maxHeight);
@ -2342,7 +2340,8 @@ class Product extends CommonObject
{
require_once(DOL_DOCUMENT_ROOT ."/lib/images.lib.php");
if (file_exists($file))
$file_osencoded=dol_osencode($file);
if (file_exists($file_osencoded))
{
vignette($file,$maxWidth,$maxHeight);
}
@ -2354,27 +2353,28 @@ class Product extends CommonObject
* \param $files url de l'image
* \author Jean Heimburger juin 2007
*/
function add_photo_web($sdir, $files)
function add_photo_web($sdir, $file)
{
$dir = $sdir .'/'. get_exdir($this->id,2) . $this->id ."/";
$dir .= "photos/";
if (! file_exists($dir))
$dir_osencoded=dol_osencode($dir);
if (! file_exists($dir_osencoded))
{
dol_syslog("Product Create $dir");
dol_syslog("Product Create ".$dir);
create_exdir($dir);
}
if (file_exists($dir))
if (file_exists($dir_osencoded))
{
// Cree fichier en taille vignette
// \todo A faire
// Cree fichier en taille origine
$content = file_get_contents($files);
$content = file_get_contents($file);
$nom = basename($files);
$im = fopen($dir.$nom,'wb');
$nom = basename($file);
$im = fopen(dol_osencode($dir.$nom),'wb');
fwrite($im, $content);
fclose($im);
// }
@ -2394,12 +2394,14 @@ class Product extends CommonObject
$dir = $sdir . '/'. $pdir;
$nbphoto=0;
if (file_exists($dir))
$dir_osencoded=dol_osencode($dir);
if (file_exists($dir_osencoded))
{
$handle=opendir($dir);
$handle=opendir($dir_osencoded);
while (($file = readdir($handle)) != false)
{
if (! utf8_check($file)) $file=utf8_encode($file); // readdir returns ISO
if (! utf8_check($file)) $file=utf8_encode($file); // To be sure data is stored in UTF8 in memory
if (dol_is_file($dir.$file)) return true;
}
}
@ -2425,14 +2427,17 @@ class Product extends CommonObject
$pdirthumb = $pdir.'thumbs/';
$nbphoto=0;
if (file_exists($dir))
$dir_osencoded=dol_osencode($dir);
if (file_exists($dir_osencoded))
{
$handle=opendir($dir);
$handle=opendir($dir_osencoded);
while (($file = readdir($handle)) != false)
{
$photo='';
if (! utf8_check($file)) $file=utf8_encode($file); // readdir returns ISO
if (! utf8_check($file)) $file=utf8_encode($file); // To be sure date is stored in UTF8 in memory
if (dol_is_file($dir.$file))
{
$nbphoto++;
@ -2454,7 +2459,7 @@ class Product extends CommonObject
print '<a href="'.DOL_URL_ROOT.'/viewimage.php?modulepart=product&file='.urlencode($pdir.$photo).'" alt="Taille origine" target="_blank">';
// Si fichier vignette disponible, on l'utilise, sinon on utilise photo origine
if ($photo_vignette && is_file($dirthumb.$photo_vignette)) {
if ($photo_vignette && dol_is_file($dirthumb.$photo_vignette)) {
print '<img border="0" height="120" src="'.DOL_URL_ROOT.'/viewimage.php?modulepart=product&file='.urlencode($pdirthumb.$photo_vignette).'">';
}
else {
@ -2506,9 +2511,8 @@ class Product extends CommonObject
$nbphoto=0;
$tabobj=array();
$newdir=utf8_check($dir)?utf8_decode($dir):$dir;
$handle=@opendir($newdir);
$dir_osencoded=dol_osencode($dir);
$handle=@opendir($dir_osencoded);
if ($handle)
{
while (($file = readdir($handle)) != false)
@ -2564,7 +2568,7 @@ class Product extends CommonObject
if (preg_match('/(\.jpg|\.bmp|\.gif|\.png|\.tiff)$/i',$filename,$regs))
{
$photo_vignette=preg_replace('/'.$regs[0].'/i','',$filename).'_small'.$regs[0];
if (file_exists($dirthumb.$photo_vignette))
if (file_exists(dol_osencode($dirthumb.$photo_vignette)))
{
dol_delete_file($dirthumb.$photo_vignette);
}
@ -2577,8 +2581,8 @@ class Product extends CommonObject
*/
function get_image_size($file)
{
$newfile=utf8_check($file)?utf8_decode($file):$file;
$infoImg = getimagesize($newfile); // Get information on image
$file_osencoded=dol_osencode($file);
$infoImg = getimagesize($file_osencoded); // Get information on image
$this->imgWidth = $infoImg[0]; // Largeur de l'image
$this->imgHeight = $infoImg[1]; // Hauteur de l'image
}

View File

@ -382,10 +382,10 @@ else // Open and return 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;
$original_file_osencoded=dol_osencode($original_file);
// This test if file exists should be useless. We keep it to find bug more easily
if (! file_exists($neworiginal_file))
if (! file_exists($original_file_osencoded))
{
$langs->load("main");
dol_print_error(0,$langs->trans("ErrorFileDoesNotExists",$_GET["file"]));
@ -402,7 +402,7 @@ else // Open and return file
header('Content-type: image/png');
}
readfile($neworiginal_file); // Need a path in ISO
readfile($original_file_osencoded);
}
?>