PageRenderTime 27ms CodeModel.GetById 24ms RepoModel.GetById 0ms app.codeStats 0ms

/modules/catalog/tools/iblock_catalog_edit.php

https://gitlab.com/alexprowars/bitrix
PHP | 423 lines | 390 code | 31 blank | 2 comment | 59 complexity | ef7d8f2a1c0ba9f31d09170f67604f6b MD5 | raw file
  1. <?
  2. /** @global CMain $APPLICATION */
  3. /** @global CUser $USER */
  4. use Bitrix\Main,
  5. Bitrix\Main\Loader,
  6. Bitrix\Main\Localization\Loc,
  7. Bitrix\Iblock,
  8. Bitrix\Catalog,
  9. Bitrix\Catalog\Helpers\Admin\CatalogEdit;
  10. require_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/prolog_admin_before.php');
  11. Loc::loadMessages(__FILE__);
  12. $readOnly = !$USER->CanDoOperation('catalog_settings');
  13. if ($readOnly && !$USER->CanDoOperation('catalog_read'))
  14. {
  15. require($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/prolog_admin_after.php');
  16. ShowError(Loc::getMessage('BX_CATALOG_SETTINGS_ACCESS_DENIED'));
  17. require($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/epilog_admin.php');
  18. die();
  19. }
  20. Loader::includeModule('catalog');
  21. require_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/iblock/classes/general/subelement.php');
  22. $request = Main\Context::getCurrent()->getRequest();
  23. $iblockId = (isset($request['IBLOCK_ID']) ? (int)$request['IBLOCK_ID'] : 0);
  24. $catalogEdit = new CatalogEdit($iblockId);
  25. if (!$catalogEdit->isSuccess())
  26. {
  27. require($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/prolog_admin_after.php');
  28. ShowError(implode(' ', $catalogEdit->getErrors()));
  29. require($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/epilog_admin.php');
  30. die();
  31. }
  32. $iblock = $catalogEdit->getIblock();
  33. $enableSaleRecurring = $catalogEdit->isEnableRecurring();
  34. $tabList = array(
  35. array(
  36. 'ICON' => 'catalog',
  37. 'DIV' => 'iblockCatalogEdit01',
  38. 'TAB' => Loc::getMessage('BX_CAT_IBLOCK_CATALOG_EDIT_TAB_NAME_COMMON'),
  39. 'TITLE' => Loc::getMessage('BX_CAT_IBLOCK_CATALOG_EDIT_TAB_TITLE_COMMON')
  40. )
  41. );
  42. $postParams = array(
  43. 'bxpublic' => 'Y',
  44. 'sessid' => bitrix_sessid()
  45. );
  46. $listUrl = array(
  47. 'LINK' => $APPLICATION->GetCurPageParam(),
  48. 'POST_PARAMS' => $postParams,
  49. );
  50. unset($postParams);
  51. $iblockCatalogFormID = 'iblockCatalogControl';
  52. $control = new CAdminSubForm($iblockCatalogFormID, $tabList, false, true, $listUrl, false);
  53. $iblockCatalogFormID .= '_form';
  54. unset($tabList);
  55. $vatList = array(0 => Loc::getMessage('BX_CAT_IBLOCK_CATALOG_MESS_NOT_SELECT'));
  56. $vatIterator = Catalog\VatTable::getList(array(
  57. 'select' => array('ID', 'NAME', 'SORT'),
  58. 'order' => array('SORT' => 'ASC', 'ID' => 'ASC')
  59. ));
  60. while ($vat = $vatIterator->fetch())
  61. $vatList[$vat['ID']] = $vat['NAME'];
  62. unset($vat, $vatIterator);
  63. $errors = array();
  64. $fields = array();
  65. if ($request->isPost() && $request['save'] != '')
  66. {
  67. if (!check_bitrix_sessid())
  68. {
  69. $errors[] = Loc::getMessage('BX_CAT_IBLOCK_CATALOG_IBLOCK_BAD_SESSION');
  70. }
  71. if (empty($errors))
  72. {
  73. $post = $request->getPostList()->toArray();
  74. $catalogEdit->saveCatalog($post);
  75. if (!$catalogEdit->isSuccess())
  76. {
  77. $errors = $catalogEdit->getErrors();
  78. }
  79. }
  80. if (empty($errors))
  81. {
  82. }
  83. if (!empty($errors))
  84. {
  85. $errorMessage = new CAdminMessage(
  86. array(
  87. 'DETAILS' => implode('<br>', $errors),
  88. 'TYPE' => 'ERROR',
  89. 'MESSAGE' => Loc::getMessage('BX_CAT_IBLOCK_CATALOG_ERR_SAVE'),
  90. 'HTML' => true
  91. )
  92. );
  93. echo $errorMessage->Show();
  94. }
  95. else
  96. {
  97. CAdminSubForm::closeSubForm();
  98. }
  99. }
  100. elseif ($request['dontsave'] != '')
  101. {
  102. CAdminSubForm::closeSubForm(false);
  103. }
  104. $APPLICATION->SetTitle(Loc::getMessage('BX_CAT_IBLOCK_CATALOG_EDIT_TITLE_EDIT'));
  105. Main\Page\Asset::getInstance()->addJs('/bitrix/js/catalog/iblock_catalog.js');
  106. require($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/prolog_admin_after.php');
  107. $defaultValues = array(
  108. 'IBLOCK_ID' => $iblockId,
  109. 'PRODUCT_IBLOCK_ID' => 0,
  110. 'SKU_PROPERTY_ID' => 0,
  111. 'YANDEX_EXPORT' => 'N',
  112. 'SUBSCRIPTION' => 'N',
  113. 'VAT_ID' => 0,
  114. 'CATALOG' => 'N',
  115. 'CATALOG_TYPE' => ''
  116. );
  117. $catalog = $catalogEdit->getCatalog();
  118. if (empty($catalog))
  119. $catalog = $defaultValues;
  120. if (!empty($errors))
  121. $catalog = array_merge($catalog, $fields);
  122. $offerList = array();
  123. $productIblock = array();
  124. if ($catalog['CATALOG_TYPE'] != CCatalogSKU::TYPE_OFFERS)
  125. {
  126. $iblockList = array();
  127. $productList = array();
  128. $iblockIterator = Catalog\CatalogIblockTable::getList(array(
  129. 'select' => array('PRODUCT_IBLOCK_ID'),
  130. 'filter' => array('!=PRODUCT_IBLOCK_ID' => 0),
  131. ));
  132. while ($product = $iblockIterator->fetch())
  133. {
  134. $product['PRODUCT_IBLOCK_ID'] = (int)$product['PRODUCT_IBLOCK_ID'];
  135. $productList[$product['PRODUCT_IBLOCK_ID']] = $product['PRODUCT_IBLOCK_ID'];
  136. }
  137. unset($product, $iblockIterator);
  138. $iblockIterator = Catalog\CatalogIblockTable::getList(array(
  139. 'select' => array('IBLOCK_ID'),
  140. 'filter' => array('!=IBLOCK_ID' => $iblockId, '=PRODUCT_IBLOCK_ID' => 0),
  141. 'order' => array('IBLOCK_ID' => 'ASC')
  142. ));
  143. while ($offer = $iblockIterator->fetch())
  144. {
  145. $offer['IBLOCK_ID'] = (int)$offer['IBLOCK_ID'];
  146. if (!isset($productList[$offer['IBLOCK_ID']]) && $offer['IBLOCK_ID'] != $iblockId)
  147. $iblockList[$offer['IBLOCK_ID']] = $offer['IBLOCK_ID'];
  148. }
  149. unset($offer, $iblockIterator);
  150. unset($productList);
  151. if ($catalog['CATALOG_TYPE'] == CCatalogSKU::TYPE_PRODUCT || $catalog['CATALOG_TYPE'] == CCatalogSKU::TYPE_FULL)
  152. $iblockList[$catalog['IBLOCK_ID']] = $catalog['IBLOCK_ID'];
  153. if (!empty($iblockList))
  154. {
  155. $siteList = array_fill_keys($iblockList, array());
  156. $sitesIterator = Iblock\IblockSiteTable::getList(array(
  157. 'select' => array('IBLOCK_ID', 'SITE_ID'),
  158. 'filter' => array('@IBLOCK_ID' => $iblockList),
  159. 'order' => array('IBLOCK_ID' => 'ASC', 'SITE_ID' => 'ASC')
  160. ));
  161. while ($site = $sitesIterator->fetch())
  162. $siteList[$site['IBLOCK_ID']][] = $site['SITE_ID'];
  163. unset($site, $sitesIterator);
  164. foreach ($siteList as $siteIblock => $sites)
  165. {
  166. if ($iblock['SITES'] == implode('|', $sites))
  167. $offerList[] = $siteIblock;
  168. }
  169. unset($siteIblock, $sites);
  170. unset($siteList);
  171. }
  172. unset($iblockList);
  173. }
  174. else
  175. {
  176. $productIblock = Iblock\IblockTable::getList(array(
  177. 'select' => array('ID', 'NAME', 'IBLOCK_TYPE_ID', 'ACTIVE', 'PROPERTY_INDEX'),
  178. 'filter' => array('=ID' => $catalog['PRODUCT_IBLOCK_ID'])
  179. ))->fetch();
  180. }
  181. $showSubscription = ($enableSaleRecurring || $catalog['SUBSCRIPTION'] == 'Y');
  182. $rowDisplay = ($catalog['CATALOG'] == 'Y' ? 'table-row' : 'none');
  183. $control->BeginPrologContent();
  184. $control->EndPrologContent();
  185. $control->BeginEpilogContent();
  186. ?>
  187. <input type="hidden" name="lang" value="<? echo LANGUAGE_ID; ?>">
  188. <input type="hidden" name="IBLOCK_ID" value="<? echo $iblockId; ?>">
  189. <?
  190. echo bitrix_sessid_post();
  191. $control->EndEpilogContent();
  192. $control->Begin(array(
  193. 'FORM_ACTION' => 'cat_iblock_catalog_edit.php?lang='.LANGUAGE_ID
  194. ));
  195. $control->BeginNextFormTab();
  196. $control->AddViewField('IBLOCK_ID', Loc::getMessage('BX_CAT_IBLOCK_CATALOG_FIELD_IBLOCK_ID'), $iblockId);
  197. $control->AddViewField('IBLOCK_NAME', Loc::getMessage('BX_CAT_IBLOCK_CATALOG_FIELD_IBLOCK_NAME'), $iblock['NAME']);
  198. $control->AddViewField('IBLOCK_TYPE', Loc::getMessage('BX_CAT_IBLOCK_CATALOG_FIELD_IBLOCK_TYPE'), $iblock['TYPE']);
  199. $control->AddViewField('IBLOCK_SITE', Loc::getMessage('BX_CAT_IBLOCK_CATALOG_FIELD_IBLOCK_SITES'), $iblock['SITES']);
  200. $control->AddViewField(
  201. 'IBLOCK_ACTIVE',
  202. Loc::getMessage('BX_CAT_IBLOCK_CATALOG_FIELD_IBLOCK_ACTIVE'),
  203. ($iblock['ACTIVE'] == 'Y' ? Loc::getMessage('BX_CAT_IBLOCK_CATALOG_MESS_YES') : Loc::getMessage('BX_CAT_IBLOCK_CATALOG_MESS_NO'))
  204. );
  205. $control->BeginCustomField('CATALOG', Loc::getMessage('BX_CAT_IBLOCK_CATALOG_FIELD_CATALOG'), true);
  206. ?><tr id="tr_CATALOG">
  207. <td style="width: 40%;"><? echo $control->GetCustomLabelHTML(); ?></td>
  208. <td style="width: 60%;">
  209. <input type="hidden" name="CATALOG" value="N" id="CATALOG_N">
  210. <input data-checkbox="Y" type="checkbox" name="CATALOG" value="Y" id="CATALOG_Y"<?
  211. echo ($catalog['CATALOG'] == 'Y' ? ' checked' : '').($catalog['CATALOG_TYPE'] == CCatalogSKU::TYPE_OFFERS ? ' disabled' : '');
  212. ?>>
  213. </td>
  214. </tr><?
  215. $control->EndCustomField('CATALOG', '<input type="hidden" name="CATALOG" value="'.$catalog['CATALOG'].'">');
  216. $hiddenValue = '';
  217. $control->BeginCustomField('SKU', Loc::getMessage('BX_CAT_IBLOCK_CATALOG_FIELD_SKU'));
  218. ?><tr id="tr_SKU">
  219. <td style="width: 40%; vertical-align: top;"><? echo $control->GetCustomLabelHTML(); ?></td>
  220. <td style="width: 60%;"><?
  221. $productIblockId = 0;
  222. if ($catalog['CATALOG_TYPE'] == CCatalogSKU::TYPE_OFFERS)
  223. {
  224. ?><input type="hidden" name="USE_SKU" value="N" id="USE_SKU_N"><?
  225. $hiddenValue = '<input type="hidden" name="USE_SKU" value="N">';
  226. if (empty($productIblock))
  227. {
  228. echo Loc::getMessage('BX_CAT_IBLOCK_CATALOG_ERR_BAD_PRODUCT_IBLOCK', array('#ID#' => $catalog['PRODUCT_IBLOCK_ID']));
  229. }
  230. else
  231. {
  232. echo Loc::getMessage(
  233. 'BX_CAT_IBLOCK_CATALOG_MESS_PRODUCT_IBLOCK',
  234. array(
  235. '#LINK#' => '',
  236. '#TITLE#' => '['.$productIblock['ID'].'] '.htmlspecialcharsEx($productIblock['NAME'])
  237. )
  238. );
  239. }
  240. $productIblockId = $catalog['PRODUCT_IBLOCK_ID'];
  241. ?><input type="hidden" name="SKU" value="<? echo $productIblockId; ?>"><?
  242. }
  243. else
  244. {
  245. if ($catalog['CATALOG_TYPE'] == CCatalogSKU::TYPE_PRODUCT || $catalog['CATALOG_TYPE'] == CCatalogSKU::TYPE_FULL)
  246. $productIblockId = $catalog['IBLOCK_ID'];
  247. $showSku = ($productIblockId > 0);
  248. $hiddenValue = '<input type="hidden" name="USE_SKU" value="'.($showSku ? 'Y' : 'N').'">';
  249. ?><input type="hidden" name="USE_SKU" value="N" id="USE_SKU_N">
  250. <input data-checkbox="Y" type="checkbox" name="USE_SKU" value="Y" id="USE_SKU_Y"<? echo ($showSku ? ' checked' : ''); ?>>
  251. <div id="sku_data" style="display: <? echo ($showSku ? 'block' : 'none'); ?>;">
  252. <?
  253. if (!empty($offerList))
  254. {
  255. echo GetIBlockDropDownListEx(
  256. $productIblockId,
  257. 'SKU_TYPE',
  258. 'SKU',
  259. array(
  260. 'ID' => $offerList,
  261. 'MIN_PERMISSION' => 'R'
  262. )
  263. );
  264. }
  265. else
  266. {
  267. echo Loc::getMessage('BX_CAT_IBLOCK_CATALOG_MESS_EMPTY_OFFERS_LIST');
  268. }
  269. ?></div><?
  270. }
  271. ?></td>
  272. </tr><?
  273. $hiddenValue .= '<input type="hidden" name="SKU" value="'.$productIblockId.'">';
  274. $control->EndCustomField('SKU', $hiddenValue);
  275. unset($hiddenValue);
  276. if ($showSubscription)
  277. {
  278. $hiddenValue = $catalog['SUBSCRIPTION'];
  279. $control->BeginCustomField('SUBSCRIPTION', Loc::getMessage('BX_CAT_IBLOCK_CATALOG_FIELD_SUBSCRIPTION'));
  280. ?>
  281. <tr id="tr_SUBSCRIPTION" style="display: <? echo $rowDisplay; ?>;">
  282. <td style="width: 40%;"><? echo $control->GetCustomLabelHTML(); ?></td>
  283. <td style="width: 60%;"><?
  284. if ($enableSaleRecurring)
  285. {
  286. $subscriptionWithSku = ($catalog['CATALOG_TYPE'] == CCatalogSKU::TYPE_PRODUCT || $catalog['CATALOG_TYPE'] == CCatalogSKU::TYPE_FULL);
  287. ?><input type="hidden" name="SUBSCRIPTION" value="N" id="SUBSCRIPTION_N">
  288. <input data-checkbox="Y" type="checkbox" name="SUBSCRIPTION" value="Y" id="SUBSCRIPTION_Y"<?
  289. echo ($catalog['SUBSCRIPTION'] == 'Y' ? ' checked' : '').(
  290. $subscriptionWithSku ? ' disabled' : ''
  291. );
  292. ?>><?
  293. if ($subscriptionWithSku && $catalog['SUBSCRIPTION'] == 'Y')
  294. {
  295. $hiddenValue = 'N';
  296. ?><br><? echo Loc::getMessage('BX_CAT_IBLOCK_CATALOG_MESS_SUBSCRIPTION_WITH_SKU');
  297. }
  298. unset($subscriptionWithSku);
  299. }
  300. else
  301. {
  302. ?><input data-checkbox="Y" type="checkbox" name="SUBSCRIPTION" value="Y" id="SUBSCRIPTION_Y" checked disabled>
  303. <input type="hidden" name="SUBSCRIPTION" value="N" id="SUBSCRIPTION_N"><br><?
  304. echo Loc::getMessage('BX_CAT_IBLOCK_CATALOG_MESS_SUBSCRIPTION_RESET');
  305. $hiddenValue = 'N';
  306. }
  307. ?></td>
  308. </tr><?
  309. $control->EndCustomField('SUBSCRIPTION', '<input type="hidden" name="SUBSCRIPTION" value="'.$hiddenValue.'">');
  310. unset($hiddenValue);
  311. }
  312. $control->BeginCustomField('YANDEX_EXPORT', Loc::getMessage('BX_CAT_IBLOCK_CATALOG_FIELD_YANDEX_EXPORT'));
  313. $hiddenValue = $catalog['YANDEX_EXPORT'];
  314. ?>
  315. <tr id="tr_YANDEX_EXPORT" style="display: <? echo $rowDisplay; ?>;">
  316. <td style="width: 40%;"><? echo $control->GetCustomLabelHTML(); ?></td>
  317. <td style="width: 60%;">
  318. <input type="hidden" id="YANDEX_EXPORT_N" name="YANDEX_EXPORT" value="N">
  319. <input type="checkbox" id="YANDEX_EXPORT_Y" name="YANDEX_EXPORT" value="Y"<? echo($catalog['YANDEX_EXPORT'] == 'Y' ? ' checked' : '');?>>
  320. </td>
  321. </tr><?
  322. $control->EndCustomField('YANDEX_EXPORT', $hiddenValue);
  323. unset($hiddenValue);
  324. $control->BeginCustomField('VAT_ID', Loc::getMessage('BX_CAT_IBLOCK_CATALOG_FIELD_VAT_ID'));
  325. $hiddenValue = $catalog['VAT_ID'];
  326. ?><tr id="tr_VAT_ID" style="display: <? echo $rowDisplay; ?>;">
  327. <td style="width: 40%;"><? echo $control->GetCustomLabelHTML(); ?></td>
  328. <td style="width: 60%;">
  329. <select name="VAT_ID">
  330. <?
  331. foreach ($vatList as $vatId => $vatName)
  332. {
  333. ?><option value="<? echo $vatId; ?>"<? echo ($catalog['VAT_ID'] == $vatId ? ' selected' : ''); ?>><? echo htmlspecialcharsEx($vatName); ?></option><?
  334. }
  335. unset($vatId, $vatName);
  336. ?>
  337. </select>
  338. </td>
  339. </tr><?
  340. $control->EndCustomField('VAT_ID', $hiddenValue);
  341. $save = "{
  342. title: '".CUtil::JSEscape(Loc::getMessage('BX_CAT_IBLOCK_CATALOG_BTN_SAVE'))."',
  343. id: 'saveCatalogBtn',
  344. name: 'saveCatalogBtn',
  345. className: 'adm-btn-save',
  346. }";
  347. $cancel = "{
  348. title: '".CUtil::JSEscape(Loc::getMessage('BX_CAT_IBLOCK_CATALOG_BTN_CANCEL'))."',
  349. name: 'cancelCatalogBtn',
  350. id: 'cancelCatalogBtn',
  351. action: function() {
  352. top.BX.WindowManager.Get().AllowClose(); top.BX.WindowManager.Get().Close();
  353. if (!!top.ReloadSubList)
  354. top.ReloadSubList();
  355. }
  356. }";
  357. $control->ButtonsPublic(array(
  358. $save,
  359. $cancel
  360. ));
  361. unset($cancel, $save);
  362. $control->Show();
  363. unset($rowDisplay);
  364. echo BeginNote('id="'.$iblockCatalogFormID.'_process" style="display: none"');
  365. if ($enableSaleRecurring)
  366. {
  367. }
  368. echo EndNote();
  369. $ajaxSteps = array();
  370. if ($enableSaleRecurring)
  371. {
  372. }
  373. $jsParams = array(
  374. 'containerId' => $iblockCatalogFormID,
  375. 'enableSaleRecurring' => $enableSaleRecurring,
  376. 'isSku' => ($catalog['CATALOG_TYPE'] == CCatalogSKU::TYPE_OFFERS),
  377. 'processBlockId' => $iblockCatalogFormID.'_process',
  378. 'buttons' => array(
  379. 'save' => 'saveCatalogBtn',
  380. 'cancel' => 'cancelCatalogBtn'
  381. ),
  382. 'ajaxSteps' => $ajaxSteps
  383. );
  384. ?><script type="text/javascript">
  385. var iblockCatalogControl = new BX.Catalog.Admin.IblockCatalog(<? echo CUtil::PhpToJSObject($jsParams, false, false, true); ?>);
  386. BX.ready(function()
  387. {
  388. top.BX.WindowManager.Get().adjustSizeEx();
  389. });
  390. </script><?
  391. unset($jsParams);
  392. require($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/epilog_admin.php');