%PDF- %PDF-
| Direktori : /home/bitrix/www/bitrix/components/bitrix/landing.landings/ |
| Current File : //home/bitrix/www/bitrix/components/bitrix/landing.landings/class.php |
<?php
if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true)
{
die();
}
use \Bitrix\Landing\Landing;
use Bitrix\Landing\Manager;
use \Bitrix\Main\Entity;
\CBitrixComponent::includeComponentClass('bitrix:landing.base');
\CBitrixComponent::includeComponentClass('bitrix:landing.filter');
class LandingLandingsComponent extends LandingBaseComponent
{
/**
* Count items per page.
*/
const COUNT_PER_PAGE = 23;
/**
* Copy some landing.
* @param int $id Landing id.
* @param array $additional Additional params.
* @return boolean
*/
protected function actionCopy($id, $additional = array())
{
$res = \Bitrix\Landing\PublicAction\Landing::copy(
$id,
isset($additional['siteId']) ? $additional['siteId'] : false
);
if ($res->getError()->isEmpty())
{
return true;
}
else
{
$this->setErrors(
$res->getError()->getErrors()
);
}
return false;
}
/**
* Get previews from folder.
* @param int $folderId Folder id.
* @return array
*/
protected function getFolderPreviews($folderId)
{
$previews = array();
$pages = $this->getLandings(array(
'select' => array(
'ID'
),
'filter' => array(
'FOLDER_ID' => $folderId
),
'order' => array(
'ID' => 'DESC'
),
'limit' => 4
));
foreach ($pages as $page)
{
$landing = Landing::createInstance($page['ID'], array(
'blocks_limit' => 1
));
$previews[$page['ID']] = $landing->getPreview();
}
return $previews;
}
/**
* Base executable method.
* @return void
*/
public function executeComponent()
{
$init = $this->init();
if ($init)
{
$request = \Bitrix\Main\Application::getInstance()->getContext()->getRequest();
$deletedLTdays = Manager::getDeletedLT();
$this->checkParam('SITE_ID', 0);
$this->checkParam('TYPE', '');
$this->checkParam('ACTION_FOLDER', 'folderId');
$this->checkParam('PAGE_URL_LANDING_EDIT', '');
$this->checkParam('PAGE_URL_LANDING_VIEW', '');
// make filter
$filter = LandingFilterComponent::getFilter(
LandingFilterComponent::TYPE_LANDING
);
$filter['SITE_ID'] = $this->arParams['SITE_ID'];
if ($request->offsetExists($this->arParams['ACTION_FOLDER']))
{
$filter[] = array(
'LOGIC' => 'OR',
'FOLDER_ID' => $request->get($this->arParams['ACTION_FOLDER']),
'ID' => $request->get($this->arParams['ACTION_FOLDER'])
);
}
else
{
$filter['FOLDER_ID'] = false;
}
$this->arResult['IS_DELETED'] = LandingFilterComponent::isDeleted();
$this->arResult['SITES'] = $sites = $this->getSites();
// get list
$this->arResult['LANDINGS'] = $this->getLandings(array(
'select' => array(
'*',
'DATE_MODIFY_UNIX',
'DATE_PUBLIC_UNIX'
),
'filter' => $filter,
'runtime' => array(
new Entity\ExpressionField('DATE_MODIFY_UNIX', 'UNIX_TIMESTAMP(%s)', array('DATE_MODIFY')),
new Entity\ExpressionField('DATE_PUBLIC_UNIX', 'UNIX_TIMESTAMP(%s)', array('DATE_PUBLIC'))
),
'order' => $this->arResult['IS_DELETED']
? array(
'DATE_MODIFY' => 'desc'
)
: array(
'ID' => 'desc'
),
'navigation' => $this::COUNT_PER_PAGE
));
$this->arResult['NAVIGATION'] = $this->getLastNavigation();
// base data
$firstItem = false;
foreach ($this->arResult['LANDINGS'] as &$item)
{
if (isset($sites[$item['SITE_ID']]))
{
$item['IS_HOMEPAGE'] = $item['ID'] == $sites[$item['SITE_ID']]['LANDING_ID_INDEX'];
}
else
{
$item['IS_HOMEPAGE'] = false;
}
if (!$firstItem)
{
$firstItem = &$item;
}
$landing = Landing::createInstance($item['ID'], array(
'blocks_limit' => 1,
'force_deleted' => true
));
$item['PUBLIC_URL'] = '';
$item['PREVIEW'] = $landing->getPreview();
if ($item['FOLDER'] == 'Y')
{
$item['FOLDER_PREVIEW'] = $this->getFolderPreviews($item['ID']);
}
if ($item['DELETED'] == 'Y')
{
$item['DATE_DELETED_DAYS'] = $deletedLTdays - intval((time() - $item['DATE_MODIFY']->getTimeStamp()) / 86400);
$item['DELETE_FINISH'] = $item['DATE_DELETED_DAYS'] <= 0;//@tmp
}
}
// checking areas
$areas = \Bitrix\Landing\TemplateRef::landingIsArea(
array_keys($this->arResult['LANDINGS'])
);
foreach ($this->arResult['LANDINGS'] as &$landingItem)
{
$landingItem['IS_AREA'] = $areas[$landingItem['ID']] === true;
}
unset($landingItem);
// sort by homepage additional
uasort($this->arResult['LANDINGS'], function($a, $b)
{
if ($a['IS_HOMEPAGE'] === $b['IS_HOMEPAGE'])
{
return 0;
}
return ($a['IS_HOMEPAGE'] < $b['IS_HOMEPAGE']) ? 1 : -1;
});
// public url
if (isset($landing))
{
$publicUrls = $landing->getPublicUrl(array_keys($this->arResult['LANDINGS']));
foreach ($publicUrls as $id => $url)
{
$this->arResult['LANDINGS'][$id]['PUBLIC_URL'] = $this->getTimestampUrl($url);
}
}
}
parent::executeComponent();
}
}