public static function TrySendEmail($ID, &$arFields, &$arErrors) { global $APPLICATION; if (!CModule::IncludeModule('subscribe')) { $arErrors[] = array('CODE' => self::ERR_CANT_LOAD_SUBSCRIBE); return false; } $ID = intval($ID); if ($ID <= 0 && isset($arFields['ID'])) { $ID = intval($arFields['ID']); } if ($ID <= 0 || !is_array($arFields)) { $arErrors[] = array('CODE' => self::ERR_INVALID_DATA); return false; } $typeID = isset($arFields['TYPE_ID']) ? intval($arFields['TYPE_ID']) : CCrmActivityType::Undefined; if ($typeID !== CCrmActivityType::Email) { $arErrors[] = array('CODE' => self::ERR_INVALID_DATA); return false; } $urn = CCrmActivity::PrepareUrn($arFields); if (!($urn !== '' && CCrmActivity::Update($ID, array('URN' => $urn), false, false))) { $arErrors[] = array('CODE' => self::ERR_CANT_UPDATE_ACTIVITY); return false; } $settings = isset($arFields['SETTINGS']) && is_array($arFields['SETTINGS']) ? $arFields['SETTINGS'] : array(); // Creating Email --> $crmEmail = CCrmMailHelper::ExtractEmail(COption::GetOptionString('crm', 'mail', '')); $from = isset($settings['MESSAGE_FROM']) ? trim(strval($settings['MESSAGE_FROM'])) : ''; if ($from === '') { if ($crmEmail !== '') { $from = $crmEmail; } else { $arErrors[] = array('CODE' => self::ERR_CANT_FIND_EMAIL_FROM); } } elseif (!check_email($from)) { $arErrors[] = array('CODE' => self::ERR_INVALID_EMAIL, 'DATA' => array('EMAIL' => $from)); } //Save user email in settings --> if ($from !== CUserOptions::GetOption('crm', 'activity_email_addresser', '')) { CUserOptions::SetOption('crm', 'activity_email_addresser', $from); } //<-- Save user email in settings $to = array(); $commData = isset($arFields['COMMUNICATIONS']) ? $arFields['COMMUNICATIONS'] : array(); foreach ($commData as &$commDatum) { $commType = isset($commDatum['TYPE']) ? strtoupper(strval($commDatum['TYPE'])) : ''; $commValue = isset($commDatum['VALUE']) ? strval($commDatum['VALUE']) : ''; if ($commType !== 'EMAIL' || $commValue === '') { continue; } if (!check_email($commValue)) { $arErrors[] = array('CODE' => self::ERR_INVALID_EMAIL, 'DATA' => array('EMAIL' => $commValue)); continue; } $to[] = strtolower(trim($commValue)); } unset($commDatum); if (count($to) == 0) { $arErrors[] = array('CODE' => self::ERR_CANT_FIND_EMAIL_TO); } if (!empty($arErrors)) { return false; } // Try to resolve posting charset --> $postingCharset = ''; $siteCharset = defined('LANG_CHARSET') ? LANG_CHARSET : (defined('SITE_CHARSET') ? SITE_CHARSET : 'windows-1251'); $arSupportedCharset = explode(',', COption::GetOptionString('subscribe', 'posting_charset')); if (count($arSupportedCharset) === 0) { $postingCharset = $siteCharset; } else { foreach ($arSupportedCharset as $curCharset) { if (strcasecmp($curCharset, $siteCharset) === 0) { $postingCharset = $curCharset; break; } } if ($postingCharset === '') { $postingCharset = $arSupportedCharset[0]; } } //<-- Try to resolve posting charset $subject = isset($arFields['SUBJECT']) ? $arFields['SUBJECT'] : ''; $description = isset($arFields['DESCRIPTION']) ? $arFields['DESCRIPTION'] : ''; $descriptionType = isset($arFields['DESCRIPTION_TYPE']) ? intval($arFields['DESCRIPTION_TYPE']) : CCrmContentType::PlainText; $descriptionHtml = ''; if ($descriptionType === CCrmContentType::Html) { $descriptionHtml = $description; } elseif ($descriptionType === CCrmContentType::BBCode) { $parser = new CTextParser(); $descriptionHtml = $parser->convertText($description); } elseif ($descriptionType === CCrmContentType::PlainText) { $descriptionHtml = htmlspecialcharsbx($description); } $postingData = array('STATUS' => 'D', 'FROM_FIELD' => $from, 'TO_FIELD' => $from, 'BCC_FIELD' => implode(',', $to), 'SUBJECT' => $subject, 'BODY_TYPE' => 'html', 'BODY' => $descriptionHtml, 'DIRECT_SEND' => 'Y', 'SUBSCR_FORMAT' => 'html', 'CHARSET' => $postingCharset); CCrmActivity::InjectUrnInMessage($postingData, $urn, CCrmEMailCodeAllocation::GetCurrent()); $posting = new CPosting(); $postingID = $posting->Add($postingData); if ($postingID === false) { $arErrors[] = array('CODE' => self::ERR_CANT_ADD_POSTING, 'MESSAGE' => $posting->LAST_ERROR); return false; } $arUpdateFields = array('COMPLETED' => 'Y', 'ASSOCIATED_ENTITY_ID' => $postingID, 'SETTINGS' => $settings); $fromEmail = strtolower(trim(CCrmMailHelper::ExtractEmail($from))); if ($crmEmail !== '' && $fromEmail !== $crmEmail) { $arUpdateFields['SETTINGS']['MESSAGE_HEADERS'] = array('Reply-To' => "<{$fromEmail}>, <{$crmEmail}>"); } $arUpdateFields['SETTINGS']['IS_MESSAGE_SENT'] = true; if (!CCrmActivity::Update($ID, $arUpdateFields, false, false)) { $arErrors[] = array('CODE' => self::ERR_CANT_UPDATE_ACTIVITY); return false; } // <-- Creating Email // Attaching files --> $storageTypeID = isset($arFields['STORAGE_TYPE_ID']) ? intval($arFields['STORAGE_TYPE_ID']) : StorageType::Undefined; $storageElementsID = isset($arFields['STORAGE_ELEMENT_IDS']) && is_array($arFields['STORAGE_ELEMENT_IDS']) ? $arFields['STORAGE_ELEMENT_IDS'] : array(); $arRawFiles = StorageManager::makeFileArray($storageElementsID, $storageTypeID); foreach ($arRawFiles as &$arRawFile) { if (!$posting->SaveFile($postingID, $arRawFile)) { $arErrors[] = array('CODE' => self::ERR_CANT_SAVE_POSTING_FILE, 'MESSAGE' => $posting->LAST_ERROR); return false; } } unset($arRawFile); // <-- Attaching files // Sending Email --> if ($posting->ChangeStatus($postingID, 'P')) { $rsAgents = CAgent::GetList(array('ID' => 'DESC'), array('MODULE_ID' => 'subscribe', 'NAME' => 'CPosting::AutoSend(' . $postingID . ',%')); if (!$rsAgents->Fetch()) { CAgent::AddAgent('CPosting::AutoSend(' . $postingID . ',true);', 'subscribe', 'N', 0); } } // Try add event to entity $CCrmEvent = new CCrmEvent(); $ownerID = isset($arFields['OWNER_ID']) ? intval($arFields['OWNER_ID']) : 0; $ownerTypeID = isset($arFields['OWNER_TYPE_ID']) ? intval($arFields['OWNER_TYPE_ID']) : 0; if ($ownerID > 0 && $ownerTypeID > 0) { $eventText = ''; $eventText .= GetMessage('CRM_ACTIVITY_EMAIL_SUBJECT') . ': ' . $subject . "\n\r"; $eventText .= GetMessage('CRM_ACTIVITY_EMAIL_FROM') . ': ' . $from . "\n\r"; $eventText .= GetMessage('CRM_ACTIVITY_EMAIL_TO') . ': ' . implode(',', $to) . "\n\r\n\r"; $eventText .= $description; // Register event only for owner $CCrmEvent->Add(array('ENTITY' => array($ownerID => array('ENTITY_TYPE' => CCrmOwnerType::ResolveName($ownerTypeID), 'ENTITY_ID' => $ownerID)), 'EVENT_ID' => 'MESSAGE', 'EVENT_TEXT_1' => $eventText, 'FILES' => $arRawFiles)); } // <-- Sending Email return true; }
COption::SetOptionString("subscribe", "posting_use_editor", "Y"); COption::SetOptionString("subscribe", "attach_images", "Y"); $APPLICATION->SetGroupRight("subscribe", WIZARD_PORTAL_ADMINISTRATION_GROUP, "W"); } //Copy template CopyDirFiles(WIZARD_SERVICE_ABSOLUTE_PATH . "/templates/" . LANGUAGE_ID . "/", $_SERVER["DOCUMENT_ROOT"] . BX_PERSONAL_ROOT . "/php_interface/subscribe/templates/", $rewrite = false, $recursive = true); $officialIBlockID = ""; if (CModule::IncludeModule("iblock")) { $dbIBlock = CIBlock::GetList(array(), array("CODE" => "official_news")); if ($arIBlock = $dbIBlock->Fetch()) { $officialIBlockID = $arIBlock["ID"]; } } CWizardUtil::ReplaceMacros($_SERVER["DOCUMENT_ROOT"] . BX_PERSONAL_ROOT . "/php_interface/subscribe/templates/official/template.php", array("IBLOCK_ID" => $officialIBlockID, "SITE_ID" => WIZARD_SITE_ID)); $rsRubric = CRubric::GetList(array(), array("NAME" => GetMessage("SUBSCRIBE_OFFICIAL_INFORMATION"), "LID" => WIZARD_SITE_ID)); if (!$rsRubric->Fetch()) { $arFields = array("ACTIVE" => "Y", "NAME" => GetMessage("SUBSCRIBE_OFFICIAL_INFORMATION"), "SORT" => 100, "DESCRIPTION" => "", "LID" => WIZARD_SITE_ID, "AUTO" => "Y", "DAYS_OF_MONTH" => "", "DAYS_OF_WEEK" => "7", "TIMES_OF_DAY" => "05:00", "TEMPLATE" => substr(BX_PERSONAL_ROOT, 1) . "/php_interface/subscribe/templates/official", "VISIBLE" => "Y", "FROM_FIELD" => COption::GetOptionString("main", "email_from", "admin@" . $_SERVER["SERVER_NAME"]), "LAST_EXECUTED" => ConvertTimeStamp(false, "FULL")); $obRubric = new CRubric(); $ID = $obRubric->Add($arFields); } $rsRubric = CRubric::GetList(array(), array("NAME" => GetMessage("SUBSCRIBE_NEWS_LIFE"), "LID" => WIZARD_SITE_ID)); if (!$rsRubric->Fetch()) { $arFields = array("ACTIVE" => "Y", "NAME" => GetMessage("SUBSCRIBE_NEWS_LIFE"), "SORT" => 200, "DESCRIPTION" => "", "LID" => WIZARD_SITE_ID, "AUTO" => "N"); $obRubric = new CRubric(); $ID = $obRubric->Add($arFields); if ($ID) { $arFields = array("FROM_FIELD" => COption::GetOptionString("main", "email_from", "admin@" . $_SERVER["SERVER_NAME"]), "TO_FIELD" => COption::GetOptionString("main", "email_from", "admin@" . $_SERVER["SERVER_NAME"]), "EMAIL_FILTER" => "%%", "SUBJECT" => GetMessage("SUBSCRIBE_POSTING_SUBJECT"), "BODY_TYPE" => "html", "BODY" => GetMessage("SUBSCRIBE_POSTING_BODY"), "DIRECT_SEND" => "Y", "CHARSET" => LANG_CHARSET, "SUBSCR_FORMAT" => "text", "RUB_ID" => array($ID), "STATUS" => "D"); $obPosting = new CPosting(); $obPosting->Add($arFields); } }
function AddPosting($arRubric) { global $DB, $USER, $MESS; if (!is_object($USER)) { $USER = new CUser(); } //Include language file for template.php $rsSite = CSite::GetByID($arRubric["SITE_ID"]); $arSite = $rsSite->Fetch(); $rsLang = CLanguage::GetByID($arSite["LANGUAGE_ID"]); $arLang = $rsLang->Fetch(); $arFields = false; if (CPostingTemplate::IsExists($arRubric["TEMPLATE"])) { $strFileName = $_SERVER["DOCUMENT_ROOT"] . "/" . $arRubric["TEMPLATE"] . "/lang/" . $arSite["LANGUAGE_ID"] . "/template.php"; if (file_exists($strFileName)) { include $strFileName; } //Execute template $strFileName = $_SERVER["DOCUMENT_ROOT"] . "/" . $arRubric["TEMPLATE"] . "/template.php"; if (file_exists($strFileName)) { ob_start(); $arFields = @(include $strFileName); $strBody = ob_get_contents(); ob_end_clean(); } } $ID = false; //If there was an array returned then add posting if (is_array($arFields)) { $arFields["BODY"] = $strBody; $cPosting = new CPosting(); $arFields["AUTO_SEND_TIME"] = $arRubric["END_TIME"]; $arFields["RUB_ID"] = array($arRubric["ID"]); $arFields["MSG_CHARSET"] = $arLang["CHARSET"]; $ID = $cPosting->Add($arFields); if ($ID) { if (array_key_exists("FILES", $arFields)) { foreach ($arFields["FILES"] as $arFile) { $cPosting->SaveFile($ID, $arFile); } } if (!array_key_exists("DO_NOT_SEND", $arFields) || $arFields["DO_NOT_SEND"] != "Y") { $cPosting->ChangeStatus($ID, "P"); if (COption::GetOptionString("subscribe", "subscribe_auto_method") !== "cron") { CAgent::AddAgent("CPosting::AutoSend(" . $ID . ",true,\"" . $arRubric["LID"] . "\");", "subscribe", "N", 0, $arRubric["END_TIME"], "Y", $arRubric["END_TIME"]); } } } } //Update last execution time mark $strSql = "UPDATE b_list_rubric SET LAST_EXECUTED=" . $DB->CharToDateFunction($arRubric["END_TIME"]) . " WHERE ID=" . intval($arRubric["ID"]); $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__); return $ID; }
if ($STATUS != "") { if ($STATUS != "S" && $STATUS != "E" && $STATUS != "P" && $STATUS != "W") { $STATUS = "D"; } } if ($ID > 0) { $res = $posting->Update($ID, $arFields); if (strlen($Resend) > 0) { $STATUS = "W"; } if ($res && $STATUS != "") { $res = $posting->ChangeStatus($ID, $STATUS); } } else { $arFields["STATUS"] = "D"; $ID = $posting->Add($arFields); $res = $ID > 0; } if ($res) { //Delete checked if (is_array($FILE_ID)) { foreach ($FILE_ID as $file) { CPosting::DeleteFile($ID, $file); } } //New files $arFiles = array(); //Brandnew if (is_array($_FILES["NEW_FILE"])) { foreach ($_FILES["NEW_FILE"] as $attribute => $files) { if (is_array($files)) {
} else { foreach ($arSupportedCharset as $curCharset) { if (strcasecmp($curCharset, $siteCharset) === 0) { $postingCharset = $curCharset; break; } } if ($postingCharset === '') { $postingCharset = $arSupportedCharset[0]; } } //<-- Try to resolve posting charset $postingData = array('STATUS' => 'D', 'FROM_FIELD' => $from, 'TO_FIELD' => $from, 'BCC_FIELD' => implode(',', $to), 'SUBJECT' => $subject, 'BODY_TYPE' => 'html', 'BODY' => $messageHtml !== '' ? $messageHtml : GetMessage('CRM_EMAIL_ACTION_DEFAULT_DESCRIPTION'), 'DIRECT_SEND' => 'Y', 'SUBSCR_FORMAT' => 'html', 'CHARSET' => $postingCharset); CCrmActivity::InjectUrnInMessage($postingData, $urn, CCrmEMailCodeAllocation::GetCurrent()); $posting = new CPosting(); $postingID = $posting->Add($postingData); if ($postingID === false) { $arErrors[] = GetMessage('CRM_ACTIVITY_COULD_NOT_CREATE_POSTING'); $arErrors[] = $posting->LAST_ERROR; } else { // Attaching files --> $arRawFiles = isset($arFields['STORAGE_ELEMENT_IDS']) && !empty($arFields['STORAGE_ELEMENT_IDS']) ? \Bitrix\Crm\Integration\StorageManager::makeFileArray($arFields['STORAGE_ELEMENT_IDS'], $storageTypeID) : array(); foreach ($arRawFiles as &$arRawFile) { if (isset($arRawFile['ORIGINAL_NAME'])) { $arRawFile['name'] = $arRawFile['ORIGINAL_NAME']; } if (!$posting->SaveFile($postingID, $arRawFile)) { $arErrors[] = GetMessage('CRM_ACTIVITY_COULD_NOT_SAVE_POSTING_FILE', array('#FILE_NAME#' => $arRawFile['ORIGINAL_NAME'])); $arErrors[] = $posting->LAST_ERROR; break; }
} else { foreach ($arSupportedCharset as $curCharset) { if (strcasecmp($curCharset, $siteCharset) === 0) { $postingCharset = $curCharset; break; } } if ($postingCharset === '') { $postingCharset = $arSupportedCharset[0]; } } //<-- Try to resolve posting charset if (!empty($arFmUserList) && !empty($sEmailFrom)) { $CPosting = new CPosting(); $arFields = array('STATUS' => 'D', 'FROM_FIELD' => $sEmailFrom, 'TO_FIELD' => $sEmailFrom, 'BCC_FIELD' => implode(',', $arFmUserList), 'SUBJECT' => $_POST['TITLE'], 'BODY_TYPE' => 'html', 'BODY' => $_POST['COMMENTS'], 'DIRECT_SEND' => 'Y', 'SUBSCR_FORMAT' => 'html', 'CHARSET' => $postingCharset); $SID = $CPosting->Add($arFields); if (!empty($_FILES['ATTACH'])) { $arAttachs = array(); foreach ($_FILES['ATTACH'] as $type => $ar) { foreach ($ar as $key => $value) { $arAttachs[$key][$type] = $value; } } foreach ($arAttachs as $k => $arAttach) { // Fix for issue #29769 if ($arAttach['error'] == 0 && isset($arAttach['tmp_name']) && strlen($arAttach['tmp_name']) > 0 && is_uploaded_file($arAttach['tmp_name'])) { $CPosting->SaveFile($SID, $arAttach); } } } if ($CPosting->ChangeStatus($SID, 'P')) {