本文整理汇总了PHP中CBPDocument::GetAllowableOperations方法的典型用法代码示例。如果您正苦于以下问题:PHP CBPDocument::GetAllowableOperations方法的具体用法?PHP CBPDocument::GetAllowableOperations怎么用?PHP CBPDocument::GetAllowableOperations使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CBPDocument
的用法示例。
在下文中一共展示了CBPDocument::GetAllowableOperations方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: CanUserOperateDocumentType
function CanUserOperateDocumentType($operation, $userId, $documentType, $arParameters = array())
{
$documentType = trim($documentType);
if (strlen($documentType) <= 0) {
return false;
}
$arParameters["IBlockId"] = intval(substr($documentType, strlen("iblock_")));
if (!array_key_exists("IBlockRightsMode", $arParameters)) {
$arParameters["IBlockRightsMode"] = CIBlock::GetArrayByID($arParameters["IBlockId"], "RIGHTS_MODE");
}
if ($arParameters["IBlockRightsMode"] === "E") {
if ($operation === CBPCanUserOperateOperation::CreateWorkflow) {
return CIBlockRights::UserHasRightTo($arParameters["IBlockId"], $arParameters["IBlockId"], "iblock_rights_edit");
} elseif ($operation === CBPCanUserOperateOperation::WriteDocument) {
return CIBlockRights::UserHasRightTo($arParameters["IBlockId"], $arParameters["IBlockId"], "section_element_bind");
} elseif ($operation === CBPCanUserOperateOperation::ViewWorkflow || $operation === CBPCanUserOperateOperation::StartWorkflow) {
if (!array_key_exists("WorkflowId", $arParameters)) {
return false;
}
if ($operation === CBPCanUserOperateOperation::ViewWorkflow && !CIBlockRights::UserHasRightTo($arParameters["IBlockId"], $arParameters["IBlockId"], "element_read")) {
return false;
}
if ($operation === CBPCanUserOperateOperation::StartWorkflow && !CIBlockRights::UserHasRightTo($arParameters["IBlockId"], $arParameters["IBlockId"], "section_element_bind")) {
return false;
}
$userId = intval($userId);
if (!array_key_exists("AllUserGroups", $arParameters)) {
if (!array_key_exists("UserGroups", $arParameters)) {
$arParameters["UserGroups"] = CUser::GetUserGroup($userId);
}
$arParameters["AllUserGroups"] = $arParameters["UserGroups"];
$arParameters["AllUserGroups"][] = "Author";
}
if (!array_key_exists("DocumentStates", $arParameters)) {
if ($operation === CBPCanUserOperateOperation::StartWorkflow) {
$arParameters["DocumentStates"] = CBPWorkflowTemplateLoader::GetDocumentTypeStates(array("iblock", "CIBlockDocument", "iblock_" . $arParameters["IBlockId"]));
} else {
$arParameters["DocumentStates"] = CBPDocument::GetDocumentStates(array("iblock", "CIBlockDocument", "iblock_" . $arParameters["IBlockId"]), null);
}
}
if (array_key_exists($arParameters["WorkflowId"], $arParameters["DocumentStates"])) {
$arParameters["DocumentStates"] = array($arParameters["WorkflowId"] => $arParameters["DocumentStates"][$arParameters["WorkflowId"]]);
} else {
return false;
}
$arAllowableOperations = CBPDocument::GetAllowableOperations($userId, $arParameters["AllUserGroups"], $arParameters["DocumentStates"]);
if (!is_array($arAllowableOperations)) {
return false;
}
if ($operation === CBPCanUserOperateOperation::ViewWorkflow && in_array("read", $arAllowableOperations) || $operation === CBPCanUserOperateOperation::StartWorkflow && in_array("write", $arAllowableOperations)) {
return true;
}
$chop = $operation === CBPCanUserOperateOperation::ViewWorkflow ? "element_read" : "section_element_bind";
foreach ($arAllowableOperations as $op) {
$ar = CTask::GetOperations($op, true);
if (in_array($chop, $ar)) {
return true;
}
}
}
return false;
}
if (!array_key_exists("IBlockPermission", $arParameters)) {
if (CModule::IncludeModule('lists')) {
$arParameters["IBlockPermission"] = CLists::GetIBlockPermission($arParameters["IBlockId"], $userId);
} else {
$arParameters["IBlockPermission"] = CIBlock::GetPermission($arParameters["IBlockId"], $userId);
}
}
if ($arParameters["IBlockPermission"] <= "R") {
return false;
} elseif ($arParameters["IBlockPermission"] >= "W") {
return true;
}
$userId = intval($userId);
if (!array_key_exists("AllUserGroups", $arParameters)) {
if (!array_key_exists("UserGroups", $arParameters)) {
$arParameters["UserGroups"] = CUser::GetUserGroup($userId);
}
$arParameters["AllUserGroups"] = $arParameters["UserGroups"];
$arParameters["AllUserGroups"][] = "Author";
}
if (!array_key_exists("DocumentStates", $arParameters)) {
$arParameters["DocumentStates"] = CBPDocument::GetDocumentStates(array("iblock", "CIBlockDocument", "iblock_" . $arParameters["IBlockId"]), null);
}
if (array_key_exists("WorkflowId", $arParameters)) {
if (array_key_exists($arParameters["WorkflowId"], $arParameters["DocumentStates"])) {
$arParameters["DocumentStates"] = array($arParameters["WorkflowId"] => $arParameters["DocumentStates"][$arParameters["WorkflowId"]]);
} else {
return false;
}
}
$arAllowableOperations = CBPDocument::GetAllowableOperations($userId, $arParameters["AllUserGroups"], $arParameters["DocumentStates"]);
if (!is_array($arAllowableOperations)) {
return false;
}
$r = false;
switch ($operation) {
case CBPCanUserOperateOperation::ViewWorkflow:
$r = in_array("read", $arAllowableOperations);
//.........这里部分代码省略.........
示例2: CanUserOperateDocumentType
function CanUserOperateDocumentType($operation, $userId, $documentType, $arParameters = array())
{
$documentType = trim($documentType);
if (strlen($documentType) <= 0) {
return false;
}
$userId = intval($userId);
if (array_key_exists("UserIsAdmin", $arParameters)) {
if ($arParameters["UserIsAdmin"] === true) {
return true;
}
} else {
$arGroups = CUser::GetUserGroup($userId);
if (in_array(1, $arGroups)) {
return true;
}
}
if (!array_key_exists("AllUserGroups", $arParameters)) {
if (!array_key_exists("UserGroups", $arParameters)) {
$arParameters["UserGroups"] = CUser::GetUserGroup($userId);
}
$arParameters["AllUserGroups"] = $arParameters["UserGroups"];
$arParameters["AllUserGroups"][] = "author";
}
if (!array_key_exists("DocumentStates", $arParameters)) {
$arParameters["DocumentStates"] = CBPDocument::GetDocumentStates(array("bizproc", "CBPVirtualDocument", $documentType), null);
}
if (array_key_exists("WorkflowId", $arParameters)) {
if (array_key_exists($arParameters["WorkflowId"], $arParameters["DocumentStates"])) {
$arParameters["DocumentStates"] = array($arParameters["WorkflowId"] => $arParameters["DocumentStates"][$arParameters["WorkflowId"]]);
} else {
return false;
}
}
$arAllowableOperations = CBPDocument::GetAllowableOperations($userId, $arParameters["AllUserGroups"], $arParameters["DocumentStates"]);
// $arAllowableOperations == null - workflow is not a statemachine
// $arAllowableOperations == array() - no allowable operations
// $arAllowableOperations == array("read", ...) - allowable operations list
if (!is_array($arAllowableOperations) && $operation != 4) {
return true;
}
if ($operation == 4) {
return true;
}
$r = false;
switch ($operation) {
case 0:
// DOCUMENT_OPERATION_VIEW_WORKFLOW
$r = false;
break;
case 1:
// DOCUMENT_OPERATION_START_WORKFLOW
$r = in_array("create", $arAllowableOperations);
break;
case 4:
// DOCUMENT_OPERATION_CREATE_WORKFLOW
$r = false;
break;
case 2:
// DOCUMENT_OPERATION_WRITE_DOCUMENT
$r = in_array("create", $arAllowableOperations);
break;
case 3:
// DOCUMENT_OPERATION_READ_DOCUMENT
$r = false;
break;
default:
$r = false;
}
return $r;
}
示例3: htmlspecialcharsbx
if (intval($arBlock["PICTURE"]) <= 0) {
$arBlock["PICTURE"] = "/bitrix/images/bizproc/vd_bp.jpg";
}
$arMessagesTmp = CIBlock::GetMessages($arBlock["ID"]);
$arBlock["CreateTitle"] = htmlspecialcharsbx(is_array($arMessagesTmp) && array_key_exists("ELEMENT_ADD", $arMessagesTmp) ? $arMessagesTmp["ELEMENT_ADD"] : "");
$workflowTemplateId = 0;
$db = CBPWorkflowTemplateLoader::GetList(array(), array("DOCUMENT_TYPE" => array("bizproc", "CBPVirtualDocument", "type_" . $arBlock["ID"])), false, false, array("ID"));
if ($ar = $db->Fetch()) {
$workflowTemplateId = intval($ar["ID"]);
}
if ($workflowTemplateId > 0) {
$arWorkflowTemplate = CBPWorkflowTemplateLoader::GetTemplateState($workflowTemplateId);
if (!is_array($arWorkflowTemplate["STATE_PERMISSIONS"]) || count($arWorkflowTemplate["STATE_PERMISSIONS"]) <= 0) {
$arWorkflowTemplate["STATE_PERMISSIONS"]["create"] = array("author");
}
$arAllowableOperations = CBPDocument::GetAllowableOperations($GLOBALS["USER"]->GetID(), $GLOBALS["USER"]->GetUserGroupArray(), array($arWorkflowTemplate));
$arBlock["START_URL"] = "";
if ($arResult["AdminAccess"] || (is_array($arAllowableOperations) && in_array("create", $arAllowableOperations) || is_array($arWorkflowTemplate["STATE_PERMISSIONS"]["create"]) && in_array("author", $arWorkflowTemplate["STATE_PERMISSIONS"]["create"]))) {
$arBlock["START_URL"] = CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_START"], array("block_id" => $arBlock["ID"]));
}
}
$arBlock["DELETE_URL"] = "";
if ($arResult["AdminAccess"]) {
$arBlock["EDIT_URL"] = CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_EDIT"], array("block_id" => $arBlock["ID"]));
$arBlock["DELETE_URL"] = CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_INDEX"], array());
$arBlock["DELETE_URL"] .= strpos($arBlock["DELETE_URL"], "?") === false ? "?" : "&";
$arBlock["DELETE_URL"] .= "delete_block_id=" . $arBlock["ID"] . "&" . bitrix_sessid_get();
}
$arResult["Blocks"][] = $arBlock;
}
}
示例4: CanUserOperateDocumentType
/**
* Метод проверяет права на выполнение операций над документами заданного типа. Проверяются операции 4 - право изменять шаблоны рабочий потоков для данного типа документа.
*
* @param int $operation - операция.
* @param int $userId - код пользователя, для которого проверяется право на выполнение операции.
* @param string $documentId - код типа документа, к которому применяется операция.
* @param array $arParameters - ассициативный массив вспомогательных параметров. Используется для того, чтобы не рассчитывать заново те вычисляемые значения, которые уже известны на момент вызова метода. Стандартными являются ключи массива DocumentStates - массив состояний рабочих потоков данного документа, WorkflowId - код рабочего потока (если требуется проверить операцию на одном рабочем потоке). Массив может быть дополнен другими произвольными ключами.
* @return bool
*/
function CanUserOperateDocumentType($operation, $userId, $documentType, $arParameters = array())
{
$documentType = trim($documentType);
if (strlen($documentType) <= 0) {
return false;
}
if ($storage = self::needProxyToDiskByDocType($documentType)) {
return self::proxyToDisk(__FUNCTION__, array($operation, $userId, \Bitrix\Disk\BizProcDocumentCompatible::generateDocumentType($storage->getId()), $arParameters));
}
$userId = intval($userId);
global $USER;
// Если пользователь является администратором модуля соц. сети, то возвращаем true
if ($USER->IsAuthorized() && $USER->GetID() == $userId && CSocNetUser::IsCurrentUserModuleAdmin()) {
return true;
}
$res = explode("_", $documentType);
if (count($res) != 4) {
return false;
}
$arParameters["IBlockId"] = intval($res[1]);
$arParameters["OwnerType"] = $res[2];
$arParameters["OwnerId"] = intval($res[3]);
// Если нет необходимых параметров, то возвращаем false
if (!in_array($arParameters["OwnerType"], array("user", "group")) || $arParameters["OwnerId"] <= 0 || $arParameters["IBlockId"] <= 0) {
return false;
} elseif ($arParameters["OwnerType"] == "user" && $arParameters["OwnerId"] == $userId) {
return true;
}
// Если нам явно не сказали, то узнаем права пользователя на хранилище
if (!array_key_exists("IBlockPermission", $arParameters)) {
$res = CIBlockWebdavSocnet::GetUserMaxPermission($arParameters["OwnerType"], $arParameters["OwnerId"], $userId, $arParameters["IBlockId"]);
$arParameters["IBlockPermission"] = $res["PERMISSION"];
}
if ($arParameters["IBlockPermission"] < "R") {
return false;
} elseif ($arParameters["IBlockPermission"] >= "W") {
return true;
}
// Если мы тут, то инфоблочные права равны U
// Если нам явно не сказали, то узнаем группы пользователя
if (!array_key_exists("AllUserGroups", $arParameters)) {
$arParameters["AllUserGroups"] = CIBlockDocumentWebdavSocnet::GetUserGroups($documentType, null, $userId);
}
// Если нам явно не сказали, то узнаем текущие статусы документа
if (!array_key_exists("DocumentStates", $arParameters)) {
$arParameters["DocumentStates"] = CBPDocument::GetDocumentStates(array("webdav", "CIBlockDocumentWebdavSocnet", "x"), null);
}
// Если нужно проверить только для одного рабочего потока
if (array_key_exists("WorkflowId", $arParameters)) {
if (array_key_exists($arParameters["WorkflowId"], $arParameters["DocumentStates"])) {
$arParameters["DocumentStates"] = array($arParameters["WorkflowId"] => $arParameters["DocumentStates"][$arParameters["WorkflowId"]]);
} else {
return false;
}
}
$arAllowableOperations = CBPDocument::GetAllowableOperations($userId, $arParameters["AllUserGroups"], $arParameters["DocumentStates"]);
// $arAllowableOperations == null - поток не является автоматом
// $arAllowableOperations == array() - в автомате нет допустимых операций
// $arAllowableOperations == array("read", ...) - допустимые операции
if (!is_array($arAllowableOperations)) {
return false;
}
$r = false;
switch ($operation) {
case CBPCanUserOperateOperation::ViewWorkflow:
$r = false;
break;
case CBPCanUserOperateOperation::StartWorkflow:
$r = false;
break;
case CBPCanUserOperateOperation::CreateWorkflow:
$r = in_array("write", $arAllowableOperations);
break;
case CBPCanUserOperateOperation::WriteDocument:
$r = in_array("write", $arAllowableOperations);
break;
case CBPCanUserOperateOperation::ReadDocument:
$r = false;
break;
default:
$r = false;
}
return $r;
}
示例5: CanUserOperateDocumentType
/**
* Метод проверяет права на выполнение операций над документами заданного
* типа. Проверяются операции 4 - право изменять шаблоны рабочий потоков для
* данного типа документа.
*
* @param int $operation - операция.
* @param int $userId - код пользователя, для которого проверяется право на выполнение операции.
* @param string $documentId - код типа документа, к которому применяется операция.
* @param array $arParameters - ассициативный массив вспомогательных
* параметров. Используется для того, чтобы не рассчитывать заново те
* вычисляемые значения, которые уже известны на момент вызова метода.
* Стандартными являются ключи массива DocumentStates - массив состояний
* рабочих потоков данного документа, WorkflowId - код рабочего потока (если
* требуется проверить операцию на одном рабочем потоке). Массив может быть
* дополнен другими произвольными ключами.
* @return bool
*/
function CanUserOperateDocumentType($operation, $userId, $documentType, $arParameters = array())
{
$documentType = trim($documentType);
if (strlen($documentType) <= 0) {
return false;
}
if ($storage = self::needProxyToDiskByDocType($documentType)) {
return self::proxyToDisk(__FUNCTION__, array($operation, $userId, \Bitrix\Disk\BizProcDocumentCompatible::generateDocumentType($storage->getId()), $arParameters));
}
$iblockId = intval(substr($documentType, strlen("iblock_")));
if ($iblockId <= 0) {
throw new CBPArgumentOutOfRangeException("documentType", $documentType);
}
$arParameters["IBlockId"] = intval(substr($documentType, strlen("iblock_")));
// Если нам явно не сказали, то узнаем инфоблочные права
if (!array_key_exists("IBlockPermission", $arParameters)) {
if (isset($arParameters['SectionId'])) {
$arParameters['SectionId'] = intval($arParameters['SectionId']);
$arParameters["IBlockPermission"] = CIBlockDocumentWebdav::GetIBRights('SECTION', $arParameters["IBlockId"], $arParameters['SectionId']);
} else {
$arParameters["IBlockPermission"] = CIBlockDocumentWebdav::GetIBRights('IBLOCK', $arParameters["IBlockId"]);
}
}
if (CWebDavIblock::CheckRight($arParameters["IBlockPermission"], "element_read") < "R") {
return false;
} elseif (CWebDavIblock::CheckRight($arParameters["IBlockPermission"], "element_edit") >= "W") {
return true;
}
// Если мы тут, то инфоблочные права равны U
// Если нам явно не сказали, то узнаем группы пользователя
$userId = intval($userId);
if (!array_key_exists("AllUserGroups", $arParameters)) {
if (!array_key_exists("UserGroups", $arParameters)) {
$arParameters["UserGroups"] = CUser::GetUserGroup($userId);
}
$arParameters["AllUserGroups"] = $arParameters["UserGroups"];
$arParameters["AllUserGroups"][] = "Author";
}
// Если нам явно не сказали, то узнаем текущие статусы документа
if (!array_key_exists("DocumentStates", $arParameters)) {
$arParameters["DocumentStates"] = CBPDocument::GetDocumentStates(array("webdav", "CIBlockDocumentWebdav", "iblock_" . $arParameters["IBlockId"]), null);
}
// Если нужно проверить только для одного рабочего потока
if (array_key_exists("WorkflowId", $arParameters) && !empty($arParameters["WorkflowId"])) {
if (array_key_exists($arParameters["WorkflowId"], $arParameters["DocumentStates"])) {
$arParameters["DocumentStates"] = array($arParameters["WorkflowId"] => $arParameters["DocumentStates"][$arParameters["WorkflowId"]]);
} else {
return false;
}
}
$arAllowableOperations = CBPDocument::GetAllowableOperations($userId, $arParameters["AllUserGroups"], $arParameters["DocumentStates"]);
// $arAllowableOperations == null - поток не является автоматом
// $arAllowableOperations == array() - в автомате нет допустимых операций
// $arAllowableOperations == array("read", ...) - допустимые операции
if (!is_array($arAllowableOperations)) {
return false;
}
$r = false;
switch ($operation) {
case CBPCanUserOperateOperation::ViewWorkflow:
$r = CWebDavIblock::CheckRight($arParameters["IBlockPermission"], "element_read") > "U" || in_array("read", $arAllowableOperations);
break;
case CBPCanUserOperateOperation::StartWorkflow:
// право на запуск бизнес-процесса есть у имеющих право "W",
$r = CWebDavIblock::CheckRight($arParameters["IBlockPermission"], "element_bizproc_start") > "U" || in_array("write", $arAllowableOperations);
// если задан конкретный шаблон потока, то проверяем его
if ($r && CWebDavIblock::CheckRight($arParameters["IBlockPermission"], "element_bizproc_start") <= "U" && $arParameters["WorkflowTemplateId"] > 0) {
// Выбираем все шаблоны для того, чтобы определить тип шаблона
// так как для последовательных процессов мы даем право на запуск
// бизнес-процесса без проверки прав на запись.
if (!array_key_exists("WorkflowTemplateList" . $arParameters["IBlockId"], $GLOBALS["WEBDAV"]["CACHE"])) {
if (array_key_exists("WorkflowTemplateList", $arParameters)) {
$GLOBALS["WEBDAV"]["CACHE"]["WorkflowTemplateList" . $arParameters["IBlockId"]] = array();
foreach ($arParameters["WorkflowTemplateList"] as $res) {
$GLOBALS["WEBDAV"]["CACHE"]["WorkflowTemplateList" . $arParameters["IBlockId"]][$res["ID"]] = $res;
}
} else {
$res = array();
$db_res = CBPWorkflowTemplateLoader::GetList(array(), array("DOCUMENT_TYPE" => array("webdav", "CIBlockDocumentWebdav", "iblock_" . $arParameters["IBlockId"]), "ACTIVE" => "Y"), false, false, array("ID", "NAME", "DESCRIPTION", "TEMPLATE", "PARAMETERS"));
while ($arWorkflowTemplate = $db_res->GetNext()) {
$res[$arWorkflowTemplate["ID"]] = $arWorkflowTemplate;
}
$GLOBALS["WEBDAV"]["CACHE"]["WorkflowTemplateList" . $arParameters["IBlockId"]] = $res;
//.........这里部分代码省略.........
示例6: CanUserOperateDocumentType
/**
* Метод проверяет права на выполнение операций над документами заданного типа. Проверяются операции 4 - право изменять шаблоны рабочий потоков для данного типа документа.
*
* @param int $operation - операция.
* @param int $userId - код пользователя, для которого проверяется право на выполнение операции.
* @param string $documentId - код типа документа, к которому применяется операция.
* @param array $arParameters - ассициативный массив вспомогательных параметров. Используется для того, чтобы не рассчитывать заново те вычисляемые значения, которые уже известны на момент вызова метода. Стандартными являются ключи массива DocumentStates - массив состояний рабочих потоков данного документа, WorkflowId - код рабочего потока (если требуется проверить операцию на одном рабочем потоке). Массив может быть дополнен другими произвольными ключами.
* @return bool
*/
public function CanUserOperateDocumentType($operation, $userId, $documentType, $arParameters = array())
{
$documentType = trim($documentType);
if (strlen($documentType) <= 0) {
return false;
}
$iblockId = COption::GetOptionInt("intranet", "iblock_tasks", 0);
if ($iblockId <= 0) {
return false;
}
$userId = intval($userId);
global $USER;
if ($USER->IsAuthorized() && $USER->GetID() == $userId && CSocNetUser::IsCurrentUserModuleAdmin()) {
return true;
}
$arDt = explode("_", $documentType);
if (count($arDt) != 2) {
return false;
}
$taskType = $arDt[0];
$ownerId = intval($arDt[1]);
if (!in_array($taskType, array("user", "group")) || $ownerId <= 0) {
return false;
}
if (!array_key_exists("AllUserGroups", $arParameters)) {
if (!array_key_exists("UserGroups", $arParameters)) {
$arParameters["UserGroups"] = array();
if ($taskType == "user") {
// $arParameters["UserGroups"][] = SONET_RELATIONS_TYPE_ALL;
// if (CSocNetUserRelations::IsFriends($userId, $ownerId))
// $arParameters["UserGroups"][] = SONET_RELATIONS_TYPE_FRIENDS;
// elseif (CSocNetUserRelations::IsFriends2($userId, $ownerId))
// $arParameters["UserGroups"][] = SONET_RELATIONS_TYPE_FRIENDS2;
} else {
$arParameters["UserGroups"][] = SONET_ROLES_ALL;
if ($GLOBALS["USER"]->IsAuthorized()) {
$arParameters["UserGroups"][] = SONET_ROLES_AUTHORIZED;
}
$r = CSocNetUserToGroup::GetUserRole($userId, $ownerId);
if (strlen($r) > 0) {
$arParameters["UserGroups"][] = $r;
}
}
}
$arParameters["AllUserGroups"] = $arParameters["UserGroups"];
$arParameters["AllUserGroups"][] = "author";
}
if (!array_key_exists("DocumentStates", $arParameters)) {
$arParameters["DocumentStates"] = CBPDocument::GetDocumentStates(array("intranet", "CIntranetTasksDocument", "x" . $iblockId), null);
}
// Если нужно проверить только для одного рабочего потока
if (array_key_exists("WorkflowId", $arParameters)) {
if (array_key_exists($arParameters["WorkflowId"], $arParameters["DocumentStates"])) {
$arParameters["DocumentStates"] = array($arParameters["WorkflowId"] => $arParameters["DocumentStates"][$arParameters["WorkflowId"]]);
} else {
return false;
}
}
$arAllowableOperations = CBPDocument::GetAllowableOperations($userId, $arParameters["AllUserGroups"], $arParameters["DocumentStates"]);
// $arAllowableOperations == null - поток не является автоматом
// $arAllowableOperations == array() - в автомате нет допустимых операций
// $arAllowableOperations == array("read", ...) - допустимые операции
if (!is_array($arAllowableOperations)) {
return false;
}
$r = false;
switch ($operation) {
case INTASK_DOCUMENT_OPERATION_VIEW_WORKFLOW:
$r = false;
break;
case INTASK_DOCUMENT_OPERATION_START_WORKFLOW:
$r = false;
break;
case INTASK_DOCUMENT_OPERATION_CREATE_WORKFLOW:
$r = false;
break;
case INTASK_DOCUMENT_OPERATION_WRITE_DOCUMENT:
$r = in_array("write", $arAllowableOperations);
break;
case INTASK_DOCUMENT_OPERATION_READ_DOCUMENT:
$r = false;
break;
case INTASK_DOCUMENT_OPERATION_COMMENT_DOCUMENT:
$r = false;
break;
case INTASK_DOCUMENT_OPERATION_DELETE_DOCUMENT:
$r = false;
break;
default:
$r = false;
}
//.........这里部分代码省略.........