• Модуль: highloadblock
  • Путь к файлу: ~/bitrix/modules/highloadblock/lib/datamanager.php
  • Класс: BitrixHighloadblockDataManager
  • Вызов: DataManager::delete
static function delete($primary)
{
	global $USER_FIELD_MANAGER;

	// check primary
	static::normalizePrimary($primary);
	static::validatePrimary($primary);

	$entity = static::getEntity();
	$result = new EntityDeleteResult();
	$hlblock = static::getHighloadBlock();

	// get old data
	$oldData = static::getByPrimary($primary)->fetch();

	try
	{
		//event before delete
		static::callOnBeforeDeleteEvent($primary, $entity, $result, $oldData);

		// return if any error
		if (!$result->isSuccess(true))
		{
			return $result;
		}

		//event on delete
		static::callOnDeleteEvent($primary, $entity, $oldData);

		// remove row
		$connection = MainApplication::getConnection();
		$helper = $connection->getSqlHelper();

		$tableName = $entity->getDBTableName();

		$id = array();
		foreach ($primary as $k => $v)
		{
			$id[] = $k." = '".$helper->forSql($v)."'";
		}
		$where = implode(' AND ', $id);

		$sql = "DELETE FROM ".$helper->quote($tableName)." WHERE ".$where;
		$connection->queryExecute($sql);

		$fields = $USER_FIELD_MANAGER->getUserFields('HLBLOCK_'.$hlblock['ID']);

		foreach ($oldData as $k => $v)
		{
			$userfield = $fields[$k];

			// remove multi values
			if ($userfield['MULTIPLE'] == 'Y')
			{
				$utmTableName = HighloadBlockTable::getMultipleValueTableName($hlblock, $userfield);

				$connection->query(sprintf(
					'DELETE FROM %s WHERE %s = %d',
					$helper->quote($utmTableName), $helper->quote('ID'), $primary['ID']
				));
			}

			// remove files
			if ($userfield["USER_TYPE"]["BASE_TYPE"]=="file")
			{
				if(is_array($oldData[$k]))
				{
					foreach($oldData[$k] as $value)
					{
						CFile::delete($value);
					}
				}
				else
				{
					CFile::delete($oldData[$k]);
				}
			}
		}

		$entity->cleanCache();

		//event after delete
		static::callOnAfterDeleteEvent($primary, $entity, $oldData);
	}
	catch (Exception $e)
	{
		// check result to avoid warning
		$result->isSuccess();

		throw $e;
	}

	return $result;
}