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

added the ability to disable the event

parent b87ce4a4
No related branches found
Tags 1.1.0
No related merge requests found
......@@ -2,6 +2,13 @@
Mjml шаблонизатор https://documentation.mjml.io
## Использование со сторонними рендерами твига
Если на проекте подключен иной обработчик твиг-шаблонов, то необходимо выключить регистрацию обработчика модуля.
Необходимо перейти в настройки модуля и отключить свойство "Подключать обработчик шаблонов twig".
В нужном объекте twig зарегистрировать расширение, получив его через метод `\Mail\Mjml\Mjml\Service\ExtensionService::compileTwigExtension`
## Использование
В шаблоне письма выбрать режим "Визуальный редактор" и подключить компонент.
......
.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;
use Bitrix\Main\IO\Directory;
use Bitrix\Main\Localization\Loc;
use Mail\Mjml\Events;
use Mail\Mjml\Module;
if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) {
die();
......@@ -12,7 +13,7 @@ if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) {
class mail_mjml extends CModule
{
public $MODULE_ID = 'mail.mjml';
public $MODULE_ID = Module::ID;
public $MODULE_NAME;
public $MODULE_VERSION;
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
{
public static function bindEvents()
{
static::addCustomTemplateEngine();
if (Module::getDbOption('use_event','Y') === 'Y') {
static::addCustomTemplateEngine();
}
}
public static function addCustomTemplateEngine()
......
......@@ -5,10 +5,9 @@ namespace Mail\Mjml\Mjml\RendererTemplate;
use Bitrix\Main\Application;
use CBitrixComponent;
use CBitrixComponentTemplate;
use Mail\Mjml\Mjml\Renderer\BinaryRenderer;
use Mail\Mjml\Mjml\Service\ExtensionService;
use Twig\Environment;
use Twig\Loader\FilesystemLoader;
use \Mail\Mjml\Mjml\TwigExtension\MjmlExtension;
/**
* Подключение кастомного типа шаблона
......@@ -34,10 +33,10 @@ function renderTemplateFile(
$parentTemplateFolder,
$template
) {
global $APPLICATION;
global $USER;
if (($f = Application::getDocumentRoot() . $templateFile) && file_exists($f)) {
if ($_REQUEST['clear_cache'] === 'Y') {
if ($_REQUEST['clear_cache'] === 'Y' && $USER && $USER->IsAdmin()) {
touch($f);
}
}
......@@ -45,15 +44,7 @@ function renderTemplateFile(
$loader = new FilesystemLoader(Application::getDocumentRoot());
$twig = new Environment($loader);
$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));
$twig->addExtension(ExtensionService::compileTwigExtension());
echo $twig->render(
$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
*/
protected $oRenderer;
protected $aTwigFilter = [];
/**
* MjmlExtension constructor.
*
* @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
public function getFilters(): array
{
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
use Bitrix\Main\Loader;
use Bitrix\Main\Localization\Loc;
use Mail\Mjml\Module;
if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) {
die();
}
$module_id = 'mail.mjml';
Loader::includeModule($module_id);
\ No newline at end of file
try {
$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