Bitrix-D7  20.0.0
Класс SalesZone

Открытые статические члены

static getAllRegions ($lang)
 
static getAllCities ($lang)
 
static checkCountryId ($countryId, $siteId)
 Checks if country Id is in list of sales zone countries Ids. Подробнее...
 
static checkRegionId ($regionId, $siteId)
 Checks if regionId is in list of sales zone regions Ids. Подробнее...
 
static checkCityId ($cityId, $siteId)
 Checks if citiy Id is in list of sales zone cities Ids. Подробнее...
 
static checkLocationId ($locationId, $siteId)
 Checks if location id is in sales zone. Подробнее...
 
static setSelectedIds ($siteId, $ids)
 
static getSelectedIds ($siteId)
 
static getCitiesIds ($siteId)
 
static getRegionsIds ($siteId)
 
static getCountriesIds ($siteId)
 
static saveSelectedTypes ($typeList, $siteId)
 A very important function. Подробнее...
 
static makeSearchFilter ($object, $siteId)
 Returns filter for using in queries such as in bitrix/modules/sale/install/components/bitrix/sale.ajax.locations/search.php. Подробнее...
 
static getRegions ($countriesIds=array(), $lang=LANGUAGE_ID)
 
static getCities ($countriesIds=array(), $regionsIds=array(), $lang)
 

Поля данных

const CONN_ENTITY_NAME = 'Bitrix\Sale\Location\SiteLocation'
 
const LOCATION_ENTITY_NAME = 'Bitrix\Sale\Location\Location'
 

Статические открытые данные

static $zoneCache = array()
 

Подробное описание

См. определение в файле saleszone.php строка 8

Методы

◆ checkCityId()

static checkCityId (   $cityId,
  $siteId 
)
static

Checks if citiy Id is in list of sales zone cities Ids.

Аргументы
int$cityId
string$siteId
Возвращает
bool

См. определение в файле saleszone.php строка 90

91  {
92  if(!strlen($siteId))
93  return false;
94 
95  $cIds = static::getCitiesIds($siteId);
96  return !$cIds || in_array($cityId, $cIds) || in_array("", $cIds);
97  }

◆ checkCountryId()

static checkCountryId (   $countryId,
  $siteId 
)
static

Checks if country Id is in list of sales zone countries Ids.

Аргументы
int$countryId
string$siteId
Возвращает
bool

См. определение в файле saleszone.php строка 60

61  {
62  if(!strlen($siteId))
63  return false;
64 
65  $cIds = static::getCountriesIds($siteId);
66  return !$cIds || in_array($countryId, $cIds) || in_array("", $cIds);
67  }

◆ checkLocationId()

static checkLocationId (   $locationId,
  $siteId 
)
static

Checks if location id is in sales zone.

Аргументы
int$locationId
string$siteId
Возвращает
bool

См. определение в файле saleszone.php строка 105

106  {
107  if(\CSaleLocation::isLocationProMigrated())
108  {
109  if(!intval($locationId) || !strlen($siteId))
110  return false;
111 
112  return Location\SiteLocationTable::checkConnectionExists($siteId, $locationId);
113  }
114  else
115  {
116 
117  $result = false;
118 
119  $arLocation = \CSaleLocation::GetByID($locationId);
120 
121  if(static::checkCountryId($arLocation["COUNTRY_ID"], $siteId)
122  && static::checkRegionId($arLocation["REGION_ID"], $siteId)
123  && static::checkCityId($arLocation["CITY_ID"], $siteId)
124  )
125  {
126  $result = true;
127  }
128 
129  return $result;
130 
131  }
132  }

◆ checkRegionId()

static checkRegionId (   $regionId,
  $siteId 
)
static

Checks if regionId is in list of sales zone regions Ids.

Аргументы
int$regionId
string$siteId
Возвращает
bool

См. определение в файле saleszone.php строка 75

76  {
77  if(!strlen($siteId))
78  return false;
79 
80  $rIds = static::getRegionsIds($siteId);
81  return !$rIds || in_array($regionId, $rIds) || in_array("", $rIds);
82  }

◆ getAllCities()

