/**
  * getRegionsList
  * @return array regions (locations) list
  */
 public static function getRegionsList($countryId = 0, $bFlip = false)
 {
     static $arRegions = array();
     $flipIndex = intval($bFlip);
     if (isset($arRegions[$countryId][$flipIndex])) {
         return $arRegions[$countryId][$flipIndex];
     }
     if (CSaleLocation::isLocationProMigrated()) {
         $types = array();
         $res = \Bitrix\Sale\Location\TypeTable::getList(array('select' => array('ID', 'CODE')));
         while ($item = $res->fetch()) {
             $types[$item['CODE']] = $item['ID'];
         }
         $filter = array(array('LOGIC' => 'OR', array('=TYPE_ID' => $types['CITY'], '=NAME.LANGUAGE_ID' => LANGUAGE_ID, array('LOGIC' => 'OR', array('=PARENT.TYPE_ID' => $types['COUNTRY']), array('=PARENT.TYPE_ID' => $types['COUNTRY_DISTRICT']), array('=PARENT_ID' => '0'))), array('=TYPE_ID' => $types['REGION'])));
         if (intval($countryId)) {
             $filter['=PARENTS.TYPE_ID'] = $types['COUNTRY'];
             $filter['=PARENTS.ID'] = $countryId;
         }
         $dbRegionList = \Bitrix\Sale\Location\LocationTable::getList(array('filter' => $filter, 'select' => array('ID', 'CODE', 'NAME_LANG' => 'NAME.NAME'), 'order' => array('NAME.NAME' => 'asc')));
     } else {
         $arFilterRegion = array();
         if (intval($countryId) > 0) {
             $arFilterRegion["COUNTRY_ID"] = $countryId;
         }
         $dbRegionList = CSaleLocation::GetRegionList(array("NAME_LANG" => "ASC"), $arFilterRegion, LANGUAGE_ID);
     }
     $key = 'ID';
     while ($arRegionList = $dbRegionList->Fetch()) {
         if ($key == 'ID' && isset($arRegionList['CODE'])) {
             $key = 'CODE';
         }
         if ($key == 'CODE' && strlen($arRegionList['CODE']) <= 0) {
             continue;
         }
         $arRegions[$countryId][0][$arRegionList[$key]] = $arRegionList["NAME_LANG"];
         // $bFlip == false
         $arRegions[$countryId][1][$arRegionList["NAME_LANG"]] = $arRegionList[$key];
         // $bFlip == true
     }
     return isset($arRegions[$countryId][$flipIndex]) ? $arRegions[$countryId][$flipIndex] : array();
 }
Beispiel #2
0
 /**
  * @param string $lang - language Id
  * @return array - list of all regions
  */
 public static function getAllRegions($lang)
 {
     static $result = null;
     if ($result === null) {
         $result = array();
         $dbRegionList = \CSaleLocation::GetRegionList(array(), array(), $lang);
         while ($arRegion = $dbRegionList->GetNext()) {
             $result[$arRegion["ID"]] = $arRegion["NAME_LANG"];
         }
     }
     return $result;
 }
Beispiel #3
0
 public static function getRegionsNames($countryID = false)
 {
     $arFilterRegion = array();
     if ($countryID && intval($countryID) > 0) {
         $arFilterRegion["COUNTRY_ID"] = $countryID;
     }
     $arRNames = array();
     $dbRegList = CSaleLocation::GetRegionList(array("NAME" => "ASC"), $arFilterRegion, LANGUAGE_ID);
     while ($arRegion = $dbRegList->Fetch()) {
         $arRNames[$arRegion["ID"]] = $arRegion["NAME_ORIG"] . " [" . $arRegion["NAME_LANG"] . "]";
     }
     return $arRNames;
 }
Beispiel #4
0
 /**
  * getRegionsList
  * @return array regions (locations) list
  */
 public static function getRegionsList($countryId = 0, $bFlip = false)
 {
     static $arRegions = array();
     $flipIndex = intval($bFlip);
     if (isset($arRegions[$countryId][$flipIndex])) {
         return $arRegions[$countryId][$flipIndex];
     }
     $arFilterRegion = array();
     if (intval($countryId) > 0) {
         $arFilterRegion["COUNTRY_ID"] = $countryId;
     }
     $dbRegionList = CSaleLocation::GetRegionList(array("NAME_LANG" => "ASC"), $arFilterRegion, LANGUAGE_ID);
     while ($arRegionList = $dbRegionList->Fetch()) {
         $arRegions[$countryId][0][$arRegionList['ID']] = $arRegionList["NAME_LANG"];
         // $bFlip == false
         $arRegions[$countryId][1][$arRegionList["NAME_LANG"]] = $arRegionList['ID'];
         // $bFlip == true
     }
     return isset($arRegions[$countryId][$flipIndex]) ? $arRegions[$countryId][$flipIndex] : array();
 }
