├── LICENSE ├── README.md └── migrations ├── cms ├── catalog │ └── AddNewCatalogGroup.php ├── forms │ └── AddNewWebForm.php ├── iblock │ ├── AddEnumIblockProperty.php │ ├── AddEnumIblockPropertyValues.php │ ├── AddIBlock.php │ ├── AddIblockProperty.php │ ├── AddNewIblockSection.php │ ├── DeleteIBlockProperty.php │ └── UpdateIblockProperty.php ├── main │ ├── AddAgent.php │ ├── AddMailEventTypeAndTemplate.php │ ├── AddSiteTemplateRule.php │ ├── AddUserField.php │ ├── AddUserGroup.php │ ├── AddUserGroups.php │ ├── RawSql.php │ └── SetOption.php └── sale │ ├── AddOrderProperty.php │ └── ClearSaleUserAccounts.php └── intranet └── crm └── AddNewDealStages.php /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2016 Rodion Abdurakhimov 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Примеры миграций баз данных для 1С-Битркс 2 | 3 | ##Главный модуль 4 | - [Добавить пользовательское свойство (или Highload Block поле)](migrations/cms/main/AddUserField.php) 5 | - [Добавить группу пользователей](migrations/cms/main/AddUserGroup.php) 6 | - [Добавить группы пользователей (Д7)](migrations/cms/main/AddUserGroups.php) 7 | - [Добавить агента](migrations/cms/main/AddAgent.php) 8 | - [Добавить записи в b_option](migrations/cms/main/SetOption.php) 9 | - [Добавить правило подключения шаблона сайта](migrations/cms/main/AddSiteTemplateRule.php) 10 | - [Добавить тип почтового события и шаблон](migrations/cms/main/AddMailEventTypeAndTemplate.php) 11 | 12 | ##Информационные блоки 13 | 14 | - [Добавить свойство инфоблока](migrations/cms/iblock/AddIblockProperty.php) 15 | - [Добавить свойство инфоблока типа Список](migrations/cms/iblock/AddEnumIblockProperty.php) 16 | - [Обновить свойство инфоблока](migrations/cms/iblock/UpdateIblockProperty.php) 17 | - [Обновить свойство инфоблока типа Список](migrations/cms/iblock/AddEnumIblockPropertyValues.php) 18 | - [Удалить свойство инфоблока](migrations/cms/iblock/DeleteIBlockProperty.php) 19 | - [Добавить новый раздел](migrations/cms/iblock/AddNewIblockSection.php) 20 | - [Добавить инфоблок](migrations/cms/iblock/AddIBlock.php) 21 | 22 | ##Интернет-магазин 23 | 24 | - [Добавить свойство заказа](migrations/cms/sale/AddOrderProperty.php) 25 | - [Обнулить внутренний счет](migrations/cms/sale/ClearSaleUserAccounts.php) 26 | 27 | ##Каталог 28 | 29 | - [Добавить тип цен](migrations/cms/catalog/AddNewCatalogGroup.php) 30 | 31 | ##Веб-формы 32 | 33 | - [Добавить веб-форму](migrations/cms/forms/AddNewWebForm.php) 34 | 35 | ##Другое 36 | 37 | - [Произвольный SQL-запрос](migrations/cms/main/RawSql.php) 38 | 39 | --- 40 | 41 | ##Кор. портал 42 | 43 | - [Новая стадия сделки](migrations/intranet/crm/AddNewDealStages.php) 44 | -------------------------------------------------------------------------------- /migrations/cms/catalog/AddNewCatalogGroup.php: -------------------------------------------------------------------------------- 1 | 'DISCOUNT_COUPONS', 19 | 'BASE' => 'N', 20 | 'SORT' => 100, 21 | 'XML_ID' => 'discount-coupons', 22 | 'USER_GROUP' => $priceUserGroups, 23 | 'USER_GROUP_BUY' => $priceUserGroups, 24 | 'USER_LANG' => array( 25 | 'ru' => 'Скидка по купону', 26 | 'en' => '', 27 | ), 28 | ); 29 | 30 | CCatalogGroup::Add($priceType); 31 | } 32 | 33 | public function down() 34 | { 35 | \Bitrix\Main\Loader::includeModule('catalog'); 36 | 37 | $dbPriceType = CCatalogGroup::GetList( 38 | array("SORT" => "ASC"), 39 | array("NAME" => "DISCOUNT_COUPONS") 40 | ); 41 | if ($arPriceType = $dbPriceType->Fetch()) { 42 | CCatalogGroup::Delete($arPriceType['ID']); 43 | } 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /migrations/cms/forms/AddNewWebForm.php: -------------------------------------------------------------------------------- 1 | self::$formName, 27 | 'SID' => self::$formId, 28 | 'C_SORT' => '300', 29 | 'BUTTON' => self::$formButton, 30 | 'USE_CAPTCHA' => 'N', 31 | 'DESCRIPTION' => '', 32 | 'DESCRIPTION_TYPE' => 'text', 33 | 'SHOW_TEMPLATE' => null, 34 | 'SHOW_RESULT_TEMPLATE' => null, 35 | 'PRINT_RESULT_TEMPLATE' => null, 36 | 'EDIT_RESULT_TEMPLATE' => null, 37 | 'FILTER_RESULT_TEMPLATE' => '', 38 | 'TABLE_RESULT_TEMPLATE' => '', 39 | 'USE_RESTRICTIONS' => 'N', 40 | 'RESTRICT_USER' => 0, 41 | 'RESTRICT_TIME' => 0, 42 | 'arRESTRICT_STATUS' => array(), 43 | 'STAT_EVENT1' => 'form', 44 | 'STAT_EVENT2' => self::$formId, 45 | 'STAT_EVENT3' => '', 46 | 'arIMAGE' => array( 47 | 'name' => '', 48 | 'type' => '', 49 | 'tmp_name' => '', 50 | 'error' => 4, 51 | 'size' => 0, 52 | 'MODULE_ID' => 'form', 53 | 'del' => null, 54 | ), 55 | 'arSITE' => self::$sites, 56 | 'arMAIL_TEMPLATE' => null, 57 | 'FORM_TEMPLATE' => '', 58 | 'USE_DEFAULT_TEMPLATE' => 'Y', 59 | 'arMENU' => array( 60 | 'ru' => self::$formName, 61 | 'en' => self::$formName, 62 | ), 63 | 'arGROUP' => array(), 64 | ); 65 | 66 | $res = intval($form->Set($arFormFields, 0, 'N')); 67 | 68 | //Если форма добавлена - добавить ей поля 69 | if ($res) { 70 | //Текстовое поле 71 | $fioField = array( 72 | 'FORM_ID' => $res, 73 | 'ACTIVE' => 'Y', 74 | 'TITLE' => 'ФИО', 75 | 'TITLE_TYPE' => 'text', 76 | 'SID' => 'fio', 77 | 'C_SORT' => '200', 78 | 'ADDITIONAL' => 'N', 79 | 'REQUIRED' => 'Y', 80 | 'IN_RESULTS_TABLE' => 'Y', 81 | 'IN_EXCEL_TABLE' => 'Y', 82 | 'FIELD_TYPE' => null, 83 | 'COMMENTS' => '', 84 | 'FILTER_TITLE' => '', 85 | 'RESULTS_TABLE_TITLE' => '', 86 | 'arIMAGE' => array( 87 | 'name' => '', 88 | 'type' => '', 89 | 'tmp_name' => '', 90 | 'error' => 4, 91 | 'size' => 0, 92 | 'MODULE_ID' => 'form', 93 | 'del' => null, 94 | ), 95 | 'arANSWER' => array( 96 | 0 => array( 97 | 'ID' => '0', 98 | 'DELETE' => null, 99 | 'MESSAGE' => 'ФИО', 100 | 'VALUE' => '', 101 | 'C_SORT' => '100', 102 | 'ACTIVE' => 'Y', 103 | 'FIELD_TYPE' => 'text', 104 | 'FIELD_WIDTH' => '', 105 | 'FIELD_HEIGHT' => null, 106 | 'FIELD_PARAM' => 'class="'.self::$formId.'_fio"', 107 | ), 108 | ), 109 | 'arFILTER_USER' => null, 110 | 'arFILTER_ANSWER_TEXT' => null, 111 | 'arFILTER_ANSWER_VALUE' => null, 112 | ); 113 | $formField->Set($fioField, 0, 'N'); 114 | 115 | //Радио кнопки 116 | $productTypeField = array( 117 | 'FORM_ID' => $res, 118 | 'ACTIVE' => 'Y', 119 | 'TITLE' => 'Тип товара', 120 | 'TITLE_TYPE' => 'text', 121 | 'SID' => 'product_type', 122 | 'C_SORT' => '100', 123 | 'ADDITIONAL' => 'N', 124 | 'REQUIRED' => 'Y', 125 | 'IN_RESULTS_TABLE' => 'Y', 126 | 'IN_EXCEL_TABLE' => 'Y', 127 | 'FIELD_TYPE' => null, 128 | 'COMMENTS' => '', 129 | 'FILTER_TITLE' => '', 130 | 'RESULTS_TABLE_TITLE' => '', 131 | 'arIMAGE' => array( 132 | 'name' => '', 133 | 'type' => '', 134 | 'tmp_name' => '', 135 | 'error' => 4, 136 | 'size' => 0, 137 | 'MODULE_ID' => 'form', 138 | 'del' => null, 139 | ), 140 | 'arANSWER' => array( 141 | 0 => array( 142 | 'ID' => '0', 143 | 'DELETE' => null, 144 | 'MESSAGE' => 'лодка', 145 | 'VALUE' => 'boat', 146 | 'C_SORT' => '100', 147 | 'ACTIVE' => 'Y', 148 | 'FIELD_TYPE' => 'radio', 149 | 'FIELD_WIDTH' => null, 150 | 'FIELD_HEIGHT' => null, 151 | 'FIELD_PARAM' => '', 152 | ), 153 | 1 => array( 154 | 'ID' => '0', 155 | 'DELETE' => null, 156 | 'MESSAGE' => 'мотор', 157 | 'VALUE' => 'engine', 158 | 'C_SORT' => '200', 159 | 'ACTIVE' => 'Y', 160 | 'FIELD_TYPE' => 'radio', 161 | 'FIELD_WIDTH' => null, 162 | 'FIELD_HEIGHT' => null, 163 | 'FIELD_PARAM' => '', 164 | ), 165 | 2 => array( 166 | 'ID' => '0', 167 | 'DELETE' => null, 168 | 'MESSAGE' => 'аксессуар', 169 | 'VALUE' => 'accessory', 170 | 'C_SORT' => '300', 171 | 'ACTIVE' => 'Y', 172 | 'FIELD_TYPE' => 'radio', 173 | 'FIELD_WIDTH' => null, 174 | 'FIELD_HEIGHT' => null, 175 | 'FIELD_PARAM' => '', 176 | ), 177 | ), 178 | 'arFILTER_USER' => null, 179 | 'arFILTER_ANSWER_TEXT' => null, 180 | 'arFILTER_ANSWER_VALUE' => null, 181 | ); 182 | $formField->Set($productTypeField, 0, 'N'); 183 | 184 | //Textarea 185 | $reasonField = array( 186 | 'FORM_ID' => $res, 187 | 'ACTIVE' => 'Y', 188 | 'TITLE' => 'Причина обращения', 189 | 'TITLE_TYPE' => 'text', 190 | 'SID' => 'reason', 191 | 'C_SORT' => '200', 192 | 'ADDITIONAL' => 'N', 193 | 'REQUIRED' => 'Y', 194 | 'IN_RESULTS_TABLE' => 'Y', 195 | 'IN_EXCEL_TABLE' => 'Y', 196 | 'FIELD_TYPE' => null, 197 | 'COMMENTS' => '', 198 | 'FILTER_TITLE' => '', 199 | 'RESULTS_TABLE_TITLE' => '', 200 | 'arIMAGE' => array( 201 | 'name' => '', 202 | 'type' => '', 203 | 'tmp_name' => '', 204 | 'error' => 4, 205 | 'size' => 0, 206 | 'MODULE_ID' => 'form', 207 | 'del' => null, 208 | ), 209 | 'arANSWER' => array( 210 | 0 => array( 211 | 'ID' => '0', 212 | 'DELETE' => null, 213 | 'MESSAGE' => 'Причина обращения', 214 | 'VALUE' => '', 215 | 'C_SORT' => '100', 216 | 'ACTIVE' => 'Y', 217 | 'FIELD_TYPE' => 'textarea', 218 | 'FIELD_WIDTH' => '', 219 | 'FIELD_HEIGHT' => null, 220 | 'FIELD_PARAM' => '', 221 | ), 222 | ), 223 | 'arFILTER_USER' => null, 224 | 'arFILTER_ANSWER_TEXT' => null, 225 | 'arFILTER_ANSWER_VALUE' => null, 226 | ); 227 | $formField->Set($reasonField, 0, 'N'); 228 | 229 | //Файл 230 | $infoFileField = array( 231 | 'FORM_ID' => $res, 232 | 'ACTIVE' => 'Y', 233 | 'TITLE' => 'Информация о продукции', 234 | 'TITLE_TYPE' => 'text', 235 | 'SID' => 'info', 236 | 'C_SORT' => '300', 237 | 'ADDITIONAL' => 'N', 238 | 'REQUIRED' => null, 239 | 'IN_RESULTS_TABLE' => 'Y', 240 | 'IN_EXCEL_TABLE' => 'Y', 241 | 'FIELD_TYPE' => null, 242 | 'COMMENTS' => '', 243 | 'FILTER_TITLE' => '', 244 | 'RESULTS_TABLE_TITLE' => '', 245 | 'arIMAGE' => array( 246 | 'name' => '', 247 | 'type' => '', 248 | 'tmp_name' => '', 249 | 'error' => 4, 250 | 'size' => 0, 251 | 'MODULE_ID' => 'form', 252 | 'del' => null, 253 | ), 254 | 'arANSWER' => array( 255 | 0 => array( 256 | 'ID' => '0', 257 | 'DELETE' => null, 258 | 'MESSAGE' => 'Информация о продукции', 259 | 'VALUE' => '', 260 | 'C_SORT' => '100', 261 | 'ACTIVE' => 'Y', 262 | 'FIELD_TYPE' => 'file', 263 | 'FIELD_WIDTH' => null, 264 | 'FIELD_HEIGHT' => null, 265 | 'FIELD_PARAM' => '', 266 | ), 267 | ), 268 | 'arFILTER_USER' => null, 269 | 'arFILTER_ANSWER_TEXT' => null, 270 | 'arFILTER_ANSWER_VALUE' => null, 271 | ); 272 | $formField->Set($infoFileField, 0, 'N'); 273 | 274 | //добавить новый статус результата формы 275 | $resultStatus = array( 276 | 'FORM_ID' => $res, 277 | 'C_SORT' => '100', 278 | 'ACTIVE' => 'Y', 279 | 'TITLE' => 'Новый', 280 | 'DESCRIPTION' => '', 281 | 'CSS' => 'statusgreen', 282 | 'HANDLER_OUT' => '', 283 | 'HANDLER_IN' => '', 284 | 'DEFAULT_VALUE' => 'Y', 285 | 'arPERMISSION_VIEW' => array( 286 | 0 => '0', 287 | ), 288 | 'arPERMISSION_MOVE' => array( 289 | 0 => '0', 290 | ), 291 | 'arPERMISSION_EDIT' => null, 292 | 'arPERMISSION_DELETE' => null, 293 | 'arMAIL_TEMPLATE' => null, 294 | ); 295 | $formStatus->Set($resultStatus, 0, 'N'); 296 | $arTemplates = $form->SetMailTemplate($res, 'Y', self::$formId); 297 | $form->Set(array('arMAIL_TEMPLATE' => $arTemplates), $res, 'N'); 298 | } 299 | } 300 | 301 | public function down() 302 | { 303 | \Bitrix\Main\Loader::includeModule('form'); 304 | $form = new CForm(); 305 | 306 | $by = 'ID'; 307 | $order = 'ASC'; 308 | $formRes = $form->GetList($by, $order, array('SID' => self::$formId)); 309 | if ($arForm = $formRes->Fetch()) { 310 | $form->Delete($arForm['ID'], 'N'); 311 | } 312 | } 313 | } 314 | -------------------------------------------------------------------------------- /migrations/cms/iblock/AddEnumIblockProperty.php: -------------------------------------------------------------------------------- 1 | 'Option 1', 16 | 'OPTION_2' => 'Option 2', 17 | 'OPTION_3' => 'Option 3', 18 | ); 19 | public static $listPropertyName = 'List of options'; 20 | public static $listPropertyCode = 'OPTIONS_LIST'; 21 | public static $iBlockId = 1; 22 | 23 | public function up() 24 | { 25 | \Bitrix\Main\Loader::includeModule('iblock'); 26 | $iBlock = CIBlock::GetList(array(), array('ID' => self::$iBlockId))->GetNext(); 27 | if ($iBlock['ID']) { 28 | $ibp = new CIBlockProperty; 29 | $ibpEnum = new CIBlockPropertyEnum; 30 | $arFields = array( 31 | 'NAME' => self::$listPropertyName, 32 | 'ACTIVE' => 'Y', 33 | 'SORT' => '100', 34 | 'CODE' => self::$listPropertyCode, 35 | 'PROPERTY_TYPE' => 'L', 36 | 'FILTRABLE' => 'Y', 37 | 'IBLOCK_ID' => $iBlock['ID'] 38 | ); 39 | $ibp->Add($arFields); 40 | $properties = CIBlockProperty::GetList( 41 | array(), 42 | array( 43 | 'IBLOCK_ID' => $iBlock['ID'], 44 | 'CODE' => self::$listPropertyCode 45 | ) 46 | ); 47 | if ($propFields = $properties->GetNext()) { 48 | foreach (self::$listPropertyValues as $listPropertyId => $listPropertyValue) { 49 | $ibpEnum->Add(array( 50 | 'PROPERTY_ID' => $propFields['ID'], 51 | 'VALUE' => $listPropertyValue, 52 | 'XML_ID' => $listPropertyId, 53 | )); 54 | } 55 | } 56 | } 57 | } 58 | public function down() 59 | { 60 | \Bitrix\Main\Loader::includeModule('iblock'); 61 | $iBlock = CIBlock::GetList(array(), array('ID' => self::$iBlockId))->GetNext(); 62 | if ($iBlock['ID']) { 63 | $properties = CIBlockProperty::GetList( 64 | array(), 65 | array('IBLOCK_ID' => $iBlock['ID'], 'CODE' => self::$listPropertyCode) 66 | ); 67 | if ($propFields = $properties->GetNext()) { 68 | CIBlockProperty::Delete($propFields['ID']); 69 | } 70 | } 71 | } 72 | } 73 | -------------------------------------------------------------------------------- /migrations/cms/iblock/AddEnumIblockPropertyValues.php: -------------------------------------------------------------------------------- 1 | $this->iBlockId, 33 | 'CODE' => $this->code, 34 | ) 35 | ); 36 | if ($prop_fields = $properties->GetNext()) { 37 | foreach (self::$arNewBoatsTypeValues as $arNewBoatsTypeValue) { 38 | $ibpenum->Add(array( 39 | 'PROPERTY_ID' => $prop_fields['ID'], 40 | 'VALUE' => $arNewBoatsTypeValue, 41 | )); 42 | } 43 | } 44 | } 45 | 46 | public function down() 47 | { 48 | //Удалить значения, созданные миграцией 49 | $property_enums = CIBlockPropertyEnum::GetList( 50 | array(), 51 | array( 52 | 'IBLOCK_ID' => $this->iBlockId, 53 | 'CODE' => $this->code, 54 | ) 55 | ); 56 | while ($enum_fields = $property_enums->GetNext()) { 57 | if (in_array($enum_fields['VALUE'], self::$arNewBoatsTypeValues)) { 58 | CIBlockPropertyEnum::Delete($enum_fields['ID']); 59 | } 60 | } 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /migrations/cms/iblock/AddIBlock.php: -------------------------------------------------------------------------------- 1 | 'Баннеры каталога', 7 | 'CODE' => 'CATALOG_BANNER', 8 | 'TYPE' => 'banners', 9 | ); 10 | 11 | public function up() 12 | { 13 | \Bitrix\Main\Loader::includeModule('iblock'); 14 | $cIBlock = new CIBlock(); 15 | $dbIBlock = $cIBlock->GetList( 16 | array(), 17 | array('CODE' => static::$iBlockData['CODE']) 18 | ); 19 | if ($dbIBlock->Fetch()) { 20 | return; 21 | } 22 | 23 | $iBlockId = $cIBlock->Add(array( 24 | 'NAME' => static::$iBlockData['NAME'], 25 | 'CODE' => static::$iBlockData['CODE'], 26 | 'IBLOCK_TYPE_ID' => static::$iBlockData['TYPE'], 27 | 'VERSION' => 2, 28 | 'SITE_ID' => array('s1'), 29 | 'GROUP_ID' => array('2' => 'R'), 30 | )); 31 | 32 | if (false === $iBlockId) { 33 | throw new Exception($cIBlock->LAST_ERROR); 34 | } 35 | 36 | $fields = CIBlock::GetFields($iBlockId); 37 | $fields['PREVIEW_PICTURE']['IS_REQUIRED'] = 'Y'; 38 | $fields['DETAIL_PICTURE']['IS_REQUIRED'] = 'Y'; 39 | CIBlock::SetFields($iBlockId, $fields); 40 | 41 | $ibp = new CIBlockProperty(); 42 | $ibp->Add(array( 43 | 'NAME' => 'Ссылка', 44 | 'ACTIVE' => 'Y', 45 | 'IS_REQUIRED' => 'Y', 46 | 'SORT' => '100', 47 | 'CODE' => 'URL', 48 | 'PROPERTY_TYPE' => 'S', 49 | 'FILTRABLE' => 'Y', 50 | 'IBLOCK_ID' => $iBlockId, 51 | )); 52 | } 53 | 54 | public function down() 55 | { 56 | \Bitrix\Main\Loader::includeModule('iblock'); 57 | $cIBlock = new CIBlock(); 58 | $dbIBlock = $cIBlock->GetList( 59 | array(), 60 | array('CODE' => static::$iBlockData['CODE']) 61 | ); 62 | if ($iBlock = $dbIBlock->Fetch()) { 63 | CIBlock::Delete($iBlock['ID']); 64 | } 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /migrations/cms/iblock/AddIblockProperty.php: -------------------------------------------------------------------------------- 1 | 'Property name', 16 | ); 17 | private $iBlockId = 1; 18 | 19 | public function up() 20 | { 21 | \Bitrix\Main\Loader::includeModule('iblock'); 22 | $iBlock = CIBlock::GetList(array(), array('ID' => $this->iBlockId))->GetNext(); 23 | 24 | if ($iBlock['ID']) { 25 | $ibp = new CIBlockProperty; 26 | 27 | foreach ($this->textProperties as $propCode => $property) { 28 | $arFields = array( 29 | 'NAME' => $property, 30 | 'ACTIVE' => 'Y', 31 | 'SORT' => '100', 32 | 'CODE' => $propCode, 33 | 'PROPERTY_TYPE' => 'S', 34 | 'FILTRABLE' => 'Y', 35 | 'IBLOCK_ID' => $iBlock['ID'] 36 | ); 37 | 38 | $ibp->Add($arFields); 39 | } 40 | } 41 | } 42 | 43 | public function down() 44 | { 45 | \Bitrix\Main\Loader::includeModule('iblock'); 46 | $iBlock = CIBlock::GetList(array(), array('ID' => $this->iBlockId))->GetNext(); 47 | 48 | if ($iBlock['ID']) { 49 | foreach (array_keys($this->textProperties) as $propCode) { 50 | $properties = CIBlockProperty::GetList( 51 | array(), 52 | array('IBLOCK_ID' => $iBlock['ID'], 'CODE' => $propCode) 53 | ); 54 | if ($propFields = $properties->GetNext()) { 55 | CIBlockProperty::Delete($propFields['ID']); 56 | } 57 | } 58 | } 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /migrations/cms/iblock/AddNewIblockSection.php: -------------------------------------------------------------------------------- 1 | 'Y', 19 | 'IBLOCK_SECTION_ID' => false, 20 | 'IBLOCK_ID' => $this->iBlockId, 21 | 'NAME' => $this->sectionName, 22 | 'CODE' => $this->sectionCode, 23 | 'SORT' => 500, 24 | ); 25 | 26 | $bs->Add($arFields); 27 | } 28 | 29 | public function down() 30 | { 31 | $arFilter = array( 32 | 'IBLOCK_ID' => $this->iBlockId, 33 | 'CODE' => $this->sectionCode, 34 | ); 35 | 36 | $db_list = CIBlockSection::GetList(array(), $arFilter, false, array('ID')); 37 | if ($ar_result = $db_list->GetNext()) { 38 | CIBlockSection::Delete($ar_result['ID']); 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /migrations/cms/iblock/DeleteIBlockProperty.php: -------------------------------------------------------------------------------- 1 | array( 8 | 'NAME' => 'Property 1', 9 | 'TYPE' => 'L', 10 | ), 11 | 'PROP_2' => array( 12 | 'NAME' => 'Property 2', 13 | 'TYPE' => 'L', 14 | ), 15 | ); 16 | 17 | public function up() 18 | { 19 | \Bitrix\Main\Loader::includeModule('iblock'); 20 | $iBlock = CIBlock::GetList(array(), array('ID' => $this->iBlockId))->Fetch(); 21 | if (false === $iBlock) { 22 | throw new \Exception('Can not find iBlock with id '.$this->iBlockId); 23 | } 24 | foreach (array_keys($this->properties) as $propertyCode) { 25 | $dbProperty = CIBlockProperty::GetList( 26 | array(), 27 | array( 28 | 'IBLOCK_ID' => $this->iBlockId, 29 | 'CODE' => $propertyCode 30 | ) 31 | ); 32 | if ($property = $dbProperty->Fetch()) { 33 | CIBlockProperty::Delete($property['ID']); 34 | } 35 | } 36 | } 37 | 38 | public function down() 39 | { 40 | \Bitrix\Main\Loader::includeModule('iblock'); 41 | $ibp = new CIBlockProperty; 42 | $iBlock = CIBlock::GetList(array(), array('ID' => $this->iBlockId))->Fetch(); 43 | if (false === $iBlock) { 44 | throw new \Exception('Can not find iBlock with id '.$this->iBlockId); 45 | } 46 | foreach ($this->properties as $propertyCode => $property) { 47 | $arFields = array( 48 | 'NAME' => $property['NAME'], 49 | 'ACTIVE' => 'Y', 50 | 'SORT' => '100', 51 | 'CODE' => $propertyCode, 52 | 'PROPERTY_TYPE' => $property['TYPE'], 53 | 'FILTRABLE' => 'Y', 54 | 'IBLOCK_ID' => $this->iBlockId 55 | ); 56 | $ibp->Add($arFields); 57 | } 58 | } 59 | } -------------------------------------------------------------------------------- /migrations/cms/iblock/UpdateIblockProperty.php: -------------------------------------------------------------------------------- 1 | $this->iBlockId, 19 | 'CODE' => $this->code, 20 | ) 21 | ); 22 | if ($prop_fields = $properties->GetNext()) { 23 | $arFields = array( 24 | 'SORT' => 5000, 25 | ); 26 | $ibp = new CIBlockProperty; 27 | $ibp->Update($prop_fields['ID'], $arFields); 28 | } 29 | } 30 | 31 | public function down() 32 | { 33 | $properties = CIBlockProperty::GetList( 34 | array(), 35 | array( 36 | 'IBLOCK_ID' => $this->iBlockId, 37 | 'CODE' => $this->code, 38 | ) 39 | ); 40 | if ($prop_fields = $properties->GetNext()) { 41 | $arFields = array( 42 | 'SORT' => 500, // значение сортировки до миграции 43 | ); 44 | $ibp = new CIBlockProperty; 45 | $ibp->Update($prop_fields['ID'], $arFields); 46 | } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /migrations/cms/main/AddAgent.php: -------------------------------------------------------------------------------- 1 | 'AgentFunction();') 29 | ); 30 | 31 | if ($arAgent = $rsAgent->Fetch()) { 32 | CAgent::Delete($arAgent['ID']); 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /migrations/cms/main/AddMailEventTypeAndTemplate.php: -------------------------------------------------------------------------------- 1 | 'PE_DISCOUNT_SUBSCRIPTION', 28 | 'EVENT_TITLE' => 'Подписка со скидкой', 29 | 'EVENT_DESCRIPTION' => "#LOGIN#\n#URL_LOGIN#\n#CHECKWORD#\n#EMAIL#\n#DISCOUNT#\n#DISCOUNT_CARD_NUMBER#\n", 30 | 'MESSAGE_TITLE' => 'Вы подписаны на новости сайта #SITE_NAME#', 31 | ); 32 | 33 | public function up() 34 | { 35 | $connection = \Bitrix\Main\Application::getConnection(); 36 | $connection->startTransaction(); 37 | CEventType::Add(array( 38 | 'EVENT_NAME' => static::$eventData['EVENT_NAME'], 39 | 'NAME' => static::$eventData['EVENT_TITLE'], 40 | 'LID' => 'ru', 41 | 'DESCRIPTION' => static::$eventData['EVENT_DESCRIPTION'], 42 | )); 43 | 44 | $cEventMessage = new CEventMessage(); 45 | $addResult = $cEventMessage->Add( 46 | array( 47 | 'ACTIVE' => 'Y', 48 | 'EVENT_NAME' => static::$eventData['EVENT_NAME'], 49 | 'LID' => array('s1'), 50 | 'EMAIL_FROM' => '#DEFAULT_EMAIL_FROM#', 51 | 'EMAIL_TO' => '#EMAIL#', 52 | 'BCC' => '', 53 | 'SUBJECT' => static::$eventData['MESSAGE_TITLE'], 54 | 'BODY_TYPE' => 'text', 55 | 'MESSAGE' => static::$messageText, 56 | ) 57 | ); 58 | if (false === $addResult) { 59 | $connection->rollbackTransaction(); 60 | throw new Exception('Failed to add EventMessage: '.$cEventMessage->LAST_ERROR); 61 | } 62 | $connection->commitTransaction(); 63 | } 64 | 65 | public function down() 66 | { 67 | $connection = \Bitrix\Main\Application::getConnection(); 68 | $connection->startTransaction(); 69 | CEventType::Delete(static::$eventData['EVENT_NAME']); 70 | 71 | $dbEventMessages = \Bitrix\Main\Mail\Internal\EventMessageTable::getList(array( 72 | 'filter' => array('EVENT_NAME' => static::$eventData['EVENT_NAME']), 73 | 'select' => array('ID'), 74 | )); 75 | while ($eventMessage = $dbEventMessages->fetch()) { 76 | if (!CEventMessage::Delete(intval($eventMessage['ID']))) { 77 | $connection->rollbackTransaction(); 78 | throw new Exception('Failed to delete EventMessage'); 79 | } 80 | } 81 | $connection->commitTransaction(); 82 | } 83 | } 84 | -------------------------------------------------------------------------------- /migrations/cms/main/AddSiteTemplateRule.php: -------------------------------------------------------------------------------- 1 | siteId; 12 | $rsTemplates = CSite::GetTemplateList($siteId); 13 | $siteTemplates = array(); 14 | while($template = $rsTemplates->Fetch()) 15 | { 16 | $siteTemplates[] = $template; 17 | } 18 | 19 | $siteTemplates[] = array( 20 | 'SITE_ID' => $siteId, 21 | 'CONDITION' => $this->condition, 22 | 'SORT' => $this->sort, 23 | 'TEMPLATE' => $this->template, 24 | ); 25 | 26 | $site = new CSite(); 27 | $site->Update($siteId, array('TEMPLATE' => $siteTemplates)); 28 | } 29 | 30 | public function down() 31 | { 32 | $siteId = $this->siteId; 33 | $rsTemplates = CSite::GetTemplateList($siteId); 34 | $siteTemplates = array(); 35 | while($template = $rsTemplates->Fetch()) 36 | { 37 | if ($this->condition === $template['CONDITION'] 38 | && $this->template === $template['TEMPLATE']) { 39 | continue; 40 | } 41 | $siteTemplates[] = $template; 42 | } 43 | 44 | $site = new CSite(); 45 | $site->Update($siteId, array('TEMPLATE' => $siteTemplates)); 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /migrations/cms/main/AddUserField.php: -------------------------------------------------------------------------------- 1 | 'HLBLOCK_1', 15 | 'FIELD_NAME' => 'UF_BONUS_STATUS', 16 | 'USER_TYPE_ID' => 'string', 17 | 'XML_ID' => '', 18 | 'SORT' => '100', 19 | 'MULTIPLE' => null, 20 | 'MANDATORY' => null, 21 | 'SHOW_FILTER' => 'N', 22 | 'SHOW_IN_LIST' => null, 23 | 'EDIT_IN_LIST' => null, 24 | 'IS_SEARCHABLE' => null, 25 | 'SETTINGS' => array( 26 | 'DEFAULT_VALUE' => '', 27 | 'SIZE' => '20', 28 | 'ROWS' => '1', 29 | 'MIN_LENGTH' => '0', 30 | 'MAX_LENGTH' => '0', 31 | 'REGEXP' => '', 32 | ), 33 | 'EDIT_FORM_LABEL' => array( 34 | 'ru' => 'UF_BONUS_STATUS', 35 | 'en' => 'UF_BONUS_STATUS', 36 | ), 37 | 'LIST_COLUMN_LABEL' => array( 38 | 'ru' => 'UF_BONUS_STATUS', 39 | 'en' => 'UF_BONUS_STATUS', 40 | ), 41 | 'LIST_FILTER_LABEL' => array( 42 | 'ru' => 'UF_BONUS_STATUS', 43 | 'en' => 'UF_BONUS_STATUS', 44 | ), 45 | 'ERROR_MESSAGE' => array( 46 | 'ru' => '', 47 | 'en' => '', 48 | ), 49 | 'HELP_MESSAGE' => array( 50 | 'ru' => 'UF_BONUS_STATUS', 51 | 'en' => 'UF_BONUS_STATUS', 52 | ), 53 | ); 54 | 55 | public function up() 56 | { 57 | $obUserField = new CUserTypeEntity; 58 | $obUserField->Add($this->arFields); 59 | } 60 | 61 | public function down() 62 | { 63 | $rsData = CUserTypeEntity::GetList( 64 | array($by => $order), 65 | array('FIELD_NAME' => $this->arFields['FIELD_NAME']) 66 | ); 67 | if ($arRes = $rsData->Fetch()) { 68 | $obCUserTypeEntity = new CUserTypeEntity; 69 | $obCUserTypeEntity->Delete($arRes['ID']); 70 | } 71 | } 72 | } 73 | -------------------------------------------------------------------------------- /migrations/cms/main/AddUserGroup.php: -------------------------------------------------------------------------------- 1 | 'Y', 12 | 'C_SORT' => '100', 13 | 'NAME' => 'Скидка по купону', 14 | 'DESCRIPTION' => 'Группа для пользователей, которые зарегистрировались по купону', 15 | 'STRING_ID' => 'discount-coupons', 16 | 'SECURITY_POLICY' => 'a:0:{}', 17 | ); 18 | 19 | public function up() 20 | { 21 | $group = new CGroup(); 22 | $group->Add($this->groupFields); 23 | } 24 | 25 | public function down() 26 | { 27 | $group = new CGroup(); 28 | $rsGroups = $group->GetList( 29 | $by = 'c_sort', 30 | $order = 'asc', 31 | array('STRING_ID' => $this->groupFields['STRING_ID']) 32 | ); 33 | $groupData = $rsGroups->Fetch(); 34 | 35 | if (count($groupData) > 0) { 36 | $group->Delete($groupData['ID']); 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /migrations/cms/main/AddUserGroups.php: -------------------------------------------------------------------------------- 1 | 'Скидка первая', 9 | 'DISCOUNT_SECOND' => 'Скидка вторая', 10 | 'DISCOUNT_THIRD' => 'Скидка третья', 11 | ); 12 | public function up() 13 | { 14 | foreach (static::$groups as $groupCode => $groupName) { 15 | GroupTable::add(array( 16 | 'ACTIVE' => 'Y', 17 | 'STRING_ID' => $groupCode, 18 | 'NAME' => $groupName, 19 | )); 20 | } 21 | } 22 | 23 | public function down() 24 | { 25 | $filter = array('LOGIC' => 'OR'); 26 | foreach (array_keys(static::$groups) as $groupCode) { 27 | $filter[] = array('STRING_ID' => $groupCode); 28 | } 29 | $dbGroups = GroupTable::getList(array( 30 | 'select' => array('ID'), 31 | 'filter' => $filter 32 | )); 33 | while ($group = $dbGroups->fetch()) { 34 | GroupTable::delete($group['ID']); 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /migrations/cms/main/RawSql.php: -------------------------------------------------------------------------------- 1 | query('INSERT ep_discount_coupons (coupon, used) VALUES ("HR0PDK15", "N")'); 14 | } 15 | 16 | public function down() 17 | { 18 | global $DB; 19 | $DB->query('TRUNCATE TABLE ep_discount_coupons'); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /migrations/cms/main/SetOption.php: -------------------------------------------------------------------------------- 1 | 250, 14 | 'weight_in_mkad_less_50' => 500, 15 | 'weight_in_mkad_less_100' => 600, 16 | 'weight_in_mkad_less_300' => 700, 17 | 'weight_in_mkad_less_1000' => 1000, 18 | 'weight_in_mkad_less_1500' => 1500, 19 | ); 20 | 21 | foreach ($arDefaultSettings as $optionCode => $defaultSetting) { 22 | COption::SetOptionInt('sale', $optionCode, $defaultSetting); 23 | } 24 | } 25 | 26 | public function down() 27 | { 28 | $arDefaultSettings = array( 29 | 'weight_in_mkad_less_15' => 0, 30 | 'weight_in_mkad_less_50' => 0, 31 | 'weight_in_mkad_less_100' => 0, 32 | 'weight_in_mkad_less_300' => 0, 33 | 'weight_in_mkad_less_1000' => 0, 34 | 'weight_in_mkad_less_1500' => 0, 35 | ); 36 | 37 | foreach ($arDefaultSettings as $optionCode => $defaultSetting) { 38 | COption::SetOptionInt('sale', $optionCode, $defaultSetting); 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /migrations/cms/sale/AddOrderProperty.php: -------------------------------------------------------------------------------- 1 | 1, 12 | 'NAME' => 'Оплата с внутреннего счета', 13 | 'TYPE' => 'TEXT', 14 | 'REQUIED' => 'N', 15 | 'DEFAULT_VALUE' => '0', 16 | 'SORT' => 100, 17 | 'CODE' => 'FIRST_WITHDRAW', 18 | 'USER_PROPS' => 'N', 19 | 'IS_LOCATION' => 'N', 20 | 'IS_LOCATION4TAX' => 'N', 21 | 'PROPS_GROUP_ID' => 1, 22 | 'SIZE1' => 0, 23 | 'SIZE2' => 0, 24 | 'DESCRIPTION' => '', 25 | 'IS_EMAIL' => 'N', 26 | 'IS_PROFILE_NAME' => 'N', 27 | 'IS_PAYER' => 'N', 28 | 'UTIL' => 'Y' 29 | ); 30 | 31 | public function up() 32 | { 33 | \Bitrix\Main\Loader::includeModule('sale'); 34 | 35 | CSaleOrderProps::Add($this->arFields); 36 | } 37 | 38 | public function down() 39 | { 40 | \Bitrix\Main\Loader::includeModule('sale'); 41 | 42 | $dbProps = CSaleOrderProps::GetList( 43 | array('SORT' => 'ASC'), 44 | array( 45 | 'CODE' => $this->arFields['CODE'] 46 | ), 47 | false, 48 | false, 49 | array('ID') 50 | ); 51 | 52 | if ($prop = $dbProps->Fetch()) { 53 | CSaleOrderProps::Delete($prop['ID']); 54 | } 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /migrations/cms/sale/ClearSaleUserAccounts.php: -------------------------------------------------------------------------------- 1 | CURRENT_BUDGET' => 0), 17 | false, 18 | false, 19 | array('ID', 'CURRENT_BUDGET', 'CURRENCY') 20 | ); 21 | while ($arAccountCurrency = $dbAccountCurrency->Fetch()) { 22 | CSaleUserAccount::Update($arAccountCurrency['ID'], array('CURRENT_BUDGET' => 0.00)); 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /migrations/intranet/crm/AddNewDealStages.php: -------------------------------------------------------------------------------- 1 | array( 22 | 'SORT' => 'DESC' 23 | ), 24 | 'filter' => array( 25 | 'ENTITY_ID' => 'DEAL_STAGE' 26 | ) 27 | ))->fetchAll(); 28 | 29 | $maxSort = 0; 30 | $maxStatusId = 0; 31 | foreach ($arLastStatus as $lastStatus) { 32 | if (is_numeric($lastStatus['STATUS_ID']) && $maxStatusId < $lastStatus['STATUS_ID']) { 33 | $maxStatusId = $lastStatus['STATUS_ID']; 34 | } 35 | if ($maxSort < $lastStatus['SORT']) { 36 | $maxSort = $lastStatus['SORT']; 37 | } 38 | } 39 | foreach (self::$arNewStatuses as $newStatus) { 40 | $maxSort += 10; 41 | $maxStatusId++; 42 | 43 | Bitrix\Crm\StatusTable::add(array( 44 | 'ENTITY_ID' => 'DEAL_STAGE', 45 | 'NAME' => $newStatus, 46 | 'STATUS_ID' => (string)$maxStatusId, 47 | 'SORT' => $maxSort 48 | )); 49 | } 50 | } 51 | 52 | public function down() 53 | { 54 | Bitrix\Main\Loader::includeModule('crm'); 55 | 56 | $statuses = Bitrix\Crm\StatusTable::getList(array( 57 | 'filter' => array( 58 | 'NAME' => self::$arNewStatuses 59 | ) 60 | ))->fetchAll(); 61 | 62 | global $DB; 63 | 64 | foreach ($statuses as $status) { 65 | $DB->query('DELETE FROM b_crm_status WHERE NAME = "' . $status['NAME'] 66 | . '" AND STATUS_ID = "' . $status['STATUS_ID'] . '"'); 67 | } 68 | } 69 | } 70 | --------------------------------------------------------------------------------