diff --git a/htdocs/comm/propal.php b/htdocs/comm/propal.php
index 3c1abb8e350..13c286e15ae 100644
--- a/htdocs/comm/propal.php
+++ b/htdocs/comm/propal.php
@@ -83,12 +83,22 @@ if ($_REQUEST['action'] == 'confirm_delete' && $_REQUEST['confirm'] == 'yes')
{
$propal = new Propal($db, 0, $_GET['propalid']);
$propal->fetch($_GET['propalid']);
- $propal->delete($user);
+ $result=$propal->delete($user);
$propalid = 0;
$brouillon = 1;
+
+ if ($result > 0)
+ {
+ Header('Location: '.$_SERVER["PHP_SELF"]);
+ exit;
+ }
+ else
+ {
+ $langs->load("errors");
+ if ($propal->error == 'ErrorFailToDeleteDir') $mesg='
'.$langs->trans('ErrorFailedToDeleteJoinedFiles').'
';
+ else $mesg=''.$propal->error.'
';
+ }
}
- Header('Location: '.$_SERVER["PHP_SELF"]);
- exit;
}
/*
@@ -135,7 +145,7 @@ if ($_REQUEST['action'] == 'confirm_validate' && $_REQUEST['confirm'] == 'yes' &
}
else
{
- $mesg=''.$fac->error.'
';
+ $mesg=''.$propal->error.'
';
}
}
@@ -846,7 +856,7 @@ if ($_GET['propalid'] > 0)
*
*/
- if ($mesg) print "$mesg
";
+ if ($mesg) print $mesg."
";
$propal = new Propal($db);
$propal->fetch($_GET['propalid']);
diff --git a/htdocs/langs/en_US/errors.lang b/htdocs/langs/en_US/errors.lang
index 0849f98e887..daf3f4d76fa 100644
--- a/htdocs/langs/en_US/errors.lang
+++ b/htdocs/langs/en_US/errors.lang
@@ -6,6 +6,8 @@ ErrorFailToDeleteFile=Failed to remove file '%s'.
ErrorFailToCreateFile=Failed to create file '%s'.
ErrorFailToRenameDir=Failed to rename directory '%s' into '%s'.
ErrorFailToCreateDir=Failed to create directory '%s'.
+ErrorFailToDeleteDir=Failed to delete directory '%s'.
+ErrorFailedToDeleteJoinedFiles=Can not delete entity because there is some joined files. Remove join files first.
ErrorThisContactIsAlreadyDefinedAsThisType=This contact is already defined as contact for this type.
ErrorCashAccountAcceptsOnlyCashMoney=This bank account is a cash account, so it accepts payments of type cash only.
ErrorFromToAccountsMustDiffers=Source and targets bank accounts must be different.
diff --git a/htdocs/langs/fr_FR/errors.lang b/htdocs/langs/fr_FR/errors.lang
index 21c11550b60..9552cd3a83a 100644
--- a/htdocs/langs/fr_FR/errors.lang
+++ b/htdocs/langs/fr_FR/errors.lang
@@ -6,6 +6,8 @@ ErrorFailToCreateFile=Echec de la cr
ErrorFailToDeleteFile=Echec de l'effacement du fichier '%s'.
ErrorFailToRenameDir=Echec du renommage du répertoire '%s' en '%s'.
ErrorFailToCreateDir=Echec de création du répertoire '%s'.
+ErrorFailToDeleteDir=Echec de la suppression du répertoire '%s'.
+ErrorFailedToDeleteJoinedFiles=Impossible de supprimer l'entité car il existe des pièces jointes. Supprimer d'abord les pièces jointes.
ErrorThisContactIsAlreadyDefinedAsThisType=Ce contact est déjà défini comme contact pour ce type.
ErrorCashAccountAcceptsOnlyCashMoney=Ce compte bancaire est de type caisse et n'accepte que les mode de réglement de type espèce.
ErrorFromToAccountsMustDiffers=Le compte source et destination doivent etre différents.
diff --git a/htdocs/lib/functions.lib.php b/htdocs/lib/functions.lib.php
index 3365e8a7cbb..566f8686ca4 100644
--- a/htdocs/lib/functions.lib.php
+++ b/htdocs/lib/functions.lib.php
@@ -1999,8 +1999,10 @@ function dol_delete_file($file)
}
/**
- \brief Effacement d'un r�pertoire
- \param file R�pertoire a effacer
+ * \brief Remove a directory
+ * \param file Directory to delete
+ * \return boolean True if success, false if error
+ * \remarks If directory is not empty, return false
*/
function dol_delete_dir($dir)
{
@@ -2008,10 +2010,10 @@ function dol_delete_dir($dir)
}
/**
- \brief Effacement d'un r�pertoire $dir et de son arborescence
- \param file R�pertoire a effacer
- \param count Compteur pour comptage nb elements supprim�s
- \return int Nombre de fichier+rep�rtoires supprim�s
+ * \brief Remove a directory $dir and its subdirectories
+ * \param file Dir to delete
+ * \param count Counter to count nb of deleted elements
+ * \return int Number of files and directory removed
*/
function dol_delete_dir_recursive($dir,$count=0)
{
diff --git a/htdocs/propal.class.php b/htdocs/propal.class.php
index d65618a96af..e2d366af99f 100644
--- a/htdocs/propal.class.php
+++ b/htdocs/propal.class.php
@@ -1408,16 +1408,17 @@ class Propal extends CommonObject
*/
function delete($user)
{
- global $conf,$langs;
+ global $conf;
+ $this->db->begin();
+
$sql = "DELETE FROM ".MAIN_DB_PREFIX."propaldet WHERE fk_propal = ".$this->id;
if ( $this->db->query($sql) )
{
$sql = "DELETE FROM ".MAIN_DB_PREFIX."propal WHERE rowid = ".$this->id;
if ( $this->db->query($sql) )
{
-
- // On efface le r�pertoire du pdf
+ // We remove directory
$propalref = sanitizeFileName($this->ref);
if ($conf->propal->dir_output)
{
@@ -1429,30 +1430,36 @@ class Propal extends CommonObject
if (!dol_delete_file($file))
{
- $this->error=$langs->trans("ErrorCanNotDeleteFile",$file);
+ $this->error='ErrorFailToDeleteFile';
+ $this->db->rollback();
return 0;
}
}
if (file_exists($dir))
{
- if (!dol_delete_dir($dir))
+ $res=@dol_delete_dir($dir);
+ if (! $res)
{
- $this->error=$langs->trans("ErrorCanNotDeleteDir",$dir);
+ $this->error='ErrorFailToDeleteDir';
+ $this->db->rollback();
return 0;
}
}
}
- dolibarr_syslog("Suppression de la proposition $this->id par $user->id");
+ dolibarr_syslog("Suppression de la proposition $this->id par $user->id", LOG_DEBUG);
+ $this->db->commit();
return 1;
}
else
{
+ $this->db->rollback();
return -2;
}
}
else
{
+ $this->db->rollback();
return -1;
}
}