static getAllCities (   $lang)
static
Аргументы
string$lang- language Id
Возвращает
array - list of all cities

См. определение в файле saleszone.php строка 39

40  {
41  static $result = null;
42 
43  if($result === null)
44  {
45  $result = array();
46  $dbCityList = \CSaleLocation::GetCityList(array(), array(), $lang);
47  while($arCity = $dbCityList->fetch())
48  $result[$arCity["ID"]] = $arCity["NAME_LANG"];
49  }
50 
51  return $result;
52  }

◆ getAllRegions()

static getAllRegions (   $lang)
static
Аргументы
string$lang- language Id
Возвращает
array - list of all regions

См. определение в файле saleszone.php строка 19

20  {
21  static $result = null;
22 
23  if($result === null)
24  {
25  $result = array();
26  $dbRegionList = \CSaleLocation::GetRegionList(array(), array(), $lang);
27 
28  while ($arRegion = $dbRegionList->fetch())
29  $result[$arRegion["ID"]] = $arRegion["NAME_LANG"];
30  }
31 
32  return $result;
33  }

◆ getCities()

static getCities (   $countriesIds = array(),
  $regionsIds = array(),
  $lang 
)
static
Аргументы
array$countriesIds
array$regionsIds
string$lang
Возвращает
array cities list from sales zone

См. определение в файле saleszone.php строка 495

496  {
497  $cities = array();
498  $citiesList = static::getAllCities($lang);
499  $getRegionNull = in_array("NULL", $regionsIds) ? true : false;
500  $getRegionAll = in_array("", $regionsIds) ? true : false;
501  $getCountryNull = in_array("NULL", $countriesIds) ? true : false;
502  $getCountryAll = in_array("", $countriesIds) ? true : false;
503 
504  $filter = in_array("", $regionsIds) ? array() : array(($getRegionNull ? "+" : "")."REGION_ID" => $regionsIds);
505 
506  foreach($countriesIds as $countryId)
507  {
508  if(($getRegionNull || $getRegionAll) && !$getCountryAll)
509  $filter[($getCountryNull ? "+" : "")."COUNTRY_ID"] = $countryId;
510 
511  $dbLocationsList = \CSaleLocation::GetList(
512  array("SORT"=>"ASC", "CITY_NAME_LANG"=>"ASC"),
513  $filter,
514  array("CITY_ID")
515  );
516 
517  while($arCity = $dbLocationsList->GetNext())
518  if(strlen($arCity["CITY_ID"]) > 0)
519  $cities[$arCity["CITY_ID"]] = $citiesList[$arCity["CITY_ID"]];
520  }
521 
522  return $cities;
523  }

◆ getCitiesIds()

static getCitiesIds (   $siteId)
static
Аргументы
string$siteId
Возвращает
array - sales zones cities Ids

См. определение в файле saleszone.php строка 284

285  {
286  if(\CSaleLocation::isLocationProMigrated())
287  return self::getSelectedTypeIds('CITY', $siteId);
288 
289  return explode(":" , \COption::GetOptionString('sale', 'sales_zone_cities', '', $siteId));
290  }

◆ getCountriesIds()

static getCountriesIds (   $siteId)
static
Аргументы
string$siteId
Возвращает
array - sales zones countries Ids

См. определение в файле saleszone.php строка 308

309  {
310  if(\CSaleLocation::isLocationProMigrated())
311  return self::getSelectedTypeIds('COUNTRY', $siteId);
312 
313  return explode(":" , \COption::GetOptionString('sale', 'sales_zone_countries', '', $siteId));
314  }

◆ getRegions()

static getRegions (   $countriesIds = array(),
  $lang = LANGUAGE_ID 
)
static
Аргументы
array$countriesIds
string$lang
Возвращает
array - regions from sales zone

См. определение в файле saleszone.php строка 466

