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 $filename = eregi_replace($dir,'',$file); // Nom du fichier
// On efface l'image d'origine // On efface l'image d'origine
unlink($file); dol_delete_file($file,1);
// Si elle existe, on efface la vignette // Si elle existe, on efface la vignette
if (eregi('(\.jpg|\.bmp|\.gif|\.png|\.tiff)$',$filename,$regs)) 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]; $photo_vignette=eregi_replace($regs[0],'',$filename).'_small'.$regs[0];
if (file_exists($dirthumb.$photo_vignette)) 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') // Remove a file
if ($action == 'remove_file')
{ {
/*
* Suppression fichier
*/
clearstatcache(); 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"])); dol_print_error(0,$langs->trans("ErrorFileDoesNotExists",$_GET["file"]));
exit; exit;
} }
unlink($original_file);
dol_delete_file($original_file);
dol_syslog("document.php back to ".urldecode($urlsource), LOG_DEBUG); dol_syslog("document.php back to ".urldecode($urlsource), LOG_DEBUG);
@@ -478,23 +476,23 @@ if ($action == 'remove_file')
return; return;
} }
else else // Open and return file
{ {
/*
* Open and return file
*/
clearstatcache(); clearstatcache();
$filename = basename($original_file); $filename = basename($original_file);
// Output file on browser
dol_syslog("document.php download $original_file $filename content-type=$type"); 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)); dol_print_error(0,$langs->trans("ErrorFileDoesNotExists",$original_file));
exit; exit;
} }
// Les drois sont ok et fichier trouve, on l'envoie // Les drois sont ok et fichier trouve, on l'envoie
if ($encoding) header('Content-Encoding: '.$encoding); if ($encoding) header('Content-Encoding: '.$encoding);
@@ -506,7 +504,7 @@ else
header('Cache-Control: Public, must-revalidate'); header('Cache-Control: Public, must-revalidate');
header('Pragma: public'); header('Pragma: public');
readfile($original_file); readfile($neworiginal_file); // Need a path in ISO
} }
?> ?>

View File

