Files
EasySoft-ZenTaoPMS/module/product/ui/track.html.php
T

240 lines
7.2 KiB
PHP

<?php
declare(strict_types=1);
/**
* The UI file of product 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 chen.tao <chentao@easycorp.ltd>
* @package product
* @link https://www.zentao.net
*/
namespace zin;
if($config->URAndSR && $this->app->rawModule == 'projectstory' && $this->session->hasProduct)
{
$productItems = array();
$projectProducts = $this->product->getPairs();
foreach($projectProducts as $id => $name)
{
$productItems[] = array('text' => $name, 'url' => createLink('projectstory', 'track', "projectID={$this->session->project}&productID={$id}"), 'active' => $productID == $id);
}
}
$getRequirements = function($tracks)
{
global $app, $config, $lang;
$requirementItems = array();
$tab = $app->rawModule == 'projectstory' ? 'project' : 'product';
$module = $app->rawModule == 'projectstory' ? 'projectstory' : 'story';
foreach($tracks as $key => $requirement)
{
$track = ($key == 'noRequirement') ? $requirement : $requirement->track;
$rowspan = count($track);
$title = $lang->story->noRequirement;
if($config->URAndSR && $key != 'noRequirement') $title = common::hasPriv($requirement->type, 'view') ? a(
set('href', createLink('story', 'view', "storyID={$requirement->id}")),
set('title', $requirement->title),
set('data-app', $tab),
$requirement->title
) : $requirement->title;
$requirementItems[] = h::tr(
$config->URAndSR ? h::td(
$rowspan != 0 ? set('rowspan', $rowspan) : null,
setClass('requirement'),
$key != 'noRequirement' ? label(
setClass('primary-pale ring-primary mr-1'),
zget($lang->story->statusList, $requirement->status)
) : null,
set('title', $key != 'noRequirement' ? $requirement->title : $lang->story->noRequirement),
$title
) : null,
count($track) != 0 ? getStoryTrack($track, $tab, $module) : null
);
}
return $requirementItems;
};
function getStoryTrack($track, $tab, $module)
{
$i = 0;
$storyItems = array();
foreach($track as $storyID => $story)
{
if($i > 0)
{
$storyItems[] = h::tr(getTrackTd($storyID, $story, $tab, $module));
}
else
{
$storyItems[] = getTrackTd($storyID, $story, $tab, $module);
}
$i ++;
}
return $storyItems;
};
function getTrackTd($storyID, $story, $tab, $module)
{
global $lang, $config;
$trackItem = array();
/* Story. */
$trackItem[] = h::td(
isset($story->parent) && $story->parent > 0 ? label(
setClass('rounded-full light mr-1'),
set('title', $lang->story->children),
$lang->story->childrenAB
) : null,
a(
set('href', createLink($module, 'view', "storyID={$storyID}")),
set('title', $story->title),
set('data-app', $tab),
$story->title
)
);
$trackItem[] = h::td(getTaskTd($story->tasks)); // Task
if(in_array($config->edition, array('max', 'ipd'))) $trackItem[] = h::td(getDesignTd($story->designs)); // Design
$trackItem[] = h::td(getCaseTd($story->cases)); // Case
if(in_array($config->edition, array('max', 'ipd')) && helper::hasFeature('devops')) $trackItem[] = h::td(getRevisionTd($story->revisions)); // Revision
$trackItem[] = h::td(getBugTd($story->bugs)); // Bug
return $trackItem;
};
function getTaskTd($tasks)
{
$taskItems = array();
foreach($tasks as $task)
{
$taskItems[] = a(
set('href', createLink('task', 'view', "taskID={$task->id}")),
set('title', $task->name),
$task->name
);
$taskItems[] = br();
}
return $taskItems;
};
function getDesignTd($designs)
{
$designItems = array();
foreach($designs as $design)
{
$designItems[] = a(
set('href', createLink('design', 'view', "designID={$design->id}")),
set('title', $design->name),
$design->name
);
$designItems[] = br();
}
return $designItems;
};
function getCaseTd($cases)
{
$caseItems = array();
foreach($cases as $case)
{
$caseItems[] = a(
set('href', createLink('testcase', 'view', "caseID={$case->id}")),
set('title', $case->title),
$case->title
);
$caseItems[] = br();
}
return $caseItems;
};
function getRevisionTd($revisions)
{
$revisionItems = array();
foreach($revisions as $revision => $repoComment)
{
$revisionItems[] = a(
set('href', createLink('design', 'revision', "revisionID={$revision}")),
set('title', $repoComment),
'#'. $revision . '-' . $repoComment
);
$revisionItems[] = br();
}
return $revisionItems;
};
function getBugTd($bugs)
{
$bugItems = array();
foreach($bugs as $bug)
{
$bugItems[] = a(
set('href', createLink('bug', 'view', "bugID={$bug->id}")),
set('title', $bug->title),
$bug->title
);
$bugItems[] = br();
}
return $bugItems;
};
div
(
setClass('main-col'),
empty($tracks) ? div(
setClass('table-empty-tip'),
span
(
setClass('text-gray'),
$lang->noData
)
) : div(
setClass('main-table'),
h::table
(
setID('trackList'),
setClass('table table-bordered'),
h::thead
(
$config->URAndSR ? h::th(
!empty($productItems) ? dropdown(
btn(
setClass('ghost btn square btn-default'),
set::icon('product'),
$projectProducts[$productID]
),
set::items($productItems),
set::placement('bottom-start')
) : $lang->story->requirement
) : null,
h::th($lang->story->story),
h::th($lang->story->tasks),
in_array($config->edition, array('max', 'ipd')) ? h::th($lang->story->design) : null,
h::th($lang->story->case),
in_array($config->edition, array('max', 'ipd')) && helper::hasFeature('devops') ? h::th($lang->story->repoCommit) : null,
h::th($lang->story->bug)
),
h::tbody
(
$getRequirements($tracks)
)
),
div
(
setClass('table-footer'),
pager(
set::_className('flex justify-end items-center'),
set::linkCreator(createLink($app->rawModule, $app->rawMethod, "productID={$productID}&branch={$branch}&projectID={$projectID}&recTotal={$pager->recTotal}&recPerPage={recPerPage}&pagerID={page}"))
)
)
)
);
render();