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