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

	if (preg_match(self::ENTITY_ID_MASK, $field['ENTITY_ID'], $matches))
	{
		// get entity info
		$hlblock_id = $matches[1];
		$hlblock = HighloadBlockTable::getById($hlblock_id)->fetch();

		if (empty($hlblock))
		{
			// non-existent or zombie. let it go
			return array('PROVIDE_STORAGE' => false);
		}

		/** @noinspection PhpMethodOrClassCallIsNotCaseSensitiveInspection */
		$fieldType = $USER_FIELD_MANAGER->getUserType($field["USER_TYPE_ID"]);

		if ($fieldType['BASE_TYPE'] == 'file')
		{
			// if it was file field, then delete all files
			$entity = static::compileEntity($hlblock);

			/** @var DataManager $dataClass */
			$dataClass = $entity->getDataClass();

			$rows = $dataClass::getList(array('select' => array($field['FIELD_NAME'])));

			while ($oldData = $rows->fetch())
			{
				if (empty($oldData[$field['FIELD_NAME']]))
				{
					continue;
				}

				if(is_array($oldData[$field['FIELD_NAME']]))
				{
					foreach($oldData[$field['FIELD_NAME']] as $value)
					{
						CFile::delete($value);
					}
				}
				else
				{
					CFile::delete($oldData[$field['FIELD_NAME']]);
				}
			}
		}

		// drop db column
		$connection = Application::getConnection();
		$connection->dropColumn($hlblock['TABLE_NAME'], $field['FIELD_NAME']);

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

		return array('PROVIDE_STORAGE' => false);
	}

	return true;
}