• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/controller/activity/configurable.php
  • Класс: Bitrix\Crm\Controller\Activity\Configurable
  • Вызов: Configurable::saveActivity
private function saveActivity(ConfigurableRestApp $activity, ?array $fields = null, ?array $layout = null, \CRestServer $server): void
{
	if ($server->getAuthType() !== \Bitrix\Rest\OAuth\Auth::AUTH_TYPE)
	{
		$this->addError(new Error(Loc::getMessage('CRM_CONFIGURABLE_REST_APP_ERROR_WRONG_CONTEXT'), 'ERROR_WRONG_CONTEXT'));
	}
	$restAppClientId = $server->getClientId();
	if ($activity->getId())
	{
		if ($activity->getRestClientId() !== $restAppClientId)
		{
			$this->addError(new Error(Loc::getMessage('CRM_CONFIGURABLE_REST_APP_ERROR_WRONG_APPLICATION'), 'ERROR_WRONG_APPLICATION'));
		}
	}
	elseif ($restAppClientId)
	{
		$activity->setRestClientId($restAppClientId);
	}
	else
	{
		$this->addError(new Error(Loc::getMessage('CRM_CONFIGURABLE_REST_APP_ERROR_WRONG_CONTEXT'), 'ERROR_WRONG_CONTEXT'));
	}

	$validateFieldsResult = $this->validateFields($fields);
	if (!$validateFieldsResult->isSuccess())
	{
		$this->addErrors($validateFieldsResult->getErrors());
	}

	$layoutDto = null;
	if (!empty($layout))
	{
		$layoutDto = new ConfigurableRestApp\Dto\LayoutDto($layout);
		if ($layoutDto->hasValidationErrors())
		{
			$this->addErrors($layoutDto->getValidationErrors()->toArray());
		}
	}
	elseif (!$activity->getId())
	{
		$this->addError(new Error(Loc::getMessage('CRM_CONFIGURABLE_REST_APP_ERROR_EMPTY_LAYOUT'), 'ERROR_EMPTY_LAYOUT'));
	}

	if (empty($this->getErrors()))
	{
		if ($layoutDto)
		{
			$activity->setLayoutDto($layoutDto);
		}
		if (isset($fields['completed']))
		{
			$activity->setCompleted($this->castToBool($fields['completed']));
		}
		if (isset($fields['deadline']) && (string)$fields['deadline'] !== '')
		{
			$activity->setDeadline($this->prepareDatetime((string)$fields['deadline']));
		}
		if (isset($fields['isIncomingChannel']))
		{
			$activity->setIsIncomingChannel($this->castToBool($fields['isIncomingChannel']));
		}
		if (isset($fields['responsibleId']))
		{
			$activity->setResponsibleId((int)$fields['responsibleId']);
		}
		if (isset($fields['pingOffsets']))
		{
			$pingOffsets = is_array($fields['pingOffsets']) ? $fields['pingOffsets'] : [];
			$pingOffsets = array_unique(array_map('intval', $pingOffsets));
			$activity->setPingOffsets($pingOffsets);
		}
		if (isset($fields['badgeCode']))
		{
			$activity->setBadgeCode((string)$fields['badgeCode']);
		}
		if (isset($fields['originatorId']))
		{
			$activity->setOriginatorId((string)$fields['originatorId']);
		}
		if (isset($fields['originId']))
		{
			$activity->setOriginId((string)$fields['originId']);
		}

		if (empty($this->getErrors()))
		{
			$saveResult = $activity->save();
			if (!$saveResult->isSuccess())
			{
				$this->addErrors($saveResult->getErrors());
			}
		}
	}
}