• Модуль: bizproc
  • Путь к файлу: ~/bitrix/modules/bizproc/lib/restservice.php
  • Класс: BitrixBizprocRestService
  • Вызов: RestService::updateActivityInternal
static function updateActivityInternal($params, $server, $isRobot = false)
{
	if(!$server->getClientId())
	{
		throw new AccessException("Application context required");
	}

	$params = self::prepareActivityData($params);
	self::checkAdminPermissions();
	self::validateActivityCode($params['CODE']);
	$params['APP_ID'] = $server->getClientId();
	$internalCode = self::generateInternalCode($params);

	$iterator = RestActivityTable::getList(array(
		'select' => array('ID'),
		'filter' => array(
			'=INTERNAL_CODE' => $internalCode,
			'=IS_ROBOT' => $isRobot ? 'Y' : 'N'
		)
	));
	$result = $iterator->fetch();
	if (!$result)
	{
		throw new RestException('Activity or Robot not found!', self::ERROR_ACTIVITY_NOT_FOUND);
	}

	$fields = (isset($params['FIELDS']) && is_array($params['FIELDS'])) ? $params['FIELDS'] : null;

	if (!$fields)
	{
		throw new RestException('No fields to update', self::ERROR_ACTIVITY_VALIDATION_FAILURE);
	}

	$toUpdate = [];

	if (isset($fields['HANDLER']))
	{
		self::validateActivityHandler($fields['HANDLER'], $server);
		$toUpdate['HANDLER'] = $fields['HANDLER'];
	}

	if (isset($fields['AUTH_USER_ID']))
	{
		$toUpdate['AUTH_USER_ID'] = (int) $fields['AUTH_USER_ID'];
	}

	if (isset($fields['USE_SUBSCRIPTION']))
	{
		$toUpdate['USE_SUBSCRIPTION'] = (string) $fields['USE_SUBSCRIPTION'];
	}

	if (isset($fields['USE_PLACEMENT']))
	{
		$toUpdate['USE_PLACEMENT'] = ($fields['USE_PLACEMENT'] === 'Y') ? 'Y' : 'N';
	}

	if (!empty($fields['NAME']))
	{
		$toUpdate['NAME'] = $fields['NAME'];
	}

	if (isset($fields['DESCRIPTION']))
	{
		$toUpdate['DESCRIPTION'] = $fields['DESCRIPTION'];
	}

	if (isset($fields['PROPERTIES']))
	{
		self::validateActivityProperties($fields['PROPERTIES']);
		$toUpdate['PROPERTIES'] = $fields['PROPERTIES'];
	}

	if (isset($fields['RETURN_PROPERTIES']))
	{
		self::validateActivityProperties($fields['RETURN_PROPERTIES']);
		$toUpdate['RETURN_PROPERTIES'] = $fields['RETURN_PROPERTIES'];
	}

	if (isset($fields['DOCUMENT_TYPE']))
	{
		if (empty($fields['DOCUMENT_TYPE']))
		{
			$toUpdate['DOCUMENT_TYPE'] = null;
		}
		else
		{
			static::validateActivityDocumentType($fields['DOCUMENT_TYPE']);
			$toUpdate['DOCUMENT_TYPE'] = $fields['DOCUMENT_TYPE'];
		}
	}

	if (isset($fields['FILTER']))
	{
		if (empty($fields['FILTER']))
		{
			$toUpdate['FILTER'] = null;
		}
		else
		{
			if (!is_array($fields['FILTER']))
			{
				throw new RestException('Wrong activity FILTER!', self::ERROR_ACTIVITY_VALIDATION_FAILURE);
			}
			$toUpdate['FILTER'] = $fields['FILTER'];
		}
	}

	if (!$toUpdate)
	{
		throw new RestException('No fields to update', self::ERROR_ACTIVITY_VALIDATION_FAILURE);
	}

	if (isset($fields['PLACEMENT_HANDLER']))
	{
		self::validateActivityHandler($fields['PLACEMENT_HANDLER'], $server);
		self::upsertAppPlacement(self::getAppId($params['APP_ID']), $params['CODE'], $fields['PLACEMENT_HANDLER']);
	}

	if (isset($toUpdate['USE_PLACEMENT']) && $toUpdate['USE_PLACEMENT'] === 'N')
	{
		self::deleteAppPlacement(self::getAppId($params['APP_ID']), $params['CODE']);
	}

	$updateResult = RestActivityTable::update($result['ID'], $toUpdate);

	if (!$updateResult->isSuccess())
	{
		throw new RestException(
			implode('; ', $updateResult->getErrorMessages()),
			self::ERROR_ACTIVITY_VALIDATION_FAILURE
		);
	}

	return true;
}