Your IP : 18.225.55.104
<? if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) die();
use Bitrix\Main\Loader;
use Bitrix\Main\Localization\Loc;
use Bitrix\Main\SystemException;
class IblockElementSelector extends CBitrixComponent
{
public function onIncludeComponentLang()
{
$this->includeComponentLang(basename(__FILE__));
Loc::loadMessages(__FILE__);
}
protected function checkModules()
{
if(!Loader::includeModule('iblock'))
{
throw new SystemException(Loc::getMessage('IES_MODULE_NOT_INSTALLED', array('MODULE_ID' => 'iblock')));
}
}
public function onPrepareComponentParams($params)
{
$params['SELECTOR_ID'] = !empty($params['SELECTOR_ID']) ? $params['SELECTOR_ID'] : '';
$params['IBLOCK_ID'] = !empty($params['IBLOCK_ID']) ? $params['IBLOCK_ID'] : 0;
$params['SEARCH_INPUT_ID'] = !empty($params['SEARCH_INPUT_ID']) && preg_match('/^[a-zA-Z0-9_-]+$/',
$params['SEARCH_INPUT_ID']) ? $params['SEARCH_INPUT_ID'] : '';
$params['POPUP'] = !empty($params['POPUP']) ? $params['POPUP'] : 'Y';
$params['INPUT_NAME'] = !empty($params['INPUT_NAME']) ? $params['INPUT_NAME'] : $params['SELECTOR_ID'];
$params['PANEL_SELECTED_VALUES'] = !empty($params['PANEL_SELECTED_VALUES']) ?
$params['PANEL_SELECTED_VALUES'] : 'Y';
$params['MULTIPLE'] = !empty($params['MULTIPLE']) ? $params['MULTIPLE'] : 'Y';
$params['ONLY_READ'] = !empty($params['ONLY_READ']) ? $params['ONLY_READ'] : 'N';
$params['CURRENT_ELEMENTS_ID'] = !empty($params['CURRENT_ELEMENTS_ID']) ?
$params['CURRENT_ELEMENTS_ID'] : array();
if(!is_array($params['CURRENT_ELEMENTS_ID']))
{
$params['CURRENT_ELEMENTS_ID'] = array($params['CURRENT_ELEMENTS_ID']);
}
$params['ON_CHANGE'] = !empty($params['ON_CHANGE']) ? $params['ON_CHANGE'] : '';
$params['ON_SELECT'] = !empty($params['ON_SELECT']) ? $params['ON_SELECT'] : '';
$params['ON_UNSELECT'] = !empty($params['ON_UNSELECT']) ? $params['ON_UNSELECT'] : '';
$params['LAST_ELEMENTS'] = array();
$params['CURRENT_ELEMENTS'] = array();
$params['ACCESS_DENIED'] = 'N';
return $params;
}
public function executeComponent()
{
try
{
$this->checkModules();
$this->checkRequiredParams();
$this->checkPermissions();
$this->getLastElements();
$this->getCurrentElements();
$this->fillResult();
$this->includeComponentTemplate();
}
catch (SystemException $exception)
{
ShowError($exception->getMessage());
}
}
protected function checkRequiredParams()
{
$listRequiredParams = array('SELECTOR_ID', 'IBLOCK_ID');
foreach($listRequiredParams as $requiredParam)
{
if(empty($this->arParams[$requiredParam]))
{
throw new SystemException(Loc::getMessage(
'IES_ERROR_REQUIRED_PARAMETER', array('#PARAM#' => $requiredParam)));
}
}
}
protected function checkPermissions()
{
if(!CIBlockRights::userHasRightTo($this->arParams['IBLOCK_ID'], $this->arParams['IBLOCK_ID'], 'element_read'))
{
$this->arParams['ACCESS_DENIED'] = 'Y';
}
}
protected function getLastElements()
{
if($this->arParams['ACCESS_DENIED'] == 'Y')
{
return;
}
$queryObject = CIBlockElement::GetList(
['ID' => 'DESC'],
[
'=IBLOCK_ID' => $this->arParams['IBLOCK_ID'],
'CHECK_PERMISSIONS' => 'Y',
'MIN_PERMISSION' => 'R'
],
false,
['nTopCount' => 50],
['ID', 'IBLOCK_ID', 'NAME']
);
while($element = $queryObject->fetch())
{
$this->arParams['LAST_ELEMENTS'][] = [
'ID' => $element['ID'],
'NAME' => '['.$element['ID'].'] '.$element['NAME']
];
}
unset($element, $queryObject);
}
protected function getCurrentElements()
{
if(empty($this->arParams['CURRENT_ELEMENTS_ID']) || $this->arParams['ACCESS_DENIED'] == 'Y')
{
return;
}
$queryObject = CIBlockElement::GetList(
['NAME' => 'ASC'],
['=ID' => $this->arParams['CURRENT_ELEMENTS_ID']],
false,
false,
['ID', 'IBLOCK_ID', 'NAME']
);
while($element = $queryObject->fetch())
{
$this->arParams['CURRENT_ELEMENTS'][] = [
'ID' => $element['ID'],
'NAME' => '['.$element['ID'].'] '.$element['NAME']
];
}
unset($element, $queryObject);
}
protected function fillResult()
{
$this->arResult['SELECTOR_ID'] = $this->arParams['SELECTOR_ID'];
$this->arResult['IBLOCK_ID'] = $this->arParams['IBLOCK_ID'];
$this->arResult['SEARCH_INPUT_ID'] = $this->arParams['SEARCH_INPUT_ID'];
$this->arResult['POPUP'] = $this->arParams['POPUP'];
$this->arResult['INPUT_NAME'] = $this->arParams['INPUT_NAME'];
$this->arResult['PANEL_SELECTED_VALUES'] = $this->arParams['PANEL_SELECTED_VALUES'];
$this->arResult['MULTIPLE'] = $this->arParams['MULTIPLE'];
$this->arResult['ONLY_READ'] = $this->arParams['ONLY_READ'];
$this->arResult['ON_CHANGE'] = $this->arParams['ON_CHANGE'];
$this->arResult['ON_SELECT'] = $this->arParams['ON_SELECT'];
$this->arResult['ON_UNSELECT'] = $this->arParams['ON_UNSELECT'];
$this->arResult['ACCESS_DENIED'] = $this->arParams['ACCESS_DENIED'];
$this->arResult['CURRENT_ELEMENTS_ID'] = $this->arParams['CURRENT_ELEMENTS_ID'];
$this->arResult['CURRENT_ELEMENTS'] = $this->arParams['CURRENT_ELEMENTS'];
$this->arResult['LAST_ELEMENTS'] = $this->arParams['LAST_ELEMENTS'];
}
}