define("ADMIN_MODULE_NAME", "sender");
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_before.php");
use \Bitrix\Sender\MailingChainTable;
use \Bitrix\Sender\PostingTable;
use \Bitrix\Sender\PostingRecipientTable;
use \Bitrix\Main\Localization\Loc;
if(!\Bitrix\Main\Loader::includeModule("sender"))
ShowError(\Bitrix\Main\Localization\Loc::getMessage("MAIN_MODULE_NOT_INSTALLED"));
IncludeModuleLangFile(__FILE__);
$POST_RIGHT = $APPLICATION->GetGroupRight("sender");
if($POST_RIGHT<"W")
{
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_after.php");
$message = new CAdminMessage(GetMessage("sender_wizard_access_denied"));
$APPLICATION->SetTitle(GetMessage("sender_wizard_title"));
echo $message->Show();
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_admin.php");
}
$APPLICATION->SetTitle(GetMessage("sender_wizard_title"));
$MAILING_ID = intval($_REQUEST['MAILING_ID']);
$MAILING_CHAIN_ID = intval($_REQUEST['MAILING_CHAIN_ID']);
$arError = array();
$isPostedFormProcessed = false;
if(empty($step))
$step='mailing';
if(empty($ACTIVE) || $ACTIVE!='Y')
$ACTIVE = 'N';
$title_postfix = '';
if($step=='mailing')
{
IncludeModuleLangFile(dirname(__FILE__)."/mailing_edit.php");
if($REQUEST_METHOD == "POST" && !$isPostedFormProcessed && check_bitrix_sessid())
{
$NAME = trim($NAME);
if($MAILING_TYPE == 'NEW')
{
$arFields = Array(
"ACTIVE" => ($ACTIVE <> "Y"? "N":"Y"),
"SORT" => $SORT,
"IS_PUBLIC" => ($IS_PUBLIC <> "Y"? "N":"Y"),
"NAME" => $NAME,
"DESCRIPTION" => $DESCRIPTION,
"SITE_ID" => $SITE_ID,
);
$mailingAddDb = \Bitrix\Sender\MailingTable::add($arFields);
if($mailingAddDb->isSuccess())
{
$MAILING_ID = $mailingAddDb->getId();
}
else
{
$arError = $mailingAddDb->getErrorMessages();
}
}
else
{
$mailing = \Bitrix\Sender\MailingTable::getRowById($MAILING_ID);
if(!$mailing)
$arError[] = GetMessage("sender_wizard_step_mailing_existed_not_selected");
}
if(empty($arError))
{
if($MAILING_TYPE == 'NEW')
$step = 'mailing_group';
else
$step = 'chain';
$isPostedFormProcessed = true;
LocalRedirect('sender_mailing_wizard.php?IS_TRIGGER=N&step='.$step.'&MAILING_ID='.$MAILING_ID."&lang=".LANGUAGE_ID);
}
else
{
$DB->InitTableVarsForEdit("b_sender_mailing", "", "str_");
}
}
else
{
$str_ACTIVE = 'Y';
$str_SORT = 100;
}
$arMailingList = array();
$groupDb = \Bitrix\Sender\MailingTable::getList(array(
'select' => array('NAME', 'ID'),
'filter' => array('IS_TRIGGER' => 'N'),
'order' => array('NAME' => 'ASC'),
));
while($arMailing = $groupDb->fetch())
{
$arMailingList[] = $arMailing;
}
if(empty($arMailingList)) $MAILING_TYPE = 'NEW';
}
if($step=='group')
{
IncludeModuleLangFile(dirname(__FILE__)."/group_edit.php");
if(!isset($group_create) && $REQUEST_METHOD == "POST" && !$isPostedFormProcessed && check_bitrix_sessid())
{
$res = false;
$NAME = trim($NAME);
if(isset($popup_create_group) && $popup_create_group == 'Y')
{
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_js.php");
$NAME = $APPLICATION->ConvertCharset($NAME, "UTF-8", LANG_CHARSET);
$DESCRIPTION = $APPLICATION->ConvertCharset($DESCRIPTION, "UTF-8", LANG_CHARSET);
}
$arFields = Array(
"ACTIVE" => ($ACTIVE <> "Y"? "N":"Y"),
"NAME" => $NAME,
"SORT" => $SORT,
"DESCRIPTION" => $DESCRIPTION,
);
if(is_array($CONNECTOR_SETTING) && count($CONNECTOR_SETTING)>0)
{
$groupAddDb = \Bitrix\Sender\GroupTable::add($arFields);
if($groupAddDb->isSuccess())
{
$ID = $groupAddDb->getId();
$res = ($ID > 0);
}
else
{
$arError = $groupAddDb->getErrorMessages();
}
}
else
{
$arError[] = GetMessage('sender_group_conn_not_selected');
}
if($res)
{
if(is_array($CONNECTOR_SETTING))
{
$groupConnectorsDataCount = 0;
\Bitrix\Sender\GroupConnectorTable::delete(array('GROUP_ID' => $ID));
$arEndpointList = \Bitrix\Sender\ConnectorManager::getEndpointFromFields($CONNECTOR_SETTING);
foreach ($arEndpointList as $endpoint)
{
$connector = \Bitrix\Sender\ConnectorManager::getConnector($endpoint);
if ($connector)
{
$connector->setFieldValues($endpoint['FIELDS']);
$connectorDataCount = $connector->getDataCount();
$arGroupConnectorAdd = array(
'GROUP_ID' => $ID,
'NAME' => $connector->getName(),
'ENDPOINT' => $endpoint,
'ADDRESS_COUNT' => $connectorDataCount
);
$groupConnectorAddDb = \Bitrix\Sender\GroupConnectorTable::add($arGroupConnectorAdd);
if($groupConnectorAddDb->isSuccess())
{
$groupConnectorsDataCount += $connectorDataCount;
}
}
}
\Bitrix\Sender\GroupTable::update($ID, array('ADDRESS_COUNT' => $groupConnectorsDataCount));
}
}
if(empty($arError))
{
$step = 'mailing_group';
$isPostedFormProcessed = true;
if(isset($popup_create_group) && $popup_create_group == 'Y')
{
?>
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_admin_js.php");
exit();
}
else
{
LocalRedirect('sender_mailing_wizard.php?IS_TRIGGER=N&step='.$step.'&MAILING_ID='.$MAILING_ID."&lang=".LANGUAGE_ID);
}
}
else
{
$DB->InitTableVarsForEdit("b_sender_group", "", "str_");
}
}
else
{
$str_ACTIVE = 'Y';
$str_SORT = 100;
}
if(isset($CONNECTOR_SETTING))
$arConnectorSettings = $CONNECTOR_SETTING;
else
$arConnectorSettings = array();
if(count($endpointList)>0)
{
$arConnectorSettings = \Bitrix\Sender\ConnectorManager::getFieldsFromEndpoint($endpointList);
}
$arAvailableConnectors = array();
$arExistedConnectors = array();
$arConnector = \Bitrix\Sender\ConnectorManager::getConnectorList();
/** @var \Bitrix\Sender\Connector $connector */
foreach($arConnector as $connector)
{
if(array_key_exists($connector->getModuleId(), $arConnectorSettings))
$arFieldsValues = $arConnectorSettings[$connector->getModuleId()][$connector->getCode()];
else
$arFieldsValues = array();
$connector->setFieldPrefix('CONNECTOR_SETTING');
$connectorIdCount = 0;
$arAvailableConnectors[$connector->getId()] = array(
'ID' => $connector->getId(),
'NAME' => $connector->getName(),
'FORM' => $connector->getForm().''
);
if( array_key_exists($connector->getModuleId(), $arConnectorSettings) )
{
if( array_key_exists($connector->getCode(), $arConnectorSettings[$connector->getModuleId()]) )
{
$connectorIdCount = 0;
$arFieldsValuesConnector = $arConnectorSettings[$connector->getModuleId()][$connector->getCode()];
foreach($arFieldsValuesConnector as $fieldValues)
{
$connector->setFieldFormName('post_form');
$connector->setFieldValues($fieldValues);
$arExistedConnectors[] = array(
'ID' => $connector->getId(),
'NAME' => $connector->getName(),
'FORM' => str_replace('%CONNECTOR_NUM%', $connectorIdCount, $connector->getForm().''),
'COUNT' => $connector->getDataCount()
);
$connectorIdCount++;
}
}
}
}
}
if($step=='mailing_group')
{
IncludeModuleLangFile(dirname(__FILE__)."/mailing_edit.php");
if($REQUEST_METHOD == "POST" && !$isPostedFormProcessed && check_bitrix_sessid())
{
$ID = $MAILING_ID;
$GROUP = array();
if(isset($GROUP_INCLUDE))
{
$GROUP_INCLUDE = explode(',', $GROUP_INCLUDE);
trimArr($GROUP_INCLUDE);
}
else
$GROUP_INCLUDE = array();
if(isset($GROUP_EXCLUDE))
{
$GROUP_EXCLUDE = explode(',', $GROUP_EXCLUDE);
trimArr($GROUP_EXCLUDE);
}
else
$GROUP_EXCLUDE = array();
if($MAILING_ID>0)
{
foreach($GROUP_INCLUDE as $groupId)
{
if (is_numeric($groupId))
{
$GROUP[] = array('MAILING_ID' => $ID, 'GROUP_ID' => $groupId, 'INCLUDE' => true);
}
}
foreach($GROUP_EXCLUDE as $groupId)
{
if (is_numeric($groupId))
{
$GROUP[] = array('MAILING_ID' => $ID, 'GROUP_ID' => $groupId, 'INCLUDE' => false);
}
}
\Bitrix\Sender\MailingGroupTable::delete(array('MAILING_ID' => $ID));
foreach($GROUP as $arGroup)
{
\Bitrix\Sender\MailingGroupTable::add($arGroup);
}
}
if(empty($arError))
{
$step = 'chain';
$isPostedFormProcessed = true;
LocalRedirect('sender_mailing_wizard.php?IS_TRIGGER=N&step='.$step.'&MAILING_ID='.$MAILING_ID."&lang=".LANGUAGE_ID);
}
}
else
{
$ID = $MAILING_ID;
$GROUP_EXCLUDE = $GROUP_INCLUDE = array();
$groupDb = \Bitrix\Sender\MailingGroupTable::getList(array(
'select' => array('ID' => 'GROUP_ID', 'INCLUDE'),
'filter' => array('MAILING_ID' => $ID),
));
while($arGroup = $groupDb->fetch())
{
if($arGroup['INCLUDE'])
$GROUP_INCLUDE[] = $arGroup['ID'];
else
$GROUP_EXCLUDE[] = $arGroup['ID'];
}
}
$GROUP_EXIST = array();
$groupDb = \Bitrix\Sender\GroupTable::getList(array(
'select' => array('NAME', 'ID', 'ADDRESS_COUNT'),
'filter' => array('ACTIVE' => 'Y'),
'order' => array('SORT' => 'ASC', 'NAME' => 'ASC'),
));
while($arGroup = $groupDb->fetch())
{
$GROUP_EXIST[] = $arGroup;
}
}
if($step=='chain')
{
IncludeModuleLangFile(dirname(__FILE__)."/mailing_chain_edit.php");
$isUserHavePhpAccess = $USER->CanDoOperation('edit_php');
if($REQUEST_METHOD == "POST" && !$isPostedFormProcessed && check_bitrix_sessid())
{
if($MAILING_CHAIN_ID <= 0)
{
if(!$isUserHavePhpAccess)
{
$MESSAGE_OLD = false;
if($ID>0)
{
$mailingChainOld = \Bitrix\Sender\MailingChainTable::getRowById(array('ID' => $ID));
if($mailingChainOld)
{
$MESSAGE_OLD = $mailingChainOld['MESSAGE'];
}
}
$MESSAGE = CMain::ProcessLPA($MESSAGE, $MESSAGE_OLD);
}
$arFields = Array(
"MAILING_ID" => $MAILING_ID,
"SUBJECT" => $SUBJECT,
"EMAIL_FROM" => $EMAIL_FROM,
"MESSAGE" => $MESSAGE,
"TEMPLATE_TYPE" => $TEMPLATE_TYPE,
"TEMPLATE_ID" => $TEMPLATE_ID,
"PRIORITY" => $PRIORITY,
"LINK_PARAMS" => $LINK_PARAMS,
"CREATED_BY" => $USER->GetID(),
"REITERATE" => "N",
"AUTO_SEND_TIME" => "",
"DAYS_OF_WEEK" => "",
"DAYS_OF_MONTH" => "",
"TIMES_OF_DAY" => "",
);
if(empty($MESSAGE) && isset($IS_TEMPLATE_LIST_SHOWN) && $IS_TEMPLATE_LIST_SHOWN=='Y')
{
$arError[] = GetMessage("sender_chain_edit_error_select_template");
}
if(empty($arError))
{
$mailingAddDb = \Bitrix\Sender\MailingChainTable::add($arFields);
if ($mailingAddDb->isSuccess())
{
$ID = $mailingAddDb->getId();
\Bitrix\Sender\MailingChainTable::initPosting($ID);
$res = ($ID > 0);
$MAILING_CHAIN_ID = $ID;
}
else
{
$arError = $mailingAddDb->getErrorMessages();
}
}
}
if(empty($arError))
{
if($MAILING_CHAIN_ID > 0)
{
//add or delete files
//Delete checked
if(is_array($FILES_del))
{
$FILE_ID_tmp = array();
foreach($FILES_del as $file=>$fileMarkDel)
{
$file = intval($file);
if($file>0)
$FILE_ID_tmp[] = $file;
}
if(count($FILE_ID_tmp)>0)
{
$deleteFileDb = \Bitrix\Sender\MailingAttachmentTable::getList(array(
'select' => array('FILE_ID', 'CHAIN_ID'),
'filter' => array('CHAIN_ID' => $ID, 'FILE_ID' => $FILE_ID_tmp),
));
while($arDeleteFile = $deleteFileDb->fetch())
{
if(!empty($arDeleteFile))
{
CFile::Delete($arDeleteFile["FILE_ID"]);
\Bitrix\Sender\MailingAttachmentTable::delete($arDeleteFile);
}
}
}
}
//Brandnew
$arFiles = array();
if(is_array($_FILES["NEW_FILE"]))
{
foreach($_FILES["NEW_FILE"] as $attribute=>$files)
{
if(is_array($files))
foreach($files as $index=>$value)
$arFiles[$index][$attribute]=$value;
}
foreach($arFiles as $index => $file)
{
if(!is_uploaded_file($file["tmp_name"]))
unset($arFiles[$index]);
}
}
//New from media library and file structure
if(array_key_exists("NEW_FILE", $_POST) && is_array($_POST["NEW_FILE"]))
{
foreach($_POST["NEW_FILE"] as $index=>$value)
{
if (is_string($value) && preg_match("/^https?:\\/\\//", $value))
{
$arFiles[$index] = CFile::MakeFileArray($value);
}
else
{
if(is_array($value))
{
$filePath = $value['tmp_name'];
}
else
{
$filePath = $value;
}
$isCheckedSuccess = false;
$io = CBXVirtualIo::GetInstance();
$docRoot = \Bitrix\Main\Application::getDocumentRoot();
if(strpos($filePath, CTempFile::GetAbsoluteRoot()) === 0)
{
$absPath = $filePath;
}
elseif(strpos($io->CombinePath($docRoot, $filePath), CTempFile::GetAbsoluteRoot()) === 0)
{
$absPath = $io->CombinePath($docRoot, $filePath);
}
else
{
$absPath = $io->CombinePath(CTempFile::GetAbsoluteRoot(), $filePath);
}
if ($io->ValidatePathString($absPath) && $io->FileExists($absPath))
{
$docRoot = $io->CombinePath($docRoot, '/');
$relPath = str_replace($docRoot, '', $absPath);
$perm = $APPLICATION->GetFileAccessPermission($relPath);
if ($perm >= "W")
{
$isCheckedSuccess = true;
}
}
if($isCheckedSuccess)
{
$arFiles[$index] = CFile::MakeFileArray($io->GetPhysicalName($absPath));
if(is_array($value))
{
$arFiles[$index]['name'] = $value['name'];
}
}
}
}
}
foreach($arFiles as $file)
{
if(strlen($file["name"])>0 and intval($file["size"])>0)
{
$resultInsertAttachFile = false;
$file["MODULE_ID"] = "main";
$fid = intval(CFile::SaveFile($file, "sender", true));
if($fid > 0)
{
$resultAddAttachFile = \Bitrix\Sender\MailingAttachmentTable::add(array(
'CHAIN_ID' => $ID,
'FILE_ID' => $fid
));
$resultInsertAttachFile = $resultAddAttachFile->isSuccess();
}
if(!$resultInsertAttachFile)
break;
}
}
if(isset($TEMPLATE_ACTION_SAVE) && $TEMPLATE_ACTION_SAVE == 'Y')
{
if(!empty($TEMPLATE_ACTION_SAVE_NAME) && !empty($MESSAGE))
{
$CONTENT = $MESSAGE;
$useBlockEditor = false;
if($TEMPLATE_TYPE && $TEMPLATE_ID)
{
\Bitrix\Main\Loader::includeModule('fileman');
$chainTemplate = \Bitrix\Sender\Preset\Template::getById($TEMPLATE_TYPE, $TEMPLATE_ID);
if($chainTemplate && $chainTemplate['HTML'])
{
$CONTENT = \Bitrix\Fileman\Block\Editor::fillTemplateBySliceContent($chainTemplate['HTML'], $CONTENT);
if($CONTENT)
{
$useBlockEditor = true;
}
}
}
$addResult = \Bitrix\Sender\TemplateTable::add(array(
'NAME' => $TEMPLATE_ACTION_SAVE_NAME,
'CONTENT' => $CONTENT
));
if($useBlockEditor && $addResult->isSuccess())
{
\Bitrix\Sender\MailingChainTable::update(
array('ID' => $ID),
array('TEMPLATE_TYPE' => 'USER', 'TEMPLATE_ID' => $addResult->getId())
);
}
}
}
}
$step = 'chain_send_type';
$isPostedFormProcessed = true;
LocalRedirect('sender_mailing_wizard.php?IS_TRIGGER=N&step='.$step.'&MAILING_ID='.$MAILING_ID."&MAILING_CHAIN_ID=".$MAILING_CHAIN_ID."&lang=".LANGUAGE_ID);
}
else
{
$DB->InitTableVarsForEdit("b_sender_mailing_chain", "", "str_");
}
}
else
{
}
$arMailngChainAttachment = array();
if($ID>0)
{
$attachmentFileDb = \Bitrix\Sender\MailingAttachmentTable::getList(array(
'select' => array('FILE_ID'),
'filter' => array('CHAIN_ID' => $ID),
));
while($ar = $attachmentFileDb->fetch())
{
if($arFileFetch = CFile::GetFileArray($ar['FILE_ID']))
$arMailngChainAttachment[] = $arFileFetch;
}
}
\Bitrix\Sender\PostingRecipientTable::setPersonalizeList(\Bitrix\Sender\MailingTable::getPersonalizeList($MAILING_ID));
$templateListHtml = \Bitrix\Sender\Preset\Template::getTemplateListHtml('tabControl_layout');
}
if($step=='chain_send_type')
{
$ID = $MAILING_CHAIN_ID;
IncludeModuleLangFile(dirname(__FILE__)."/mailing_chain_edit.php");
$DAYS_OF_WEEK = empty($DAYS_OF_WEEK) ? '' : implode(',',$DAYS_OF_WEEK);
if($REQUEST_METHOD == "POST" && !$isPostedFormProcessed && check_bitrix_sessid())
{
$arFields = Array(
"REITERATE" => "N",
"AUTO_SEND_TIME" => "",
"DAYS_OF_WEEK" => "",
"DAYS_OF_MONTH" => "",
"TIMES_OF_DAY" => "",
);
switch($SEND_TYPE)
{
case 'MANUAL':
break;
case 'TIME':
if(empty($AUTO_SEND_TIME))
$arError[] = GetMessage("sender_chain_edit_error_empty_time");
if(!\Bitrix\Main\Type\DateTime::isCorrect($AUTO_SEND_TIME))
$arError[] = GetMessage("sender_chain_edit_error_time_format");
else
$arFields["AUTO_SEND_TIME"] = new \Bitrix\Main\Type\DateTime($AUTO_SEND_TIME);
if ($ID <= 0)
{
$arFields["STATUS"] = \Bitrix\Sender\MailingChainTable::STATUS_SEND;
}
else
{
$arMailingChainOld = \Bitrix\Sender\MailingChainTable::getRowById(array('ID' => $ID));
if($arMailingChainOld['STATUS'] == \Bitrix\Sender\MailingChainTable::STATUS_NEW)
$arFields["STATUS"] = \Bitrix\Sender\MailingChainTable::STATUS_SEND;
}
break;
case 'REITERATE':
if(empty($DAYS_OF_WEEK) && empty($DAYS_OF_MONTH))
$arError[] = GetMessage("sender_chain_edit_error_reiterate");
$arFields["REITERATE"] = "Y";
$arFields["DAYS_OF_WEEK"] = $DAYS_OF_WEEK;
$arFields["DAYS_OF_MONTH"] = $DAYS_OF_MONTH;
$arFields["TIMES_OF_DAY"] = $TIMES_OF_DAY;
if ($ID <= 0)
{
$arFields["STATUS"] = \Bitrix\Sender\MailingChainTable::STATUS_WAIT;
}
else
{
$arMailingChainOld = \Bitrix\Sender\MailingChainTable::getRowById(array('ID' => $ID));
if($arMailingChainOld['STATUS'] == \Bitrix\Sender\MailingChainTable::STATUS_NEW)
$arFields["STATUS"] = \Bitrix\Sender\MailingChainTable::STATUS_SEND;
}
$arFields["STATUS"] = \Bitrix\Sender\MailingChainTable::STATUS_WAIT;
break;
default:
$arError[] = GetMessage("sender_chain_edit_error_send_type");
}
if(empty($arError))
{
$mailingUpdateDb = \Bitrix\Sender\MailingChainTable::update(array('ID' => $ID), $arFields);
if ($mailingUpdateDb->isSuccess())
{
//\Bitrix\Sender\MailingChainTable::initPosting($ID);
}
else
{
$arError = $mailingUpdateDb->getErrorMessages();
}
}
if(empty($arError))
{
LocalRedirect('sender_mailing_chain_edit.php?MAILING_ID='.$MAILING_ID.'&ID='.$ID.'&lang='.LANGUAGE_ID);
}
else
{
$DB->InitTableVarsForEdit("b_sender_mailing_chain", "", "str_");
if(!isset($SEND_TYPE))
{
if ($str_REITERATE == 'Y')
$SEND_TYPE = 'REITERATE';
elseif (!empty($str_AUTO_SEND_TIME))
$SEND_TYPE = 'TIME';
elseif ($ID > 0)
$SEND_TYPE = 'MANUAL';
}
}
}
else
{
$statistics = \Bitrix\Sender\Stat\Statistics::create()->filter('mailingId', $MAILING_ID);
$recommendedSendTime = $statistics->getRecommendedSendTime();
}
}
if($step=='trig_mailing')
{
IncludeModuleLangFile(dirname(__FILE__)."/mailing_edit.php");
if($REQUEST_METHOD == "POST" && !$isPostedFormProcessed && check_bitrix_sessid())
{
$arError = array();
$arFields = array(
'IS_TRIGGER' => 'Y',
//"ACTIVE" => ($ACTIVE <> "Y"? "N":"Y"),
"SORT" => $SORT,
"IS_PUBLIC" => "N",
"NAME" => $NAME,
"DESCRIPTION" => $DESCRIPTION,
"SITE_ID" => $SITE_ID,
"EMAIL_FROM" => $EMAIL_FROM,
);
if(empty($EMAIL_FROM))
$arError[] = GetMessage("sender_chain_edit_error_email_from");
$chainList = array();
if(empty($arError) && !empty($MAILING_TEMPLATE_CODE))
{
$presetMailingList = \Bitrix\Sender\MailingTable::getPresetMailingList(array('CODE' => $MAILING_TEMPLATE_CODE));
$presetMailing = current($presetMailingList);
if(!empty($presetMailing))
{
$arFields['TRIGGER_FIELDS'] = array(
'START' => $presetMailing['TRIGGER']['START']['ENDPOINT'],
'END' => $presetMailing['TRIGGER']['END']['ENDPOINT'],
);
foreach($presetMailing['CHAIN'] as $chain)
{
$chain['EMAIL_FROM'] = $EMAIL_FROM;
$chain['CREATED_BY'] = $USER->GetID();
$chainList[] = $chain;
}
$result = new \Bitrix\Main\Entity\Result;
\Bitrix\Sender\MailingTable::checkFieldsChain($result, null, $chainList);
if(!$result->isSuccess())
$arError = array_merge($arError, $result->getErrorMessages());
}
else
{
$arError[] = GetMessage("sender_chain_edit_error_tmpl_no_found").' "' . $MAILING_TEMPLATE_CODE . '".';
}
}
if(empty($arError))
{
if($MAILING_ID > 0)
{
$updateDb = \Bitrix\Sender\MailingTable::update($MAILING_ID, $arFields);
if(!$updateDb->isSuccess())
$arError = array_merge($arError, $updateDb->getErrorMessages());
}
else
{
$arFields['ACTIVE'] = 'N';
$addDb = \Bitrix\Sender\MailingTable::add($arFields);
if($addDb->isSuccess())
{
$MAILING_ID = $addDb->getId();
$resultDb = \Bitrix\Sender\MailingTable::updateChain($MAILING_ID, $chainList);
$resultDb->isSuccess();
}
else
$arError = array_merge($arError, $addDb->getErrorMessages());
}
}
if(empty($arError))
{
$isPostedFormProcessed = true;
{
$step = 'trig_mailing_group';
LocalRedirect('sender_mailing_wizard.php?IS_TRIGGER=Y&step='.$step.'&MAILING_ID='.$MAILING_ID."&lang=".LANGUAGE_ID);
}
}
else
{
}
$DB->InitTableVarsForEdit("b_sender_mailing", "", "str_");
}
else
{
ClearVars();
$str_SORT = 100;
$rubric = new CDBResult(\Bitrix\Sender\MailingTable::getById($MAILING_ID));
if(!$rubric->ExtractFields("str_"))
{
$DB->InitTableVarsForEdit("b_sender_mailing", "", "str_");
}
}
if($MAILING_ID > 0)
{
$title_postfix = '_exist';
}
$presetMailingList = \Bitrix\Sender\MailingTable::getPresetMailingList();
}
if($step=='trig_mailing_group')
{
IncludeModuleLangFile(dirname(__FILE__)."/mailing_edit.php");
$triggerList = \Bitrix\Sender\TriggerManager::getList();
$triggerListForJS = array();
foreach($triggerList as $trigger)
{
foreach(array('START', 'END') as $type)
{
if($type == 'END' && !$trigger->canBeTarget())
{
continue;
}
$triggerListForJS[$type][$trigger->getId()] = \Bitrix\Sender\TriggerSettings::getArrayFromTrigger($trigger);
$triggerListForJS[$type][$trigger->getId()]['ID'] = $trigger->getId();
$triggerListForJS[$type][$trigger->getId()]['NAME'] = $trigger->getName();
$trigger->setFieldFormName('post_form');
$trigger->setFieldPrefix('ENDPOINT['.$type.'][FIELDS]');
$triggerListForJS[$type][$trigger->getId()]['FORM'] = $trigger->getForm();
}
}
$triggerListExists = array('START' => null, 'END' => null);
$mailing = \Bitrix\Sender\MailingTable::getRowById($MAILING_ID);
if(!empty($mailing['TRIGGER_FIELDS']))
{
foreach($triggerListExists as $type => $value)
{
if(!is_array($mailing['TRIGGER_FIELDS'][$type])) continue;
$trigger = \Bitrix\Sender\TriggerManager::getOnce($mailing['TRIGGER_FIELDS'][$type]);
if ($trigger)
{
$triggerListExists[$type] = $mailing['TRIGGER_FIELDS'][$type] + $triggerListForJS[$type][$trigger->getId()];
$trigger->setFieldFormName('post_form');
$trigger->setFieldPrefix('ENDPOINT['.$type.'][FIELDS]');
$trigger->setFields($triggerListExists[$type]['FIELDS']);
$triggerListExists[$type]['FORM'] = $trigger->getForm();
}
}
}
if($REQUEST_METHOD == "POST" && !$isPostedFormProcessed && check_bitrix_sessid())
{
$arError = array();
$triggerListExists = array('START' => null, 'END' => null);
foreach($triggerListExists as $type => $value)
{
$trigger = \Bitrix\Sender\TriggerManager::getOnce($ENDPOINT[$type]);
if($trigger)
{
$triggerListExists[$type] = $ENDPOINT[$type] + \Bitrix\Sender\TriggerSettings::getArrayFromTrigger($trigger);
}
}
$updateDb = \Bitrix\Sender\MailingTable::update($MAILING_ID, array('TRIGGER_FIELDS' => $triggerListExists));
if(!$updateDb->isSuccess())
$arError = array_merge($arError, $updateDb->getErrorMessages());
if(empty($arError))
{
$isPostedFormProcessed = true;
LocalRedirect('/bitrix/admin/sender_mailing_trig_edit.php?ID=' . $MAILING_ID . "&lang=".LANGUAGE_ID);
}
}
}
if(!empty($arError))
$message = new CAdminMessage(implode("
", $arError));
\CJSCore::Init(array("sender_admin"));
$title = GetMessage("sender_wizard_step_".$step.$title_postfix."_title");
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_after.php");
?>