From 5165e2e093b366e6970e71c627b897c023e95a9f Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 30 Dec 2008 22:42:28 +0000 Subject: [PATCH] Fix: Add message if delete can(t be done because of joined files. --- htdocs/comm/propal.php | 20 +++++++++++++++----- htdocs/langs/en_US/errors.lang | 2 ++ htdocs/langs/fr_FR/errors.lang | 2 ++ htdocs/lib/functions.lib.php | 14 ++++++++------ htdocs/propal.class.php | 21 ++++++++++++++------- 5 files changed, 41 insertions(+), 18 deletions(-) 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; } }