- Модуль: tasks
- Путь к файлу: ~/bitrix/modules/tasks/classes/general/tasknotifications.php
- Класс: CTaskNotifications
- Вызов: CTaskNotifications::notifyByMail
static function notifyByMail(array $message, array $site)
{
if (
!is_array($message)
|| !isset($message["ENTITY_CODE"])
|| !isset($message["FROM_USER_ID"])
|| !isset($message["TASK_ID"])
|| !isset($message["TO_USER_IDS"])
|| !is_array($message["TO_USER_IDS"])
|| empty($message["TO_USER_IDS"])
)
{
return false;
}
if (!BitrixTasksIntegrationMail::isInstalled())
{
return false;
}
if(!is_array($message["TO_USER_IDS"]) || empty($message["TO_USER_IDS"]))
{
return false;
}
// ids
$authorId = (int)$message["FROM_USER_ID"];
$taskId = (int)$message["TASK_ID"];
// check event type
$entityCode = trim($message["ENTITY_CODE"]);
$entityOperation = trim($message["ENTITY_OPERATION"]);
// site detect
if(!is_array($site) || empty($site) || empty($site["SITE_ID"]))
{
$site = BitrixTasksUtilSite::get(SITE_ID);
}
if(empty($site["SITE_ID"])) // no way, this cant be true
{
return false;
}
$siteId = $site["SITE_ID"];
// event type
$eventId = false;
$threadMessageId = false;
$prevFields = array();
$commentId = 0;
$taskTitle = '';
$subjPrefix = '';
if($entityCode === 'TASK')
{
if($entityOperation === 'ADD' || $entityOperation === 'UPDATE')
{
$eventId = 'TASKS_TASK_'.$entityOperation.'_EMAIL';
$threadMessageId = BitrixTasksIntegrationMail::formatThreadId('TASK_'.$taskId, $siteId);
}
if($entityOperation === 'UPDATE')
{
$threadMessageId = BitrixTasksIntegrationMail::formatThreadId(
sprintf('TASK_UPDATE_%u_%x%x', $taskId, time(), rand(0, 0xffffff)),
$siteId
);
$prevFields = $message["EVENT_DATA"]['arChanges'];
$subjPrefix = BitrixTasksIntegrationMail::getSubjectPrefix();
}
if($message["EVENT_DATA"]["arFields"])
{
$taskTitle = trim($message["EVENT_DATA"]["arFields"]['TITLE']);
}
}
elseif($entityCode === 'COMMENT')
{
if($entityOperation === 'ADD')
{
$eventId = 'TASKS_TASK_COMMENT_ADD_EMAIL';
$commentId = $message["EVENT_DATA"]['MESSAGE_ID'];
if(!$commentId)
{
// unable to identify comment id, exit
return false;
}
$threadMessageId = BitrixTasksIntegrationMail::formatThreadId('TASK_COMMENT_'.$commentId, $siteId);
$subjPrefix = BitrixTasksIntegrationMail::getSubjectPrefix();
}
if($message["ADDITIONAL_DATA"]['TASK_DATA'])
{
$taskTitle = trim($message["ADDITIONAL_DATA"]['TASK_DATA']['TITLE']);
}
}
if($eventId === false)
{
return false; // unknown action
}
// email letter data
$pathToTask = BitrixTasksIntegrationMailTask::getDefaultPublicPath($taskId);
$users = static::getUsers(array_merge(array($authorId), $message["TO_USER_IDS"]));
foreach($users as $i => $user)
{
$users[$i]['NAME_FORMATTED'] = User::formatName($users[$i], $siteId);
}
$receiversData = BitrixTasksIntegrationMailUser::getData($message["TO_USER_IDS"], $siteId);
if(empty($receiversData))
{
return false; // nowhere to send
}
foreach ($receiversData as $userId => $arUser)
{
$email = $arUser["EMAIL"];
$nameFormatted = str_replace(array('<', '>', '"'), '', $arUser["NAME_FORMATTED"]);
$replyTo = BitrixTasksIntegrationMailTask::getReplyTo(
$userId,
$taskId,
$pathToTask,
$siteId
);
if ($replyTo != '')
{
$authorName = str_replace(array('<', '>', '"'), '', $users[$authorId]['NAME_FORMATTED']);
$e = array(
"=Reply-To" => $authorName.' <'.$replyTo.'>',
"=Message-Id" => $threadMessageId,
"EMAIL_FROM" => $authorName.' <'.BitrixTasksIntegrationMail::getDefaultEmailFrom($siteId).'>',
"EMAIL_TO" => (!empty($nameFormatted) ? ''.$nameFormatted.' <'.$email.'>' : $email),
"TASK_ID" => $taskId,
"TASK_COMMENT_ID" => $commentId,
"TASK_TITLE" => $taskTitle,
"TASK_PREVIOUS_FIELDS" => BitrixTasksUtilType::serializeArray($prevFields),
"RECIPIENT_ID" => $userId,
"USER_ID" => User::getAdminId(),
"URL" => $pathToTask,
"SUBJECT" => $subjPrefix.$taskTitle
);
if (!('TASK' === $entityCode && 'ADD' === $entityOperation))
{
$e['=In-Reply-To'] = BitrixTasksIntegrationMail::formatThreadId('TASK_'.$taskId, $siteId);
}
CEvent::Send(
$eventId,
$siteId,
$e
);
}
}
}