• Модуль: landing
  • Путь к файлу: ~/bitrix/modules/landing/lib/publicaction/repo.php
  • Класс: BitrixLandingPublicActionRepo
  • Вызов: Repo::bind
static function bind(array $fields)
{
	$result = new PublicActionResult();
	$error = new BitrixLandingError;
	trimArr($fields);

	if (($app = BitrixLandingPublicAction::restApplication()))
	{
		$fields['APP_ID'] = $app['ID'];
	}

	$res = Placement::getList(array(
		'select' => array(
			'ID'
		),
		'filter' => array(
			'APP_ID' => isset($fields['APP_ID'])
						? $fields['APP_ID']
						: false,
			'PLACEMENT' => isset($fields['PLACEMENT'])
						? $fields['PLACEMENT']
						: false,
			'PLACEMENT_HANDLER' => isset($fields['PLACEMENT_HANDLER'])
						? $fields['PLACEMENT_HANDLER']
						: false
		)
	));
	// add, if not exist
	if (!$res->fetch())
	{
		if (BitrixMainLoader::includeModule('rest'))
		{
			// first try add in the local table
			$resLocal = Placement::add($fields);
			if ($resLocal->isSuccess())
			{
				// then add in the rest table
				$resRest = PlacementTable::add(
					$fields
				);
				if ($resRest->isSuccess())
				{
					$result->setResult(true);
				}
				else
				{
					$error->addFromResult($resRest);
					Placement::delete($resLocal->getId());
				}
			}
			else
			{
				$error->addFromResult($resLocal);
			}
		}
	}
	else
	{
		$error->addError(
			'PLACEMENT_EXIST',
			Loc::getMessage('LANDING_APP_PLACEMENT_EXIST')
		);
	}

	$result->setError($error);

	return $result;
}