• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/location/admin/helper.php
  • Класс: BitrixSaleLocationAdminHelper
  • Вызов: Helper::getParametersForList
static function getParametersForList($proxed)
{
	$columns = self::getMap('list'); // columns only for 'main' class

	$parameters = array();

	// filter
	$filter = array();
	if(is_array($proxed['FILTER']) && !empty($proxed['FILTER']))
	{
		foreach($columns as $code => $fld)
		{
			if($fld['data_type'] == 'integer' || $fld['data_type'] == 'float')
			{
				// range or list expected

				if(is_array($proxed['FILTER'][$code]))
				{
					if(mb_strlen($proxed['FILTER'][$code]['FROM']) && mb_strlen($proxed['FILTER'][$code]['TO'])) // range
					{
						$filter['><'.$code] = array($proxed['FILTER'][$code]['FROM'], $proxed['FILTER'][$code]['TO']);
					}
					elseif(mb_strlen($proxed['FILTER'][$code]['FROM'])) // greather than
					{
						$filter['>='.$code] = $proxed['FILTER'][$code]['FROM'];
					}
					elseif(mb_strlen($proxed['FILTER'][$code]['TO'])) // less than
					{
						$filter['<='.$code] = $proxed['FILTER'][$code]['TO'];
					}
				}
				elseif(mb_strlen($proxed['FILTER'][$code]))
				{
					$filter['='.$code] = (string)$proxed['FILTER'][$code];
				}
			}
			else
			{
				if($proxed['FILTER'][$code] <> '')
				{
					$filter[static::getFilterModifier($fld['data_type']).$code] = $proxed['FILTER'][$code];
				}
			}
		}
	}

	if(!empty($filter))
		$parameters['filter'] = $filter;

	// select
	foreach($columns as $code => $col)
		$parameters['select'][] = $code;

	// order
	if(is_array($proxed['ORDER']) && !empty($proxed['ORDER']))
		$parameters['order'] = $proxed['ORDER'];

	// nav (unused)
	if(($page = intval($proxed['NAV']['PAGE_NUM'])) && ($lop = intval($proxed['NAV']['LOP'])))
	{
		$roadMap = static::getEntityRoadMap();
		$road = $roadMap[self::getEntityRoadCode()]['name'];
		$class = $road.'Table';

		$count = $class::getList(array(
			'filter' => is_array($parameters['filter']) ? $parameters['filter'] : array(),
			'select' => array('CNT'),
			'runtime' => array(
				'CNT' => array(
					'data_type' => 'integer',
					'expression' => array(
						'count(%u)',
						'ID'
					)
				)
			)
		))->fetch();

		$bounds = MainDBPaginator::calculateQueryLimits($count['CNT'], $page, $lop);
		$parameters['offset'] = $bounds[0];
		$parameters['limit'] = $bounds[1];
	}

	return $parameters;
}