Beispiel #5
0
 private static function getRegionsList()
 {
     $arResult = array(0 => GetMessage('SPFPCT_CHOOSE_REGION'));
     $dbReg = CSaleLocation::GetRegionList();
     while ($arReg = $dbReg->Fetch()) {
         $arResult[$arReg["ID"]] = $arReg["NAME"];
     }
     return $arResult;
 }
Beispiel #6
0
 /**
  * <p>Функция обновляет параметры местоположения с кодом ID в соответствии с параметрами из массива arFields. Обновляются так же страна и город этого местоположения. </p>
  *
  *
  *
  *
  * @param int $ID  Код местоположения. </h
  *
  *
  *
  * @param array $arFields  Ассоциативный массив параметров местоположения с ключами: <ul> <li>
  * <b>SORT</b> - индекс сортировки; </li> <li> <b>COUNTRY_ID</b> - код страны (если такая
  * страна уже есть, иначе код должен быть нулем, и должен быть
  * заполнен ключ COUNTRY);</li> <li> <b>COUNTRY</b> - массив с параметрами страны
  * (должен быть заполнен, если не установлен ключ COUNTRY_ID или если ключ
  * CHANGE_COUNTRY установлен в значение Y); </li> <li> <b>CHANGE_COUNTRY</b> - флаг (Y/N),
  * изменять ли параметры страны (долны быть установлены ключи COUNTRY_ID
  * и COUNTRY); </li> <li> <b>WITHOUT_CITY</b> - флаг (Y/N), означающий, что это
  * местоположение без города (только страна) (если значением с этим
  * ключем является N, то необходимо заполнить ключ CITY);</li> <li> <b>CITY_ID</b> -
  * код города (если такой город уже есть, иначе код должен быть нулем,
  * и должен быть заполнен ключ CITY);</li> <li> <b>CITY</b> - массив с параметрами
  * города (если установлен флаг WITHOUT_CITY в значение Y, то этот ключ
  * заполнять не нужно);</li> </ul> Массив с параметрами страны должен
  * содержать ключи: <ul> <li> <b>NAME</b> - название страны (не зависящее от
  * языка);</li> <li> <b>SHORT_NAME</b> - сокращенное название страны - абревиатура
  * (не зависящее от языка);</li> <li> <b>&lt;код языка&gt;</b> - ключем является
  * код языка, а значением ассоциативный массив вида <pre class="syntax">
  * array("LID" =&gt; "код языка", "NAME" =&gt; "название страны на этом языке",
  * "SHORT_NAME" =&gt; "сокращенное название страны (аббревиатура) на этом
  * языке")</pre> Эта пара ключ-значение должна присутствовать для
  * каждого языка системы. </li> </ul> Массив с параметрами города должен
  * содержать ключи: <ul> <li> <b>NAME</b> - название города (не зависящее от
  * языка);</li> <li> <b>SHORT_NAME</b> - сокращенное название города - абревиатура
  * (не зависящее от языка);</li> <li> <b>&lt;код языка&gt;</b> - ключем является
  * код языка, а значением ассоциативный массив вида <pre class="syntax">
  * array("LID" =&gt; "код языка", "NAME" =&gt; "название города на этом языке",
  * "SHORT_NAME" =&gt; "сокращенное название города (аббревиатура) на этом
  * языке")</pre> Эта пара ключ-значение должна присутствовать для
  * каждого языка системы.</li> </ul>
  *
  *
  *
  * @return int <p>Возвращается код измененного местоположения или <i>false</i> у
  * случае ошибки.</p> <a name="examples"></a>
  *
  *
  * <h4>Example</h4> 
  * <pre>
  * &lt;?
  * $arFields = array(
  *    "SORT" =&gt; 100,
  *    "COUNTRY_ID" =&gt; 8,
  *    "WITHOUT_CITY" =&gt; "N"
  * );
  * 
  * $arCity = array(
  *    "NAME" =&gt; "Kaliningrad",
  *    "SHORT_NAME" =&gt; "Kaliningrad",
  *    "ru" =&gt; array(
  *       "LID" =&gt; "ru",
  *       "NAME" =&gt; "Калининград",
  *       "SHORT_NAME" =&gt; "Калининград"
  *       ),
  *    "en" =&gt; array(
  *       "LID" =&gt; "en",
  *       "NAME" =&gt; "Kaliningrad",
  *       "SHORT_NAME" =&gt; "Kaliningrad"
  *       )
  * );
  * 
  * $arFields["CITY"] = $arCity;
  * 
  * if (!CSaleLocation::Update(6, $arFields))
  *    echo "Ошибка изменения местоположения";
  * ?&gt;
  * </pre>
  *
  *
  * @static
  * @link http://dev.1c-bitrix.ru/api_help/sale/classes/csalelocation/csalelocation__update.a6601f1c.php
  * @author Bitrix
  */
 public static function Update($ID, $arFields)
 {
     global $DB;
     if (!CSaleLocation::CheckFields("UPDATE", $arFields)) {
         return false;
     }
     if (!($arLocRes = CSaleLocation::GetByID($ID, LANGUAGE_ID))) {
         return false;
     }
     if ((!is_set($arFields, "COUNTRY_ID") || IntVal($arFields["COUNTRY_ID"]) <= 0) && $arFields["COUNTRY_ID"] != "") {
         $arFields["COUNTRY_ID"] = CSaleLocation::AddCountry($arFields["COUNTRY"]);
         if (IntVal($arFields["COUNTRY_ID"]) <= 0) {
             return false;
         }
         unset($arFields["CITY_ID"]);
         unset($arFields["REGION_ID"]);
         CSaleLocation::AddLocation($arFields);
     } elseif ($arFields["CHANGE_COUNTRY"] == "Y" || $arFields["COUNTRY_ID"] == "") {
         CSaleLocation::UpdateCountry($arFields["COUNTRY_ID"], $arFields["COUNTRY"]);
     }
     //city
     if ($arFields["WITHOUT_CITY"] != "Y") {
         if (IntVal($arLocRes["CITY_ID"]) > 0) {
             CSaleLocation::UpdateCity(IntVal($arLocRes["CITY_ID"]), $arFields["CITY"]);
         } else {
             $arFields["CITY_ID"] = CSaleLocation::AddCity($arFields["CITY"]);
             if (IntVal($arFields["CITY_ID"]) <= 0) {
                 return false;
             }
         }
     } else {
         CSaleLocation::DeleteCity($arLocRes["CITY_ID"]);
         $arFields["CITY_ID"] = false;
     }
     //region
     if (IntVal($arFields["REGION_ID"]) > 0) {
         CSaleLocation::UpdateRegion(IntVal($arLocRes["REGION_ID"]), $arFields["REGION"]);
     } elseif ($arFields["REGION_ID"] == 0 && $arFields["REGION_ID"] != '') {
         $db_res = CSaleLocation::GetRegionList(array("ID" => "DESC"), array("NAME" => $arFields["REGION"][LANGUAGE_ID]["NAME"]));
         $arRegion = $db_res->Fetch();
         if (count($arRegion) > 1) {
             $arFields["REGION_ID"] = $arRegion["ID"];
         } else {
             $arFields["REGION_ID"] = CSaleLocation::AddRegion($arFields["REGION"]);
             if (IntVal($arFields["REGION_ID"]) <= 0) {
                 return false;
             }
             $arFieldsTmp = $arFields;
             unset($arFieldsTmp["CITY_ID"]);
             CSaleLocation::AddLocation($arFieldsTmp);
         }
     } elseif ($arFields["REGION_ID"] == '') {
         //CSaleLocation::DeleteRegion($arLocRes["REGION_ID"]);
         $arFields["REGION_ID"] = 0;
     } else {
         unset($arFields["REGION_ID"]);
     }
     CSaleLocation::UpdateLocation($ID, $arFields);
     return $ID;
 }
