if ($res) { $obWorkflowStatus->SetPermissions($ID, $arPERMISSION_M, 1); $obWorkflowStatus->SetPermissions($ID, $arPERMISSION_E, 2); if ($apply != "") { LocalRedirect("/bitrix/admin/workflow_status_edit.php?ID=" . $ID . "&lang=" . LANG . "&" . $tabControl->ActiveTabParam()); } else { LocalRedirect("/bitrix/admin/workflow_status_list.php?lang=" . LANG); } } else { if ($e = $APPLICATION->GetException()) { $message = new CAdminMessage(GetMessage("FLOW_ERROR"), $e); } } } ClearVars(); $status = CWorkflowStatus::GetByID($ID); if (!$status->ExtractFields()) { $ID = 0; $str_ACTIVE = "Y"; $str_C_SORT = CWorkflowStatus::GetNextSort(); } else { $strSql = "\n\t\tSELECT\n\t\t\tGROUP_ID,\n\t\t\tPERMISSION_TYPE\n\t\tFROM\n\t\t\tb_workflow_status2group\n\t\tWHERE\n\t\t\tSTATUS_ID='{$ID}'\n\t\t"; $z = $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__); while ($zr = $z->Fetch()) { if ($zr["PERMISSION_TYPE"] == "1") { $arPERMISSION_M[] = $zr["GROUP_ID"]; } elseif ($zr["PERMISSION_TYPE"] == "2") { $arPERMISSION_E[] = $zr["GROUP_ID"]; } } }
public static function SetMove($DOCUMENT_ID, $STATUS_ID, $OLD_STATUS_ID, $LOG_ID) { $err_mess = CAllWorkflow::err_mess() . "<br>Function: SetMove<br>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 = "\n\t\t\t\t\tSELECT\n\t\t\t\t\t\tU.ID,\n\t\t\t\t\t\tU.EMAIL\n\t\t\t\t\tFROM\n\t\t\t\t\t\tb_user U,\n\t\t\t\t\t\tb_user_group UG\n\t\t\t\t\tWHERE\n\t\t\t\t\t\tUG.GROUP_ID = {$WORKFLOW_ADMIN_GROUP_ID}\n\t\t\t\t\t\tand U.ID = UG.USER_ID\n\t\t\t\t\t\tand U.ACTIVE = 'Y'\n\t\t\t\t"; $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 = "\n\t\t\t\t\tSELECT\n\t\t\t\t\t\tUSER_ID\n\t\t\t\t\tFROM\n\t\t\t\t\t\tb_workflow_move\n\t\t\t\t\tWHERE\n\t\t\t\t\t\tDOCUMENT_ID = {$DOCUMENT_ID}\n\t\t\t\t\t\tand OLD_STATUS_ID = {$STATUS_ID}\n\t\t\t\t"; $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 = "\n\t\t\t\t\tSELECT DISTINCT\n\t\t\t\t\t\tUG.USER_ID\n\t\t\t\t\t\t,U.EMAIL\n\t\t\t\t\tFROM\n\t\t\t\t\t\tb_workflow_status S,\n\t\t\t\t\t\tb_workflow_status2group SG,\n\t\t\t\t\t\tb_user U,\n\t\t\t\t\t\tb_user_group UG\n\t\t\t\t\tWHERE\n\t\t\t\t\t\tS.ID = {$STATUS_ID}\n\t\t\t\t\t\tand S.NOTIFY = 'Y'\n\t\t\t\t\t\tand SG.STATUS_ID = S.ID\n\t\t\t\t\t\tand SG.PERMISSION_TYPE = '2'\n\t\t\t\t\t\tand UG.GROUP_ID = SG.GROUP_ID\n\t\t\t\t\t\tand U.ID = UG.USER_ID\n\t\t\t\t\t\tand U.ACTIVE = 'Y'\n\t\t\t\t"; $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 { // 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); } } } }