467  {
468 
469  $regions = array();
470  $regionsList = static::getAllRegions($lang);
471  $getCountryNull = in_array("NULL", $countriesIds) ? true : false;
472  $filter = in_array("", $countriesIds) ? array() : array(($getCountryNull ? "+" : "")."COUNTRY_ID" => $countriesIds);
473 
474  $dbLocationsList = \CSaleLocation::GetList(
475  array("SORT"=>"ASC", "REGION_NAME_LANG"=>"ASC"),
476  $filter,
477  array("REGION_ID", "COUNTRY_ID")
478  );
479 
480  while($arRegion = $dbLocationsList->GetNext())
481  {
482  if(strlen($arRegion["REGION_ID"]) > 0 && $arRegion["REGION_ID"] != "0")
483  $regions[$arRegion["REGION_ID"]] = $regionsList[$arRegion["REGION_ID"]];
484  }
485 
486  return $regions;
487  }

◆ getRegionsIds()

static getRegionsIds (   $siteId)
static
Аргументы
string$siteId
Возвращает
array - sales zones regions Ids

См. определение в файле saleszone.php строка 296

297  {
298  if(\CSaleLocation::isLocationProMigrated())
299  return self::getSelectedTypeIds('REGION', $siteId);
300 
301  return explode(":" , \COption::GetOptionString('sale', 'sales_zone_regions', '', $siteId));
302  }

◆ getSelectedIds()

static getSelectedIds (   $siteId)
static

См. определение в файле saleszone.php строка 162

163  {
164  $typesAll = \CSaleLocation::getTypes();
165 
166  $types = array();
167  if(isset($typesAll['COUNTRY']))
168  $types[] = "'".intval($typesAll['COUNTRY'])."'";
169  if(isset($typesAll['REGION']))
170  $types[] = "'".intval($typesAll['REGION'])."'";
171  if(isset($typesAll['CITY']))
172  $types[] = "'".intval($typesAll['CITY'])."'";
173 
174  $typesAll = array_flip($typesAll);
175 
176  if((string) $siteId != '' && \Bitrix\Sale\Location\SiteLocationTable::checkLinkUsageAny($siteId) && !empty($types))
177  {
178  $result = array();
179 
181  $siteId,
182  array('select' => array('ID', 'LEFT_MARGIN', 'RIGHT_MARGIN')),
183  array('GET_LINKED_THROUGH_GROUPS' => true)
184  );
185 
186  if((string) $sql != '')
187  {
188  $res = $GLOBALS['DB']->query("
189 
190  select SL.ID, SL.TYPE_ID from b_sale_location SL
191  inner join (
192  ".$sql."
193  ) as TT on
194  (
195  (
196  (
197  SL.LEFT_MARGIN >= TT.LEFT_MARGIN
198  and
199  SL.RIGHT_MARGIN <= TT.RIGHT_MARGIN
200  )
201  or
202  (
203  SL.LEFT_MARGIN <= TT.LEFT_MARGIN
204  and
205  SL.RIGHT_MARGIN >= TT.RIGHT_MARGIN
206  )
207  )
208  and
209  SL.TYPE_ID in (".implode(', ', $types).")
210  )
211 
212  group by SL.ID
213  ");
214 
215  while($item = $res->fetch())
216  {
217  $typeId = $item['TYPE_ID'];
218  unset($item['TYPE_ID']);
219 
220  $result[$typesAll[$typeId]][$item['ID']] = $item['ID'];
221  }
222 
223  // special case: when all types are actually selected, an empty string ('') SHOULD be present among $index[$siteId][$type]
224 
225  $res = Location\LocationTable::getList(array(
226  'filter' => array(
227  'TYPE_ID' => $types
228  ),
229  'runtime' => array(
230  'CNT' => array(
231  'data_type' => 'integer',
232  'expression' => array('COUNT(*)')
233  )
234  ),
235  'select' => array(
236  'CNT',
237  'TYPE_ID'
238  )
239  ));
240  while($item = $res->fetch())
241  {
242  if(intval($item['TYPE_ID']))
243  {
244  $typeCode = $typesAll[$item['TYPE_ID']];
245  if(isset($result[$typeCode]) && $item['CNT'] == count($result[$typeCode]))
246  {
247  $result[$typeCode][] = '';
248  }
249  }
250  }
251  }
252 
253  return $result;
254  }
255  else
256  {
257  return array(
258  'COUNTRY' => array(''),
259  'REGION' => array(''),
260  'CITY' => array(''),
261  ); // means "all"
262  }
263  }

