if ($ID > 0 && $WF == "Y") { // get ID of the last record in workflow $WF_ID = CIBlockElement::WF_GetLast($ID); // check for edit permissions $STATUS_ID = CIBlockElement::WF_GetCurrentStatus($WF_ID, $STATUS_TITLE); $STATUS_PERMISSION = CIBlockElement::WF_GetStatusPermission($STATUS_ID); if ($STATUS_ID > 1 && $STATUS_PERMISSION < 2) { $error = new _CIBlockError(1, "ACCESS_DENIED", GetMessage("IBLOCK_ACCESS_DENIED_STATUS")); break; } elseif ($STATUS_ID == 1) { $WF_ID = $ID; $STATUS_ID = CIBlockElement::WF_GetCurrentStatus($WF_ID, $STATUS_TITLE); $STATUS_PERMISSION = CIBlockElement::WF_GetStatusPermission($STATUS_ID); } // check if document is locked if (CIBlockElement::WF_IsLocked($ID, $locked_by, $date_lock)) { if ($locked_by > 0) { $by = "ID"; $order = "ASC"; $rsUser = CUser::GetList($by, $order, array("ID_EQUAL_EXACT" => $locked_by)); if ($arUser = $rsUser->GetNext()) { $locked_by = rtrim("[" . $arUser["ID"] . "] (" . $arUser["LOGIN"] . ") " . $arUser["NAME"] . " " . $arUser["LAST_NAME"]); } } $error = new _CIBlockError(2, "BLOCKED", GetMessage("IBLOCK_DOCUMENT_LOCKED", array("#ID#" => $locked_by, "#DATE#" => $date_lock))); break; } } elseif ($bBizproc) { $arDocumentStates = CBPDocument::GetDocumentStates(array(MODULE_ID, ENTITY, DOCUMENT_TYPE), $ID > 0 ? array(MODULE_ID, ENTITY, $ID) : null, "Y"); $arCurrentUserGroups = $USER->GetUserGroupArray(); if ($ID > 0 && is_array($arElement)) {
); $canRead = false; } if (!$canWrite && !$canRead) { $error = new _CIBlockError(1, "ACCESS_DENIED", GetMessage("IBLOCK_ACCESS_DENIED_STATUS")); $errorTriger = true; } } } $denyAutosave = false; if ($bWorkflow) { $denyAutosave = CIBlockElement::WF_IsLocked($ID, $locked_by1, $date_lock1); } else { $denyAutosave = ($view=="Y") || ( (($ID <= 0) || $bCopy) && !CIBlockSectionRights::UserHasRightTo($IBLOCK_ID, $MENU_SECTION_ID, "section_element_bind") ) || ( (($ID > 0) && !$bCopy) && !CIBlockElementRights::UserHasRightTo($IBLOCK_ID, $ID, "element_edit") ) || ( $bBizproc && !$canWrite
function IsLocked($ID, $IBLOCK_ID, &$params) { $params = array("locked_by" => 0, "date_lock" => ""); $bLocked = true; if ($ID <= 0 || $IBLOCK_ID <= 0) { $bLocked = false; } elseif (!CIBlockElement::WF_IsLocked($ID, $locked_by, $date_lock)) { $bLocked = false; } elseif (intVal($locked_by) == $GLOBALS["USER"]->GetID()) { $bLocked = false; } elseif (IsModuleInstalled("workflow")) { if (CModule::IncludeModule("workflow") && CIBlock::GetArrayByID($IBLOCK_ID, "WORKFLOW") != "N") { $bLocked = CWorkflow::IsAdmin() ? false : true; } } $db_res = CUser::GetByID($locked_by); if ($db_res && ($arUser = $db_res->GetNext())) { $locked_by = '[' . $arUser["ID"] . '] ' . trim($arUser["LAST_NAME"] . " " . $arUser["NAME"]); } $params = array("locked_by" => $locked_by, "date_lock" => $date_lock); return $bLocked; }