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