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

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

	// remove row
	$result = parent::delete($primary);

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

	// get file fields
	$file_fields = array();
	/** @noinspection PhpMethodOrClassCallIsNotCaseSensitiveInspection */
	$fields = $USER_FIELD_MANAGER->getUserFields(static::compileEntityId($hlblock['ID']));

	foreach ($fields as $name => $field)
	{
		if ($field['USER_TYPE']['BASE_TYPE'] === 'file')
		{
			$file_fields[] = $name;
		}
	}

	// delete files
	if (!empty($file_fields))
	{
		$oldEntity = static::compileEntity($hlblock);

		$query = new EntityQuery($oldEntity);

		// select file ids
		$query->setSelect($file_fields);

		// if they are not empty
		$filter = array('LOGIC' => 'OR');

		foreach ($file_fields as $file_field)
		{
			$filter['!'.$file_field] = false;
		}

		$query->setFilter($filter);

		// go
		$iterator = $query->exec();

		while ($row = $iterator->fetch())
		{
			foreach ($file_fields as $file_field)
			{
				if (!empty($row[$file_field]))
				{
					if (is_array($row[$file_field]))
					{
						foreach ($row[$file_field] as $value)
						{
							CFile::delete($value);
						}
					}
					else
					{
						CFile::delete($row[$file_field]);
					}
				}
			}
		}
		unset($row, $iterator);
	}

	$connection = Application::getConnection();

	foreach ($fields as $field)
	{
		// delete from uf registry
		if ($field['USER_TYPE']['BASE_TYPE'] === 'enum')
		{
			$enumField = new CUserFieldEnum;
			$enumField->DeleteFieldEnum($field['ID']);
		}

		$connection->query("DELETE FROM b_user_field_lang WHERE USER_FIELD_ID = ".$field['ID']);
		$connection->query("DELETE FROM b_user_field WHERE ID = ".$field['ID']);

		// if multiple - drop utm table
		if ($field['MULTIPLE'] == 'Y')
		{
			$utmTableName = static::getMultipleValueTableName($hlblock, $field);
			$connection->dropTable($utmTableName);
		}
	}

	// clear uf cache
	$managedCache = Application::getInstance()->getManagedCache();
	if(CACHED_b_user_field !== false)
	{
		$managedCache->cleanDir("b_user_field");
	}

	// clear langs
	$res = HighloadBlockLangTable::getList(array(
		'filter' => array('ID' => $primary)
	));
	while ($row = $res->fetch())
	{
		HighloadBlockLangTable::delete([
			'ID' => $row['ID'],
			'LID' => $row['LID'],
		]);
	}

	// clear rights
	$res = HighloadBlockRightsTable::getList(array(
		'filter' => array('HL_ID' => $primary)
	));
	while ($row = $res->fetch())
	{
		HighloadBlockRightsTable::delete($row['ID']);
	}

	// drop hl table
	$connection->dropTable($hlblock['TABLE_NAME']);

	return $result;
}