| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356 |
- <?php
- /**
- * The activate view file of task 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 Sun Guangming<sunguangming@easycorp.ltd>
- * @package task
- * @link https://www.zentao.net
- */
- namespace zin;
- $buildModule = $app->tab == 'project' ? 'projectbuild' : 'build';
- $decodeParam = helper::safe64Decode($param);
- $canBeChanged = common::canBeChanged($buildModule, $build);
- if($canBeChanged && $execution) $canBeChanged = common::canModify('execution', $execution);
- $buildItems = array();
- foreach($buildPairs as $id => $name)
- {
- $buildItem['text'] = $name;
- $buildItem['url'] = helper::createLink($buildModule, 'view', "buildID=$id");
- $buildItem['data-app'] = $app->tab;
- $buildItem['active'] = $id == $build->id;
- $buildItems[] = $buildItem;
- }
- $actions = $build->deleted || !$canBeChanged ? array() : $this->loadModel('common')->buildOperateMenu($build);
- foreach($actions as $actionType => $typeActions)
- {
- foreach($typeActions as $key => $action)
- {
- $actions[$actionType][$key]['url'] = str_replace('{id}', (string)$build->id, $action['url']);
- $actions[$actionType][$key]['className'] = isset($action['className']) ? $action['className'] . ' ghost' : 'ghost';
- $actions[$actionType][$key]['iconClass'] = isset($action['iconClass']) ? $action['iconClass'] . ' text-primary' : 'text-primary';
- if(isset($action['action']) && $action['icon'] == 'edit') $actions[$actionType][$key]['text'] = $lang->edit;
- if(isset($action['action']) && $action['icon'] == 'trash') $actions[$actionType][$key]['text'] = $lang->delete;
- }
- }
- detailHeader
- (
- to::prefix
- (
- backBtn
- (
- set::icon('back'),
- set::type('secondary'),
- $lang->goback
- ),
- dropdown(btn
- (
- setClass('ghost text-primary bg-gray-200 bg-opacity-50'),
- entityLabel(set::entityID($build->id), set::level(2), set::text($build->name), set::textClass('text-primary'), set::idClass('id-label')),
- $build->deleted ? span(setClass('label danger'), $lang->bug->deleted) : null
- ), set::items($buildItems))
- ),
- !empty($actions['mainActions']) || !empty($actions['suffixActions']) ? to::suffix
- (
- btnGroup(set::items($actions['mainActions'])),
- !empty($actions['mainActions']) && !empty($actions['suffixActions']) ? div(setClass('divider')): null,
- btnGroup(set::items($actions['suffixActions']))
- ) : null
- );
- jsVar('initLink', $link);
- jsVar('type', $type == 'story' ? 'linkStory' : $type);
- jsVar('linkParams', $decodeParam);
- jsVar('buildID', $build->id);
- jsVar('confirmDelete', $lang->build->confirmDelete);
- jsVar('currentAccount', $app->user->account);
- jsVar('buildProduct', $build->product);
- jsVar('buildModule', $buildModule);
- jsVar('grades', $grades);
- jsVar('showGrade', $showGrade);
- /* Story's batch btn. */
- $canBatchUnlinkStory = $canBeChanged && common::hasPriv($buildModule, 'batchUnlinkStory');
- $canBatchCloseStory = $canBeChanged && common::hasPriv('story', 'batchClose');
- $storyFootToolbar = array();
- if($canBatchUnlinkStory) $storyFootToolbar['items'][] = array('className' => 'btn size-sm batch-btn ajax-btn', 'text' => $lang->build->batchUnlink, 'btnType' => 'secondary', 'data-type' => 'story', 'data-url' => createLink($buildModule, 'batchUnlinkStory', "build={$build->id}"));
- if($canBatchCloseStory) $storyFootToolbar['items'][] = array('className' => 'btn size-sm batch-btn', 'text' => $lang->story->batchClose, 'btnType' => 'secondary', 'data-type' => 'story', 'data-url' => createLink('story', 'batchClose', "productID={$build->product}&executionID={$objectID}"));
- /* Bug's batch btn. */
- $canBatchUnlinkBug = $canBeChanged && common::hasPriv($buildModule, 'batchUnlinkBug');
- $canBatchCloseBug = $canBeChanged && common::hasPriv('bug', 'batchClose');
- $bugFootToolbar = array();
- if($canBatchUnlinkBug) $bugFootToolbar['items'][] = array('className' => 'btn size-sm batch-btn', 'text' => $lang->build->batchUnlink, 'btnType' => 'secondary', 'data-type' => 'bug', 'data-url' => createLink($buildModule, 'batchUnlinkBug', "build={$build->id}"));
- if($canBatchCloseBug) $bugFootToolbar['items'][] = array('className' => 'btn size-sm batch-btn', 'text' => $lang->bug->batchClose, 'btnType' => 'secondary', 'data-type' => 'bug', 'data-url' => createLink('bug', 'batchClose'));
- /* Integrated builds or single build. */
- if($build->execution)
- {
- $executionTitle = empty($multipleProject) ? $lang->build->project : ($execution->type ? $lang->build->executionAB : $lang->build->execution);
- $executionName = zget($executions, $build->execution, '');
- }
- else
- {
- $builds = '';
- foreach(explode(',', $build->builds) as $buildID)
- {
- if($buildID) $builds .= html::a($this->createLink($buildModule, 'view', "buildID=$buildID") . "#app={$app->tab}", zget($buildPairs, $buildID)) . $lang->comma;
- }
- }
- /* Init table data for dtable. */
- $config->build->bug->dtable->fieldList['actions']['list']['unlinkBug']['url'] = array('module' => $buildModule, 'method' => 'unlinkBug', 'params' => "buildID={$build->id}&bugID={id}");
- $config->build->story->dtable->fieldList['actions']['list']['unlinkStory']['url'] = array('module' => $buildModule, 'method' => 'unlinkStory', 'params' => "buildID={$build->id}&storyID={id}");
- if(!$canBeChanged)
- {
- unset($config->build->bug->dtable->fieldList['actions']['list']);
- unset($config->build->story->dtable->fieldList['actions']['list']);
- }
- $stories = initTableData($stories, $config->build->story->dtable->fieldList, $this->build);
- $bugs = initTableData($bugs, $config->build->bug->dtable->fieldList, $this->build);
- $onlyNoCheckCount = 0;
- if(!empty($build->builds))
- {
- $buildStories = explode(',', $build->stories);
- $buildStories = array_combine($buildStories, $buildStories);
- foreach($stories as $index => $story)
- {
- if(empty($story->actions)) break;
- if(!isset($buildStories[$story->id]))
- {
- $story->noCheckBox = true;
- $story->actions[0]['disabled'] = true;
- }
- }
- $buildBugs = explode(',', $build->bugs);
- $buildBugs = array_combine($buildBugs, $buildBugs);
- foreach($bugs as $index => $bug)
- {
- if(empty($bug->actions)) break;
- if(!isset($buildBugs[$bug->id]))
- {
- $bug->noCheckBox = true;
- $bug->actions[0]['disabled'] = true;
- $onlyNoCheckCount++;
- }
- }
- }
- detailBody
- (
- set::hasExtraMain(false),
- on::click('.batch-btn')->call('window.handleBatchBtnClick', jsRaw('target')),
- sectionList(
- tabs
- (
- set::className('w-full'),
- set::id('buildTabs'),
- /* Linked story table. */
- tabPane
- (
- to::prefix(icon('lightbulb')),
- set::key('linkStory'),
- set::title($lang->build->stories),
- set::active($type == 'story'),
- div
- (
- setClass('tab-actions'),
- $canBeChanged && common::hasPriv($buildModule, 'linkStory') ? btn
- (
- set::text($lang->build->linkStory),
- set::icon('link'),
- set::type('primary'),
- bind::click("window.showLink('linkStory')")
- ) : null
- ),
- dtable
- (
- setID('linkStoryDTable'),
- set::style(array('min-width' => '100%')),
- set::userMap($users),
- set::cols(array_values($config->build->story->dtable->fieldList)),
- set::data($stories),
- set::checkable($canBatchUnlinkStory || $canBatchCloseStory),
- set::canRowCheckable(jsRaw("function(rowID){return this.getRowInfo(rowID).data.noCheckBox ? 'disabled' : true;}")),
- set::sortLink(createLink($buildModule, 'view', "buildID={$build->id}&type=story&link={$link}¶m={$param}&orderBy={name}_{sortType}")),
- set::orderBy($orderBy),
- set::onRenderCell(jsRaw('window.renderStoryCell')),
- set::extraHeight('+144'),
- set::footToolbar($storyFootToolbar),
- set::footPager(usePager('storyPager', '', array(
- 'recPerPage' => $storyPager->recPerPage,
- 'recTotal' => $storyPager->recTotal,
- 'linkCreator' => helper::createLink($buildModule, 'view', "buildID={$build->id}&type=story&link={$link}¶m={$param}&orderBy={$orderBy}&recTotal={$storyPager->recTotal}&recPerPage={recPerPage}&page={page}")
- )))
- )
- ),
- /* Resolved bugs table. */
- tabPane
- (
- to::prefix(icon('bug')),
- set::key('bug'),
- set::title($lang->build->bugs),
- set::active($type == 'bug'),
- div
- (
- setClass('tab-actions'),
- $canBeChanged && common::hasPriv($buildModule, 'linkBug') ? btn
- (
- set::text($lang->build->linkBug),
- set::type('primary'),
- set::icon('link'),
- bind::click("window.showLink('bug')")
- ) : null
- ),
- dtable
- (
- setID('bugDTable'),
- set::style(array('min-width' => '100%')),
- set::userMap($users),
- set::cols(array_values($config->build->bug->dtable->fieldList)),
- set::data($bugs),
- set::checkable(($canBatchUnlinkBug || $canBatchCloseBug) && $onlyNoCheckCount != count($bugs)),
- set::canRowCheckable(jsRaw("function(rowID){return this.getRowInfo(rowID).data.noCheckBox ? 'disabled' : true;}")),
- set::sortLink(createLink($buildModule, 'view', "buildID={$build->id}&type=bug&link={$link}¶m={$param}&orderBy={name}_{sortType}")),
- set::orderBy($orderBy),
- set::extraHeight('+144'),
- set::footToolbar($bugFootToolbar),
- set::footPager(usePager('bugPager', '', array(
- 'recPerPage' => $bugPager->recPerPage,
- 'recTotal' => $bugPager->recTotal,
- 'linkCreator' => helper::createLink($buildModule, 'view', "buildID={$build->id}&type=bug&link={$link}¶m={$param}&orderBy={$orderBy}&recTotal={$bugPager->recTotal}&recPerPage={recPerPage}&page={page}")
- )))
- )
- ),
- /* Generated bugs table. */
- tabPane
- (
- to::prefix(icon('bug')),
- set::key('generatedBug'),
- set::title($lang->build->generatedBugs),
- set::active($type == 'generatedBug'),
- dtable
- (
- set::style(array('min-width' => '100%')),
- set::userMap($users),
- set::cols(array_values($config->build->generatedBug->dtable->fieldList)),
- set::data(array_values($generatedBugs)),
- set::sortLink(createLink($buildModule, 'view', "buildID={$build->id}&type=generatedBug&link={$link}¶m={$param}&orderBy={name}_{sortType}")),
- set::orderBy($orderBy),
- set::footPager(usePager('generatedBugPager', '', array(
- 'recPerPage' => $generatedBugPager->recPerPage,
- 'recTotal' => $generatedBugPager->recTotal,
- 'linkCreator' => helper::createLink($buildModule, 'view', "buildID={$build->id}&type=generatedBug&link={$link}¶m={$param}&orderBy={$orderBy}&recTotal={$generatedBugPager->recTotal}&recPerPage={recPerPage}&page={page}")
- )))
- )
- ),
- /* Basic info block. */
- tabPane
- (
- to::prefix(icon('flag')),
- set::key('buildInfo'),
- set::title($lang->build->basicInfo),
- div(
- section(
- set::title($lang->build->basicInfo),
- tableData
- (
- !$hidden ? item
- (
- set::name($lang->build->product),
- $build->productName
- ) : null,
- $build->productType != 'normal' ? item
- (
- set::name($lang->build->branch),
- $branchName
- ) : null,
- $build->system ? item
- (
- set::name($lang->build->system),
- zget($systemList, $build->system)
- ) : null,
- item
- (
- set::name($lang->build->name),
- $build->name
- ),
- $build->execution ? item
- (
- set::name($executionTitle),
- ltrim($executionName, '/')
- ) : item
- (
- set::name($lang->build->builds),
- html(rtrim($builds, $lang->comma))
- ),
- item
- (
- set::name($lang->build->builder),
- zget($users, $build->builder)
- ),
- item
- (
- set::name($lang->build->date),
- $build->date
- ),
- item
- (
- set::name($lang->build->scmPath),
- set::trClass('scmPath'),
- h::a
- (
- $build->scmPath,
- set('href', $build->scmPath),
- set('target', '_blank'),
- set('rel', 'nooperner noreferrer')
- )
- ),
- item
- (
- set::name($lang->build->filePath),
- set::trClass('filePath'),
- h::a
- (
- $build->filePath,
- set('href', $build->filePath),
- set('target', '_blank'),
- set('rel', 'nooperner noreferrer')
- )
- ),
- item
- (
- set::name($lang->build->desc),
- html($build->desc)
- )
- ),
- html($this->printExtendFields($build, 'html', 'position=all', false)),
- $build->files ? h::hr(set::className('mt-6')) : null,
- section
- (
- $build->files ? fileList(set::files($build->files), set::showEdit(true), set::showDelete(true)) : null
- ),
- h::hr(set::className('mt-6')),
- history(set::objectID($build->id), set::objectType('build'))
- )
- )
- )
- )
- )
- );
- render();
|