%PDF- %PDF-
Direktori : /home/bitrix/www/bitrix/modules/sale/lib/tradingplatform/vk/ |
Current File : /home/bitrix/www/bitrix/modules/sale/lib/tradingplatform/vk/catalogsectiontabhandler.php |
<?php namespace Bitrix\Sale\TradingPlatform\Vk; use Bitrix\Main\Localization\Loc; use Bitrix\Main\SystemException; use Bitrix\Sale\TradingPlatform\TabHandler; use Bitrix\Main\Text\HtmlFilter; Loc::loadMessages(__FILE__); /** * Class CatalogSectionTabHandler * Work with iblock section / catalog category edit page. * @package Bitrix\Sale\TradingPlatform\Vk */ class CatalogSectionTabHandler extends TabHandler { protected static $vkCategoriesVariations = array(); protected static $vkRequiredVariations = array(); protected $section = array(); /** * CatalogSectionTabHandler constructor. */ public function __construct() { $this->name = Loc::getMessage("SALE_VK_NAME"); $this->description = Loc::getMessage("SALE_VK_DESCRIPTION"); } /** * Save POST data * * @param $arArgs * @return bool */ public function action($arArgs) { $sectionId = $arArgs["ID"]; $vk = Vk::getInstance(); $exportProfiles = $vk->getExportProfilesList(); foreach ($exportProfiles as $export) { $dataToMapping = array(); $dataToDelete = array(); $sectionsList = new SectionsList($export["ID"]); // in moment of changes setting we must drop cached sections and mapped sections $sectionsList->clearCaches(); $sectionsList->setCurrSectionSettings($_POST['VK_EXPORT'][$export["ID"]]); // formatted or remove current section $preparedSection = $sectionsList->prepareSectionToSave($sectionId); $dataToMapping += $preparedSection['TO_SAVE'] ? $preparedSection['TO_SAVE'] : array(); $dataToDelete += $preparedSection['TO_DELETE'] ? $preparedSection['TO_DELETE'] : array(); // save or remove childs $preparedChilds = $sectionsList->prepareChildsToSave($sectionId); $dataToMapping += $preparedChilds['TO_SAVE'] ? $preparedChilds['TO_SAVE'] : array(); $dataToDelete += $preparedChilds['TO_DELETE'] ? $preparedChilds['TO_DELETE'] : array(); if (!empty($dataToMapping)) Map::updateSectionsMapping($dataToMapping, $export["ID"], 'ONLY_INTERNAL'); if (!empty($dataToDelete)) Map::removeSectionsMapping($dataToDelete, $export["ID"], 'ONLY_INTERNAL'); } return true; } /** * Check POST values * * @param $arArgs * @return bool * @throws SystemException */ public function check($arArgs) { $vk = Vk::getInstance(); $exports = $vk->getExportProfilesList(); $errors = array(); foreach ($exports as $export) { $currErrors = array(); // all VK-errors can be only if export ENABLE if (isset($_POST['VK_EXPORT'][$export["ID"]]["ENABLE"]) && $_POST['VK_EXPORT'][$export["ID"]]["ENABLE"]) { // wrong section if (isset($_POST['VK_EXPORT'][$export["ID"]]["TO_ALBUM"]) && $_POST['VK_EXPORT'][$export["ID"]]["TO_ALBUM"] < 0) { $currErrors[] = Loc::getMessage("SALE_VK_EXPORT_SETTINGS__ERROR_WRONG_ALBUM"); unset($_POST['VK_EXPORT'][$export["ID"]]["TO_ALBUM"]); } // section is selected, but alias is empty if ( isset($_POST['VK_EXPORT'][$export["ID"]]["TO_ALBUM"]) && $_POST['VK_EXPORT'][$export["ID"]]["TO_ALBUM"] > 0 && $_POST['VK_EXPORT'][$export["ID"]]["TO_ALBUM"] == $_POST['VK_EXPORT'][$export["ID"]]["TO_ALBUM_CURRENT"] && strlen($_POST['VK_EXPORT'][$export["ID"]]["TO_ALBUM_ALIAS"]) < 2 ) { $currErrors[] = Loc::getMessage("SALE_VK_EXPORT_SETTINGS__ERROR_EMPTY_ALIAS"); unset($_POST['VK_EXPORT'][$export["ID"]]["TO_ALBUM_ALIAS"]); } if (isset($_POST['VK_EXPORT'][$export["ID"]]["VK_CATEGORY"]) && $_POST['VK_EXPORT'][$export["ID"]]["VK_CATEGORY"] == 0) { $currErrors[] = Loc::getMessage("SALE_VK_EXPORT_SETTINGS__ERROR_WRONG_VK_CATEGORY"); unset($_POST['VK_EXPORT'][$export["ID"]]["VK_CATEGORY"]); } } if (!empty($currErrors)) $errors[] = Loc::getMessage("SALE_VK_EXPORT_PROFILE") . '"' . HtmlFilter::encode($export['DESC']) . '": <br>' . implode('<br>', $currErrors); } if (!empty($errors)) throw new SystemException(implode('<br><br>', $errors)); return true; } /** * Format HTML for showing. Return HTML string. * * @param $divName * @param $arArgs * @param $bVarsFromForm * @return string */ public function showTabSection($divName, $arArgs, $bVarsFromForm) { // ONLY RUSSIAN!!! // todo: translate to other language if (defined('LANG') && LANG != 'ru') { $resultHtml = '<tr><td colspan="2">'; $resultHtml .= BeginNote(); $resultHtml .= '<p>' . Loc::getMessage("SALE_VK_ONLY_RUSSIAN") . '</p>'; $resultHtml .= '<p>' . Loc::getMessage("SALE_VK_ONLY_RUSSIAN_2") . '</p>'; $resultHtml .= '<img src="/bitrix/images/sale/vk/vk_only_russian.png" alt="">'; $resultHtml .= EndNote(); $resultHtml .= '</td></tr>'; return $resultHtml; } $resultHtml = ""; $iblockId = $arArgs["IBLOCK"]["ID"]; $sectionId = $arArgs["ID"]; // test current section activity (if new - we have not ID and cant set settings) if ($sectionId <= 0) return '<tr><td colspan="2">' . Loc::getMessage("SALE_VK_NEED_SAVE_SECTION") . '</td></tr>'; // if we not have exports profiles - we cant sdave settings $vk = Vk::getInstance(); $exports = $vk->getExportProfilesList(); if (empty($exports)) return '<tr><td colspan="2">' . Loc::getMessage("SALE_VK_NEED_EXPORT_PROFILE", array('#A1' => '/bitrix/admin/sale_vk_export_list.php')) . '</td></tr>'; // ----------- PRINT ------------ // ------------------------------ $resultHtml .= '<tr><td colspan="2">'; $resultHtml .= ' <table class="internal" id="table_EXPORT_PROFILES" style="border-left: none !important; border-right: none !important;">'; $resultHtml .= ' <tr id="tr_HEADING" class="heading" mode="flat" prop_sort="-1" prop_id="0" left_margin="-1" > <td align="left" class="internal-left">' . Loc::getMessage("SALE_VK_EXPORT_SETTINGS__EXPORT_ID") . '</td> <td>' . Loc::getMessage("SALE_VK_EXPORT_SETTINGS__INHERIT") . '</td> <td>' . Loc::getMessage("SALE_VK_EXPORT_SETTINGS__ENABLE") . '</td> <td align="left">' . Loc::getMessage("SALE_VK_EXPORT_SETTINGS__TO_ALBUM") . ShowJSHint(Loc::getMessage("SALE_VK_EXPORT_SETTINGS__TO_ALBUM_HELP"), array('return'=>true)) . ' </td> <td align="left">' . Loc::getMessage("SALE_VK_EXPORT_SETTINGS__TO_ALBUM_ALIAS") . '</td> <td>' . Loc::getMessage("SALE_VK_EXPORT_SETTINGS__INCLUDE_CHILDS") . ShowJSHint(Loc::getMessage("SALE_VK_EXPORT_SETTINGS__INCLUDE_CHILDS_HELP"), array('return'=>true)) . ' </td> <td align="left" class="internal-right">' . Loc::getMessage("SALE_VK_CATEGORY_SELECTOR") . ShowJSHint(Loc::getMessage("SALE_VK_CATEGORY_SELECTOR_HELP"), array('return'=>true)) . ' </td> </tr>'; foreach ($exports as $export) { $sectionsList = new SectionsList($export['ID']); $currSettings = $sectionsList->prepareSectionToShow($sectionId); // load values from post, if page will be reload (e.g. if error) $currSettings = $this->compareSettingsWithPost($currSettings, $export["ID"]); $currSettings = $sectionsList->prepareSettingsVisibility($currSettings, $sectionId); $resultHtml .= '<tr id="tr_EXPORT__' . $export["ID"] . '" mode="both" left_margin="124" >'; // EXPORT settings - profile $resultHtml .= ' <td class="internal-left"> <span>' . HtmlFilter::encode($export["DESC"]) . '</span> <input class="vk_export__profile_id" type="hidden" name="VK_EXPORT[' . $export["ID"] . '][ID]" value ="' . $export["ID"] . '" /> </td>'; // INHERIT from parent $resultHtml .= ' <td align="center"> <input ' . $currSettings["INHERIT"] . $currSettings['INHERIT__DISPLAY'] . ' id="vk_export_inherit_' . $export["ID"] . '" type="checkbox" name="VK_EXPORT[' . $export["ID"] . '][INHERIT]" value="1"> </td>'; // ENDABLE export $resultHtml .= ' <td align="center"> <input ' . $currSettings["ENABLE"] . $currSettings["ENABLE__DISPLAY"] . ' id="vk_export_enable_' . $export["ID"] . '" type="checkbox" name="VK_EXPORT[' . $export["ID"] . '][ENABLE]" value="1"> <input type="hidden" name="VK_EXPORT[' . $export["ID"] . '][IBLOCK]" value="' . $iblockId . '"> <input type="hidden" id="vk_export_enable_parent_' . $export["ID"] . '" value="' . $currSettings["ENABLE__PARENT"] . '"> </td>'; // TO ALBUM $sectionsSelector = $sectionsList->getSectionsSelector($currSettings["TO_ALBUM"]); $resultHtml .= ' <td> <input type="hidden" id="vk_export_to_album_current_' . $export["ID"] . '" name="VK_EXPORT[' . $export["ID"] . '][TO_ALBUM_CURRENT]" value="' . $sectionId . '"> <input type="hidden" id="vk_export_to_album_parent_' . $export["ID"] . '" value="' . $currSettings["TO_ALBUM__PARENT"] . '"> <select ' . $currSettings["TO_ALBUM__DISPLAY"] . ' id="vk_export_to_album_' . $export["ID"] . '" class="vk_sale_export_category_to_album" name="VK_EXPORT[' . $export["ID"] . '][TO_ALBUM]">' . $sectionsSelector . ' </select> </td>'; // album ALIAS $resultHtml .= ' <td> <input ' . $currSettings["TO_ALBUM_ALIAS__DISPLAY"] . ' id="vk_export_to_album_alias_' . $export["ID"] . '" type="text" name="VK_EXPORT[' . $export["ID"] . '][TO_ALBUM_ALIAS]" size="25" maxlength="255" value="' . $currSettings["TO_ALBUM_ALIAS"] . '" > <input type="hidden" id="vk_export_to_album_alias_parent_' . $export["ID"] . '" value="' . $currSettings["TO_ALBUM_ALIAS__PARENT"] . '"> </td>'; // include CHILDS $resultHtml .= ' <td align="center"> <input ' . $currSettings["INCLUDE_CHILDS__DISPLAY"] . $currSettings["INCLUDE_CHILDS"] . ' id="vk_export_include_childs_' . $export["ID"] . '" type="checkbox" name="VK_EXPORT[' . $export["ID"] . '][INCLUDE_CHILDS]" value="1" > <input type="hidden" id="vk_export_include_childs_parent_' . $export["ID"] . '" value="' . $currSettings["INCLUDE_CHILDS__PARENT"] . '"> </td>'; // categories SELECTOR $categoriesVk = new VkCategories($export["ID"]); $vkCategorySelector = $categoriesVk->getVkCategorySelector($currSettings["VK_CATEGORY"], Loc::getMessage('SALE_VK_CATEGORY_SELECTOR_DEFAULT')); $resultHtml .= ' <td class="internal - right"> <select ' . $currSettings["VK_CATEGORY__DISPLAY"] . ' id="vk_export_vk_category_' . $export["ID"] . '" name="VK_EXPORT[' . $export["ID"] . '][VK_CATEGORY]">' . $vkCategorySelector . ' </select> <input type="hidden" id="vk_export_vk_category_parent_' . $export["ID"] . '" value="' . $currSettings["VK_CATEGORY__PARENT"] . '"> </td>'; $resultHtml .= '</tr>'; } //end foreach $resultHtml .= '</table>'; $resultHtml .= BeginNote() . Loc::getMessage("SALE_VK_CATEGORY_INTRO") . EndNote(); $resultHtml .= '</td></tr>'; // SCRIPTS for beauty $resultHtml .= " <script type=\"text/javascript\"> BX.ready(function(){ var exportIds = BX.findChild(BX('table_EXPORT_PROFILES'), {class: 'vk_export__profile_id'}, true, true); exportIds.forEach(function(element){ var exportId = element.getAttribute('value'); var items = new Array(); items.vkExportInherit = BX('vk_export_inherit_' + exportId); items.vkExportEnable = BX('vk_export_enable_' + exportId); items.vkExportEnableParent = BX('vk_export_enable_parent_' + exportId); items.vkExportToAlbumCurrent = BX('vk_export_to_album_current_' + exportId); items.vkExportToAlbum = BX('vk_export_to_album_' + exportId); items.vkExportToAlbumParent = BX('vk_export_to_album_parent_' + exportId); items.vkExportToAlbumAlias = BX('vk_export_to_album_alias_' + exportId); items.vkExportToAlbumAliasParent = BX('vk_export_to_album_alias_parent_' + exportId); items.vkExportIncludeChilds = BX('vk_export_include_childs_' + exportId); items.vkExportIncludeChildsParent = BX('vk_export_include_childs_parent_' + exportId); items.vkExportVkCategory = BX('vk_export_vk_category_' + exportId); items.vkExportVkCategoryParent = BX('vk_export_vk_category_parent_' + exportId); /* if inherit - hide all, if not - show other */ BX.bind(items.vkExportInherit, 'change', function(){ checkSettingsVisible(items); }); /* if disable - hide all, if enable - check visible */ BX.bind(items.vkExportEnable, 'change', function(){ checkSettingsVisible(items); }); /* if export to current album - show alias field */ /* if change album to add - we can adding childs products to this album */ BX.bind(items.vkExportToAlbum, 'change', function(){ checkSettingsVisibleAlbums(items); }); }); function checkSettingsVisible(items) { if(items.vkExportInherit.checked) { BX.adjust(items.vkExportEnable, {props: {disabled: true}}); hideSettings(items); setParentValues(items); } else { BX.adjust(items.vkExportEnable, {props: {disabled: false}}); if(!items.vkExportEnable.checked) { hideSettings(items); } else { BX.adjust(items.vkExportToAlbum, {props: {disabled: false}}); BX.adjust(items.vkExportVkCategory, {props: {disabled: false}}); checkSettingsVisibleAlbums(items); } } } function setParentValues(items) { //checkboxes BX.adjust(items.vkExportEnable, {props: {checked: items.vkExportEnableParent.value}}); BX.adjust(items.vkExportIncludeChilds, {props: {checked: items.vkExportIncludeChildsParent.value}}); //values fields items.vkExportToAlbum.value = items.vkExportToAlbumParent.value; items.vkExportToAlbumAlias.value = items.vkExportToAlbumAliasParent.value; items.vkExportVkCategory.value = items.vkExportVkCategoryParent.value; } function hideSettings(items) { BX.adjust(items.vkExportToAlbum, {props: {disabled: true}}); BX.adjust(items.vkExportToAlbumAlias, {props: {disabled: true}}); BX.adjust(items.vkExportIncludeChilds, {props: {disabled: true}}); BX.adjust(items.vkExportVkCategory, {props: {disabled: true}}); } function checkSettingsVisibleAlbums(items) { /* only if change NOT main album */ var toAlbumAliasVisible = (items.vkExportToAlbum.value == items.vkExportToAlbumCurrent.value && items.vkExportToAlbum.value > 0) ? false : true; BX.adjust(items.vkExportToAlbumAlias, {props: {disabled: toAlbumAliasVisible}}); BX.adjust(items.vkExportIncludeChilds, {props: {disabled: (items.vkExportToAlbum.value > 0 ? false : true)}}); } }); </script> "; return $resultHtml; } /** * Load values from post if page was be refreshed * * @param $settings array of settings * @param $exportId * @return mixed */ private function compareSettingsWithPost($settings, $exportId) { // not need check INHERIT and ENABLE. Patamushta not need if ($_POST['VK_EXPORT'][$exportId]["TO_ALBUM"]) $settings["TO_ALBUM"] = $_POST['VK_EXPORT'][$exportId]["TO_ALBUM"]; if ($_POST['VK_EXPORT'][$exportId]["TO_ALBUM_ALIAS"]) $settings["TO_ALBUM_ALIAS"] = $_POST['VK_EXPORT'][$exportId]["TO_ALBUM_ALIAS"]; if ($_POST['VK_EXPORT'][$exportId]["VK_CATEGORY"]) $settings["VK_CATEGORY"] = $_POST['VK_EXPORT'][$exportId]["VK_CATEGORY"]; $settings["INCLUDE_CHILDS"] = $_POST['VK_EXPORT'][$exportId]["INCLUDE_CHILDS"] ? true : $settings["INCLUDE_CHILDS"]; return $settings; } }