◆ makeSearchFilter()

static makeSearchFilter (   $object,
  $siteId 
)
static

Returns filter for using in queries such as in bitrix/modules/sale/install/components/bitrix/sale.ajax.locations/search.php.

Аргументы
string$object(city|region|country)
string$siteId
Возвращает
array

См. определение в файле saleszone.php строка 443

444  {
445  $result = array();
446 
447  $countries = static::getCountriesIds($siteId);
448  $regions = static::getRegionsIds($siteId);
449  $cities = static::getCitiesIds($siteId);
450 
451  if(!in_array("", $cities) && $object == "city")
452  $result = array("CITY_ID" => $cities);
453  elseif(!in_array("", $regions) && ($object == "city" || $object == "region"))
454  $result = array("REGION_ID" => $regions);
455  elseif(!in_array("", $countries))
456  $result = array("COUNTRY_ID" => $countries);
457 
458  return $result;
459  }

◆ saveSelectedTypes()

static saveSelectedTypes (   $typeList,
  $siteId 
)
static

A very important function.

Here we decide what locations we need to take, making a descision based on $_REQUEST from sales zone selector.

Then we normalize the selection and store to database.

Also this function is used in data migrator.

См. определение в файле saleszone.php строка 324

325  {
326  $types = \CSaleLocation::getTypes();
327 
328  $locations = array(
329  Location\Connector::DB_LOCATION_FLAG => array(),
330  Location\Connector::DB_GROUP_FLAG => array()
331  );
332  if(is_array($typeList['COUNTRY']) && !empty($typeList['COUNTRY']))
333  $typeList['COUNTRY'] = array_flip($typeList['COUNTRY']);
334 
335  if(is_array($typeList['REGION']) && !empty($typeList['REGION']))
336  $typeList['REGION'] = array_flip($typeList['REGION']);
337 
338  if(is_array($typeList['CITY']) && !empty($typeList['CITY']))
339  $typeList['CITY'] = array_flip($typeList['CITY']);
340 
341  $allCountries = isset($typeList['COUNTRY']['']);
342  $allRegions = isset($typeList['REGION']['']);
343  $allCities = isset($typeList['CITY']['']);
344 
345  // no countries
346  $noCountry = isset($typeList['COUNTRY']['NULL']);
347  $noRegion = isset($typeList['REGION']['NULL']);
348 
349  // make up list of ids
350  $res = Location\LocationTable::getList(array('select' => array(
351  'ID',
352  'COUNTRY_ID',
353  'REGION_ID',
354  'CITY_ID',
355  'TYPE_ID',
356  //'LNAME' => 'NAME.NAME'
357  ), 'filter' => array(
358  //'=NAME.LANGUAGE_ID' => LANGUAGE_ID
359  )));
360  while($item = $res->fetch())
361  {
362  $id = $item['ID'];
363  $countryId = intval($item['COUNTRY_ID']);
364  $regionId = intval($item['REGION_ID']);
365  $cityId = intval($item['CITY_ID']);
366  $typeId = intval($item['TYPE_ID']);
367 
368  $take = false;
369  $countryTaken = false;
370  $regionTaken = false;
371 
372  if($typeId == $types['COUNTRY']) // it is a country
373  {
374  if($allCountries // we take all countries
375  || // or..
376  isset($typeList['COUNTRY'][$countryId]) // we manually selected this country
377  )
378  {
379  $take = true;
380  $countryTaken = true;
381  }
382  }
383 
384  if($typeId == $types['REGION']) // it is a region
385  {
386  if((
387  $allRegions // we take all regions (of selected countries)
388  && // and
389  $countryTaken // country is selected already
390  )
391  || // or ..
392  isset($typeList['REGION'][$regionId]) // we manually selected this region
393  || // or ..
394  ($noCountry && !$countryId) // we also accept regions without countries, and this region actually dont have a country
395  )
396  {
397  $take = true;
398  $regionTaken = true;
399  }
400  }
401 
402  if($typeId == $types['CITY']) // it is a city
403  {
404  if((
405  $allCities // we take all cities (of selected regions of selected countries)
406  && // and
407  $regionTaken // region is selected already
408  )
409  || // or..
410  isset($typeList['REGION'][$regionId]) // we manually selected this city
411  || // or ..
412  ($noRegion && !$regionId) // we also accept cities without regions, and this city actually dont have a region
413  // it seems that cities without a country is not supported with the current logic
414  )
415  {
416  $take = true;
417  }
418  }
419 
420  if(isset($typeList['CITY'][$cityId]) && $typeId == $types['CITY']) // this is a city and it is in list - take it
421  $take = true;
422 
423  if($take)
424  $locations[Location\Connector::DB_LOCATION_FLAG][$id] = true;
425  }
426 
427  // normalize
428  $class = self::CONN_ENTITY_NAME.'Table';
429  $locations[Location\Connector::DB_LOCATION_FLAG] = array_keys($locations[Location\Connector::DB_LOCATION_FLAG]);
430 
431  $locations[Location\Connector::DB_LOCATION_FLAG] = $class::normalizeLocationList($locations[Location\Connector::DB_LOCATION_FLAG]);
432 
433  // store to database
434  $class::resetMultipleForOwner(strlen($siteId) ? $siteId : $class::ALL_SITES, $locations);
435  }

