'?object', // 当前Bug。 ); protected function created() { $data = $this->prop('data'); if($data) return; $bug = $this->prop('bug'); if(!$bug) $bug = data('bug'); if(!$bug) return; global $lang, $config; $canViewCase = common::hasPriv('testcase', 'view'); $canViewStory = common::hasPriv('story', 'view'); $canViewTask = common::hasPriv('task', 'view'); $canViewMR = common::hasPriv('mr', 'view'); $linkedCommits = $this->prop('linkedCommits', data('linkCommits')); $data = array(); /* Related bugs. */ if($config->edition == 'open') { $relatedBugList = isset($bug->relatedBugTitles) ? $bug->relatedBugTitles :array(); $relatedBugItems = array(); foreach($relatedBugList as $relatedBugID => $relatedBugTitle) { $relatedBugItem = new stdclass(); $relatedBugItem->id = $relatedBugID; $relatedBugItem->title = $relatedBugTitle; $relatedBugItems[] = $relatedBugItem; } $data['relatedBug'] = array ( 'title' => $lang->bug->relatedBug, 'items' => $relatedBugItems, 'url' => createLink('bug', 'view', 'bugID={id}'), 'data-toggle' => 'modal', 'data-size' => 'lg' ); } /* To cases. */ $toCaseList = isset($bug->toCases) ? $bug->toCases :array(); $toCaseItems = array(); foreach($toCaseList as $caseID => $caseTitle) { $toCaseItem = new stdclass(); $toCaseItem->id = $caseID; $toCaseItem->title = $caseTitle; $toCaseItems[] = $toCaseItem; } $data['toCase'] = array ( 'title' => $lang->bug->toCase, 'items' => $toCaseItems, 'url' => $canViewCase ? createLink('testcase', 'view', 'caseID={id}') : false, 'props' => $canViewCase ? array('data-toggle' => 'modal', 'data-size' => 'lg') : array() ); /* To stories. */ $toStoryItems = array(); if($bug->toStory) { $toStoryItem = new stdclass(); $toStoryItem->id = $bug->toStory; $toStoryItem->title = $bug->toStoryTitle; $toStoryItems[] = $toStoryItem; } $data['toStory'] = array ( 'title' => $lang->bug->toStory, 'items' => $toStoryItems, 'url' => $canViewStory ? createLink('story', 'view', 'story={id}') : false, 'props' => $canViewStory ? array('data-toggle' => 'modal', 'data-size' => 'lg') : array() ); /* To tasks. */ $toTaskItems = array(); if($bug->toTask) { $toTaskItem = new stdclass(); $toTaskItem->id = $bug->toTask; $toTaskItem->title = $bug->toTaskTitle; $toTaskItems[] = $toTaskItem; } $data['toTask'] = array ( 'title' => $lang->bug->toTask, 'items' => $toTaskItems, 'url' => $canViewTask ? createLink('task', 'view', 'task={id}') : false, 'props' => $canViewTask ? array('data-toggle' => 'modal', 'data-size' => 'lg') : array() ); /* Linked MR. */ $linkMRList = isset($bug->linkMRTitles) ? $bug->linkMRTitles :array(); $linkedPRs = $this->prop('linkedPRs', data('linkedPRs')); if(helper::hasFeature('devops')) { $data['mr'] = array ( 'title' => $lang->bug->linkMR, 'items' => $linkMRList, 'url' => $canViewMR ? createLink('mr', 'view', 'MRID={id}') : false, 'props' => array('data-app' => 'devops'), 'onRender' => function($item, $mr) use($lang) { $item['titleClass'] = 'w-0 flex-1'; $statusClass = $mr->status; if($mr->status == 'opened') $statusClass = 'draft'; if($mr->status == 'merged') $statusClass = 'done'; $item['content'] = array('html' => "" . zget($lang->mr->statusList, $mr->status) . ''); return $item; } ); if($linkedPRs) { $data['pr'] = array ( 'title' => $lang->bug->linkPR, 'items' => $linkedPRs, 'url' => hasPriv('pullreq', 'view') ? createLink('pullreq', 'view', 'MRID={id}') : false, 'props' => array('data-app' => 'devops'), 'onRender' => function($item, $mr) use($lang) { $item['titleClass'] = 'w-0 flex-1'; $statusClass = $mr->status; if($mr->status == 'opened') $statusClass = 'draft'; if($mr->status == 'merged') $statusClass = 'done'; $item['content'] = array('html' => "" . zget($lang->mr->statusList, $mr->status) . ''); return $item; } ); } $data['linkCommit'] = array ( 'title' => $lang->bug->linkCommit, 'items' => $linkedCommits, 'url' => false, 'onRender' => function($item, $commit) { $item['text'] = $commit->comment; if(hasPriv('repo', 'revision')) { $item['url'] = createLink('repo', 'revision', "repoID={$commit->repo}&objectID=0&revision={$commit->revision}"); $item['data-app'] = 'devops'; } return $item; } ); } $this->setProp('data', $data); } }