/** * @param string $email * @param array $mailingList * @param string $siteId * @return void * //send email with url to confirmation of subscription */ public static function sendEventConfirm($email, array $mailingIdList, $siteId) { $mailingNameList = array(); $mailingDb = MailingTable::getList(array('select' => array('NAME'), 'filter' => array('ID' => $mailingIdList))); while ($mailing = $mailingDb->fetch()) { $mailingNameList[] = $mailing['NAME']; } $subscription = array('EMAIL' => $email, 'SITE_ID' => $siteId, 'MAILING_LIST' => $mailingIdList); $confirmUrl = static::getLinkSub($subscription); $date = new \Bitrix\Main\Type\DateTime(); $eventSendFields = array("EVENT_NAME" => "SENDER_SUBSCRIBE_CONFIRM", "C_FIELDS" => array("EMAIL" => $email, "DATE" => $date->toString(), "CONFIRM_URL" => $confirmUrl, "MAILING_LIST" => implode("\r\n", $mailingNameList)), "LID" => is_array($siteId) ? implode(",", $siteId) : $siteId); \Bitrix\Main\Mail\Event::send($eventSendFields); }
/** * @param array $params * @return void */ protected static function processEvent($params) { $moduleId = $params['MODULE_ID']; $eventType = $params['EVENT_TYPE']; $eventData = $params['EVENT_DATA']; $filter = array('=MAILING_CHAIN.MAILING.ACTIVE' => 'Y', '=MAILING_CHAIN.IS_TRIGGER' => 'Y', '=MAILING_CHAIN.STATUS' => array(MailingChainTable::STATUS_WAIT, MailingChainTable::STATUS_SEND), '=EVENT' => $moduleId . '/' . $eventType); if (isset($params['FILTER']) && is_array($params['FILTER'])) { $filter = $filter + $params['FILTER']; } $chainDb = MailingTriggerTable::getList(array('select' => array('ENDPOINT', 'SITE_ID' => 'MAILING_CHAIN.MAILING.SITE_ID', 'ID' => 'MAILING_CHAIN.ID', 'MAILING_ID' => 'MAILING_CHAIN.MAILING_ID', 'PARENT_ID' => 'MAILING_CHAIN.PARENT_ID', 'POSTING_ID' => 'MAILING_CHAIN.POSTING_ID', 'TIME_SHIFT' => 'MAILING_CHAIN.TIME_SHIFT', 'STATUS' => 'MAILING_CHAIN.STATUS', 'AUTO_SEND_TIME' => 'MAILING_CHAIN.AUTO_SEND_TIME'), 'filter' => $filter, 'order' => array('MAILING_CHAIN_ID' => 'ASC', 'IS_TYPE_START' => 'ASC'))); while ($chain = $chainDb->fetch()) { $settings = new TriggerSettings($chain['ENDPOINT']); $trigger = static::getOnce($settings->getEndpoint()); if (!$trigger) { continue; } $trigger->setSiteId($chain['SITE_ID']); $trigger->setFields($settings->getFields()); $trigger->setParams(array('CHAIN' => $chain, 'EVENT' => $eventData)); // mark trigger as first run for process old data $runForOldData = $trigger->canRunForOldData() && $settings->canRunForOldData() && !$settings->wasRunForOldData(); $trigger->setRunForOldData($runForOldData); // run trigger filter if (!$trigger->filter()) { continue; } //add recipient to posting static::$postingId = null; $recipientDb = $trigger->getRecipientResult(); while ($recipient = $recipientDb->fetch()) { if ($settings->isTypeStart()) { static::addRecipient($chain, $settings, $recipient); } else { static::stop($chain, $recipient, true); } } // mark mailing trigger fields as first run for process old data if ($runForOldData) { MailingTable::setWasRunForOldData($chain['MAILING_ID'], $runForOldData); } if ($settings->isTypeStart()) { // prevent email event if ($settings->isPreventEmail()) { static::preventMailEvent($trigger->getMailEventToPrevent()); } //start sending of mailing chain static::send($chain); } } //return $data; }
$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']; } } } //Edit/Add part ClearVars(); $str_SORT = 100; $str_ACTIVE = "Y"; $str_VISIBLE = "Y"; if ($ID > 0) { $rubric = new CDBResult(\Bitrix\Sender\MailingTable::getById($ID)); if (!$rubric->ExtractFields("str_")) { $ID = 0; } } $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 ($bVarsFromForm) { $DB->InitTableVarsForEdit("b_sender_mailing", "", "str_"); } \CJSCore::Init(array("sender_admin")); $APPLICATION->SetTitle($ID > 0 ? GetMessage("sender_mailing_edit_title_edit") . $ID : GetMessage("sender_mailing_edit_title_new")); require $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_admin_after.php";
} $lAdmin->AddFooter(array(array("title" => GetMessage("MAIN_ADMIN_LIST_SELECTED"), "value" => $rsData->SelectedRowsCount()), array("counter" => true, "title" => GetMessage("MAIN_ADMIN_LIST_CHECKED"), "value" => "0"))); $lAdmin->AddGroupActionTable(array("delete" => GetMessage("MAIN_ADMIN_LIST_DELETE"))); $aContext = array(array("TEXT" => GetMessage("SENDER_CONTACT_LIST_BUTTON_ADD"), "TITLE" => GetMessage("POST_ADD_TITLE"), "ICON" => "btn_new", "MENU" => array(array("TEXT" => GetMessage("SENDER_CONTACT_LIST_BUTTON_ADD_FORM"), "ACTION" => $lAdmin->ActionRedirect("sender_contact_edit.php?lang=" . LANGUAGE_ID)), array("TEXT" => GetMessage("SENDER_CONTACT_LIST_BUTTON_ADD_LIST"), "ACTION" => $lAdmin->ActionRedirect("sender_contact_import.php?lang=" . LANGUAGE_ID)), array("TEXT" => GetMessage("SENDER_CONTACT_LIST_BUTTON_ADD_FILE"), "ACTION" => $lAdmin->ActionRedirect("sender_contact_import.php?lang=" . LANGUAGE_ID)), $POST_RIGHT >= "W" ? array("TEXT" => GetMessage("SENDER_CONTACT_LIST_BUTTON_ADD_PULL1"), "ACTION" => $lAdmin->ActionRedirect("sender_contact_admin.php?action=pull&lang=" . LANGUAGE_ID)) : null))); $aContext[] = array("TEXT" => GetMessage("SENDER_CONTACT_LIST_EDIT"), "LINK" => "/bitrix/admin/sender_list_admin.php?lang=" . LANG, "TITLE" => GetMessage("SENDER_CONTACT_LIST_EDIT_TITLE"), "ICON" => ""); $lAdmin->AddAdminContextMenu($aContext); $lAdmin->CheckListMode(); $APPLICATION->SetTitle(GetMessage("rub_title")); require $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_admin_after.php"; $oFilter = new CAdminFilter($sTableID . "_filter", array(GetMessage("rub_f_name"), GetMessage("rub_f_email"), GetMessage("rub_f_subscribed"), GetMessage("rub_f_unsubscribed"), GetMessage("rub_f_list"))); $oFilter->SetDefaultRows(array("find_email", "find_list")); $oFilter->AddPreset(array("ID" => "subscribed_list", "NAME" => GetMessage('SENDER_CONTACT_LIST_PRESET_SUB'), "FIELDS" => array("find_email" => "", "find_subscribed" => "ALL"))); $oFilter->AddPreset(array("ID" => "unsubscribed_list", "NAME" => GetMessage('SENDER_CONTACT_LIST_PRESET_UN_SUB'), "FIELDS" => array("find_email" => "", "find_unsubscribed" => "ALL"))); $filterMailingSubList = array('reference' => array(GetMessage('rub_f_yes')), 'reference_id' => array('ALL')); $filterMailingUnSubList = array('reference' => array(GetMessage('rub_f_yes')), 'reference_id' => array('ALL')); $mailingDb = \Bitrix\Sender\MailingTable::getList(array('select' => array('IS_TRIGGER', 'REFERENCE' => 'NAME', 'REFERENCE_ID' => 'ID'))); while ($arMailing = $mailingDb->fetch()) { if ($arMailing['IS_TRIGGER'] != 'Y') { $filterMailingSubList['reference'][] = $arMailing['REFERENCE']; $filterMailingSubList['reference_id'][] = $arMailing['REFERENCE_ID']; } $filterMailingUnSubList['reference'][] = $arMailing['REFERENCE']; $filterMailingUnSubList['reference_id'][] = $arMailing['REFERENCE_ID']; } ?> <form name="find_form" method="get" action="<?php echo $APPLICATION->GetCurPage(); ?> "> <?php $oFilter->Begin();
<form name="find_form" method="get" action="<?php echo $APPLICATION->GetCurPage(); ?> "> <?php $oFilter->Begin(); ?> <tr> <td><?php echo GetMessage("sender_stat_flt_mailing"); ?> :</td> <td> <?php $arr = array(); $mailingDb = \Bitrix\Sender\MailingTable::getList(array('select' => array('REFERENCE' => 'NAME', 'REFERENCE_ID' => 'ID'), 'filter' => $arMailingFilter)); while ($arMailing = $mailingDb->fetch()) { $arr['reference'][] = $arMailing['REFERENCE']; $arr['reference_id'][] = $arMailing['REFERENCE_ID']; } echo SelectBoxFromArray("find_mailing_id", $arr, $MAILING_ID, false, ""); ?> </td> </tr> <?php if ($MAILING_ID > 0) { ?> <tr> <td><?php echo GetMessage("sender_stat_flt_mailing_chain");
case "activate": case "deactivate": $arFields["ACTIVE"] = $_REQUEST['action'] == "activate" ? "Y" : "N"; $dataUpdateDb = \Bitrix\Sender\MailingTable::update($dataPrimary, $arFields); if (!$dataUpdateDb->isSuccess()) { $LAST_ERROR = $dataUpdateDb->getErrorMessages(); $LAST_ERROR = $LAST_ERROR[0]; $lAdmin->AddGroupError(GetMessage("rub_save_error") . $LAST_ERROR, $ID); } break; } } } // runtime: RECIPIENT_CNT = include_cnt = group_cnt * (exclude_int) $arFilter['IS_TRIGGER'] = 'N'; $groupListDb = \Bitrix\Sender\MailingTable::getList(array('select' => array('ID', 'NAME', 'SORT', 'DATE_INSERT', 'ACTIVE', 'IS_PUBLIC', 'SITE_ID', 'RECIPIENT_CNT'), 'filter' => $arFilter, 'runtime' => array(new \Bitrix\Main\Entity\ExpressionField('RECIPIENT_CNT', 'SUM(%2$s*(%1$s))', array('MAILING_GROUP.INCLUDE', 'MAILING_GROUP.GROUP.ADDRESS_COUNT'))), 'order' => array($by => $order))); $rsData = new CAdminResult($groupListDb, $sTableID); $rsData->NavStart(); $lAdmin->NavText($rsData->GetNavPrint(GetMessage("rub_nav"))); $lAdmin->AddHeaders(array(array("id" => "ID", "content" => "ID", "sort" => "ID", "align" => "right", "default" => true), array("id" => "NAME", "content" => GetMessage("rub_name"), "sort" => "NAME", "default" => true), array("id" => "SORT", "content" => GetMessage("rub_sort"), "sort" => "SORT", "default" => true), array("id" => "ACTIVE", "content" => GetMessage("rub_act"), "sort" => "ACTIVE", "default" => true), array("id" => "SITE_ID", "content" => GetMessage("rub_site"), "sort" => "SITE_ID", "default" => true), array("id" => "IS_PUBLIC", "content" => GetMessage("rub_f_is_public"), "sort" => "IS_PUBLIC", "default" => false), array("id" => "RECIPIENT_CNT", "content" => GetMessage("rub_f_recipient_cnt"), "sort" => "RECIPIENT_CNT", "default" => true))); while ($arRes = $rsData->NavNext(true, "f_")) { $row =& $lAdmin->AddRow($f_ID, $arRes); $row->AddInputField("NAME", array("size" => 20)); $row->AddViewField("NAME", '<a href="sender_mailing_edit.php?ID=' . $f_ID . '&lang=' . LANG . '">' . $f_NAME . '</a>'); $row->AddInputField("SORT", array("size" => 6)); $row->AddCheckField("ACTIVE"); $row->AddCheckField("IS_PUBLIC"); $row->AddViewField("RECIPIENT_CNT", '<a href="sender_mailing_recipient_admin.php?MAILING_ID=' . $f_ID . '&lang=' . LANG . '">' . $f_RECIPIENT_CNT . '</a>'); $arActions = array(); $arActions[] = array("ICON" => "edit", "DEFAULT" => true, "TEXT" => GetMessage("rub_edit"), "ACTION" => $lAdmin->ActionRedirect("sender_mailing_edit.php?ID=" . $f_ID)); if ($POST_RIGHT >= "W") {
if ($MAILING_TYPE == 'NEW') { $step = 'mailing_group'; } else { $step = 'chain'; } $isPostedFormProcessed = true; LocalRedirect('sender_mailing_wizard.php?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'), '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);
$arTriggerSettingsTmp[] = $item; } $arTriggerSettings = $arTriggerSettingsTmp; // save chain $result = \Bitrix\Sender\MailingTable::updateChain($ID, $arTriggerSettings); $errorList = array_merge($errorList, $result->getErrorMessages()); if (empty($errorList)) { if ($save != "") { LocalRedirect('/bitrix/admin/sender_mailing_trig_admin.php?lang=' . LANGUAGE_ID); } else { LocalRedirect('/bitrix/admin/sender_mailing_trig_edit.php?ID=' . $ID . '&lang=' . LANGUAGE_ID); } } $chainFieldsList = $arTriggerSettings; } else { $chainFieldsList = \Bitrix\Sender\MailingTable::getChain($ID); } $numberChainItem = 0; $chainFieldsListTmp = array(); foreach ($chainFieldsList as $chain) { $chain['ITEM_SORT'] = $numberChainItem++; $chainFieldsListTmp[] = $chain; } $chainFieldsList = $chainFieldsListTmp; //Edit/Add part ClearVars(); \CJSCore::Init(array("sender_admin")); $APPLICATION->SetTitle(GetMessage("sender_chain_edit_title_edit") . ' "' . $mailing['NAME'] . '"'); require $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_admin_after.php"; $aMenu = array(array("TEXT" => GetMessage("sender_chain_edit_list"), "TITLE" => GetMessage("sender_chain_edit_list_title"), "LINK" => "/bitrix/admin/sender_mailing_trig_admin.php?MAILING_ID=" . $MAILING_ID . "&lang=" . LANG, "ICON" => "btn_list")); if ($ID > 0 && $POST_RIGHT >= "W") {
$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("<br>", $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";
"more_url" => array("sender_contact_import.php"), "title" => GetMessage("mnu_sender_contact_admin_alt") ), array( "text" => GetMessage("mnu_sender_template_admin"), "url" => "sender_template_admin.php?lang=".LANGUAGE_ID, "more_url" => array("sender_template_edit.php"), "title" => GetMessage("mnu_sender_template_admin_alt") ), ) ); $arSiteMailing = array(); if(CModule::IncludeModule('sender')) { $mailingListDb = \Bitrix\Sender\MailingTable::getList(array('filter' => array())); while ($mailing = $mailingListDb->fetch()) { $arSiteMailing[] = array( "text" => htmlspecialcharsbx($mailing['NAME']), "title" => GetMessage("mnu_sender_site_mailing_one_alt"), "items_id" => "menu_sender_mailing_" . $mailing['ID'], "items" => array( array( "text" => GetMessage("mnu_sender_site_mailing_chain"), "url" => "sender_mailing_chain_admin.php?MAILING_ID=" . $mailing['ID'] . "&lang=" . LANGUAGE_ID, "title" => GetMessage("mnu_sender_site_mailing_chain_alt"), "more_url" => array("sender_mailing_chain_edit.php?MAILING_ID=" . $mailing['ID']), ), array( "text" => GetMessage("mnu_sender_site_mailing_stat"),
public static function getChainPersonalizeList($id) { $result = array(); $mailingDb = \Bitrix\Sender\MailingTable::getList(array('select' => array('ID', 'TRIGGER_FIELDS'), 'filter' => array('=IS_TRIGGER' => 'Y', '=ID' => $id))); if (!($mailing = $mailingDb->fetch())) { return $result; } $triggerFields = $mailing['TRIGGER_FIELDS']; if (!is_array($triggerFields)) { $triggerFields = array(); } $settingsList = array(); foreach ($triggerFields as $key => $point) { if (empty($point['CODE'])) { continue; } $point['IS_EVENT_OCCUR'] = true; $point['IS_PREVENT_EMAIL'] = false; $point['SEND_INTERVAL_UNIT'] = 'M'; switch ($key) { case 'END': $point['IS_TYPE_START'] = false; break; case 'START': default: $point['IS_TYPE_START'] = true; } $settingsList[] = new \Bitrix\Sender\TriggerSettings($point); } foreach ($settingsList as $settings) { /* @var \Bitrix\Sender\TriggerSettings $settings */ if (!$settings->isTypeStart()) { continue; } $trigger = \Bitrix\Sender\TriggerManager::getOnce($settings->getEndpoint()); if ($trigger) { $result = array_merge($result, $trigger->getPersonalizeList()); } } return $result; }
if ($bVarsFromForm) { $DB->InitTableVarsForEdit("b_sender_mailing_chain", "", "str_"); } \CJSCore::Init(array("sender_admin")); $APPLICATION->SetTitle($ID > 0 ? GetMessage("sender_chain_edit_title_edit") . $ID : GetMessage("sender_chain_edit_title_add")); require $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_admin_after.php"; $aMenu = array(array("TEXT" => GetMessage("sender_chain_edit_list"), "TITLE" => GetMessage("sender_chain_edit_list_title"), "LINK" => "/bitrix/admin/sender_mailing_chain_admin.php?MAILING_ID=" . $MAILING_ID . "&lang=" . LANG, "ICON" => "btn_list")); if ($ID > 0 && $POST_RIGHT >= "W") { $aMenu[] = array("SEPARATOR" => "Y"); $aMenu[] = array("TEXT" => GetMessage("sender_chain_edit_action_add"), "TITLE" => GetMessage("sender_chain_edit_action_add_title"), "LINK" => "/bitrix/admin/sender_mailing_chain_edit.php?MAILING_ID=" . $MAILING_ID . "&lang=" . LANG, "ICON" => "btn_new"); $aMenu[] = array("TEXT" => GetMessage("sender_chain_edit_action_del"), "TITLE" => GetMessage("sender_chain_edit_action_del_title"), "LINK" => "javascript:if(confirm('" . GetMessage("sender_chain_edit_action_del_confirm") . "'))window.location='/bitrix/admin/sender_mailing_chain_admin.php?MAILING_ID=" . $MAILING_ID . "&ID=" . $ID . "&action=delete&lang=" . LANGUAGE_ID . "&" . bitrix_sessid_get() . "';", "ICON" => "btn_delete"); $aMenu[] = array("SEPARATOR" => "Y"); } $context = new CAdminContextMenu($aMenu); $context->Show(); $arMailing = \Bitrix\Sender\MailingTable::getRowById($MAILING_ID); ?> <?php if ($_REQUEST["mess"] == "ok" && $ID > 0) { CAdminMessage::ShowMessage(array("MESSAGE" => GetMessage("sender_chain_edit_saved"), "TYPE" => "OK")); } if ($message) { echo $message->Show(); } if (!isset($SEND_TYPE)) { if ($str_REITERATE == 'Y') { $SEND_TYPE = 'REITERATE'; } elseif (!empty($str_AUTO_SEND_TIME)) { $SEND_TYPE = 'TIME'; } elseif ($ID > 0) {
if (!$dataUpdateDb->isSuccess()) { $LAST_ERROR = $dataUpdateDb->getErrorMessages(); $LAST_ERROR = $LAST_ERROR[0]; $lAdmin->AddGroupError(GetMessage("rub_save_error") . " " . $LAST_ERROR, $ID); $DB->Rollback(); } } else { $lAdmin->AddGroupError(GetMessage("rub_save_error") . " " . GetMessage("rub_no_rubric"), $ID); $DB->Rollback(); } $DB->Commit(); } } if (($arID = $lAdmin->GroupAction()) && $POST_RIGHT == "W") { if ($_REQUEST['action_target'] == 'selected') { $dataListDb = \Bitrix\Sender\MailingTable::getList(array('select' => array('ID'), 'filter' => $arFilter, 'order' => array($by => $order))); while ($arRes = $dataListDb->fetch()) { $arID[] = $arRes['ID']; } } foreach ($arID as $ID) { if (strlen($ID) <= 0) { continue; } $ID = IntVal($ID); $dataPrimary = array('ID' => $ID); switch ($_REQUEST['action']) { case "delete": @set_time_limit(0); $DB->StartTransaction(); $dataDeleteDb = \Bitrix\Sender\TemplateTable::delete($dataPrimary);
/** * @return string * @throws \Bitrix\Main\ArgumentException */ public function getForm() { $mailingInput = '<select name="' . $this->getFieldName('MAILING_ID') . '">'; $mailingDb = MailingTable::getList(array('select' => array('ID', 'NAME'), 'order' => array('NAME' => 'ASC', 'ID' => 'DESC'))); while ($mailing = $mailingDb->fetch()) { $inputSelected = $mailing['ID'] == $this->getFieldValue('MAILING_ID') ? 'selected' : ''; $mailingInput .= '<option value="' . $mailing['ID'] . '" ' . $inputSelected . '>'; $mailingInput .= htmlspecialcharsbx($mailing['NAME']); $mailingInput .= '</option>'; } $mailingInput .= '</select>'; $arBooleanValues = array('' => Loc::getMessage('sender_connector_recipient_all'), 'Y' => Loc::getMessage('sender_connector_recipient_y'), 'N' => Loc::getMessage('sender_connector_recipient_n')); $sentInput = '<select name="' . $this->getFieldName('SEND') . '">'; foreach ($arBooleanValues as $k => $v) { $inputSelected = $k == $this->getFieldValue('SEND') ? 'selected' : ''; $sentInput .= '<option value="' . $k . '" ' . $inputSelected . '>'; $sentInput .= htmlspecialcharsbx($v); $sentInput .= '</option>'; } $sentInput .= '</select>'; $readInput = '<select name="' . $this->getFieldName('READ') . '">'; foreach ($arBooleanValues as $k => $v) { $inputSelected = $k == $this->getFieldValue('READ') ? 'selected' : ''; $readInput .= '<option value="' . $k . '" ' . $inputSelected . '>'; $readInput .= htmlspecialcharsbx($v); $readInput .= '</option>'; } $readInput .= '</select>'; $clickInput = '<select name="' . $this->getFieldName('CLICK') . '">'; foreach ($arBooleanValues as $k => $v) { $inputSelected = $k == $this->getFieldValue('CLICK') ? 'selected' : ''; $clickInput .= '<option value="' . $k . '" ' . $inputSelected . '>'; $clickInput .= htmlspecialcharsbx($v); $clickInput .= '</option>'; } $clickInput .= '</select>'; $unsubInput = '<select name="' . $this->getFieldName('UNSUB') . '">'; foreach ($arBooleanValues as $k => $v) { $inputSelected = $k == $this->getFieldValue('UNSUB') ? 'selected' : ''; $unsubInput .= '<option value="' . $k . '" ' . $inputSelected . '>'; $unsubInput .= htmlspecialcharsbx($v); $unsubInput .= '</option>'; } $unsubInput .= '</select>'; return ' <table> <tr> <td>' . Loc::getMessage('sender_connector_recipient_mailing') . '</td> <td>' . $mailingInput . '</td> </tr> <tr> <td>' . Loc::getMessage('sender_connector_recipient_sent') . '</td> <td>' . $sentInput . '</td> </tr> <tr> <td>' . Loc::getMessage('sender_connector_recipient_read') . '</td> <td>' . $readInput . '</td> </tr> <tr> <td>' . Loc::getMessage('sender_connector_recipient_click') . '</td> <td>' . $clickInput . '</td> </tr> <tr> <td>' . Loc::getMessage('sender_connector_recipient_unsub') . '</td> <td>' . $unsubInput . '</td> </tr> </table> '; }
case "activate": case "deactivate": $arFields["ACTIVE"] = $_REQUEST['action'] == "activate" ? "Y" : "N"; $dataUpdateDb = \Bitrix\Sender\MailingTable::update($dataPrimary, $arFields); if (!$dataUpdateDb->isSuccess()) { $LAST_ERROR = $dataUpdateDb->getErrorMessages(); $LAST_ERROR = $LAST_ERROR[0]; $lAdmin->AddGroupError(GetMessage("rub_save_error") . $LAST_ERROR, $ID); } break; } } } // runtime: RECIPIENT_CNT = include_cnt - exclude_cnt = group_cnt * (2*exclude_int - 1) $arFilter['IS_TRIGGER'] = 'Y'; $groupListDb = \Bitrix\Sender\MailingTable::getList(array('select' => array('ID', 'NAME', 'SORT', 'DATE_INSERT', 'ACTIVE', 'SITE_ID'), 'filter' => $arFilter, 'order' => array($by => $order))); $rsData = new CAdminResult($groupListDb, $sTableID); $rsData->NavStart(); $lAdmin->NavText($rsData->GetNavPrint(GetMessage("rub_nav"))); $lAdmin->AddHeaders(array(array("id" => "ID", "content" => "ID", "sort" => "ID", "align" => "right", "default" => true), array("id" => "NAME", "content" => GetMessage("rub_name"), "sort" => "NAME", "default" => true), array("id" => "SORT", "content" => GetMessage("rub_sort"), "sort" => "SORT", "default" => true), array("id" => "ACTIVE", "content" => GetMessage("rub_act"), "sort" => "ACTIVE", "default" => true), array("id" => "SITE_ID", "content" => GetMessage("rub_site"), "sort" => "SITE_ID", "default" => true))); while ($arRes = $rsData->NavNext(true, "f_")) { $row =& $lAdmin->AddRow($f_ID, $arRes); $row->AddInputField("NAME", array("size" => 20)); $row->AddViewField("NAME", '<a href="sender_mailing_wizard.php?step=trig_mailing&IS_TRIGGER=Y&MAILING_ID=' . $f_ID . '&lang=' . LANGUAGE_ID . '">' . $f_NAME . '</a>'); $row->AddInputField("SORT", array("size" => 6)); $row->AddCheckField("ACTIVE"); $row->AddCheckField("IS_PUBLIC"); $row->AddViewField("RECIPIENT_CNT", '<a href="sender_mailing_recipient_admin.php?MAILING_ID=' . $f_ID . '&lang=' . LANG . '">' . $f_RECIPIENT_CNT . '</a>'); $arActions = array(); $arActions[] = array("ICON" => "edit", "DEFAULT" => true, "TEXT" => GetMessage("rub_edit"), "ACTION" => $lAdmin->ActionRedirect("sender_mailing_wizard.php?step=trig_mailing&IS_TRIGGER=Y&MAILING_ID=" . $f_ID . "&lang=" . LANGUAGE_ID)); if ($POST_RIGHT >= "W") {
/** * @param $arData * @return bool * @throws \Bitrix\Main\ArgumentException */ public static function unsubscribe($arData) { $result = false; if (isset($arData['TEST']) && $arData['TEST'] == 'Y') { return true; } $postingDb = PostingRecipientTable::getList(array('select' => array('POSTING_ID', 'POSTING_MAILING_ID' => 'POSTING.MAILING_ID'), 'filter' => array('ID' => $arData['RECIPIENT_ID'], 'EMAIL' => $arData['EMAIL']))); $arPosting = $postingDb->fetch(); $mailingDb = MailingTable::getList(array('select' => array('ID'), 'filter' => array('ID' => $arData['UNSUBSCRIBE_LIST']))); while ($mailing = $mailingDb->fetch()) { $unsub = null; if ($arPosting && $arPosting['POSTING_MAILING_ID'] == $mailing['ID']) { $unsub = array('POSTING_ID' => $arPosting['POSTING_ID'], 'RECIPIENT_ID' => $arData['RECIPIENT_ID']); } else { $mailingPostingDb = PostingRecipientTable::getList(array('select' => array('RECIPIENT_ID' => 'ID', 'POSTING_ID'), 'filter' => array('POSTING.MAILING_ID' => $mailing['ID'], 'EMAIL' => $arData['EMAIL']))); if ($arMailingPosting = $mailingPostingDb->fetch()) { $unsub = $arMailingPosting; } } if (!empty($unsub)) { $unsubExists = PostingUnsubTable::getRowById($unsub); if (!$unsubExists) { PostingUnsubTable::add($unsub); } $result = true; } } return $result; }