PageRenderTime 43ms CodeModel.GetById 17ms RepoModel.GetById 0ms app.codeStats 0ms

/bitrix/modules/sale/install/components/bitrix/sale.ajax.locations/component.php

https://gitlab.com/Rad1calDreamer/honey
PHP | 314 lines | 260 code | 45 blank | 9 comment | 115 complexity | 5342f70650f0dd359fa99aba0bdc8875 MD5 | raw file
  1. <?
  2. if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
  3. use \Bitrix\Sale\SalesZone;
  4. if (!CModule::IncludeModule("sale"))
  5. {
  6. ShowError(GetMessage("SALE_MODULE_NOT_INSTALL"));
  7. return;
  8. }
  9. CUtil::InitJSCore(array('core', 'ajax'));
  10. $arParams["AJAX_CALL"] = $arParams["AJAX_CALL"] == "Y" ? "Y" : "N";
  11. $arParams["COUNTRY"] = intval($arParams["COUNTRY"]);
  12. $arParams["REGION"] = intval($arParams["REGION"]);
  13. $arParams["LOCATION_VALUE"] = intval($arParams["LOCATION_VALUE"]);
  14. $arParams["ALLOW_EMPTY_CITY"] = $arParams["ALLOW_EMPTY_CITY"] == "N" ? "N" : "Y";
  15. $arParams["ZIPCODE"] = IntVal($arParams["ZIPCODE"]);
  16. $arParams["SHOW_QUICK_CHOOSE"] = $arParams["SHOW_QUICK_CHOOSE"] == "N" ? "N" : "Y";
  17. $arParams["ADMIN_SECTION"] = (defined('ADMIN_SECTION') && ADMIN_SECTION === true)? "Y" : "N";
  18. if ($arParams["ADMIN_SECTION"] != "Y")
  19. {
  20. if (strlen($arParams["SITE_ID"]) <= 0)
  21. $arParams["SITE_ID"] = SITE_ID;
  22. }
  23. if ($arParams["ZIPCODE"] > 0)
  24. {
  25. $arZip = CSaleLocation::GetByZIP($arParams["ZIPCODE"]);
  26. if (is_array($arZip) && count($arZip) > 1)
  27. {
  28. $arParams["LOCATION_VALUE"] = IntVal($arZip["ID"]);
  29. }
  30. }
  31. // take into account sales zone
  32. $arResult["SINGLE_CITY"] = "N";
  33. $citiesIds = SalesZone::getCitiesIds($arParams["SITE_ID"]);
  34. if(count($citiesIds) == 1 && strlen($citiesIds[0]) > 0)
  35. {
  36. $rsLocationsList = CSaleLocation::GetList(
  37. array(),
  38. array("CITY_ID" => $citiesIds[0]),
  39. false,
  40. false,
  41. array("ID")
  42. );
  43. if ($arLoc = $rsLocationsList->GetNext())
  44. {
  45. $arParams["LOCATION_VALUE"] = $arLoc["ID"];
  46. $arResult["SINGLE_CITY"] = "Y";
  47. }
  48. }
  49. if(!SalesZone::checkLocationId($arParams["LOCATION_VALUE"], $arParams["SITE_ID"]))
  50. $arParams["LOCATION_VALUE"] = 0;
  51. if ($arParams["LOCATION_VALUE"] > 0)
  52. {
  53. if ($arLocation = CSaleLocation::GetByID($arParams["LOCATION_VALUE"]))
  54. {
  55. $arParams["COUNTRY"] = $arLocation["COUNTRY_ID"];
  56. $arParams["REGION"] = $arLocation["REGION_ID"];
  57. $arParams["CITY"] = $arLocation["CITY_ID"];
  58. }
  59. }
  60. //check in location city
  61. $arResult["EMPTY_CITY"] = "N";
  62. $arCityFilter = array("!CITY_ID" => "NULL", ">CITY_ID" => "0");
  63. if ($arParams["COUNTRY"] > 0)
  64. $arCityFilter["COUNTRY_ID"] = $arParams["COUNTRY"];
  65. $rsLocCount = CSaleLocation::GetList(array(), $arCityFilter, false, false, array("ID"));
  66. if (!$rsLocCount->Fetch())
  67. $arResult["EMPTY_CITY"] = "Y";
  68. //check in location region
  69. $arResult["EMPTY_REGION"] = "N";
  70. $arRegionFilter = array("!REGION_ID" => "NULL", ">REGION_ID" => "0");
  71. if ($arParams["COUNTRY"] > 0 && $arParams["REGION"] > 0)
  72. $arRegionFilter["COUNTRY_ID"] = $arParams["COUNTRY"];
  73. if ($arParams["REGION"] > 0)
  74. $arRegionFilter["REGION_ID"] = $arParams["REGION"];
  75. $rsLocCount = CSaleLocation::GetList(array(), $arRegionFilter, false, false, array("ID"));
  76. if (!$rsLocCount->Fetch())
  77. $arResult["EMPTY_REGION"] = "Y";
  78. //check if exist another city
  79. if ($arResult["EMPTY_CITY"] == "Y" && $arResult["EMPTY_REGION"] == "Y")
  80. {
  81. $arCityFilter = array("!CITY_ID" => "NULL", ">CITY_ID" => "0");
  82. $rsLocCount = CSaleLocation::GetList(array(), $arCityFilter, false, false, array("ID"));
  83. if ($rsLocCount->Fetch())
  84. $arResult["EMPTY_CITY"] = "N";
  85. }
  86. //location default
  87. $arParams["LOC_DEFAULT"] = array();
  88. $dbLocDefault = CSaleLocation::GetList(
  89. array(
  90. "SORT" => "ASC",
  91. "COUNTRY_NAME_LANG" => "ASC",
  92. "CITY_NAME_LANG" => "ASC"
  93. ),
  94. array("LOC_DEFAULT" => "Y", "LID" => LANGUAGE_ID),
  95. false,
  96. false,
  97. array("*")
  98. );
  99. while ($arLocDefault = $dbLocDefault->Fetch())
  100. {
  101. if ($arLocDefault["LOC_DEFAULT"] == "Y"
  102. && SalesZone::checkCountryId($arLocDefault["COUNTRY_ID"], $arParams["SITE_ID"])
  103. && SalesZone::checkRegionId($arLocDefault["REGION_ID"], $arParams["SITE_ID"])
  104. && SalesZone::checkCityId($arLocDefault["CITY_ID"], $arParams["SITE_ID"])
  105. )
  106. {
  107. $nameDefault = "";
  108. $nameDefault .= ((strlen($arLocDefault["COUNTRY_NAME"])<=0) ? "" : $arLocDefault["COUNTRY_NAME"]);
  109. if (strlen($arLocDefault["COUNTRY_NAME"])>0 && strlen($arLocDefault["REGION_NAME"])>0)
  110. $nameDefault .= " - ".$arLocDefault["REGION_NAME"];
  111. elseif (strlen($arLocDefault["REGION_NAME"])>0)
  112. $nameDefault .= $arLocDefault["REGION_NAME"];
  113. if ((strlen($arLocDefault["COUNTRY_NAME"])>0 || strlen($arLocDefault["REGION_NAME"])>0) && strlen($arLocDefault["CITY_NAME"])>0)
  114. $nameDefault .= " - ".$arLocDefault["CITY_NAME"];
  115. elseif (strlen($arLocDefault["CITY_NAME"])>0)
  116. $nameDefault .= $arLocDefault["CITY_NAME"];
  117. $arLocDefault["LOC_DEFAULT_NAME"] = $nameDefault;
  118. $arParams["LOC_DEFAULT"][] = $arLocDefault;
  119. }
  120. }
  121. //location value
  122. if ($arParams["LOCATION_VALUE"] > 0 )
  123. {
  124. if ($arLocation = CSaleLocation::GetByID($arParams["LOCATION_VALUE"]))
  125. {
  126. if ($arResult["EMPTY_REGION"] == "Y" && $arResult["EMPTY_CITY"] == "Y")
  127. $arParams["COUNTRY"] = $arParams["LOCATION_VALUE"];
  128. else
  129. $arParams["COUNTRY"] = $arLocation["COUNTRY_ID"];
  130. if ($arResult["EMPTY_CITY"] == "Y")
  131. $arParams["REGION"] = $arLocation["ID"];
  132. else
  133. $arParams["REGION"] = $arLocation["REGION_ID"];
  134. $arParams["CITY"] = $arParams["CITY_OUT_LOCATION"] == "Y" ? $arParams["LOCATION_VALUE"] : $arLocation["CITY_ID"];
  135. }
  136. }
  137. $locationString = "";
  138. //select country
  139. $arResult["COUNTRY_LIST"] = array();
  140. if ($arResult["EMPTY_REGION"] == "Y" && $arResult["EMPTY_CITY"] == "Y")
  141. {
  142. $rsCountryList = CSaleLocation::GetList(array("SORT" => "ASC", "NAME_LANG" => "ASC"), array("LID" => LANGUAGE_ID), false, false, array("ID", "COUNTRY_ID", "COUNTRY_NAME_LANG"));
  143. }
  144. else
  145. {
  146. $rsCountryList = CSaleLocation::GetCountryList(array("SORT" => "ASC", "NAME_LANG" => "ASC"));
  147. }
  148. while ($arCountry = $rsCountryList->GetNext())
  149. {
  150. if(!SalesZone::checkCountryId($arCountry["ID"], $arParams["SITE_ID"]))
  151. continue;
  152. if ($arResult["EMPTY_REGION"] == "Y" && $arResult["EMPTY_CITY"] == "Y")
  153. $arCountry["NAME_LANG"] = $arCountry["COUNTRY_NAME_LANG"];
  154. $arResult["COUNTRY_LIST"][] = $arCountry;
  155. if ($arCountry["ID"] == $arParams["COUNTRY"] && strlen($arCountry["NAME_LANG"]) > 0)
  156. $locationString .= $arCountry["NAME_LANG"];
  157. }
  158. if (count($arResult["COUNTRY_LIST"]) <= 0)
  159. $arResult["COUNTRY_LIST"] = array();
  160. elseif (count($arResult["COUNTRY_LIST"]) == 1)
  161. $arParams["COUNTRY"] = $arResult["COUNTRY_LIST"][0]["ID"];
  162. //select region
  163. $arResult["REGION_LIST"] = array();
  164. if (($arParams["COUNTRY"] > 0 || count($arResult["COUNTRY_LIST"]) <= 0) && (strlen($arParams["REGION_INPUT_NAME"]) > 0 || $arParams["ZIPCODE"] > 0))
  165. {
  166. $arRegionFilter = array("LID" => LANGUAGE_ID, "!REGION_ID" => "NULL", "!REGION_ID" => "0");
  167. if ($arParams["COUNTRY"] > 0)
  168. $arRegionFilter["COUNTRY_ID"] = IntVal($arParams["COUNTRY"]);
  169. if ($arResult["EMPTY_CITY"] == "Y")
  170. {
  171. $rsRegionList = CSaleLocation::GetList(array("SORT" => "ASC", "NAME_LANG" => "ASC"), $arRegionFilter, false, false, array("ID", "REGION_ID", "REGION_NAME_LANG"));
  172. }
  173. else
  174. {
  175. $rsRegionList = CSaleLocation::GetRegionList(array("SORT" => "ASC", "NAME_LANG" => "ASC"), $arRegionFilter);
  176. }
  177. while ($arRegion = $rsRegionList->GetNext())
  178. {
  179. if(!SalesZone::checkRegionId($arRegion["ID"], $arParams["SITE_ID"]))
  180. {
  181. continue;
  182. }
  183. if ($arResult["EMPTY_CITY"] == "Y")
  184. $arRegion["NAME_LANG"] = $arRegion["REGION_NAME_LANG"];
  185. $arResult["REGION_LIST"][] = $arRegion;
  186. if ($arRegion["ID"] == $arParams["REGION"] && strlen($arRegion["NAME_LANG"]) > 0)
  187. $locationString = $arRegion["NAME_LANG"].", ".$locationString;
  188. }
  189. }
  190. if (count($arResult["REGION_LIST"]) <= 0)
  191. $arResult["REGION_LIST"] = array();
  192. elseif (count($arResult["REGION_LIST"]) == 1)
  193. $arParams["REGION"] = $arResult["REGION_LIST"][0]["ID"];
  194. //select city
  195. $arResult["CITY_LIST"] = array();
  196. if (
  197. $arResult["EMPTY_CITY"] == "N"
  198. && ((count($arResult["COUNTRY_LIST"]) > 0 && count($arResult["REGION_LIST"]) > 0 && $arParams["COUNTRY"] > 0 && $arParams["REGION"] > 0)
  199. || (count($arResult["COUNTRY_LIST"]) <= 0 && count($arResult["REGION_LIST"]) > 0 && $arParams["REGION"] > 0)
  200. || (count($arResult["COUNTRY_LIST"]) > 0 && count($arResult["REGION_LIST"]) <= 0 && $arParams["COUNTRY"] > 0)
  201. || (count($arResult["COUNTRY_LIST"]) <= 0 && count($arResult["REGION_LIST"]) <= 0))
  202. )
  203. {
  204. $arCityFilter = array("LID" => LANGUAGE_ID);
  205. if ($arParams["COUNTRY"] > 0)
  206. $arCityFilter["COUNTRY_ID"] = $arParams["COUNTRY"];
  207. if ($arParams["REGION"] > 0)
  208. $arCityFilter["REGION_ID"] = $arParams["REGION"];
  209. if ($arParams['ALLOW_EMPTY_CITY'] == 'Y')
  210. {
  211. $rsLocationsList = CSaleLocation::GetList(
  212. array(
  213. "SORT" => "ASC",
  214. "COUNTRY_NAME_LANG" => "ASC",
  215. "CITY_NAME_LANG" => "ASC"
  216. ),
  217. $arCityFilter,
  218. false,
  219. false,
  220. array(
  221. "ID", "CITY_ID", "CITY_NAME"
  222. )
  223. );
  224. while ($arCity = $rsLocationsList->GetNext())
  225. {
  226. if(!SalesZone::checkCityId($arCity["CITY_ID"], $arParams["SITE_ID"]))
  227. continue;
  228. $arResult["CITY_LIST"][] = array(
  229. "ID" => $arCity[$arParams["CITY_OUT_LOCATION"] == "Y" ? "ID" : "CITY_ID"],
  230. "CITY_ID" => $arCity['CITY_ID'],
  231. "CITY_NAME" => $arCity["CITY_NAME"],
  232. );
  233. if ($arCity["ID"] == $arParams["CITY"])
  234. {
  235. $locationString = (strlen($arCity["CITY_NAME"]) > 0 ? $arCity["CITY_NAME"].", " : "").$locationString;
  236. if(IntVal($arParams["LOCATION_VALUE"]) <= 0)
  237. $arParams["LOCATION_VALUE"] = $arCity["ID"];
  238. $arResult["LOCATION_DEFAULT"] = $arCity["ID"];
  239. }
  240. }//end while
  241. }//end if
  242. }
  243. if ($arResult["EMPTY_CITY"] == "Y")
  244. $arParams["REGION_INPUT_NAME"] = "";
  245. if ($arResult["EMPTY_REGION"] == "Y" && $arResult["EMPTY_CITY"] == "Y")
  246. $arParams["COUNTRY_INPUT_NAME"] = "";
  247. $arResult["LOCATION_STRING"] = $locationString;
  248. $arParams["JS_CITY_INPUT_NAME"] = CUtil::JSEscape($arParams["CITY_INPUT_NAME"]);
  249. $arTmpParams = array(
  250. "COUNTRY_INPUT_NAME" => $arParams["COUNTRY_INPUT_NAME"],
  251. "REGION_INPUT_NAME" => $arParams["REGION_INPUT_NAME"],
  252. "CITY_INPUT_NAME" => $arParams["CITY_INPUT_NAME"],
  253. "CITY_OUT_LOCATION" => $arParams["CITY_OUT_LOCATION"],
  254. "ALLOW_EMPTY_CITY" => $arParams["ALLOW_EMPTY_CITY"],
  255. "ONCITYCHANGE" => $arParams["ONCITYCHANGE"],
  256. );
  257. $arResult["JS_PARAMS"] = CUtil::PhpToJsObject($arTmpParams);
  258. $serverName = COption::GetOptionString("main", "server_name", "");
  259. if (strlen($serverName) > 0)
  260. $arParams["SERVER_NAME"] = "http://".$serverName;
  261. $arResult["ADDITIONAL_VALUES"] = "siteId:".$arParams["SITE_ID"];
  262. $this->IncludeComponentTemplate();
  263. if ($arParams["AJAX_CALL"] != "Y")
  264. {
  265. IncludeAJAX();
  266. $template =& $this->GetTemplate();
  267. $APPLICATION->AddHeadScript($template->GetFolder().'/proceed.js');
  268. }
  269. ?>