%PDF- %PDF-
| Direktori : /home/bitrix/www/bitrix/modules/main/lib/mail/internal/ |
| Current File : /home/bitrix/www/bitrix/modules/main/lib/mail/internal/eventmessage.php |
<?php
/**
* Bitrix Framework
* @package bitrix
* @subpackage main
* @copyright 2001-2012 Bitrix
*/
namespace Bitrix\Main\Mail\Internal;
use Bitrix\Main\Entity;
use Bitrix\Main\Type as Type;
class EventMessageTable extends Entity\DataManager
{
/**
* @return string
*/
public static function getTableName()
{
return 'b_event_message';
}
/**
* @return array
*/
public static function getMap()
{
return array(
'ID' => array(
'data_type' => 'integer',
'primary' => true,
'autocomplete' => true,
),
'TIMESTAMP_X' => array(
'data_type' => 'datetime',
'required' => true,
'default_value' => function(){return new Type\DateTime();},
),
'EVENT_NAME' => array(
'data_type' => 'string',
'required' => true,
),
'LID' => array(
'data_type' => 'string',
),
'ACTIVE' => array(
'data_type' => 'string',
'required' => true,
'default_value' => 'Y'
),
'EMAIL_FROM' => array(
'data_type' => 'string',
'required' => true,
'default_value' => '#EMAIL_FROM#'
),
'EMAIL_TO' => array(
'data_type' => 'string',
'required' => true,
'default_value' => '#EMAIL_TO#'
),
'SUBJECT' => array(
'data_type' => 'string',
),
'MESSAGE' => array(
'data_type' => 'string',
),
'MESSAGE_PHP' => array(
'data_type' => 'string',
),
'BODY_TYPE' => array(
'data_type' => 'string',
'required' => true,
'default_value' => 'text'
),
'BCC' => array(
'data_type' => 'string',
),
'REPLY_TO' => array(
'data_type' => 'string',
),
'CC' => array(
'data_type' => 'string',
),
'IN_REPLY_TO' => array(
'data_type' => 'string',
),
'PRIORITY' => array(
'data_type' => 'string',
),
'FIELD1_NAME' => array(
'data_type' => 'string',
),
'FIELD1_VALUE' => array(
'data_type' => 'string',
),
'FIELD2_NAME' => array(
'data_type' => 'string',
),
'FIELD2_VALUE' => array(
'data_type' => 'string',
),
'SITE_TEMPLATE_ID' => array(
'data_type' => 'string',
),
'ADDITIONAL_FIELD' => array(
'data_type' => 'string',
'serialized' => true,
),
'EVENT_MESSAGE_SITE' => array(
'data_type' => 'Bitrix\Main\Mail\Internal\EventMessageSite',
'reference' => array('=this.ID' => 'ref.EVENT_MESSAGE_ID'),
),
'LANGUAGE_ID' => array(
'data_type' => 'string',
),
);
}
public static function replaceTemplateToPhp($str, $fromTemplateToPhp=true)
{
preg_match_all("/#([0-9a-zA-Z_.]+?)#/", $str, $matchesFindPlaceHolders);
$matchesFindPlaceHoldersCount = count($matchesFindPlaceHolders[1]);
for($i=0; $i<$matchesFindPlaceHoldersCount; $i++)
if(strlen($matchesFindPlaceHolders[1][$i]) > 200)
unset($matchesFindPlaceHolders[1][$i]);
if(empty($matchesFindPlaceHolders[1]))
return $str;
$ar = $matchesFindPlaceHolders[1];
$strResult = $str;
$arReplaceTagsOne = array();
if(!$fromTemplateToPhp)
{
foreach($ar as $k)
{
$replaceTo = '#'.$k.'#';
$replaceFrom = '$arParams["'.$k.'"]';
$replaceFromQuote = '$arParams[\''.$k.'\']';
$replaceFromPhp = '<?='.$replaceFrom.';?>';
$arReplaceTagsOne[$replaceFromPhp] = $replaceTo;
$arReplaceTagsOne[$replaceFrom] = $replaceTo;
$arReplaceTagsOne[$replaceFromQuote] = $replaceTo;
}
}
else
{
$replaceTemplateString = '';
foreach($ar as $k) $replaceTemplateString .= '|#'.$k.'#';
$arReplaceTags = array();
$bOpenPhpTag = false;
preg_match_all('/(<\?|\?>'.$replaceTemplateString.')/', $str, $matchesTag, PREG_OFFSET_CAPTURE);
foreach($matchesTag[0] as $tag)
{
$placeHolder = $tag[0];
$placeHolderPosition = $tag[1];
$ch1 = substr($placeHolder, 0, 1);
$ch2 = substr($placeHolder, 0, 2);
if($ch2 == "<?")
$bOpenPhpTag = true;
elseif($ch2 == "?>")
$bOpenPhpTag = false;
elseif($ch1 == "#")
{
$placeHolderClear = substr($placeHolder, 1, strlen($placeHolder)-2);
$bOpenQuote = (substr($str, $placeHolderPosition-2, 2) == '"{');
$bCloseQuote = (substr($str, $placeHolderPosition+strlen($placeHolder), 2) == '}"');
if($bOpenPhpTag && $bOpenQuote && $bCloseQuote)
$replaceTo = '$arParams[\''.$placeHolderClear.'\']';
else
$replaceTo = '$arParams["'.$placeHolderClear.'"]';
if(!$bOpenPhpTag) $replaceTo = '<?=' . $replaceTo . ';?>';
$arReplaceTags[$tag[0]][] = $replaceTo;
}
}
foreach($arReplaceTags as $k => $v)
{
if(count($v)>1)
{
foreach($v as $replaceTo)
{
$resultReplace = preg_replace('/'.$k.'/', $replaceTo, $strResult, 1);
if($resultReplace !== null)
$strResult = $resultReplace;
}
}
else
{
$arReplaceTagsOne[$k] = $v[0];
}
}
}
if(count($arReplaceTagsOne)>0)
$strResult = str_replace(array_keys($arReplaceTagsOne), array_values($arReplaceTagsOne), $strResult);
// php parser delete newline folowing the closing tag in string passed to eval
$strResult = str_replace(array("?>\n", "?>\r\n"), array("?>\n\n", "?>\r\n\r\n"), $strResult);
return $strResult;
}
/**
* @param Entity\Event $event
* @return Entity\EventResult
*/
public static function onBeforeUpdate(Entity\Event $event)
{
$result = new Entity\EventResult;
$data = $event->getParameters();
if(array_key_exists('MESSAGE', $data['fields']))
{
$data['fields']['MESSAGE_PHP'] = static::replaceTemplateToPhp($data['fields']['MESSAGE']);
$result->modifyFields($data['fields']);
}
return $result;
}
/**
* @param Entity\Event $event
* @return Entity\EventResult
*/
public static function onBeforeAdd(Entity\Event $event)
{
$result = new Entity\EventResult;
$data = $event->getParameters();
if(array_key_exists('MESSAGE', $data['fields']))
{
$data['fields']['MESSAGE_PHP'] = static::replaceTemplateToPhp($data['fields']['MESSAGE']);
$result->modifyFields($data['fields']);
}
return $result;
}
}