コード例 #1
0
ファイル: template.php プロジェクト: DarneoStudio/bitrix
 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;
 }
コード例 #2
0
ファイル: crm_activity.php プロジェクト: mrdeadmouse/u136006
 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;
 }
コード例 #3
0
ファイル: posting_edit.php プロジェクト: DarneoStudio/bitrix
                         array_unshift($arFiles, CFile::MakeFileArray($ar["ID"]));
                     }
                 }
             }
         } else {
             //Files from template_test.php
             foreach (array_reverse($_POST["FILES"], true) as $file) {
                 if (is_array($file) && strlen($file["tmp_name"]) > 0 && $APPLICATION->GetFileAccessPermission($file["tmp_name"]) >= "W") {
                     array_unshift($arFiles, $file);
                 }
             }
         }
     }
     foreach ($arFiles as $file) {
         if (strlen($file["name"]) > 0 and intval($file["size"]) > 0) {
             if (!$posting->SaveFile($ID, $file)) {
                 $_SESSION["SESS_ADMIN"]["POSTING_EDIT_MESSAGE"] = array("MESSAGE" => $posting->LAST_ERROR, "TYPE" => "ERROR");
                 LocalRedirect("posting_edit.php?ID=" . $ID . "&lang=" . LANG . "&" . $tabControl->ActiveTabParam());
             }
         }
     }
 }
 if ($res) {
     if ($Send != "" || $Resend != "" || $Continue != "") {
         LocalRedirect("posting_admin.php?ID=" . $ID . "&action=send&lang=" . LANG . "&" . bitrix_sessid_get());
     }
     if ($apply != "") {
         $_SESSION["SESS_ADMIN"]["POSTING_EDIT_MESSAGE"] = array("MESSAGE" => GetMessage("post_save_ok"), "TYPE" => "OK");
         LocalRedirect("posting_edit.php?ID=" . $ID . "&lang=" . LANG . "&" . $tabControl->ActiveTabParam());
     } else {
         LocalRedirect("posting_admin.php?lang=" . LANG);
コード例 #4
0
                         array_unshift($arFiles, CFile::MakeFileArray($ar["ID"]));
                     }
                 }
             }
         } else {
             //Files from template_test.php
             foreach (array_reverse($_POST["FILES"], true) as $file) {
                 if (is_array($file) && strlen($file["tmp_name"]) > 0 && $APPLICATION->GetFileAccessPermission($file["tmp_name"]) >= "W") {
                     array_unshift($arFiles, $file);
                 }
             }
         }
     }
     foreach ($arFiles as $file) {
         if (strlen($file["name"]) > 0 and intval($file["size"]) > 0) {
             $res = $posting->SaveFile($ID, $file);
             if (!$res) {
                 break;
             }
         }
     }
 }
 if ($res) {
     if ($Send != "" || $Resend != "" || $Continue != "") {
         LocalRedirect("posting_admin.php?ID=" . $ID . "&action=send&lang=" . LANG . "&" . bitrix_sessid_get());
     }
     if ($apply != "") {
         $_SESSION["SESS_ADMIN"]["POSTING_EDIT_MESSAGE"] = array("MESSAGE" => GetMessage("post_save_ok"), "TYPE" => "OK");
         LocalRedirect("posting_edit.php?ID=" . $ID . "&lang=" . LANG . "&" . $tabControl->ActiveTabParam());
     } else {
         LocalRedirect("posting_admin.php?lang=" . LANG);
コード例 #5
0
ファイル: ajax.php プロジェクト: mrdeadmouse/u136006
 //<-- 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;
         }
     }
     unset($arRawFile);
     // <-- Attaching files
     if (empty($arErrors)) {
         $arUpdateFields = array('ASSOCIATED_ENTITY_ID' => $postingID);
         $fromEmail = strtolower(trim(CCrmMailHelper::ExtractEmail($from)));
         if ($crmEmail !== '' && $fromEmail !== $crmEmail) {
             $arUpdateFields['SETTINGS'] = array('MESSAGE_HEADERS' => array('Reply-To' => "<{$fromEmail}>, <{$crmEmail}>"));
         }
         CCrmActivity::Update($ID, $arUpdateFields, false, false);
     }
コード例 #6
0
ファイル: ajax.php プロジェクト: mrdeadmouse/u136006
     CCrmActivity::InjectUrnInMessage($postingData, $urn, CCrmEMailCodeAllocation::GetCurrent());
     $posting = new CPosting();
     $postingID = $posting->Add($postingData);
     if ($postingID > 0) {
         $updateFields = array('ASSOCIATED_ENTITY_ID' => $postingID);
         $fromEmail = strtolower(trim(CCrmMailHelper::ExtractEmail($from)));
         if ($crmEmail !== '' && $fromEmail !== $crmEmail) {
             $updateFields['SETTINGS'] = array('MESSAGE_HEADERS' => array('Reply-To' => "<{$fromEmail}>, <{$crmEmail}>"));
         }
         CCrmActivity::Update($ID, $updateFields, false, false);
     }
     // <-- Creating Email
     // Attaching files -->
     $rawFiles = isset($fields['STORAGE_ELEMENT_IDS']) ? StorageManager::makeFileArray($fields['STORAGE_ELEMENT_IDS'], $storageTypeID) : array();
     foreach ($rawFiles as &$rawFile) {
         $posting->SaveFile($postingID, $rawFile);
     }
     unset($rawFile);
     // <-- Attaching files
     // Sending Email -->
     $posting->ChangeStatus($postingID, 'P');
     if (($e = $APPLICATION->GetException()) == false) {
         $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);
         }
     }
     //<-- Sending Email
 }
 //Try add event to entity -->
 //Invoices have another event model
コード例 #7
0
ファイル: component.php プロジェクト: mrdeadmouse/u136006
 //<-- 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')) {
         $rsAgents = CAgent::GetList(array('ID' => 'DESC'), array('MODULE_ID' => 'subscribe', 'NAME' => 'CPosting::AutoSend(' . $SID . ',%'));
         if (!$rsAgents->Fetch()) {
             CAgent::AddAgent('CPosting::AutoSend(' . $SID . ',true);', 'subscribe', 'N', 0);
         }
     }
     $arFilter = array();
     $arEntity = array();
     foreach ($arFmUserList as $_sEmail) {
         $arFilter[] = array('TYPE_ID' => 'EMAIL', 'VALUE' => $_sEmail);
     }
     $obEntityR = CCrmFieldMulti::GetList(array(), array('ENTITY_ID' => 'LEAD|CONTACT|COMPANY', 'FILTER' => $arFilter), array('ID', 'ENTITY_ID'));