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; }
$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();
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; }