/** * Производится инициализация переменных, обработка запросов на редактирование * * @param array $fields * @param bool $isPopup * @throws \Bitrix\Main\ArgumentException */ public function __construct(array $fields, $isPopup = false) { $this->isPopup = $isPopup; if ($this->isPopup) { $this->fieldPopupResultName = preg_replace("/[^a-zA-Z0-9_:\\[\\]]/", "", $_REQUEST['n']); $this->fieldPopupResultIndex = preg_replace("/[^a-zA-Z0-9_:]/", "", $_REQUEST['k']); $this->fieldPopupResultElTitle = $_REQUEST['eltitle']; } parent::__construct($fields); $this->restoreLastGetQuery(); $this->prepareAdminVariables(); $className = static::getModel(); $oSort = new \CAdminSorting($this->getListTableID(), static::pk(), "desc"); $this->list = new \CAdminList($this->getListTableID(), $oSort); $this->list->InitFilter($this->arFilterFields); if ($this->list->EditAction() and $this->hasWriteRights()) { global $FIELDS; foreach ($FIELDS as $id => $fields) { if (!$this->list->IsUpdated($id)) { continue; } $this->editAction($id, $fields); } } if ($IDs = $this->list->GroupAction() and $this->hasWriteRights()) { if ($_REQUEST['action_target'] == 'selected') { $this->setContext(AdminListHelper::OP_GROUP_ACTION); $IDs = array(); //Текущий фильтр должен быть модифицирован виждтами //для соответствия результатов фильтрации тому, что видит пользователь в интерфейсе. $raw = array('SELECT' => $this->pk(), 'FILTER' => $this->arFilter, 'SORT' => array()); foreach ($this->fields as $code => $settings) { $widget = $this->createWidgetForField($code); $widget->changeGetListOptions($this->arFilter, $raw['SELECT'], $raw['SORT'], $raw); } $res = $className::getList(array('filter' => $this->arFilter, 'select' => array($this->pk()))); while ($el = $res->Fetch()) { $IDs[] = $el[$this->pk()]; } } $filteredIDs = array(); foreach ($IDs as $id) { if (strlen($id) <= 0) { continue; } $filteredIDs[] = IntVal($id); } $this->groupActions($IDs, $_REQUEST['action']); } if (isset($_REQUEST['action']) || isset($_REQUEST['action_button']) && count($this->getErrors()) == 0) { $listHelperClass = $this->getHelperClass(AdminListHelper::className()); $className = $listHelperClass::getModel(); $id = isset($_GET['ID']) ? $_GET['ID'] : null; $action = isset($_REQUEST['action']) ? $_REQUEST['action'] : $_REQUEST['action_button']; if ($action != 'edit' && $_REQUEST['cancel'] != 'Y') { $params = $_GET; unset($params['action']); unset($params['action_button']); $this->customActions($action, $id); $sectionEditHelperClass = $this->getHelperClass(AdminSectionEditHelper::className()); if ($sectionEditHelperClass) { $element = $className::getById($id)->Fetch(); $sectionField = $listHelperClass::getSectionField(); if ($element[$sectionField]) { $params['ID'] = $element[$sectionField]; } } LocalRedirect($listHelperClass::getUrl($params)); } } if ($this->isPopup()) { $this->genPopupActionJS(); } // Получаем параметры навигации $navUniqSettings = array('sNavID' => $this->getListTableID()); $this->navParams = array('nPageSize' => \CAdminResult::GetNavSize($navUniqSettings), 'navParams' => \CAdminResult::GetNavParams($navUniqSettings)); }