• Модуль: workflow
  • Путь к файлу: ~/bitrix/modules/workflow/classes/general/workflow.php
  • Класс: CAllWorkflow
  • Вызов: CAllWorkflow::SetMove
static function SetMove($DOCUMENT_ID, $STATUS_ID, $OLD_STATUS_ID, $LOG_ID)
{
	$err_mess = (CAllWorkflow::err_mess())."
Function: SetMove
Line: "; global $DB, $USER, $APPLICATION; $DOCUMENT_ID = intval($DOCUMENT_ID); $STATUS_ID = intval($STATUS_ID); $OLD_STATUS_ID = intval($OLD_STATUS_ID); $LOG_ID = intval($LOG_ID); $arFields = array( "TIMESTAMP_X" => $DB->GetNowFunction(), "DOCUMENT_ID" => $DOCUMENT_ID, "OLD_STATUS_ID" => $OLD_STATUS_ID, "STATUS_ID" => $STATUS_ID, "LOG_ID" => $LOG_ID, "USER_ID" => intval($USER->GetID()), ); $DB->Insert("b_workflow_move",$arFields, $err_mess.__LINE__); if($STATUS_ID != $OLD_STATUS_ID) { CTimeZone::Disable(); $d = CWorkflow::GetByID($DOCUMENT_ID); CTimeZone::Enable(); if ($dr = $d->Fetch()) { $STATUS_ID = $dr["STATUS_ID"]; // document creator $ENTERED_BY_USER_ID = $dr["ENTERED_BY"]; // gather email of the workflow admins $WORKFLOW_ADMIN_GROUP_ID = COption::GetOptionInt("workflow", "WORKFLOW_ADMIN_GROUP_ID", 0); $strSql = " SELECT U.ID, U.EMAIL FROM b_user U, b_user_group UG WHERE UG.GROUP_ID = $WORKFLOW_ADMIN_GROUP_ID and U.ID = UG.USER_ID and U.ACTIVE = 'Y' "; $a = $DB->Query($strSql, false, $err_mess.__LINE__); $arAdmin = Array(); while ($ar=$a->Fetch()) { $arAdmin[$ar["ID"]] = $ar["EMAIL"]; } // gather email for BCC $arBCC = array(); // gather all who changed doc in its current status $strSql = " SELECT USER_ID FROM b_workflow_move WHERE DOCUMENT_ID = $DOCUMENT_ID and OLD_STATUS_ID = $STATUS_ID "; $z = $DB->Query($strSql, false, $err_mess.__LINE__); while ($zr = $z->Fetch()) $arBCC[$zr["EMAIL"]] = $zr["EMAIL"]; // gather all editors // in case status have notifier flag $strSql = " SELECT DISTINCT UG.USER_ID ,U.EMAIL FROM b_workflow_status S, b_workflow_status2group SG, b_user U, b_user_group UG WHERE S.ID = $STATUS_ID and S.NOTIFY = 'Y' and SG.STATUS_ID = S.ID and SG.PERMISSION_TYPE = '2' and UG.GROUP_ID = SG.GROUP_ID and U.ID = UG.USER_ID and U.ACTIVE = 'Y' "; $z = $DB->Query($strSql, false, $err_mess.__LINE__); while ($zr = $z->Fetch()) { if(!array_key_exists($zr["EMAIL"], $arBCC)) { $grp = array(); $rs = $USER->GetUserGroupList($zr["USER_ID"]); while($ar = $rs->Fetch()) $grp[] = $ar["GROUP_ID"]; $arTasks = $APPLICATION->GetFileAccessPermission($dr["FILENAME"], $grp, true); foreach($arTasks as $task_id) { $arOps = CTask::GetOperations($task_id, true); if(in_array("fm_edit_in_workflow", $arOps)) { $arBCC[$zr["EMAIL"]] = $zr["EMAIL"]; break; } } } } unset($arBCC[$dr["EUSER_EMAIL"]]); if(array_key_exists($dr["ENTERED_BY"], $arAdmin)) $dr["EUSER_NAME"] .= " (Admin)"; // it is not new doc if($OLD_STATUS_ID > 0) { if(array_key_exists($dr["MODIFIED_BY"],$arAdmin)) $dr["MUSER_NAME"] .= " (Admin)"; $q = CWorkflowStatus::GetByID($OLD_STATUS_ID); $qr = $q->Fetch(); // send change notification $arEventFields = array( "ID" => $dr["ID"], "ADMIN_EMAIL" => implode(",", $arAdmin), "BCC" => implode(",", $arBCC), "PREV_STATUS_ID" => $OLD_STATUS_ID, "PREV_STATUS_TITLE" => $qr["TITLE"], "STATUS_ID" => $dr["STATUS_ID"], "STATUS_TITLE" => $dr["STATUS_TITLE"], "DATE_ENTER" => $dr["DATE_ENTER"], "ENTERED_BY_ID" => $dr["ENTERED_BY"], "ENTERED_BY_NAME" => $dr["EUSER_NAME"], "ENTERED_BY_EMAIL" => $dr["EUSER_EMAIL"], "DATE_MODIFY" => $dr["DATE_MODIFY"], "MODIFIED_BY_ID" => $dr["MODIFIED_BY"], "MODIFIED_BY_NAME" => $dr["MUSER_NAME"], "FILENAME" => $dr["FILENAME"], "SITE_ID" => $dr["SITE_ID"], "TITLE" => $dr["TITLE"], "BODY_HTML" => ($dr["BODY_TYPE"]=="html"?$dr["BODY"]:TxtToHtml($dr["BODY"])), "BODY_TEXT" => ($dr["BODY_TYPE"]=="text"?$dr["BODY"]:HtmlToTxt($dr["BODY"])), "BODY" => $dr["BODY"], "BODY_TYPE" => $dr["BODY_TYPE"], "COMMENTS" => $dr["COMMENTS"], ); CEvent::Send("WF_STATUS_CHANGE", $dr["SITE_ID"], $arEventFields); } else // otherwise { // it was new one $arEventFields = array( "ID" => $dr["ID"], "ADMIN_EMAIL" => implode(",", $arAdmin), "BCC" => implode(",", $arBCC), "STATUS_ID" => $dr["STATUS_ID"], "STATUS_TITLE" => $dr["STATUS_TITLE"], "DATE_ENTER" => $dr["DATE_ENTER"], "ENTERED_BY_ID" => $dr["ENTERED_BY"], "ENTERED_BY_NAME" => $dr["EUSER_NAME"], "ENTERED_BY_EMAIL" => $dr["EUSER_EMAIL"], "FILENAME" => $dr["FILENAME"], "SITE_ID" => $dr["SITE_ID"], "TITLE" => $dr["TITLE"], "BODY_HTML" => ($dr["BODY_TYPE"]=="html"?$dr["BODY"]:TxtToHtml($dr["BODY"])), "BODY_TEXT" => ($dr["BODY_TYPE"]=="text"?$dr["BODY"]:HtmlToTxt($dr["BODY"])), "BODY" => $dr["BODY"], "BODY_TYPE" => $dr["BODY_TYPE"], "COMMENTS" => $dr["COMMENTS"], ); CEvent::Send("WF_NEW_DOCUMENT", $dr["SITE_ID"], $arEventFields); } } } }