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);
}
}
}
}