plugins/content/categories/categories.php
public function onContentBeforeDelete($context, $data)
	{
		// Skip plugin if we are deleting something other than categories
		if ($context != 'com_categories.category')
		{
			return true;
		}

		// Check if this function is enabled.
		if (!$this->params->def('check_categories', 1))
		{
			return true;
		}

		$extension = JFactory::getApplication()->input->getString('extension');

		// Default to true if not a core extension
		$result = true;

		$tableInfo = array(
			'com_content' => array('table_name' => '#__content'),
		);

		// Now check to see if this is a known core extension
		if (isset($tableInfo[$extension]))
		{
			// Get table name for known core extensions
			$table = $tableInfo[$extension]['table_name'];

			// See if this category has any content items
			$count = $this->_countItemsInCategory($table, $data->get('id'));

			// Return false if db error
			if ($count === false)
			{
				$result = false;
			}
			else
			{
				// Show error if items are found in the category
				if ($count > 0)
				{
					$msg = JText::sprintf('COM_CATEGORIES_DELETE_NOT_ALLOWED', $data->get('title'))
						. JText::plural('COM_CATEGORIES_N_ITEMS_ASSIGNED', $count);
					JError::raiseWarning(403, $msg);
					$result = false;
				}

				// Check for items in any child categories (if it is a leaf, there are no child categories)
				if (!$data->isLeaf())
				{
					$count = $this->_countItemsInChildren($table, $data->get('id'), $data);

					if ($count === false)
					{
						$result = false;
					}
					elseif ($count > 0)
					{
						$msg = JText::sprintf('COM_CATEGORIES_DELETE_NOT_ALLOWED', $data->get('title'))
							. JText::plural('COM_CATEGORIES_HAS_SUBCATEGORY_ITEMS', $count);
						JError::raiseWarning(403, $msg);
						$result = false;
					}
				}
			}

			return $result;
		}
	}
public function onContentBeforeDelete($context, $data)
	{
		// Skip plugin if we are deleting something other than categories
		if ($context != 'com_categories.category')
		{
			return true;
		}

		// Check if this function is enabled.
		if (!$this->params->def('check_categories', 1))
		{
			return true;
		}

		$extension = JFactory::getApplication()->input->getString('extension');

		// Default to true if not a core extension
		$result = true;

		$tableInfo = array(
			'com_content' => array('table_name' => '#__content'),
		);

		// Now check to see if this is a known core extension
		if (isset($tableInfo[$extension]))
		{
			// Get table name for known core extensions
			$table = $tableInfo[$extension]['table_name'];

			// See if this category has any content items
			$count = $this->_countItemsInCategory($table, $data->get('id'));

			// Return false if db error
			if ($count === false)
			{
				$result = false;
			}
			else
			{
				// Show error if items are found in the category
				if ($count > 0)
				{
					$msg = JText::sprintf('COM_CATEGORIES_DELETE_NOT_ALLOWED', $data->get('title'))
						. JText::plural('COM_CATEGORIES_N_ITEMS_ASSIGNED', $count);
					JError::raiseWarning(403, $msg);
					$result = false;
				}

				// Check for items in any child categories (if it is a leaf, there are no child categories)
				if (!$data->isLeaf())
				{
					$count = $this->_countItemsInChildren($table, $data->get('id'), $data);

					if ($count === false)
					{
						$result = false;
					}
					elseif ($count > 0)
					{
						$msg = JText::sprintf('COM_CATEGORIES_DELETE_NOT_ALLOWED', $data->get('title'))
							. JText::plural('COM_CATEGORIES_HAS_SUBCATEGORY_ITEMS', $count);
						JError::raiseWarning(403, $msg);
						$result = false;
					}
				}
			}

			return $result;
		}
	}
public function onContentBeforeDelete ( $ context , $ data ) { // Skip plugin if we are deleting something other than categories if ( $ context != 'com_categories.category' ) { return true ; } // Check if this function is enabled. if ( ! $ this -> params -> def ( 'check_categories' , 1 ) ) { return true ; } $ extension = JFactory :: getApplication ( ) -> input -> getString ( 'extension' ) ; // Default to true if not a core extension $ result = true ; $ tableInfo = array ( 'com_content' => array ( 'table_name' => '#__content' ) , ) ; // Now check to see if this is a known core extension if ( isset ( $ tableInfo [ $ extension ] ) ) { // Get table name for known core extensions $ table = $ tableInfo [ $ extension ] [ 'table_name' ] ; // See if this category has any content items $ count = $ this -> _countItemsInCategory ( $ table , $ data -> get ( 'id' ) ) ; // Return false if db error if ( $ count === false ) { $ result = false ; } else { // Show error if items are found in the category if ( $ count > 0 ) { $ msg = JText :: sprintf ( 'COM_CATEGORIES_DELETE_NOT_ALLOWED' , $ data -> get ( 'title' ) ) . JText :: plural ( 'COM_CATEGORIES_N_ITEMS_ASSIGNED' , $ count ) ; JError :: raiseWarning ( 403 , $ msg ) ; $ result = false ; } // Check for items in any child categories (if it is a leaf, there are no child categories) if ( ! $ data -> isLeaf ( ) ) { $ count = $ this -> _countItemsInChildren ( $ table , $ data -> get ( 'id' ) , $ data ) ; if ( $ count === false ) { $ result = false ; } elseif ( $ count > 0 ) { $ msg = JText :: sprintf ( 'COM_CATEGORIES_DELETE_NOT_ALLOWED' , $ data -> get ( 'title' ) ) . JText :: plural ( 'COM_CATEGORIES_HAS_SUBCATEGORY_ITEMS' , $ count ) ; JError :: raiseWarning ( 403 , $ msg ) ; $ result = false ; } } } return $ result ; } }
Don't allow categories to be deleted if they contain items or subcategories with items

@param   string  $context  The context for the content passed to the plugin.
@param   object  $data     The data relating to the content that was deleted.

@return  boolean

@since   1.6
Don t allow categories to be deleted if they contain items or subcategories with items