Пример #1
0
 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"
     }
 }