PageRenderTime 54ms CodeModel.GetById 25ms RepoModel.GetById 0ms app.codeStats 0ms

/bitrix/modules/greensight_utils/admin/greensight_iblock_import.php

https://github.com/RosYama/rosyama.ru
PHP | 283 lines | 258 code | 11 blank | 14 comment | 19 complexity | bde6751f339242f480d1e56b125ee6b7 MD5 | raw file
  1. <?php
  2. /**
  3. * Файл импорта структуры инфоблоков административной чавсти модуля greensight_utils
  4. */
  5. require_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/prolog_admin_before.php');
  6. IncludeModuleLangFile(__FILE__);
  7. $APPLICATION->SetTitle(GetMessage('GREENSIGHT_IBLOCK_IMPORT_TITLE'));
  8. if(!$USER->IsAdmin()) $APPLICATION->AuthForm(GetMessage("ACCESS_DENIED"));
  9. include($_SERVER["DOCUMENT_ROOT"].BX_ROOT."/modules/main/include/prolog_admin_after.php");
  10. if($_POST)
  11. {
  12. do
  13. {
  14. $DB->StartTransaction();
  15. // создание инфоблока, если надо
  16. if($_POST['iblock_type'] == '0')
  17. {
  18. $cibt = new CIBlockType();
  19. if(
  20. $cibt->Add(array
  21. (
  22. 'ID' => $_POST['newiblocktype_id'],
  23. 'SECTIONS' => 'Y',
  24. 'EDIT_FILE_BEFORE' => '',
  25. 'EDIT_FILE_AFTER' => '',
  26. 'IN_RSS' => 'N',
  27. 'SORT' => 500,
  28. 'LANG' => array
  29. (
  30. 'en' => array
  31. (
  32. 'NAME' => $_POST['newiblocktype_id'],
  33. 'SECTION_NAME' => 'Sections',
  34. 'ELEMENT_NAME' => 'Elements'
  35. ),
  36. 'ru' => array
  37. (
  38. 'NAME' => $_POST['newiblocktype_name'],
  39. 'SECTION_NAME' => 'Секции',
  40. 'ELEMENT_NAME' => 'Элементы'
  41. )
  42. )
  43. ))
  44. )
  45. {
  46. $iBlockTypeID = $_POST['newiblocktype_id'];
  47. }
  48. else
  49. {
  50. $DB->Rollback();
  51. ShowError(GetMessage('GREENSIGHT_IBLOCK_IMPORT_ERROR_TYPE_CREATE'));
  52. break;
  53. }
  54. }
  55. // выбрать нужный тип инфоблока
  56. if(!$iBlockTypeID)
  57. {
  58. $rsIBlockType = CIBlockType::GetByID($_POST['iblock_type']);
  59. $iBlockTypeID = $rsIBlockType->Fetch();
  60. $iBlockTypeID = $iBlockTypeID['ID'];
  61. }
  62. if(!$iBlockTypeID)
  63. {
  64. $DB->Rollback();
  65. ShowError(GetMessage('GREENSIGHT_IBLOCK_IMPORT_ERROR_TYPE_SELECT'));
  66. break;
  67. }
  68. // загрузка файла в переменную
  69. $data = explode("\n", file_get_contents($_FILES['import_file']['tmp_name']));
  70. if($data[0][0] == '#')
  71. {
  72. unset($data[0]);
  73. }
  74. if(!strlen($data[1]))
  75. {
  76. unset($data[1]);
  77. }
  78. $data = implode("\n", $data);
  79. eval('$data = '.$data.';');
  80. if(!is_array($data) || !sizeof($data))
  81. {
  82. ShowError(GetMessage('GREENSIGHT_IBLOCK_IMPORT_ERROR_EVAL'));
  83. break;
  84. }
  85. // импорт структуры
  86. $cib = new CIBlock();
  87. $cibp = new CIBlockProperty();
  88. foreach($data as &$_iblock_data)
  89. {
  90. $rsIBlock = $cib->GetList(false, array('CODE' => $_iblock_data['CODE'], 'TYPE' => $iBlockTypeID));
  91. $arIBlock = $rsIBlock->Fetch();
  92. if($arIBlock['ID'])
  93. {
  94. if($_POST['overwrite'] == '1')
  95. {
  96. // если инфоблоки перезаписываем, удалим имеющийся
  97. $cib->Delete($arIBlock['ID']);
  98. }
  99. else
  100. {
  101. // если инфблоки не перезаписываем, то пропускаем этот
  102. continue;
  103. }
  104. }
  105. // создание инфоблоков
  106. if(!$cib->Add(array
  107. (
  108. 'SITE_ID' => array($_iblock_data['LID']),
  109. 'CODE' => $_iblock_data['CODE'],
  110. 'EXTERNAL_ID' => $_iblock_data['EXTERNAL_ID'],
  111. 'XML_ID' => $_iblock_data['XML_ID'],
  112. 'IBLOCK_TYPE_ID' => $iBlockTypeID,
  113. 'NAME' => $_iblock_data['NAME'],
  114. 'ACTIVE' => $_iblock_data['ACTIVE'],
  115. 'SORT' => $_iblock_data['SORT'],
  116. 'LIST_PAGE_URL' => $_iblock_data['LIST_PAGE_URL'],
  117. 'SECTION_PAGE_URL' => $_iblock_data['SECTION_PAGE_URL'],
  118. 'DETAIL_PAGE_URL' => $_iblock_data['DETAIL_PAGE_URL'],
  119. 'PICTURE' => $_iblock_data['PICTURE'],
  120. 'DESCRIPTION' => $_iblock_data['DESCRIPTION'],
  121. 'DESCRIPTION_TYPE' => $_iblock_data['DESCRIPTION_TYPE'],
  122. 'RSS_ACTIVE' => $_iblock_data['RSS_ACTIVE'],
  123. 'RSS_TTL' => $_iblock_data['RSS_TTL'],
  124. 'RSS_FILE_ACTIVE' => $_iblock_data['RSS_FILE_ACTIVE'],
  125. 'RSS_FILE_LIMIT' => $_iblock_data['RSS_FILE_LIMIT'],
  126. 'RSS_FILE_DAYS' => $_iblock_data['RSS_FILE_DAYS'],
  127. 'RSS_YANDEX_ACTIVE' => $_iblock_data['RSS_YANDEX_ACTIVE'],
  128. 'INDEX_ELEMENT' => $_iblock_data['INDEX_ELEMENT'],
  129. 'INDEX_SECTION' => $_iblock_data['INDEX_SECTION'],
  130. 'WORKFLOW' => $_iblock_data['WORKFLOW'],
  131. 'SECTION_CHOOSER' => $_iblock_data['SECTION_CHOOSER'],
  132. 'VERSION' => $_iblock_data['VERSION'],
  133. 'EDIT_FILE_BEFORE' => $_iblock_data['EDIT_FILE_BEFORE'],
  134. 'EDIT_FILE_AFTER' => $_iblock_data['EDIT_FILE_AFTER']
  135. ))
  136. )
  137. {
  138. $DB->Rollback();
  139. ShowError(GetMessage('GREENSIGHT_IBLOCK_IMPORT_ERROR_IBLOCK_CREATE'));
  140. break 2;
  141. }
  142. $rsIBlock = $cib->GetList(false, array('CODE' => $_iblock_data['CODE'], 'TYPE' => $iBlockTypeID));
  143. $arIBlock = $rsIBlock->Fetch();
  144. // добавление свойств
  145. if(sizeof($_iblock_data['properties']))
  146. {
  147. foreach($_iblock_data['properties'] as &$_iblock_property)
  148. {
  149. $_property = array
  150. (
  151. 'CODE' => $_iblock_property['CODE'],
  152. 'XML_ID' => $_iblock_property['XML_ID'],
  153. 'IBLOCK_ID' => $arIBlock['ID'],
  154. 'NAME' => $_iblock_property['NAME'],
  155. 'ACTIVE' => $_iblock_property['ACTIVE'],
  156. 'SORT' => $_iblock_property['SORT'],
  157. 'PROPERTY_TYPE' => $_iblock_property['PROPERTY_TYPE'],
  158. 'MULTIPLE' => $_iblock_property['MULTIPLE'],
  159. 'DEFAULT_VALUE' => $_iblock_property['DEFAULT_VALUE'],
  160. 'ROW_COUNT' => $_iblock_property['ROW_COUNT'],
  161. 'COL_COUNT' => $_iblock_property['COL_COUNT'],
  162. 'LIST_TYPE' => $_iblock_property['LIST_TYPE'],
  163. 'MULTIPLE_CNT' => $_iblock_property['MULTIPLE_CNT'],
  164. 'FILE_TYPE' => $_iblock_property['FILE_TYPE'],
  165. 'SEARCHABLE' => $_iblock_property['SEARCHABLE'],
  166. 'FILTRABLE' => $_iblock_property['FILTRABLE'],
  167. 'LINK_IBLOCK_ID' => $_iblock_property['LINK_IBLOCK_ID'],
  168. 'WITH_DESCRIPTION' => $_iblock_property['WITH_DESCRIPTION'],
  169. 'VERSION' => $_iblock_property['VERSION'],
  170. 'USER_TYPE' => $_iblock_property['USER_TYPE']
  171. );
  172. // варианты значений свойств типа "список"
  173. if(sizeof($_iblock_property['list_values']))
  174. {
  175. foreach($_iblock_property['list_values'] as &$_list_value)
  176. {
  177. $_property['VALUES'][] = array
  178. (
  179. 'VALUE' => $_list_value['VALUE'],
  180. 'DEF' => $_list_value['DEF'],
  181. 'SORT' => $_list_value['SORT'],
  182. 'XML_ID' => $_list_value['XML_ID'],
  183. 'EXTERNAL_ID' => $_list_value['EXTERNAL_ID']
  184. );
  185. }
  186. }
  187. if(!$cibp->Add($_property))
  188. {
  189. $DB->Rollback();
  190. ShowError(GetMessage('GREENSIGHT_IBLOCK_IMPORT_ERROR_PROP_CREATE'));
  191. break 3;
  192. }
  193. }
  194. }
  195. }
  196. }
  197. while(false);
  198. $DB->Commit();
  199. echo GetMessage('GREENSIGHT_IBLOCK_IMPORT_OK');
  200. }
  201. // подготовка данных для формы
  202. // список типов инфоблоков
  203. $arIBTypes = array(
  204. 'REFERENCE' => array(
  205. GetMessage('GREENSIGHT_IBLOCK_IMPORT_NEW')
  206. ),
  207. 'REFERENCE_ID' => array(
  208. 0
  209. )
  210. );
  211. $rsIBTypes = CIBlockType::GetList();
  212. while($ar = $rsIBTypes->Fetch())
  213. {
  214. $ar2 = CIBlockType::GetByIDLang($ar['ID'], LANGUAGE_ID);
  215. $arIBTypes['REFERENCE'][] = $ar2['NAME'].' ('.$ar['ID'].')';
  216. $arIBTypes['REFERENCE_ID'][] = $ar['ID'];
  217. }
  218. ?>
  219. <form action="<?= BX_ROOT ?>/admin/greensight_iblock_import.php" method="post" enctype="multipart/form-data">
  220. <table class="list" cellspacing="0">
  221. <tr class="gutter">
  222. <td class="left"><div class="empty"></div></td><td class="right"><div class="empty"></div></td>
  223. </tr>
  224. <tr class="head">
  225. <td class="left">&nbsp;</td><td class="right">&nbsp;</td>
  226. </tr>
  227. <tr class="odd">
  228. <td class="left">
  229. <?= GetMessage('GREENSIGHT_IBLOCK_IMPORT_IBLOCK_TYPE'); ?>
  230. </td>
  231. <td class="right">
  232. <?= SelectBoxFromArray('iblock_type', $arIBTypes, false, false, 'onchange="document.getElementById(\'newiblocktypediv\').style.display=(this.value==0 ? \'block\' : \'none\')"') ?>
  233. <div id="newiblocktypediv">
  234. <a href="/bitrix/admin/iblock_type_admin.php" target="_blank"><?= GetMessage('GREENSIGHT_IBLOCK_IMPORT_GO') ?></a> <?= GetMessage('GREENSIGHT_IBLOCK_IMPORT_OR') ?><br>
  235. <table>
  236. <tr>
  237. <td><label for="newiblocktype_name"><?= GetMessage('GREENSIGHT_IBLOCK_IMPORT_NAME') ?></label></td>
  238. <td><input type="text" name="newiblocktype_name" id="newiblocktype_name"></td>
  239. </tr>
  240. <tr>
  241. <td><label for="newiblocktype_id"><?= GetMessage('GREENSIGHT_IBLOCK_IMPORT_ID') ?></label></td>
  242. <td><input type="text" name="newiblocktype_id" id="newiblocktype_id"></td>
  243. </tr>
  244. </table>
  245. </div>
  246. </td>
  247. </tr>
  248. <tr class="even">
  249. <td class="left">
  250. <?= GetMessage('GREENSIGHT_IBLOCK_IMPORT_OVERWRITE_MODE'); ?>
  251. </td>
  252. <td class="right">
  253. <input type="radio" name="overwrite" value="1" id="overwrite1" checked>
  254. <label for="overwrite1"><?= GetMessage('GREENSIGHT_IBLOCK_IMPORT_OVERWRITE_MODE1'); ?></label><br>
  255. <input type="radio" name="overwrite" value="0" id="overwrite0">
  256. <label for="overwrite0"><?= GetMessage('GREENSIGHT_IBLOCK_IMPORT_OVERWRITE_MODE0'); ?></label><br>
  257. </td>
  258. </tr>
  259. <tr class="odd">
  260. <td class="left">
  261. <?= GetMessage('GREENSIGHT_IBLOCK_IMPORT_FILE'); ?>
  262. </td>
  263. <td class="right">
  264. <input type="file" name="import_file">
  265. </td>
  266. </tr>
  267. </table>
  268. <input type="submit" value="<?= GetMessage('GREENSIGHT_IBLOCK_IMPORT_SUBMIT') ?>">
  269. </form>
  270. <?
  271. include($_SERVER["DOCUMENT_ROOT"].BX_ROOT."/modules/main/include/epilog_admin.php");
  272. ?>