function WF_UnLock($LAST_ID, $bWorkFlow = true) { global $DB, $USER; $LAST_ID = intval($LAST_ID); $USER_ID = is_object($USER) ? intval($USER->GetID()) : 0; if ($bWorkFlow === true) { $strSql = "\n\t\t\t\tSELECT\n\t\t\t\t\tWF_PARENT_ELEMENT_ID,\n\t\t\t\t\tWF_LOCKED_BY\n\t\t\t\tFROM\n\t\t\t\t\tb_iblock_element\n\t\t\t\tWHERE\n\t\t\t\t\tID = " . $LAST_ID . "\n\t\t\t"; $z = $DB->Query($strSql, false, "FILE: " . __FILE__ . "<br>LINE: " . __LINE__); $zr = $z->Fetch(); if ($zr && ($zr["WF_LOCKED_BY"] == $USER_ID || CModule::IncludeModule('workflow') && CWorkflow::IsAdmin())) { $PARENT_ID = intval($zr["WF_PARENT_ELEMENT_ID"]); $DB->Query("\n\t\t\t\t\tUPDATE b_iblock_element\n\t\t\t\t\tSET\n\t\t\t\t\t\tWF_DATE_LOCK = null,\n\t\t\t\t\t\tWF_LOCKED_BY = null\n\t\t\t\t\tWHERE\n\t\t\t\t\t\tID in (" . $LAST_ID . ", " . $PARENT_ID . ")\n\t\t\t\t\t\tOR WF_PARENT_ELEMENT_ID = " . $PARENT_ID . "\n\t\t\t\t", false, "FILE: " . __FILE__ . "<br>LINE: " . __LINE__); } } else { $DB->Query("\n\t\t\t\tUPDATE b_iblock_element\n\t\t\t\tSET\n\t\t\t\t\tWF_DATE_LOCK = null,\n\t\t\t\t\tWF_LOCKED_BY = null\n\t\t\t\tWHERE\n\t\t\t\t\tID = " . $LAST_ID, false, "FILE: " . __FILE__ . "<br>LINE: " . __LINE__); } }
function GetDropDownList($SHOW_ALL = "N", $strOrder = "desc", $arFilter = array()) { global $USER; if (strtolower($strOrder) != "asc") { $strOrder = "desc"; } else { $strOrder = "asc"; } $arFilter["!=ACTIVE"] = "N"; if (!(CWorkflow::IsAdmin() || $SHOW_ALL == "Y")) { $arGroups = $USER->GetUserGroupArray(); if (!is_array($arGroups)) { $arGroups = array(2); } $arFilter["GROUP_ID"] = $arGroups; $arFilter["PERMISSION_TYPE_1"] = 1; } return CWorkflowStatus::GetList($by = "s_c_sort", $strOrder, $arFilter, $is_filtered, array("REFERENCE_ID", "REFERENCE", "IS_FINAL", "C_SORT")); }
function CleanUpPublished() { $err_mess = CWorkflow::err_mess() . "<br>Function: CleanUpPublished<br>Line: "; global $DB; $DAYS_AFTER_PUBLISHING = intval(COption::GetOptionString("workflow", "DAYS_AFTER_PUBLISHING", "0")); if ($DAYS_AFTER_PUBLISHING >= 0) { $strSql = "\n\t\t\t\tSELECT\n\t\t\t\t\tID\n\t\t\t\tFROM\n\t\t\t\t\tb_workflow_document\n\t\t\t\tWHERE\n\t\t\t\t\tSTATUS_ID = 1\n\t\t\t\tand to_days(now())-to_days(DATE_MODIFY)>={$DAYS_AFTER_PUBLISHING}\n\t\t\t\t"; $z = $DB->Query($strSql, false, $err_mess . __LINE__); while ($zr = $z->Fetch()) { CWorkflow::Delete($zr["ID"]); } } }
function CheckFields() { global $DB, $strError, $FILENAME, $APPLICATION, $ID, $BODY, $USER, $SITE_ID, $STATUS_ID, $DOC_ROOT; $str = ""; $arMsg = array(); $SCRIPT_FILE_TYPE = GetFileType($FILENAME); $FILENAME = trim($FILENAME); $FILENAME = "/" . ltrim(_normalizePath($FILENAME), "/"); $io = CBXVirtualIo::GetInstance(); if (strlen($FILENAME) <= 0) { $arMsg[] = array("id" => "FILENAME", "text" => GetMessage("FLOW_FORGOT_FILENAME")); } elseif (!$io->ValidatePathString($FILENAME)) { $arMsg[] = array("id" => "FILENAME", "text" => GetMessage("FLOW_FILE_NAME_NOT_VALID")); } elseif ($SCRIPT_FILE_TYPE != "SOURCE") { $arMsg[] = array("id" => "FILENAME", "text" => GetMessage("FLOW_INCORRECT_FILETYPE")); } else { $SITE_ID = CWorkflow::__CheckSite($SITE_ID); if (!$SITE_ID) { $SITE_ID = CSite::GetSiteByFullPath($_SERVER['DOCUMENT_ROOT'] . $FILENAME); } if (!$USER->CanDoFileOperation('fm_edit_in_workflow', array($SITE_ID, $FILENAME))) { $s = str_replace("#FILENAME#", "{$FILENAME}", GetMessage("FLOW_ACCESS_DENIED")); $arMsg[] = array("id" => "FILENAME", "text" => $s . ": " . GetMessage("FLOW_MIN_RIGHTS")); } elseif ($STATUS_ID == 1 && !($USER->CanDoFileOperation('fm_edit_existent_file', array($SITE_ID, $FILENAME)) && $USER->CanDoFileOperation('fm_create_new_file', array($SITE_ID, $FILENAME)))) { $arMsg[] = array("id" => "FILENAME", "text" => GetMessage("FLOW_ACCESS_DENIED_FOR_FILE_WRITE", array("#FILENAME#" => $FILENAME))); } else { $z = CWorkflow::GetByFilename($FILENAME, $SITE_ID); if ($zr = $z->Fetch()) { if ($zr["ID"] != $ID && $zr["STATUS_ID"] != 1) { $arMsg[] = array("id" => "FILENAME", "text" => str_replace("#FILENAME#", $FILENAME, GetMessage("FLOW_FILENAME_EXIST"))); } } } } if (!CWorkflow::IsAdmin()) { $arGroups = $USER->GetUserGroupArray(); if (!is_array($arGroups)) { $arGroups = array(2); } $arFilter = array("GROUP_ID" => $arGroups, "PERMISSION_TYPE_1" => 1, "ID_EXACT_MATCH" => "Y", "ID" => $STATUS_ID); $rsStatuses = CWorkflowStatus::GetList($by = "s_c_sort", $strOrder, $arFilter, $is_filtered, array("ID")); if (!$rsStatuses->Fetch()) { $arMsg[] = array("id" => "STATUS_ID", "text" => GetMessage("FLOW_ERROR_WRONG_STATUS")); } } $bIsPhp = IsPHP($BODY); if ($bIsPhp) { if ($USER->CanDoFileOperation('fm_lpa', array($SITE_ID, $FILENAME)) && !$USER->CanDoOperation('edit_php')) { if (CModule::IncludeModule("fileman")) { $old_res = CFileman::ParseFileContent($APPLICATION->GetFileContent($DOC_ROOT . $FILENAME), true); $old_BODY = $old_res["CONTENT"]; $BODY = CMain::ProcessLPA($BODY, $old_BODY); } else { $arMsg[] = array("id" => "BODY", "text" => "Error! Fileman is not included!"); } } else { if (!$USER->CanDoOperation('edit_php')) { $arMsg[] = array("id" => "BODY", "text" => GetMessage("FLOW_PHP_IS_NOT_AVAILABLE")); } } } if (!empty($arMsg)) { $e = new CAdminException($arMsg); $GLOBALS["APPLICATION"]->ThrowException($e); return false; } return true; }
echo GetMessage('FILEMAN_HEIGHT'); ?> </font></td> <td><input class="typeinput" type="text" size="5" name="imgheight" readonly></td> </tr> </table> </font> </td> <?php } ?> </tr> </table> <?php if ($WF_CONVERT == "Y" && intval($DOCUMENT_ID) > 0 && CModule::IncludeModule("workflow")) { $doc_files = CWorkflow::GetFileList(intval($DOCUMENT_ID)); $doc_files->NavStart(); if ($doc_files->SelectedRowsCount() > 0) { ?> <br> <table border="0" cellspacing="0" cellpadding="0" width="450"> <tr> <td colspan="2" align="left"><font class="tableheadtext"><b><?php echo GetMessage('FILEMAN_UPLOADED_FILES'); ?> </b></font> </td> </tr> <tr> <td align="center" colspan="2" width="0%"> <table border="0" cellspacing="0" cellpadding="0" class="tableborder" width="100%"> <tr>
} if (!empty($arParams["SHOW_NOTE"])) { ?> <br /> <div class="wd-help-list selected" id="wd_list_note"><?php echo $arParams["~SHOW_NOTE"]; ?> </div> <?php } if ($arParams["WORKFLOW"] == "workflow" && $arParams["PERMISSION"] >= "U" && $arParams["SHOW_WORKFLOW"] != "N") { ?> <br /> <div class="wd-help-list selected"> <?php if ($arParams["PERMISSION"] >= "W" && CWorkflow::IsAdmin()) { echo GetMessage("WD_WF_COMMENT1"); ?> <br /><?php } elseif (!in_array(2, $arResult["WF_STATUSES_PERMISSION"])) { echo GetMessage("WD_WF_COMMENT2"); ?> <br /><?php } else { foreach ($arResult["WF_STATUSES_PERMISSION"] as $key => $val) { if ($val == 2) { $arr[] = $arResult["WF_STATUSES"][$key]; } } if (count($arr) == 1) { echo str_replace("#STATUS#", $arr[0], GetMessage("WD_WF_ATTENTION2"));
if ($f_LOCK_STATUS == "green") { $lamp_alt = GetMessage("FLOW_GREEN_ALT"); } elseif ($f_LOCK_STATUS == "yellow") { $lamp_alt = GetMessage("FLOW_YELLOW_ALT"); } else { $lamp_alt = GetMessage("FLOW_RED_ALT"); } $str = '<div class="lamp-' . $f_LOCK_STATUS . '" title="' . $lamp_alt . '"></div>'; $row->AddViewField("LOCK_STATUS", $str); $row->AddViewField("FILENAME", '<a href="' . $f_FILENAME . '">' . $f_FILENAME . '</a>'); $row->AddSelectField("STATUS_ID", $arStatus); $str = '[<a href="user_edit.php?ID=' . $f_MODIFIED_BY . '&lang=' . LANG . '">' . $f_MODIFIED_BY . '</a>] ' . $f_MUSER_NAME; $row->AddViewField("MODIFIED_BY", $str); $arActions = array(); if ($f_LOCK_STATUS != "green") { if (CWorkflow::IsAdmin() || $f_LOCKED_BY == $USER->GetID()) { $arActions[] = array("ICON" => "unlock", "TEXT" => GetMessage("FLOW_UNLOCK"), "ACTION" => "if(confirm('" . GetMessage('FLOW_UNLOCK_CONFIRM') . "')) " . $lAdmin->ActionDoGroup($f_ID, "unlock")); $arActions[] = array("SEPARATOR" => true); } } if ($f_STATUS_ID != 1) { $arActions[] = array("DEFAULT" => "Y", "ICON" => "edit", "TEXT" => GetMessage("FLOW_EDIT"), "ACTION" => $lAdmin->ActionRedirect("workflow_edit.php?lang=" . LANG . "&ID=" . $f_ID)); } else { $arActions[] = array("ICON" => "view", "TEXT" => GetMessage("FLOW_VIEW"), "ACTION" => $lAdmin->ActionRedirect("workflow_edit.php?lang=" . LANG . "&ID=" . $f_ID)); } if ($f_STATUS_ID != 1) { $arActions[] = array("ICON" => "view", "TEXT" => GetMessage("FLOW_PREVIEW"), "ACTION" => $lAdmin->ActionRedirect("workflow_preview.php?lang=" . LANG . "&ID=" . $f_ID . "&" . bitrix_sessid_get())); } $arActions[] = array("ICON" => "view", "TEXT" => GetMessage("FLOW_HISTORY"), "ACTION" => $lAdmin->ActionRedirect("workflow_history_list.php?lang=" . LANG . "&find_document_id=" . $f_ID . "&find_document_id_exact_match=Y&set_filter=Y")); $arActions[] = array("ICON" => "view", "TEXT" => GetMessage("FLOW_HISTORY_FILE"), "ACTION" => $lAdmin->ActionRedirect("workflow_history_list.php?lang=" . LANG . "&find_filename=" . $f_FILENAME . "&find_filename_exact_match=Y&set_filter=Y")); if ($f_LOCK_STATUS != "red" && $WORKFLOW_RIGHT > "R") {
$name = $option[0]; $val = $_POST[$name]; if ($option[3][0] == "checkbox" && $val != "Y") { $val = "N"; } COption::SetOptionString($module_id, $name, $val); } COption::SetOptionString($module_id, "WORKFLOW_ADMIN_GROUP_ID", intval($WORKFLOW_ADMIN_GROUP_ID)); if ($_POST["DAYS_AFTER_PUBLISHING_clear"] == "Y") { CWorkflow::CleanUpPublished(); } if ($_POST["HISTORY_COPIES_clear"] == "Y") { CWorkflow::CleanUpHistoryCopies(); } if ($_POST["HISTORY_DAYS_clear"] == "Y") { CWorkflow::CleanUpHistory(); } } $Update = $Update . $Apply; ob_start(); require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/admin/group_rights.php"; ob_end_clean(); LocalRedirect($APPLICATION->GetCurPage() . "?mid=" . urlencode($module_id) . "&lang=" . urlencode(LANGUAGE_ID) . "&" . $tabControl->ActiveTabParam()); } $WORKFLOW_ADMIN_GROUP_ID = COption::GetOptionString($module_id, "WORKFLOW_ADMIN_GROUP_ID"); ?> <?php $tabControl->Begin(); ?> <form method="POST" action="<?php echo htmlspecialcharsbx($APPLICATION->GetCurPage() . '?mid=' . urlencode($module_id) . '&lang=' . LANGUAGE_ID);
<?php } ?> </select> </li> <?php if (!in_array(2, $arResult["WF_STATUSES_PERMISSION"])) { ?> <li class="wd-upload-form-propety"> <span class="comments"><?php echo GetMessage("WD_WF_ATTENTION1"); ?> </span> </li> <?php } elseif (!CWorkflow::IsAdmin()) { $arr = array(); foreach ($arResult["WF_STATUSES_PERMISSION"] as $key => $val) { if ($val == 2) { $arr[] = htmlspecialcharsEx($arResult["WF_STATUSES"][$key]); } } ?> <li class="wd-upload-form-propety"> <span class="comments"><?php echo count($arr) == 1 ? str_replace("#STATUS#", $arr[0], GetMessage("WD_WF_ATTENTION2")) : str_replace("#STATUS#", $arr[0], GetMessage("WD_WF_ATTENTION3")); ?> </span> </li><?php } } elseif ($arParams["USE_BIZPROC"] == "Y") {
$res["FILE_EXTENTION"] = strtolower(strrchr($res['NAME'], '.')); $res["~WF_STATUS_TITLE"] = CIBlockElement::WF_GetStatusTitle($res["WF_STATUS_ID"]); $res["WF_STATUS_TITLE"] = htmlspecialcharsEx($res["~WF_STATUS_TITLE"]); /************** Paths **********************************************/ $res["URL"] = array("DOWNLOAD" => CComponentEngine::MakePathFromTemplate($arParams["ELEMENT_HISTORY_GET_URL"], array("ELEMENT_ID" => $res["ID"], "ELEMENT_NAME" => $res["ELEMENT_NAME"])), "~DOWNLOAD" => CComponentEngine::MakePathFromTemplate($arParams["~ELEMENT_HISTORY_GET_URL"], array("ELEMENT_ID" => $res["ID"], "ELEMENT_NAME" => $res["ELEMENT_NAME"])), "VIEW" => CComponentEngine::MakePathFromTemplate($arParams["ELEMENT_URL"], array("ELEMENT_ID" => $res["ID"], "ELEMENT_NAME" => $res["ELEMENT_NAME"])), "~VIEW" => CComponentEngine::MakePathFromTemplate($arParams["~ELEMENT_URL"], array("ELEMENT_ID" => $res["ID"], "ELEMENT_NAME" => $res["ELEMENT_NAME"])), "EDIT" => CComponentEngine::MakePathFromTemplate($arParams["ELEMENT_EDIT_URL"], array("ELEMENT_ID" => $res["ID"], "ACTION" => "EDIT")), "~EDIT" => CComponentEngine::MakePathFromTemplate($arParams["~ELEMENT_EDIT_URL"], array("ELEMENT_ID" => $res["ID"], "ACTION" => "EDIT")), "DELETE" => CComponentEngine::MakePathFromTemplate($arParams["ELEMENT_EDIT_URL"], array("ELEMENT_ID" => $res["ID"], "ACTION" => "DELETE")), "~DELETE" => CComponentEngine::MakePathFromTemplate($arParams["~ELEMENT_EDIT_URL"], array("ELEMENT_ID" => $res["ID"], "ACTION" => "DELETE"))); $res["URL"]["DELETE"] = WDAddPageParams($res["URL"]["DELETE"], array("edit" => "y", "sessid" => bitrix_sessid(), 'back_url' => urlencode($APPLICATION->GetCurPageParam()))); $res["URL"]["~DELETE"] = WDAddPageParams($res["URL"]["~DELETE"], array("edit" => "y", "sessid" => bitrix_sessid(), 'back_url' => urlencode($APPLICATION->GetCurPageParam()))); /************** Permission *****************************************/ $arResult["ELEMENT"] = $res; $arResult["ELEMENT"]["PERMISSION"] = CIBlockDocumentWebdav::GetIBRights('ELEMENT', $arParams["IBLOCK_ID"], $arParams["ELEMENT_ID"]); if (CWebDavIblock::CheckRight($arResult["ELEMENT"]["PERMISSION"], "element_read") < "R") { ShowError(GetMessage("WD_ACCESS_DENIED")); return 0; } $res = array("UNLOCK" => "N", "EDIT" => CWebDavIblock::CheckRight($arResult["ELEMENT"]["PERMISSION"], "element_edit") >= "W" ? "Y" : "N", "DELETE" => CWebDavIblock::CheckRight($arResult["ELEMENT"]["PERMISSION"], "element_edit") >= "W" ? "Y" : "N", "HISTORY" => "Y"); if ($arResult["ELEMENT"]["LOCK_STATUS"] == "yellow" || $arResult["ELEMENT"]["LOCK_STATUS"] == "red" && (CWorkflow::IsAdmin() || $USER->CanDoOperation('webdav_change_settings'))) { $res["UNLOCK"] = "Y"; } if ($arResult["ELEMENT"]["LOCK_STATUS"] == "red") { $res["EDIT"] = "N"; } elseif (CWebDavIblock::CheckRight($arResult["ELEMENT"]["PERMISSION"], "element_bizproc_start") == "U") { $res["EDIT"] = $arResult["ELEMENT"]["WF_STATUS_ID"] > 1 && $arResult["WF_STATUSES_PERMISSION"][$arResult["ELEMENT"]["WF_STATUS_ID"]] < 2 ? "N" : "Y"; } $arResult["ELEMENT"]["SHOW"] = $res; /************** Last element ***************************************/ $arResult["ELEMENT"]["LAST"] = $arResult["ELEMENT"]; $LAST_ID = CIBlockElement::WF_GetLast($arResult["ELEMENT"]["ID"]); if ($LAST_ID != $arResult["ELEMENT"]["ID"]) { $db_res = CIBlockElement::GetByID($LAST_ID); if ($db_res && ($res = $db_res->Fetch())) { $arResult["ELEMENT"]["LAST"] = $res;
$row =& $lAdmin->AddRow($f_ID, $arRes); if (CWorkflow::IsHaveEditRights($f_DOCUMENT_ID) && $f_DOCUMENT_ID > 0) { $row->AddViewField("DOCUMENT_ID", '<a href="workflow_edit.php?lang=' . LANG . '&ID=' . $f_DOCUMENT_ID . '">' . $f_DOCUMENT_ID . '</a>'); } $row->AddViewField("MODIFIED_BY", '[<a title="' . GetMessage("FLOW_USER_ALT") . '" href="user_edit.php?ID=' . $f_MODIFIED_BY . '&lang=' . LANG . '">' . $f_MODIFIED_BY . '</a>] ' . $f_USER_NAME); $row->AddViewField("FILENAME", '<a href="' . $f_FILENAME . '">' . TruncateText($f_FILENAME, 45) . '</a>'); $row->AddViewField("STATUS_ID", '[<a title="' . GetMessage("FLOW_STATUS_ALT") . '" href="workflow_status_edit.php?ID=' . $f_STATUS_ID . '&lang=' . LANG . '">' . $f_STATUS_ID . '</a>] ' . $f_STATUS_TITLE); $arActions = array(array("ICON" => "view", "DEFAULT" => "Y", "TEXT" => GetMessage("FLOW_VIEW"), "ACTION" => $lAdmin->ActionRedirect("workflow_history_view.php?lang=" . LANG . "&ID=" . $f_ID))); if ($WORKFLOW_RIGHT > "R" && CWorkflow::IsAdmin()) { $arActions[] = array("SEPARATOR" => true); $arActions[] = array("ICON" => "delete", "TEXT" => GetMessage("FLOW_DELETE"), "ACTION" => "if(confirm('" . GetMessage('FLOW_DELETE_CONFIRM') . "')) " . $lAdmin->ActionDoGroup($f_ID, "delete")); } $row->AddActions($arActions); } $lAdmin->AddFooter(array(array("title" => GetMessage("MAIN_ADMIN_LIST_SELECTED"), "value" => $rsData->SelectedRowsCount()), array("counter" => true, "title" => GetMessage("MAIN_ADMIN_LIST_CHECKED"), "value" => "0"))); if ($WORKFLOW_RIGHT > "R" && CWorkflow::IsAdmin()) { $lAdmin->AddGroupActionTable(array("delete" => GetMessage("MAIN_ADMIN_LIST_DELETE"), array("action" => "Diff()", "value" => "compare", "type" => "button", "name" => GetMessage("FLOW_COMPARE")))); } $aMenu = array(array("ICON" => "btn_list", "TEXT" => GetMessage("FLOW_RECORDS_LIST"), "LINK" => "workflow_list.php?lang=" . LANGUAGE_ID, "TITLE" => GetMessage("FLOW_RECORDS_LIST"))); $lAdmin->AddAdminContextMenu($aMenu); $lAdmin->CheckListMode(); $APPLICATION->SetTitle(GetMessage("FLOW_PAGE_TITLE")); require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_admin_after.php"; ?> <script> function Diff() { var selection = new Array(); var j = 0;
<?php } ?> <?php $tabControl->EndTab(); if ($document_exist == "Y") { $tabControl->BeginNextTab(); ?> <tr> <td width="40%"><?php echo GetMessage("FLOW_DOCUMENT_ID"); ?> </td> <td width="60%"><?php if (CWorkflow::IsHaveEditRights($zr["ID"])) { ?> <a href="workflow_edit.php?lang=<?php echo LANG; ?> &ID=<?php echo $zr["ID"]; ?> " title="<?php echo GetMessage('FLOW_VIEW_DOC_ALT'); ?> "><?php echo $zr["ID"]; ?> </a><?php } else {
*/ require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_admin_before.php"; require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/workflow/prolog.php"; $WORKFLOW_RIGHT = $APPLICATION->GetGroupRight("workflow"); if ($WORKFLOW_RIGHT == "D") { $APPLICATION->AuthForm(GetMessage("ACCESS_DENIED")); } require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/workflow/include.php"; IncludeModuleLangFile(__FILE__); $fname = $_REQUEST["fname"]; $path = ""; $filename = ""; if ($USER->IsAdmin() || !in_array(GetFileExtension($fname), GetScriptFileExt())) { $z = CWorkflow::GetFileByID($did, $fname); if ($zr = $z->Fetch()) { $path = CWorkflow::GetTempDir() . $zr["TEMP_FILENAME"]; if (file_exists($path)) { $filename = basename($zr["FILENAME"]); } } } else { $strError = GetMessage("FLOW_ACCESS_DENIED_PHP_DOWNLOAD"); } if (strlen($strError) <= 0) { $fsize = filesize($path); header("Content-Type: application/force-download; name=\"" . $filename . "\""); header("Content-Transfer-Encoding: binary"); header("Content-Length: " . $fsize); header("Content-Disposition: attachment; filename=\"" . $filename . "\""); header("Expires: 0"); header("Cache-Control: no-cache, must-revalidate");
public static function GetFileContent($did, $fname, $wf_path = "", $site = false) { $err_mess = CAllWorkflow::err_mess() . "<br>Function: GetFileContent<br>Line: "; global $DB, $APPLICATION, $USER; $did = intval($did); // check if executable if ($USER->IsAdmin() || CBXVirtualIoFileSystem::ValidatePathString($fname) && !HasScriptExtension($fname)) { if ($did > 0) { // check if it is associated wtih document $z = CWorkflow::GetFileByID($did, $fname); // found one if ($zr = $z->Fetch()) { // get it's contents $path = CWorkflow::GetTempDir() . $zr["TEMP_FILENAME"]; if (file_exists($path)) { return $APPLICATION->GetFileContent($path); } } else { // lookup in database $strSql = "SELECT FILENAME, SITE_ID FROM b_workflow_document WHERE ID='{$did}'"; $y = $DB->Query($strSql, false, $err_mess . __LINE__); // found if ($yr = $y->Fetch()) { // get it's directory $path = GetDirPath($yr["FILENAME"]); // absolute path $pathto = Rel2Abs($path, $fname); $DOC_ROOT = CSite::GetSiteDocRoot($yr["SITE_ID"]); $path = $DOC_ROOT . $pathto; // give it another try $u = CWorkflow::GetFileByID($did, $pathto); // found if ($ur = $u->Fetch()) { // get it's contents $path = CWorkflow::GetTempDir() . $ur["TEMP_FILENAME"]; if (file_exists($path)) { return $APPLICATION->GetFileContent($path); } } elseif (file_exists($path)) { // get it's contents if ($USER->CanDoFileOperation('fm_view_file', array($yr["SITE_ID"], $pathto))) { return $APPLICATION->GetFileContent($path); } } } } } $DOC_ROOT = CSite::GetSiteDocRoot($site); // new one if (strlen($wf_path) > 0) { $pathto = Rel2Abs($wf_path, $fname); $path = $DOC_ROOT . $pathto; if (file_exists($path)) { // get it's contents if ($USER->CanDoFileOperation('fm_view_file', array($site, $pathto))) { $src = $APPLICATION->GetFileContent($path); return $src; } } } // still failed to find // get path $path = $DOC_ROOT . $fname; if (file_exists($path)) { // get it's contents if ($USER->CanDoFileOperation('fm_view_file', array($site, $fname))) { return $APPLICATION->GetFileContent($path); } } } else { return GetMessage("FLOW_ACCESS_DENIED_PHP_VIEW"); } }
public static function WF_GetStatusPermission($STATUS_ID, $ID = false) { global $DB, $USER; $result = false; if (CModule::IncludeModule("workflow")) { if (CWorkflow::IsAdmin()) { return 2; } else { $ID = intval($ID); if ($ID) { $arStatus = array(); $arSql = array("ID='" . $ID . "'", "WF_PARENT_ELEMENT_ID='" . $ID . "'"); foreach ($arSql as $where) { $strSql = "SELECT ID, WF_STATUS_ID FROM b_iblock_element WHERE " . $where; $rs = $DB->Query($strSql); while ($ar = $rs->Fetch()) { $arStatus[$ar["WF_STATUS_ID"]] = $ar["WF_STATUS_ID"]; } } } else { $arStatus = array(intval($STATUS_ID) => intval($STATUS_ID)); } $arGroups = $USER->GetUserGroupArray(); if (!is_array($arGroups)) { $arGroups[] = 2; } $groups = implode(",", $arGroups); foreach ($arStatus as $STATUS_ID) { $strSql = "SELECT max(G.PERMISSION_TYPE) as MAX_PERMISSION " . "FROM b_workflow_status2group G " . "WHERE G.STATUS_ID = " . $STATUS_ID . " " . "\tAND G.GROUP_ID in (" . $groups . ") "; $rs = $DB->Query($strSql); $ar = $rs->Fetch(); $ar["MAX_PERMISSION"] = intval($ar["MAX_PERMISSION"]); if ($result === false || $result > $ar["MAX_PERMISSION"]) { $result = $ar["MAX_PERMISSION"]; } } } } return $result; }
function _get_file_info_arr(&$res, $arParams = array()) { global $USER; static $arFiles = array(); static $arBPTemplateStates = array(); static $arBPParamRequired = array(); $trashID = $this->GetMetaID('TRASH'); if ($this->workflow == 'bizproc') { if (!isset($arBPParamRequired[$this->IBLOCK_ID])) { $arBPParamRequired[$this->IBLOCK_ID] = $this->IsBpParamRequired(); } } $info = array(); if (!in_array($res["ID"], $arFiles)) { $res["SHOW"] = array(); $res["PERMISSION"] = $this->permission; $res['SHOW']['SHARED'] = $res['SHARED']; $res["~NAME"] = $res["NAME"]; $res['USER_FIELDS'] = $this->GetUfFields($res['ID']); if ($this->permission >= "U") { $res["SHOW"]["RIGHTS"] = $this->e_rights && (isset($res['E_RIGHTS']['element_rights_edit']) || $GLOBALS['USER']->CanDoOperation('webdav_change_settings')) ? "Y" : "N"; if ($this->workflow == 'workflow') { $original = $res; $LAST_ID = CIBlockElement::WF_GetLast($res['ID']); if ($LAST_ID != $res['ID']) { $db_res = CIBlockElement::GetList(array(), array("ID" => $LAST_ID, "SHOW_HISTORY" => "Y"), false, array("nTopCount" => 1), $this->wfParams["selected_fields"]); $res = $db_res->GetNext(); $res["FILE"]["FILE_SIZE"] = $this->GetFileSize($res); if ($this->e_rights) { $res['E_RIGHTS'] = $this->GetPermission('ELEMENT', $res['ID']); } } $res["ORIGINAL"] = $original; $res["PERMISSION"] = $original["PERMISSION"]; $res["REAL_ID"] = $res["ID"]; $res["ID"] = $original["ID"]; $res["PROPERTY_WEBDAV_INFO_VALUE"] = $original["PROPERTY_WEBDAV_INFO_VALUE"]; $res["PROPERTY_WEBDAV_INFO_VALUE_ID"] = $original["PROPERTY_WEBDAV_INFO_VALUE_ID"]; $res["TAGS"] = $original["TAGS"]; $res["~TAGS"] = $original["~TAGS"]; $res["PREVIEW_TEXT"] = $original["PREVIEW_TEXT"]; $res["~PREVIEW_TEXT"] = $original["~PREVIEW_TEXT"]; $res["NAME"] = $original["NAME"]; $res["~NAME"] = $original["~NAME"]; $res["LOCK_STATUS"] = $original["LOCK_STATUS"]; $res["LOCKED_USER_NAME"] = $original["LOCKED_USER_NAME"]; $res["WF_LOCKED_BY"] = $original["WF_LOCKED_BY"]; $res["WF_DATE_LOCK"] = $original["WF_DATE_LOCK"]; $res["LAST_ID"] = $LAST_ID; $res["TYPE"] = "E"; $res["SHOW"]["COPY"] = "Y"; $res["STATUS_ID"] = CIBlockElement::WF_GetCurrentStatus($LAST_ID, $res["STATUS_TITLE"]); $res["STATUS_PERMISSION"] = CIBlockElement::WF_GetStatusPermission($res["STATUS_ID"]); if ($res["STATUS_PERMISSION"] >= 2 || ($this->e_rights ? isset($res['E_RIGHTS']['element_edit_any_wf_status']) : $this->permission >= "W")) { $res["SHOW"]["UNLOCK"] = $res['LOCK_STATUS'] == "yellow" || $res['LOCK_STATUS'] == "red" && CWorkflow::IsAdmin() ? "Y" : "N"; $res["SHOW"]["LOCK"] = $res['LOCK_STATUS'] == "green" ? "Y" : "N"; $res["PERMISSION"] = $res['LOCK_STATUS'] == "red" && !CWorkflow::IsAdmin() ? "R" : $res["PERMISSION"]; // Edit History Delete if ($res['ORIGINAL']['WF_NEW'] == "Y" || $res["WF_STATUS_ID"] <= 1) { $res["SHOW"]["HISTORY"] = $res["SHOW"]["DELETE"] = $res["SHOW"]["EDIT"] = $this->check_creator && $res["CREATED_BY"] != $GLOBALS["USER"]->GetId() ? "N" : "Y"; } elseif ($res["WF_STATUS_ID"] > 1) { $res["SHOW"]["HISTORY"] = $res["SHOW"]["EDIT"] = $this->check_creator && $res["CREATED_BY"] != $GLOBALS["USER"]->GetId() ? "N" : "Y"; $res["SHOW"]["DELETE"] = $res["SHOW"]["EDIT"] == "Y" && $res["PERMISSION"] > "U" ? "Y" : "N"; } if ($res["LOCK_STATUS"] == "red") { $res["SHOW"]["UNLOCK"] = CWorkflow::IsAdmin() ? "Y" : "N"; $res["SHOW"]["EDIT"] = "N"; $res["SHOW"]["DELETE"] = "N"; } elseif ($this->check_creator && $res["CREATED_BY"] != $GLOBALS["USER"]->GetId()) { $res["SHOW"]["UNLOCK"] = "N"; $res["SHOW"]["LOCK"] = "N"; $res["SHOW"]["DELETE"] = "N"; $res["SHOW"]["EDIT"] = "N"; } } if ($res["STATUS_PERMISSION"] >= 2 || ($this->e_rights ? isset($res['E_RIGHTS']['element_delete']) : $this->permission >= "W")) { $res["PERMISSION"] = $res['LOCK_STATUS'] == "red" && !CWorkflow::IsAdmin() ? "R" : $res["PERMISSION"]; if ($res['ORIGINAL']['WF_NEW'] == "Y" || $res["WF_STATUS_ID"] <= 1) { $res["SHOW"]["DELETE"] = $this->check_creator && $res["CREATED_BY"] != $GLOBALS["USER"]->GetId() ? "N" : "Y"; } elseif ($res["WF_STATUS_ID"] > 1) { $res["SHOW"]["DELETE"] = $this->check_creator && $res["CREATED_BY"] != $GLOBALS["USER"]->GetId() && $res["PERMISSION"] > "U" ? "N" : "Y"; } } } elseif ($this->workflow == "bizproc") { if ($this->e_rights) { $res["PERMISSION"] = $res["E_RIGHTS"]; } if ($res['LOCK_STATUS'] != "red") { $res['LOCK_STATUS_BP'] = call_user_func(array($this->wfParams["DOCUMENT_TYPE"][1], "IsDocumentLocked"), $res["ID"] | $res["item_id"], "") ? "red" : "green"; $res['LOCK_STATUS'] = $res['LOCK_STATUS_BP'] == "red" ? "red" : $res['LOCK_STATUS']; } $res["PERMISSION"] = $res['LOCK_STATUS'] == "red" ? "R" : $res["PERMISSION"]; $res["USER_GROUPS"] = $this->USER["GROUPS"]; if ($res["CREATED_BY"] == $GLOBALS["USER"]->GetID()) { $res["USER_GROUPS"][] = "Author"; } $res["DOCUMENT_ID"] = $this->wfParams["DOCUMENT_TYPE"]; $res["DOCUMENT_ID"][2] = $res["ID"] | $res["item_id"]; $res["~arDocumentStates"] = CBPDocument::GetDocumentStates($this->wfParams["DOCUMENT_TYPE"], $res["DOCUMENT_ID"]); $res["arDocumentStates"] = array(); foreach ($res["~arDocumentStates"] as $key => $arDocumentState) { $res["~arDocumentStates"][$key]["ViewWorkflow"] = CBPDocument::CanUserOperateDocument(CBPCanUserOperateOperation::ViewWorkflow, $GLOBALS["USER"]->GetID(), $res["DOCUMENT_ID"], array("DocumentType" => $this->wfParams["DOCUMENT_TYPE"], "AllUserGroups" => $res["USER_GROUPS"], "DocumentStates" => $res["~arDocumentStates"], "WorkflowId" => $key)); if (strlen($arDocumentState["ID"]) > 0 && $res["~arDocumentStates"][$key]["ViewWorkflow"]) { $res["arDocumentStates"][$key] = $arDocumentState; $res["PERMISSION"] = "U"; } } if ($res['LOCK_STATUS'] != "red") { if (CBPDocument::CanUserOperateDocument(CBPCanUserOperateOperation::WriteDocument, $GLOBALS["USER"]->GetID(), $res["DOCUMENT_ID"], array("DocumentType" => $this->wfParams["DOCUMENT_TYPE"], "IBlockId" => $this->IBLOCK_ID, "UserGroups" => $this->USER["GROUPS"], "AllUserGroups" => $res["USER_GROUPS"], "DocumentStates" => $res["~arDocumentStates"]))) { $res["PERMISSION"] = "W"; } elseif (!CBPDocument::CanUserOperateDocument(CBPCanUserOperateOperation::ReadDocument, $GLOBALS["USER"]->GetID(), $res["DOCUMENT_ID"], array("DocumentType" => $this->wfParams["DOCUMENT_TYPE"], "IBlockId" => $this->IBLOCK_ID, "UserGroups" => $this->USER["GROUPS"], "AllUserGroups" => $res["USER_GROUPS"], "DocumentStates" => $res["~arDocumentStates"]))) { $res["PERMISSION"] = "D"; } } if ($this->CheckRight($res["PERMISSION"], 'element_read') > "D") { if ($arParams["get_clones"] == "Y" && intVal($res["WF_PARENT_ELEMENT_ID"]) <= 0) { $arFilter = array("WF_PARENT_ELEMENT_ID" => $res["ID"], "SHOW_HISTORY" => "Y"); $db_rs = CIBlockElement::GetList(array("ID" => "ASC"), $arFilter); if ($db_rs && ($rs = $db_rs->Fetch())) { $res["CHILDREN"] = array(); do { if ($rs["IBLOCK_SECTION_ID"] == $trashID) { continue; } $rs["SHOW"] = array(); $rs["PERMISSION"] = "R"; $rs["DOCUMENT_ID"] = $res["DOCUMENT_ID"]; $rs["DOCUMENT_ID"][2] = $rs["ID"]; $rs["~arDocumentStates"] = CBPDocument::GetDocumentStates($this->wfParams["DOCUMENT_TYPE"], $rs["DOCUMENT_ID"]); $USER_GROUPS = $this->USER["GROUPS"]; if ($rs["CREATED_BY"] == $GLOBALS["USER"]->GetID()) { $USER_GROUPS[] = "Author"; } if (!CBPDocument::CanUserOperateDocument(CBPCanUserOperateOperation::ReadDocument, $GLOBALS["USER"]->GetID(), $rs["DOCUMENT_ID"], array("DocumentType" => $this->wfParams["DOCUMENT_TYPE"], "IBlockId" => $this->IBLOCK_ID, "UserGroups" => $this->USER["GROUPS"], "AllUserGroups" => $USER_GROUPS, "DocumentStates" => $rs["~arDocumentStates"]))) { continue; } if (CBPDocument::CanUserOperateDocument(CBPCanUserOperateOperation::WriteDocument, $GLOBALS["USER"]->GetID(), $rs["DOCUMENT_ID"], array("DocumentType" => $this->wfParams["DOCUMENT_TYPE"], "IBlockId" => $this->IBLOCK_ID, "UserGroups" => $this->USER["GROUPS"], "AllUserGroups" => $USER_GROUPS, "DocumentStates" => $rs["~arDocumentStates"]))) { $rs["PERMISSION"] = "W"; } $rs["arDocumentStates"] = array(); foreach ($rs["~arDocumentStates"] as $key => $arDocumentState) { if (CBPDocument::CanUserOperateDocument(CBPCanUserOperateOperation::ViewWorkflow, $GLOBALS["USER"]->GetID(), $rs["DOCUMENT_ID"], array("DocumentType" => $this->wfParams["DOCUMENT_TYPE"], "IBlockId" => $this->IBLOCK_ID, "UserGroups" => $this->USER["GROUPS"], "AllUserGroups" => $USER_GROUPS, "DocumentStates" => $rs["~arDocumentStates"], "WorkflowId" => $key))) { $rs["arDocumentStates"][$key] = $arDocumentState; $rs["PERMISSION"] = empty($rs["PERMISSION"]) ? "U" : $rs["PERMISSION"]; } } if ($rs["PERMISSION"] >= "U") { if (CBPDocument::CanUserOperateDocument(CBPCanUserOperateOperation::StartWorkflow, $USER->GetID(), $rs["DOCUMENT_ID"], array("IBlockId" => $this->IBLOCK_ID, "UserGroups" => $this->USER["GROUPS"], "AllUserGroups" => $USER_GROUPS, "DocumentStates" => $rs["~arDocumentStates"]))) { $rs["SHOW"]["BP_START"] = "Y"; } $rs["SHOW"]["BP_VIEW"] = !empty($rs["arDocumentStates"]) ? "Y" : "N"; $rs["SHOW"]["EDIT"] = $rs["PERMISSION"] >= "W" ? "Y" : "N"; $rs["SHOW"]["BP"] = $rs["SHOW"]["BP_VIEW"] == "Y" || $rs["SHOW"]["BP_START"] == "Y" ? "Y" : "N"; $rs["SHOW"]["EDIT"] = $rs["PERMISSION"] >= "W" && intVal($rs["WF_PARENT_ELEMENT_ID"]) > 0 || $this->permission >= "W" ? "Y" : "N"; if ($rs["BP_LOCK_STATUS"] == "red") { $rs["SHOW"]["UNLOCK"] = CBPDocument::IsAdmin() ? "Y" : "N"; $rs["SHOW"]["EDIT"] = "N"; } elseif ($rs["LOCK_STATUS"] == "red" && $this->permission > "U") { $rs["SHOW"]["UNLOCK"] = "Y"; $rs["SHOW"]["EDIT"] = "N"; } elseif ($this->check_creator && $rs["CREATED_BY"] != $GLOBALS["USER"]->GetId()) { $rs["SHOW"]["UNLOCK"] = "N"; $rs["SHOW"]["LOCK"] = "N"; $rs["SHOW"]["DELETE"] = "N"; $rs["SHOW"]["EDIT"] = "N"; } else { $rs["SHOW"]["UNLOCK"] = $rs['LOCK_STATUS'] == "yellow" ? "Y" : "N"; $rs["SHOW"]["LOCK"] = $rs['LOCK_STATUS'] == "green" ? "Y" : "N"; $rs["SHOW"]["DELETE"] = $rs["SHOW"]["HISTORY"] = $rs["PERMISSION"] > "U" ? "Y" : "N"; } } $res["CHILDREN"][$rs["ID"]] = $rs; } while ($rs = $db_rs->Fetch()); } } if (CBPDocument::CanUserOperateDocument(CBPCanUserOperateOperation::StartWorkflow, $USER->GetID(), $res["DOCUMENT_ID"], array("IBlockId" => $this->IBLOCK_ID, "UserGroups" => $this->USER["GROUPS"], "AllUserGroups" => $res["USER_GROUPS"], "DocumentStates" => $res["~arDocumentStates"]))) { $res["SHOW"]["BP_START"] = "Y"; } $res["SHOW"]["BP_VIEW"] = !empty($res["arDocumentStates"]) ? "Y" : "N"; if ($this->workflow == 'bizproc') { $res["SHOW"]["BP_VERSIONS"] = intVal($res["WF_PARENT_ELEMENT_ID"]) <= 0 ? "Y" : "N"; $res["SHOW"]["BP_CLONE"] = intVal($res["WF_PARENT_ELEMENT_ID"]) <= 0 ? "Y" : "N"; $res["SHOW"]["COPY"] = intVal($res["WF_PARENT_ELEMENT_ID"]) <= 0 ? "Y" : "N"; } else { $res["SHOW"]["BP_VERSIONS"] = $res["SHOW"]["BP_CLONE"] = $res["SHOW"]["COPY"] = 'N'; } if ($this->CheckRight($res['PERMISSION'], 'element_edit_any_wf_status') < "W" && intVal($res["WF_PARENT_ELEMENT_ID"]) <= 0 || $res["WF_PARENT_ELEMENT_ID"] == $res["ID"]) { $arDocumentStates = CBPDocument::GetDocumentStates($this->wfParams["DOCUMENT_TYPE"], null); if (!empty($arDocumentStates)) { CBPDocument::CanUserOperateDocumentType(CBPCanUserOperateOperation::WriteDocument, $GLOBALS["USER"]->GetID(), $this->wfParams["DOCUMENT_TYPE"], array("IBlockId" => $this->IBLOCK_ID, "IBlockPermission" => $this->permission, "UserGroups" => $this->USER["GROUPS"], "AllUserGroups" => $res["USER_GROUPS"], "DocumentStates" => $arDocumentStates)); } else { $res["SHOW"]["BP_CLONE"] = "N"; } } $res["SHOW"]["BP"] = $res["SHOW"]["BP_VIEW"] == "Y" || $res["SHOW"]["BP_START"] == "Y" ? "Y" : "N"; $res["SHOW"]["EDIT"] = $this->CheckRight($res["PERMISSION"], "element_edit_any_wf_status") >= "W" ? "Y" : "N"; if ($res["LOCK_STATUS"] == "red") { $res["SHOW"]["UNLOCK"] = CBPDocument::IsAdmin() || $this->CheckRight($res['PERMISSION'], "element_edit") > "W" ? "Y" : "N"; $res["SHOW"]["LOCK"] = "N"; $res["SHOW"]["HISTORY"] = $this->CheckRight($res['PERMISSION'], 'element_edit') > "U" ? "Y" : "N"; $res["SHOW"]["DELETE"] = "N"; $res["SHOW"]["EDIT"] = "N"; } elseif ($this->InTrash($res)) { $bRightsEdit_gt_W = $this->CheckRight($res['PERMISSION'], 'element_rights_edit') > "W"; $res["SHOW"]["EDIT"] = $bRightsEdit_gt_W ? "Y" : "N"; $res["SHOW"]["HISTORY"] = $bRightsEdit_gt_W ? "Y" : "N"; $res["SHOW"]["DELETE"] = $bRightsEdit_gt_W ? "Y" : "N"; $res["SHOW"]["UNLOCK"] = "N"; $res["SHOW"]["LOCK"] = "N"; $res["SHOW"]["BP_START"] = "N"; $res["SHOW"]["BP_VIEW"] = $bRightsEdit_gt_W ? "Y" : "N"; $res["SHOW"]["BP_VERSIONS"] = $bRightsEdit_gt_W ? "Y" : "N"; $res["SHOW"]["BP_CLONE"] = $bRightsEdit_gt_W ? "Y" : "N"; $res["SHOW"]["COPY"] = intVal($res["WF_PARENT_ELEMENT_ID"]) <= 0 ? "Y" : "N"; } elseif ($this->check_creator && $res["CREATED_BY"] != $GLOBALS["USER"]->GetId()) { $res["SHOW"]["UNLOCK"] = "N"; $res["SHOW"]["LOCK"] = "N"; $res["SHOW"]["DELETE"] = "N"; $res["SHOW"]["EDIT"] = "N"; } else { $bElementEdit_gt_U = $this->CheckRight($res['PERMISSION'], 'element_rights_edit') > 'U'; $res["SHOW"]["HISTORY"] = $bElementEdit_gt_U ? "Y" : "N"; $res["SHOW"]["DELETE"] = $bElementEdit_gt_U ? "Y" : "N"; $res["SHOW"]["UNLOCK"] = $bElementEdit_gt_U && $res["LOCK_STATUS"] == "yellow" ? "Y" : "N"; $res["SHOW"]["LOCK"] = $bElementEdit_gt_U && $res["LOCK_STATUS"] == "green" ? "Y" : "N"; } if ($arBPParamRequired[$this->IBLOCK_ID]) { $res["SHOW"]["COPY"] = "N"; } } } else { $res["SHOW"]["UNLOCK"] = $res['LOCK_STATUS'] == "yellow" || $res['LOCK_STATUS'] == "red" && $res["PERMISSION"] > 'W' ? "Y" : "N"; $res["SHOW"]["LOCK"] = $res['LOCK_STATUS'] == "green" ? "Y" : "N"; $res["SHOW"]["COPY"] = "Y"; $res["SHOW"]["HISTORY"] = $res["SHOW"]["DELETE"] = $res["SHOW"]["EDIT"] = $this->check_creator && $res["CREATED_BY"] != $GLOBALS["USER"]->GetId() ? "N" : "Y"; $res["SHOW"]["HISTORY"] = $res["SHOW"]["HISTORY"] == "Y" && $this->workflow == "bizproc_limited" ? "Y" : "N"; if ($this->check_creator && $res["CREATED_BY"] != $GLOBALS["USER"]->GetId()) { $res["SHOW"]["UNLOCK"] = "N"; $res["SHOW"]["LOCK"] = "N"; $res["SHOW"]["DELETE"] = "N"; $res["SHOW"]["EDIT"] = "N"; } elseif ($res["LOCK_STATUS"] == "red" && $res["PERMISSION"] < 'X') { $res["SHOW"]["DELETE"] = "N"; $res["SHOW"]["EDIT"] = "N"; } if ($this->e_rights) { $arShow = array("COPY" => "element_edit", "DELETE" => "element_delete", "UNDELETE" => "element_no_prems", "EDIT" => "element_edit", "HISTORY" => "element_edit", "LOCK" => "element_edit", "UNLOCK" => "element_edit", "RIGHTS" => "element_rights_edit"); $bInTrash = $this->InTrash($res); foreach ($arShow as $action => $right) { if ($res['LOCK_STATUS'] == 'red' || $bInTrash) { $right = "element_rights_edit"; } if (!isset($res['E_RIGHTS'][$right])) { $res['SHOW'][$action] = 'N'; } } } } } else { $res["PERMISSION"] = $res["WF_NEW"] == "Y" || intVal($res["WF_PARENT_ELEMENT_ID"]) > 0 && $res["WF_PARENT_ELEMENT_ID"] != $res['ID'] ? "D" : $this->permission; if ($res["PERMISSION"] > "D" && $this->workflow == "bizproc") { $res["PERMISSION"] = $res["BP_PUBLISHED"] == "Y" ? $this->permission : "D"; } } $res["SHOW"]["UNDELETE"] = "N"; $secPath = "/" . implode("/", $this->GetNavChain(array("section_id" => $res["IBLOCK_SECTION_ID"]), false)); $res["SECTION_PATH"] = str_replace("//", "/", $secPath); $res["PATH"] = str_replace("//", "/", $secPath . "/" . $res["~NAME"]); $arFiles[$res["ID"]] = $res; } else { $res = array_merge($res, $arFiles[$res["ID"]]); } if ($_SERVER['REQUEST_METHOD'] == 'PROPFIND') { $info["path"] = $res['PATH']; $info["path"] = SITE_CHARSET != "UTF-8" ? $GLOBALS["APPLICATION"]->ConvertCharset($info["path"], SITE_CHARSET, "UTF-8") : $info["path"]; $info["props"] = array(); $info["props"][] = array('ns' => 'DAV:', 'name' => "creationdate", 'val' => isset($res["DATE_CREATE_UNIX"]) ? $res["DATE_CREATE_UNIX"] : MakeTimeStamp($res["DATE_CREATE"])); $info["props"][] = array('ns' => 'DAV:', 'name' => "getlastmodified", 'val' => isset($res["TIMESTAMP_X_UNIX"]) ? $res["TIMESTAMP_X_UNIX"] : MakeTimeStamp($res["TIMESTAMP_X"])); $info["props"][] = array('ns' => 'DAV:', 'name' => "creationdate", 'val' => MakeTimeStamp($res["DATE_CREATE"])); $info["props"][] = array('ns' => 'DAV:', 'name' => "getlastmodified", 'val' => MakeTimeStamp($res["TIMESTAMP_X"])); $info["props"][] = array('ns' => 'DAV:', 'name' => "getcontenttype", 'val' => $res["FILE"]["CONTENT_TYPE"]); $info["props"][] = array('ns' => 'DAV:', 'name' => "getcontentlength", 'val' => $res["FILE"]["FILE_SIZE"]); $info["props"][] = array('ns' => 'DAV:', 'name' => "isreadonly", 'val' => $res["PERMISSION"] >= "W" ? "false" : "true"); $info["props"][] = array('ns' => 'DAV:', 'name' => "ishidden", 'val' => $res["ACTIVE"] == "Y" ? "false" : "true"); $info["props"][] = array('ns' => 'DAV:', 'name' => "iscollection", 'val' => 0); $info["props"][] = array('ns' => 'DAV:', 'name' => "resourcetype", 'val' => ''); // required by RFC && LibreOffice $info["props"][] = $this->_get_lock_prop(); } if ($this->InTrash($res)) { if ($this->workflow != "bizproc") { $res["SHOW"]["EDIT"] = "N"; $res["SHOW"]["LOCK"] = "N"; $res["SHOW"]["UNLOCK"] = "N"; $bAdmin = false; if ($GLOBALS['USER']->CanDoOperation('webdav_change_settings')) { $bAdmin = true; } elseif ($this->e_rights && isset($res['E_RIGHTS']['element_rights_edit'])) { $bAdmin = true; } elseif (!$this->e_rights && $this->permission > "W") { $bAdmin = true; } $res["SHOW"]["DELETE"] = $bAdmin ? "Y" : "N"; $res["SHOW"]["UNDELETE"] = $bAdmin ? "Y" : "N"; } } if ($this->_parse_webdav_info($res)) { if (is_array($res["PROPS"])) { foreach ($res["PROPS"] as $ns_name => $ns_props) { foreach ($ns_props as $prop_name => $prop_val) { if (is_scalar($prop_val)) { if ($_SERVER['REQUEST_METHOD'] == 'PROPFIND') { $info["props"][] = CWebDavBase::_mkprop($ns_name, $prop_name, $prop_val); } } } } } } return $info; }
/* ############################################## # Bitrix: SiteManager # # Copyright (c) 2002 Bitrix # # http://www.bitrix.ru # # mailto:admin@bitrix.ru # ############################################## */ define("STOP_STATISTICS", "Y"); require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php"; require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/workflow/prolog.php"; require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/workflow/include.php"; $fname = $_REQUEST["fname"]; if ($APPLICATION->GetGroupRight("workflow") >= "R") { session_write_close(); $src = CWorkflow::GetFileContent($did, $fname, $wf_path, $site); $ext = strtolower(GetFileExtension($fname)); $arrExt = explode(",", strtolower(CFile::GetImageExtensions())); if (in_array($ext, $arrExt)) { if ($ext == "jpg") { $ext = "jpeg"; } header("Content-type: image/" . $ext); header("Cache-Control: no-cache, must-revalidate, post-check=0, pre-check=0"); header("Expires: 0"); header("Pragma: public"); echo $src; die; } echo TxtToHtml($src); }
$STATUS_PERMISSION = 2; else $STATUS_PERMISSION = CIBlockElement::WF_GetStatusPermission($arRes["WF_STATUS_ID"]); $intMinPerm = 2; $arUnLock = Array( "ICON" => "unlock", "TEXT" => GetMessage("IBLIST_A_UNLOCK"), "TITLE" => GetMessage("IBLIST_A_UNLOCK_ALT"), "ACTION" => "if(confirm('".GetMessageJS("IBLIST_A_UNLOCK_CONFIRM")."')) ".$lAdmin->ActionDoGroup($f_TYPE.$arRes_orig['ID'], "unlock", $sThisSectionUrl), ); if ($arRes_orig['LOCK_STATUS']=="red") { if (CWorkflow::IsAdmin()) $arActions[] = $arUnLock; } else { /* * yellow unlock * edit * copy * history * view (?) * edit_orig (?) * delete */ if ( CIBlockElementRights::UserHasRightTo($IBLOCK_ID, $f_ID, "element_edit")
// 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)) {