• Модуль: iblock
  • Путь к файлу: ~/bitrix/modules/iblock/classes/general/iblockelement.php
  • Класс: CAllIBlockElement
  • Вызов: CAllIBlockElement::WF_SetMove
function WF_SetMove($NEW_ID, $OLD_ID = 0)
{
	if(CModule::IncludeModule("workflow"))
	{
		$err_mess = "FILE: ".__FILE__."
LINE: "; global $DB, $USER; $USER_ID = is_object($USER)? (int)$USER->GetID(): 0; $NEW = "Y"; $OLD_ID = (int)$OLD_ID; $NEW_ID = (int)$NEW_ID; $oldStatusId = 0; if($OLD_ID>0) { $old = $DB->Query("SELECT WF_STATUS_ID FROM b_iblock_element WHERE ID = ".$OLD_ID, false, $err_mess.__LINE__); if($old_r=$old->Fetch()) { $NEW = "N"; $oldStatusId = (int)$old_r["WF_STATUS_ID"]; } } CTimeZone::Disable(); $new = CIBlockElement::GetByID($NEW_ID); CTimeZone::Enable(); if($new_r=$new->Fetch()) { $NEW_STATUS_ID = (int)$new_r["WF_STATUS_ID"]; $OLD_STATUS_ID = $oldStatusId; $PARENT_ID = (int)$new_r["WF_PARENT_ELEMENT_ID"]; CTimeZone::Disable(); $parent = CIBlockElement::GetByID($PARENT_ID); CTimeZone::Enable(); if($parent_r = $parent->Fetch()) { $arFields = array( "TIMESTAMP_X" => $DB->GetNowFunction(), "IBLOCK_ELEMENT_ID" => $PARENT_ID, "OLD_STATUS_ID" => $OLD_STATUS_ID, "STATUS_ID" => $NEW_STATUS_ID, "USER_ID" => $USER_ID, ); $DB->Insert("b_workflow_move", $arFields, $err_mess.__LINE__); if($NEW_STATUS_ID != $OLD_STATUS_ID) { // Get creator Email $strSql = "SELECT EMAIL FROM b_user WHERE ID = ".(int)$parent_r["CREATED_BY"]; $rs = $DB->Query($strSql, false, $err_mess.__LINE__); if($ar = $rs->Fetch()) $parent_r["CREATED_BY_EMAIL"] = $ar["EMAIL"]; else $parent_r["CREATED_BY_EMAIL"] = ""; // gather email of the workflow admins $WORKFLOW_ADMIN_GROUP_ID = (int)MainConfigOption::get("workflow", "WORKFLOW_ADMIN_GROUP_ID"); $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' "; $rs = $DB->Query($strSql, false, $err_mess.__LINE__); $arAdmin = Array(); while($ar = $rs->Fetch()) { $arAdmin[$ar["ID"]] = $ar["EMAIL"]; } // gather email for BCC $arBCC = array(); // gather all who changed doc in its current status $strSql = " SELECT U.EMAIL FROM b_workflow_move WM INNER JOIN b_user U on U.ID = WM.USER_ID WHERE IBLOCK_ELEMENT_ID = ".$PARENT_ID." AND OLD_STATUS_ID = ".$NEW_STATUS_ID." "; $rs = $DB->Query($strSql, false, $err_mess.__LINE__); while($ar = $rs->Fetch()) { $arBCC[$ar["EMAIL"]] = $ar["EMAIL"]; } // gather all editors // in case status have notifier flag //First those who have write permissions on iblock $strSql = " SELECT U.EMAIL FROM b_workflow_status S INNER JOIN b_workflow_status2group SG on SG.STATUS_ID = S.ID INNER JOIN b_iblock_group IG on IG.GROUP_ID = SG.GROUP_ID INNER JOIN b_user_group UG on UG.GROUP_ID = IG.GROUP_ID INNER JOIN b_user U on U.ID = UG.USER_ID WHERE S.ID = ".$NEW_STATUS_ID." AND S.NOTIFY = 'Y' AND IG.IBLOCK_ID = ".intval($new_r["IBLOCK_ID"])." AND IG.PERMISSION >= 'U' AND SG.PERMISSION_TYPE = '2' AND U.ACTIVE = 'Y' "; $rs = $DB->Query($strSql, false, $err_mess.__LINE__); while($ar = $rs->Fetch()) { $arBCC[$ar["EMAIL"]] = $ar["EMAIL"]; } //Second admins if they in PERMISSION_TYPE = 2 list //because they have all the rights $strSql = " SELECT U.EMAIL FROM b_workflow_status S INNER JOIN b_workflow_status2group SG on SG.STATUS_ID = S.ID INNER JOIN b_user_group UG on UG.GROUP_ID = SG.GROUP_ID INNER JOIN b_user U on U.ID = UG.USER_ID WHERE S.ID = ".$NEW_STATUS_ID." AND S.NOTIFY = 'Y' AND SG.GROUP_ID = 1 AND SG.PERMISSION_TYPE = '2' AND U.ACTIVE = 'Y' "; $rs = $DB->Query($strSql, false, $err_mess.__LINE__); while($ar = $rs->Fetch()) { $arBCC[$ar["EMAIL"]] = $ar["EMAIL"]; } $iblock_r = CIBlock::GetArrayByID($new_r["IBLOCK_ID"]); $iblock_r["LID"] = array(); $rsIBlockSite = $DB->Query("SELECT SITE_ID FROM b_iblock_site WHERE IBLOCK_ID= ".(int)$new_r["IBLOCK_ID"]); while($arIBlockSite = $rsIBlockSite->Fetch()) $iblock_r["LID"][] = $arIBlockSite["SITE_ID"]; if(array_key_exists($new_r["MODIFIED_BY"], $arAdmin)) $new_r["USER_NAME"] .= " (Admin)"; // it is not new doc if($NEW!="Y") { if(array_key_exists($parent_r["CREATED_BY"], $arAdmin)) $parent_r["CREATED_USER_NAME"] .= " (Admin)"; // send change notification $arEventFields = array( "ID" => $PARENT_ID, "IBLOCK_ID" => $new_r["IBLOCK_ID"], "IBLOCK_TYPE" => $iblock_r["IBLOCK_TYPE_ID"], "ADMIN_EMAIL" => implode(",", $arAdmin), "BCC" => implode(",", $arBCC), "PREV_STATUS_ID" => $OLD_STATUS_ID, "PREV_STATUS_TITLE" => CIblockElement::WF_GetStatusTitle($OLD_STATUS_ID), "STATUS_ID" => $NEW_STATUS_ID, "STATUS_TITLE" => CIblockElement::WF_GetStatusTitle($NEW_STATUS_ID), "DATE_CREATE" => $parent_r["DATE_CREATE"], "CREATED_BY_ID" => $parent_r["CREATED_BY"], "CREATED_BY_NAME" => $parent_r["CREATED_USER_NAME"], "CREATED_BY_EMAIL" => $parent_r["CREATED_BY_EMAIL"], "DATE_MODIFY" => $new_r["TIMESTAMP_X"], "MODIFIED_BY_ID" => $new_r["MODIFIED_BY"], "MODIFIED_BY_NAME" => $new_r["USER_NAME"], "NAME" => $new_r["NAME"], "SECTION_ID" => $new_r["IBLOCK_SECTION_ID"], "PREVIEW_HTML" => ($new_r["PREVIEW_TEXT_TYPE"]=="html" ?$new_r["PREVIEW_TEXT"]:TxtToHtml($new_r["PREVIEW_TEXT"])), "PREVIEW_TEXT" => ($new_r["PREVIEW_TEXT_TYPE"]=="text"? $new_r["PREVIEW_TEXT"]:HtmlToTxt($new_r["PREVIEW_TEXT"])), "PREVIEW" => $new_r["PREVIEW_TEXT"], "PREVIEW_TYPE" => $new_r["PREVIEW_TEXT_TYPE"], "DETAIL_HTML" => ($new_r["DETAIL_TEXT_TYPE"]=="html" ?$new_r["DETAIL_TEXT"]:TxtToHtml($new_r["DETAIL_TEXT"])), "DETAIL_TEXT" => ($new_r["DETAIL_TEXT_TYPE"]=="text"? $new_r["DETAIL_TEXT"]:HtmlToTxt($new_r["DETAIL_TEXT"])), "DETAIL" => $new_r["DETAIL_TEXT"], "DETAIL_TYPE" => $new_r["DETAIL_TEXT_TYPE"], "COMMENTS" => $new_r["WF_COMMENTS"] ); CEvent::Send("WF_IBLOCK_STATUS_CHANGE", $iblock_r["LID"], $arEventFields); } else // otherwise { // it was new one $arEventFields = array( "ID" => $PARENT_ID, "IBLOCK_ID" => $new_r["IBLOCK_ID"], "IBLOCK_TYPE" => $iblock_r["IBLOCK_TYPE_ID"], "ADMIN_EMAIL" => implode(",", $arAdmin), "BCC" => implode(",", $arBCC), "STATUS_ID" => $NEW_STATUS_ID, "STATUS_TITLE" => CIblockElement::WF_GetStatusTitle($NEW_STATUS_ID), "DATE_CREATE" => $parent_r["DATE_CREATE"], "CREATED_BY_ID" => $parent_r["CREATED_BY"], "CREATED_BY_NAME" => $parent_r["CREATED_USER_NAME"], "CREATED_BY_EMAIL" => $parent_r["CREATED_BY_EMAIL"], "NAME" => $new_r["NAME"], "PREVIEW_HTML" => ($new_r["PREVIEW_TEXT_TYPE"]=="html" ?$new_r["PREVIEW_TEXT"]:TxtToHtml($new_r["PREVIEW_TEXT"])), "PREVIEW_TEXT" => ($new_r["PREVIEW_TEXT_TYPE"]=="text"? $new_r["PREVIEW_TEXT"]:HtmlToTxt($new_r["PREVIEW_TEXT"])), "PREVIEW" => $new_r["PREVIEW_TEXT"], "PREVIEW_TYPE" => $new_r["PREVIEW_TEXT_TYPE"], "SECTION_ID" => $new_r["IBLOCK_SECTION_ID"], "DETAIL_HTML" => ($new_r["DETAIL_TEXT_TYPE"]=="html" ?$new_r["DETAIL_TEXT"]:TxtToHtml($new_r["DETAIL_TEXT"])), "DETAIL_TEXT" => ($new_r["DETAIL_TEXT_TYPE"]=="text"? $new_r["DETAIL_TEXT"]:HtmlToTxt($new_r["DETAIL_TEXT"])), "DETAIL" => $new_r["DETAIL_TEXT"], "DETAIL_TYPE" => $new_r["DETAIL_TEXT_TYPE"], "COMMENTS" => $new_r["WF_COMMENTS"] ); CEvent::Send("WF_NEW_IBLOCK_ELEMENT",$iblock_r["LID"], $arEventFields); } } } } } }