◆ setSelectedIds()

static setSelectedIds (   $siteId,
  $ids 
)
static

См. определение в файле saleszone.php строка 157

158  {
159  static::$zoneCache[$siteId] = $ids;
160  }

Поля

◆ $zoneCache

$zoneCache = array()
static

См. определение в файле saleszone.php строка 13

◆ CONN_ENTITY_NAME

const CONN_ENTITY_NAME = 'Bitrix\Sale\Location\SiteLocation'

См. определение в файле saleszone.php строка 10

◆ LOCATION_ENTITY_NAME

const LOCATION_ENTITY_NAME = 'Bitrix\Sale\Location\Location'

См. определение в файле saleszone.php строка 11


Объявления и описания членов класса находятся в файле:
Bitrix\Sale\Location\Connector\checkConnectionExists
static checkConnectionExists($entityPrimary, $locationPrimary, array $behaviour=array('LOCATION_LINK_TYPE'=> 'ID'))
Check if location is connected with entity.
Definition: sale/lib/location/connector.php:981
Bitrix\Sale\Location\Connector\getConnectedLocationsSql
static getConnectedLocationsSql($entityPrimary, $parameters=array(), $behaviour=array('GET_LINKED_THROUGH_GROUPS'=> false))
More preferable alias for getConnectedLocationsQuery()
Definition: sale/lib/location/connector.php:628
Sale
Class RestHandler.
Bitrix\Sale\Location\Connector\DB_LOCATION_FLAG
const DB_LOCATION_FLAG
Definition: sale/lib/location/connector.php:27
return
return[ 'LETTERS'=>['Ё'=> 'Е'], 'TITLES'=>['АУЛ', 'СЕЛО', 'C', 'ХУТОР', 'Х', 'ДЕРЕВНЯ', 'Д', 'ДЕР', 'СТАНИЦА', 'СТЦА', 'СТАН', 'РАБОЧИЙ ПОСЕЛОК', 'РП', 'ПОСЕЛОК ГОРОДСКОГО ТИПА', 'ПГТ', 'ПОСЕЛОК', 'П', 'ПОС', 'ГОРОД', 'ГОР', 'Г', 'РАЙОН', 'РН', 'РОН', 'АВТОНОМНАЯ ОБЛАСТЬ', 'ОБЛАСТЬ', 'ОБЛ', 'АВТОНОМНЫЙ ОКРУГ', 'АО', 'АВТ ОКРУГ', 'РЕСПУБЛИКА', 'РЕСП'], 'ALIASES'=>[]]
Definition: langnormdata.php:25
Bitrix
Class Button.
Bitrix\Landing\$GLOBALS
$GLOBALS['____2000984581']
Definition: mutator.php:1