/** * <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><код языка></b> - ключем является * код языка, а значением ассоциативный массив вида <pre class="syntax"> * array("LID" => "код языка", "NAME" => "название страны на этом языке", * "SHORT_NAME" => "сокращенное название страны (аббревиатура) на этом * языке")</pre> Эта пара ключ-значение должна присутствовать для * каждого языка системы. </li> </ul> Массив с параметрами города должен * содержать ключи: <ul> <li> <b>NAME</b> - название города (не зависящее от * языка);</li> <li> <b>SHORT_NAME</b> - сокращенное название города - абревиатура * (не зависящее от языка);</li> <li> <b><код языка></b> - ключем является * код языка, а значением ассоциативный массив вида <pre class="syntax"> * array("LID" => "код языка", "NAME" => "название города на этом языке", * "SHORT_NAME" => "сокращенное название города (аббревиатура) на этом * языке")</pre> Эта пара ключ-значение должна присутствовать для * каждого языка системы.</li> </ul> * * * * @return int <p>Возвращается код измененного местоположения или <i>false</i> у * случае ошибки.</p> <a name="examples"></a> * * * <h4>Example</h4> * <pre> * <? * $arFields = array( * "SORT" => 100, * "COUNTRY_ID" => 8, * "WITHOUT_CITY" => "N" * ); * * $arCity = array( * "NAME" => "Kaliningrad", * "SHORT_NAME" => "Kaliningrad", * "ru" => array( * "LID" => "ru", * "NAME" => "Калининград", * "SHORT_NAME" => "Калининград" * ), * "en" => array( * "LID" => "en", * "NAME" => "Kaliningrad", * "SHORT_NAME" => "Kaliningrad" * ) * ); * * $arFields["CITY"] = $arCity; * * if (!CSaleLocation::Update(6, $arFields)) * echo "Ошибка изменения местоположения"; * ?> * </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; }
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; } }