diff --git a/htdocs/categories/categorie.class.php b/htdocs/categories/categorie.class.php
index 1385c963899..31744796bfe 100644
--- a/htdocs/categories/categorie.class.php
+++ b/htdocs/categories/categorie.class.php
@@ -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);
}
}
}
diff --git a/htdocs/document.php b/htdocs/document.php
index f455692ab88..5a259898f80 100644
--- a/htdocs/document.php
+++ b/htdocs/document.php
@@ -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
}
?>
diff --git a/htdocs/html.formfile.class.php b/htdocs/html.formfile.class.php
index 55ba868c6d1..a9085f32d3c 100644
--- a/htdocs/html.formfile.class.php
+++ b/htdocs/html.formfile.class.php
@@ -376,7 +376,7 @@ class FormFile
print '';
if (!$iconPDF) print '';
// Affiche taille fichier
- if (!$iconPDF) print '
'.dol_filesize($filedir."/".$file["name"]).' ';
+ if (!$iconPDF) print ''.dol_print_size(filesize($filedir."/".$file["name"])).' ';
// Affiche date fichier
if (!$iconPDF) print ''.dol_print_date(filemtime($filedir."/".$file["name"]),'dayhour').' ';
@@ -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");
-}
-
?>
diff --git a/htdocs/imports/import.php b/htdocs/imports/import.php
index ad86183b851..299d51f0192 100644
--- a/htdocs/imports/import.php
+++ b/htdocs/imports/import.php
@@ -535,10 +535,10 @@ if ($step == 3 && $datatoimport)
print ' ';
print "\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 '';
@@ -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 ' '.img_mime($file).' ';
print ''.$file.' ';
// Affiche taille fichier
- print ''.dol_filesize($dir.'/'.$file).' ';
+ print ''.dol_print_size(filesize($newdir.'/'.$newfile)).' ';
// Affiche date fichier
- print ''.dol_print_date(filemtime($dir.'/'.$file),'dayhour').' ';
+ print ''.dol_print_date(filemtime($newdir.'/'.$newfile),'dayhour').' ';
// Del button
print 'trans("NoDescription");
- }
+ /** \brief Renvoi la description par defaut du modele de num�rotation
+ * \return string Texte descripif
+ */
+ function info()
+ {
+ global $langs;
+ $langs->load("orders");
+ return $langs->trans("NoDescription");
+ }
- /** \brief Renvoi un exemple de numérotation
- * \return string Example
- */
- function getExample()
- {
- global $langs;
- $langs->load("orders");
- return $langs->trans("NoExample");
- }
+ /** \brief Renvoi un exemple de num�rotation
+ * \return string Example
+ */
+ function getExample()
+ {
+ global $langs;
+ $langs->load("orders");
+ return $langs->trans("NoExample");
+ }
- /** \brief Test si les numéros déjà en vigueur dans la base ne provoquent pas de
- * de conflits qui empechera cette numérotation de fonctionner.
- * \return boolean false si conflit, true si ok
- */
- function canBeActivated()
- {
- return true;
- }
+ /** \brief Test si les num�ros d�j� en vigueur dans la base ne provoquent pas de
+ * de conflits qui empechera cette num�rotation de fonctionner.
+ * \return boolean false si conflit, true si ok
+ */
+ function canBeActivated()
+ {
+ return true;
+ }
- /** \brief Renvoi prochaine valeur attribuée
- * \return string Valeur
- */
- function getNextValue()
- {
- global $langs;
- return $langs->trans("NotAvailable");
- }
+ /** \brief Renvoi prochaine valeur attribu�e
+ * \return string Valeur
+ */
+ function getNextValue()
+ {
+ global $langs;
+ return $langs->trans("NotAvailable");
+ }
/** \brief Renvoi version du module numerotation
- * \return string Valeur
- */
+ * \return string Valeur
+ */
function getVersion()
{
global $langs;
@@ -162,12 +162,12 @@ class ModeleNumRefCommandes
/*
- \brief Crée un bon de commande sur disque en fonction d'un modèle
- \param db objet base de donnée
- \param id id de la propale à créer
- \param modele force le modele à utiliser ('' to not force)
- \param outputlangs objet lang a utiliser pour traduction
-*/
+ \brief Cr�e un bon de commande sur disque en fonction d'un mod�le
+ \param db objet base de donn�e
+ \param id id de la propale � cr�er
+ \param modele force le modele � utiliser ('' to not force)
+ \param outputlangs objet lang a utiliser pour traduction
+ */
function commande_pdf_create($db, $id, $modele, $outputlangs)
{
global $conf,$langs;
@@ -175,32 +175,32 @@ function commande_pdf_create($db, $id, $modele, $outputlangs)
$dir = DOL_DOCUMENT_ROOT."/includes/modules/commande/";
$modelisok=0;
- $liste=array();
+ $liste=array();
- // Positionne modele sur le nom du modele de commande à utiliser
+ // Positionne modele sur le nom du modele de commande � utiliser
$file = "pdf_".$modele.".modules.php";
if ($modele && file_exists($dir.$file)) $modelisok=1;
- // Si model pas encore bon
+ // Si model pas encore bon
if (! $modelisok)
{
if ($conf->global->COMMANDE_ADDON_PDF) $modele = $conf->global->COMMANDE_ADDON_PDF;
- $file = "pdf_".$modele.".modules.php";
- if (file_exists($dir.$file)) $modelisok=1;
- }
+ $file = "pdf_".$modele.".modules.php";
+ if (file_exists($dir.$file)) $modelisok=1;
+ }
- // Si model pas encore bon
+ // Si model pas encore bon
if (! $modelisok)
{
$model=new ModelePDFCommandes();
$liste=$model->liste_modeles($db);
- $modele=key($liste); // Renvoie premiere valeur de clé trouvé dans le tableau
- $file = "pdf_".$modele.".modules.php";
- if (file_exists($dir.$file)) $modelisok=1;
+ $modele=key($liste); // Renvoie premiere valeur de cl� trouv� dans le tableau
+ $file = "pdf_".$modele.".modules.php";
+ if (file_exists($dir.$file)) $modelisok=1;
}
// Charge le modele
- if ($modelisok)
+ if ($modelisok)
{
$classname = "pdf_".$modele;
require_once($dir.$file);
@@ -227,66 +227,68 @@ function commande_pdf_create($db, $id, $modele, $outputlangs)
}
else
{
- if (! $conf->global->COMMANDE_ADDON_PDF)
- {
+ if (! $conf->global->COMMANDE_ADDON_PDF)
+ {
print $langs->trans("Error")." ".$langs->trans("Error_COMMANDE_ADDON_PDF_NotDefined");
- }
- else
- {
- print $langs->trans("Error")." ".$langs->trans("ErrorFileDoesNotExists",$dir.$file);
- }
+ }
+ else
+ {
+ print $langs->trans("Error")." ".$langs->trans("ErrorFileDoesNotExists",$dir.$file);
+ }
return 0;
- }
+ }
}
/**
- \brief Supprime l'image de prévisualitation, pour le cas de régénération de commande
- \param db objet base de donnée
- \param commandeid id de la commande à effacer
- \param commanderef référence de la commande si besoin
-*/
+ \brief Supprime l'image de pr�visualitation, pour le cas de r�g�n�ration de commande
+ \param db objet base de donn�e
+ \param commandeid id de la commande � effacer
+ \param commanderef r�f�rence de la commande si besoin
+ */
function commande_delete_preview($db, $commandeid, $commanderef='')
{
- global $langs,$conf;
+ global $langs,$conf;
- if (!$commanderef)
- {
- $com = new Commande($db,"",$commandeid);
- $com->fetch($commandeid);
- $commanderef = $com->ref;
- }
+ if (!$commanderef)
+ {
+ $com = new Commande($db,"",$commandeid);
+ $com->fetch($commandeid);
+ $commanderef = $com->ref;
+ }
- if ($conf->commande->dir_output)
- {
- $comref = dol_sanitizeFileName($commanderef);
- $dir = $conf->commande->dir_output . "/" . $comref ;
- $file = $dir . "/" . $comref . ".pdf.png";
- $multiple = $file . ".";
+ if ($conf->commande->dir_output)
+ {
+ $comref = dol_sanitizeFileName($commanderef);
+ $dir = $conf->commande->dir_output . "/" . $comref ;
+ $file = $dir . "/" . $comref . ".pdf.png";
+ $multiple = $file . ".";
- if ( file_exists( $file ) && is_writable( $file ) )
- {
- if ( ! unlink($file) )
- {
- $this->error=$langs->trans("ErrorFailedToOpenFile",$file);
- return 0;
- }
- }
- else
- {
- for ($i = 0; $i < 20; $i++)
- {
- $preview = $multiple.$i;
+ if ( file_exists( $file ) && is_writable( $file ) )
+ {
+ if ( ! dol_delete_file($file,1) )
+ {
+ $this->error=$langs->trans("ErrorFailedToOpenFile",$file);
+ return 0;
+ }
+ }
+ else
+ {
+ for ($i = 0; $i < 20; $i++)
+ {
+ $preview = $multiple.$i;
- if ( file_exists( $preview ) && is_writable( $preview ) )
- {
- if ( ! unlink($preview) )
- {
- $this->error=$langs->trans("ErrorFailedToOpenFile",$preview);
- return 0;
- }
- }
- }
- }
- }
+ if ( file_exists( $preview ) && is_writable( $preview ) )
+ {
+ if ( ! dol_delete_file($preview,1) )
+ {
+ $this->error=$langs->trans("ErrorFailedToOpenFile",$preview);
+ return 0;
+ }
+ }
+ }
+ }
+ }
+
+ return 1;
}
?>
diff --git a/htdocs/includes/modules/facture/modules_facture.php b/htdocs/includes/modules/facture/modules_facture.php
index b3a9f6da87d..05f52ac4d1b 100644
--- a/htdocs/includes/modules/facture/modules_facture.php
+++ b/htdocs/includes/modules/facture/modules_facture.php
@@ -58,7 +58,7 @@ class ModelePDFFactures extends FPDF
function liste_modeles($db)
{
global $conf;
-
+
$type='invoice';
$liste=array();
$sql = "SELECT nom as id, nom as lib";
@@ -266,8 +266,8 @@ CLIENT=\"" . $client . "\"
TOTAL_HT=\"" . $fac->total_ht . "\"
TOTAL_TTC=\"" . $fac->total_ttc . "\"\n";
- for ($i = 0 ; $i < $nblignes ; $i++)
- {
+ for ($i = 0 ; $i < $nblignes ; $i++)
+ {
//Pour les articles
$meta .= "ITEM_" . $i . "_QUANTITY=\"" . $fac->lignes[$i]->qty . "\"
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);
fclose($fp);
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
- \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) )
- {
- return 0;
- }
+ if ( ! dol_delete_file($file,1) )
+ {
+ return 0;
+ }
}
}
+
+ return 1;
}
?>
\ No newline at end of file
diff --git a/htdocs/includes/modules/fichinter/modules_fichinter.php b/htdocs/includes/modules/fichinter/modules_fichinter.php
index c60866272ca..33e5142ffe4 100644
--- a/htdocs/includes/modules/fichinter/modules_fichinter.php
+++ b/htdocs/includes/modules/fichinter/modules_fichinter.php
@@ -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é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�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èles de fiche intervention
+ \brief Classe m�re des mod�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éation de fiche intervention
+ \brief Renvoi le dernier message d'erreur de cr�ation de fiche intervention
*/
function pdferror()
{
@@ -56,12 +56,12 @@ class ModelePDFFicheinter extends FPDF
}
/**
- * \brief Renvoi la liste des modèles actifs
+ * \brief Renvoi la liste des mod�les actifs
*/
function liste_modeles($db)
{
global $conf;
-
+
$type='ficheinter';
$liste=array();
$sql = "SELECT nom as id, nom as lib";
@@ -93,7 +93,7 @@ class ModelePDFFicheinter extends FPDF
/**
\class ModeleNumRefFicheinter
- \brief Classe mère des modèles de numérotation des références de fiches d'intervention
+ \brief Classe m�re des mod�les de num�rotation des r�f�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érotation
+ /** \brief Renvoi la description par defaut du modele de num�rotation
* \return string Texte descripif
*/
function info()
@@ -118,7 +118,7 @@ class ModeleNumRefFicheinter
return $langs->trans("NoDescription");
}
- /** \brief Renvoi un exemple de numérotation
+ /** \brief Renvoi un exemple de num�rotation
* \return string Example
*/
function getExample()
@@ -128,8 +128,8 @@ class ModeleNumRefFicheinter
return $langs->trans("NoExample");
}
- /** \brief Test si les numéros déjà en vigueur dans la base ne provoquent pas de
- * de conflits qui empechera cette numérotation de fonctionner.
+ /** \brief Test si les num�ros d�j� en vigueur dans la base ne provoquent pas de
+ * de conflits qui empechera cette num�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ée
+ /** \brief Renvoi prochaine valeur attribu�e
* \return string Valeur
*/
function getNextValue()
@@ -163,10 +163,10 @@ class ModeleNumRefFicheinter
/**
- \brief Crée une fiche intervention sur disque en fonction du modèle de FICHEINTER_ADDON_PDF
- \param db objet base de donnée
+ \brief Cr�e une fiche intervention sur disque en fonction du mod�le de FICHEINTER_ADDON_PDF
+ \param db objet base de donn�e
\param object Object fichinter
- \param modele force le modele à utiliser ('' par defaut)
+ \param modele force le modele � 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 à utiliser
+ // Positionne modele sur le nom du modele de facture � 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évisualitation, pour le cas de régénération de propal
- \param db objet base de donnée
- \param propalid id de la propal à effacer
- \param propalref référence de la propal si besoin
+ \brief Supprime l'image de pr�visualitation, pour le cas de r�g�n�ration de propal
+ \param db objet base de donn�e
+ \param propalid id de la propal � effacer
+ \param propalref r�f�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;
}
?>
diff --git a/htdocs/includes/modules/livraison/modules_livraison.php b/htdocs/includes/modules/livraison/modules_livraison.php
index eed6c3d4c56..f99083a33f1 100644
--- a/htdocs/includes/modules/livraison/modules_livraison.php
+++ b/htdocs/includes/modules/livraison/modules_livraison.php
@@ -54,10 +54,10 @@ class ModelePDFDeliveryOrder extends FPDF
function liste_modeles($db)
{
global $conf;
-
+
$type='delivery';
$liste=array();
-
+
$sql = "SELECT nom as id, nom as lib";
$sql.= " FROM ".MAIN_DB_PREFIX."document_model";
$sql.= " WHERE type = '".$type."'";
@@ -161,9 +161,9 @@ class ModeleNumRefDeliveryOrder
/**
* \brief Create object on disk
- * \param db objet base de donnée
+ * \param db objet base de donn�e
* \param deliveryid id object
- * \param modele force le modele à utiliser ('' to not force)
+ * \param modele force le modele � 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;
}
?>
diff --git a/htdocs/includes/modules/propale/modules_propale.php b/htdocs/includes/modules/propale/modules_propale.php
index 4c0f967af6b..d89015568b8 100644
--- a/htdocs/includes/modules/propale/modules_propale.php
+++ b/htdocs/includes/modules/propale/modules_propale.php
@@ -20,12 +20,12 @@
*/
/**
- \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érotation des propales
- \version $Id$
-*/
+ \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�rotation des propales
+ \version $Id$
+ */
require_once(DOL_DOCUMENT_ROOT.'/lib/pdf.lib.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
- \brief Classe mere des modeles de propale
-*/
+ \class ModelePDFPropales
+ \brief Classe mere des modeles de propale
+ */
class ModelePDFPropales extends FPDF
{
- var $error='';
+ var $error='';
- /**
- * \brief Renvoi le dernier message d'erreur de creation de propale
- */
- function pdferror()
- {
- return $this->error;
- }
+ /**
+ * \brief Renvoi le dernier message d'erreur de creation de propale
+ */
+ function pdferror()
+ {
+ return $this->error;
+ }
- /**
- * \brief Renvoi la liste des modeles actifs
- */
- function liste_modeles($db)
- {
- 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;
+ /**
+ * \brief Renvoi la liste des modeles actifs
+ */
+ function liste_modeles($db)
+ {
+ global $conf;
- dol_syslog("modules_propale::liste_modeles sql=".$sql, LOG_DEBUG);
- $resql = $db->query($sql);
- if ($resql)
- {
- $num = $db->num_rows($resql);
- $i = 0;
- while ($i < $num)
- {
- $row = $db->fetch_row($resql);
- $liste[$row[0]]=$row[1];
- $i++;
- }
- }
- else
- {
- $this->error=$db->error();
- return -1;
- }
- return $liste;
- }
+ $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);
+ $resql = $db->query($sql);
+ if ($resql)
+ {
+ $num = $db->num_rows($resql);
+ $i = 0;
+ while ($i < $num)
+ {
+ $row = $db->fetch_row($resql);
+ $liste[$row[0]]=$row[1];
+ $i++;
+ }
+ }
+ else
+ {
+ $this->error=$db->error();
+ return -1;
+ }
+ return $liste;
+ }
}
/**
- \class ModeleNumRefPropales
- \brief Classe mere des modeles de numerotation des references de propales
-*/
+ \class ModeleNumRefPropales
+ \brief Classe mere des modeles de numerotation des references de propales
+ */
class ModeleNumRefPropales
{
- var $error='';
+ var $error='';
/** \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()
{
return true;
}
- /** \brief Renvoi la description par defaut du modele de numerotation
- * \return string Texte descripif
- */
- function info()
- {
- global $langs;
- $langs->load("propale");
- return $langs->trans("NoDescription");
- }
+ /** \brief Renvoi la description par defaut du modele de numerotation
+ * \return string Texte descripif
+ */
+ function info()
+ {
+ global $langs;
+ $langs->load("propale");
+ return $langs->trans("NoDescription");
+ }
- /** \brief Renvoi un exemple de numerotation
- * \return string Example
- */
- function getExample()
- {
- global $langs;
- $langs->load("propale");
- return $langs->trans("NoExample");
- }
+ /** \brief Renvoi un exemple de numerotation
+ * \return string Example
+ */
+ function getExample()
+ {
+ global $langs;
+ $langs->load("propale");
+ return $langs->trans("NoExample");
+ }
- /** \brief Test si les numeros deja en vigueur dans la base ne provoquent pas de
- * de conflits qui empechera cette numerotation de fonctionner.
- * \return boolean false si conflit, true si ok
- */
- function canBeActivated()
- {
- return true;
- }
+ /** \brief Test si les numeros deja en vigueur dans la base ne provoquent pas de
+ * de conflits qui empechera cette numerotation de fonctionner.
+ * \return boolean false si conflit, true si ok
+ */
+ function canBeActivated()
+ {
+ return true;
+ }
- /** \brief Renvoi prochaine valeur attribuee
- * \return string Valeur
- */
- function getNextValue()
- {
- global $langs;
- return $langs->trans("NotAvailable");
- }
+ /** \brief Renvoi prochaine valeur attribuee
+ * \return string Valeur
+ */
+ function getNextValue()
+ {
+ global $langs;
+ return $langs->trans("NotAvailable");
+ }
/** \brief Renvoi version du module numerotation
- * \return string Valeur
- */
+ * \return string Valeur
+ */
function getVersion()
{
global $langs;
@@ -159,13 +159,13 @@ 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 à creer
- \param modele force le modele à utiliser ('' to not force)
- \param outputlangs objet lang a utiliser pour traduction
- \return int 0 si KO, 1 si OK
-*/
+ \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 � creer
+ \param modele force le modele � utiliser ('' to not force)
+ \param outputlangs objet lang a utiliser pour traduction
+ \return int 0 si KO, 1 si OK
+ */
function propale_pdf_create($db, $id, $modele, $outputlangs)
{
global $langs;
@@ -178,28 +178,28 @@ function propale_pdf_create($db, $id, $modele, $outputlangs)
$file = "pdf_propale_".$modele.".modules.php";
if ($modele && file_exists($dir.$file)) $modelisok=1;
- // Si model pas encore bon
+ // Si model pas encore bon
if (! $modelisok)
{
if ($conf->global->PROPALE_ADDON_PDF) $modele = $conf->global->PROPALE_ADDON_PDF;
- $file = "pdf_propale_".$modele.".modules.php";
- if (file_exists($dir.$file)) $modelisok=1;
+ $file = "pdf_propale_".$modele.".modules.php";
+ if (file_exists($dir.$file)) $modelisok=1;
}
- // Si model pas encore bon
+ // Si model pas encore bon
if (! $modelisok)
{
$liste=array();
$model=new ModelePDFPropales();
$liste=$model->liste_modeles($db);
- $modele=key($liste); // Renvoie premiere valeur de cle trouve dans le tableau
- $file = "pdf_propale_".$modele.".modules.php";
- if (file_exists($dir.$file)) $modelisok=1;
+ $modele=key($liste); // Renvoie premiere valeur de cle trouve dans le tableau
+ $file = "pdf_propale_".$modele.".modules.php";
+ if (file_exists($dir.$file)) $modelisok=1;
}
// Charge le modele
- if ($modelisok)
+ if ($modelisok)
{
$classname = "pdf_propale_".$modele;
require_once($dir.$file);
@@ -226,66 +226,68 @@ function propale_pdf_create($db, $id, $modele, $outputlangs)
}
else
{
- if (! $conf->global->PROPALE_ADDON_PDF)
- {
+ if (! $conf->global->PROPALE_ADDON_PDF)
+ {
print $langs->trans("Error")." ".$langs->trans("Error_PROPALE_ADDON_PDF_NotDefined");
- }
- else
- {
- print $langs->trans("Error")." ".$langs->trans("ErrorFileDoesNotExists",$dir.$file);
- }
+ }
+ else
+ {
+ print $langs->trans("Error")." ".$langs->trans("ErrorFileDoesNotExists",$dir.$file);
+ }
return 0;
}
}
/**
- \brief Supprime l'image de previsualitation, pour le cas de regeneration de propal
- \param db objet base de donnée
- \param propalid id de la propal a effacer
- \param propalref reference de la propal si besoin
-*/
+ \brief Supprime l'image de previsualitation, pour le cas de regeneration de propal
+ \param db objet base de donn�e
+ \param propalid id de la propal a effacer
+ \param propalref reference de la propal si besoin
+ */
function propale_delete_preview($db, $propalid, $propalref='')
{
- global $langs,$conf;
+ global $langs,$conf;
- if (!$propalref)
- {
- $propal = new Propal($db,"",$propalid);
- $propal->fetch($propalid);
- $propalref = $propal->ref;
- }
+ if (!$propalref)
+ {
+ $propal = new Propal($db,"",$propalid);
+ $propal->fetch($propalid);
+ $propalref = $propal->ref;
+ }
- if ($conf->propale->dir_output)
- {
- $propalref = dol_sanitizeFileName($propalref);
- $dir = $conf->propale->dir_output . "/" . $propalref ;
- $file = $dir . "/" . $propalref . ".pdf.png";
- $multiple = $file . ".";
+ if ($conf->propale->dir_output)
+ {
+ $propalref = dol_sanitizeFileName($propalref);
+ $dir = $conf->propale->dir_output . "/" . $propalref ;
+ $file = $dir . "/" . $propalref . ".pdf.png";
+ $multiple = $file . ".";
- if ( file_exists( $file ) && is_writable( $file ) )
- {
- if ( ! unlink($file) )
- {
- $this->error=$langs->trans("ErrorFailedToOpenFile",$file);
- return 0;
- }
- }
- else
- {
- for ($i = 0; $i < 20; $i++)
- {
- $preview = $multiple.$i;
+ if ( file_exists( $file ) && is_writable( $file ) )
+ {
+ if ( ! dol_delete_file($file,1) )
+ {
+ $this->error=$langs->trans("ErrorFailedToOpenFile",$file);
+ return 0;
+ }
+ }
+ else
+ {
+ for ($i = 0; $i < 20; $i++)
+ {
+ $preview = $multiple.$i;
- if ( file_exists( $preview ) && is_writable( $preview ) )
- {
- if ( ! unlink($preview) )
- {
- $this->error=$langs->trans("ErrorFailedToOpenFile",$preview);
- return 0;
- }
- }
- }
- }
- }
+ if ( file_exists( $preview ) && is_writable( $preview ) )
+ {
+ if ( ! unlink($preview) )
+ {
+ $this->error=$langs->trans("ErrorFailedToOpenFile",$preview);
+ return 0;
+ }
+ }
+ }
+ }
+ }
+
+ return 1;
}
?>
diff --git a/htdocs/includes/modules/supplier_order/modules_commandefournisseur.php b/htdocs/includes/modules/supplier_order/modules_commandefournisseur.php
index 08ba4835d61..2388eb0227b 100644
--- a/htdocs/includes/modules/supplier_order/modules_commandefournisseur.php
+++ b/htdocs/includes/modules/supplier_order/modules_commandefournisseur.php
@@ -55,10 +55,10 @@ class ModelePDFSuppliersOrders extends FPDF
function liste_modeles($db)
{
global $conf;
-
+
$type='supplier_order';
$liste=array();
-
+
$sql = "SELECT nom as id, nom as lib";
$sql.= " FROM ".MAIN_DB_PREFIX."document_model";
$sql.= " WHERE type = '".$type."'";
@@ -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;
}
?>
diff --git a/htdocs/lib/files.lib.php b/htdocs/lib/files.lib.php
index 443e87d323f..540a32eea79 100644
--- a/htdocs/lib/files.lib.php
+++ b/htdocs/lib/files.lib.php
@@ -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);
+}
+
?>
diff --git a/htdocs/lib/functions.lib.php b/htdocs/lib/functions.lib.php
index 858b518715e..ee43cb2e8ab 100644
--- a/htdocs/lib/functions.lib.php
+++ b/htdocs/lib/functions.lib.php
@@ -2124,19 +2124,29 @@ 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
- foreach (glob($newfile) as $filename)
+ if (empty($disableglob))
{
- $ok=unlink($filename);
- if ($ok) dol_syslog("Removed file ".$filename,LOG_DEBUG);
- else dol_syslog("Failed to remove file ".$filename,LOG_ERR);
+ foreach (glob($newfile) as $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;
}
-
?>
\ No newline at end of file
diff --git a/htdocs/product.class.php b/htdocs/product.class.php
index 3155600d843..4729c4897dd 100644
--- a/htdocs/product.class.php
+++ b/htdocs/product.class.php
@@ -538,26 +538,26 @@ class Product extends CommonObject
$sqlz.= " WHERE rowid = ".$id;
$resultz = $this->db->query($sqlz);
- if ( !$resultz )
- {
- dol_syslog('Product::delete error sqlz='.$sqlz, LOG_ERR);
- }
+ if ( !$resultz )
+ {
+ dol_syslog('Product::delete error sqlz='.$sqlz, LOG_ERR);
+ }
- // Appel des triggers
- include_once(DOL_DOCUMENT_ROOT . "/interfaces.class.php");
- $interface=new Interfaces($this->db);
- $result=$interface->run_triggers('PRODUCT_DELETE',$this,$user,$langs,$conf);
- if ($result < 0) { $error++; $this->errors=$interface->errors; }
- // Fin appel triggers
+ // Appel des triggers
+ include_once(DOL_DOCUMENT_ROOT . "/interfaces.class.php");
+ $interface=new Interfaces($this->db);
+ $result=$interface->run_triggers('PRODUCT_DELETE',$this,$user,$langs,$conf);
+ if ($result < 0) { $error++; $this->errors=$interface->errors; }
+ // Fin appel triggers
- if ($error)
- {
- return -$error;
- }
- else
- {
- return 0;
- }
+ if ($error)
+ {
+ return -$error;
+ }
+ else
+ {
+ return 0;
+ }
}
else
{
@@ -1619,17 +1619,17 @@ class Product extends CommonObject
if ($result = $this->db->query($sql))
{
- while ($row = $this->db->fetch_row($result) )
- {
- $this->subproducts_id[$i] = $row[0];
- $i++;
- }
- $this->db->free($result);
- return 0;
+ while ($row = $this->db->fetch_row($result) )
+ {
+ $this->subproducts_id[$i] = $row[0];
+ $i++;
+ }
+ $this->db->free($result);
+ return 0;
}
else
{
- return -1;
+ return -1;
}
}
@@ -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
}
diff --git a/htdocs/product/photos.php b/htdocs/product/photos.php
index f187b75e801..f637886d052 100644
--- a/htdocs/product/photos.php
+++ b/htdocs/product/photos.php
@@ -1,6 +1,6 @@
- * Copyright (C) 2004-2008 Laurent Destailleur
+ * Copyright (C) 2004-2009 Laurent Destailleur
* Copyright (C) 2005 Eric Seigne
* Copyright (C) 2005-2009 Regis Houssin
*
@@ -171,7 +171,7 @@ if ($_GET["id"] || $_GET["ref"])
print "\n\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 '';
if ($nbbyrow) print '';
- print '';
+ print ' ';
// Si fichier vignette disponible, on l'utilise, sinon on utilise photo origine
if ($obj['photo_vignette'])
diff --git a/htdocs/viewimage.php b/htdocs/viewimage.php
index 649308d25f1..f64a5526326 100644
--- a/htdocs/viewimage.php
+++ b/htdocs/viewimage.php
@@ -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
}
?>