/**
* Bitrix Framework
* @package bitrix
* @subpackage sender
* @copyright 2001-2012 Bitrix
*/
namespace Bitrix\Fileman\Block;
use Bitrix\Main\Event;
use Bitrix\Main\EventResult;
use Bitrix\Main\Localization\Loc;
use Bitrix\Main\Mail\EventMessageCompiler;
use Bitrix\Main\SiteTable;
use Bitrix\Main\Web\DOM\StyleInliner;
Loc::loadMessages(__FILE__);
class EditorMail
{
/**
* Create instance of editor.
*
* @param array $params Parameters.
* @return Editor
*/
public static function createInstance($params)
{
$params['componentFilter'] = array('TYPE' => 'mail');
if (!isset($params['previewUrl']))
{
$params['previewUrl'] = '/bitrix/admin/fileman_block_editor.php?action=preview_mail';
}
if (!isset($params['saveFileUrl']))
{
$params['saveFileUrl'] = '/bitrix/admin/fileman_block_editor.php?action=save_file';
}
$editor = new Editor($params);
$editor->componentsAsBlocks = array(
'bitrix:sale.basket.basket.small.mail' => array('NAME' => Loc::getMessage('BLOCK_EDITOR_BLOCK_COMPONENT_BASKET_NAME')),
'bitrix:sale.personal.order.detail.mail' => array('NAME' => Loc::getMessage('BLOCK_EDITOR_BLOCK_COMPONENT_ORDER_NAME')),
'bitrix:catalog.top.mail' => array('NAME' => Loc::getMessage('BLOCK_EDITOR_BLOCK_COMPONENT_CATALOG_NAME')),
'bitrix:sale.discount.coupon.mail' => array('NAME' => Loc::getMessage('BLOCK_EDITOR_BLOCK_COMPONENT_COUPON_NAME')),
'bitrix:bigdata.recommends.mail' => array('NAME' => Loc::getMessage('BLOCK_EDITOR_BLOCK_COMPONENT_BIGDATA_NAME')),
);
$editor->setBlockList(self::getBlockList());
return $editor;
}
/**
* Show editor.
*
* @param array $params Parameters.
* @return string
*/
public static function show(array $params)
{
$result = self::createInstance($params)->show();
\CJSCore::RegisterExt('block_editor_mail', array(
'js' => array('/bitrix/js/fileman/block_editor/mail_handlers.js'),
'rel' => array('core', 'block_editor')
));
\CJSCore::Init(array('block_editor_mail'));
return $result;
}
/**
* Remove php from html.
*
* @param string $html Html.
* @param string $previousHtml Previous html.
* @param bool $canEditPhp Can edit php.
* @param bool $canUseLpa Can use LPA.
* @return string
*/
public static function removePhpFromHtml($html, $previousHtml = null, $canEditPhp = false, $canUseLpa = false)
{
if (!$canEditPhp && $canUseLpa)
{
$html = \LPA::Process($html, $previousHtml);
}
else if (!$canEditPhp)
{
$phpList = \PHPParser::ParseFile($html);
foreach($phpList as $php)
{
$surrogate = ''
. htmlspecialcharsbx(Loc::getMessage('BLOCK_EDITOR_BLOCK_DYNAMIC_CONTENT'))
.'';
$html = str_replace($php[2], $surrogate, $html);
}
$html = str_replace(['', '?>'], ['< ?', '? >'], $html);
}
return $html;
}
/**
* Show preview of content.
*
* @param array $params Parameters.
* @return string
*/
public static function getPreview(array $params)
{
$site = $params['SITE'];
$html = $params['HTML'];
if(isset($params['FIELDS']))
{
$fields = $params['FIELDS'];
}
else
{
$fields = array();
}
$canEditPhp = (isset($params['CAN_EDIT_PHP']) && $params['CAN_EDIT_PHP']);
$canUseLpa = (isset($params['CAN_USE_LPA']) && $params['CAN_USE_LPA']);
$html = static::removePhpFromHtml($html, null, $canEditPhp, $canUseLpa);
if(is_object($GLOBALS["USER"]))
{
/* @var $GLOBALS["USER"] \CAllUser */
$fields['EMAIL_TO'] = htmlspecialcharsbx($GLOBALS["USER"]->GetEmail());
$fields['USER_ID'] = $GLOBALS["USER"]->GetID();
$fields['NAME'] = htmlspecialcharsbx($GLOBALS["USER"]->GetFirstName() ?: $GLOBALS["USER"]->GetLastName());
}
$siteDb = SiteTable::getList(array(
'select' => array('LID', 'SERVER_NAME', 'SITE_NAME', 'CULTURE_CHARSET'=>'CULTURE.CHARSET'),
'filter' => array('LID' => $site)
));
if(!$siteRow = $siteDb->fetch())
{
$siteDb = SiteTable::getList(array(
'select' => array('LID', 'SERVER_NAME', 'SITE_NAME', 'CULTURE_CHARSET'=>'CULTURE.CHARSET'),
'filter' => array('DEF' => true)
));
$siteRow = $siteDb->fetch();
}
$fields['SITE_NAME'] = $siteRow['SITE_NAME'];
$fields['SERVER_NAME'] = $siteRow['SERVER_NAME'];
$charset = $siteRow['CULTURE_CHARSET'];
$messageParams = array(
'FIELDS' => $fields,
'MESSAGE' => array(
'BODY_TYPE' => 'html',
'EMAIL_TO' => '#EMAIL_TO#',
'MESSAGE' => $html,
),
'SITE' => $siteRow['LID'],
'CHARSET' => $charset,
);
$event = new Event("main", "OnBeforeBlockEditorMailPreview", $messageParams);
$event->send();
foreach ($event->getResults() as $eventResult)
{
if($eventResult->getType() !== EventResult::ERROR)
{
$messageParams = array_merge($messageParams, $eventResult->getParameters());
}
}
$message = EventMessageCompiler::createInstance($messageParams);
$message->compile();
$html = $message->getMailBody();
$inlineHtml = StyleInliner::inlineHtml($html);
$eventParams = array('HTML' => $html, 'INLINE_HTML' => $inlineHtml);
$event = new Event("main", "OnAfterBlockEditorMailPreview", $eventParams);
$event->send();
foreach ($event->getResults() as $eventResult)
{
if($eventResult->getType() !== EventResult::ERROR)
{
$eventParams = array_merge($eventParams, $eventResult->getParameters());
}
}
//return $eventParams['HTML'];
return $eventParams['INLINE_HTML'];
}
/**
* Get block list.
*
* @return array
*/
public static function getBlockList()
{
return array(
array(
'CODE' => 'text', 'NAME' => Loc::getMessage('BLOCK_EDITOR_BLOCK_TEXT_NAME'),
'DESC' => Loc::getMessage('BLOCK_EDITOR_BLOCK_TEXT_DESC'),
'HTML' => '
' . Loc::getMessage('BLOCK_EDITOR_BLOCK_TEXT_EXAMPLE') . '
|
|
'
),
array(
'CODE' => 'boxedtext', 'NAME' => Loc::getMessage('BLOCK_EDITOR_BLOCK_BOXEDTEXT_NAME'),
'DESC' => Loc::getMessage('BLOCK_EDITOR_BLOCK_BOXEDTEXT_DESC'),
'HTML' => '
' . Loc::getMessage('BLOCK_EDITOR_BLOCK_BOXEDTEXT_EXAMPLE') . '
|
|
|
'
),
array(
'CODE' => 'line', 'NAME' => Loc::getMessage('BLOCK_EDITOR_BLOCK_LINE_NAME'),
'DESC' => Loc::getMessage('BLOCK_EDITOR_BLOCK_LINE_DESC'),
'HTML' => '
'
),
array(
'CODE' => 'image', 'NAME' => Loc::getMessage('BLOCK_EDITOR_BLOCK_IMAGE_NAME'),
'DESC' => Loc::getMessage('BLOCK_EDITOR_BLOCK_IMAGE_DESC'),
'HTML' => '
'
),
array(
'CODE' => 'imagegroup', 'NAME' => Loc::getMessage('BLOCK_EDITOR_BLOCK_IMAGEGROUP_NAME'),
'DESC' => Loc::getMessage('BLOCK_EDITOR_BLOCK_IMAGEGROUP_DESC'),
'HTML' => '
'
),
array(
'CODE' => 'boxedimage', 'NAME' => Loc::getMessage('BLOCK_EDITOR_BLOCK_BOXEDIMAGE_NAME'),
'DESC' => Loc::getMessage('BLOCK_EDITOR_BLOCK_BOXEDIMAGE_DESC'),
'HTML' => '
|
' . Loc::getMessage('BLOCK_EDITOR_BLOCK_TEXT_EXAMPLE') . '
|
|
|
'
),
array(
'CODE' => 'imagetext', 'NAME' => Loc::getMessage('BLOCK_EDITOR_BLOCK_IMAGETEXT_NAME'),
'DESC' => Loc::getMessage('BLOCK_EDITOR_BLOCK_IMAGETEXT_DESC'),
'HTML' => '
' . Loc::getMessage('BLOCK_EDITOR_BLOCK_TEXT_EXAMPLE') . '
|
|
'
),
array(
'CODE' => 'button', 'NAME' => Loc::getMessage('BLOCK_EDITOR_BLOCK_BUTTON_NAME'),
'DESC' => Loc::getMessage('BLOCK_EDITOR_BLOCK_BUTTON_DESC'),
'HTML' => '
'
),
array(
'CODE' => 'code', 'NAME' => Loc::getMessage('BLOCK_EDITOR_BLOCK_CODE_NAME'),
'DESC' => Loc::getMessage('BLOCK_EDITOR_BLOCK_CODE_DESC'),
'HTML' => '
' . Loc::getMessage('BLOCK_EDITOR_BLOCK_CODE_EXAMPLE') . '
|
'
),
array(
'CODE' => 'footer', 'TYPE' => 'text', 'NAME' => Loc::getMessage('BLOCK_EDITOR_BLOCK_FOOTER_NAME'),
'DESC' => Loc::getMessage('BLOCK_EDITOR_BLOCK_FOOTER_DESC'),
'HTML' => '
'
),
array(
'CODE' => 'social', 'NAME' => Loc::getMessage('BLOCK_EDITOR_BLOCK_SOCIAL_NAME'),
'DESC' => Loc::getMessage('BLOCK_EDITOR_BLOCK_SOCIAL_DESC'),
'HTML' => '
' . (Editor::isAvailableRussian() ? '
' : '') . '
' . (!Editor::isAvailableRussian() ? '
' : '') . '
|
|
'
),
);
}
}