mirror of
https://github.com/Dolibarr/dolibarr.git
synced 2025-12-11 12:01:23 +01:00
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:
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
@@ -376,7 +376,7 @@ class FormFile
|
||||
print '</a>';
|
||||
if (!$iconPDF) print '</td>';
|
||||
// Affiche taille fichier
|
||||
if (!$iconPDF) print '<td align="right">'.dol_filesize($filedir."/".$file["name"]).'</td>';
|
||||
if (!$iconPDF) print '<td align="right">'.dol_print_size(filesize($filedir."/".$file["name"])).'</td>';
|
||||
// Affiche date fichier
|
||||
if (!$iconPDF) print '<td align="right">'.dol_print_date(filemtime($filedir."/".$file["name"]),'dayhour').'</td>';
|
||||
|
||||
@@ -490,16 +490,4 @@ class FormFile
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Return size of a file with units
|
||||
*
|
||||
* @param $pathoffile
|
||||
* @return string File size with units translated
|
||||
*/
|
||||
function dol_filesize($pathoffile)
|
||||
{
|
||||
global $langs;
|
||||
return filesize($pathoffile). ' '.$langs->trans("Bytes");
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
@@ -535,10 +535,10 @@ if ($step == 3 && $datatoimport)
|
||||
print '<input type="hidden" value="'.$datatoimport.'" name="datatoimport">';
|
||||
print "</tr>\n";
|
||||
|
||||
$dir = $conf->import->dir_temp;
|
||||
|
||||
// Search available imports
|
||||
$handle=@opendir($dir);
|
||||
$dir = $conf->import->dir_temp;
|
||||
$newdir=utf8_check($dir)?utf8_decode($dir):$dir; // opendir need ISO
|
||||
$handle=@opendir($newdir);
|
||||
if ($handle)
|
||||
{
|
||||
//print '<tr><td colspan="4">';
|
||||
@@ -548,6 +548,9 @@ if ($step == 3 && $datatoimport)
|
||||
$i=0;
|
||||
while (($file = readdir($handle))!==false)
|
||||
{
|
||||
// readdir return value in ISO and we want UTF8 in memory
|
||||
if (! utf8_check($file)) $file=utf8_encode($file);
|
||||
|
||||
if (eregi('^\.',$file)) continue;
|
||||
|
||||
$modulepart='import';
|
||||
@@ -558,9 +561,9 @@ if ($step == 3 && $datatoimport)
|
||||
print '<td width="16">'.img_mime($file).'</td>';
|
||||
print '<td>'.$file.'</td>';
|
||||
// Affiche taille fichier
|
||||
print '<td align="right">'.dol_filesize($dir.'/'.$file).'</td>';
|
||||
print '<td align="right">'.dol_print_size(filesize($newdir.'/'.$newfile)).'</td>';
|
||||
// Affiche date fichier
|
||||
print '<td align="right">'.dol_print_date(filemtime($dir.'/'.$file),'dayhour').'</td>';
|
||||
print '<td align="right">'.dol_print_date(filemtime($newdir.'/'.$newfile),'dayhour').'</td>';
|
||||
// Del button
|
||||
print '<td align="right"><a href="'.DOL_URL_ROOT.'/document.php?action=remove_file&step=3&format='.$format.'&modulepart='.$modulepart.'&file='.urlencode($relativepath);
|
||||
print '&urlsource='.urlencode($urlsource);
|
||||
|
||||
@@ -24,8 +24,8 @@
|
||||
/**
|
||||
\file htdocs/includes/modules/commande/modules_commande.php
|
||||
\ingroup commande
|
||||
\brief Fichier contenant la classe m<>re de generation des commandes en PDF
|
||||
et la classe m<>re de num<75>rotation des commandes
|
||||
\brief Fichier contenant la classe m<>re de generation des commandes en PDF
|
||||
et la classe m<>re de num<75>rotation des commandes
|
||||
\version $Id$
|
||||
*/
|
||||
|
||||
@@ -37,14 +37,14 @@ require_once(DOL_DOCUMENT_ROOT.'/discount.class.php');
|
||||
|
||||
/**
|
||||
\class ModelePDFCommandes
|
||||
\brief Classe m<>re des mod<6F>les de commandes
|
||||
\brief Classe m<>re des mod<6F>les de commandes
|
||||
*/
|
||||
class ModelePDFCommandes extends FPDF
|
||||
{
|
||||
var $error='';
|
||||
|
||||
/**
|
||||
* \brief Renvoi le dernier message d'erreur de cr<63>ation de PDF de commande
|
||||
* \brief Renvoi le dernier message d'erreur de cr<63>ation de PDF de commande
|
||||
*/
|
||||
function pdferror()
|
||||
{
|
||||
@@ -52,7 +52,7 @@ class ModelePDFCommandes extends FPDF
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Renvoi la liste des mod<6F>les actifs
|
||||
* \brief Renvoi la liste des mod<6F>les actifs
|
||||
* \return array Tableau des modeles (cle=id, valeur=libelle)
|
||||
*/
|
||||
function liste_modeles($db)
|
||||
@@ -92,7 +92,7 @@ class ModelePDFCommandes extends FPDF
|
||||
|
||||
/**
|
||||
\class ModeleNumRefCommandes
|
||||
\brief Classe m<>re des mod<6F>les de num<75>rotation des r<>f<EFBFBD>rences de commandes
|
||||
\brief Classe m<>re des mod<6F>les de num<75>rotation des r<>f<EFBFBD>rences de commandes
|
||||
*/
|
||||
|
||||
class ModeleNumRefCommandes
|
||||
@@ -107,7 +107,7 @@ class ModeleNumRefCommandes
|
||||
return true;
|
||||
}
|
||||
|
||||
/** \brief Renvoi la description par defaut du modele de num<75>rotation
|
||||
/** \brief Renvoi la description par defaut du modele de num<75>rotation
|
||||
* \return string Texte descripif
|
||||
*/
|
||||
function info()
|
||||
@@ -117,7 +117,7 @@ class ModeleNumRefCommandes
|
||||
return $langs->trans("NoDescription");
|
||||
}
|
||||
|
||||
/** \brief Renvoi un exemple de num<75>rotation
|
||||
/** \brief Renvoi un exemple de num<75>rotation
|
||||
* \return string Example
|
||||
*/
|
||||
function getExample()
|
||||
@@ -127,8 +127,8 @@ class ModeleNumRefCommandes
|
||||
return $langs->trans("NoExample");
|
||||
}
|
||||
|
||||
/** \brief Test si les num<75>ros d<>j<EFBFBD> en vigueur dans la base ne provoquent pas de
|
||||
* de conflits qui empechera cette num<75>rotation de fonctionner.
|
||||
/** \brief Test si les num<75>ros d<>j<EFBFBD> en vigueur dans la base ne provoquent pas de
|
||||
* de conflits qui empechera cette num<75>rotation de fonctionner.
|
||||
* \return boolean false si conflit, true si ok
|
||||
*/
|
||||
function canBeActivated()
|
||||
@@ -136,7 +136,7 @@ class ModeleNumRefCommandes
|
||||
return true;
|
||||
}
|
||||
|
||||
/** \brief Renvoi prochaine valeur attribu<62>e
|
||||
/** \brief Renvoi prochaine valeur attribu<62>e
|
||||
* \return string Valeur
|
||||
*/
|
||||
function getNextValue()
|
||||
@@ -162,10 +162,10 @@ class ModeleNumRefCommandes
|
||||
|
||||
|
||||
/*
|
||||
\brief Cr<43>e un bon de commande sur disque en fonction d'un mod<6F>le
|
||||
\param db objet base de donn<6E>e
|
||||
\param id id de la propale <20> cr<63>er
|
||||
\param modele force le modele <20> utiliser ('' to not force)
|
||||
\brief Cr<43>e un bon de commande sur disque en fonction d'un mod<6F>le
|
||||
\param db objet base de donn<6E>e
|
||||
\param id id de la propale <20> cr<63>er
|
||||
\param modele force le modele <20> utiliser ('' to not force)
|
||||
\param outputlangs objet lang a utiliser pour traduction
|
||||
*/
|
||||
function commande_pdf_create($db, $id, $modele, $outputlangs)
|
||||
@@ -177,7 +177,7 @@ function commande_pdf_create($db, $id, $modele, $outputlangs)
|
||||
$modelisok=0;
|
||||
$liste=array();
|
||||
|
||||
// Positionne modele sur le nom du modele de commande <20> utiliser
|
||||
// Positionne modele sur le nom du modele de commande <20> utiliser
|
||||
$file = "pdf_".$modele.".modules.php";
|
||||
if ($modele && file_exists($dir.$file)) $modelisok=1;
|
||||
|
||||
@@ -194,7 +194,7 @@ function commande_pdf_create($db, $id, $modele, $outputlangs)
|
||||
{
|
||||
$model=new ModelePDFCommandes();
|
||||
$liste=$model->liste_modeles($db);
|
||||
$modele=key($liste); // Renvoie premiere valeur de cl<63> trouv<75> dans le tableau
|
||||
$modele=key($liste); // Renvoie premiere valeur de cl<63> trouv<75> dans le tableau
|
||||
$file = "pdf_".$modele.".modules.php";
|
||||
if (file_exists($dir.$file)) $modelisok=1;
|
||||
}
|
||||
@@ -240,10 +240,10 @@ function commande_pdf_create($db, $id, $modele, $outputlangs)
|
||||
}
|
||||
|
||||
/**
|
||||
\brief Supprime l'image de pr<70>visualitation, pour le cas de r<>g<EFBFBD>n<EFBFBD>ration de commande
|
||||
\param db objet base de donn<6E>e
|
||||
\param commandeid id de la commande <20> effacer
|
||||
\param commanderef r<>f<EFBFBD>rence de la commande si besoin
|
||||
\brief Supprime l'image de pr<70>visualitation, pour le cas de r<>g<EFBFBD>n<EFBFBD>ration de commande
|
||||
\param db objet base de donn<6E>e
|
||||
\param commandeid id de la commande <20> effacer
|
||||
\param commanderef r<>f<EFBFBD>rence de la commande si besoin
|
||||
*/
|
||||
function commande_delete_preview($db, $commandeid, $commanderef='')
|
||||
{
|
||||
@@ -265,7 +265,7 @@ function commande_delete_preview($db, $commandeid, $commanderef='')
|
||||
|
||||
if ( file_exists( $file ) && is_writable( $file ) )
|
||||
{
|
||||
if ( ! unlink($file) )
|
||||
if ( ! dol_delete_file($file,1) )
|
||||
{
|
||||
$this->error=$langs->trans("ErrorFailedToOpenFile",$file);
|
||||
return 0;
|
||||
@@ -279,7 +279,7 @@ function commande_delete_preview($db, $commandeid, $commanderef='')
|
||||
|
||||
if ( file_exists( $preview ) && is_writable( $preview ) )
|
||||
{
|
||||
if ( ! unlink($preview) )
|
||||
if ( ! dol_delete_file($preview,1) )
|
||||
{
|
||||
$this->error=$langs->trans("ErrorFailedToOpenFile",$preview);
|
||||
return 0;
|
||||
@@ -288,5 +288,7 @@ function commande_delete_preview($db, $commandeid, $commanderef='')
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
?>
|
||||
|
||||
@@ -287,9 +287,9 @@ ITEM_" . $i . "_DESCRIPTION=\"" . str_replace("\r\n","",nl2br($fac->lignes[$i]->
|
||||
|
||||
|
||||
/**
|
||||
\brief Supprime l'image de previsualitation, pour le cas de regeneration de facture
|
||||
\param db objet base de donnee
|
||||
\param facid id de la facture a creer
|
||||
* \brief Supprime l'image de previsualitation, pour le cas de regeneration de facture
|
||||
* \param db objet base de donnee
|
||||
* \param facid id de la facture a creer
|
||||
*/
|
||||
function facture_delete_preview($db, $facid)
|
||||
{
|
||||
@@ -306,12 +306,14 @@ function facture_delete_preview($db, $facid)
|
||||
|
||||
if ( file_exists( $file ) && is_writable( $file ) )
|
||||
{
|
||||
if ( ! unlink($file) )
|
||||
if ( ! dol_delete_file($file,1) )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -22,8 +22,8 @@
|
||||
/**
|
||||
\file htdocs/includes/modules/fichinter/modules_fichinter.php
|
||||
\ingroup ficheinter
|
||||
\brief Fichier contenant la classe m<>re de generation des fiches interventions en PDF
|
||||
et la classe m<>re de num<75>rotation des fiches interventions
|
||||
\brief Fichier contenant la classe m<>re de generation des fiches interventions en PDF
|
||||
et la classe m<>re de num<75>rotation des fiches interventions
|
||||
\version $Id$
|
||||
*/
|
||||
|
||||
@@ -33,7 +33,7 @@ require_once(DOL_DOCUMENT_ROOT.'/includes/fpdf/fpdfi/fpdi_protection.php');
|
||||
|
||||
/**
|
||||
\class ModelePDFFicheinter
|
||||
\brief Classe m<>re des mod<6F>les de fiche intervention
|
||||
\brief Classe m<>re des mod<6F>les de fiche intervention
|
||||
*/
|
||||
class ModelePDFFicheinter extends FPDF
|
||||
{
|
||||
@@ -48,7 +48,7 @@ class ModelePDFFicheinter extends FPDF
|
||||
}
|
||||
|
||||
/**
|
||||
\brief Renvoi le dernier message d'erreur de cr<63>ation de fiche intervention
|
||||
\brief Renvoi le dernier message d'erreur de cr<63>ation de fiche intervention
|
||||
*/
|
||||
function pdferror()
|
||||
{
|
||||
@@ -56,7 +56,7 @@ class ModelePDFFicheinter extends FPDF
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Renvoi la liste des mod<6F>les actifs
|
||||
* \brief Renvoi la liste des mod<6F>les actifs
|
||||
*/
|
||||
function liste_modeles($db)
|
||||
{
|
||||
@@ -93,7 +93,7 @@ class ModelePDFFicheinter extends FPDF
|
||||
|
||||
/**
|
||||
\class ModeleNumRefFicheinter
|
||||
\brief Classe m<>re des mod<6F>les de num<75>rotation des r<>f<EFBFBD>rences de fiches d'intervention
|
||||
\brief Classe m<>re des mod<6F>les de num<75>rotation des r<>f<EFBFBD>rences de fiches d'intervention
|
||||
*/
|
||||
|
||||
class ModeleNumRefFicheinter
|
||||
@@ -108,7 +108,7 @@ class ModeleNumRefFicheinter
|
||||
return true;
|
||||
}
|
||||
|
||||
/** \brief Renvoi la description par defaut du modele de num<75>rotation
|
||||
/** \brief Renvoi la description par defaut du modele de num<75>rotation
|
||||
* \return string Texte descripif
|
||||
*/
|
||||
function info()
|
||||
@@ -118,7 +118,7 @@ class ModeleNumRefFicheinter
|
||||
return $langs->trans("NoDescription");
|
||||
}
|
||||
|
||||
/** \brief Renvoi un exemple de num<75>rotation
|
||||
/** \brief Renvoi un exemple de num<75>rotation
|
||||
* \return string Example
|
||||
*/
|
||||
function getExample()
|
||||
@@ -128,8 +128,8 @@ class ModeleNumRefFicheinter
|
||||
return $langs->trans("NoExample");
|
||||
}
|
||||
|
||||
/** \brief Test si les num<75>ros d<>j<EFBFBD> en vigueur dans la base ne provoquent pas de
|
||||
* de conflits qui empechera cette num<75>rotation de fonctionner.
|
||||
/** \brief Test si les num<75>ros d<>j<EFBFBD> en vigueur dans la base ne provoquent pas de
|
||||
* de conflits qui empechera cette num<75>rotation de fonctionner.
|
||||
* \return boolean false si conflit, true si ok
|
||||
*/
|
||||
function canBeActivated()
|
||||
@@ -137,7 +137,7 @@ class ModeleNumRefFicheinter
|
||||
return true;
|
||||
}
|
||||
|
||||
/** \brief Renvoi prochaine valeur attribu<62>e
|
||||
/** \brief Renvoi prochaine valeur attribu<62>e
|
||||
* \return string Valeur
|
||||
*/
|
||||
function getNextValue()
|
||||
@@ -163,10 +163,10 @@ class ModeleNumRefFicheinter
|
||||
|
||||
|
||||
/**
|
||||
\brief Cr<43>e une fiche intervention sur disque en fonction du mod<6F>le de FICHEINTER_ADDON_PDF
|
||||
\param db objet base de donn<6E>e
|
||||
\brief Cr<43>e une fiche intervention sur disque en fonction du mod<6F>le de FICHEINTER_ADDON_PDF
|
||||
\param db objet base de donn<6E>e
|
||||
\param object Object fichinter
|
||||
\param modele force le modele <20> utiliser ('' par defaut)
|
||||
\param modele force le modele <20> utiliser ('' par defaut)
|
||||
\param outputlangs objet lang a utiliser pour traduction
|
||||
\return int 0 si KO, 1 si OK
|
||||
*/
|
||||
@@ -177,7 +177,7 @@ function fichinter_create($db, $object, $modele='', $outputlangs='')
|
||||
|
||||
$dir = DOL_DOCUMENT_ROOT."/includes/modules/fichinter/";
|
||||
|
||||
// Positionne modele sur le nom du modele de facture <20> utiliser
|
||||
// Positionne modele sur le nom du modele de facture <20> utiliser
|
||||
if (! strlen($modele))
|
||||
{
|
||||
if ($conf->global->FICHEINTER_ADDON_PDF)
|
||||
@@ -226,10 +226,10 @@ function fichinter_create($db, $object, $modele='', $outputlangs='')
|
||||
}
|
||||
|
||||
/**
|
||||
\brief Supprime l'image de pr<70>visualitation, pour le cas de r<>g<EFBFBD>n<EFBFBD>ration de propal
|
||||
\param db objet base de donn<6E>e
|
||||
\param propalid id de la propal <20> effacer
|
||||
\param propalref r<>f<EFBFBD>rence de la propal si besoin
|
||||
\brief Supprime l'image de pr<70>visualitation, pour le cas de r<>g<EFBFBD>n<EFBFBD>ration de propal
|
||||
\param db objet base de donn<6E>e
|
||||
\param propalid id de la propal <20> effacer
|
||||
\param propalref r<>f<EFBFBD>rence de la propal si besoin
|
||||
*/
|
||||
function fichinter_delete_preview($db, $fichinterid, $fichinterref='')
|
||||
{
|
||||
@@ -251,7 +251,7 @@ function fichinter_delete_preview($db, $fichinterid, $fichinterref='')
|
||||
|
||||
if ( file_exists( $file ) && is_writable( $file ) )
|
||||
{
|
||||
if ( ! unlink($file) )
|
||||
if ( ! dol_delete_file($file,1) )
|
||||
{
|
||||
$this->error=$langs->trans("ErrorFailedToOpenFile",$file);
|
||||
return 0;
|
||||
@@ -264,7 +264,7 @@ function fichinter_delete_preview($db, $fichinterid, $fichinterref='')
|
||||
$preview = $multiple.$i;
|
||||
if ( file_exists( $preview ) && is_writable( $preview ) )
|
||||
{
|
||||
if ( ! unlink($preview) )
|
||||
if ( ! dol_delete_file($preview,1) )
|
||||
{
|
||||
$this->error=$langs->trans("ErrorFailedToOpenFile",$preview);
|
||||
return 0;
|
||||
@@ -273,6 +273,8 @@ function fichinter_delete_preview($db, $fichinterid, $fichinterref='')
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
@@ -161,9 +161,9 @@ class ModeleNumRefDeliveryOrder
|
||||
|
||||
/**
|
||||
* \brief Create object on disk
|
||||
* \param db objet base de donn<6E>e
|
||||
* \param db objet base de donn<6E>e
|
||||
* \param deliveryid id object
|
||||
* \param modele force le modele <20> utiliser ('' to not force)
|
||||
* \param modele force le modele <20> utiliser ('' to not force)
|
||||
* \param outputlangs objet lang a utiliser pour traduction
|
||||
* \return int 0 si KO, 1 si OK
|
||||
*/
|
||||
@@ -240,12 +240,14 @@ function delivery_order_delete_preview($db, $deliveryid)
|
||||
|
||||
if ( file_exists( $file ) && is_writable( $file ) )
|
||||
{
|
||||
if ( ! unlink($file) )
|
||||
if ( ! dol_delete_file($file,1) )
|
||||
{
|
||||
$this->error=$langs->trans("ErrorFailedToOpenFile",$file);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
?>
|
||||
|
||||
@@ -22,8 +22,8 @@
|
||||
/**
|
||||
\file htdocs/includes/modules/propale/modules_propale.php
|
||||
\ingroup propale
|
||||
\brief Fichier contenant la classe m<>re de generation des propales en PDF
|
||||
et la classe m<>re de num<75>rotation des propales
|
||||
\brief Fichier contenant la classe m<>re de generation des propales en PDF
|
||||
et la classe m<>re de num<75>rotation des propales
|
||||
\version $Id$
|
||||
*/
|
||||
|
||||
@@ -161,8 +161,8 @@ class ModeleNumRefPropales
|
||||
/**
|
||||
\brief Cree une propale sur disque en fonction du modele de PROPALE_ADDON_PDF
|
||||
\param db objet base de donnee
|
||||
\param id id de la propale <20> creer
|
||||
\param modele force le modele <20> utiliser ('' to not force)
|
||||
\param id id de la propale <20> creer
|
||||
\param modele force le modele <20> utiliser ('' to not force)
|
||||
\param outputlangs objet lang a utiliser pour traduction
|
||||
\return int 0 si KO, 1 si OK
|
||||
*/
|
||||
@@ -240,7 +240,7 @@ function propale_pdf_create($db, $id, $modele, $outputlangs)
|
||||
|
||||
/**
|
||||
\brief Supprime l'image de previsualitation, pour le cas de regeneration de propal
|
||||
\param db objet base de donn<6E>e
|
||||
\param db objet base de donn<6E>e
|
||||
\param propalid id de la propal a effacer
|
||||
\param propalref reference de la propal si besoin
|
||||
*/
|
||||
@@ -264,7 +264,7 @@ function propale_delete_preview($db, $propalid, $propalref='')
|
||||
|
||||
if ( file_exists( $file ) && is_writable( $file ) )
|
||||
{
|
||||
if ( ! unlink($file) )
|
||||
if ( ! dol_delete_file($file,1) )
|
||||
{
|
||||
$this->error=$langs->trans("ErrorFailedToOpenFile",$file);
|
||||
return 0;
|
||||
@@ -287,5 +287,7 @@ function propale_delete_preview($db, $propalid, $propalref='')
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
?>
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
?>
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
@@ -2124,20 +2124,30 @@ function print_fleche_navigation($page,$file,$options='',$nextpage,$betweenarrow
|
||||
|
||||
|
||||
/**
|
||||
* \brief Remove a file
|
||||
* \param file Fichier a effacer ou masque de fichier a effacer
|
||||
* \param boolean true if file deleted, false if error
|
||||
* \brief Remove a file or several files with a mask
|
||||
* \param file File to delete or mask of file to delete
|
||||
* \param disableglob Disable usage of globa like *
|
||||
* \param boolean True if file deleted, False if error
|
||||
*/
|
||||
function dol_delete_file($file)
|
||||
function dol_delete_file($file,$disableglob=0)
|
||||
{
|
||||
$ok=true;
|
||||
$newfile=utf8_check($file)?utf8_decode($file):$file; // glob function accepts only ISO string
|
||||
if (empty($disableglob))
|
||||
{
|
||||
foreach (glob($newfile) as $filename)
|
||||
{
|
||||
$ok=unlink($filename);
|
||||
$ok=unlink($filename); // The unlink encapsulated by dolibarr
|
||||
if ($ok) dol_syslog("Removed file ".$filename,LOG_DEBUG);
|
||||
else dol_syslog("Failed to remove file ".$filename,LOG_ERR);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$ok=unlink($newfile); // The unlink encapsulated by dolibarr
|
||||
if ($ok) dol_syslog("Removed file ".$newfile,LOG_DEBUG);
|
||||
else dol_syslog("Failed to remove file ".$newfile,LOG_ERR);
|
||||
}
|
||||
return $ok;
|
||||
}
|
||||
|
||||
@@ -3006,5 +3016,4 @@ function utf8_check($Str)
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
?>
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?php
|
||||
/* Copyright (C) 2001-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
||||
* Copyright (C) 2004-2008 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
* Copyright (C) 2004-2009 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
* Copyright (C) 2005 Eric Seigne <eric.seigne@ryxeo.com>
|
||||
* Copyright (C) 2005-2009 Regis Houssin <regis@dolibarr.fr>
|
||||
*
|
||||
@@ -171,7 +171,7 @@ if ($_GET["id"] || $_GET["ref"])
|
||||
print "\n</div>\n";
|
||||
|
||||
/*
|
||||
* Ajouter une photo
|
||||
* Add a photo
|
||||
*/
|
||||
if ($_GET["action"] == 'ajout_photo' && ($user->rights->produit->creer || $user->rights->service->creer) && ! empty($conf->global->MAIN_UPLOAD_DOC))
|
||||
{
|
||||
@@ -204,7 +204,7 @@ if ($_GET["id"] || $_GET["ref"])
|
||||
if ($nbbyrow && ($nbphoto % $nbbyrow == 1)) print '<tr align=center valign=middle border=1>';
|
||||
if ($nbbyrow) print '<td width="'.ceil(100/$nbbyrow).'%" class="photo">';
|
||||
|
||||
print '<a href="'.DOL_URL_ROOT.'/viewimage.php?modulepart=product&file='.urlencode($pdir.$obj['photo']).'" alt="Taille origine" target="_blank">';
|
||||
print '<a href="'.DOL_URL_ROOT.'/viewimage.php?modulepart=product&file='.urlencode($pdir.$obj['photo']).'" alt="'.dol_escape_htmltag($langs->trans("OriginalSize")).'" target="_blank">';
|
||||
|
||||
// Si fichier vignette disponible, on l'utilise, sinon on utilise photo origine
|
||||
if ($obj['photo_vignette'])
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
Reference in New Issue
Block a user