CCrmAddressRestProxy::processMethodRequest

  1. Bitrix24 API (v. 23.675.0)
  2. crm
  3. CCrmAddressRestProxy
  4. processMethodRequest
  • Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/classes/general/restservice.php
  • Класс: \CCrmAddressRestProxy
  • Вызов: CCrmAddressRestProxy::processMethodRequest
public function processMethodRequest($name, $nameDetails, $arParams, $nav, $server)
{
	$name = mb_strtoupper($name);

	$fieldsInfo = $this->getFieldsInfo();

	if($name === 'FIELDS' || $name === 'LIST')
	{
		return parent::processMethodRequest($name, $nameDetails, $arParams, $nav, $server);
	}
	elseif($name === 'ADD')
	{
		$fields = $this->resolveArrayParam($arParams, 'fields');

		$entityID = $entityTypeID = $typeID = 0;

		if(is_array($fields))
		{
			$typeID = intval($this->resolveParam($fields, 'TYPE_ID'));
			$entityTypeID = intval($this->resolveParam($fields, 'ENTITY_TYPE_ID'));
			$entityID = intval($this->resolveParam($fields, 'ENTITY_ID'));
		}

		if(!$this->isValidID($typeID) || !EntityAddressType::isDefined($typeID))
		{
			throw new RestException('TYPE_ID is not defined or invalid.');
		}
		if(!$this->isValidID($entityTypeID) || !CCrmOwnerType::IsDefined($entityTypeID))
		{
			throw new RestException('ENTITY_TYPE_ID is not defined or invalid.');
		}
		if(!$this->checkEntityID($entityID))
		{
			throw new RestException('ENTITY_ID is not defined or invalid.');
		}

		$r = $this->exists($typeID, $entityTypeID, $entityID);
		if(is_array($r))
		{
			throw new RestException("TypeAddress exists.");
		}

		if(!EntityAddress::checkCreatePermissionOwnerEntity($entityTypeID, $entityID))
		{
			throw new RestException('Access denied.');
		}

		$this->internalizeFields($fields, $fieldsInfo, array());

		if ($entityTypeID === \CCrmOwnerType::Requisite)
		{
			$anchor = EntityRequisite::getOwnerEntityById($entityID);
			$fields['ANCHOR_TYPE_ID'] = intval($anchor['ENTITY_TYPE_ID']);
			$fields['ANCHOR_ID'] = intval($anchor['ENTITY_ID']);
		}

		EntityAddress::register($entityTypeID, $entityID, $typeID, $fields);

		return true;
	}
	elseif($name === 'UPDATE')
	{
		$fields = $this->resolveArrayParam($arParams, 'fields');

		$entityID = $entityTypeID = $typeID = 0;

		if(is_array($fields))
		{
			$typeID = intval($this->resolveParam($fields, 'TYPE_ID'));
			$entityTypeID = intval($this->resolveParam($fields, 'ENTITY_TYPE_ID'));
			$entityID = intval($this->resolveParam($fields, 'ENTITY_ID'));
		}

		if(!$this->isValidID($typeID) || !EntityAddressType::isDefined($typeID))
		{
			throw new RestException('TYPE_ID is not defined or invalid.');
		}
		if(!$this->isValidID($entityTypeID) || !CCrmOwnerType::IsDefined($entityTypeID))
		{
			throw new RestException('ENTITY_TYPE_ID is not defined or invalid.');
		}
		if(!$this->checkEntityID($entityID))
		{
			throw new RestException('ENTITY_ID is not defined or invalid.');
		}

		$r = $this->exists($typeID, $entityTypeID, $entityID);
		if(!is_array($r))
		{
			throw new RestException("TypeAddress not found.");
		}

		if(!EntityAddress::checkUpdatePermissionOwnerEntity($entityTypeID, $entityID))
		{
			throw new RestException('Access denied.');
		}

		$this->internalizeFields($fields, $fieldsInfo, array());

		if (isset($fields['ENTITY_TYPE_ID']) && $fields['ENTITY_TYPE_ID'] == CCrmOwnerType::Requisite &&
			isset($fields['ENTITY_ID']) && $fields['ENTITY_ID'] > 0)
		{
			$requisite = (new EntityRequisite)->getById( $fields['ENTITY_ID']);
			if (is_array($requisite) && isset($requisite['ENTITY_TYPE_ID']) && $requisite['ENTITY_TYPE_ID'] > 0 &&
				isset($requisite['ENTITY_ID']) && $requisite['ENTITY_ID'] > 0)
			{
				$fields['ANCHOR_TYPE_ID'] = $requisite['ENTITY_TYPE_ID'];
				$fields['ANCHOR_ID'] = $requisite['ENTITY_ID'];
			}
		}
		EntityAddress::register($entityTypeID, $entityID, $typeID, $fields, [
			'updateLocationAddress' => !( isset($fields['ADDRESS_LOC_ADDR_ID']) && $fields['ADDRESS_LOC_ADDR_ID'] > 0 )
		]);

		return true;
	}
	elseif($name === 'DELETE')
	{
		$fields = $this->resolveArrayParam($arParams, 'fields');

		$entityID = $entityTypeID = $typeID = 0;

		if(is_array($fields))
		{
			$typeID = intval($this->resolveParam($fields, 'TYPE_ID'));
			$entityTypeID = intval($this->resolveParam($fields, 'ENTITY_TYPE_ID'));
			$entityID = intval($this->resolveParam($fields, 'ENTITY_ID'));
		}

		if(!$this->isValidID($typeID) || !EntityAddressType::isDefined($typeID))
		{
			throw new RestException('TYPE_ID is not defined or invalid.');
		}
		if(!$this->isValidID($entityTypeID) || !CCrmOwnerType::IsDefined($entityTypeID))
		{
			throw new RestException('ENTITY_TYPE_ID is not defined or invalid.');
		}
		if(!$this->checkEntityID($entityID))
		{
			throw new RestException('ENTITY_ID is not defined or invalid.');
		}

		$r = $this->exists($typeID, $entityTypeID, $entityID);
		if(!is_array($r))
		{
			throw new RestException("TypeAddress not found.");
		}

		if(!EntityAddress::checkDeletePermissionOwnerEntity($entityTypeID, $entityID))
		{
			throw new RestException('Access denied.');
		}

		EntityAddress::unregister($entityTypeID, $entityID, $typeID);

		return true;
	}
	elseif($name === 'GETZONEID')
	{
		return EntityAddress::getZoneId();
	}
	elseif($name === 'SETZONEID')
	{
		$zoneId = $this->resolveParam($arParams, 'ID');

		EntityAddress::setZoneId($zoneId);

		return true;
	}

	throw new RestException("Resource '{$name}' is not supported in current context.");
}

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