Skip to content
Snippets Groups Projects
Commit 5225387d authored by Pavel's avatar Pavel
Browse files

added the ability to disable the event

parent b87ce4a4
No related branches found
No related tags found
No related merge requests found
...@@ -2,6 +2,21 @@ ...@@ -2,6 +2,21 @@
Mjml шаблонизатор https://documentation.mjml.io Mjml шаблонизатор https://documentation.mjml.io
## Использование со сторонними рендерами твига
Если на проекте подключен иной обработчик твиг-шаблонов, то необходимо выключить регистрацию обработчика модуля.
Необходимо перейти в настройки модуля и отключить свойство "Подключать обработчик шаблонов twig".
В нужном объекте twig зарегистрировать расширение, получив его через метод `\Mail\Mjml\Mjml\Service\ExtensionService::compileTwigExtension`
В перечень обрабатываемых файлов twig добавить расширение mjml.twig
```php
$arCustomTemplateEngines['twig'] = [
'templateExt' => ['mjml.twig', 'twig'],
];
```
## Использование ## Использование
В шаблоне письма выбрать режим "Визуальный редактор" и подключить компонент. В шаблоне письма выбрать режим "Визуальный редактор" и подключить компонент.
......
.mjml-block {
background-color: #f5f9f9;
border: 1px solid;
border-color: #c4ced2 #dce7ed #dce7ed;
padding: 10px;
}
.mjml-block.error {
color: #ee1a1a;
}
.mjml-tr > td:first-child {
width: 50%;
}
\ No newline at end of file
<style>
<?php include_once __DIR__ . '/style.css' ?>
</style>
<?php
if (isset($errors) && is_array($errors)): ?>
<?php
foreach ($errors as $error): ?>
<p class="mjml-block error">
<?= $error ?>
</p>
<?php
endforeach; ?>
<?php
endif; ?>
\ No newline at end of file
<?php
use Bitrix\Main\Localization\Loc;
use Mail\Mjml\Module;
if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) {
die();
}
global $APPLICATION;
Loc::loadMessages(__FILE__);
$module_id = Module::ID;
$mid = $_REQUEST["mid"];
$aCheckbox = [
'use_event' => 'Y'
];
if ($_SERVER['REQUEST_METHOD'] === "POST" && check_bitrix_sessid()) {
foreach ($aCheckbox as $sKey => $sDefault) {
$sValue = $_REQUEST[$sKey] ?? 'N';
Module::setDbOption($sKey, $sValue);
}
}
$aTabs = [
[
"DIV" => "edit1",
"TAB" => Loc::getMessage("MAIN_TAB_SETTINGS"),
"ICON" => "currency_settings",
"TITLE" => Loc::getMessage("MAIN_TAB_TITLE_SETTINGS")
],
];
$tabControl = new CAdminTabControl("tabControl", $aTabs);
$tabControl->Begin();
?>
<form method="POST" action="<?= $APPLICATION->GetCurPage() ?>?mid=<?= htmlspecialcharsbx($mid) ?>&lang=<?= LANG ?>"
name="mail.mjml">
<?= bitrix_sessid_post(); ?>
<?php
$tabControl->BeginNextTab();
?>
<?php foreach ($aCheckbox as $sKey => $sDefault) { ?>
<?php $bChecked = Module::getDbOption($sKey, $sDefault) === 'Y' ?>
<tr class="mjml-tr">
<td>
<label for="use_event"><?= Loc::getMessage("MAIN_TAB_" . mb_strtoupper($sKey)) ?></label>
</td>
<td>
<input type="checkbox" name="use_event" id="use_event" value="Y" <?= $bChecked ? 'checked' : ''?>/>
</td>
</tr>
<?php } ?>
<?php
$tabControl->Buttons();
?>
<input type="submit" name="Update" value="<?= Loc::getMessage("MAIN_SAVE") ?>">
<input type="hidden" name="Update" value="Y">
<?php
$tabControl->End(); ?>
</form>
\ No newline at end of file
...@@ -5,6 +5,7 @@ use Bitrix\Main\EventManager; ...@@ -5,6 +5,7 @@ use Bitrix\Main\EventManager;
use Bitrix\Main\IO\Directory; use Bitrix\Main\IO\Directory;
use Bitrix\Main\Localization\Loc; use Bitrix\Main\Localization\Loc;
use Mail\Mjml\Events; use Mail\Mjml\Events;
use Mail\Mjml\Module;
if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) { if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) {
die(); die();
...@@ -12,7 +13,7 @@ if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) { ...@@ -12,7 +13,7 @@ if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) {
class mail_mjml extends CModule class mail_mjml extends CModule
{ {
public $MODULE_ID = 'mail.mjml'; public $MODULE_ID = Module::ID;
public $MODULE_NAME; public $MODULE_NAME;
public $MODULE_VERSION; public $MODULE_VERSION;
public $MODULE_VERSION_DATE; public $MODULE_VERSION_DATE;
......
<?php
$MESS["MAIN_TAB_SETTINGS"] = "Настройка";
$MESS["MAIN_TAB_TITLE_SETTINGS"] = "Настройка";
$MESS["MAIN_TAB_USE_EVENT"] = "Подключать обработчик шаблонов twig";
<?php
$MESS['ACCESS_DENIED'] = 'Доступ запрещен';
...@@ -9,7 +9,9 @@ class Events ...@@ -9,7 +9,9 @@ class Events
{ {
public static function bindEvents() public static function bindEvents()
{ {
static::addCustomTemplateEngine(); if (Module::getDbOption('use_event','Y') === 'Y') {
static::addCustomTemplateEngine();
}
} }
public static function addCustomTemplateEngine() public static function addCustomTemplateEngine()
......
...@@ -5,10 +5,9 @@ namespace Mail\Mjml\Mjml\RendererTemplate; ...@@ -5,10 +5,9 @@ namespace Mail\Mjml\Mjml\RendererTemplate;
use Bitrix\Main\Application; use Bitrix\Main\Application;
use CBitrixComponent; use CBitrixComponent;
use CBitrixComponentTemplate; use CBitrixComponentTemplate;
use Mail\Mjml\Mjml\Renderer\BinaryRenderer; use Mail\Mjml\Mjml\Service\ExtensionService;
use Twig\Environment; use Twig\Environment;
use Twig\Loader\FilesystemLoader; use Twig\Loader\FilesystemLoader;
use \Mail\Mjml\Mjml\TwigExtension\MjmlExtension;
/** /**
* Подключение кастомного типа шаблона * Подключение кастомного типа шаблона
...@@ -34,10 +33,10 @@ function renderTemplateFile( ...@@ -34,10 +33,10 @@ function renderTemplateFile(
$parentTemplateFolder, $parentTemplateFolder,
$template $template
) { ) {
global $APPLICATION; global $USER;
if (($f = Application::getDocumentRoot() . $templateFile) && file_exists($f)) { if (($f = Application::getDocumentRoot() . $templateFile) && file_exists($f)) {
if ($_REQUEST['clear_cache'] === 'Y') { if ($_REQUEST['clear_cache'] === 'Y' && $USER && $USER->IsAdmin()) {
touch($f); touch($f);
} }
} }
...@@ -45,15 +44,7 @@ function renderTemplateFile( ...@@ -45,15 +44,7 @@ function renderTemplateFile(
$loader = new FilesystemLoader(Application::getDocumentRoot()); $loader = new FilesystemLoader(Application::getDocumentRoot());
$twig = new Environment($loader); $twig = new Environment($loader);
$twig->addExtension(ExtensionService::compileTwigExtension());
$sPathToMjml = $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/mail.mjml/node_modules/.bin/mjml';
if (is_file($_SERVER['DOCUMENT_ROOT'] . '/local/modules/mail.mjml/install/index.php')) {
$sPathToMjml = $_SERVER['DOCUMENT_ROOT'] . '/local/modules/mail.mjml/node_modules/.bin/mjml';
}
$renderer = new BinaryRenderer($sPathToMjml);
$twig->addExtension(new MjmlExtension($renderer));
echo $twig->render( echo $twig->render(
$templateFile, $templateFile,
......
<?php
namespace Mail\Mjml\Mjml\Service;
use Mail\Mjml\Mjml\Renderer\BinaryRenderer;
use Mail\Mjml\Mjml\TwigExtension\MjmlExtension;
use Twig\Extension\ExtensionInterface;
class ExtensionService
{
public static function compileTwigExtension(array $aTwigFilter = []): ExtensionInterface
{
$sPathToMjml = $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/mail.mjml/node_modules/.bin/mjml';
if (is_file($_SERVER['DOCUMENT_ROOT'] . '/local/modules/mail.mjml/install/index.php')) {
$sPathToMjml = $_SERVER['DOCUMENT_ROOT'] . '/local/modules/mail.mjml/node_modules/.bin/mjml';
}
$renderer = new BinaryRenderer($sPathToMjml);
return new MjmlExtension($renderer, $aTwigFilter);
}
}
\ No newline at end of file
...@@ -16,14 +16,17 @@ class MjmlExtension extends AbstractExtension ...@@ -16,14 +16,17 @@ class MjmlExtension extends AbstractExtension
*/ */
protected $oRenderer; protected $oRenderer;
protected $aTwigFilter = [];
/** /**
* MjmlExtension constructor. * MjmlExtension constructor.
* *
* @param RendererInterface $renderer * @param RendererInterface $renderer
*/ */
public function __construct(RendererInterface $renderer) public function __construct(RendererInterface $renderer, array $aTwigFilter = [])
{ {
$this->oRenderer = $renderer; $this->oRenderer = $renderer;
$this->aTwigFilter = $aTwigFilter;
} }
/** /**
...@@ -32,7 +35,11 @@ class MjmlExtension extends AbstractExtension ...@@ -32,7 +35,11 @@ class MjmlExtension extends AbstractExtension
public function getFilters(): array public function getFilters(): array
{ {
return [ return [
new TwigFilter('mjml_to_html', [$this, 'render'], ['is_safe' => ['all']]) new TwigFilter(
'mjml_to_html',
[$this, 'render'],
array_merge(['is_safe' => ['all']], $this->aTwigFilter)
)
]; ];
} }
......
<?php
namespace Mail\Mjml;
use Bitrix\Main\Config\Option;
class Module
{
public const ID = 'mail.mjml';
public static function getDbOption($name, $default = ''): string
{
return Option::get(self::ID, $name, $default);
}
public static function setDbOption(string $name, string $value): void
{
if ($value !== Option::getRealValue(self::ID, $name)) {
Option::set(self::ID, $name, $value);
}
}
public static function removeDbOption(string $name): void
{
Option::delete(self::ID, ['name' => $name]);
}
public static function removeDbOptions(): void
{
Option::delete(self::ID);
}
}
\ No newline at end of file
<?php <?php
use Bitrix\Main\Loader; use Bitrix\Main\Loader;
use Bitrix\Main\Localization\Loc;
use Mail\Mjml\Module;
if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) { if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) {
die(); die();
} }
$module_id = 'mail.mjml'; try {
Loader::includeModule($module_id);
\ No newline at end of file $module_id = Module::ID;
if (!Loader::includeModule($module_id)) {
throw new \RuntimeException('need to install module ' . $module_id);
}
if (CMain::GetGroupRight($module_id) <= "R") {
throw new \RuntimeException(Loc::getMessage("ACCESS_DENIED"));
}
include __DIR__ . '/admin/includes/options.php';
include __DIR__ . '/admin/assets/style.php';
} catch (Throwable $e) {
$errors = [$e->getMessage()];
include __DIR__ . '/admin/includes/errors.php';
include __DIR__ . '/admin/assets/style.php';
}
This diff is collapsed.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment