%PDF- %PDF-
Direktori : /proc/self/root/home/bitrix/www/bitrix/components/bitrix/bizproc.workflow.faces/ |
Current File : //proc/self/root/home/bitrix/www/bitrix/components/bitrix/bizproc.workflow.faces/class.php |
<?php use Bitrix\Main; if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) die(); if (!\Bitrix\Main\Loader::includeModule('bizproc')) { return; } class BizprocWorkflowFaces extends \CBitrixComponent { protected $workflowId; protected function getWorkflowId() { if ($this->workflowId === null) { $this->workflowId = !empty($this->arParams['WORKFLOW_ID']) ? preg_replace('#[^A-Z0-9\.]#i', '', $this->arParams['WORKFLOW_ID']) : 0; } return $this->workflowId; } protected function getTargetTaskId() { return isset($this->arParams['TARGET_TASK_ID']) ? (int)$this->arParams['TARGET_TASK_ID'] : 0; } protected function getStartedBy($workflowState) { if ($workflowState['STARTED_BY']) { $iterator = CUser::GetList($by="id", $order="asc", array('ID' => $workflowState['STARTED_BY']), array('FIELDS' => array('ID', 'PERSONAL_PHOTO', 'NAME', 'LAST_NAME', 'SECOND_NAME', 'LOGIN', 'TITLE')) ); $startedUser = $iterator->fetch(); if ($startedUser) return $startedUser; } return false; } 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()); } protected function rebuildTaskList(&$tasks, $taskId) { $target = null; $historyMode = false; while ($task = array_shift($tasks['RUNNING'])) { if ($task['ID'] == $taskId) { $target = $task; break; } } if (!$target) { while ($task = array_shift($tasks['COMPLETED'])) { if ($task['ID'] == $taskId) { $target = $task; break; } else $historyMode = true; } } if ($target) { $tasks['RUNNING'] = array($target); } $tasks['COMPLETED_CNT'] = sizeof($tasks['COMPLETED']); $tasks['RUNNING_CNT'] = sizeof($tasks['RUNNING']); $tasks['RUNNING_ALL_USERS'] = isset($tasks['RUNNING'][0]) ? $tasks['RUNNING'][0]['USERS'] : array(); $tasks['IS_HISTORY'] = $historyMode; } public function executeComponent() { if ($this->getWorkflowId()) { $workflowState = $this->getWorkflowStateInfo(); $tasks = CBPViewHelper::getWorkflowTasks($workflowState['ID'], true, true); $lastUserStatus = CBPTaskUserStatus::Ok; if (isset($tasks['COMPLETED'][0]['USERS'][0]['STATUS'])) $lastUserStatus = $tasks['COMPLETED'][0]['USERS'][0]['STATUS']; if ($this->getTargetTaskId()) $this->rebuildTaskList($tasks, $this->getTargetTaskId()); $this->arResult = array( 'WORKFLOW_ID' => $this->getWorkflowId(), 'STATE_TITLE' => $workflowState['WORKFLOW_STATUS'] === null && empty($tasks['IS_HISTORY'])? $workflowState['STATE_TITLE'] : '', 'TASKS' => $tasks, 'STARTED_BY' => $this->getStartedBy($workflowState), 'DOCUMENT_ID' => $workflowState['DOCUMENT_ID'], 'LAST_USER_STATUS' => $lastUserStatus, ); } $this->includeComponentTemplate(); } public static function prepareTasksForJs($tasks) { $result = array(); foreach ($tasks as $task) { $t = array( 'ID' => $task['ID'], 'NAME' => $task['NAME'], 'USERS' => array() ); foreach ($task['USERS'] as $user) { $t['USERS'][] = array( 'USER_ID' => $user['USER_ID'], 'STATUS' => $user['STATUS'], 'FULL_NAME' => htmlspecialcharsbx($user['FULL_NAME']), 'PHOTO_SRC' => htmlspecialcharsbx($user['PHOTO_SRC']), ); } $result[] = $t; } return $result; } }