public static function getSelectedIds($siteId) { $typesAll = \CSaleLocation::getTypes(); $types = array(); if (isset($typesAll['COUNTRY'])) { $types[] = "'" . intval($typesAll['COUNTRY']) . "'"; } if (isset($typesAll['REGION'])) { $types[] = "'" . intval($typesAll['REGION']) . "'"; } if (isset($typesAll['CITY'])) { $types[] = "'" . intval($typesAll['CITY']) . "'"; } $typesAll = array_flip($typesAll); if ((string) $siteId != '' && \Bitrix\Sale\Location\SiteLocationTable::checkLinkUsageAny($siteId) && !empty($types)) { $result = array(); $sql = \Bitrix\Sale\Location\SiteLocationTable::getConnectedLocationsSql($siteId, array('select' => array('ID', 'LEFT_MARGIN', 'RIGHT_MARGIN')), array('GET_LINKED_THROUGH_GROUPS' => true)); if ((string) $sql != '') { $res = $GLOBALS['DB']->query("\n\n\t\t\t\t\tselect SL.ID, SL.TYPE_ID from b_sale_location SL \n\t\t\t\t\t\tinner join (\n\t\t\t\t\t\t" . $sql . "\n\t\t\t\t\t\t) as TT on \n\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t\t\tSL.LEFT_MARGIN >= TT.LEFT_MARGIN \n\t\t\t\t\t\t\t\t\t\tand \n\t\t\t\t\t\t\t\t\t\tSL.RIGHT_MARGIN <= TT.RIGHT_MARGIN\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\tor\n\t\t\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t\t\tSL.LEFT_MARGIN <= TT.LEFT_MARGIN \n\t\t\t\t\t\t\t\t\t\tand \n\t\t\t\t\t\t\t\t\t\tSL.RIGHT_MARGIN >= TT.RIGHT_MARGIN\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\tand\n\t\t\t\t\t\t\t\tSL.TYPE_ID in (" . implode(', ', $types) . ")\n\t\t\t\t\t\t\t)\n\n\t\t\t\t\tgroup by SL.ID\n\t\t\t\t"); while ($item = $res->fetch()) { $typeId = $item['TYPE_ID']; unset($item['TYPE_ID']); $result[$typesAll[$typeId]][$item['ID']] = $item['ID']; } // special case: when all types are actually selected, an empty string ('') SHOULD be present among $index[$siteId][$type] $res = Location\LocationTable::getList(array('filter' => array('TYPE_ID' => $types), 'runtime' => array('CNT' => array('data_type' => 'integer', 'expression' => array('COUNT(*)'))), 'select' => array('CNT', 'TYPE_ID'))); while ($item = $res->fetch()) { if (intval($item['TYPE_ID'])) { $typeCode = $typesAll[$item['TYPE_ID']]; if (isset($result[$typeCode]) && $item['CNT'] == count($result[$typeCode])) { $result[$typeCode][] = ''; } } } } return $result; } else { return array('COUNTRY' => array(''), 'REGION' => array(''), 'CITY' => array('')); // means "all" } }