EntityBankDetail::checkBeforeUpdate

  1. Bitrix24 API (v. 23.675.0)
  2. crm
  3. EntityBankDetail
  4. checkBeforeUpdate
  • Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/entitybankdetail.php
  • Класс: Bitrix\Crm\EntityBankDetail
  • Вызов: EntityBankDetail::checkBeforeUpdate
public function checkBeforeUpdate($id, $fields)
{
	unset($fields['ID'], $fields['DATE_CREATE'], $fields['CREATED_BY_ID']);
	$fields['DATE_MODIFY'] = new \Bitrix\Main\Type\DateTime();
	$fields['MODIFY_BY_ID'] = \CCrmSecurityHelper::GetCurrentUserID();

	$result = $this->checkRqFieldsBeforeSave($id, $fields);
	if (!$result->isSuccess())
	{
		return $result;
	}

	// rewrite some fields
	$entity = RequisiteTable::getEntity();
	foreach ($entity->getFields() as $field)
	{
		$fieldName = $field->getName();
		if ($field instanceof Entity\BooleanField && array_key_exists($fieldName, $fields))
		{
			if ($fields[$fieldName] !== 'Y' && $fields[$fieldName] !== 'N'
				&& $fields[$fieldName] !== true && $fields[$fieldName] !== false)
			{
				$fields[$fieldName] = $field->getDefaultValue();
			}
		}
	}

	global $USER_FIELD_MANAGER, $APPLICATION;

	$result = new Entity\UpdateResult();
	$entity = BankDetailTable::getEntity();
	$entity_primary = $entity->getPrimaryArray();

	// normalize primary
	if ($id === null)
	{
		$id = array();

		// extract primary from data array
		foreach ($entity_primary as $key)
		{
			/** @var Entity\ScalarField $field  */
			$field = $entity->getField($key);
			if ($field->isAutocomplete())
			{
				continue;
			}

			if (!isset($fields[$key]))
			{
				throw new Main\ArgumentException(sprintf(
					'Primary `%s` was not found when trying to query %s row.', $key, $entity->getName()
				));
			}

			$id[$key] = $fields[$key];
		}
	}
	elseif (is_scalar($id))
	{
		if (count($entity_primary) > 1)
		{
			throw new Main\ArgumentException(sprintf(
				'Require multi primary {`%s`}, but one scalar value "%s" found when trying to query %s row.',
				join('`, `', $entity_primary), $id, $entity->getName()
			));
		}

		$id = array($entity_primary[0] => $id);
	}

	// validate primary
	if (is_array($id))
	{
		if(empty($id))
		{
			throw new Main\ArgumentException(sprintf(
				'Empty primary found when trying to query %s row.', $entity->getName()
			));
		}

		foreach (array_keys($id) as $key)
		{
			if (!in_array($key, $entity_primary, true))
			{
				throw new Main\ArgumentException(sprintf(
					'Unknown primary `%s` found when trying to query %s row.',
					$key, $entity->getName()
				));
			}
		}
	}
	else
	{
		throw new Main\ArgumentException(sprintf(
			'Unknown type of primary "%s" found when trying to query %s row.', gettype($id), $entity->getName()
		));
	}
	foreach ($id as $key => $value)
	{
		if (!is_scalar($value) && !($value instanceof Main\Type\Date))
		{
			throw new Main\ArgumentException(sprintf(
				'Unknown value type "%s" for primary "%s" found when trying to query %s row.',
				gettype($value), $key, $entity->getName()
			));
		}
	}

	try
	{
		// uf values
		$ufdata = array();

		// separate userfields
		if ($entity->getUfId())
		{
			// collect uf data
			$userfields = $USER_FIELD_MANAGER->GetUserFields($entity->getUfId());

			foreach ($userfields as $userfield)
			{
				if (array_key_exists($userfield['FIELD_NAME'], $fields))
				{
					// copy value
					$ufdata[$userfield['FIELD_NAME']] = $fields[$userfield['FIELD_NAME']];

					// remove original
					unset($fields[$userfield['FIELD_NAME']]);
				}
			}
		}

		// check data
		BankDetailTable::checkFields($result, $id, $fields);

		// check uf data
		if (!empty($ufdata))
		{
			if (!$USER_FIELD_MANAGER->CheckFields($entity->getUfId(), end($id), $ufdata))
			{
				if (is_object($APPLICATION) && $APPLICATION->getException())
				{
					$e = $APPLICATION->getException();
					$result->addError(new Entity\EntityError($e->getString()));
					$APPLICATION->resetException();
				}
				else
				{
					$result->addError(new Entity\EntityError("Unknown error while checking userfields"));
				}
			}
		}

		// check if there is still some data
		if (!count($fields + $ufdata))
		{
			$result->addError(new Entity\EntityError("There is no data to update."));
		}

		// return if any error
		if (!$result->isSuccess(true))
		{
			return $result;
		}
	}
	catch (\Exception $e)
	{
		// check result to avoid warning
		$result->isSuccess();

		throw $e;
	}

	return $result;
}

Добавить комментарий