Skip to content

Commit

Permalink
Набор трэйтов для миграций.
Browse files Browse the repository at this point in the history
  • Loading branch information
ProklUng committed Aug 11, 2021
1 parent 68f4d75 commit 2dd7590
Show file tree
Hide file tree
Showing 10 changed files with 909 additions and 15 deletions.
25 changes: 11 additions & 14 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,16 +1,3 @@
[![Latest Stable Version](https://poser.pugx.org/arrilot/bitrix-migrations/v/stable.svg)](https://packagist.org/packages/arrilot/bitrix-migrations/)
[![Total Downloads](https://img.shields.io/packagist/dt/arrilot/bitrix-migrations.svg?style=flat)](https://packagist.org/packages/Arrilot/bitrix-migrations)
[![Build Status](https://img.shields.io/travis/arrilot/bitrix-migrations/master.svg?style=flat)](https://travis-ci.org/arrilot/bitrix-migrations)
[![Scrutinizer Quality Score](https://scrutinizer-ci.com/g/arrilot/bitrix-migrations/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/arrilot/bitrix-migrations/)

# Данный пакет больше активно не поддерживается

Причина - мы больше не используем Битрикс в своих проектах.
Если вам интересен этот проект и вы хотите заняться его поддержкой - форкните его и создайте Issue в данном репозитории чтобы мы поместили здесь ссылку на форк.

Форки:
- https://github.com/informunity/bitrix-migrations

# Bitrix-migrations

*Миграции БД для Битрикса и не только*
Expand Down Expand Up @@ -262,7 +249,17 @@ Arrilot\BitrixMigrations\Autocreate\Manager::init($_SERVER["DOCUMENT_ROOT"].'/mi

1) Заменить подключение ядра Битрикса на ядро другой системы.

2) Реализовать свой аналог ` Arrilot\BitrixMigrations\Repositories\BitrixDatabaseRepository;` и использовать его.
2) Реализовать свой аналог `Arrilot\BitrixMigrations\Repositories\BitrixDatabaseRepository;` и использовать его.

3) По желанию отключить существующие шаблоны миграций, сделав свои.

###Трэйты для миграций

- `Arrilot\BitrixMigrations\Traits\ClearCacheTrait` - очищает все виды кэша
- `Arrilot\BitrixMigrations\Traits\EmailEventTrait` - создает новый тип почтовых событий
- `Arrilot\BitrixMigrations\Traits\EmailTemplateTrait` - создает новый шаблон для почтового сообщения
- `Arrilot\BitrixMigrations\Traits\IblockPropertyTrait` - создает новое пользовательское свойство инфоблока
- `Arrilot\BitrixMigrations\Traits\MigrationsHlBlocksHelpersTrait` - хэлперы для HighLoad инфоблоков
- `Arrilot\BitrixMigrations\Traits\ModuleTrait` - установка-удаление модулей
- `Arrilot\BitrixMigrations\Traits\UserFieldTrait` - создание пользовательских полей
- `Arrilot\BitrixMigrations\Traits\Migrations\UserGroupTrait` - создание групп пользователей
2 changes: 1 addition & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
],
"homepage": "https://github.com/Arrilot/bitrix-migrations",
"require": {
"php": ">=5.5.0 || ^7.0 || ^8.0",
"php": "^7.0 || ^8.0",
"symfony/console": "~2|~3|~4|~5",
"illuminate/support": "~5 | ~6 | ~7 | ~8"
},
Expand Down
27 changes: 27 additions & 0 deletions src/Traits/ClearCacheTrait.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<?php

namespace Arrilot\BitrixMigrations\Traits;

/**
* Class ClearCacheTrait
* @package Arrilot\BitrixMigrations\Traits
*
* @since 11.04.2021
*/
class ClearCacheTrait
{
/**
* Очищает все виды кэша.
*
* @return void
*/
protected function clearCache() : void
{
global $USER_FIELD_MANAGER;
if ($USER_FIELD_MANAGER) {
$USER_FIELD_MANAGER->CleanCache();
}

BXClearCache(true, '/');
}
}
103 changes: 103 additions & 0 deletions src/Traits/EmailEventTrait.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
<?php

namespace Arrilot\BitrixMigrations\Traits;

use CEventType;
use Exception;

/**
* Trait EmailEventTrait
* @package Arrilot\BitrixMigrations\Traits
*
* @since 11.04.2021
*/
trait EmailEventTrait
{
/**
* Создает новый тип почтовых событий.
*
* @param array $eventData
*
* @return array
*
* @throws Exception
*/
public function createEmailEventType(array $eventData): array
{
if ($this->findEmailEventType($eventData)) {
throw new Exception("Email event type {$eventData['EVENT_NAME']} already exists");
}

$res = CEventType::add($eventData);
if (!$res) {
throw new Exception("Can't create email event type {$eventData['EVENT_NAME']}: {$et->LAST_ERROR}");
}

return ["Email event type {$eventData['EVENT_NAME']}({$res}) created"];
}

/**
* Обновляет тип почтовых событий.
*
* @param array $eventData
*
* @return array
*
* @throws Exception
*/
public function updateEmailEventType(array $eventData): array
{
if (!($event = $this->findEmailEventType($eventData))) {
throw new Exception("Can't find {$eventData['EVENT_NAME']} email event type");
}
$et = new CEventType;
unset($eventData['EVENT_NAME'], $eventData['LID']);
$result = CEventType::update(['ID' => $event['ID']], $eventData);
if (!$result) {
throw new Exception("Can't update email event type {$eventData['EVENT_NAME']}: {$et->LAST_ERROR}");
}

return ["Email event type {$event['EVENT_NAME']}({$event['ID']}) updated"];
}

/**
* Удаляет тип почтового события по его идентификатору (EVENT_NAME).
*
* @param array $eventData
*
* @return array
* @throws Exception
*/
public function deleteEmailEventType(array $eventData): array
{
if (!($event = $this->findEmailEventType($eventData))) {
throw new Exception("Can't find {$eventData['EVENT_NAME']} email event type");
}

CEventType::delete(['ID' => $event['ID']]);

return ["Email event type {$eventData['EVENT_NAME']}({$event['ID']}) deleted"];
}

/**
* Ищет тип почтового события по массиву параметров.
*
* @param array $eventData
*
* @return array|null
*
* @throws Exception
*/
public function findEmailEventType(array $eventData): ?array
{
if (empty($eventData['EVENT_NAME'])) {
throw new Exception('Empty email event type name');
}
$filter = ['TYPE_ID' => $eventData['EVENT_NAME']];
if (!empty($eventData['LID'])) {
$filter['LID'] = $eventData['LID'];
}

return CEventType::getList($filter)->fetch();
}
}
128 changes: 128 additions & 0 deletions src/Traits/EmailTemplateTrait.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,128 @@
<?php

namespace Arrilot\BitrixMigrations\Traits;

use CEventMessage;
use Exception;

/**
* Trait EmailTemplateTrait
* @package Arrilot\BitrixMigrations\Traits
*
* @since 11.04.2021
*/
trait EmailTemplateTrait
{
/**
* Создает новый шаблон для почтового сообщения.
*
* @param array $templateData
*
* @return array
*
* @throws Exception
*/
public function createEmailTemplate(array $templateData): array
{
if ($this->findEmailTemplate($templateData)) {
throw new Exception("Email template for event {$templateData['EVENT_NAME']} already exists");
}

$et = new CEventMessage;
$res = $et->add($templateData);
if (!$res) {
throw new Exception("Can't create email event type {$templateData['EVENT_NAME']}: {$et->LAST_ERROR}");
}

return ["Email template({$res}) for event {$templateData['EVENT_NAME']} created"];
}

/**
* Обновляет шаблон почтового сообщения.
*
* @param array $templateData
* @param array $search
*
* @return array
*
* @throws Exception
*/
public function updateEmailTemplate(array $search, array $templateData): array
{
if (!($template = $this->findEmailTemplate($search))) {
throw new Exception("Email template for event {$templateData['EVENT_NAME']} not found");
}

$et = new CEventMessage;
unset($templateData['EVENT_NAME'], $templateData['LID']);
$res = $et->update($template['ID'], $templateData);
if (!$res) {
throw new Exception("Can't update template for event {$templateData['EVENT_NAME']}: {$et->LAST_ERROR}");
}

return ["Email template({$template['ID']}) for event {$template['EVENT_NAME']} updated"];
}

/**
* Удаляет шаблон почтового сообщения.
*
* @param array $templateData
*
* @return array
* @throws Exception
*/
public function deleteEmailTemplate(array $templateData): array
{
if (!($template = $this->findEmailTemplate($templateData))) {
throw new Exception("Email template for event {$templateData['EVENT_NAME']} not found");
}

$et = new CEventMessage;
$res = $et->delete($template['ID']);

if (!$res) {
throw new Exception("Can't delete template({$template['ID']}) for type {$templateData['EVENT_NAME']}");
}

return ["Email template({$template['ID']}) for type {$templateData['EVENT_NAME']} deleted"];
}

/**
* Ищет шаблон почтового сообщения по массиву параметров.
*
* @param array $templateData
*
* @return array|null
*
* @throws Exception
*/
public function findEmailTemplate(array $templateData): ?array
{
if (empty($templateData['EVENT_NAME'])) {
throw new Exception('Empty email event type name');
}

$filter = ['TYPE_ID' => $templateData['EVENT_NAME']];
if (!empty($templateData['LID'])) {
$filter['SITE_ID'] = $templateData['LID'];
}
if (!empty($templateData['SUBJECT'])) {
$filter['SUBJECT'] = $templateData['SUBJECT'];
}

$return = null;
$rsMess = CEventMessage::GetList(
($by = 'site_id'),
($order = 'desc'),
$filter
);
while ($template = $rsMess->fetch()) {
if ($return) {
throw new Exception("More than one template are found: {$templateData['EVENT_NAME']}");
}
$return = $template;
}

return $return;
}
}
Loading

0 comments on commit 2dd7590

Please sign in to comment.