Exemple #1
0
                    $DB->Commit();
                }
                break;
        }
    }
}
$arLID = array();
$db_res = CLanguage::GetList($by_ = "sort", $order_ = "asc");
if ($db_res && ($res = $db_res->GetNext())) {
    do {
        $arLID[$res["LID"]] = $res["LID"];
    } while ($res = $db_res->GetNext());
}
$lAdmin->AddHeaders(array(array("id" => "ID", "content" => "ID", "default" => true), array("id" => "LID", "content" => Loc::getMessage("LANG"), "default" => true), array("id" => "EVENT_NAME", "content" => Loc::getMessage("EVENT_TYPE"), "sort" => "event_name", "default" => true), array("id" => "NAME", "content" => Loc::getMessage("EVENT_NAME"), "default" => true), array("id" => "DESCRIPTION", "content" => Loc::getMessage("EVENT_DESCRIPTION"), "default" => false), array("id" => "TEMPLATES", "content" => Loc::getMessage("EVENT_TEMPLATES"), "default" => false)));
$resultMessageByTypeList = array();
$resultMessageByTypeDb = \Bitrix\Main\Mail\Internal\EventMessageTable::getList(array('select' => array('ID', 'EVENT_NAME')));
while ($messageByType = $resultMessageByTypeDb->fetch()) {
    $resultMessageByTypeList[$messageByType['EVENT_NAME']][] = $messageByType['ID'];
}
$resultList = array();
$runtimeList = array();
$arFilter['!EVENT_NAME'] = null;
if (isset($arFilter['MESSAGE_ID'])) {
    $runtimeList[] = new \Bitrix\Main\Entity\ReferenceField('MESSAGE', 'Bitrix\\Main\\Mail\\Internal\\EventMessageTable', array('=this.EVENT_NAME' => 'ref.EVENT_NAME'));
    $arFilter['MESSAGE.ID'] = $arFilter['MESSAGE_ID'];
    unset($arFilter['MESSAGE_ID']);
}
$resultDb = \Bitrix\Main\Mail\Internal\EventTypeTable::getList(array('filter' => $arFilter, 'runtime' => $runtimeList, 'order' => array('EVENT_NAME' => strtoupper($order) == 'DESC' ? 'DESC' : 'ASC')));
$resultTypeList = $resultDb->fetchAll();
foreach ($resultTypeList as $type) {
    if (!isset($resultList[$type['EVENT_NAME']])) {
Exemple #2
0
 function GetList(&$by, &$order, $arFilter = array())
 {
     $arSearch = array();
     $arSqlSearch = array();
     $strSqlSearch = "";
     $bIsLang = false;
     if (is_array($arFilter)) {
         foreach ($arFilter as $key => $val) {
             if (is_array($val)) {
                 if (count($val) <= 0) {
                     continue;
                 }
             } else {
                 if (strlen($val) <= 0 || $val === "NOT_REF") {
                     continue;
                 }
             }
             $match_value_set = array_key_exists($key . "_EXACT_MATCH", $arFilter);
             $key = strtoupper($key);
             switch ($key) {
                 case "ID":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N";
                     if ($match == 'Y') {
                         $val = '%' . $val . '%';
                     }
                     $arSearch['%=' . $key] = $val;
                     break;
                 case "TYPE":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y";
                     if ($match == 'Y') {
                         $val = '%' . $val . '%';
                     }
                     $arSearch[] = array('LOGIC' => 'OR', 'EVENT_NAME' => $val, 'EVENT_MESSAGE_TYPE.NAME' => $val);
                     break;
                 case "EVENT_NAME":
                 case "TYPE_ID":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N";
                     if ($match == 'Y') {
                         $val = '%' . $val . '%';
                     }
                     $arSearch['%=EVENT_NAME'] = $val;
                     break;
                 case "TIMESTAMP_1":
                     $arSqlSearch[] = "M.TIMESTAMP_X>=TO_DATE('" . FmtDate($val, "D.M.Y") . " 00:00:00','dd.mm.yyyy hh24:mi:ss')";
                     $arSearch['>=TIMESTAMP_X'] = $val . " 00:00:00";
                     break;
                 case "TIMESTAMP_2":
                     $arSqlSearch[] = "M.TIMESTAMP_X<=TO_DATE('" . FmtDate($val, "D.M.Y") . " 23:59:59','dd.mm.yyyy hh24:mi:ss')";
                     $arSearch['<=TIMESTAMP_X'] = $val . " 23:59:59";
                     break;
                 case "LID":
                 case "LANG":
                 case "SITE_ID":
                     $bIsLang = true;
                     $arSearch["=SITE_ID"] = $val;
                     break;
                 case "ACTIVE":
                     $arSearch['=' . $key] = $val;
                     break;
                 case "FROM":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y";
                     if ($match == 'Y') {
                         $val = '%' . $val . '%';
                     }
                     $arSearch['%=EMAIL_FROM'] = $val;
                     break;
                 case "TO":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y";
                     if ($match == 'Y') {
                         $val = '%' . $val . '%';
                     }
                     $arSearch['%=EMAIL_TO'] = $val;
                     break;
                 case "BCC":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y";
                     if ($match == 'Y') {
                         $val = '%' . $val . '%';
                     }
                     $arSearch['%=' . $key] = $val;
                     break;
                 case "SUBJECT":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y";
                     if ($match == 'Y') {
                         $val = '%' . $val . '%';
                     }
                     $arSearch['%=' . $key] = $val;
                     break;
                 case "BODY_TYPE":
                     $arSearch[$key] = $val == "text" ? 'text' : 'html';
                     break;
                 case "BODY":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y";
                     if ($match == 'Y') {
                         $val = '%' . $val . '%';
                     }
                     $arSearch['%=MESSAGE'] = $val;
                     break;
             }
         }
     }
     if ($by == "id") {
         $strSqlOrder = "ID";
     } elseif ($by == "active") {
         $strSqlOrder = "ACTIVE";
     } elseif ($by == "event_name") {
         $strSqlOrder = "EVENT_NAME";
     } elseif ($by == "from") {
         $strSqlOrder = "EMAIL_FROM";
     } elseif ($by == "to") {
         $strSqlOrder = "EMAIL_TO";
     } elseif ($by == "bcc") {
         $strSqlOrder = "BCC";
     } elseif ($by == "body_type") {
         $strSqlOrder = "BODY_TYPE";
     } elseif ($by == "subject") {
         $strSqlOrder = "SUBJECT";
     } else {
         $strSqlOrder = "ID";
         $by = "id";
     }
     if ($order != "asc") {
         $strSqlOrderBy = "DESC";
         $order = "desc";
     } else {
         $strSqlOrderBy = "ASC";
         $order = "asc";
     }
     $arSelect = array('*', 'EVENT_MESSAGE_TYPE_ID' => 'EVENT_MESSAGE_TYPE.ID', 'EVENT_MESSAGE_TYPE_NAME' => 'EVENT_MESSAGE_TYPE.NAME', 'EVENT_MESSAGE_TYPE_EVENT_NAME' => 'EVENT_MESSAGE_TYPE.EVENT_NAME');
     if ($bIsLang) {
         $arSelect['SITE_ID'] = 'EVENT_MESSAGE_SITE.SITE_ID';
     } else {
         $arSelect['SITE_ID'] = 'LID';
     }
     $resultDb = Mail\Internal\EventMessageTable::getList(array('select' => $arSelect, 'filter' => $arSearch, 'order' => array($strSqlOrder => $strSqlOrderBy), 'runtime' => array('EVENT_MESSAGE_TYPE' => array('data_type' => 'Bitrix\\Main\\Mail\\Internal\\EventType', 'reference' => array('=this.EVENT_NAME' => 'ref.EVENT_NAME', '=ref.LID' => new \Bitrix\Main\DB\SqlExpression('?', LANGUAGE_ID))))));
     $resultDb->addFetchDataModifier(array('CEventMessage', 'GetListDataModifier'));
     $res = new CDBResult($resultDb);
     $strSqlSearch = GetFilterSqlSearch($arSqlSearch);
     $res->is_filtered = IsFiltered($strSqlSearch);
     return $res;
 }
Exemple #3
0
 /**
  * @return string
  */
 public static function handleEvent(array $arEvent)
 {
     if (!isset($arEvent['FIELDS']) && isset($arEvent['C_FIELDS'])) {
         $arEvent['FIELDS'] = $arEvent['C_FIELDS'];
     }
     if (!is_array($arEvent['FIELDS'])) {
         throw new \Bitrix\Main\ArgumentTypeException("FIELDS");
     }
     $flag = static::SEND_RESULT_TEMPLATE_NOT_FOUND;
     // no templates
     $arResult = array("Success" => false, "Fail" => false, "Was" => false);
     $trackRead = null;
     $trackClick = null;
     if (array_key_exists('TRACK_READ', $arEvent)) {
         $trackRead = $arEvent['TRACK_READ'];
     }
     if (array_key_exists('TRACK_CLICK', $arEvent)) {
         $trackClick = $arEvent['TRACK_CLICK'];
     }
     $arSites = explode(",", $arEvent["LID"]);
     if (count($arSites) <= 0) {
         return $flag;
     }
     // get charset and server name for languages of event
     $charset = false;
     $serverName = null;
     $siteDb = Main\SiteTable::getList(array('select' => array('SERVER_NAME', 'CULTURE_CHARSET' => 'CULTURE.CHARSET'), 'filter' => array('LID' => $arSites)));
     if ($arSiteDb = $siteDb->fetch()) {
         $charset = $arSiteDb['CULTURE_CHARSET'];
         $serverName = $arSiteDb['SERVER_NAME'];
     }
     if (!$charset) {
         return $flag;
     }
     // get filter for list of message templates
     $arEventMessageFilter = array();
     $MESSAGE_ID = intval($arEvent["MESSAGE_ID"]);
     if ($MESSAGE_ID > 0) {
         $eventMessageDb = MailInternal\EventMessageTable::getById($MESSAGE_ID);
         if ($eventMessageDb->Fetch()) {
             $arEventMessageFilter['ID'] = $MESSAGE_ID;
             $arEventMessageFilter['ACTIVE'] = 'Y';
         }
     }
     if (count($arEventMessageFilter) == 0) {
         $arEventMessageFilter = array('ACTIVE' => 'Y', 'EVENT_NAME' => $arEvent["EVENT_NAME"], 'EVENT_MESSAGE_SITE.SITE_ID' => $arSites);
     }
     // get list of message templates of event
     $messageDb = MailInternal\EventMessageTable::getList(array('select' => array('ID'), 'filter' => $arEventMessageFilter, 'group' => array('ID')));
     while ($arMessage = $messageDb->fetch()) {
         $eventMessage = MailInternal\EventMessageTable::getRowById($arMessage['ID']);
         $eventMessage['FILES'] = array();
         $attachmentDb = MailInternal\EventMessageAttachmentTable::getList(array('select' => array('FILE_ID'), 'filter' => array('EVENT_MESSAGE_ID' => $arMessage['ID'])));
         while ($arAttachmentDb = $attachmentDb->fetch()) {
             $eventMessage['FILE'][] = $arAttachmentDb['FILE_ID'];
         }
         $arFields = $arEvent['FIELDS'];
         foreach (GetModuleEvents("main", "OnBeforeEventSend", true) as $event) {
             if (ExecuteModuleEventEx($event, array(&$arFields, &$eventMessage)) === false) {
                 continue 2;
             }
         }
         // get message object for send mail
         $arMessageParams = array('EVENT' => $arEvent, 'FIELDS' => $arFields, 'MESSAGE' => $eventMessage, 'SITE' => $arSites, 'CHARSET' => $charset);
         $message = EventMessageCompiler::createInstance($arMessageParams);
         $message->compile();
         // send mail
         $result = Main\Mail\Mail::send(array('TO' => $message->getMailTo(), 'SUBJECT' => $message->getMailSubject(), 'BODY' => $message->getMailBody(), 'HEADER' => $message->getMailHeaders(), 'CHARSET' => $message->getMailCharset(), 'CONTENT_TYPE' => $message->getMailContentType(), 'MESSAGE_ID' => $message->getMailId(), 'ATTACHMENT' => $message->getMailAttachment(), 'TRACK_READ' => $trackRead, 'TRACK_CLICK' => $trackClick, 'LINK_PROTOCOL' => \Bitrix\Main\Config\Option::get("main", "mail_link_protocol", ''), 'LINK_DOMAIN' => $serverName));
         if ($result) {
             $arResult["Success"] = true;
         } else {
             $arResult["Fail"] = true;
         }
         $arResult["Was"] = true;
     }
     if ($arResult["Was"]) {
         if ($arResult["Success"]) {
             if ($arResult["Fail"]) {
                 $flag = static::SEND_RESULT_PARTLY;
             } else {
                 $flag = static::SEND_RESULT_SUCCESS;
             }
             // all sent
         } else {
             if ($arResult["Fail"]) {
                 $flag = static::SEND_RESULT_ERROR;
             }
             // all templates failed
         }
     }
     return $flag;
 }