public static function getWorkflowTasks($workflowId, $withUsers = false, $extendUserInfo = false) { $withUsers = $withUsers ? 1 : 0; $extendUserInfo = $extendUserInfo ? 1 : 0; if (!isset(self::$cachedTasks[$workflowId][$withUsers][$extendUserInfo])) { $tasks = array('COMPLETED' => array(), 'RUNNING' => array()); $ids = array(); $taskIterator = CBPTaskService::GetList(array('MODIFIED' => 'DESC'), array('WORKFLOW_ID' => $workflowId), false, false, array('ID', 'MODIFIED', 'NAME', 'DESCRIPTION', 'PARAMETERS', 'STATUS', 'IS_INLINE', 'ACTIVITY')); while ($task = $taskIterator->getNext()) { $key = $task['STATUS'] == CBPTaskStatus::Running ? 'RUNNING' : 'COMPLETED'; $tasks[$key][] = $task; $ids[] = $task['ID']; } if ($withUsers && sizeof($ids)) { $taskUsers = \CBPTaskService::getTaskUsers($ids); self::joinUsersToTasks($tasks['COMPLETED'], $taskUsers, $extendUserInfo); $tasks['RUNNING_ALL_USERS'] = self::joinUsersToTasks($tasks['RUNNING'], $taskUsers, $extendUserInfo); } $tasks['COMPLETED_CNT'] = sizeof($tasks['COMPLETED']); $tasks['RUNNING_CNT'] = sizeof($tasks['RUNNING']); self::$cachedTasks[$workflowId][$withUsers][$extendUserInfo] = $tasks; } return self::$cachedTasks[$workflowId][$withUsers][$extendUserInfo]; }
$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"]); } $arResult["TASK"]["URL"] = array("VIEW" => htmlspecialcharsbx($arParams["DOCUMENT_URL"]), "~VIEW" => $arParams["DOCUMENT_URL"]); if ($_SERVER["REQUEST_METHOD"] == "POST" && $_POST["action"] == "doTask" && check_bitrix_sessid()) { $arErrorsTmp = array(); if (CBPDocument::PostTaskForm($arResult["TASK"], $arParams['USER_ID'], $_REQUEST + $_FILES, $arErrorsTmp, $USER->GetFormattedName(false))) { $arResult["ShowMode"] = "Success"; $d = CBPTaskService::GetList(array(), array('WORKFLOW_ID' => $arResult['TASK']['WORKFLOW_ID'], 'USER_ID' => $arParams['USER_ID'], 'USER_STATUS' => CBPTaskUserStatus::Waiting), false, false, array("ID")); if ($r = $d->Fetch()) { $backUrl = CComponentEngine::MakePathFromTemplate($arParams["TASK_EDIT_URL"], array("ID" => $r["ID"], "task_id" => $r["ID"])); } else { $backUrl = $arResult["backUrl"]; } if (strlen($backUrl) > 0) { LocalRedirect($backUrl); die; } } else { $arError = array(); foreach ($arErrorsTmp as $e) { $arError[] = array("id" => "bad_task", "text" => $e["message"]); } $e = new CAdminException($arError);
$arFilter["<=MODIFIED"] = $filter_modified_2; } if (strlen($filter_name) > 0) { $arFilter["~NAME"] = "%" . $filter_name . "%"; } $arAddHeaders = array(array("id" => "ID", "content" => "ID", "sort" => "ID", "default" => true), array("id" => "NAME", "content" => GetMessage("BPATL_NAME"), "sort" => "NAME", "default" => true), array("id" => "DESCRIPTION", "content" => GetMessage("BPATL_DESCR"), "default" => true), array("id" => "DESCRIPTION_FULL", "content" => GetMessage("BPATL_DESCR_FULL"), "default" => false), array("id" => "MODIFIED", "content" => GetMessage("BPATL_MODIFIED"), "sort" => "MODIFIED", "default" => true), array("id" => "WORKFLOW_NAME", "content" => GetMessage("BPATL_WORKFLOW_NAME"), "default" => true, "sort" => ""), array("id" => "WORKFLOW_STATE", "content" => GetMessage("BPATL_WORKFLOW_STATE"), "default" => true, "sort" => "")); if ($allowAdminAccess) { $arAddHeaders[] = array("id" => "USER", "content" => GetMessage("BPATL_USER"), "default" => true, "sort" => ""); } $lAdmin->AddHeaders($arAddHeaders); $arVisibleColumns = $lAdmin->GetVisibleHeaderColumns(); $arSelectFields = array("ID", "WORKFLOW_ID", "ACTIVITY", "ACTIVITY_NAME", "MODIFIED", "OVERDUE_DATE", "NAME", "DESCRIPTION", "PARAMETERS"); if (in_array("USER", $arVisibleColumns) && $allowAdminAccess) { $arSelectFields[] = "USER_ID"; } $dbResultList = CBPTaskService::GetList(array($by => $order), $arFilter, false, false, $arSelectFields); $dbResultList = new CAdminResult($dbResultList, $sTableID); $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);
} else { $op = ""; $newKey = $key; } if (!in_array($newKey, array("NAME", "MODIFIED", "OVERDUE_DATE", "WORKFLOW_TEMPLATE_ID", "DESCRIPTION"))) { continue; } if (in_array($newKey, array("NAME", "DESCRIPTION")) && $op == "") { $op = "~"; $value = "%" . $value . "%"; } $arFilter[$op . $newKey] = $value; } $arResult["SORT"] = $gridSort["sort"]; $arResult["RECORDS"] = array(); $dbRecordsList = CBPTaskService::GetList($gridSort["sort"], $arFilter, false, $gridOptions->GetNavParams(), $arSelectFields); while ($arRecord = $dbRecordsList->GetNext()) { $arRecord['MODIFIED'] = FormatDateFromDB($arRecord['MODIFIED']); $arRecord["DOCUMENT_URL"] = CBPDocument::GetDocumentAdminPage($arRecord["PARAMETERS"]["DOCUMENT_ID"]); $arRecord["MODULE_ID"] = $arRecord["PARAMETERS"]["DOCUMENT_ID"][0]; $arRecord["ENTITY"] = $arRecord["PARAMETERS"]["DOCUMENT_ID"][1]; $arRecord["DOCUMENT_ID"] = $arRecord["PARAMETERS"]["DOCUMENT_ID"][2]; $arRecord["URL"] = array("~TASK" => CComponentEngine::MakePathFromTemplate($arParams["~TASK_EDIT_URL"], $arRecord), "TASK" => CComponentEngine::MakePathFromTemplate($arParams["TASK_EDIT_URL"], $arRecord)); if (array_key_exists("DESCRIPTION", $arRecord)) { $arRecord["DESCRIPTION"] = nl2br($arRecord["DESCRIPTION"]); } if (count(array_intersect($arSelectFields, array("WORKFLOW_NAME", "WORKFLOW_STATE", "WORKFLOW_STARTED", "WORKFLOW_STARTED_BY"))) > 0) { $arState = CBPStateService::GetWorkflowState($arRecord["WORKFLOW_ID"]); $arRecord["WORKFLOW_NAME"] = $arState["TEMPLATE_NAME"]; $arRecord["WORKFLOW_STATE"] = $arState["STATE_TITLE"]; $arRecord["WORKFLOW_STARTED"] = FormatDateFromDB($arState["STARTED_FORMATTED"]);
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; }
if (strlen($arResult["FatalErrorMessage"]) <= 0) { $arResult["Block"] = null; $db = CIBlock::GetList(array(), array("ID" => $arParams["BLOCK_ID"], "TYPE" => $arParams["IBLOCK_TYPE"], "ACTIVE" => "Y")); if ($ar = $db->GetNext()) { $arResult["Block"] = $ar; } else { $arResult["FatalErrorMessage"] .= GetMessage("BPWC_WTC_WRONG_IBLOCK") . ". "; } } if (strlen($arResult["FatalErrorMessage"]) <= 0) { $arResult["ShowType"] = "Form"; if ($_SERVER["REQUEST_METHOD"] == "POST" && $_POST["action"] == "doTask" && check_bitrix_sessid()) { $arErrorsTmp = array(); if (CBPDocument::PostTaskForm($arResult["Task"], $USER->GetID(), $_REQUEST + $_FILES, $arErrorsTmp, $USER->GetFormattedName(false))) { $arResult["ShowType"] = "Success"; $d = CBPTaskService::GetList(array(), array("WORKFLOW_ID" => $arResult["Task"]['WORKFLOW_ID'], "USER_ID" => (int) $GLOBALS["USER"]->GetID(), 'STATUS' => CBPTaskStatus::Running), false, false, array("ID")); if ($r = $d->Fetch()) { $backUrl = CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_TASK"], array("task_id" => $r["ID"], "block_id" => $arParams["BLOCK_ID"])); } else { $backUrl = $arResult["BackUrl"]; } if (strlen($backUrl) > 0) { LocalRedirect($backUrl); die; } } else { foreach ($arErrorsTmp as $e) { $arResult["ErrorMessage"] .= $e["message"] . ".<br />"; } } }
} } $CACHE_MANAGER->RegisterTag("USER_CARD_" . intval($arUser['ID'] / TAGGED_user_card_size)); $CACHE_MANAGER->EndTagCache(); if ($obUserCache->StartDataCache()) { $obUserCache->EndDataCache(array('USER_NAME_FORMATTED' => $arResult['USER_NAME_FORMATTED'], 'USER_PERSONAL_PHOTO_SRC' => $arResult['USER_PERSONAL_PHOTO_SRC'])); } } $arResult["SHOW_BIZPROC"] = false; if (CModule::IncludeModule("bizproc") && IsModuleInstalled("socialnetwork")) { $arResult["SHOW_BIZPROC"] = true; $arFilter = array("USER_ID" => $GLOBALS["USER"]->GetID()); if (class_exists('CBPTaskUserStatus')) { $arFilter['USER_STATUS'] = CBPTaskUserStatus::Waiting; } $dbResultList = CBPTaskService::GetList(array(), $arFilter, array("USER_ID"), false, array("COUNT" => "ID")); $arResult["BZP_CNT"] = 0; if ($arResultList = $dbResultList->Fetch()) { $arResult["BZP_CNT"] = intval($arResultList["CNT"]); } } // live updates counter $arCounters = CUserCounter::GetValues($GLOBALS["USER"]->GetID(), SITE_ID); $arResult["LOG_ITEMS_TOTAL"] = isset($arCounters["**"]) ? intval($arCounters["**"]) : 0; // external mailbox messages counter $arResult["urlToExternalMailbox"] = ""; $arResult["EXTERNAL_MAIL_CNT"] = 0; // exchange messages counter $arResult["urlToExchangeBox"] = ""; $arResult["EXCHANGE_CNT"] = 0; if (CModule::IncludeModule("intranet") && CIntranetUtils::IsExternalMailAvailable()) {
</select> </td> </tr> <tr> <td><?php echo GetMessage("BPATL_WORKFLOW_NAME"); ?> :</td> <td> <select name="filter_workflow_template_id"> <option value=""><?php echo GetMessage("BPATL_FILTER_STATUS_ALL"); ?> </option> <?php $dbResTmp = CBPTaskService::GetList(array("WORKFLOW_TEMPLATE_NAME" => "ASC"), array(), array("WORKFLOW_TEMPLATE_TEMPLATE_ID", "WORKFLOW_TEMPLATE_NAME"), false, array("WORKFLOW_TEMPLATE_TEMPLATE_ID", "WORKFLOW_TEMPLATE_NAME")); while ($arResTmp = $dbResTmp->GetNext()) { ?> <option value="<?php echo $arResTmp["WORKFLOW_TEMPLATE_TEMPLATE_ID"]; ?> "><?php echo $arResTmp["WORKFLOW_TEMPLATE_NAME"]; ?> </option> <?php } ?> </select> </td> </tr>
/** * Метод возвращает массив заданий для данного пользователя в данном рабочем потоке. * Возвращаемый массив имеет вид: * array( * array( * "ID" => код_задания, * "NAME" => название_задания, * "DESCRIPTION" => описание_задания, * ), * . . . * ) * * @param int $userId - код пользователя. * @param string $workflowId - код рабочего потока. * @return array - массив заданий. */ public static function GetUserTasksForWorkflow($userId, $workflowId) { $userId = intval($userId); if ($userId <= 0) return array(); $workflowId = trim($workflowId); if (strlen($workflowId) <= 0) return array(); $arResult = array(); $dbTask = CBPTaskService::GetList( array(), array("WORKFLOW_ID" => $workflowId, "USER_ID" => $userId), false, false, array("ID", "WORKFLOW_ID", "NAME", "DESCRIPTION") ); while ($arTask = $dbTask->GetNext()) $arResult[] = $arTask; return $arResult; }
} } } } if ($bCanStartWorkflow) { $documentId = CBPVirtualDocument::CreateDocument(0, array("IBLOCK_ID" => $arParams["BLOCK_ID"], "NAME" => GetMessage("BPWC_WRC_Z"), "CREATED_BY" => "user_" . $GLOBALS["USER"]->GetID())); $arErrorsTmp = array(); $wfId = CBPDocument::StartWorkflow($workflowTemplateId, array("bizproc", "CBPVirtualDocument", $documentId), array_merge($arWorkflowParameters, array("TargetUser" => "user_" . intval($GLOBALS["USER"]->GetID()))), $arErrorsTmp); if (count($arErrorsTmp) > 0) { $arResult["ShowMode"] = "StartWorkflowError"; foreach ($arErrorsTmp as $e) { $arResult["ErrorMessage"] .= "[" . $e["code"] . "] " . $e["message"] . "<br />"; } } else { $arResult["ShowMode"] = "StartWorkflowSuccess"; $d = CBPTaskService::GetList(array(), array("WORKFLOW_ID" => $wfId, "USER_ID" => intval($GLOBALS["USER"]->GetID())), false, false, array("ID")); if ($r = $d->Fetch()) { $backUrl = CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_TASK"], array("task_id" => $r["ID"], "block_id" => $arParams["BLOCK_ID"])); } else { $backUrl = $arResult["BackUrl"]; } LocalRedirect($backUrl); die; } } else { $p = $_SERVER["REQUEST_METHOD"] == "POST" && strlen($_POST["DoStartParamWorkflow"]) > 0; $keys = array_keys($arResult["TEMPLATE"]["PARAMETERS"]); foreach ($keys as $key) { $v = $p ? $_REQUEST[$key] : $arResult["TEMPLATE"]["PARAMETERS"][$key]["Default"]; if (!is_array($v)) { $arResult["ParametersValues"][$key] = CBPHelper::ConvertParameterValues($v);
} $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"]); } $arResult["TASK"]["URL"] = array("VIEW" => htmlspecialcharsbx($arParams["DOCUMENT_URL"]), "~VIEW" => $arParams["DOCUMENT_URL"]); if ($_SERVER["REQUEST_METHOD"] == "POST" && $_POST["action"] == "doTask" && check_bitrix_sessid()) { $arErrorsTmp = array(); if (CBPDocument::PostTaskForm($arResult["TASK"], $GLOBALS["USER"]->GetID(), $_REQUEST + $_FILES, $arErrorsTmp, $GLOBALS["USER"]->GetFormattedName(false))) { $arResult["ShowMode"] = "Success"; $d = CBPTaskService::GetList(array(), array("WORKFLOW_ID" => $arResult["TASK"]["WORKFLOW_ID"], "USER_ID" => $arParams["USER_ID"]), false, false, array("ID")); if ($r = $d->Fetch()) { $backUrl = CComponentEngine::MakePathFromTemplate($arParams["TASK_EDIT_URL"], array("ID" => $r["ID"], "task_id" => $r["ID"])); } else { $backUrl = $arResult["backUrl"]; } if (strlen($backUrl) > 0) { LocalRedirect($backUrl); die; } } else { $arError = array(); foreach ($arErrorsTmp as $e) { $arError[] = array("id" => "bad_task", "text" => $e["message"]); } $e = new CAdminException($arError);
if (!$GLOBALS["USER"]->IsAuthorized() || !check_bitrix_sessid() || !CModule::IncludeModule("bizproc")) { die; } $taskId = isset($_REQUEST['TASK_ID']) ? (int) $_REQUEST['TASK_ID'] : 0; $userId = isset($_REQUEST['USER_ID']) ? (int) $_REQUEST['USER_ID'] : 0; if (!$userId) { $userId = $GLOBALS['USER']->getId(); } if ($userId != $GLOBALS["USER"]->getId()) { if (!CBPHelper::checkUserSubordination($GLOBALS["USER"]->GetID(), $userId)) { die; } } $task = null; if ($taskId > 0) { $dbTask = CBPTaskService::GetList(array(), array("ID" => $taskId, "USER_ID" => $userId), false, false, array("ID", "WORKFLOW_ID")); $task = $dbTask->fetch(); } if (!$task) { die; } $APPLICATION->RestartBuffer(); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo LANGUAGE_ID; ?> " lang="<?php echo LANGUAGE_ID; ?> ">
<?php define("NOT_CHECK_PERMISSIONS", true); require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php"; $arJsonData = array(); if (!CModule::IncludeModule("bizproc")) { $arJsonData["error"] = "Module is not installed"; } if ($_SERVER["REQUEST_METHOD"] == "POST" && $_POST["action"] == "doTask" && check_bitrix_sessid()) { if ($_POST["TASK_ID"] > 0) { $dbTask = CBPTaskService::GetList(array(), array("ID" => $_POST["TASK_ID"], "USER_ID" => $GLOBALS["USER"]->GetID()), false, false, array("ID", "WORKFLOW_ID", "ACTIVITY", "ACTIVITY_NAME", "MODIFIED", "OVERDUE_DATE", "NAME", "DESCRIPTION", "PARAMETERS", 'USER_STATUS')); $curTask = $dbTask->GetNext(); if ($curTask) { if (isset($curTask['USER_STATUS']) && class_exists('CBPTaskUserStatus') && $curTask['USER_STATUS'] > CBPTaskUserStatus::Waiting) { $arJsonData["success"] = "Y"; } else { $arErrorsTmp = array(); if (CBPDocument::PostTaskForm($curTask, $GLOBALS["USER"]->GetID(), $_REQUEST + $_FILES, $arErrorsTmp, $GLOBALS["USER"]->GetFormattedName(false))) { $arJsonData["success"] = "Y"; } else { $arError = array(); foreach ($arErrorsTmp as $e) { $arError[] = $e["message"]; } $arJsonData["error"] = implode("", $arError); } } } else { $arJsonData["error"] = "Task not found."; } } else {
if ($allowAdminAccess) { if ($userId <= 0) { $userId = $USER->GetID(); } } else { $userId = $USER->GetID(); } $arTask = false; if ($taskId > 0) { $dbTask = CBPTaskService::GetList(array(), array("ID" => $taskId, "USER_ID" => $allowAdminAccess ? $userId : $USER->GetID()), false, false, array("ID", "WORKFLOW_ID", "ACTIVITY", "ACTIVITY_NAME", "MODIFIED", "OVERDUE_DATE", "NAME", "DESCRIPTION", "PARAMETERS", "USER_ID")); $arTask = $dbTask->GetNext(); } if (!$arTask) { $workflowId = trim($_REQUEST["workflow_id"]); if (strlen($workflowId) > 0) { $dbTask = CBPTaskService::GetList(array(), array("WORKFLOW_ID" => $workflowId, "USER_ID" => $allowAdminAccess ? $userId : $USER->GetID()), false, false, array("ID", "WORKFLOW_ID", "ACTIVITY", "ACTIVITY_NAME", "MODIFIED", "OVERDUE_DATE", "NAME", "DESCRIPTION", "PARAMETERS", "USER_ID")); $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 { $backUrl = "/" . ltrim(trim($_REQUEST["back_url"]), "\\/"); if (strlen($backUrl) <= 0) { $backUrl = "/bitrix/admin/bizproc_task_list.php?lang=" . LANGUAGE_ID; } if (strlen($backUrl) <= 0 && isset($arTask["PARAMETERS"]["DOCUMENT_ID"])) { $backUrl = CBPDocument::GetDocumentAdminPage($arTask["PARAMETERS"]["DOCUMENT_ID"]); }
define("STOP_STATISTICS", true); require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php"; $result = array('SUCCESS' => true); $user = $GLOBALS["USER"]; if (!CModule::IncludeModule("bizproc") || !CModule::IncludeModule("iblock")) { $result['SUCCESS'] = false; } if ($_SERVER["REQUEST_METHOD"] != "POST" || !$user->IsAuthorized() || !check_bitrix_sessid()) { $result['SUCCESS'] = false; $result['ERROR'] = 'Access denied.'; } if ($result['SUCCESS']) { $taskId = (int) $_REQUEST['TASK_ID']; $task = false; if ($taskId > 0) { $dbTask = CBPTaskService::GetList(array(), array("ID" => $taskId, "USER_ID" => $user->getId(), 'USER_STATUS' => CBPTaskUserStatus::Waiting), false, false, array("ID", "WORKFLOW_ID", "ACTIVITY", "ACTIVITY_NAME", "MODIFIED", "OVERDUE_DATE", "NAME", "DESCRIPTION", "PARAMETERS")); $task = $dbTask->fetch(); } if (!$task) { $result['SUCCESS'] = false; $result['ERROR'] = 'Task not found.'; } else { $task["PARAMETERS"]["DOCUMENT_ID"] = CBPStateService::GetStateDocumentId($task['WORKFLOW_ID']); $task["MODULE_ID"] = $task["PARAMETERS"]["DOCUMENT_ID"][0]; $task["ENTITY"] = $task["PARAMETERS"]["DOCUMENT_ID"][1]; $task["DOCUMENT_ID"] = $task["PARAMETERS"]["DOCUMENT_ID"][2]; $arErrorsTmp = array(); if (SITE_CHARSET != "utf-8" && !empty($_SERVER['HTTP_BX_AJAX'])) { CUtil::decodeURIComponent($_REQUEST); CUtil::decodeURIComponent($_FILES); }
$errorMessage = ""; $allowAdminAccess = $USER->IsAdmin(); $taskId = intval($_REQUEST["id"]); $userId = intval($_REQUEST["uid"]); if (!$allowAdminAccess || $userId <= 0) { $userId = $USER->GetID(); } $arTask = false; if ($taskId > 0) { $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"]);
public static function GetUserWorkflowTaskCount($workflowIDs, $userID = 0) { if (!is_array($workflowIDs)) { return 0; } if (!(IsModuleInstalled('bizproc') && CModule::IncludeModule('bizproc'))) { return 0; } $userID = intval($userID); if ($userID <= 0) { $userID = CCrmSecurityHelper::GetCurrentUserID(); } $filter = array('USER_ID' => $userID); $workflowQty = count($workflowIDs); if ($workflowQty > 1) { //IMPORTANT: will produce SQL error due to CBPTaskService::GetList bug //$filter['@WORKFLOW_ID'] = $workflowIDs; $filter['WORKFLOW_ID'] = $workflowIDs[0]; } /*elseif($workflowQty === 1) { $filter['WORKFLOW_ID'] = $workflowIDs[0]; }*/ $result = CBPTaskService::GetList(array(), $filter, array(), false, array()); return is_int($result) ? $result : 0; }
$arParams["PAGE_VAR"] = "page"; } $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; }
<?php if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) { die; } $sTplDir = trim(preg_replace("'[\\\\/]+'", "/", dirname(__FILE__) . "/")); $arParams["TASK_ID"] = intval($arResult["VARIABLES"]["ID"]); $arParams["USER_ID"] = intval(empty($arParams["USER_ID"]) ? $GLOBALS["USER"]->GetID() : $arParams["USER_ID"]); if ($arParams["TASK_ID"] > 0) { $dbTask = CBPTaskService::GetList(array(), array("ID" => $arParams["TASK_ID"], "USER_ID" => $arParams["USER_ID"]), false, false, array("ID", "WORKFLOW_ID", "ACTIVITY", "ACTIVITY_NAME", "MODIFIED", "OVERDUE_DATE", "NAME", "DESCRIPTION", "PARAMETERS")); $arResult["TASK"] = $dbTask->GetNext(); } if ($arResult["TASK"]) { $docID = $arResult["TASK"]["PARAMETERS"]["DOCUMENT_ID"][2]; $arResult["VARIABLES"]["ELEMENT_ID"] = $docID; $arResult["VARIABLES"]["ACTION"] = "EDIT"; $arInfo = (include $sTplDir . "tab_edit.php"); if ($arParams["WORKFLOW"] == "bizproc") { include $sTplDir . "tab_bizproc_history.php"; include $sTplDir . "tab_bizproc_task.php"; include $sTplDir . "tab_versions.php"; } elseif ($arParams["WORKFLOW"] == "workflow") { include $sTplDir . "tab_workflow_history.php"; } else { include $sTplDir . "tab_bizproc_history.php"; } include $sTplDir . "tab_comments.php"; if (!isset($_GET[$arParams["FORM_ID"] . '_active_tab'])) { $_REQUEST[$arParams["FORM_ID"] . '_active_tab'] = "tab_bizproc_view"; } if (!$arParams["FORM_ID"]) {