• Модуль: landing
  • Путь к файлу: ~/bitrix/modules/landing/lib/publicaction/site.php
  • Класс: BitrixLandingPublicActionSite
  • Вызов: Site::getList
static function getList(array $params = [], $initiator = null)
{
	$result = new PublicActionResult();
	$params = $result->sanitizeKeys($params);
	$getPublicUrl = false;
	$getPreviewPicture = false;
	$getPhone = false;
	$mobileHit = $initiator === 'mobile';

	if ($mobileHit)
	{
		BitrixLandingConnectorMobile::forceMobile();
	}

	// necessary params for us
	if (
		!isset($params['select']) ||
		!is_array($params['select'])
	)
	{
		$params['select'] = ['*'];
	}
	if (
		!isset($params['filter']) ||
		!is_array($params['filter'])
	)
	{
		$params['filter'] = [];
	}

	// fix for smn sites
	if (
		isset($params['filter']['=TYPE']) &&
		$params['filter']['=TYPE'] == 'STORE'
	)
	{
		$params['filter']['=TYPE'] = [
			$params['filter']['=TYPE'],
			'SMN'
		];
	}
	if (
		isset($params['filter']['TYPE']) &&
		$params['filter']['TYPE'] == 'STORE'
	)
	{
		$params['filter']['TYPE'] = [
			$params['filter']['TYPE'],
			'SMN'
		];
	}

	if (isset($params['filter']['CHECK_PERMISSIONS']))
	{
		unset($params['filter']['CHECK_PERMISSIONS']);
	}

	// extend select's param
	if (is_array($params['select']))
	{
		if (in_array('DOMAIN_NAME', $params['select']))
		{
			$params['select']['DOMAIN_NAME'] = 'DOMAIN.DOMAIN';
		}
		if (in_array('PUBLIC_URL', $params['select']))
		{
			$getPublicUrl = true;
		}
		if (in_array('PREVIEW_PICTURE', $params['select']))
		{
			$getPreviewPicture = true;
		}
		if (in_array('PHONE', $params['select']))
		{
			$getPhone = true;
			$params['select'][] = 'ID';
		}
		// delete this keys for ORM
		$deleted = ['DOMAIN_NAME', 'PUBLIC_URL', 'PREVIEW_PICTURE', 'PHONE'];
		foreach ($params['select'] as $k => $code)
		{
			if (in_array($code, $deleted))
			{
				unset($params['select'][$k]);
			}
		}
	}

	// set additional select fields
	if (
		$getPreviewPicture &&
		!in_array('LANDING_ID_INDEX', $params['select'])
	)
	{
		$params['select'][] = 'LANDING_ID_INDEX';
	}
	if (!in_array('ID', $params['select']))
	{
		$params['select'][] = 'ID';
	}
	if (!in_array('TYPE', $params['select']))
	{
		$params['select'][] = 'TYPE';
	}

	// get ORM data
	$data = [];
	$landingIndexes = [];
	$res = SiteCore::getList($params);
	while ($row = $res->fetch())
	{
		if (isset($row['DATE_CREATE']))
		{
			$row['DATE_CREATE'] = (string) $row['DATE_CREATE'];
		}
		if (isset($row['DATE_MODIFY']))
		{
			$row['DATE_MODIFY'] = (string) $row['DATE_MODIFY'];
		}
		if ($row['LANDING_ID_INDEX'] && $getPreviewPicture)
		{
			$landingIndexes[$row['ID']] = $row['LANDING_ID_INDEX'];
		}
		if ($getPublicUrl)
		{
			$row['PUBLIC_URL'] = '';
		}
		if ($getPreviewPicture)
		{
			$row['PREVIEW_PICTURE'] = '';
		}
		if ($getPhone)
		{
			$row['PHONE'] = BitrixLandingConnectorCrm::getContacts(
				$row['ID']
			)['PHONE'] ?? null;
		}
		$data[$row['ID']] = $row;
	}

	// gets public url for sites
	if ($getPublicUrl || $getPreviewPicture)
	{
		$urls = SiteCore::getPublicUrl(array_keys($data), true, !$mobileHit);
		foreach ($urls as $siteId => $url)
		{
			$data[$siteId]['PUBLIC_URL'] = $url;
		}
	}

	// get preview pictures
	if ($landingIndexes)
	{
		$landing = Landing::createInstance(0);
		foreach ($landingIndexes as $siteId => $landingId)
		{
			$data[$siteId]['PREVIEW_PICTURE'] = $landing->getPreview(
				$landingId,
				false,
				$data[$siteId]['PUBLIC_URL']
			);
		}
	}

	// set and return result
	$result->setResult(
		array_values($data)
	);

	return $result;
}