@@ -376,7 +376,7 @@ class FormFile
print '</a>'; print '</a>';
if (!$iconPDF) print '</td>'; if (!$iconPDF) print '</td>';
// Affiche taille fichier // 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 // Affiche date fichier
if (!$iconPDF) print '<td align="right">'.dol_print_date(filemtime($filedir."/".$file["name"]),'dayhour').'</td>'; 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 '<input type="hidden" value="'.$datatoimport.'" name="datatoimport">';
print "</tr>\n"; print "</tr>\n";
$dir = $conf->import->dir_temp;
// Search available imports // 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) if ($handle)
{ {
//print '<tr><td colspan="4">'; //print '<tr><td colspan="4">';
@@ -548,6 +548,9 @@ if ($step == 3 && $datatoimport)
$i=0; $i=0;
while (($file = readdir($handle))!==false) 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; if (eregi('^\.',$file)) continue;
$modulepart='import'; $modulepart='import';
@@ -558,9 +561,9 @@ if ($step == 3 && $datatoimport)
print '<td width="16">'.img_mime($file).'</td>'; print '<td width="16">'.img_mime($file).'</td>';
print '<td>'.$file.'</td>'; print '<td>'.$file.'</td>';
// Affiche taille fichier // 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 // 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 // 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 '<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); print '&amp;urlsource='.urlencode($urlsource);

View File

@@ -22,12 +22,12 @@
*/ */
/** /**
\file htdocs/includes/modules/commande/modules_commande.php \file htdocs/includes/modules/commande/modules_commande.php
\ingroup commande \ingroup commande
\brief Fichier contenant la classe m<>re de generation des commandes en PDF \brief Fichier contenant la classe m<>re de generation des commandes en PDF
et la classe m<>re de num<75>rotation des commandes et la classe m<>re de num<75>rotation des commandes
\version $Id$ \version $Id$
*/ */
require_once(DOL_DOCUMENT_ROOT.'/lib/pdf.lib.php'); require_once(DOL_DOCUMENT_ROOT.'/lib/pdf.lib.php');
require_once(DOL_DOCUMENT_ROOT.'/includes/fpdf/fpdfi/fpdi_protection.php'); require_once(DOL_DOCUMENT_ROOT.'/includes/fpdf/fpdfi/fpdi_protection.php');
@@ -36,118 +36,118 @@ require_once(DOL_DOCUMENT_ROOT.'/discount.class.php');
/** /**
\class ModelePDFCommandes \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 class ModelePDFCommandes extends FPDF
{ {
var $error=''; 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() function pdferror()
{ {
return $this->error; return $this->error;
} }
/** /**
* \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) * \return array Tableau des modeles (cle=id, valeur=libelle)
*/ */
function liste_modeles($db) function liste_modeles($db)
{ {
global $conf; global $conf;
$type='order';
$liste=array();
$sql = "SELECT nom as id, nom as lib";
$sql.= " FROM ".MAIN_DB_PREFIX."document_model";
$sql.= " WHERE type = '".$type."'";
$sql.= " AND entity = ".$conf->entity;
$resql = $db->query($sql); $type='order';
if ($resql) $liste=array();
{ $sql = "SELECT nom as id, nom as lib";
$num = $db->num_rows($resql); $sql.= " FROM ".MAIN_DB_PREFIX."document_model";
$i = 0; $sql.= " WHERE type = '".$type."'";
while ($i < $num) $sql.= " AND entity = ".$conf->entity;
{
$row = $db->fetch_row($resql); $resql = $db->query($sql);
$liste[$row[0]]=$row[1]; if ($resql)
$i++; {
} $num = $db->num_rows($resql);
} $i = 0;
else while ($i < $num)
{ {
$this->error=$db->error(); $row = $db->fetch_row($resql);
return -1; $liste[$row[0]]=$row[1];
} $i++;
return $liste; }
} }
else
{
$this->error=$db->error();
return -1;
}
return $liste;
}
} }
/** /**
\class ModeleNumRefCommandes \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 class ModeleNumRefCommandes
{ {
var $error=''; var $error='';
/** \brief Return if a module can be used or not /** \brief Return if a module can be used or not
* \return boolean true if module can be used * \return boolean true if module can be used
*/ */
function isEnabled() function isEnabled()
{ {
return true; 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 * \return string Texte descripif
*/ */
function info() function info()
{ {
global $langs; global $langs;
$langs->load("orders"); $langs->load("orders");
return $langs->trans("NoDescription"); return $langs->trans("NoDescription");
} }
/** \brief Renvoi un exemple de num<75>rotation /** \brief Renvoi un exemple de num<75>rotation
* \return string Example * \return string Example
*/ */
function getExample() function getExample()
{ {
global $langs; global $langs;
$langs->load("orders"); $langs->load("orders");
return $langs->trans("NoExample"); return $langs->trans("NoExample");
} }
/** \brief Test si les num<75>ros d<>j<EFBFBD> en vigueur dans la base ne provoquent pas de /** \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. * de conflits qui empechera cette num<75>rotation de fonctionner.
* \return boolean false si conflit, true si ok * \return boolean false si conflit, true si ok
*/ */
function canBeActivated() function canBeActivated()
{ {
return true; return true;
} }
/** \brief Renvoi prochaine valeur attribu<62>e /** \brief Renvoi prochaine valeur attribu<62>e
* \return string Valeur * \return string Valeur
*/ */
function getNextValue() function getNextValue()
{ {
global $langs; global $langs;
return $langs->trans("NotAvailable"); return $langs->trans("NotAvailable");
} }
/** \brief Renvoi version du module numerotation /** \brief Renvoi version du module numerotation
* \return string Valeur * \return string Valeur
*/ */
function getVersion() function getVersion()
{ {
global $langs; global $langs;
@@ -162,12 +162,12 @@ class ModeleNumRefCommandes
/* /*
\brief Cr<43>e un bon de commande sur disque en fonction d'un mod<6F>le \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 db objet base de donn<6E>e
\param id id de la propale <20> cr<63>er \param id id de la propale <20> cr<63>er
\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 \param outputlangs objet lang a utiliser pour traduction
*/ */
function commande_pdf_create($db, $id, $modele, $outputlangs) function commande_pdf_create($db, $id, $modele, $outputlangs)
{ {
global $conf,$langs; global $conf,$langs;
@@ -175,32 +175,32 @@ function commande_pdf_create($db, $id, $modele, $outputlangs)
$dir = DOL_DOCUMENT_ROOT."/includes/modules/commande/"; $dir = DOL_DOCUMENT_ROOT."/includes/modules/commande/";
$modelisok=0; $modelisok=0;
$liste=array(); $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"; $file = "pdf_".$modele.".modules.php";
if ($modele && file_exists($dir.$file)) $modelisok=1; if ($modele && file_exists($dir.$file)) $modelisok=1;
// Si model pas encore bon // Si model pas encore bon
if (! $modelisok) if (! $modelisok)
{ {
if ($conf->global->COMMANDE_ADDON_PDF) $modele = $conf->global->COMMANDE_ADDON_PDF; if ($conf->global->COMMANDE_ADDON_PDF) $modele = $conf->global->COMMANDE_ADDON_PDF;
$file = "pdf_".$modele.".modules.php"; $file = "pdf_".$modele.".modules.php";
if (file_exists($dir.$file)) $modelisok=1; if (file_exists($dir.$file)) $modelisok=1;
} }
// Si model pas encore bon // Si model pas encore bon
if (! $modelisok) if (! $modelisok)
{ {
$model=new ModelePDFCommandes(); $model=new ModelePDFCommandes();
$liste=$model->liste_modeles($db); $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"; $file = "pdf_".$modele.".modules.php";
if (file_exists($dir.$file)) $modelisok=1; if (file_exists($dir.$file)) $modelisok=1;
} }
// Charge le modele // Charge le modele
if ($modelisok) if ($modelisok)
{ {
$classname = "pdf_".$modele; $classname = "pdf_".$modele;
require_once($dir.$file); require_once($dir.$file);
@@ -227,66 +227,68 @@ function commande_pdf_create($db, $id, $modele, $outputlangs)
} }
else else
{ {
if (! $conf->global->COMMANDE_ADDON_PDF) if (! $conf->global->COMMANDE_ADDON_PDF)
{ {
print $langs->trans("Error")." ".$langs->trans("Error_COMMANDE_ADDON_PDF_NotDefined"); print $langs->trans("Error")." ".$langs->trans("Error_COMMANDE_ADDON_PDF_NotDefined");
} }
else else
{ {
print $langs->trans("Error")." ".$langs->trans("ErrorFileDoesNotExists",$dir.$file); print $langs->trans("Error")." ".$langs->trans("ErrorFileDoesNotExists",$dir.$file);
} }
return 0; return 0;
} }
} }
/** /**
\brief Supprime l'image de pr<70>visualitation, pour le cas de r<>g<EFBFBD>n<EFBFBD>ration de commande \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 db objet base de donn<6E>e
\param commandeid id de la commande <20> effacer \param commandeid id de la commande <20> effacer
\param commanderef r<>f<EFBFBD>rence de la commande si besoin \param commanderef r<>f<EFBFBD>rence de la commande si besoin
*/ */
function commande_delete_preview($db, $commandeid, $commanderef='') function commande_delete_preview($db, $commandeid, $commanderef='')
{ {
global $langs,$conf; global $langs,$conf;
if (!$commanderef) if (!$commanderef)
{ {
$com = new Commande($db,"",$commandeid); $com = new Commande($db,"",$commandeid);
$com->fetch($commandeid); $com->fetch($commandeid);
$commanderef = $com->ref; $commanderef = $com->ref;
} }
if ($conf->commande->dir_output) if ($conf->commande->dir_output)
{ {
$comref = dol_sanitizeFileName($commanderef); $comref = dol_sanitizeFileName($commanderef);
$dir = $conf->commande->dir_output . "/" . $comref ; $dir = $conf->commande->dir_output . "/" . $comref ;
$file = $dir . "/" . $comref . ".pdf.png"; $file = $dir . "/" . $comref . ".pdf.png";
$multiple = $file . "."; $multiple = $file . ".";
if ( file_exists( $file ) && is_writable( $file ) ) if ( file_exists( $file ) && is_writable( $file ) )
{ {
if ( ! unlink($file) ) if ( ! dol_delete_file($file,1) )
{ {
$this->error=$langs->trans("ErrorFailedToOpenFile",$file); $this->error=$langs->trans("ErrorFailedToOpenFile",$file);
return 0; return 0;
} }
} }
else else
{ {
for ($i = 0; $i < 20; $i++) for ($i = 0; $i < 20; $i++)
{ {
$preview = $multiple.$i; $preview = $multiple.$i;
if ( file_exists( $preview ) && is_writable( $preview ) ) if ( file_exists( $preview ) && is_writable( $preview ) )
{ {
if ( ! unlink($preview) ) if ( ! dol_delete_file($preview,1) )
{ {
$this->error=$langs->trans("ErrorFailedToOpenFile",$preview); $this->error=$langs->trans("ErrorFailedToOpenFile",$preview);
return 0; return 0;
} }
} }
} }
} }
} }
return 1;
} }
?> ?>

View File

@@ -58,7 +58,7 @@ class ModelePDFFactures extends FPDF
function liste_modeles($db) function liste_modeles($db)
{ {
global $conf; global $conf;
$type='invoice'; $type='invoice';
$liste=array(); $liste=array();
$sql = "SELECT nom as id, nom as lib"; $sql = "SELECT nom as id, nom as lib";
@@ -266,8 +266,8 @@ CLIENT=\"" . $client . "\"
TOTAL_HT=\"" . $fac->total_ht . "\" TOTAL_HT=\"" . $fac->total_ht . "\"
TOTAL_TTC=\"" . $fac->total_ttc . "\"\n"; TOTAL_TTC=\"" . $fac->total_ttc . "\"\n";
for ($i = 0 ; $i < $nblignes ; $i++) for ($i = 0 ; $i < $nblignes ; $i++)
{ {
//Pour les articles //Pour les articles
$meta .= "ITEM_" . $i . "_QUANTITY=\"" . $fac->lignes[$i]->qty . "\" $meta .= "ITEM_" . $i . "_QUANTITY=\"" . $fac->lignes[$i]->qty . "\"
ITEM_" . $i . "_UNIT_PRICE=\"" . $fac->lignes[$i]->price . "\" ITEM_" . $i . "_UNIT_PRICE=\"" . $fac->lignes[$i]->price . "\"
@@ -280,16 +280,16 @@ ITEM_" . $i . "_DESCRIPTION=\"" . str_replace("\r\n","",nl2br($fac->lignes[$i]->
fputs($fp,$meta); fputs($fp,$meta);
fclose($fp); fclose($fp);
if (! empty($conf->global->MAIN_UMASK)) if (! empty($conf->global->MAIN_UMASK))
@chmod($file, octdec($conf->global->MAIN_UMASK)); @chmod($file, octdec($conf->global->MAIN_UMASK));
} }
} }
/** /**
\brief Supprime l'image de previsualitation, pour le cas de regeneration de facture * \brief Supprime l'image de previsualitation, pour le cas de regeneration de facture
\param db objet base de donnee * \param db objet base de donnee
\param facid id de la facture a creer * \param facid id de la facture a creer
*/ */
function facture_delete_preview($db, $facid) function facture_delete_preview($db, $facid)
{ {
@@ -306,12 +306,14 @@ function facture_delete_preview($db, $facid)
if ( file_exists( $file ) && is_writable( $file ) ) if ( file_exists( $file ) && is_writable( $file ) )
{ {
if ( ! unlink($file) ) if ( ! dol_delete_file($file,1) )
{ {
return 0; return 0;
} }
} }
} }
return 1;
} }
?> ?>

View File

@@ -22,8 +22,8 @@
/** /**
\file htdocs/includes/modules/fichinter/modules_fichinter.php \file htdocs/includes/modules/fichinter/modules_fichinter.php
\ingroup ficheinter \ingroup ficheinter
\brief Fichier contenant la classe m<>re de generation des fiches interventions en PDF \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 et la classe m<>re de num<75>rotation des fiches interventions
\version $Id$ \version $Id$
*/ */
@@ -33,7 +33,7 @@ require_once(DOL_DOCUMENT_ROOT.'/includes/fpdf/fpdfi/fpdi_protection.php');
/** /**
\class ModelePDFFicheinter \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 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() function pdferror()
{ {
@@ -56,12 +56,12 @@ 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) function liste_modeles($db)
{ {
global $conf; global $conf;
$type='ficheinter'; $type='ficheinter';
$liste=array(); $liste=array();
$sql = "SELECT nom as id, nom as lib"; $sql = "SELECT nom as id, nom as lib";
@@ -93,7 +93,7 @@ class ModelePDFFicheinter extends FPDF
/** /**
\class ModeleNumRefFicheinter \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 class ModeleNumRefFicheinter
@@ -108,7 +108,7 @@ class ModeleNumRefFicheinter
return true; 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 * \return string Texte descripif
*/ */
function info() function info()
@@ -118,7 +118,7 @@ class ModeleNumRefFicheinter
return $langs->trans("NoDescription"); return $langs->trans("NoDescription");
} }
/** \brief Renvoi un exemple de num<75>rotation /** \brief Renvoi un exemple de num<75>rotation
* \return string Example * \return string Example
*/ */
function getExample() function getExample()
@@ -128,8 +128,8 @@ class ModeleNumRefFicheinter
return $langs->trans("NoExample"); return $langs->trans("NoExample");
} }
/** \brief Test si les num<75>ros d<>j<EFBFBD> en vigueur dans la base ne provoquent pas de /** \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. * de conflits qui empechera cette num<75>rotation de fonctionner.
* \return boolean false si conflit, true si ok * \return boolean false si conflit, true si ok
*/ */
function canBeActivated() function canBeActivated()
@@ -137,7 +137,7 @@ class ModeleNumRefFicheinter
return true; return true;
} }
/** \brief Renvoi prochaine valeur attribu<62>e /** \brief Renvoi prochaine valeur attribu<62>e
* \return string Valeur * \return string Valeur
*/ */
function getNextValue() 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 \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 db objet base de donn<6E>e
\param object Object fichinter \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 \param outputlangs objet lang a utiliser pour traduction
\return int 0 si KO, 1 si OK \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/"; $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 (! strlen($modele))
{ {
if ($conf->global->FICHEINTER_ADDON_PDF) 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 \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 db objet base de donn<6E>e
\param propalid id de la propal <20> effacer \param propalid id de la propal <20> effacer
\param propalref r<>f<EFBFBD>rence de la propal si besoin \param propalref r<>f<EFBFBD>rence de la propal si besoin
*/ */
function fichinter_delete_preview($db, $fichinterid, $fichinterref='') 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 ( file_exists( $file ) && is_writable( $file ) )
{ {
if ( ! unlink($file) ) if ( ! dol_delete_file($file,1) )
{ {
$this->error=$langs->trans("ErrorFailedToOpenFile",$file); $this->error=$langs->trans("ErrorFailedToOpenFile",$file);
return 0; return 0;
@@ -264,7 +264,7 @@ function fichinter_delete_preview($db, $fichinterid, $fichinterref='')
$preview = $multiple.$i; $preview = $multiple.$i;
if ( file_exists( $preview ) && is_writable( $preview ) ) if ( file_exists( $preview ) && is_writable( $preview ) )
{ {
if ( ! unlink($preview) ) if ( ! dol_delete_file($preview,1) )
{ {
$this->error=$langs->trans("ErrorFailedToOpenFile",$preview); $this->error=$langs->trans("ErrorFailedToOpenFile",$preview);
return 0; return 0;
@@ -273,6 +273,8 @@ function fichinter_delete_preview($db, $fichinterid, $fichinterref='')
} }
} }
} }
return 1;
} }
?> ?>

View File

@@ -54,10 +54,10 @@ class ModelePDFDeliveryOrder extends FPDF
function liste_modeles($db) function liste_modeles($db)
{ {
global $conf; global $conf;
$type='delivery'; $type='delivery';
$liste=array(); $liste=array();
$sql = "SELECT nom as id, nom as lib"; $sql = "SELECT nom as id, nom as lib";
$sql.= " FROM ".MAIN_DB_PREFIX."document_model"; $sql.= " FROM ".MAIN_DB_PREFIX."document_model";
$sql.= " WHERE type = '".$type."'"; $sql.= " WHERE type = '".$type."'";
@@ -161,9 +161,9 @@ class ModeleNumRefDeliveryOrder
/** /**
* \brief Create object on disk * \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 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 * \param outputlangs objet lang a utiliser pour traduction
* \return int 0 si KO, 1 si OK * \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 ( file_exists( $file ) && is_writable( $file ) )
{ {
if ( ! unlink($file) ) if ( ! dol_delete_file($file,1) )
{ {
$this->error=$langs->trans("ErrorFailedToOpenFile",$file); $this->error=$langs->trans("ErrorFailedToOpenFile",$file);
return 0; return 0;
} }
} }
} }
return 1;
} }
?> ?>

View File

@@ -20,12 +20,12 @@
*/ */
/** /**
\file htdocs/includes/modules/propale/modules_propale.php \file htdocs/includes/modules/propale/modules_propale.php
\ingroup propale \ingroup propale
\brief Fichier contenant la classe m<>re de generation des propales en PDF \brief Fichier contenant la classe m<>re de generation des propales en PDF
et la classe m<>re de num<75>rotation des propales et la classe m<>re de num<75>rotation des propales
\version $Id$ \version $Id$
*/ */
require_once(DOL_DOCUMENT_ROOT.'/lib/pdf.lib.php'); require_once(DOL_DOCUMENT_ROOT.'/lib/pdf.lib.php');
require_once(DOL_DOCUMENT_ROOT.'/includes/fpdf/fpdfi/fpdi_protection.php'); require_once(DOL_DOCUMENT_ROOT.'/includes/fpdf/fpdfi/fpdi_protection.php');
@@ -33,118 +33,118 @@ require_once(DOL_DOCUMENT_ROOT."/compta/bank/account.class.php"); // Requis ca
/** /**
\class ModelePDFPropales \class ModelePDFPropales
\brief Classe mere des modeles de propale \brief Classe mere des modeles de propale
*/ */
class ModelePDFPropales extends FPDF class ModelePDFPropales extends FPDF
{ {
var $error=''; var $error='';
/** /**
* \brief Renvoi le dernier message d'erreur de creation de propale * \brief Renvoi le dernier message d'erreur de creation de propale
*/ */
function pdferror() function pdferror()
{ {
return $this->error; return $this->error;
} }
/** /**
* \brief Renvoi la liste des modeles actifs * \brief Renvoi la liste des modeles actifs
*/ */
function liste_modeles($db) function liste_modeles($db)
{ {
global $conf; global $conf;
$type='propal';
$liste=array();
$sql = "SELECT nom as id, nom as lib";
$sql.= " FROM ".MAIN_DB_PREFIX."document_model";
$sql.= " WHERE type = '".$type."'";
$sql.= " AND entity = ".$conf->entity;
dol_syslog("modules_propale::liste_modeles sql=".$sql, LOG_DEBUG); $type='propal';
$resql = $db->query($sql); $liste=array();
if ($resql)
{ $sql = "SELECT nom as id, nom as lib";
$num = $db->num_rows($resql); $sql.= " FROM ".MAIN_DB_PREFIX."document_model";
$i = 0; $sql.= " WHERE type = '".$type."'";
while ($i < $num) $sql.= " AND entity = ".$conf->entity;
{
$row = $db->fetch_row($resql); dol_syslog("modules_propale::liste_modeles sql=".$sql, LOG_DEBUG);
$liste[$row[0]]=$row[1]; $resql = $db->query($sql);
$i++; if ($resql)
} {
} $num = $db->num_rows($resql);
else $i = 0;
{ while ($i < $num)
$this->error=$db->error(); {
return -1; $row = $db->fetch_row($resql);
} $liste[$row[0]]=$row[1];
return $liste; $i++;
} }
}
else
{
$this->error=$db->error();
return -1;
}
return $liste;
}
} }
/** /**
\class ModeleNumRefPropales \class ModeleNumRefPropales
\brief Classe mere des modeles de numerotation des references de propales \brief Classe mere des modeles de numerotation des references de propales
*/ */
class ModeleNumRefPropales class ModeleNumRefPropales
{ {
var $error=''; var $error='';
/** \brief Return if a module can be used or not /** \brief Return if a module can be used or not
* \return boolean true if module can be used * \return boolean true if module can be used
*/ */
function isEnabled() function isEnabled()
{ {
return true; return true;
} }
/** \brief Renvoi la description par defaut du modele de numerotation /** \brief Renvoi la description par defaut du modele de numerotation
* \return string Texte descripif * \return string Texte descripif
*/ */
function info() function info()
{ {
global $langs; global $langs;
$langs->load("propale"); $langs->load("propale");
return $langs->trans("NoDescription"); return $langs->trans("NoDescription");
} }
/** \brief Renvoi un exemple de numerotation /** \brief Renvoi un exemple de numerotation
* \return string Example * \return string Example
*/ */
function getExample() function getExample()
{ {
global $langs; global $langs;
$langs->load("propale"); $langs->load("propale");
return $langs->trans("NoExample"); return $langs->trans("NoExample");
} }
/** \brief Test si les numeros deja en vigueur dans la base ne provoquent pas de /** \brief Test si les numeros deja en vigueur dans la base ne provoquent pas de
* de conflits qui empechera cette numerotation de fonctionner. * de conflits qui empechera cette numerotation de fonctionner.
* \return boolean false si conflit, true si ok * \return boolean false si conflit, true si ok
*/ */
function canBeActivated() function canBeActivated()
{ {
return true; return true;
} }
/** \brief Renvoi prochaine valeur attribuee /** \brief Renvoi prochaine valeur attribuee
* \return string Valeur * \return string Valeur
*/ */
function getNextValue() function getNextValue()
{ {
global $langs; global $langs;
return $langs->trans("NotAvailable"); return $langs->trans("NotAvailable");
} }
/** \brief Renvoi version du module numerotation /** \brief Renvoi version du module numerotation
* \return string Valeur * \return string Valeur
*/ */
function getVersion() function getVersion()
{ {
global $langs; global $langs;
@@ -159,13 +159,13 @@ class ModeleNumRefPropales
/** /**
\brief Cree une propale sur disque en fonction du modele de PROPALE_ADDON_PDF \brief Cree une propale sur disque en fonction du modele de PROPALE_ADDON_PDF
\param db objet base de donnee \param db objet base de donnee
\param id id de la propale <20> creer \param id id de la propale <20> creer
\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 \param outputlangs objet lang a utiliser pour traduction
\return int 0 si KO, 1 si OK \return int 0 si KO, 1 si OK
*/ */
function propale_pdf_create($db, $id, $modele, $outputlangs) function propale_pdf_create($db, $id, $modele, $outputlangs)
{ {
global $langs; global $langs;
@@ -178,28 +178,28 @@ function propale_pdf_create($db, $id, $modele, $outputlangs)
$file = "pdf_propale_".$modele.".modules.php"; $file = "pdf_propale_".$modele.".modules.php";
if ($modele && file_exists($dir.$file)) $modelisok=1; if ($modele && file_exists($dir.$file)) $modelisok=1;
// Si model pas encore bon // Si model pas encore bon
if (! $modelisok) if (! $modelisok)
{ {
if ($conf->global->PROPALE_ADDON_PDF) $modele = $conf->global->PROPALE_ADDON_PDF; if ($conf->global->PROPALE_ADDON_PDF) $modele = $conf->global->PROPALE_ADDON_PDF;
$file = "pdf_propale_".$modele.".modules.php"; $file = "pdf_propale_".$modele.".modules.php";
if (file_exists($dir.$file)) $modelisok=1; if (file_exists($dir.$file)) $modelisok=1;
} }
// Si model pas encore bon // Si model pas encore bon
if (! $modelisok) if (! $modelisok)
{ {
$liste=array(); $liste=array();
$model=new ModelePDFPropales(); $model=new ModelePDFPropales();
$liste=$model->liste_modeles($db); $liste=$model->liste_modeles($db);
$modele=key($liste); // Renvoie premiere valeur de cle trouve dans le tableau $modele=key($liste); // Renvoie premiere valeur de cle trouve dans le tableau
$file = "pdf_propale_".$modele.".modules.php"; $file = "pdf_propale_".$modele.".modules.php";
if (file_exists($dir.$file)) $modelisok=1; if (file_exists($dir.$file)) $modelisok=1;
} }
// Charge le modele // Charge le modele
if ($modelisok) if ($modelisok)
{ {
$classname = "pdf_propale_".$modele; $classname = "pdf_propale_".$modele;
require_once($dir.$file); require_once($dir.$file);
@@ -226,66 +226,68 @@ function propale_pdf_create($db, $id, $modele, $outputlangs)
} }
else else
{ {
if (! $conf->global->PROPALE_ADDON_PDF) if (! $conf->global->PROPALE_ADDON_PDF)
{ {
print $langs->trans("Error")." ".$langs->trans("Error_PROPALE_ADDON_PDF_NotDefined"); print $langs->trans("Error")." ".$langs->trans("Error_PROPALE_ADDON_PDF_NotDefined");
} }
else else
{ {
print $langs->trans("Error")." ".$langs->trans("ErrorFileDoesNotExists",$dir.$file); print $langs->trans("Error")." ".$langs->trans("ErrorFileDoesNotExists",$dir.$file);
} }
return 0; return 0;
} }
} }
/** /**
\brief Supprime l'image de previsualitation, pour le cas de regeneration de propal \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 propalid id de la propal a effacer
\param propalref reference de la propal si besoin \param propalref reference de la propal si besoin
*/ */
function propale_delete_preview($db, $propalid, $propalref='') function propale_delete_preview($db, $propalid, $propalref='')
{ {
global $langs,$conf; global $langs,$conf;
if (!$propalref) if (!$propalref)
{ {
$propal = new Propal($db,"",$propalid); $propal = new Propal($db,"",$propalid);
$propal->fetch($propalid); $propal->fetch($propalid);
$propalref = $propal->ref; $propalref = $propal->ref;
} }
if ($conf->propale->dir_output) if ($conf->propale->dir_output)
{ {
$propalref = dol_sanitizeFileName($propalref); $propalref = dol_sanitizeFileName($propalref);
$dir = $conf->propale->dir_output . "/" . $propalref ; $dir = $conf->propale->dir_output . "/" . $propalref ;
$file = $dir . "/" . $propalref . ".pdf.png"; $file = $dir . "/" . $propalref . ".pdf.png";
$multiple = $file . "."; $multiple = $file . ".";
if ( file_exists( $file ) && is_writable( $file ) ) if ( file_exists( $file ) && is_writable( $file ) )
{ {
if ( ! unlink($file) ) if ( ! dol_delete_file($file,1) )
{ {
$this->error=$langs->trans("ErrorFailedToOpenFile",$file); $this->error=$langs->trans("ErrorFailedToOpenFile",$file);
return 0; return 0;
} }
} }
else else
{ {
for ($i = 0; $i < 20; $i++) for ($i = 0; $i < 20; $i++)
{ {
$preview = $multiple.$i; $preview = $multiple.$i;
if ( file_exists( $preview ) && is_writable( $preview ) ) if ( file_exists( $preview ) && is_writable( $preview ) )
{ {
if ( ! unlink($preview) ) if ( ! unlink($preview) )
{ {
$this->error=$langs->trans("ErrorFailedToOpenFile",$preview); $this->error=$langs->trans("ErrorFailedToOpenFile",$preview);
return 0; return 0;
} }
} }
} }
} }
} }
return 1;
} }
?> ?>

View File

@@ -55,10 +55,10 @@ class ModelePDFSuppliersOrders extends FPDF
function liste_modeles($db) function liste_modeles($db)
{ {
global $conf; global $conf;
$type='supplier_order'; $type='supplier_order';
$liste=array(); $liste=array();
$sql = "SELECT nom as id, nom as lib"; $sql = "SELECT nom as id, nom as lib";
$sql.= " FROM ".MAIN_DB_PREFIX."document_model"; $sql.= " FROM ".MAIN_DB_PREFIX."document_model";
$sql.= " WHERE type = '".$type."'"; $sql.= " WHERE type = '".$type."'";
@@ -238,12 +238,14 @@ function supplier_order_delete_preview($db, $propalid)
if ( file_exists( $file ) && is_writable( $file ) ) if ( file_exists( $file ) && is_writable( $file ) )
{ {
if ( ! unlink($file) ) if ( ! dol_delete_file($file) )
{ {
$this->error=$langs->trans("ErrorFailedToOpenFile",$file); $this->error=$langs->trans("ErrorFailedToOpenFile",$file);
return 0; return 0;
} }
} }
} }
return 1;
} }
?> ?>

View File

@@ -196,7 +196,7 @@ function dol_mimetype($file)
*/ */
function dol_dir_is_emtpy($folder) 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)) if (is_dir($newfolder))
{ {
$handle = opendir($newfolder); $handle = opendir($newfolder);
@@ -244,4 +244,41 @@ function dol_count_nb_of_line($file)
return $nb; 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,19 +2124,29 @@ function print_fleche_navigation($page,$file,$options='',$nextpage,$betweenarrow
/** /**
* \brief Remove a file * \brief Remove a file or several files with a mask
* \param file Fichier a effacer ou masque de fichier a effacer * \param file File to delete or mask of file to delete
* \param boolean true if file deleted, false if error * \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; $ok=true;
$newfile=utf8_check($file)?utf8_decode($file):$file; // glob function accepts only ISO string $newfile=utf8_check($file)?utf8_decode($file):$file; // glob function accepts only ISO string
foreach (glob($newfile) as $filename) if (empty($disableglob))
{ {
$ok=unlink($filename); foreach (glob($newfile) as $filename)
if ($ok) dol_syslog("Removed file ".$filename,LOG_DEBUG); {
else dol_syslog("Failed to remove file ".$filename,LOG_ERR); $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; return $ok;
} }
@@ -3006,5 +3016,4 @@ function utf8_check($Str)
return true; return true;
} }
?> ?>

View File

@@ -538,26 +538,26 @@ class Product extends CommonObject
$sqlz.= " WHERE rowid = ".$id; $sqlz.= " WHERE rowid = ".$id;
$resultz = $this->db->query($sqlz); $resultz = $this->db->query($sqlz);
if ( !$resultz ) if ( !$resultz )
{ {
dol_syslog('Product::delete error sqlz='.$sqlz, LOG_ERR); dol_syslog('Product::delete error sqlz='.$sqlz, LOG_ERR);
} }
// Appel des triggers // Appel des triggers
include_once(DOL_DOCUMENT_ROOT . "/interfaces.class.php"); include_once(DOL_DOCUMENT_ROOT . "/interfaces.class.php");
$interface=new Interfaces($this->db); $interface=new Interfaces($this->db);
$result=$interface->run_triggers('PRODUCT_DELETE',$this,$user,$langs,$conf); $result=$interface->run_triggers('PRODUCT_DELETE',$this,$user,$langs,$conf);
if ($result < 0) { $error++; $this->errors=$interface->errors; } if ($result < 0) { $error++; $this->errors=$interface->errors; }
// Fin appel triggers // Fin appel triggers
if ($error) if ($error)
{ {
return -$error; return -$error;
} }
else else
{ {
return 0; return 0;
} }
} }
else else
{ {
@@ -1619,17 +1619,17 @@ class Product extends CommonObject
if ($result = $this->db->query($sql)) if ($result = $this->db->query($sql))
{ {
while ($row = $this->db->fetch_row($result) ) while ($row = $this->db->fetch_row($result) )
{ {
$this->subproducts_id[$i] = $row[0]; $this->subproducts_id[$i] = $row[0];
$i++; $i++;
} }
$this->db->free($result); $this->db->free($result);
return 0; return 0;
} }
else else
{ {
return -1; return -1;
} }
} }
@@ -2487,33 +2487,38 @@ class Product extends CommonObject
*/ */
function liste_photos($dir,$nbmax=0) function liste_photos($dir,$nbmax=0)
{ {
include_once(DOL_DOCUMENT_ROOT.'/lib/files.lib.php');
$nbphoto=0; $nbphoto=0;
$tabobj=array(); $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) 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++; $nbphoto++;
$photo = $file;
// On determine nom du fichier vignette // On determine nom du fichier vignette
$photo=$file;
$photo_vignette=''; $photo_vignette='';
if (eregi('(\.jpg|\.bmp|\.gif|\.png|\.tiff)$',$photo,$regs)) if (eregi('(\.jpg|\.bmp|\.gif|\.png|\.tiff)$',$photo,$regs))
{ {
$photo_vignette=eregi_replace($regs[0],'',$photo).'_small'.$regs[0]; $photo_vignette=eregi_replace($regs[0],'',$photo).'_small'.$regs[0];
} }
$dirthumb = $dir.'thumbs/';
// Objet // Objet
$obj=array(); $obj=array();
$obj['photo']=$photo; $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']=""; else $obj['photo_vignette']="";
$tabobj[$nbphoto-1]=$obj; $tabobj[$nbphoto-1]=$obj;
@@ -2540,7 +2545,7 @@ class Product extends CommonObject
$filename = eregi_replace($dir,'',$file); // Nom du fichier $filename = eregi_replace($dir,'',$file); // Nom du fichier
// On efface l'image d'origine // On efface l'image d'origine
unlink($file); dol_delete_file($file);
// Si elle existe, on efface la vignette // Si elle existe, on efface la vignette
if (eregi('(\.jpg|\.bmp|\.gif|\.png|\.tiff)$',$filename,$regs)) 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]; $photo_vignette=eregi_replace($regs[0],'',$filename).'_small'.$regs[0];
if (file_exists($dirthumb.$photo_vignette)) 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) 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->imgWidth = $infoImg[0]; // Largeur de l'image
$this->imgHeight = $infoImg[1]; // Hauteur de l'image $this->imgHeight = $infoImg[1]; // Hauteur de l'image
} }

View File

@@ -1,6 +1,6 @@
<?php <?php
/* Copyright (C) 2001-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org> /* 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 Eric Seigne <eric.seigne@ryxeo.com>
* Copyright (C) 2005-2009 Regis Houssin <regis@dolibarr.fr> * Copyright (C) 2005-2009 Regis Houssin <regis@dolibarr.fr>
* *
@@ -171,7 +171,7 @@ if ($_GET["id"] || $_GET["ref"])
print "\n</div>\n"; 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)) 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 && ($nbphoto % $nbbyrow == 1)) print '<tr align=center valign=middle border=1>';
if ($nbbyrow) print '<td width="'.ceil(100/$nbbyrow).'%" class="photo">'; 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 // Si fichier vignette disponible, on l'utilise, sinon on utilise photo origine
if ($obj['photo_vignette']) if ($obj['photo_vignette'])

View File

@@ -376,17 +376,16 @@ if ($modulepart == 'barcode')
$result=$module->buildBarCode($code,$encoding,$readable); $result=$module->buildBarCode($code,$encoding,$readable);
} }
} }
else else // Open and return file
{ {
// Ouvre et renvoi fichier
clearstatcache(); clearstatcache();
// Output files on disk // Output files on browser
$filename = basename($original_file); 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"); // 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))
{ {
$langs->load("main"); $langs->load("main");
dol_print_error(0,$langs->trans("ErrorFileDoesNotExists",$_GET["file"])); dol_print_error(0,$langs->trans("ErrorFileDoesNotExists",$_GET["file"]));
@@ -403,7 +402,7 @@ else
header('Content-type: image/png'); header('Content-type: image/png');
} }
readfile($original_file); readfile($neworiginal_file); // Need a path in ISO
} }
?> ?>