| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202 |
- <?php
- /**
- * The view file of bug module of ZenTaoPMS.
- *
- * @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.zentao.net)
- * @license ZPL(https://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
- * @author Yuting Wang<wangyuting@easycorp.ltd>
- * @package bug
- * @link https://www.zentao.net
- */
- namespace zin;
- global $app;
- include($this->app->getModuleRoot() . 'ai/ui/promptmenu.html.php');
- /* 检查是否需要确认撤销/移除。*/
- /* Build confirmeObject. */
- if($this->config->edition == 'ipd')
- {
- $bug = $this->loadModel('story')->getAffectObject(array(), 'bug', $bug);
- if(!empty($bug->confirmeActionType)) $config->bug->actions->view['mainActions'] = array('confirmDemandRetract', 'confirmDemandUnlink');
- if(!empty($bug->confirmeActionType)) $config->bug->actions->view['suffixActions'] = array();
- }
- jsVar('bugID', $bug->id);
- jsVar('productID', $bug->product);
- jsVar('branchID', $bug->branch);
- jsVar('errorNoExecution', $lang->bug->noExecution);
- jsVar('errorNoProject', $lang->bug->noProject);
- jsVar('isInModal', isInModal());
- jsVar('executions', $executions);
- jsVar('disableExecution', $lang->project->disableExecution);
- $canModify = !empty($project) ? common::canModify('project', $project) : true;
- $isInModal = isInModal();
- $canCreateBug = $canModify && $this->app->tab != 'devops' && hasPriv('bug', 'create');
- $canViewRepo = hasPriv('repo', 'revision');
- $canViewMR = hasPriv('mr', 'view');
- $canViewBug = hasPriv('bug', 'view');
- $operateList = $this->loadModel('common')->buildOperateMenu($bug);
- /* 初始化头部右上方工具栏。Init detail toolbar. */
- $toolbar = array();
- if(!$isInModal && $canCreateBug)
- {
- $toolbar[] = array
- (
- 'icon' => 'plus',
- 'type' => 'primary',
- 'text' => $lang->bug->create,
- 'data-app' => $app->tab,
- 'url' => createLink('bug', 'create', "productID={$product->id}&branch={$bug->branch}&extras=projectID={$bug->project},executionID={$bug->execution},moduleID={$bug->module}")
- );
- }
- /* 初始化底部操作栏。Init bottom actions. */
- $actions = array();
- if(!$bug->deleted && $canModify)
- {
- /* Construct common actions for bug. */
- $actions = $operateList['mainActions'];
- if(!empty($operateList['suffixActions']))
- {
- if($app->getClientLang() == 'en') $actions = array_merge($actions, $operateList['suffixActions']);
- if($app->getClientLang() != 'en') $actions = array_merge($actions, array(array('type' => 'divider')), $operateList['suffixActions']);
- }
- $this->loadModel('repo');
- $hasRepo = $this->repo->getListByProduct($bug->product, implode(',', $config->repo->gitServiceTypeList), 1);
- foreach($actions as $key => $action)
- {
- if(!$hasRepo && isset($action['icon']) && $action['icon'] == 'treemap')
- {
- unset($actions[$key]);
- continue;
- }
- if(isset($action['id']) && $action['id'] == 'toStory')
- {
- if(!empty($project))
- {
- if(empty($project->hasProduct)) $action['data-app'] = $app->tab == 'execution' ? 'execution' : 'project';
- if($project->type == 'project' && $project->multiple == '0') $action['data-app'] = 'project';
- if($isInModal)
- {
- $action['data-load'] = 'modal';
- $action['data-size'] = 'lg';
- }
- }
- $actions[$key] = $action;
- }
- if(!empty($action['icon']) && $action['icon'] == 'edit' && isInModal())
- {
- $action['data-load'] = 'modal';
- $action['data-size'] = 'lg';
- $actions[$key] = $action;
- }
- }
- }
- /* 初始化主栏内容。Init sections in main column. */
- $sections = array();
- $sections[] = setting()
- ->title($lang->bug->legendSteps)
- ->control('html')
- ->content($bug->steps);
- if($bug->files)
- {
- $sections[] = array
- (
- 'control' => 'fileList',
- 'files' => $bug->files,
- 'object' => $bug,
- 'padding' => false
- );
- }
- /* 初始化侧边栏标签页。Init sidebar tabs. */
- $tabs = array();
- /* 基本信息。Legend basic items. */
- $tabs[] = setting()
- ->group('basic')
- ->title($lang->bug->legendBasicInfo)
- ->control('bugBasicInfo')
- ->statusText($this->processStatus('bug', $bug));
- /* 一生信息。Legend life items. */
- $tabs[] = setting()
- ->group('basic')
- ->title($lang->bug->legendLife)
- ->control('bugLifeInfo');
- $tabs[] = setting()
- ->group('related')
- ->title(!empty($project->multiple) ? $lang->bug->legendPRJExecStoryTask : $lang->bug->legendExecStoryTask)
- ->control('bugRelatedInfo');
- $tabs['bugRelatedList'] = setting()
- ->group('related')
- ->title($lang->bug->legendMisc)
- ->control('bugRelatedList');
- detail
- (
- set::urlFormatter(array('{id}' => $bug->id, '{product}' => $bug->product, '{branch}' => $bug->branch, '{project}' => $bug->project, '{execution}' => $bug->execution, '{module}' => $bug->module, '{confirmeObjectID}' => isset($bug->confirmeObjectID) ? $bug->confirmeObjectID : 0)),
- set::toolbar($toolbar),
- set::sections($sections),
- set::tabs($tabs),
- set::actions(array_values($actions))
- );
- modal
- (
- setID('toTask'),
- set::modalProps(array('title' => $lang->bug->selectProjects)),
- to::footer
- (
- div
- (
- setClass('toolbar gap-4 w-full justify-center'),
- btn($lang->bug->nextStep, setID('toTaskButton'), setClass('primary'), setData(array('on' => 'click', 'call' => 'clickToTask'))),
- btn($lang->cancel, setID('cancelButton'), setData(array('dismiss' => 'modal')))
- )
- ),
- formPanel
- (
- on::change('#taskProjects', 'changeTaskProjects'),
- set::actions(''),
- set::showExtra(false),
- formRow
- (
- formGroup
- (
- set::label($lang->bug->selectProjects),
- set::required(true),
- set::control('picker'),
- set::name('taskProjects'),
- set::items($projects)
- )
- ),
- formRow
- (
- formGroup
- (
- set::label($lang->bug->execution),
- set::required(true),
- inputGroup
- (
- setID('executionBox'),
- picker
- (
- set::name('execution'),
- set::items($executions)
- )
- )
- )
- )
- )
- );
|