public function indexAction(Request $request, SessionInterface $session) { $issueId = $request->get('id'); if (Util::checkUserIsLoggedIn()) { $issue = $this->getRepository(Issue::class)->getById($issueId, $session->get('user/id')); $clientSettings = $session->get('client/settings'); $session->set('selected_product_id', SystemProduct::SYS_PRODUCT_YONGO); } else { $clientId = $this->getRepository(UbirimiClient::class)->getClientIdAnonymous(); $session->set('client/id', $clientId); $session->set('user/id', null); $clientSettings = $this->getRepository(UbirimiClient::class)->getSettings($session->get('client/id')); $issue = $this->getRepository(Issue::class)->getById($issueId, $session->get('user/id')); $session->set('yongo/settings', $this->getRepository(UbirimiClient::class)->getYongoSettings($session->get('client/id'))); } $issueValid = true; if ($issue) { $projectId = $issue['issue_project_id']; $session->set('selected_project_id', $projectId); $issueProject = $this->getRepository(YongoProject::class)->getById($projectId); $hasBrowsingPermission = $this->getRepository(YongoProject::class)->userHasPermission(array($projectId), Permission::PERM_BROWSE_PROJECTS, $session->get('user/id'), $issueId); } else { $issueValid = false; } // before going further, check to is if the issue id a valid id if (!$issue || !isset($issueProject) || isset($issueProject) && $session->get('client/id') != $issueProject['client_id']) { $issueValid = false; } if ($issueValid && !$hasBrowsingPermission) { Util::checkUserIsLoggedInAndRedirect('?context=/yongo/issue/' . $issueId); } if ($issueValid) { $sectionPageTitle = $clientSettings['title_name'] . ' / ' . SystemProduct::SYS_PRODUCT_YONGO_NAME . ' / ' . $issue['project_code'] . '-' . $issue['nr'] . ' ' . $issue['summary']; $components = $this->getRepository(IssueComponent::class)->getByIssueIdAndProjectId($issueId, $projectId); $versionsAffected = $this->getRepository(IssueVersion::class)->getByIssueIdAndProjectId($issueId, $projectId, Issue::ISSUE_AFFECTED_VERSION_FLAG); $versionsTargeted = $this->getRepository(IssueVersion::class)->getByIssueIdAndProjectId($issueId, $projectId, Issue::ISSUE_FIX_VERSION_FLAG); $arrayListResultIds = null; if ($session->has('array_ids')) { $arrayListResultIds = $session->get('array_ids'); $index = array_search($issueId, $arrayListResultIds); } $hasCreatePermission = $this->getRepository(YongoProject::class)->userHasPermission($projectId, Permission::PERM_CREATE_ISSUE, $session->get('user/id')); $hasEditPermission = $this->getRepository(YongoProject::class)->userHasPermission($projectId, Permission::PERM_EDIT_ISSUE, $session->get('user/id')); $hasDeletePermission = $this->getRepository(YongoProject::class)->userHasPermission($projectId, Permission::PERM_DELETE_ISSUE, $session->get('user/id')); $hasAssignPermission = $this->getRepository(YongoProject::class)->userHasPermission($projectId, Permission::PERM_ASSIGN_ISSUE, $session->get('user/id')); $hasAssignablePermission = $this->getRepository(YongoProject::class)->userHasPermission($projectId, Permission::PERM_ASSIGNABLE_USER, $session->get('user/id')); $hasLinkIssuePermission = $this->getRepository(YongoProject::class)->userHasPermission($projectId, Permission::PERM_LINK_ISSUE, $session->get('user/id')); $hasWorkOnIssuePermission = $this->getRepository(YongoProject::class)->userHasPermission($projectId, Permission::PERM_WORK_ON_ISSUE, $session->get('user/id')); $hasMoveIssuePermission = $this->getRepository(YongoProject::class)->userHasPermission($projectId, Permission::PERM_MOVE_ISSUE, $session->get('user/id')); $hasCreateAttachmentPermission = $this->getRepository(YongoProject::class)->userHasPermission($projectId, Permission::PERM_CREATE_ATTACHMENTS, $session->get('user/id')); $hasAddCommentsPermission = $this->getRepository(YongoProject::class)->userHasPermission($projectId, Permission::PERM_ADD_COMMENTS, $session->get('user/id')); $workflowUsed = $this->getRepository(YongoProject::class)->getWorkflowUsedForType($projectId, $issue[Field::FIELD_ISSUE_TYPE_CODE]); $step = $this->getRepository(Workflow::class)->getStepByWorkflowIdAndStatusId($workflowUsed['id'], $issue[Field::FIELD_STATUS_CODE]); $stepProperties = $this->getRepository(Workflow::class)->getStepProperties($step['id'], 'array'); $issueEditableProperty = true; for ($i = 0; $i < count($stepProperties); $i++) { if ($stepProperties[$i]['name'] == StepProperty::ISSUE_EDITABLE && $stepProperties[$i]['value'] == 'false') { $issueEditableProperty = false; } } $workflowActions = $this->getRepository(Workflow::class)->getTransitionsForStepId($workflowUsed['id'], $step['id']); $screenData = $this->getRepository(YongoProject::class)->getScreenData($issueProject, $issue[Field::FIELD_ISSUE_TYPE_CODE], SystemOperation::OPERATION_CREATE, 'array'); $childrenIssues = null; $parentIssue = null; if ($issue['parent_id'] == null) { $childrenIssues = UbirimiContainer::get()['repository']->get(Issue::class)->getByParameters(array('parent_id' => $issue['id']), $session->get('user/id'), null, $session->get('user/id')); } else { $parentIssue = $this->getRepository(Issue::class)->getByParameters(array('issue_id' => $issue['parent_id']), $session->get('user/id'), null, $session->get('user/id')); } $customFieldsData = $this->getRepository(CustomField::class)->getCustomFieldsData($issue['id']); $customFieldsDataUserPickerMultipleUser = $this->getRepository(CustomField::class)->getUserPickerData($issue['id']); $subTaskIssueTypes = $this->getRepository(YongoProject::class)->getSubTasksIssueTypes($projectId); $attachments = $this->getRepository(IssueAttachment::class)->getByIssueId($issue['id'], true); $countAttachments = count($attachments); if ($countAttachments) { $hasDeleteOwnAttachmentsPermission = $this->getRepository(YongoProject::class)->userHasPermission($projectId, Permission::PERM_DELETE_OWN_ATTACHMENTS, $session->get('user/id')); $hasDeleteAllAttachmentsPermission = $this->getRepository(YongoProject::class)->userHasPermission($projectId, Permission::PERM_DELETE_OWN_ATTACHMENTS, $session->get('user/id')); } // get the worklogs $workLogs = $this->getRepository(WorkLog::class)->getByIssueId($issueId); // get the watchers, if any $watchers = $this->getRepository(Watcher::class)->getByIssueId($issueId); $linkedIssues = $this->getRepository(IssueLinkType::class)->getLinksByParentId($issueId); $linkIssueTypes = $this->getRepository(IssueLinkType::class)->getByClientId($session->get('client/id')); $issueLinkingFlag = $session->get('yongo/settings/issue_linking_flag'); $hoursPerDay = $session->get('yongo/settings/time_tracking_hours_per_day'); $daysPerWeek = $session->get('yongo/settings/time_tracking_days_per_week'); $timeTrackingFlag = $session->get('yongo/settings/time_tracking_flag'); $slasPrintData = null; if ($issueProject['help_desk_enabled_flag']) { $slasPrintData = $this->getRepository(Issue::class)->updateSLAValue($issue, $session->get('client/id'), $clientSettings); } // voters and watchers $hasViewVotersAndWatchersPermission = $this->getRepository(YongoProject::class)->userHasPermission($projectId, Permission::PERM_VIEW_VOTERS_AND_WATCHERS, $session->get('user/id')); $recentIssues = $session->get('yongo/recent_issues'); if (!isset($recentIssues)) { $recentIssues = array(); } $issueFoundInRecent = false; for ($i = 0; $i < count($recentIssues); $i++) { if ($recentIssues[$i]['link'] == LinkHelper::getYongoIssueViewLink($issue['id'], $issue['nr'], $issue['project_code'], 1)) { $issueFoundInRecent = true; break; } } if (!$issueFoundInRecent) { array_unshift($recentIssues, array('summary' => $issue['summary'], 'project_code' => $issue['project_code'], 'nr' => $issue['nr'], 'link' => LinkHelper::getYongoIssueViewLink($issue['id'], $issue['nr'], $issue['project_code'], 1))); $recentIssues = array_slice($recentIssues, 0, 5); } $session->set('yongo/recent_issues', $recentIssues); } $menuSelectedCategory = 'issue'; return $this->render(__DIR__ . '/../../Resources/views/issue/View.php', get_defined_vars()); }