14define(
'DELIVERY_EMS_CACHE_LIFETIME', 2592000);
15define(
'DELIVERY_EMS_PRICE_TARIFF', 0.004956);
16define(
'DELIVERY_EMS_WRITE_LOG', 0);
20 public static function Init()
35 "DESCRIPTION" =>
GetMessage(
'SALE_DH_EMS_DESCRIPTION'),
36 "DESCRIPTION_INNER" =>
GetMessage(
'SALE_DH_EMS_DESCRIPTION_INNER'),
39 "HANDLER" => __FILE__,
42 "DBGETSETTINGS" =>
array(
"CDeliveryEMS",
"GetSettings"),
43 "DBSETSETTINGS" =>
array(
"CDeliveryEMS",
"SetSettings"),
44 "GETCONFIG" =>
array(
"CDeliveryEMS",
"GetConfig"),
46 "COMPABILITY" =>
array(
"CDeliveryEMS",
"Compability"),
47 "CALCULATOR" =>
array(
"CDeliveryEMS",
"Calculate"),
54 "TITLE" =>
GetMessage(
"SALE_DH_EMS_DELIVERY_TITLE"),
57 "RESTRICTIONS_WEIGHT" =>
array(0, 31500),
58 "RESTRICTIONS_SUM" =>
array(0),
67 "CONFIG_GROUPS" =>
array(
68 "all" =>
GetMessage(
'SALE_DH_EMS_CONFIG_TITLE'),
75 "TITLE" =>
GetMessage(
'SALE_DH_EMS_CONFIG_CATEGORY'),
78 'att' =>
GetMessage(
'SALE_DH_EMS_CONFIG_CATEGORY_att'),
79 'doc' =>
GetMessage(
'SALE_DH_EMS_CONFIG_CATEGORY_doc'),
91 "category" => $strSettings ==
'doc' ?
'doc' :
'att'
97 return ($arSettings[
"category"] ==
'doc' ?
'doc' :
'att');
113 $arQuery[] =
$key.
'='.urlencode($value);
121 implode(
"&", $arQuery),
127 if (($pos = mb_strpos(
$data,
"\n")) !==
false)
154 if (file_exists(__DIR__.
'/ems/city.php'))
155 require_once(__DIR__.
'/ems/city.php');
192 if (file_exists(__DIR__.
'/ems/region.php'))
193 require_once(__DIR__.
'/ems/region.php');
196 if(
$arLocation[
'REGION_NAME_ORIG'] ==
'Саха /Якутия/ Респ' ||
$arLocation[
'REGION_NAME_ORIG'] ==
'Республика Саха (Якутия)')
197 $arLocation[
'REGION_NAME_ORIG'] =
'САХА (ЯКУТИЯ) РЕСПУБЛИКА';
199 $arLocation[
'REGION_NAME_ORIG'] =
'ЕВРЕЙСКАЯ АВТОНОМНАЯ ОБЛАСТЬ';
201 $arLocation[
'REGION_NAME_ORIG'] =
'НЕНЕЦКИЙ АВТОНОМНЫЙ ОКРУГ';
203 $arLocation[
'REGION_NAME_ORIG'] =
'СЕВЕРНАЯ ОСЕТИЯ-АЛАНИЯ РЕСПУБЛИКА';
204 elseif(
$arLocation[
'REGION_NAME_ORIG'] ==
'Ханты-Мансийский Автономный округ - Югра АО' ||
$arLocation[
'REGION_NAME_ORIG'] ==
'Ханты-Мансийский автономный округ')
205 $arLocation[
'REGION_NAME_ORIG'] =
'ХАНТЫ-МАНСИЙСКИЙ-ЮГРА АВТОНОМНЫЙ ОКРУГ';
207 $arLocation[
'REGION_NAME_ORIG'] =
'ЧУКОТСКИЙ АВТОНОМНЫЙ ОКРУГ';
209 $arLocation[
'REGION_NAME_ORIG'] =
'ЯМАЛО-НЕНЕЦКИЙ АВТОНОМНЫЙ ОКРУГ';
211 $arLocation[
'REGION_NAME_ORIG'] =
'КРЫМ РЕСПУБЛИКА';
213 $arLocation[
'REGION_NAME_ORIG'] = preg_replace(
'/\sОБЛ$/iu',
' ОБЛАСТЬ', mb_strtoupper(
$arLocation[
'REGION_NAME_ORIG']));
214 $arLocation[
'REGION_NAME_ORIG'] = preg_replace(
'/\sРЕСП$/u',
' РЕСПУБЛИКА', mb_strtoupper(
$arLocation[
'REGION_NAME_ORIG']));
215 $arLocation[
'REGION_NAME_ORIG'] = preg_replace(
'/^(РЕСПУБЛИКА)\s*(.*)$/u',
'$2 $1', mb_strtoupper(
$arLocation[
'REGION_NAME_ORIG']));
249 if (file_exists(__DIR__.
'/ems/country.php'))
250 require_once(__DIR__.
'/ems/country.php');
275 public static function Calculate($profile, $arConfig, $arOrder,
$STEP, $TEMP =
false)
282 "TEXT" =>
GetMessage(
'SALE_DH_EMS_ERROR_CONNECT'),
285 if ($arOrder[
"WEIGHT"] <= 0) $arOrder[
"WEIGHT"] = 1;
289 if ($arLocationTo[
'IS_RUSSIAN'] ==
'Y')
292 if (isset($arLocationTo[
'EMS_CITIES_NOT_LOADED']))
298 if (!is_array(
$data) ||
$data[
'rsp'][
'stat'] !=
'ok' || !is_array(
$data[
'rsp'][
'locations']))
302 "TEXT" =>
GetMessage(
'SALE_DH_EMS_ERROR_CONNECT'),
306 $arCitiesList =
array();
313 if ($fp = fopen(__DIR__.
"/ems/city.php",
"w"))
315 fwrite($fp,
'<'.
"?\r\n");
316 fwrite($fp,
'$'.
"arEMSCityList = array();\r\n");
317 foreach ($arCitiesList as
$key => $value)
321 fwrite($fp,
'?'.
'>');
326 "RESULT" =>
"NEXT_STEP",
327 "TEXT" =>
GetMessage(
'SALE_DH_EMS_CORRECT_CITIES'),
331 if (isset($arLocationTo[
'EMS_REGIONS_NOT_LOADED']))
337 if (!is_array(
$data) ||
$data[
'rsp'][
'stat'] !=
'ok' || !is_array(
$data[
'rsp'][
'locations']))
341 "TEXT" =>
GetMessage(
'SALE_DH_EMS_ERROR_CONNECT'),
353 if ($fp = fopen(
$path.
"/ems/region.php",
"w"))
355 fwrite($fp,
'<'.
"?\r\n");
356 fwrite($fp,
'$'.
"arEMSRegionList = array();\r\n");
361 fwrite($fp,
'?'.
'>');
366 "RESULT" =>
"NEXT_STEP",
367 "TEXT" =>
GetMessage(
'SALE_DH_EMS_CORRECT_REGIONS'),
371 if (isset($arLocationTo[
'EMS_COUNTRIES_NOT_LOADED']))
377 if (!is_array(
$data) ||
$data[
'rsp'][
'stat'] !=
'ok' || !is_array(
$data[
'rsp'][
'locations']))
381 "TEXT" =>
GetMessage(
'SALE_DH_EMS_ERROR_CONNECT'),
385 $arCountriesList =
array();
392 if ($fp = fopen(__DIR__.
"/ems/country.php",
"w"))
394 fwrite($fp,
'<'.
"?\r\n");
395 fwrite($fp,
'$'.
"arEMSCountryList = array();\r\n");
396 foreach ($arCountriesList as
$key => $value)
398 fwrite($fp,
'$'.
"arEMSCountryList['".addslashes(
$key).
"'] = '".
htmlspecialcharsbx(trim($value)).
"';\r\n");
400 fwrite($fp,
'?'.
'>');
405 "RESULT" =>
"NEXT_STEP",
406 "TEXT" =>
GetMessage(
'SALE_DH_EMS_CORRECT_COUNTRIES'),
415 if (!$arLocationTo[
'EMS_ID'])
417 if ($arLocationTo[
'IS_RUSSIAN'] ==
'Y')
420 $text = str_replace(
'#COUNTRY#', $arLocationTo[
'COUNTRY_NAME_ORIG'],
GetMessage(
'SALE_DH_EMS_ERROR_NO_COUNTRY_TO'));
428 if ($arLocationTo[
'IS_RUSSIAN'] ==
'Y' && !$arLocationFrom[
'EMS_ID'])
430 $text = str_replace(
'#CITY#', $arLocationFrom[
'CITY_NAME_ORIG'],
GetMessage(
'SALE_DH_EMS_ERROR_NO_CITY_FROM'));
439 $cache_id =
"sale|8.0.3|ems|".$profile.
"|".$arConfig[
"category"][
"VALUE"].
"|".$arOrder[
"LOCATION_FROM"].
"|".$arOrder[
"LOCATION_TO"];
443 if ($arOrder[
'WEIGHT'] < 100)
444 $cache_id .=
'|weight_0';
445 elseif ($arOrder[
'WEIGHT'] < 2000)
446 $cache_id .=
'|weight_half_'.(ceil($arOrder[
'WEIGHT']/1000) * 2);
447 elseif ($arOrder[
'WEIGHT'] < 31000)
448 $cache_id .=
'|weight_'.(ceil($arOrder[
'WEIGHT']/1000));
450 $cache_id .=
'|weight_max';
452 $obCache =
new CPHPCache();
471 if ($arLocationTo[
'IS_RUSSIAN'] !=
'Y')
472 $arParams[
'type'] = $arConfig[
"category"][
"VALUE"];
474 $arParams[
'from'] = $arLocationFrom[
'EMS_ID'];
476 $arParams[
'to'] = $arLocationTo[
'EMS_ID'];
477 $arParams[
'weight'] = $arOrder[
'WEIGHT'] / 1000;
481 if (is_array(
$data) &&
$data[
'rsp'][
'stat'] ==
'ok')
483 $obCache->StartDataCache();
487 if (
$data[
'rsp'][
'term'])
488 $transit =
$data[
'rsp'][
'term'][
'min'].
'-'.
$data[
'rsp'][
'term'][
'max'];
490 $obCache->EndDataCache(
493 "TRANSIT" => $transit.
" ".
GetMessage(
"SALE_DH_EMS_DAYS"),
497 if ($arLocationTo[
'IS_RUSSIAN'] ==
'Y')
503 'TRANSIT' =>
$data[
'rsp'][
'term'][
'min'].
'-'.
$data[
'rsp'][
'term'][
'max'].
" ".
GetMessage(
"SALE_DH_EMS_DAYS")
509 "TEXT" =>
GetMessage(
'SALE_DH_EMS_ERROR_RESPONSE').(is_array(
$data) ?
' ('.
$data[
'rsp'][
'err'][
'msg'].
')' :
''),
521 if ($arConfig[
'category'][
'VALUE'] ==
'doc' && $arOrder[
'WEIGHT'] > 2000)
524 return array(
'delivery');
532 (mb_strtoupper(
$arLocation[
"COUNTRY_NAME_ORIG"]) ==
"РОССИЯ"
533 || mb_strtoupper(
$arLocation[
"COUNTRY_SHORT_NAME"]) ==
"РОССИЯ"
534 || mb_strtoupper(
$arLocation[
"COUNTRY_NAME_LANG"]) ==
"РОССИЯ"
535 || mb_strtoupper(
$arLocation[
"COUNTRY_NAME_ORIG"]) ==
"RUSSIA"
536 || mb_strtoupper(
$arLocation[
"COUNTRY_SHORT_NAME"]) ==
"RUSSIA"
537 || mb_strtoupper(
$arLocation[
"COUNTRY_NAME_LANG"]) ==
"RUSSIA"
538 || mb_strtoupper(
$arLocation[
"COUNTRY_NAME_ORIG"]) ==
"РОССИЙСКАЯ ФЕДЕРАЦИЯ"
539 || mb_strtoupper(
$arLocation[
"COUNTRY_SHORT_NAME"]) ==
"РОССИЙСКАЯ ФЕДЕРАЦИЯ"
540 || mb_strtoupper(
$arLocation[
"COUNTRY_NAME_LANG"]) ==
"РОССИЙСКАЯ ФЕДЕРАЦИЯ"
541 || mb_strtoupper(
$arLocation[
"COUNTRY_NAME_ORIG"]) ==
"RUSSIAN FEDERATION"
542 || mb_strtoupper(
$arLocation[
"COUNTRY_SHORT_NAME"]) ==
"RUSSIAN FEDERATION"
543 || mb_strtoupper(
$arLocation[
"COUNTRY_NAME_LANG"]) ==
"RUSSIAN FEDERATION"
552 $fp = fopen(__DIR__.
"/ems.log",
"a");
553 fwrite($fp,
"\r\n==========================================\r\n");
static GetByID($currency)
static __GetLocation($location)
static __Write2Log($data)
static Compability($arOrder, $arConfig)
static Calculate($profile, $arConfig, $arOrder, $STEP, $TEMP=false)
static JsObjectToPhp($data)
static __EMSQuery($method, $arParams=array())
static __IsRussian($arLocation)
static SetSettings($arSettings)
static GetSettings($strSettings)
static IncludeModule($module_name)
static getLocationByIdHitCached($id)
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
$_SERVER["DOCUMENT_ROOT"]
QueryGetData($SITE, $PORT, $PATH, $QUERY_STR, &$errno, &$errstr, $sMethod="GET", $sProto="", $sContentType='N')
AddEventHandler($FROM_MODULE_ID, $MESSAGE_ID, $CALLBACK, $SORT=100, $FULL_PATH=false)
htmlspecialcharsbx($string, $flags=ENT_COMPAT, $doubleEncode=true)
IncludeModuleLangFile($filepath, $lang=false, $bReturnArray=false)
GetMessage($name, $aReplace=null)
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
if(empty($signedUserToken)) $key
const DELIVERY_EMS_WRITE_LOG
const DELIVERY_EMS_PRICE_TARIFF
$arLocation['REGION_NAME']