• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/lib/userfield/internal/userfieldhelper.php
  • Класс: BitrixMainUserFieldInternalUserFieldHelper
  • Вызов: UserFieldHelper::OnBeforeUserTypeDelete
static function OnBeforeUserTypeDelete($field)
{
	$userFieldHelper = static::getInstance();
	$parseResult = $userFieldHelper->parseUserFieldEntityId($field['ENTITY_ID']);
	if($parseResult)
	{
		/** @var TypeFactory $factory */
		[$factory, $typeId] = $parseResult;
		/** @var TypeDataManager $dataClass */
		$dataClass = $factory->getTypeDataClass();
		// get entity info
		$typeData = $dataClass::getById($typeId)->fetch();

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

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

		if ($fieldType['BASE_TYPE'] === 'file')
		{
			// if it was file field, then delete all files
			$itemEntity = $dataClass::compileEntity($typeData);
			$query = new Query($itemEntity);
			$rows = $query->addSelect($field['FIELD_NAME'])->exec();

			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();
		try
		{
			$connection->dropColumn($typeData['TABLE_NAME'], $field['FIELD_NAME']);
		}
		catch(SqlQueryException $e)
		{
			// no column is ok
		}

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

		return [
			'PROVIDE_STORAGE' => false,
		];
	}

	return true;
}