Ejemplo n.º 1
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;
 }
Ejemplo n.º 2
0
 function Update($ID, $arFields)
 {
     global $DB;
     if (!$this->CheckFields($arFields, $ID)) {
         return false;
     }
     if (is_set($arFields, "ACTIVE") && $arFields["ACTIVE"] != "Y") {
         $arFields["ACTIVE"] = "N";
     }
     $arLID = array();
     if (is_set($arFields, "LID")) {
         if (is_array($arFields["LID"])) {
             $arLID = $arFields["LID"];
         } else {
             $arLID[] = $arFields["LID"];
         }
         $arFields["LID"] = false;
         foreach ($arLID as $v) {
             $arFields["LID"] = $v;
         }
     }
     $arATTACHMENT_FILE = array();
     if (is_set($arFields, "ATTACHMENT_FILE")) {
         if (is_array($arFields["ATTACHMENT_FILE"])) {
             $arATTACHMENT_FILE = $arFields["ATTACHMENT_FILE"];
         } else {
             $arATTACHMENT_FILE[] = $arFields["ATTACHMENT_FILE"];
         }
         $arATTACHMENT_FILE_tmp = array();
         foreach ($arATTACHMENT_FILE as $v) {
             $v = intval($v);
             $arATTACHMENT_FILE_tmp[] = $v;
         }
         $arATTACHMENT_FILE = $arATTACHMENT_FILE_tmp;
         unset($arFields['ATTACHMENT_FILE']);
     }
     if (array_key_exists('NAME', $arFields)) {
         unset($arFields['NAME']);
     }
     $ID = intval($ID);
     Mail\Internal\EventMessageTable::update($ID, $arFields);
     if (count($arLID) > 0) {
         Mail\Internal\EventMessageSiteTable::delete($ID);
         $resultDb = \Bitrix\Main\SiteTable::getList(array('select' => array('LID'), 'filter' => array('LID' => $arLID)));
         while ($arResultSite = $resultDb->fetch()) {
             Mail\Internal\EventMessageSiteTable::add(array('EVENT_MESSAGE_ID' => $ID, 'SITE_ID' => $arResultSite['LID']));
         }
     }
     if (count($arATTACHMENT_FILE) > 0) {
         foreach ($arATTACHMENT_FILE as $file_id) {
             Mail\Internal\EventMessageAttachmentTable::add(array('EVENT_MESSAGE_ID' => $ID, 'FILE_ID' => $file_id));
         }
     }
     return true;
 }
Ejemplo n.º 3
0
        }
    }
}
$arEventMessageFile = array();
$str_ACTIVE = "Y";
$str_EVENT_NAME = $EVENT_NAME;
$em = CEventMessage::GetByID($ID);
if (!$em->ExtractEditFields("str_")) {
    $ID = 0;
} else {
    $str_LID = array();
    $db_LID = CEventMessage::GetLang($ID);
    while ($ar_LID = $db_LID->Fetch()) {
        $str_LID[] = $ar_LID["LID"];
    }
    $attachmentFileDb = \Bitrix\Main\Mail\Internal\EventMessageAttachmentTable::getList(array('select' => array('FILE_ID'), 'filter' => array('EVENT_MESSAGE_ID' => $ID)));
    while ($ar = $attachmentFileDb->fetch()) {
        if ($arFileFetch = CFile::GetFileArray($ar['FILE_ID'])) {
            $arEventMessageFile[] = $arFileFetch;
        }
    }
}
if ($bVarsFromForm) {
    $str_LID = $LID;
    $DB->InitTableVarsForEdit("b_event_message", "", "str_");
    $str_ADDITIONAL_FIELD = $ADDITIONAL_FIELD;
}
$arMailSiteTemplate = array();
$mailSiteTemplateDb = CSiteTemplate::GetList(null, array('TYPE' => 'mail'));
while ($mailSiteTemplate = $mailSiteTemplateDb->GetNext()) {
    $arMailSiteTemplate[] = $mailSiteTemplate;