public function executeComponent() { $id = $this->getWorkflowId(); $this->arResult = array('NeedAuth' => $this->isAuthorizationNeeded() ? 'Y' : 'N', 'FatalErrorMessage' => '', 'ErrorMessage' => ''); if ($id) { $workflowState = \CBPStateService::getWorkflowState($id); if (!$workflowState) { $this->arResult['FatalErrorMessage'] = Loc::getMessage('BPWFI_WORKFLOW_NOT_FOUND'); } else { $this->arResult['WorkflowState'] = $workflowState; $this->arResult['WorkflowTrack'] = \CBPTrackingService::DumpWorkflow($id); if ($workflowState['STARTED_BY'] && ($photo = $this->getStartedByPhoto($workflowState['STARTED_BY']))) { $this->arResult['startedByPhotoSrc'] = $photo['src']; } $runtime = CBPRuntime::GetRuntime(); $runtime->StartRuntime(); /** * @var CBPDocumentService $documentService */ $documentService = $runtime->GetService('DocumentService'); try { $this->arResult['DOCUMENT_NAME'] = $documentService->getDocumentName($workflowState['DOCUMENT_ID']); $this->arResult['DOCUMENT_ICON'] = $documentService->getDocumentIcon($workflowState['DOCUMENT_ID']); } catch (Main\ArgumentException $e) { $this->arResult['FatalErrorMessage'] = $e->getMessage(); } } } $this->includeComponentTemplate(); if ($this->arParams['SET_TITLE']) { $this->setPageTitle(Loc::getMessage('BPWFI_PAGE_TITLE')); } }
public static function GetDocumentNames($ownerTypeID, $ownerID) { if (!(IsModuleInstalled('bizproc') && CModule::IncludeModule('bizproc'))) { return false; } $ownerTypeID = intval($ownerTypeID); $ownerID = intval($ownerID); $docName = self::ResolveDocumentName($ownerTypeID); if ($docName === '') { return array(); } $ownerTypeName = CCrmOwnerType::ResolveName($ownerTypeID); if ($ownerTypeName === '') { return array(); } /*$arDocumentStates = CBPDocument::GetDocumentStates( array('crm', $docName, $ownerTypeName), array('crm', $docName, $ownerTypeName.'_'.$ownerID) );*/ $arDocumentStates = CBPStateService::GetDocumentStates(array('crm', $docName, $ownerTypeName . '_' . $ownerID)); $result = array(); foreach ($arDocumentStates as $arDocumentState) { if ($arDocumentState['ID'] !== '' && $arDocumentState['TEMPLATE_NAME'] !== '') { $result[] = $arDocumentState['TEMPLATE_NAME']; } } return $result; }
protected function getWorkflowStateInfo() { if (!empty($this->arParams['~WORKFLOW_STATE_INFO']) && is_array($this->arParams['~WORKFLOW_STATE_INFO'])) { return $this->arParams['~WORKFLOW_STATE_INFO']; } return \CBPStateService::getWorkflowStateInfo($this->getWorkflowId()); }
public function OnAfterIBlockElementDelete($fields) { $errors = array(); if (Loader::includeModule('socialnetwork')) { $states = CBPStateService::getDocumentStates(array('lists', get_called_class(), $fields['ID'])); foreach ($states as $workflowId => $state) { $sourceId = CBPStateService::getWorkflowIntegerId($workflowId); $resultQuery = CSocNetLog::getList(array(), array('EVENT_ID' => 'lists_new_element', 'SOURCE_ID' => $sourceId), false, false, array('ID')); while ($log = $resultQuery->fetch()) { CSocNetLog::delete($log['ID']); } } } CBPDocument::onDocumentDelete(array('lists', get_called_class(), $fields['ID']), $errors); }
protected function processActionPerformActionBp() { if (!Loader::includeModule('bizproc')) { $this->errorCollection->add(array(new Error(Loc::getMessage('LISTS_LAC_MODULE_NOT_INSTALLED')))); } $this->checkRequiredPostParams(array('iblockTypeId', 'iblockId', 'sectionId', 'workflowId', 'elementId', 'action')); if ($this->request->getPost('iblockTypeId') == COption::getOptionString('lists', 'livefeed_iblock_type_id')) { $this->errorCollection->add(array(new Error(Loc::getMessage('LISTS_LAC_UNKNOWN_ERROR')))); } if ($this->errorCollection->hasErrors()) { $this->sendJsonErrorResponse(); } $this->iblockTypeId = $this->request->getPost('iblockTypeId'); $this->iblockId = $this->request->getPost('iblockId'); $this->sectionId = $this->request->getPost('sectionId'); $workflowId = $this->request->getPost('workflowId'); $elementId = $this->request->getPost('elementId'); $action = $this->request->getPost('action'); $this->documentStates = CBPDocument::getDocumentStates(BizProcDocument::generateDocumentComplexType($this->iblockTypeId, $this->iblockId), BizProcDocument::getDocumentComplexId($this->iblockTypeId, $elementId)); if (isset($this->documentStates[$workflowId]['WORKFLOW_STATUS']) && $this->documentStates[$workflowId]['WORKFLOW_STATUS'] !== null) { $this->terminateWorkflow($workflowId, $elementId); } if ($action == 'delete') { if (CBPDocument::canUserOperateDocument(CBPCanUserOperateOperation::CreateWorkflow, $this->getUser(), BizProcDocument::getDocumentComplexId($this->iblockTypeId, $elementId), array("DocumentStates" => $this->documentStates))) { CBPTaskService::DeleteByWorkflow($workflowId); CBPTrackingService::DeleteByWorkflow($workflowId); CBPStateService::DeleteWorkflow($workflowId); } else { $this->errorCollection->add(array(new Error(Loc::getMessage('LISTS_LAC_ACCESS_DENIED')))); } if ($this->errorCollection->hasErrors()) { $this->sendJsonErrorResponse(); } } $this->sendJsonSuccessResponse(array('message' => Loc::getMessage('LISTS_LAC_MESSAGE_SUCCESS'))); }
} elseif (in_array($action, array("add_comment", "edit_comment", "delete_comment", "file_comment_upload"))) { $log_id = $_REQUEST["log_id"]; if ($arLog = CSocNetLog::GetByID($log_id)) { $log_entity_type = $arLog["ENTITY_TYPE"]; $arListParams = strpos($log_entity_type, "CRM") === 0 && IsModuleInstalled("crm") ? array("IS_CRM" => "Y", "CHECK_CRM_RIGHTS" => "Y") : array("CHECK_RIGHTS" => "Y", "USE_SUBSCRIBE" => "N"); } else { $log_id = 0; } if (intval($log_id) <= 0 || !($rsLog = CSocNetLog::GetList(array(), array("ID" => $log_id), false, false, array(), $arListParams)) || !($arLog = $rsLog->Fetch())) { $arResult["strMessage"] = GetMessage("Log event not found"); } if (!isset($arResult["strMessage"])) { $arEntityXMLID = array("tasks" => "TASK", "forum" => "FORUM", "photo_photo" => "PHOTO", "sonet" => "SOCNET", "lists_new_element" => array("WF", "WF", "FORUM|COMMENT")); if ($arLog["ENTITY_TYPE"] == "CRMACTIVITY" && CModule::IncludeModule('crm') && ($arActivity = CCrmActivity::GetByID($arLog["ENTITY_ID"], false)) && $arActivity["TYPE_ID"] == CCrmActivityType::Task) { $entity_xml_id = "TASK_" . $arActivity["ASSOCIATED_ENTITY_ID"]; } elseif ($arLog["ENTITY_TYPE"] == "WF" && $arLog["SOURCE_ID"] > 0 && CModule::IncludeModule('bizproc') && ($workflowId = \CBPStateService::getWorkflowByIntegerId($arLog["SOURCE_ID"]))) { $entity_xml_id = "WF_" . $workflowId; } else { $entity_xml_id = array_key_exists($arLog["EVENT_ID"], $arEntityXMLID) && $arLog["SOURCE_ID"] > 0 ? $arEntityXMLID[$arLog["EVENT_ID"]] . "_" . $arLog["SOURCE_ID"] : strtoupper($arLog["EVENT_ID"]) . "_" . $arLog["ID"]; } $arCommentEvent = CSocNetLogTools::FindLogCommentEventByLogEventID($arLog["EVENT_ID"]); if (!$arCommentEvent) { $arResult["strMessage"] = GetMessage("Comment event not found"); } } if (!isset($arResult["strMessage"])) { $feature = CSocNetLogTools::FindFeatureByEventID($arCommentEvent["EVENT_ID"]); if (array_key_exists("OPERATION_ADD", $arCommentEvent) && $arCommentEvent["OPERATION_ADD"] == "log_rights") { $bCanAddComments = CSocNetLogRights::CheckForUser($log_id, $GLOBALS["USER"]->GetID()); } elseif ($feature && array_key_exists("OPERATION_ADD", $arCommentEvent) && strlen($arCommentEvent["OPERATION_ADD"]) > 0) { $bCanAddComments = CSocNetFeaturesPerms::CanPerformOperation($GLOBALS["USER"]->GetID(), $arLog["ENTITY_TYPE"], $arLog["ENTITY_ID"], $feature == "microblog" ? "blog" : $feature, $arCommentEvent["OPERATION_ADD"], $bCurrentUserIsAdmin);
function BeforeIndexSocNet($bxSocNetSearch, $fields) { static $bizprocForumId = false; if (!$bizprocForumId) { $bizprocForumId = intval(COption::GetOptionString('bizproc', 'forum_id')); } if ($fields['ENTITY_TYPE_ID'] == 'FORUM_POST' && intval($fields['PARAM1']) == $bizprocForumId && !empty($fields['PARAM2']) && !empty($bxSocNetSearch->_params["PATH_TO_WORKFLOW"]) && CModule::IncludeModule("forum") && CModule::IncludeModule("bizproc")) { $topic = CForumTopic::GetByID($fields['PARAM2']); if (!empty($topic) && is_array($topic) && !empty($topic["XML_ID"])) { if (preg_match('/^WF_([0-9a-f\\.]+)/', $topic["XML_ID"], $match)) { $workflowId = $match[1]; $state = CBPStateService::GetStateDocumentId($workflowId); if ($state[0] == 'lists' && $state[1] == 'BizprocDocument' && CModule::IncludeModule('iblock') && intval($state[2]) > 0) { $iblockElementQuery = CIBlockElement::GetList(array(), array("ID" => intval($state[2])), false, false, array("ID", "IBLOCK_ID")); if ($iblockElement = $iblockElementQuery->Fetch()) { $listId = $iblockElement["IBLOCK_ID"]; $fields["URL"] = $bxSocNetSearch->Url(str_replace(array("#list_id#", "#workflow_id#"), array($listId, urlencode($workflowId)), $bxSocNetSearch->_params["PATH_TO_WORKFLOW"]), array("MID" => $fields["ENTITY_ID"]), "message" . $fields["ENTITY_ID"]); if (!empty($fields["LID"]) && is_array($fields["LID"])) { foreach ($fields["LID"] as $siteId => $url) { $fields["LID"][$siteId] = $fields["URL"]; } } } } } } } return $fields; }
public function processActionDeleteBizProc() { $this->checkRequiredPostParams(array('fileId', 'idBizProc')); if (!Loader::includeModule("bizproc")) { $this->errorCollection->addOne(new Error(Loc::getMessage('DISK_FILE_VIEW_BIZPROC_LOAD'))); } if ($this->errorCollection->hasErrors()) { $this->sendJsonErrorResponse(); } $fileId = (int) $this->request->getPost('fileId'); /** @var File $file */ $file = File::loadById((int) $fileId); if (!$file) { $this->errorCollection->addOne(new Error(Loc::getMessage('DISK_FILE_VIEW_ERROR_COULD_NOT_FIND_OBJECT'), self::ERROR_COULD_NOT_FIND_OBJECT)); $this->sendJsonErrorResponse(); } $documentData = array('DISK' => array('DOCUMENT_ID' => \Bitrix\Disk\BizProcDocument::getDocumentComplexId($fileId)), 'WEBDAV' => array('DOCUMENT_ID' => \Bitrix\Disk\BizProcDocumentCompatible::getDocumentComplexId($fileId))); $webdavFileId = $file->getXmlId(); if (!empty($webdavFileId)) { $documentData['OLD_FILE_COMMON'] = array('DOCUMENT_ID' => array('webdav', 'CIBlockDocumentWebdav', $webdavFileId)); $documentData['OLD_FILE_GROUP'] = array('DOCUMENT_ID' => array('webdav', 'CIBlockDocumentWebdavSocnet', $webdavFileId)); } $workflowId = $this->request->getPost('idBizProc'); foreach ($documentData as $nameModule => $data) { $availabilityProcess = CBPDocument::GetDocumentState($data['DOCUMENT_ID'], $workflowId); if (!empty($availabilityProcess)) { if (CBPDocument::CanUserOperateDocument(CBPCanUserOperateOperation::CreateWorkflow, $this->getUser()->getId(), $data['DOCUMENT_ID'])) { CBPTrackingService::deleteByWorkflow($workflowId); CBPTaskService::deleteByWorkflow($workflowId); /** @noinspection PhpDynamicAsStaticMethodCallInspection */ CBPStateService::deleteWorkflow($workflowId); } } } $this->sendJsonSuccessResponse(); }
$dbTask = CBPTaskService::GetList(array(), array("ID" => $taskId, "USER_ID" => $userId), false, false, array("ID", "WORKFLOW_ID", "ACTIVITY", "ACTIVITY_NAME", "MODIFIED", "OVERDUE_DATE", "NAME", "DESCRIPTION", "PARAMETERS", "USER_ID", 'STATUS', 'USER_STATUS')); $arTask = $dbTask->GetNext(); } if (!$arTask) { $workflowId = trim($_REQUEST["workflow_id"]); if (strlen($workflowId) > 0) { $dbTask = CBPTaskService::GetList(array(), array("WORKFLOW_ID" => $workflowId, "USER_ID" => $userId), false, false, array("ID", "WORKFLOW_ID", "ACTIVITY", "ACTIVITY_NAME", "MODIFIED", "OVERDUE_DATE", "NAME", "DESCRIPTION", "PARAMETERS", "USER_ID", 'STATUS', 'USER_STATUS')); $arTask = $dbTask->GetNext(); } } if (!$arTask) { require $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_admin_after.php"; $APPLICATION->SetTitle(GetMessage("BPAT_NO_TASK")); CAdminMessage::ShowMessage(GetMessage("BPAT_NO_TASK") . ". "); } else { $arTask["PARAMETERS"]["DOCUMENT_ID"] = CBPStateService::GetStateDocumentId($arTask['WORKFLOW_ID']); $backUrl = "/" . ltrim(trim($_REQUEST["back_url"]), "\\/"); if (strlen($backUrl) <= 0) { $backUrl = "/bitrix/admin/bizproc_task_list.php?lang=" . LANGUAGE_ID; } if (strlen($backUrl) <= 0 && !empty($arTask["PARAMETERS"]["DOCUMENT_ID"])) { $backUrl = CBPDocument::GetDocumentAdminPage($arTask["PARAMETERS"]["DOCUMENT_ID"]); } $backUrl = CHTTP::urlDeleteParams($backUrl, array('mode')); $showType = "Form"; if ($arTask['STATUS'] > CBPTaskStatus::Running || $arTask['USER_STATUS'] > CBPTaskUserStatus::Waiting) { $showType = "Success"; } if ($_SERVER["REQUEST_METHOD"] == "POST" && check_bitrix_sessid()) { if ($_POST["action"] == "doTask") { $arErrorsTmp = array();
</span> </div> <div id="bp-task-tabs-content" class="bp-tab-contents"> <div id="bp-task-tab-1-content" class="bp-tab-content active"> <?php } ?> <?php if (!isset($arParams['IFRAME']) || $arParams['IFRAME'] == 'N') { // A < E < I < M < Q < U < Y // A - NO ACCESS, E - READ, I - ANSWER // M - NEW TOPIC // Q - MODERATE, U - EDIT, Y - FULL_ACCESS $APPLICATION->IncludeComponent("bitrix:forum.comments", "bitrix24", array("FORUM_ID" => CBPHelper::getForumId(), "ENTITY_TYPE" => "WF", "ENTITY_ID" => CBPStateService::getWorkflowIntegerId($arResult["TASK"]['WORKFLOW_ID']), "ENTITY_XML_ID" => "WF_" . $arResult["TASK"]['WORKFLOW_ID'], "PERMISSION" => "Y", "URL_TEMPLATES_PROFILE_VIEW" => "/company/personal/user/#user_id#/", "SHOW_RATING" => "Y", "SHOW_LINK_TO_MESSAGE" => "N", "BIND_VIEWER" => "Y"), false, array('HIDE_ICONS' => 'Y')); } else { ?> <iframe src="/bitrix/components/bitrix/bizproc.task/comments.php?TASK_ID=<?php echo $arResult['TASK']['ID']; ?> &USER_ID=<?php echo $arParams['USER_ID']; ?> &site_id=<?php echo SITE_ID; ?> &sessid=<?php echo bitrix_sessid(); ?>
public static function deleteSocnetLog(array $listWorkflowId) { if (CModule::includeModule('socialnetwork')) { foreach ($listWorkflowId as $workflowId) { $sourceId = CBPStateService::getWorkflowIntegerId($workflowId); $resultQuery = CSocNetLog::getList(array(), array('EVENT_ID' => 'lists_new_element', 'SOURCE_ID' => $sourceId), false, false, array('ID')); while ($log = $resultQuery->fetch()) { CSocNetLog::delete($log['ID']); } } } }
<?php require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_admin_before.php"; require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/bizproc/include.php"; require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/bizproc/prolog.php"; IncludeModuleLangFile(__FILE__); /* $bizprocModulePermissions = $APPLICATION->GetGroupRight("bizproc"); if ($bizprocModulePermissions < "R") $APPLICATION->AuthForm(GetMessage("ACCESS_DENIED")); */ require $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_admin_after.php"; $errorMessage = ""; $ID = trim($_REQUEST["ID"]); $adminMode = strtoupper($_REQUEST["admin_mode"]) == "Y"; $arWorkflowState = CBPStateService::GetWorkflowState($ID); if (!is_array($arWorkflowState) || count($arWorkflowState) <= 0) { $APPLICATION->SetTitle(GetMessage("BPABL_INVALID_WF")); CAdminMessage::ShowMessage(GetMessage("BPABL_INVALID_WF") . ". "); } else { $bCanView = CBPDocument::CanUserOperateDocument(CBPCanUserOperateOperation::ViewWorkflow, $GLOBALS["USER"]->GetID(), $arWorkflowState["DOCUMENT_ID"], array("WorkflowId" => $ID, "DocumentStates" => array($ID => $arWorkflowState), "UserGroups" => $GLOBALS["USER"]->GetUserGroupArray())); if (!$bCanView) { $APPLICATION->SetTitle(GetMessage("BPABL_ERROR")); require $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_admin_after.php"; echo ShowError(GetMessage("BPABL_NO_PERMS")); require $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/epilog_admin.php"; die; } $backUrl = "/" . ltrim(trim($_REQUEST["back_url"]), "\\/"); if (strlen($backUrl) <= 0) { $backUrl = CBPDocument::GetDocumentAdminPage($arWorkflowState["DOCUMENT_ID"]);
if ($arParams[$name] <= 0) { $arParams[$name] = trim($_REQUEST[$nameLower]); } if ($arParams[$name] <= 0) { foreach ($_REQUEST as $key => $value) { if (strtolower($key) == $nameLower) { $arParams[$name] = trim($_REQUEST[$key]); break; } } } } } BPWSInitParam($arParams, "WORKFLOW_ID"); $arResult["NeedAuth"] = "N"; $arResult["FatalErrorMessage"] = ""; $arResult["ErrorMessage"] = ""; global $USER; if (!$USER->IsAuthorized()) { $arResult["NeedAuth"] = "Y"; } elseif (strlen($arParams["WORKFLOW_ID"]) <= 0) { $arResult["FatalErrorMessage"] .= "Не указан код рабочего потока" . ". "; } else { $arResult["WorkflowState"] = CBPStateService::GetWorkflowState($arParams["WORKFLOW_ID"]); if ($arResult["WorkflowState"]) { $arResult["WorkflowTrack"] = CBPTrackingService::DumpWorkflow($arParams["WORKFLOW_ID"]); } else { $arResult["FatalErrorMessage"] .= "Рабочий поток не найден" . ". "; } } $this->IncludeComponentTemplate();
} else { CBPDocument::TerminateWorkflow($_REQUEST["id"], $arParams["DOCUMENT_ID"], $ar); if (count($ar) > 0) { $str = ""; foreach ($ar as $a) { $str .= $a["message"]; } $arError[] = array("id" => "stop_bizproc", "text" => $str); } } } elseif ($_REQUEST["action"] == "del_bizproc") { if ($arParams["DropWorkflowPermission"] != "Y") { $arError[] = array("id" => "access_denied", "text" => GetMessage("BPADH_NO_PERMS")); } else { CBPTrackingService::DeleteByWorkflow($_REQUEST["id"]); CBPStateService::DeleteWorkflow($_REQUEST["id"]); } } elseif ($_SERVER['REQUEST_METHOD'] == "POST" && intval($_REQUEST["bizproc_index"]) > 0) { $arBizProcWorkflowId = array(); $bizprocIndex = intval($_REQUEST["bizproc_index"]); for ($i = 1; $i <= $bizprocIndex; $i++) { $bpId = trim($_REQUEST["bizproc_id_" . $i]); $bpTemplateId = intval($_REQUEST["bizproc_template_id_" . $i]); $bpEvent = trim($_REQUEST["bizproc_event_" . $i]); if (strlen($bpEvent) > 0) { if (strlen($bpId) > 0) { if (!array_key_exists($bpId, $arDocumentStates)) { continue; } } else { if (!array_key_exists($bpTemplateId, $arDocumentStates)) {
function InitializeIBlock($taskType, $ownerId, $forumId) { $iblockId = COption::GetOptionInt("intranet", "iblock_tasks", 0); if ($iblockId <= 0) { return 0; } $forumId = intval($forumId); $arTasksConverted2BP = array(); $keyTasksConverted2BP = $iblockId . "_" . $taskType . ($taskType == "group" ? "_" . $ownerId : ""); global $CACHE_MANAGER; if ($CACHE_MANAGER->Read(2592000, "IntranetTasksConverted2BP")) { $arTasksConverted2BP = $CACHE_MANAGER->Get("IntranetTasksConverted2BP"); if (array_key_exists($keyTasksConverted2BP, $arTasksConverted2BP)) { return $arTasksConverted2BP[$keyTasksConverted2BP]; } } $globalParentSectionId = 0; $dbIBlock = CIBlock::GetList(array(), array("ID" => $iblockId, "ACTIVE" => "Y")); if ($arIBlock = $dbIBlock->Fetch()) { $arIBlockProperties = array(); $dbIBlockProps = CIBlock::GetProperties($iblockId); while ($arIBlockProps = $dbIBlockProps->Fetch()) { $ind = StrLen($arIBlockProps["CODE"]) > 0 ? $arIBlockProps["CODE"] : $arIBlockProps["ID"]; $arIBlockProperties[StrToUpper($ind)] = $arIBlockProps; } $arTasksProps = array("TASKPRIORITY" => array("NAME" => GetMessage("INTI_TASKPRIORITY"), "ACTIVE" => "Y", "SORT" => 100, "CODE" => "TaskPriority", "PROPERTY_TYPE" => "L", "USER_TYPE" => false, "ROW_COUNT" => 1, "COL_COUNT" => 30, "LINK_IBLOCK_ID" => 0, "WITH_DESCRIPTION" => "N", "FILTRABLE" => "Y", "SEARCHABLE" => "Y", "MULTIPLE" => "N", "MULTIPLE_CNT" => 5, "IS_REQUIRED" => "Y", "FILE_TYPE" => "jpg, gif, bmp, png, jpeg", "LIST_TYPE" => "L", "IBLOCK_ID" => $iblockId, "VALUES" => array(array("VALUE" => " " . GetMessage("INTI_TASKPRIORITY_1"), "DEF" => "N", "SORT" => 100, "XML_ID" => "1"), array("VALUE" => " " . GetMessage("INTI_TASKPRIORITY_2"), "DEF" => "Y", "SORT" => 200, "XML_ID" => "2"), array("VALUE" => " " . GetMessage("INTI_TASKPRIORITY_3"), "DEF" => "N", "SORT" => 300, "XML_ID" => "3"))), "TASKCOMPLETE" => array("NAME" => GetMessage("INTI_TASKCOMPLETE"), "ACTIVE" => "Y", "SORT" => 300, "CODE" => "TaskComplete", "PROPERTY_TYPE" => "N", "USER_TYPE" => false, "ROW_COUNT" => 1, "COL_COUNT" => 5, "LINK_IBLOCK_ID" => 0, "WITH_DESCRIPTION" => "N", "FILTRABLE" => "Y", "SEARCHABLE" => "Y", "MULTIPLE" => "N", "MULTIPLE_CNT" => 5, "IS_REQUIRED" => "N", "FILE_TYPE" => "jpg, gif, bmp, png, jpeg", "LIST_TYPE" => "L", "IBLOCK_ID" => $iblockId), "TASKASSIGNEDTO" => array("NAME" => GetMessage("INTI_TASKASSIGNEDTO"), "ACTIVE" => "Y", "SORT" => 400, "CODE" => "TaskAssignedTo", "PROPERTY_TYPE" => "S", "USER_TYPE" => "UserID", "ROW_COUNT" => 1, "COL_COUNT" => 30, "LINK_IBLOCK_ID" => 0, "WITH_DESCRIPTION" => "N", "FILTRABLE" => "Y", "SEARCHABLE" => "Y", "MULTIPLE" => "N", "MULTIPLE_CNT" => 5, "IS_REQUIRED" => "Y", "FILE_TYPE" => "jpg, gif, bmp, png, jpeg", "LIST_TYPE" => "L", "IBLOCK_ID" => $iblockId), "TASKTRACKERS" => array("NAME" => GetMessage("INTI_TASKTRACKERS"), "ACTIVE" => "Y", "SORT" => 400, "CODE" => "TaskTrackers", "PROPERTY_TYPE" => "S", "USER_TYPE" => "UserID", "ROW_COUNT" => 1, "COL_COUNT" => 30, "LINK_IBLOCK_ID" => 0, "WITH_DESCRIPTION" => "N", "FILTRABLE" => "Y", "SEARCHABLE" => "Y", "MULTIPLE" => "Y", "MULTIPLE_CNT" => 5, "IS_REQUIRED" => "N", "FILE_TYPE" => "jpg, gif, bmp, png, jpeg", "LIST_TYPE" => "L", "IBLOCK_ID" => $iblockId), "TASKALERT" => array("NAME" => GetMessage("INTI_TASKALERT"), "ACTIVE" => "Y", "SORT" => 500, "CODE" => "TaskAlert", "PROPERTY_TYPE" => "S", "USER_TYPE" => false, "DEFAULT_VALUE" => "Y", "ROW_COUNT" => 1, "COL_COUNT" => 30, "LINK_IBLOCK_ID" => 0, "WITH_DESCRIPTION" => "N", "FILTRABLE" => "N", "SEARCHABLE" => "N", "MULTIPLE" => "N", "MULTIPLE_CNT" => 5, "IS_REQUIRED" => "N", "FILE_TYPE" => "jpg, gif, bmp, png, jpeg", "LIST_TYPE" => "L", "IBLOCK_ID" => $iblockId), "TASKSIZE" => array("NAME" => GetMessage("INTI_TASKSIZE"), "ACTIVE" => "Y", "SORT" => 600, "CODE" => "TaskSize", "PROPERTY_TYPE" => "N", "USER_TYPE" => false, "ROW_COUNT" => 1, "COL_COUNT" => 5, "LINK_IBLOCK_ID" => 0, "WITH_DESCRIPTION" => "N", "FILTRABLE" => "Y", "SEARCHABLE" => "Y", "MULTIPLE" => "N", "MULTIPLE_CNT" => 5, "IS_REQUIRED" => "N", "FILE_TYPE" => "jpg, gif, bmp, png, jpeg", "LIST_TYPE" => "L", "IBLOCK_ID" => $iblockId), "TASKSIZEREAL" => array("NAME" => GetMessage("INTI_TASKSIZEREAL"), "ACTIVE" => "Y", "SORT" => 700, "CODE" => "TaskSizeReal", "PROPERTY_TYPE" => "N", "USER_TYPE" => false, "ROW_COUNT" => 1, "COL_COUNT" => 5, "LINK_IBLOCK_ID" => 0, "WITH_DESCRIPTION" => "N", "FILTRABLE" => "Y", "SEARCHABLE" => "Y", "MULTIPLE" => "N", "MULTIPLE_CNT" => 5, "IS_REQUIRED" => "N", "FILE_TYPE" => "jpg, gif, bmp, png, jpeg", "LIST_TYPE" => "L", "IBLOCK_ID" => $iblockId), "TASKFINISH" => array("NAME" => GetMessage("INTI_TASKFINISH"), "ACTIVE" => "Y", "SORT" => 800, "CODE" => "TaskFinish", "PROPERTY_TYPE" => "S", "USER_TYPE" => "DateTime", "ROW_COUNT" => 1, "COL_COUNT" => 30, "LINK_IBLOCK_ID" => 0, "WITH_DESCRIPTION" => "N", "FILTRABLE" => "Y", "SEARCHABLE" => "Y", "MULTIPLE" => "N", "MULTIPLE_CNT" => 5, "IS_REQUIRED" => "N", "FILE_TYPE" => "jpg, gif, bmp, png, jpeg", "LIST_TYPE" => "L", "IBLOCK_ID" => $iblockId), "TASKFILES" => array("NAME" => GetMessage("INTI_TASKFILES"), "ACTIVE" => "Y", "SORT" => 900, "CODE" => "TaskFiles", "PROPERTY_TYPE" => "F", "USER_TYPE" => false, "ROW_COUNT" => 10, "COL_COUNT" => 60, "LINK_IBLOCK_ID" => 0, "WITH_DESCRIPTION" => "N", "FILTRABLE" => "N", "SEARCHABLE" => "N", "MULTIPLE" => "Y", "MULTIPLE_CNT" => 5, "IS_REQUIRED" => "N", "FILE_TYPE" => "jpg, gif, bmp, png, jpeg", "LIST_TYPE" => "L", "IBLOCK_ID" => $iblockId), "TASKREPORT" => array("NAME" => GetMessage("INTI_TASKREPORT"), "ACTIVE" => "Y", "SORT" => 1000, "CODE" => "TaskReport", "PROPERTY_TYPE" => "S", "USER_TYPE" => false, "ROW_COUNT" => 10, "COL_COUNT" => 60, "LINK_IBLOCK_ID" => 0, "WITH_DESCRIPTION" => "N", "FILTRABLE" => "N", "SEARCHABLE" => "N", "MULTIPLE" => "N", "MULTIPLE_CNT" => 5, "IS_REQUIRED" => "N", "FILE_TYPE" => "jpg, gif, bmp, png, jpeg", "LIST_TYPE" => "L", "IBLOCK_ID" => $iblockId), "TASKREMIND" => array("NAME" => GetMessage("INTI_TASKREMIND"), "ACTIVE" => "Y", "SORT" => 300, "CODE" => "TaskRemind", "PROPERTY_TYPE" => "S", "USER_TYPE" => "DateTime", "ROW_COUNT" => 1, "COL_COUNT" => 30, "LINK_IBLOCK_ID" => 0, "WITH_DESCRIPTION" => "N", "FILTRABLE" => "N", "SEARCHABLE" => "N", "MULTIPLE" => "N", "MULTIPLE_CNT" => 5, "IS_REQUIRED" => "N", "FILE_TYPE" => "jpg, gif, bmp, png, jpeg", "LIST_TYPE" => "L", "IBLOCK_ID" => $iblockId), "VERSION" => array("NAME" => GetMessage("INTI_VERSION"), "ACTIVE" => "Y", "SORT" => 1100, "CODE" => "VERSION", "PROPERTY_TYPE" => "N", "USER_TYPE" => false, "ROW_COUNT" => 1, "COL_COUNT" => 10, "LINK_IBLOCK_ID" => 0, "WITH_DESCRIPTION" => "N", "FILTRABLE" => "N", "SEARCHABLE" => "N", "MULTIPLE" => "N", "MULTIPLE_CNT" => 5, "IS_REQUIRED" => "N", "FILE_TYPE" => "jpg, gif, bmp, png, jpeg", "LIST_TYPE" => "L", "IBLOCK_ID" => $iblockId), "TASKVERSION" => array("NAME" => GetMessage("INTI_TASKVERSION"), "ACTIVE" => "Y", "SORT" => 1100, "CODE" => "TASKVERSION", "PROPERTY_TYPE" => "N", "USER_TYPE" => false, "ROW_COUNT" => 1, "COL_COUNT" => 10, "LINK_IBLOCK_ID" => 0, "WITH_DESCRIPTION" => "N", "FILTRABLE" => "N", "SEARCHABLE" => "N", "MULTIPLE" => "N", "MULTIPLE_CNT" => 5, "IS_REQUIRED" => "N", "FILE_TYPE" => "jpg, gif, bmp, png, jpeg", "LIST_TYPE" => "L", "IBLOCK_ID" => $iblockId)); foreach ($arTasksProps as $propKey => $arProp) { if (!array_key_exists($propKey, $arIBlockProperties)) { $ibp = new CIBlockProperty(); $ibp->Add($arProp); } } $dbSectionsList = CIBlockSection::GetList(array(), array("GLOBAL_ACTIVE" => "Y", "XML_ID" => $taskType == "group" ? $ownerId : "users_tasks", "IBLOCK_ID" => $iblockId, "SECTION_ID" => 0), false); if ($arSection = $dbSectionsList->GetNext()) { $globalParentSectionId = $arSection["ID"]; } if ($globalParentSectionId <= 0) { if ($taskType == "group") { $folderName = "-"; $folderXmlId = $ownerId; if ($arGroup = CSocNetGroup::GetByID($ownerId)) { $folderName = $arGroup["NAME"] . " [" . $ownerId . "]"; $folderXmlId = $ownerId; } } else { $folderName = "User Tasks"; $folderXmlId = "users_tasks"; } $arFields = array("IBLOCK_ID" => $iblockId, "IBLOCK_SECTION_ID" => 0, "ACTIVE" => "Y", "NAME" => $folderName, "XML_ID" => $folderXmlId); $iblockSection = new CIBlockSection(); $globalParentSectionId = $iblockSection->Add($arFields, true); CIntranetTasks::InstallDefaultViews($taskType, $ownerId); } $db = CBPWorkflowTemplateLoader::GetList(array(), array("DOCUMENT_TYPE" => array("intranet", "CIntranetTasksDocument", "x" . $iblockId)), false, false, array("ID")); // while ($ar = $db->Fetch()) // { // try // { // CBPWorkflowTemplateLoader::Delete($ar["ID"]); // } // catch(Exception $e) // { // CBPWorkflowTemplateLoader::Update($ar["ID"], array("AUTO_EXECUTE" => 0)); // } // } $workflowTemplateId = 0; if ($ar = $db->Fetch()) { $workflowTemplateId = $ar["ID"]; } else { require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/intranet/classes/general/tasks_wf_template.php"; $workflowTemplateId = CBPWorkflowTemplateLoader::Add($arFields); } $arTaskStatusTmp = array(); $arTaskStatusTmpAlt = array(); $dbRes = CIBlockProperty::GetPropertyEnum("TaskStatus", array("SORT" => "ASC"), array("IBLOCK_ID" => $iblockId)); while ($arRes = $dbRes->Fetch()) { $arTaskStatusTmp[StrToUpper($arRes["XML_ID"])] = $arRes["ID"]; $arTaskStatusTmpAlt[$arRes["ID"]] = $arRes["XML_ID"]; } $dbResult = CIBlockElement::GetList(array(), array("IBLOCK_ID" => $iblockId, "INCLUDE_SUBSECTIONS" => "Y", "!PROPERTY_TASKVERSION" => 2), false, false, array("ID", "PROPERTY_TASKSTATUS", "PROPERTY_TASKASSIGNEDTO", "IBLOCK_SECTION_ID")); if ($arResult = $dbResult->Fetch()) { $arOldTasksWFs = array(); $arOldTasksSTs = array(); require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/intranet/classes/general/tasks_wf_template1.php"; $arOldTasksWFsTmp = array(); foreach ($arOldTasksWFs as $t1 => $t2) { if (array_key_exists($t1, $arTaskStatusTmp)) { $arOldTasksWFsTmp[$arTaskStatusTmp[$t1]] = $t2; } } $arOldTasksSTsTmp = array(); foreach ($arOldTasksSTs as $t1 => $t2) { if (array_key_exists($t1, $arTaskStatusTmp)) { $arOldTasksSTsTmp[$arTaskStatusTmp[$t1]] = $t2; } } do { $taskTypeTmp = ""; $ownerIdTmp = ""; $v = CIntranetTasks::PrepareSectionForPrint($arResult["IBLOCK_SECTION_ID"]); foreach ($v as $k1 => $v1) { $taskTypeTmp = $v1["XML_ID"] == "users_tasks" ? "user" : "group"; $ownerIdTmp = $taskTypeTmp == "user" ? $arResult["PROPERTY_TASKASSIGNEDTO_VALUE"] : $v1["XML_ID"]; break; } if ($taskTypeTmp == "group") { $pathTemplate = str_replace(array("#GROUP_ID#", "#TASK_ID#"), array($ownerIdTmp, "{=Document:ID}"), COption::GetOptionString("intranet", "path_task_group_entry", "/workgroups/group/#GROUP_ID#/tasks/task/view/#TASK_ID#/")); } else { $pathTemplate = str_replace(array("#USER_ID#", "#TASK_ID#"), array($ownerIdTmp, "{=Document:ID}"), COption::GetOptionString("intranet", "path_task_user_entry", "/company/personal/user/#USER_ID#/tasks/task/view/#TASK_ID#/")); } $pathTemplate = str_replace('#HTTP_HOST#', $_SERVER['HTTP_HOST'], "http://#HTTP_HOST#" . $pathTemplate); $workflowId = uniqid("", true); if (array_key_exists($arResult["PROPERTY_TASKSTATUS_ENUM_ID"], $arOldTasksWFsTmp)) { $v = $arOldTasksWFsTmp[$arResult["PROPERTY_TASKSTATUS_ENUM_ID"]]; $v = str_replace(array("#TPT_TASK_ID_LEN#", "#TPT_TASK_ID#", "#TPT_WORKFLOW_ID_LEN#", "#TPT_WORKFLOW_ID#", "#TPT_DOCUMENT_LEN1#", "#TPT_DOCUMENT_LEN2#", "#TPT_DOCUMENT_LEN3#", "#TPT_DOCUMENT_ROOT#", "#TPT_OWNER_ID#", "#TPT_TASK_TYPE_LEN#", "#TPT_TASK_TYPE#", "#TPT_PATH_TEMPLATE_LEN#", "#TPT_PATH_TEMPLATE#", "#TPT_FORUM_ID#", "#TPT_IBLOCKID_ID#"), array(strlen($arResult["ID"]), $arResult["ID"], strlen($workflowId), $workflowId, 25 + strlen($_SERVER["DOCUMENT_ROOT"]), 25 + strlen($_SERVER["DOCUMENT_ROOT"]), 34 + strlen($_SERVER["DOCUMENT_ROOT"]), $_SERVER["DOCUMENT_ROOT"], $ownerIdTmp, strlen($taskTypeTmp), $taskTypeTmp, strlen($pathTemplate), $pathTemplate, $forumId, $iblockId), $v); CBPWorkflowPersister::__InsertWorkflowHack($workflowId, $v); } if (array_key_exists($arResult["PROPERTY_TASKSTATUS_ENUM_ID"], $arOldTasksSTsTmp)) { CBPStateService::__InsertStateHack($workflowId, "intranet", "CIntranetTasksDocument", $arResult["ID"], $workflowTemplateId, $arOldTasksSTsTmp[$arResult["PROPERTY_TASKSTATUS_ENUM_ID"]]["STATE"], $arOldTasksSTsTmp[$arResult["PROPERTY_TASKSTATUS_ENUM_ID"]]["STATE_TITLE"], $arOldTasksSTsTmp[$arResult["PROPERTY_TASKSTATUS_ENUM_ID"]]["PARAMS"], $arOldTasksSTsTmp[$arResult["PROPERTY_TASKSTATUS_ENUM_ID"]]["PERMS"]); } else { CBPStateService::__InsertStateHack($workflowId, "intranet", "CIntranetTasksDocument", $arResult["ID"], $workflowTemplateId, $arOldTasksSTs["COMPLETED"]["STATE"], $arOldTasksSTs["COMPLETED"]["STATE_TITLE"], $arOldTasksSTs["COMPLETED"]["PARAMS"], $arOldTasksSTs["COMPLETED"]["PERMS"]); } CIBlockElement::SetPropertyValues($arResult["ID"], $iblockId, 2, "TASKVERSION"); } while ($arResult = $dbResult->Fetch()); } $arTasksConverted2BP[$keyTasksConverted2BP] = $globalParentSectionId; $CACHE_MANAGER->Clean("IntranetTasksConverted2BP"); $CACHE_MANAGER->Read(2592000, "IntranetTasksConverted2BP"); $CACHE_MANAGER->Set("IntranetTasksConverted2BP", $arTasksConverted2BP); } return $globalParentSectionId; }
/** * Метод удаляет все связанные с документом записи. * * @param array $documentId - код документа в виде массива array(модуль, сущность, код_документа_в_модуле). * @param array $arErrors - массив ошибок, которые произошли при удалении в виде array(array("code" => код_ошибки, "message" => сообщение, "file" => путь_к_файлу), ...). */ public static function OnDocumentDelete($documentId, &$arErrors) { $arErrors = array(); $arStates = CBPStateService::GetDocumentStates($documentId); foreach ($arStates as $workflowId => $arState) { $terminate = strlen($arState["ID"]) > 0 && strlen($arState["WORKFLOW_STATUS"]) > 0; $errors = static::killWorkflow($workflowId, $terminate, $documentId); if ($errors) { foreach ($errors as $e) { $arErrors[] = $e; } } } CBPStateService::DeleteByDocument($documentId); CBPHistoryService::DeleteByDocument($documentId); }
protected static function onTaskChange($taskId, $taskData, $status) { $workflowId = isset($taskData['WORKFLOW_ID']) ? $taskData['WORKFLOW_ID'] : null; if (!$workflowId) { $iterator = CBPTaskService::GetList(array('ID' => 'DESC'), array('ID' => $taskId), false, false, array('WORKFLOW_ID')); $row = $iterator->fetch(); if (!$row) { return false; } $workflowId = $row['WORKFLOW_ID']; $taskData['WORKFLOW_ID'] = $workflowId; } //clean counters cache $users = array(); if (!empty($taskData['USERS'])) { $users = $taskData['USERS']; } if (!empty($taskData['USERS_REMOVED'])) { $users = array_merge($users, $taskData['USERS_REMOVED']); } if (!empty($taskData['USERS_STATUSES'])) { $users = array_merge($users, array_keys($taskData['USERS_STATUSES'])); } self::cleanCountersCache($users); //ping document $runtime = CBPRuntime::GetRuntime(); $runtime->StartRuntime(); $documentId = CBPStateService::GetStateDocumentId($workflowId); $documentService = $runtime->GetService('DocumentService'); try { $documentService->onTaskChange($documentId, $taskId, $taskData, $status); } catch (Exception $e) { } return true; }
/* $arWorkflowTemplate = CBPWorkflowTemplateLoader::GetTemplateState($workflowTemplateId); if (!is_array($arWorkflowTemplate["STATE_PERMISSIONS"]) || count($arWorkflowTemplate["STATE_PERMISSIONS"]) <= 0) $arWorkflowTemplate["STATE_PERMISSIONS"]["create"] = array("author"); $arResult["AllowableOperations"] = CBPDocument::GetAllowableOperations($GLOBALS["USER"]->GetID(), $GLOBALS["USER"]->GetUserGroupArray(), array($arWorkflowTemplate)); */ $arResult["AllowAdmin"] = $GLOBALS["USER"]->IsAdmin() || is_array($arParams["ADMIN_ACCESS"]) && count(array_intersect($arParams["ADMIN_ACCESS"], $GLOBALS["USER"]->GetUserGroupArray())) > 0; /* $arResult["AllowCreate"] = ($arResult["AllowAdmin"] || (is_array($arResult["AllowableOperations"]) && in_array("create", $arResult["AllowableOperations"]) || is_array($arWorkflowTemplate["STATE_PERMISSIONS"]["create"]) && in_array("author", $arWorkflowTemplate["STATE_PERMISSIONS"]["create"])));*/ } if (strlen($arResult["FatalErrorMessage"]) <= 0) { if ($_SERVER["REQUEST_METHOD"] == "GET" && strlen($_REQUEST["process_state_event"]) > 0 && check_bitrix_sessid()) { $bizprocId = trim($_REQUEST["bizproc_id"]); $bizprocEvent = trim($_REQUEST["bizproc_event"]); if (strlen($bizprocEvent) > 0) { $arState = CBPStateService::GetWorkflowState($bizprocId); if (count($arState) > 0) { list($dbRecordsList, $dbRecordsList1) = CBPVirtualDocument::GetList(array(), array("IBLOCK_ID" => $arParams["BLOCK_ID"], "ID" => $arState["DOCUMENT_ID"][2]), false, false, array("ID", "IBLOCK_ID", "CREATED_BY")); if ($arRecord = $dbRecordsList->Fetch()) { $arCurrentUserGroups = $GLOBALS["USER"]->GetUserGroupArray(); if ("user_" . $GLOBALS["USER"]->GetID() == $arRecord["CREATED_BY"]) { $arCurrentUserGroups[] = "author"; } $arErrorTmp = array(); CBPDocument::SendExternalEvent($bizprocId, $bizprocEvent, array("Groups" => $arCurrentUserGroups, "User" => $GLOBALS["USER"]->GetID()), $arErrorTmp); if (count($arErrorsTmp) > 0) { foreach ($arErrorsTmp as $e) { $arResult["FatalErrorMessage"] .= $e["message"] . ". "; } } } else {
$hgridColumns = $hgridOptions->GetVisibleColumns(); $hgridSort = $hgridOptions->GetSorting(array("sort" => array("ID" => "desc"))); $arResult["H_HEADERS"] = array(array("id" => "MODIFIED", "name" => GetMessage("BPATL_MODIFIED"), "default" => true, "sort" => ""), array("id" => "ACTION_NOTE", "name" => GetMessage("BPATL_DESCRIPTION"), "default" => true, "sort" => "")); $arResult["H_SORT"] = $hgridSort["sort"]; $arResult["H_RECORDS"] = array(); $arFilter = array("MODIFIED_BY" => $arParams["USER_ID"]); if (!empty($arParams["WORKFLOW_ID"])) { $arFilter["WORKFLOW_ID"] = $arParams["WORKFLOW_ID"]; } $runtime = CBPRuntime::GetRuntime(); $runtime->StartRuntime(); $documentService = $runtime->GetService("DocumentService"); $dbRecordsList = CBPTrackingService::GetList($hgridSort["sort"], $arFilter); while ($arRecord = $dbRecordsList->GetNext()) { if (strlen($arRecord["WORKFLOW_ID"]) > 0) { $arRecord["STATE"] = CBPStateService::GetWorkflowState($arRecord["WORKFLOW_ID"]); $arRecord["DOCUMENT_URL"] = CBPDocument::GetDocumentAdminPage($arRecord["STATE"]["DOCUMENT_ID"]); try { $dt = $documentService->GetDocumentType($arRecord["STATE"]["DOCUMENT_ID"]); } catch (Exception $e) { } $arRecord["ACTION_NOTE"] = preg_replace_callback("/\\{=([A-Za-z0-9_]+)\\:([A-Za-z0-9_]+)\\}/i", create_function('$matches', 'return __bwl_ParseStringParameterTmp1($matches, array("' . $dt[0] . '", "' . $dt[1] . '", "' . $dt[2] . '"));'), $arRecord["ACTION_NOTE"]); } $aActions = array(); if (strlen($arRecord["DOCUMENT_URL"]) > 0) { $aActions[] = array("ICONCLASS" => "", "DEFAULT" => false, "TEXT" => GetMessage("BPTL_C_DOCUMENT"), "ONCLICK" => "window.open('" . $arRecord["DOCUMENT_URL"] . "');"); } $arResult["H_RECORDS"][] = array("data" => $arRecord, "actions" => $aActions, "columns" => array(), "editable" => false); } $arResult["H_ROWS_COUNT"] = $dbRecordsList->SelectedRowsCount(); $arResult["H_NAV_STRING"] = $dbRecordsList->GetPageNavStringEx($navComponentObject, GetMessage("INTS_TASKS_NAV"), "", false);
} if ($processes) { if (isset($arVariables["mode"])) { switch ($arVariables["mode"]) { case "catalog": if ($processes) { $componentPage = "catalog_processes"; } break; } } } $arResult = array("FOLDER" => "", "URL_TEMPLATES" => array("list_field_edit" => $APPLICATION->GetCurPage() . "?mode=field" . "&" . $arVariableAliases["list_id"] . "=#list_id#" . "&" . $arVariableAliases["field_id"] . "=#field_id#", "list_fields" => $APPLICATION->GetCurPage() . "?mode=fields" . "&" . $arVariableAliases["list_id"] . "=#list_id#", "list_edit" => $APPLICATION->GetCurPage() . "?mode=edit" . "&" . $arVariableAliases["list_id"] . "=#list_id#", "list_element_edit" => $APPLICATION->GetCurPage() . "?mode=edit" . "&" . $arVariableAliases["list_id"] . "=#list_id#" . "&" . $arVariableAliases["section_id"] . "=#section_id#" . "&" . $arVariableAliases["element_id"] . "=#element_id#", "list_sections" => $APPLICATION->GetCurPage() . "?mode=edit" . "&" . $arVariableAliases["list_id"] . "=#list_id#" . "&" . $arVariableAliases["section_id"] . "=#section_id#", "bizproc_log" => $APPLICATION->GetCurPage() . "?mode=bp" . "&" . $arVariableAliases["list_id"] . "=#list_id#" . "&" . $arVariableAliases["document_state_id"] . "=#document_state_id#", "bizproc_task" => $APPLICATION->GetCurPage() . "?mode=bp&" . $arVariableAliases["list_id"] . "=#list_id#" . "&" . $arVariableAliases["task_id"] . "=#task_id#", "bizproc_workflow_start" => $APPLICATION->GetCurPage() . "?mode=bp" . "&" . $arVariableAliases["list_id"] . "=#list_id#" . "&" . $arVariableAliases["section_id"] . "=#section_id#" . "&" . $arVariableAliases["element_id"] . "=#element_id#", "bizproc_workflow_delete" => $APPLICATION->GetCurPage() . "?mode=bp" . "&" . $arVariableAliases["list_id"] . "=#list_id#" . "&" . $arVariableAliases["section_id"] . "=#section_id#" . "&" . $arVariableAliases["element_id"] . "=#element_id#", "bizproc_workflow_admin" => $APPLICATION->GetCurPage() . "?mode=bp" . "&" . $arVariableAliases["list_id"] . "=#list_id#", "bizproc_workflow_edit" => $APPLICATION->GetCurPage() . "?mode=bp" . "&" . $arVariableAliases["list_id"] . "=#list_id#" . "&" . $arVariableAliases["ID"] . "=#ID#", "bizproc_workflow_vars" => $APPLICATION->GetCurPage() . "?mode=bp_vars" . "&" . $arVariableAliases["list_id"] . "=#list_id#" . "&" . $arVariableAliases["ID"] . "=#ID#", "bizproc_workflow_constants" => $APPLICATION->GetCurPage() . "?mode=bp_constants" . "&" . $arVariableAliases["list_id"] . "=#list_id#" . "&" . $arVariableAliases["ID"] . "=#ID#", "list_file" => $APPLICATION->GetCurPage() . "?mode=view" . "&" . $arVariableAliases["list_id"] . "=#list_id#" . "&" . $arVariableAliases["section_id"] . "=#section_id#" . "&" . $arVariableAliases["element_id"] . "=#element_id#" . "&" . $arVariableAliases["field_id"] . "=#field_id#" . "&" . $arVariableAliases["file_id"] . "=#file_id#", "list" => $APPLICATION->GetCurPage() . "?mode=view" . "&" . $arVariableAliases["list_id"] . "=#list_id#" . "&" . $arVariableAliases["section_id"] . "=#section_id#", "lists" => $APPLICATION->GetCurPage()), "VARIABLES" => $arVariables, "ALIASES" => $arVariableAliases); if ($processes) { $arResult["URL_TEMPLATES"]["catalog_processes"] = $APPLICATION->GetCurPage() . "?mode=catalog"; } } $p = strpos($arResult["URL_TEMPLATES"]["bizproc_workflow_delete"], "?"); if ($p === false) { $ch = "?"; } else { $ch = "&"; } $arResult["URL_TEMPLATES"]["bizproc_workflow_delete"] .= $ch . "action=del_bizproc"; if (isset($arVariables["document_state_id"]) && !isset($arVariables["element_id"]) && CModule::IncludeModule("bizproc")) { $arWorkflowState = CBPStateService::GetWorkflowState($arVariables["document_state_id"]); if (is_array($arWorkflowState) && is_array($arWorkflowState["DOCUMENT_ID"])) { list(, , $arResult["VARIABLES"]["element_id"]) = CBPHelper::ParseDocumentId($arWorkflowState["DOCUMENT_ID"]); } } $this->IncludeComponentTemplate($componentPage);
$dbResultList->NavStart(); $lAdmin->NavText($dbResultList->GetNavPrint(GetMessage("BPATL_NAV"))); while ($arResultItem = $dbResultList->NavNext(true, "f_")) { $row =& $lAdmin->AddRow($f_ID, $arResultItem); $s = $allowAdminAccess ? "&uid=" . intval($arResultItem["USER_ID"]) : ""; $row->AddField("ID", '<a href="bizproc_task.php?id=' . $f_ID . $s . '&back_url=' . urlencode($APPLICATION->GetCurPageParam("lang=" . LANGUAGE_ID, array("lang"))) . '" title="' . GetMessage("BPATL_VIEW") . '">' . $f_ID . '</a>'); $row->AddField("NAME", $f_NAME); $description = $f_DESCRIPTION; if (strlen($description) > 100) { $description = substr($description, 0, 97) . "..."; } $row->AddField("DESCRIPTION", $description); $row->AddField("DESCRIPTION_FULL", $f_DESCRIPTION); $row->AddField("MODIFIED", $f_MODIFIED); if (count(array_intersect($arVisibleColumns, array("WORKFLOW_NAME", "WORKFLOW_STATE"))) > 0) { $arState = CBPStateService::GetWorkflowState($arResultItem["WORKFLOW_ID"]); $row->AddField("WORKFLOW_NAME", $arState["TEMPLATE_NAME"]); $row->AddField("WORKFLOW_STATE", $arState["STATE_TITLE"]); } if (in_array("USER", $arVisibleColumns)) { $dbUserTmp = CUser::GetByID($arResultItem["USER_ID"]); if ($arUserTmp = $dbUserTmp->GetNext()) { $str = CUser::FormatName(COption::GetOptionString("bizproc", "name_template", CSite::GetNameFormat(false), SITE_ID), $arUserTmp, true); $str .= " [" . $arResultItem["USER_ID"] . "]"; } else { $str = str_replace("#USER_ID#", $arResultItem["USER_ID"], GetMessage("BPATL_USER_NOT_FOUND")); } $row->AddField("USER", $str); } $arActions = array(); $arActions[] = array("ICON" => "edit", "TEXT" => GetMessage("BPATL_VIEW"), "ACTION" => $lAdmin->ActionRedirect('bizproc_task.php?id=' . $f_ID . $s . '&back_url=' . urlencode($APPLICATION->GetCurPageParam("lang=" . LANGUAGE_ID, array("lang"))) . ''), "DEFAULT" => true);
if (count($arState) > 0) { CBPDocument::TerminateWorkflow($_REQUEST["stop_bizproc_id"], $arState["DOCUMENT_ID"], $arErrorsTmp); if (count($arErrorsTmp) > 0) { foreach ($arErrorsTmp as $e) { $arResult["ErrorMessage"] .= $e["message"] . ". "; } } } else { $arResult["ErrorMessage"] .= GetMessage("BPWC_WLC_MISSING_BP") . ". "; } if (strlen($arResult["ErrorMessage"]) <= 0) { LocalRedirect($APPLICATION->GetCurPageParam("", array("sessid", "stop_bizproc_id", "delete_bizproc_id"))); } } if ($_SERVER["REQUEST_METHOD"] == "GET" && strlen($_REQUEST["delete_bizproc_id"]) > 0 && check_bitrix_sessid() && $arResult["AllowAdmin"]) { $arState = CBPStateService::GetWorkflowState($_REQUEST["delete_bizproc_id"]); if (count($arState) > 0) { $arErrorsTmp = array(); CBPDocument::OnDocumentDelete($arState["DOCUMENT_ID"], $arErrorsTmp); if (count($arErrorsTmp) > 0) { foreach ($arErrorsTmp as $e) { $arResult["ErrorMessage"] .= $e["message"] . ". "; } } if (strlen($arResult["ErrorMessage"]) <= 0) { CIBlockElement::Delete($arState["DOCUMENT_ID"][2]); } } else { $arResult["ErrorMessage"] .= GetMessage("BPWC_WLC_MISSING_BP") . ". "; } if (strlen($arResult["ErrorMessage"]) <= 0) {
if (!$arResult["TASK"] && strlen($arParams["WORKFLOW_ID"]) > 0) { $dbTask = CBPTaskService::GetList(array(), array("WORKFLOW_ID" => $arParams["WORKFLOW_ID"], "USER_ID" => $arParams["USER_ID"], 'USER_STATUS' => CBPTaskUserStatus::Waiting), false, false, array("ID", "WORKFLOW_ID", "ACTIVITY", "ACTIVITY_NAME", "MODIFIED", "OVERDUE_DATE", "NAME", "DESCRIPTION", "PARAMETERS", 'IS_INLINE', 'STATUS', 'USER_STATUS', 'DOCUMENT_NAME')); $arResult["TASK"] = $dbTask->GetNext(); } if (!$arResult["TASK"]) { ShowError(GetMessage("BPAT_NO_TASK")); return false; } if ($arResult["TASK"]['STATUS'] > CBPTaskStatus::Running || $arResult["TASK"]['USER_STATUS'] > CBPTaskUserStatus::Waiting) { $arResult["ShowMode"] = "Success"; $arResult['IsComplete'] = true; } if ($arResult['ReadOnly'] && isset($arResult['TASK']['PARAMETERS']['AccessControl']) && $arResult['TASK']['PARAMETERS']['AccessControl'] == 'Y') { $arResult['TASK']['DESCRIPTION'] = ''; } $arState = CBPStateService::GetWorkflowState($arResult['TASK']['WORKFLOW_ID']); if (!$arState) { ShowError(GetMessage("BPAT_NO_STATE")); // Let`s clean up! CBPTaskService::DeleteByWorkflow($arResult['TASK']['WORKFLOW_ID']); return false; } $arResult['TASK']['PARAMETERS']['DOCUMENT_ID'] = $arState['DOCUMENT_ID']; $arResult["TASK"]["MODULE_ID"] = $arResult["TASK"]["PARAMETERS"]["DOCUMENT_ID"][0]; $arResult["TASK"]["ENTITY"] = $arResult["TASK"]["PARAMETERS"]["DOCUMENT_ID"][1]; $arResult["TASK"]["DOCUMENT_ID"] = $arResult["TASK"]["PARAMETERS"]["DOCUMENT_ID"][2]; $arParams["DOCUMENT_URL"] = trim($arParams["DOCUMENT_URL"]); if (empty($arParams["DOCUMENT_URL"])) { $arParams["DOCUMENT_URL"] = CBPDocument::GetDocumentAdminPage($arResult["TASK"]["PARAMETERS"]["DOCUMENT_ID"]); } else { $arParams["DOCUMENT_URL"] = CComponentEngine::MakePathFromTemplate($arParams["DOCUMENT_URL"], $arResult["TASK"]);
if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) { die; } if (!CModule::IncludeModule('bizproc')) { return false; } if (!$GLOBALS['USER']->IsAuthorized()) { return false; } $arParams['WORKFLOW_ID'] = empty($arParams['WORKFLOW_ID']) ? $_REQUEST['WORKFLOW_ID'] : $arParams['WORKFLOW_ID']; if (!$arParams['WORKFLOW_ID']) { return false; } $arResult['TASKS'] = CBPViewHelper::getWorkflowTasks($arParams['WORKFLOW_ID'], true, true); $arResult['WORKFLOW_STATE_INFO'] = CBPStateService::getWorkflowStateInfo($arParams['WORKFLOW_ID']); $arResult['USER_ID'] = (int) $GLOBALS['USER']->GetId(); if (!empty($arResult['TASKS']['RUNNING'])) { foreach ($arResult['TASKS']['RUNNING'] as &$t) { if ($t['IS_INLINE'] == 'Y') { $controls = CBPDocument::getTaskControls($t); $t['BUTTONS'] = $controls['BUTTONS']; } if (isset($t['PARAMETERS']['AccessControl']) && $t['PARAMETERS']['AccessControl'] == 'Y') { $t['DESCRIPTION'] = ''; } } } $arResult['noWrap'] = isset($arParams['NOWRAP']) && $arParams['NOWRAP'] == 'Y'; ob_start(); $this->IncludeComponentTemplate();
} $arParams["USER_ID"] = intVal($GLOBALS["USER"]->GetID()); $arParams["WORKFLOW_ID"] = empty($arParams["WORKFLOW_ID"]) ? $_REQUEST["WORKFLOW_ID"] : $arParams["WORKFLOW_ID"]; //***************** URL ********************************************/ $arResult["back_url"] = urlencode(empty($_REQUEST["back_url"]) ? $APPLICATION->GetCurPageParam() : $_REQUEST["back_url"]); /***************** ADDITIONAL **************************************/ $arParams["PAGE_ELEMENTS"] = intVal(intVal($arParams["PAGE_ELEMENTS"]) > 0 ? $arParams["PAGE_ELEMENTS"] : 50); $arParams["PAGE_NAVIGATION_TEMPLATE"] = trim($arParams["PAGE_NAVIGATION_TEMPLATE"]); /***************** STANDART ****************************************/ $arParams["SET_TITLE"] = $arParams["SET_TITLE"] == "N" ? "N" : "Y"; //Turn on by default /******************************************************************** /Input params ********************************************************************/ $arError = array(); $arResult["arWorkflowState"] = CBPStateService::GetWorkflowState($arParams["ID"]); $arParams["DOCUMENT_ID"] = $arResult["arWorkflowState"]["DOCUMENT_ID"]; $arParams["USER_GROUPS"] = $GLOBALS["USER"]->GetUserGroupArray(); if (method_exists($arParams["DOCUMENT_ID"][1], "GetUserGroups")) { $arParams["USER_GROUPS"] = call_user_func_array(array($arParams["DOCUMENT_ID"][1], "GetUserGroups"), array(null, $arParams["DOCUMENT_ID"], $GLOBALS["USER"]->GetID())); } if (!is_array($arResult["arWorkflowState"]) || count($arResult["arWorkflowState"]) <= 0) { $arError[] = array("id" => "error", "text" => GetMessage("BPABL_INVALID_WF")); } else { $bCanView = CBPDocument::CanUserOperateDocument(CBPCanUserOperateOperation::ViewWorkflow, $GLOBALS["USER"]->GetID(), $arResult["arWorkflowState"]["DOCUMENT_ID"], array("WorkflowId" => $arParams["ID"], "DocumentStates" => array($arParams["ID"] => $arResult["arWorkflowState"]), "UserGroups" => $arParams["USER_GROUPS"])); if (!$bCanView) { $arError[] = array("id" => "access denied", "text" => GetMessage("BPABL_NO_PERMS")); } } if (!empty($arError)) { $e = new CAdminException($arError);
$arResult["H_NAV_STRING"] = $dbRecordsList->GetPageNavStringEx($navComponentObject, GetMessage("INTS_TASKS_NAV"), "", false); $arResult["H_NAV_CACHED_DATA"] = $navComponentObject->GetTemplateCachedData(); $arResult["H_NAV_RESULT"] = $dbRecordsList; } if (strlen($arResult["FatalErrorMessage"]) <= 0) { if (!$arParams['COUNTERS_ONLY']) { if ($arParams["SET_TITLE"] == "Y") { $APPLICATION->SetTitle(GetMessage("BPABS_TITLE")); } if ($arParams["SET_NAV_CHAIN"] == "Y") { $APPLICATION->AddChainItem(GetMessage("BPABS_TITLE")); } } $arResult['COUNTERS'] = CBPTaskService::getCounters($targetUserId); if ($arParams['COUNTERS_ONLY']) { $arResult['COUNTERS_RUNNING'] = CBPStateService::getRunningCounters($targetUserId); } //counter autofixer $currentCounter = (int) CUserCounter::GetValue($targetUserId, 'bp_tasks', '**'); if (isset($arResult['COUNTERS']['*']) && $currentCounter != $arResult['COUNTERS']['*']) { CUserCounter::Set($targetUserId, 'bp_tasks', $arResult['COUNTERS']['*'], '**'); } } elseif (!$arParams['COUNTERS_ONLY']) { if ($arParams["SET_TITLE"] == "Y") { $APPLICATION->SetTitle(GetMessage("BPWC_WLC_ERROR")); } if ($arParams["SET_NAV_CHAIN"] == "Y") { $APPLICATION->AddChainItem(GetMessage("BPWC_WLC_ERROR")); } } $this->IncludeComponentTemplate();
/** * Creates new workflow instance from the specified template. * * @param int $workflowTemplateId - ID of the workflow template * @param string $documentId - ID of the document * @param mixed $workflowParameters - Optional parameters of the created workflow instance * @param array|null $parentWorkflow - Parent Workflow information. * @return CBPWorkflow * @throws CBPArgumentNullException * @throws CBPArgumentOutOfRangeException * @throws Exception * @throws \Bitrix\Main\ArgumentNullException */ public function CreateWorkflow($workflowTemplateId, $documentId, $workflowParameters = array(), $parentWorkflow = null) { $workflowTemplateId = intval($workflowTemplateId); if ($workflowTemplateId <= 0) { throw new Exception("workflowTemplateId"); } $arDocumentId = CBPHelper::ParseDocumentId($documentId); $limit = \Bitrix\Main\Config\Option::get("bizproc", "limit_simultaneous_processes", "0"); if (intval($limit) > 0) { if (CBPStateService::CountDocumentWorkflows($documentId) >= $limit) { throw new Exception(GetMessage("BPCGDOC_LIMIT_SIMULTANEOUS_PROCESSES", array("#NUM#" => $limit))); } } if (!$this->isStarted) { $this->StartRuntime(); } $workflowId = uniqid("", true); if ($parentWorkflow) { $this->addWorkflowToChain($workflowId, $parentWorkflow); if ($this->checkWorkflowRecursion($workflowId, $workflowTemplateId)) { throw new Exception(GetMessage("BPCGDOC_WORKFLOW_RECURSION_LOCK")); } } $workflow = new CBPWorkflow($workflowId, $this); $loader = CBPWorkflowTemplateLoader::GetLoader(); list($rootActivity, $workflowVariablesTypes, $workflowParametersTypes) = $loader->LoadWorkflow($workflowTemplateId); if ($rootActivity == null) { throw new Exception("EmptyRootActivity"); } //if (!is_a($rootActivity, "IBPRootActivity")) // throw new Exception("RootActivityIsNotAIBPRootActivity"); foreach (GetModuleEvents("bizproc", "OnCreateWorkflow", true) as $arEvent) { ExecuteModuleEventEx($arEvent, array($workflowTemplateId, $documentId, &$workflowParameters)); } $workflow->Initialize($rootActivity, $arDocumentId, $workflowParameters, $workflowVariablesTypes, $workflowParametersTypes, $workflowTemplateId); $starterUserId = 0; if (isset($workflowParameters[CBPDocument::PARAM_TAGRET_USER])) { $starterUserId = intval(substr($workflowParameters[CBPDocument::PARAM_TAGRET_USER], strlen("user_"))); } $this->arServices["StateService"]->AddWorkflow($workflowId, $workflowTemplateId, $arDocumentId, $starterUserId); $this->arWorkflows[$workflowId] = $workflow; return $workflow; }
/** * Метод удаляет все связанные с документом записи. * * @param array $documentId - код документа в виде массива array(модуль, сущность, код_документа_в_модуле). * @param array $arErrors - массив ошибок, которые произошли при удалении в виде array(array("code" => код_ошибки, "message" => сообщение, "file" => путь_к_файлу), ...). */ public static function OnDocumentDelete($documentId, &$arErrors) { $arErrors = array(); $arStates = CBPStateService::GetDocumentStates($documentId); foreach ($arStates as $workflowId => $arState) { if (strlen($arState["ID"]) > 0 && strlen($arState["WORKFLOW_STATUS"]) > 0) self::TerminateWorkflow($workflowId, $documentId, $arErrors); CBPTrackingService::DeleteByWorkflow($workflowId); CBPTaskService::DeleteByWorkflow($workflowId); } CBPStateService::DeleteByDocument($documentId); CBPHistoryService::DeleteByDocument($documentId); }
$arParams["PATH_TO_BIZPROC_EDIT"] = trim($arParams["PATH_TO_BIZPROC_EDIT"]); if (strlen($arParams["PATH_TO_BIZPROC_EDIT"]) <= 0) { $arParams["PATH_TO_BIZPROC_EDIT"] = htmlspecialcharsbx($APPLICATION->GetCurPage() . "?" . $arParams["PAGE_VAR"] . "=bizproc_edit&" . $arParams["TASK_VAR"] . "=#task_id#"); } if (!$GLOBALS["USER"]->IsAuthorized()) { $arResult["NEED_AUTH"] = "Y"; } else { if ($arParams["SET_TITLE"] == "Y") { $APPLICATION->SetTitle(GetMessage("SONET_BIZPROC_TITLE")); } if ($arParams["SET_NAV_CHAIN"] != "N") { $APPLICATION->AddChainItem(GetMessage("SONET_BIZPROC_TITLE")); } $dbResultList = CBPTaskService::GetList(array("MODIFIED" => "DESC"), array("USER_ID" => $USER->GetID()), false, false, array("ID", "WORKFLOW_ID", "ACTIVITY", "ACTIVITY_NAME", "MODIFIED", "OVERDUE_DATE", "NAME", "DESCRIPTION", "PARAMETERS")); while ($arResultItem = $dbResultList->GetNext()) { if (strlen($arResultItem["DESCRIPTION"]) > 100) { $arResultItem["DESCRIPTION"] = substr($arResultItem["DESCRIPTION"], 0, 97) . "..."; } $arResultItem["EditUrl"] = CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_BIZPROC_EDIT"], array("task_id" => $arResultItem["ID"])); $arResult["TASKS"][] = $arResultItem; } $dbTracking = CBPTrackingService::GetList(array("MODIFIED" => "DESC"), array("MODIFIED_BY" => $USER->GetID())); while ($arTracking = $dbTracking->GetNext()) { if (strlen($arTracking["WORKFLOW_ID"]) > 0) { $arTracking["STATE"] = CBPStateService::GetWorkflowState($arTracking["WORKFLOW_ID"]); $arTracking["STATE"]["Url"] = CBPDocument::GetDocumentAdminPage($arTracking["STATE"]["DOCUMENT_ID"]); } $arResult["TRACKING"][] = $arTracking; } } $this->IncludeComponentTemplate();
/** * @param $userId * @return bool */ public function canRead($userId) { if ($this->canRead !== null) { return $this->canRead; } if (($res = $this->getDataToCheck($this->entityId)) && !empty($res)) { list($message, $topic) = $res; $entityId = null; $entityType = null; if (!empty($topic["XML_ID"])) { $entityId = substr($topic["XML_ID"], strrpos($topic["XML_ID"], "_") + 1); $entityType = substr($topic["XML_ID"], 0, strrpos($topic["XML_ID"], "_")); } switch ($entityType) { case "TASK": if (Loader::includeModule("tasks")) { $connector = new TaskConnector($entityId, $this->attachedObject); $this->canRead = $connector->canRead($userId); return $this->canRead; } break; case "EVENT": if (Loader::includeModule("calendar")) { $connector = new CalendarEventConnector($entityId, $this->attachedObject); $this->canRead = $connector->canRead($userId); return $this->canRead; } break; case "IBLOCK": if ((int) $topic["USER_ID"] > 0 && Loader::includeModule("socialnetwork")) { $codes = array(); if (($res = \CSocNetLog::getList(array(), array("SOURCE_ID" => $entityId, "EVENT_ID" => array("photo_photo", "news", "wiki")), false, false, array("ID"))->fetch()) && $res) { $db_res = \CSocNetLogRights::getList(array(), array("LOG_ID" => $res["ID"])); while ($res = $db_res->fetch()) { $codes[] = $res["GROUP_CODE"]; } } $this->canRead = $this->canAccess($userId, $codes); return $this->canRead; } $this->canRead = true; return $this->canRead; case "MEETING": $this->canRead = (int) $message["FORUM_ID"] == (int) \COption::getOptionInt('meeting', 'comments_forum_id', 0, SITE_ID); return $this->canRead; case "TIMEMAN_ENTRY": if (Loader::includeModule("timeman")) { $dbEntry = \CTimeManEntry::getList(array(), array("ID" => $entityId), false, false, array("ID", "USER_ID")); if ($arEntry = $dbEntry->fetch()) { if ($arEntry["USER_ID"] == $userId) { $this->canRead = true; return $this->canRead; } else { $arManagers = \CTimeMan::getUserManagers($arEntry["USER_ID"]); $this->canRead = in_array($userId, $arManagers); return $this->canRead; } } } $this->canRead = false; return $this->canRead; case "TIMEMAN_REPORT": if (Loader::includeModule("timeman")) { $dbReport = \CTimeManReportFull::getList(array(), array("ID" => $entityId), array("ID", "USER_ID")); if ($arReport = $dbReport->fetch()) { if ($arReport["USER_ID"] == $userId) { $this->canRead = true; return $this->canRead; } else { $arManagers = \CTimeMan::getUserManagers($arReport["USER_ID"]); $this->canRead = in_array($userId, $arManagers); return $this->canRead; } } } $this->canRead = false; return $this->canRead; case "WF": $this->canRead = false; if (Loader::includeModule("bizproc")) { $currentUserId = (int) $this->getUser()->getId(); $participants = \CBPTaskService::getWorkflowParticipants($entityId); if (in_array($currentUserId, $participants)) { $this->canRead = true; } else { $state = \CBPStateService::getWorkflowStateInfo($entityId); if ($state && $currentUserId === (int) $state['STARTED_BY']) { $this->canRead = true; } } } return $this->canRead; } if ((!empty($topic["SOCNET_GROUP_ID"]) || !empty($topic["OWNER_ID"])) && Loader::includeModule("socialnetwork")) { if (!empty($topic["SOCNET_GROUP_ID"])) { $this->canRead = \CSocNetFeatures::isActiveFeature(SONET_ENTITY_GROUP, $topic["SOCNET_GROUP_ID"], "forum") && \CSocNetFeaturesPerms::canPerformOperation($userId, SONET_ENTITY_GROUP, $topic["SOCNET_GROUP_ID"], "forum", "view"); return $this->canRead; } else { $this->canRead = \CSocNetFeatures::isActiveFeature(SONET_ENTITY_USER, $topic["OWNER_ID"], "forum") && \CSocNetFeaturesPerms::canPerformOperation($userId, SONET_ENTITY_USER, $topic["OWNER_ID"], "forum", "view"); return $this->canRead; } } if ($message) { $user = $this->getUser(); if ($user && $userId == $user->getId()) { $userGroups = $user->getUserGroupArray(); } else { $userGroups = array(2); } /** @noinspection PhpDynamicAsStaticMethodCallInspection */ if (\CForumUser::isAdmin($userId, $userGroups)) { $this->canRead = true; return $this->canRead; } /** @noinspection PhpDynamicAsStaticMethodCallInspection */ $perms = \CForumNew::getUserPermission($message["FORUM_ID"], $userGroups); if ($perms >= "Y") { $this->canRead = true; return $this->canRead; } if ($perms < "E" || $perms < "Q" && $message["APPROVED"] != "Y") { $this->canRead = false; return $this->canRead; } /** @noinspection PhpDynamicAsStaticMethodCallInspection */ $forum = \CForumNew::getByID($message["FORUM_ID"]); $this->canRead = $forum["ACTIVE"] == "Y"; return $this->canRead; } } $this->canRead = false; return $this->canRead; }