public static function Update($arFields, $DOCUMENT_ID) { $err_mess = (CWorkflow::err_mess())."<br>Function: Update<br>Line: "; global $DB; $z = CWorkflow::GetByID($DOCUMENT_ID); $change = false; if ($zr=$z->Fetch()) { if ($zr["STATUS_ID"] != $DB->ForSql($arFields["STATUS_ID"]) or $zr["BODY"] != $DB->ForSql($arFields["BODY"]) or $zr["BODY_TYPE"] != $DB->ForSql($arFields["BODY_TYPE"]) or $zr["COMMENTS"] != $DB->ForSql($arFields["COMMENTS"]) or $zr["FILENAME"] != $DB->ForSql($arFields["FILENAME"]) or $zr["SITE_ID"] != $DB->ForSql($arFields["SITE_ID"]) or $zr["TITLE"] != $DB->ForSql($arFields["TITLE"])) $change = true; } $strUpdate = $DB->PrepareUpdate("b_workflow_document", $arFields, "workflow"); $strSql = "UPDATE b_workflow_document SET ".$strUpdate.", DATE_MODIFY=now(), DATE_ENTER=now() WHERE ID=".$DOCUMENT_ID; $DB->Query($strSql, false, $err_mess.__LINE__); if ($change) { $LOG_ID = CWorkflow::SetHistory($DOCUMENT_ID); CWorkflow::SetMove($DOCUMENT_ID, $arFields["STATUS_ID"], $zr["STATUS_ID"], $LOG_ID); } }
LocalRedirect("/bitrix/admin/workflow_edit.php?lang=" . LANGUAGE_ID . "&ID=" . $ID . "&strError=" . urlencode($strError) . "&strNote=" . urlencode($strNote) . "&" . $tabControl->ActiveTabParam() . (strlen($return_url) ? "&return_url=" . urlencode($return_url) : "")); } } } } else { if ($e = $APPLICATION->GetException()) { $message = new CAdminMessage(GetMessage("FLOW_ERROR"), $e); } } } if ($ID > 0 && !$message) { CWorkflow::Lock($ID); } $arDocFiles = array(); ClearVars(); $workflow = CWorkflow::GetByID($ID); if (!$workflow->ExtractFields()) { $ID = 0; if (is_file($DOC_ROOT . $fname)) { $filesrc = $APPLICATION->GetFileContent($DOC_ROOT . $fname); $arContent = ParseFileContent($filesrc); $str_TITLE = $arContent["TITLE"]; $str_BODY = $arContent["CONTENT"]; $get_content = "Y"; } elseif (strlen($template) > 0) { for ($i = 0; $i < count($arTemplates); $i++) { if ($arTemplates[$i]["file"] == $template) { $filesrc = GetTemplateContent($arTemplates[$i]["file"]); $arContent = ParseFileContent($filesrc); $str_TITLE = $arContent["TITLE"]; $str_BODY = $arContent["CONTENT"];
public static function SetStatus($DOCUMENT_ID, $STATUS_ID, $OLD_STATUS_ID, $history = true) { $err_mess = CAllWorkflow::err_mess() . "<br>Function: SetStatus<br>Line: "; global $DB, $APPLICATION, $USER, $strError; //$arMsg = Array(); $DOCUMENT_ID = intval($DOCUMENT_ID); $STATUS_ID = intval($STATUS_ID); $OLD_STATUS_ID = intval($OLD_STATUS_ID); if ($STATUS_ID == 1) { // get all files associated with the document $files = CWorkflow::GetFileList($DOCUMENT_ID); while ($file = $files->Fetch()) { $path = $file["FILENAME"]; $DOC_ROOT = CSite::GetSiteDocRoot($file["SITE_ID"]); $pathto = $DOC_ROOT . $path; $pathfrom = CWorkflow::GetTempDir() . $file["TEMP_FILENAME"]; if ($USER->CanDoFileOperation('fm_edit_in_workflow', array($file["SITE_ID"], $path)) && $USER->CanDoFileOperation('fm_edit_existent_file', array($file["SITE_ID"], $path)) && $USER->CanDoFileOperation('fm_create_new_file', array($file["SITE_ID"], $path))) { if (!copy($pathfrom, $pathto)) { $str = GetMessage("FLOW_CAN_NOT_WRITE_FILE", array("#FILENAME#" => $path)); $strError .= $str . "<br>"; } } else { $str = GetMessage("FLOW_ACCESS_DENIED_FOR_FILE_WRITE", array("#FILENAME#" => $path)); $strError .= $str . "<br>"; } } // still good if (strlen($strError) <= 0) { // publish the document $y = CWorkflow::GetByID($DOCUMENT_ID); $yr = $y->Fetch(); if ($USER->CanDoFileOperation('fm_edit_in_workflow', array($yr["SITE_ID"], $yr["FILENAME"])) && $USER->CanDoFileOperation('fm_edit_existent_file', array($yr["SITE_ID"], $yr["FILENAME"])) && $USER->CanDoFileOperation('fm_create_new_file', array($yr["SITE_ID"], $yr["FILENAME"]))) { // save file $prolog = $yr["PROLOG"]; if (strlen($prolog) > 0) { $title = $yr["TITLE"]; $prolog = SetPrologTitle($prolog, $title); } $content = $yr["BODY_TYPE"] == "text" ? TxtToHTML($yr["BODY"]) : $yr["BODY"]; $content = WFToPath($content); $epilog = $yr["EPILOG"]; $filesrc = $prolog . $content . $epilog; global $BX_WORKFLOW_PUBLISHED_PATH, $BX_WORKFLOW_PUBLISHED_SITE; $BX_WORKFLOW_PUBLISHED_PATH = $yr["FILENAME"]; $BX_WORKFLOW_PUBLISHED_SITE = $yr["SITE_ID"]; $DOC_ROOT = CSite::GetSiteDocRoot($yr["SITE_ID"]); $APPLICATION->SaveFileContent($DOC_ROOT . $yr["FILENAME"], $filesrc); $BX_WORKFLOW_PUBLISHED_PATH = ""; $BX_WORKFLOW_PUBLISHED_SITE = ""; } else { // throw error $str = GetMessage("FLOW_ACCESS_DENIED_FOLDER", array("#FILENAME#" => $yr["FILENAME"])); $strError .= GetMessage("FLOW_ERROR") . htmlspecialcharsbx($str) . "<br>"; } } } if (strlen($strError) <= 0) { // update db $arFields = array("DATE_MODIFY" => $DB->GetNowFunction(), "MODIFIED_BY" => $USER->GetID(), "STATUS_ID" => intval($STATUS_ID)); $DB->Update("b_workflow_document", $arFields, "WHERE ID='" . $DOCUMENT_ID . "'", $err_mess . __LINE__); if ($history === true) { $LOG_ID = CWorkflow::SetHistory($DOCUMENT_ID); CWorkflow::SetMove($DOCUMENT_ID, $STATUS_ID, $OLD_STATUS_ID, $LOG_ID); } } else { $strError = GetMessage("FLOW_DOCUMENT_NOT_PUBLISHED") . "<br>" . $strError; } CWorkflow::CleanUpPublished(); }
$context->Show(); CAdminMessage::ShowMessage(GetMessage("FLOW_RECORD_NOT_FOUND")); require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/epilog_admin.php"; die; } } $history = CWorkflow::GetHistoryByID($ID); ClearVars(); $ar = $history->ExtractFields(); $z = CWorkflow::GetByID($str_DOCUMENT_ID); if ($zr = $z->Fetch()) { $document_exist = "Y"; } $prev_history = CWorkflow::GetHistoryByID($PREV_ID); $prev_ar = $prev_history->Fetch(); $prev_z = CWorkflow::GetByID($prev_ar["DOCUMENT_ID"]); if ($prev_zr = $prev_z->Fetch()) { $prev_document_exist = "Y"; } $sDocTitle = str_replace("#ID#", "{$ID}", GetMessage("FLOW_PAGE_TITLE")); $APPLICATION->SetTitle($sDocTitle); require $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_admin_after.php"; /*************************************************************************** HTML form ****************************************************************************/ $aTabs = array(); if ($ID && $PREV_ID) { $aTabs[] = array("DIV" => "edit1", "TAB" => GetMessage("FLOW_RECORD_SETTINGS"), "ICON" => "main_user_edit", "TITLE" => GetMessage("FLOW_PAGE_DIFF_TITLE", array("#ID#" => $ID, "#PREV_ID#" => $PREV_ID))); } else { $aTabs[] = array("DIV" => "edit1", "TAB" => GetMessage("FLOW_RECORD_SETTINGS"), "ICON" => "main_user_edit", "TITLE" => GetMessage("FLOW_PAGE_TITLE", array("#ID#" => $ID))); }
// there is document ID if ($ID > 0 && check_bitrix_sessid()) { // check if document exists in database $z = $DB->Query("SELECT ID FROM b_workflow_document WHERE ID = " . intval($ID), false, $err_mess . __LINE__); if (!($zr = $z->Fetch())) { require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_admin_after.php"; $aMenu = array(array("ICON" => "btn_list", "TEXT" => GetMessage("FLOW_RECORDS_LIST"), "LINK" => "workflow_list.php?lang=" . LANGUAGE_ID, "TITLE" => GetMessage("FLOW_RECORDS_LIST"))); $context = new CAdminContextMenu($aMenu); $context->Show(); CAdminMessage::ShowMessage(GetMessage("FLOW_DOCUMENT_NOT_FOUND")); require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/epilog_admin.php"; die; } else { $filename = CWorkflow::GetUniquePreview($ID); // save preview file $z = CWorkflow::GetByID($ID); $zr = $z->Fetch(); $prolog = $zr["PROLOG"]; if (strlen($prolog) > 0) { $title = $zr["TITLE"]; $prolog = SetPrologTitle($prolog, $title); } $content = $zr["BODY_TYPE"] == "text" ? TxtToHTML($zr["BODY"]) : $zr["BODY"]; $epilog = $zr["EPILOG"]; $filesrc = $prolog . PathToWF($content, $ID) . $epilog; SavePreviewContent($_SERVER["DOCUMENT_ROOT"] . $filename, $filesrc); // store file to database $arFields = array("DOCUMENT_ID" => $ID, "TIMESTAMP_X" => $DB->GetNowFunction(), "FILENAME" => "'" . $DB->ForSql($filename, 255) . "'"); $DB->Insert("b_workflow_preview", $arFields, $err_mess . __LINE__); // redirect to preview saved if (file_exists($_SERVER["DOCUMENT_ROOT"] . $filename)) {