- Модуль: 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());
}
}
}
}