public static function processSearchRequest() { static::checkRequiredModules(); $parameters = static::processSearchGetParameters(); $parameters['order'] = array('NAME.NAME' => 'asc'); // have to implement post-check for site connection, because we need to know which nodes may have connected children // will have a bottleneck here, in case of great links and items number. refactor later and replace with some db query $siteId = $_REQUEST['FILTER']['SITE_ID']; if(strlen($siteId)) { $points = array(); $res = Location\SiteLocationTable::getConnectedLocations($siteId, array('select' => array( 'ID' => 'ID', 'LEFT_MARGIN' => 'LEFT_MARGIN', 'RIGHT_MARGIN' => 'RIGHT_MARGIN' ) ), array('GET_LINKED_THROUGH_GROUPS' => true)); while($item = $res->fetch()) $points[intval($item['ID'])] = $item; unset($parameters['filter']['SITE_ID']); } $result = static::processSearchGetList($parameters); $result = static::processSearchGetAdditional($result); if(strlen($siteId)) { $res = Location\SiteLocationTable::getLinkStatusForMultipleNodes($result['ITEMS'], $siteId, $points); foreach($result['ITEMS'] as $k => &$item) { if($res[$item['ID']] == Location\SiteLocationTable::LSTAT_IN_NOT_CONNECTED_BRANCH) unset($result['ITEMS'][$k]); $item['IS_UNCHOOSABLE'] = $res[$item['ID']] == Location\SiteLocationTable::LSTAT_ABOVE_CONNECTOR; } } // drop unwanted data foreach($result['ITEMS'] as &$item) { if(!!$_REQUEST['BEHAVIOUR']['PREFORMAT']) { $unChoosable = $item['IS_UNCHOOSABLE']; $path = $item['PATH']; $item = array( 'DISPLAY' => $item['NAME'], 'VALUE' => $item['ID'], 'CODE' => $item['CODE'], 'IS_PARENT' => $item['CHILD_CNT'] > 0 ); if($unChoosable) $item['IS_UNCHOOSABLE'] = $unChoosable; if(is_array($path)) $item['PATH'] = $path; } else { unset($item['LEFT_MARGIN']); unset($item['RIGHT_MARGIN']); } } return $result; }
protected function obtainDataAdditional() { if($this->filterBySite && $this->dbResult['LOCATION']['ID']) { $linkTypeMap = Location\SiteLocationTable::getLinkStatusForMultipleNodes(array($this->dbResult['LOCATION']), $this->arParams['FILTER_SITE_ID'], $this->dbResult['TEMP']['CONNECTORS']); if(!in_array($linkTypeMap[$this->dbResult['LOCATION']['ID']], array(Location\Connector::LSTAT_IS_CONNECTOR, Location\Connector::LSTAT_BELOW_CONNECTOR))) $this->errors['NONFATAL'][] = Loc::getMessage('SALE_SLS_SELECTED_NODE_UNCHOOSABLE'); } }