示例#1
0
	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;
	}
示例#2
0
	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');
		}
	}