function SendStatusMessage($arTask, $status, $arFields = array()) { global $USER, $DB; $status = intval($status); if ($status > 0 && $status < 8) { $arRecipientsIDs = CTaskNotifications::GetRecipientsIDs(array_merge($arTask, $arFields)); if (sizeof($arRecipientsIDs) && (is_object($USER) && $USER->GetID() || $arTask["CREATED_BY"])) { // If task was redoed if (($status == CTasks::STATE_NEW || $status == CTasks::STATE_PENDING) && $arTask['REAL_STATUS'] == CTasks::STATE_SUPPOSEDLY_COMPLETED) { $message = str_replace("#TASK_TITLE#", self::formatTaskName($arTask['ID'], $arTask['TITLE'], $arTask['GROUP_ID'], true), GetMessage("TASKS_TASK_STATUS_MESSAGE_REDOED")); $message_email = str_replace("#TASK_TITLE#", self::formatTaskName($arTask['ID'], $arTask['TITLE'], $arTask['GROUP_ID']), GetMessage("TASKS_TASK_STATUS_MESSAGE_REDOED") . "\r\n" . GetMessage('TASKS_MESSAGE_LINK') . ': #PATH_TO_TASK#'); } else { $message = str_replace("#TASK_TITLE#", self::formatTaskName($arTask['ID'], $arTask['TITLE'], $arTask['GROUP_ID'], true), GetMessage("TASKS_TASK_STATUS_MESSAGE_" . $status)); $message_email = str_replace("#TASK_TITLE#", self::formatTaskName($arTask['ID'], $arTask['TITLE'], $arTask['GROUP_ID']), GetMessage("TASKS_TASK_STATUS_MESSAGE_" . $status) . "\r\n" . GetMessage('TASKS_MESSAGE_LINK') . ': #PATH_TO_TASK#'); if ($status == CTasks::STATE_DECLINED) { $message = str_replace("#TASK_DECLINE_REASON#", $arTask["DECLINE_REASON"], $message); $message_email = str_replace("#TASK_DECLINE_REASON#", $arTask["DECLINE_REASON"], $message_email); } } $occurAsUserId = CTasksTools::getOccurAsUserId(); if (!$occurAsUserId) { $occurAsUserId = is_object($USER) && $USER->GetID() ? $USER->GetID() : $arTask["CREATED_BY"]; } CTaskNotifications::SendMessage($occurAsUserId, $arRecipientsIDs, $message, $arTask["ID"], $message_email, array('ACTION' => 'TASK_STATUS_CHANGED_MESSAGE', 'arTask' => $arTask, 'arFields' => $arFields)); } } // sonet log if (CModule::IncludeModule("socialnetwork")) { if ($status == CTasks::STATE_PENDING) { $message = GetMessage("TASKS_SONET_TASK_STATUS_MESSAGE_" . CTasks::STATE_NEW); } else { $message = GetMessage("TASKS_SONET_TASK_STATUS_MESSAGE_" . $status); } if ($status == CTasks::STATE_DECLINED) { $message = str_replace("#TASK_DECLINE_REASON#", $arTask["DECLINE_REASON"], $message); } $arSoFields = array("TITLE" => $arTask["TITLE"], "=LOG_UPDATE" => strlen($arTask["CHANGED_DATE"]) > 0 ? MakeTimeStamp($arTask["CHANGED_DATE"], CSite::GetDateFormat("FULL", SITE_ID)) > time() + CTimeZone::GetOffset() ? $DB->CharToDateFunction($arTask["CHANGED_DATE"], "FULL", SITE_ID) : $DB->CurrentTimeFunction() : $DB->CurrentTimeFunction(), "MESSAGE" => "", "TEXT_MESSAGE" => $message, "PARAMS" => serialize(array("TYPE" => "status", 'CHANGED_BY' => $arFields['CHANGED_BY'], 'PREV_REAL_STATUS' => isset($arTask['REAL_STATUS']) ? $arTask['REAL_STATUS'] : false))); $arSoFields['=LOG_DATE'] = $arSoFields['=LOG_UPDATE']; // All tasks posts in live feed should be from director if (isset($arFields['CREATED_BY'])) { $arSoFields["USER_ID"] = $arFields['CREATED_BY']; } $loggedInUserId = false; if (is_object($USER) && method_exists($USER, 'getId')) { $loggedInUserId = (int) $USER->getId(); } $dbRes = CSocNetLog::GetList(array("ID" => "DESC"), array("EVENT_ID" => "tasks", "SOURCE_ID" => $arTask["ID"]), false, false, array("ID", "ENTITY_TYPE", "ENTITY_ID")); while ($arRes = $dbRes->Fetch()) { CSocNetLog::Update($arRes['ID'], $arSoFields); $authorUserId = (int) $arTask['CREATED_BY']; // Add author to list of users that view log about task in livefeed // But only when some other person change task if ($authorUserId !== $loggedInUserId) { $authorGroupCode = 'U' . $authorUserId; $rsRights = CSocNetLogRights::GetList(array(), array('LOG_ID' => $arRes['ID'], 'GROUP_CODE' => $authorGroupCode)); // If task's author hasn't rights yet, give them if (!($arRights = $rsRights->fetch())) { CSocNetLogRights::Add($arRes["ID"], array($authorGroupCode)); } } } } }