From e7e4252244e9a2a04e1d2e2b03265a6d1e3e49ec Mon Sep 17 00:00:00 2001
From: Laurent Destailleur <eldy@destailleur.fr>
Date: Wed, 5 Jul 2017 01:23:42 +0200
Subject: [PATCH] Fix deletion of category

---
 htdocs/categories/class/categorie.class.php | 40 ++++++++++-----------
 1 file changed, 20 insertions(+), 20 deletions(-)

diff --git a/htdocs/categories/class/categorie.class.php b/htdocs/categories/class/categorie.class.php
index 60ef207bb48..b294f7c4aeb 100644
--- a/htdocs/categories/class/categorie.class.php
+++ b/htdocs/categories/class/categorie.class.php
@@ -447,9 +447,10 @@ class Categorie extends CommonObject
 	 * 	Delete a category from database
 	 *
 	 * 	@param	User	$user		Object user that ask to delete
-	 *	@return	int <0 KO >0 OK
+     *	@param	int		$notrigger	1=Does not execute triggers, 0= execute triggers
+	 *	@return	int                 <0 KO >0 OK
 	 */
-	function delete($user)
+	function delete($user, $notrigger=0)
 	{
 		global $conf,$langs;
 
@@ -462,6 +463,14 @@ class Categorie extends CommonObject
 
 		$this->db->begin();
 
+		if (! $error && ! $notrigger)
+		{
+		    // Call trigger
+		    $result=$this->call_trigger('CATEGORY_DELETE',$user);
+		    if ($result < 0) $error++;
+		    // End call triggers
+		}
+
 		/* FIX #1317 : Check for child category and move up 1 level*/
 		if (! $error)
 		{
@@ -580,25 +589,16 @@ class Categorie extends CommonObject
 				$this->error=$this->db->lasterror();
 				$error++;
 			}
-			else
+		}
+
+		// Removed extrafields
+		if (! $error && empty($conf->global->MAIN_EXTRAFIELDS_DISABLED)) // For avoid conflicts if trigger used
+		{
+			$result=$this->deleteExtraFields();
+			if ($result < 0)
 			{
-				// Removed extrafields
-				if (! $error)
-				{
-					if (empty($conf->global->MAIN_EXTRAFIELDS_DISABLED)) // For avoid conflicts if trigger used
-					{
-						$result=$this->deleteExtraFields();
-						if ($result < 0)
-						{
-							$error++;
-							dol_syslog(get_class($this)."::delete erreur ".$this->error, LOG_ERR);
-						}
-					}
-				}
-                // Call trigger
-                $result=$this->call_trigger('CATEGORY_DELETE',$user);
-                if ($result < 0) { $error++; }
-                // End call triggers
+				$error++;
+				dol_syslog(get_class($this)."::delete erreur ".$this->error, LOG_ERR);
 			}
 		}
 
-- 
GitLab