Beispiel #7
0
if (count($arResult["COUNTRY_LIST"]) <= 0) {
    $arResult["COUNTRY_LIST"] = array();
} elseif (count($arResult["COUNTRY_LIST"]) == 1) {
    $arParams["COUNTRY"] = $arResult["COUNTRY_LIST"][0]["ID"];
}
//select region
$arResult["REGION_LIST"] = array();
if (($arParams["COUNTRY"] > 0 || count($arResult["COUNTRY_LIST"]) <= 0) && (strlen($arParams["REGION_INPUT_NAME"]) > 0 || $arParams["ZIPCODE"] > 0)) {
    $arRegionFilter = array("LID" => LANGUAGE_ID, "!REGION_ID" => "NULL", "!REGION_ID" => "0");
    if ($arParams["COUNTRY"] > 0) {
        $arRegionFilter["COUNTRY_ID"] = IntVal($arParams["COUNTRY"]);
    }
    if ($arResult["EMPTY_CITY"] == "Y") {
        $rsRegionList = CSaleLocation::GetList(array("SORT" => "ASC", "NAME_LANG" => "ASC"), $arRegionFilter, false, false, array("ID", "REGION_ID", "REGION_NAME_LANG", "SORT"));
    } else {
        $rsRegionList = CSaleLocation::GetRegionList(array("SORT" => "ASC", "NAME_LANG" => "ASC"), $arRegionFilter);
    }
    $regionSortIndex = array();
    while ($arRegion = $rsRegionList->GetNext()) {
        if (!SalesZone::checkRegionId($arRegion["ID"], $arParams["SITE_ID"])) {
            continue;
        }
        if ($arResult["EMPTY_CITY"] == "Y") {
            $arRegion["NAME_LANG"] = $arRegion["REGION_NAME_LANG"];
        }
        $arResult["REGION_LIST"][$arRegion['ID']] = $arRegion;
        $regionSortIndex[$arRegion['SORT']][$arRegion['NAME_LANG']] = $arRegion['ID'];
        if ($arRegion["ID"] == $arParams["REGION"] && strlen($arRegion["NAME_LANG"]) > 0) {
            $locationString = $arRegion["NAME_LANG"] . ", " . $locationString;
        }
    }
</option>
				<option value="" <?php 
if (isset($REGION_ID) && $REGION_ID == "" || $str_REGION_ID == "" || $str_REGION_ID == "0") {
    echo " selected";
}
?>
 ><?php 
echo GetMessage("WITHOUT_REGION");
?>
</option>
				<?php 
$arFilterRegion = array();
if (isset($str_COUNTRY_ID) && $str_COUNTRY_ID > 0) {
    $arFilterRegion["COUNTRY_ID"] = $str_COUNTRY_ID;
}
$dbRegionList = CSaleLocation::GetRegionList(array("NAME" => "ASC"), $arFilterRegion, LANG);
while ($arRegionList = $dbRegionList->Fetch()) {
    ?>
<option value="<?php 
    echo $arRegionList["ID"];
    ?>
"<?php 
    if (IntVal($arRegionList["ID"]) == IntVal($str_REGION_ID)) {
        echo " selected";
    }
    ?>
><?php 
    echo htmlspecialcharsEx($arRegionList["NAME_ORIG"]);
    ?>
</option><?php 
}
	function Update($ID, $arFields)
	{
		global $DB;

		if (!CSaleLocation::CheckFields("UPDATE", $arFields)) return false;

		if (!($arLocRes = CSaleLocation::GetByID($ID, LANGUAGE_ID))) return false;

		if(self::isLocationProMigrated())
		{
			try
			{
				// only partial support: name update functionality

				if(($arFields["CHANGE_COUNTRY"]=="Y" || intval($arFields["COUNTRY_ID"])) && is_array($arFields["COUNTRY"]))
					CSaleLocation::UpdateCountry($arFields["COUNTRY_ID"], $arFields["COUNTRY"]);

				if(intval($arFields["REGION_ID"]) && is_array($arFields["REGION"]))
					CSaleLocation::UpdateRegion($arFields["REGION_ID"], $arFields["REGION"]);

				if(intval($arFields["CITY_ID"]) && is_array($arFields["CITY"]))
					CSaleLocation::UpdateCity($arFields["CITY_ID"], $arFields["CITY"]);
			}
			catch(Exception $e)
			{
				return false;
			}
		}
		else
		{
			if ((!is_set($arFields, "COUNTRY_ID") || IntVal($arFields["COUNTRY_ID"])<=0) && $arFields["COUNTRY_ID"] != "")
			{
				$arFields["COUNTRY_ID"] = CSaleLocation::AddCountry($arFields["COUNTRY"]);
				if (IntVal($arFields["COUNTRY_ID"])<=0) return false;

				UnSet($arFields["CITY_ID"]);
				UnSet($arFields["REGION_ID"]);
				CSaleLocation::AddLocation($arFields);
			}
			elseif ($arFields["CHANGE_COUNTRY"]=="Y" || $arFields["COUNTRY_ID"] == "")
			{
				CSaleLocation::UpdateCountry($arFields["COUNTRY_ID"], $arFields["COUNTRY"]);
			}

			//city
			if ($arFields["WITHOUT_CITY"]!="Y")
			{
				if (IntVal($arLocRes["CITY_ID"])>0)
				{
					CSaleLocation::UpdateCity(IntVal($arLocRes["CITY_ID"]), $arFields["CITY"]);
				}
				else
				{
					$arFields["CITY_ID"] = CSaleLocation::AddCity($arFields["CITY"]);
					if (IntVal($arFields["CITY_ID"])<=0) return false;
				}
			}
			else
			{
				CSaleLocation::DeleteCity($arLocRes["CITY_ID"]);
				$arFields["CITY_ID"] = false;
			}

			//region
			if (IntVal($arFields["REGION_ID"])>0)
			{
				CSaleLocation::UpdateRegion(IntVal($arLocRes["REGION_ID"]), $arFields["REGION"]);
			}
			elseif ($arFields["REGION_ID"] == 0 && $arFields["REGION_ID"] != '')
			{
				$db_res = CSaleLocation::GetRegionList(array("ID" => "DESC"), array("NAME" => $arFields["REGION"][LANGUAGE_ID]["NAME"]));
				$arRegion = $db_res->Fetch();

				if (count($arRegion) > 1)
					$arFields["REGION_ID"] = $arRegion["ID"];
				else
				{
					$arFields["REGION_ID"] = CSaleLocation::AddRegion($arFields["REGION"]);
					if (IntVal($arFields["REGION_ID"])<=0)
						return false;

					$arFieldsTmp = $arFields;
					UnSet($arFieldsTmp["CITY_ID"]);
					CSaleLocation::AddLocation($arFieldsTmp);
				}
			}
			elseif ($arFields["REGION_ID"] == '')
			{
				//CSaleLocation::DeleteRegion($arLocRes["REGION_ID"]);
				$arFields["REGION_ID"] = 0;
			}
			else
			{
				UnSet($arFields["REGION_ID"]);
			}

			CSaleLocation::UpdateLocation($ID, $arFields);

			return $ID;
		}
	}
</form>
<?php 
$tabControl->EndTab();
$tabControl->End();
echo BeginNote();
echo GetMessage("LOCA_LOCATIONS_STATS") . ': <ul style="font-size: 100%">';
$rsLocations = CSaleLocation::GetList(array(), array(), array("COUNTRY_ID", "COUNT" => "CITY_ID"));
$numLocations = 0;
$numCountries = 0;
$numCities = 0;
$numRegion = 0;
while ($arStat = $rsLocations->Fetch()) {
    $numCountries++;
    $numCities += $arStat["CITY_ID"];
    $numLocations += $arStat['CNT'];
}
$rsRegion = CSaleLocation::GetRegionList(array(), array(), LANG);
$numRegion = $rsRegion->SelectedRowsCount();
echo '<li>' . GetMessage('LOCA_LOCATIONS_COUNTRY_STATS') . ': ' . $numCountries . '</li>';
echo '<li>' . GetMessage('LOCA_LOCATIONS_REGION_STATS') . ': ' . $numRegion . '</li>';
echo '<li>' . GetMessage('LOCA_LOCATIONS_CITY_STATS') . ': ' . $numCities . '</li>';
echo '<li>' . GetMessage('LOCA_LOCATIONS_LOC_STATS') . ': ' . $numLocations . '</li>';
$rsLocationGroups = CSaleLocationGroup::GetList();
$numGroups = 0;
while ($arGroup = $rsLocationGroups->Fetch()) {
    $numGroups++;
}
echo '<li>' . GetMessage('LOCA_LOCATIONS_GROUP_STATS') . ': ' . $numGroups . '</li>';
echo '</ul>';
echo EndNote();
require $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/epilog_admin.php";