PageRenderTime 65ms CodeModel.GetById 10ms RepoModel.GetById 0ms app.codeStats 0ms

/modules/sale/lib/tradingplatform/vk/catalogsectiontabhandler.php

https://gitlab.com/alexprowars/bitrix
PHP | 393 lines | 280 code | 54 blank | 59 comment | 22 complexity | 55ea86ed8ac461b204f3b32e913bf9db MD5 | raw file
  1. <?php
  2. namespace Bitrix\Sale\TradingPlatform\Vk;
  3. use Bitrix\Main\Localization\Loc;
  4. use Bitrix\Main\SystemException;
  5. use Bitrix\Sale\TradingPlatform\TabHandler;
  6. use Bitrix\Main\Text\HtmlFilter;
  7. Loc::loadMessages(__FILE__);
  8. /**
  9. * Class CatalogSectionTabHandler
  10. * Work with iblock section / catalog category edit page.
  11. * @package Bitrix\Sale\TradingPlatform\Vk
  12. */
  13. class CatalogSectionTabHandler extends TabHandler
  14. {
  15. protected static $vkCategoriesVariations = array();
  16. protected static $vkRequiredVariations = array();
  17. protected $section = array();
  18. /**
  19. * CatalogSectionTabHandler constructor.
  20. */
  21. public function __construct()
  22. {
  23. $this->name = Loc::getMessage("SALE_VK_NAME");
  24. $this->description = Loc::getMessage("SALE_VK_DESCRIPTION");
  25. }
  26. /**
  27. * Save POST data
  28. *
  29. * @param $arArgs
  30. * @return bool
  31. */
  32. public function action($arArgs)
  33. {
  34. $sectionId = $arArgs["ID"];
  35. $vk = Vk::getInstance();
  36. $exportProfiles = $vk->getExportProfilesList();
  37. foreach ($exportProfiles as $export)
  38. {
  39. $dataToMapping = array();
  40. $dataToDelete = array();
  41. $sectionsList = new SectionsList($export["ID"]);
  42. // in moment of changes setting we must drop cached sections and mapped sections
  43. $sectionsList->clearCaches();
  44. $sectionsList->setCurrSectionSettings($_POST['VK_EXPORT'][$export["ID"]]);
  45. // formatted or remove current section
  46. $preparedSection = $sectionsList->prepareSectionToSave($sectionId);
  47. $dataToMapping += $preparedSection['TO_SAVE'] ? $preparedSection['TO_SAVE'] : array();
  48. $dataToDelete += $preparedSection['TO_DELETE'] ? $preparedSection['TO_DELETE'] : array();
  49. // save or remove childs
  50. $preparedChilds = $sectionsList->prepareChildsToSave($sectionId);
  51. $dataToMapping += $preparedChilds['TO_SAVE'] ? $preparedChilds['TO_SAVE'] : array();
  52. $dataToDelete += $preparedChilds['TO_DELETE'] ? $preparedChilds['TO_DELETE'] : array();
  53. if (!empty($dataToMapping))
  54. {
  55. Map::updateSectionsMapping($dataToMapping, $export["ID"], 'ONLY_INTERNAL');
  56. }
  57. if (!empty($dataToDelete))
  58. {
  59. Map::removeSectionsMapping($dataToDelete, $export["ID"], 'ONLY_INTERNAL');
  60. }
  61. }
  62. return true;
  63. }
  64. /**
  65. * Check POST values
  66. *
  67. * @param $arArgs
  68. * @return bool
  69. * @throws SystemException
  70. */
  71. public function check($arArgs)
  72. {
  73. $vk = Vk::getInstance();
  74. $exports = $vk->getExportProfilesList();
  75. $errors = array();
  76. foreach ($exports as $export)
  77. {
  78. $currErrors = array();
  79. // all VK-errors can be only if export ENABLE
  80. if (isset($_POST['VK_EXPORT'][$export["ID"]]["ENABLE"]) && $_POST['VK_EXPORT'][$export["ID"]]["ENABLE"])
  81. {
  82. // wrong section
  83. if (isset($_POST['VK_EXPORT'][$export["ID"]]["TO_ALBUM"]) && $_POST['VK_EXPORT'][$export["ID"]]["TO_ALBUM"] < 0)
  84. {
  85. $currErrors[] = Loc::getMessage("SALE_VK_EXPORT_SETTINGS__ERROR_WRONG_ALBUM");
  86. unset($_POST['VK_EXPORT'][$export["ID"]]["TO_ALBUM"]);
  87. }
  88. // section is selected, but alias is empty
  89. if (
  90. isset($_POST['VK_EXPORT'][$export["ID"]]["TO_ALBUM"]) && $_POST['VK_EXPORT'][$export["ID"]]["TO_ALBUM"] > 0 &&
  91. $_POST['VK_EXPORT'][$export["ID"]]["TO_ALBUM"] == $_POST['VK_EXPORT'][$export["ID"]]["TO_ALBUM_CURRENT"] &&
  92. mb_strlen($_POST['VK_EXPORT'][$export["ID"]]["TO_ALBUM_ALIAS"]) < 2
  93. )
  94. {
  95. $currErrors[] = Loc::getMessage("SALE_VK_EXPORT_SETTINGS__ERROR_EMPTY_ALIAS");
  96. unset($_POST['VK_EXPORT'][$export["ID"]]["TO_ALBUM_ALIAS"]);
  97. }
  98. if (isset($_POST['VK_EXPORT'][$export["ID"]]["VK_CATEGORY"]) && $_POST['VK_EXPORT'][$export["ID"]]["VK_CATEGORY"] == 0)
  99. {
  100. $currErrors[] = Loc::getMessage("SALE_VK_EXPORT_SETTINGS__ERROR_WRONG_VK_CATEGORY");
  101. unset($_POST['VK_EXPORT'][$export["ID"]]["VK_CATEGORY"]);
  102. }
  103. }
  104. if (!empty($currErrors))
  105. $errors[] =
  106. Loc::getMessage("SALE_VK_EXPORT_PROFILE") .
  107. '"' . HtmlFilter::encode($export['DESC']) . '": <br>' .
  108. implode('<br>', $currErrors);
  109. }
  110. if (!empty($errors))
  111. throw new SystemException(implode('<br><br>', $errors));
  112. return true;
  113. }
  114. /**
  115. * Format HTML for showing. Return HTML string.
  116. *
  117. * @param $divName
  118. * @param $arArgs
  119. * @param $bVarsFromForm
  120. * @return string
  121. */
  122. public function showTabSection($divName, $arArgs, $bVarsFromForm)
  123. {
  124. // ONLY RUSSIAN!!!
  125. // todo: translate to other language
  126. if (defined('LANG') && LANG != 'ru')
  127. {
  128. $resultHtml = '<tr><td colspan="2">';
  129. $resultHtml .= BeginNote();
  130. $resultHtml .= '<p>' . Loc::getMessage("SALE_VK_ONLY_RUSSIAN") . '</p>';
  131. $resultHtml .= '<p>' . Loc::getMessage("SALE_VK_ONLY_RUSSIAN_2") . '</p>';
  132. $resultHtml .= '<img src="/bitrix/images/sale/vk/vk_only_russian.png" alt="">';
  133. $resultHtml .= EndNote();
  134. $resultHtml .= '</td></tr>';
  135. return $resultHtml;
  136. }
  137. $resultHtml = "";
  138. $iblockId = $arArgs["IBLOCK"]["ID"];
  139. $sectionId = $arArgs["ID"];
  140. // test current section activity (if new - we have not ID and cant set settings)
  141. if ($sectionId <= 0)
  142. return '<tr><td colspan="2">' . Loc::getMessage("SALE_VK_NEED_SAVE_SECTION") . '</td></tr>';
  143. // if we not have exports profiles - we cant sdave settings
  144. $vk = Vk::getInstance();
  145. $exports = $vk->getExportProfilesList();
  146. if (empty($exports))
  147. {
  148. return
  149. '<tr><td colspan="2">' .
  150. Loc::getMessage("SALE_VK_NEED_EXPORT_PROFILE", array('#A1' => '/bitrix/admin/sale_vk_export_list.php')) .
  151. '</td></tr>';
  152. }
  153. // ----------- PRINT ------------
  154. // ------------------------------
  155. $resultHtml .= '<tr><td colspan="2">';
  156. $resultHtml .= '
  157. <table class="internal" id="table_EXPORT_PROFILES"
  158. style="border-left: none !important; border-right: none !important; width: 100%;">';
  159. $resultHtml .= '
  160. <tr
  161. id="tr_HEADING"
  162. class="heading"
  163. mode="flat"
  164. prop_sort="-1"
  165. prop_id="0"
  166. left_margin="-1"
  167. >
  168. <td align="left" class="internal-left">' . Loc::getMessage("SALE_VK_EXPORT_SETTINGS__EXPORT_ID") . '</td>
  169. <td style="width: 220px">' . Loc::getMessage("SALE_VK_EXPORT_SETTINGS__INHERIT") . '</td>
  170. <td style="width: 100px">' . Loc::getMessage("SALE_VK_EXPORT_SETTINGS__ENABLE") . '</td>
  171. <td align="left">' .
  172. Loc::getMessage("SALE_VK_EXPORT_SETTINGS__TO_ALBUM") .
  173. ShowJSHint(Loc::getMessage("SALE_VK_EXPORT_SETTINGS__TO_ALBUM_HELP"), array('return'=>true)) . '
  174. </td>' .
  175. '<td style="width: 220px">' .
  176. Loc::getMessage("SALE_VK_EXPORT_SETTINGS__INCLUDE_CHILDS") .
  177. ShowJSHint(Loc::getMessage("SALE_VK_EXPORT_SETTINGS__INCLUDE_CHILDS_HELP"), array('return'=>true)) . '
  178. </td>
  179. <td align="left" class="internal-right">' .
  180. Loc::getMessage("SALE_VK_CATEGORY_SELECTOR") .
  181. ShowJSHint(Loc::getMessage("SALE_VK_CATEGORY_SELECTOR_HELP"), array('return'=>true)) . '
  182. </td>
  183. </tr>';
  184. foreach ($exports as $export)
  185. {
  186. try
  187. {
  188. $sectionsList = new SectionsList($export['ID']);
  189. $currSettings = $sectionsList->prepareSectionToShow($sectionId);
  190. // load values from post, if page will be reload (e.g. if error)
  191. $currSettings = $this->compareSettingsWithPost($currSettings, $export["ID"]);
  192. $currSettings = $sectionsList->prepareSettingsVisibility($currSettings, $sectionId);
  193. $categoriesVk = new VkCategories($export["ID"]);
  194. $vkCategorySelector = $categoriesVk->getVkCategorySelector(
  195. $currSettings["VK_CATEGORY"],
  196. Loc::getMessage('SALE_VK_CATEGORY_SELECTOR_DEFAULT')
  197. );
  198. }
  199. catch (ExecuteException $e)
  200. {
  201. // export is wrong
  202. self::setUnactiveExport($export['ID']);
  203. continue;
  204. }
  205. $resultHtml .= '<tr id="tr_EXPORT__' . $export["ID"] . ' class="vk_export_row" mode="both" left_margin="124" >';
  206. // EXPORT settings - profile
  207. $resultHtml .= '
  208. <td class="internal-left">
  209. <span>' . HtmlFilter::encode($export["DESC"]) . '</span>
  210. <input
  211. class="vk_export__profile_id"
  212. type="hidden"
  213. name="VK_EXPORT[' . $export["ID"] . '][ID]"
  214. value ="' . $export["ID"] . '" />
  215. </td>';
  216. // INHERIT from parent
  217. $resultHtml .= '
  218. <td align="center">
  219. <input ' . $currSettings["INHERIT"] . ' ' . $currSettings['INHERIT__DISPLAY'] . '
  220. id="vk_export_inherit_' . $export["ID"] . '"
  221. type="checkbox"
  222. name="VK_EXPORT[' . $export["ID"] . '][INHERIT]"
  223. value="1">
  224. </td>';
  225. // ENDABLE export
  226. $resultHtml .= '
  227. <td align="center">
  228. <input ' . $currSettings["ENABLE"] . ' ' . $currSettings["ENABLE__DISPLAY"] . '
  229. id="vk_export_enable_' . $export["ID"] . '"
  230. type="checkbox"
  231. name="VK_EXPORT[' . $export["ID"] . '][ENABLE]"
  232. value="1">
  233. <input type="hidden" name="VK_EXPORT[' . $export["ID"] . '][IBLOCK]" value="' . $iblockId . '">
  234. <input
  235. type="hidden"
  236. id="vk_export_enable_parent_' . $export["ID"] . '"
  237. value="' . $currSettings["ENABLE__PARENT"] . '">
  238. </td>';
  239. // TO ALBUM
  240. $sectionsSelector = $sectionsList->getSectionsSelector($currSettings["TO_ALBUM"], false);
  241. $resultHtml .= '
  242. <td>
  243. <input
  244. type="hidden"
  245. id="vk_export_to_album_current_' . $export["ID"] . '"
  246. name="VK_EXPORT[' . $export["ID"] . '][TO_ALBUM_CURRENT]"
  247. value="' . $sectionId . '">
  248. <input
  249. type="hidden"
  250. id="vk_export_to_album_parent_' . $export["ID"] . '"
  251. value="' . $currSettings["TO_ALBUM__PARENT"] . '">
  252. <select ' . $currSettings["TO_ALBUM__DISPLAY"] . '
  253. style="width: 100%"
  254. id="vk_export_to_album_' . $export["ID"] . '"
  255. class="vk_sale_export_category_to_album"
  256. name="VK_EXPORT[' . $export["ID"] . '][TO_ALBUM]">' .
  257. $sectionsSelector . '
  258. </select>' .
  259. // alias
  260. '<div id="vk_export_to_album_alias_container_'. $export["ID"] .'"
  261. style="margin-top: 6px; '. $currSettings["TO_ALBUM_ALIAS__DISPLAY"] .'">' .
  262. '<i>'.Loc::getMessage("SALE_VK_EXPORT_SETTINGS__TO_ALBUM_ALIAS").': </i>'.
  263. '<input ' .
  264. 'id="vk_export_to_album_alias_' . $export["ID"] . '"' .
  265. 'type="text"' .
  266. 'name="VK_EXPORT[' . $export["ID"] . '][TO_ALBUM_ALIAS]"'.
  267. 'size="25" maxlength="255"' .
  268. 'value="' . $currSettings["TO_ALBUM_ALIAS"] . '"'.
  269. '>' .
  270. '<input '.
  271. 'type="hidden"'.
  272. 'id="vk_export_to_album_alias_parent_' . $export["ID"] . '"'.
  273. 'value="' . $currSettings["TO_ALBUM_ALIAS__PARENT"] . '"'.
  274. '>'.
  275. '</div>' .
  276. '</td>';
  277. // include CHILDS
  278. $resultHtml .= '
  279. <td align="center">
  280. <input ' . $currSettings["INCLUDE_CHILDS__DISPLAY"] . ' ' . $currSettings["INCLUDE_CHILDS"] . '
  281. id="vk_export_include_childs_' . $export["ID"] . '"
  282. type="checkbox"
  283. name="VK_EXPORT[' . $export["ID"] . '][INCLUDE_CHILDS]"
  284. value="1"
  285. >
  286. <input
  287. type="hidden"
  288. id="vk_export_include_childs_parent_' . $export["ID"] . '"
  289. value="' . $currSettings["INCLUDE_CHILDS__PARENT"] . '">
  290. </td>';
  291. // categories SELECTOR
  292. $resultHtml .= '
  293. <td class="internal - right">
  294. <select ' . $currSettings["VK_CATEGORY__DISPLAY"] . '
  295. id="vk_export_vk_category_' . $export["ID"] . '"
  296. name="VK_EXPORT[' . $export["ID"] . '][VK_CATEGORY]">' .
  297. $vkCategorySelector . '
  298. </select>
  299. <input
  300. type="hidden"
  301. id="vk_export_vk_category_parent_' . $export["ID"] . '"
  302. value="' . $currSettings["VK_CATEGORY__PARENT"] . '">
  303. </td>';
  304. $resultHtml .= '</tr>';
  305. } //end foreach
  306. $resultHtml .= '</table>';
  307. $resultHtml .= BeginNote() . Loc::getMessage("SALE_VK_CATEGORY_INTRO") . EndNote();
  308. $resultHtml .= '</td></tr>';
  309. // SCRIPT for beauty
  310. \Bitrix\Main\Page\Asset::getInstance()->addJs("/bitrix/js/sale/vk_section_edit.js", true);
  311. return $resultHtml;
  312. }
  313. /**
  314. * Load values from post if page was be refreshed
  315. *
  316. * @param $settings array of settings
  317. * @param $exportId
  318. * @return mixed
  319. */
  320. private function compareSettingsWithPost($settings, $exportId)
  321. {
  322. // not need check INHERIT and ENABLE. Patamushta not need
  323. if ($_POST['VK_EXPORT'][$exportId]["TO_ALBUM"])
  324. $settings["TO_ALBUM"] = $_POST['VK_EXPORT'][$exportId]["TO_ALBUM"];
  325. if ($_POST['VK_EXPORT'][$exportId]["TO_ALBUM_ALIAS"])
  326. $settings["TO_ALBUM_ALIAS"] = $_POST['VK_EXPORT'][$exportId]["TO_ALBUM_ALIAS"];
  327. if ($_POST['VK_EXPORT'][$exportId]["VK_CATEGORY"])
  328. $settings["VK_CATEGORY"] = $_POST['VK_EXPORT'][$exportId]["VK_CATEGORY"];
  329. $settings["INCLUDE_CHILDS"] = $_POST['VK_EXPORT'][$exportId]["INCLUDE_CHILDS"] ? true : $settings["INCLUDE_CHILDS"];
  330. return $settings;
  331. }
  332. private static function setUnactiveExport($exportId)
  333. {
  334. $vk = Vk::getInstance();
  335. $vk->unsetActiveById($exportId);
  336. }
  337. }