znt/module/program/ui/project.html.php

93 lines
3.4 KiB
PHP

<?php
namespace zin;
jsVar('confirmDeleteTip', $lang->project->confirmDelete);
dropmenu();
featureBar
(
set::current($browseType),
set::linkParams("programID={$programID}&browseType={key}&orderBy=$orderBy&recTotal={$pager->recTotal}&recPerPage={$pager->recPerPage}"),
checkbox
(
setID('involved'),
set::name('involved'),
set::checked($this->cookie->involved),
set::text($lang->project->mine)
)
);
toolbar
(
hasPriv('project', 'create') ? item(set
(array(
'text' => $lang->project->create,
'icon' => 'plus',
'class'=> 'btn primary',
'url' => $this->createLink('project', 'createGuide', "programID={$programID}"),
'data-toggle' => 'modal'
))) : null,
);
$cols = $this->config->project->dtable->fieldList;
$cols['actions']['list']['edit']['data-app'] = 'program';
$cols['progress']['sortType'] = false;
$projectStats = initTableData($projectStats, $cols, $this->project);
$waitCount = 0;
$doingCount = 0;
$suspendedCount = 0;
$closedCount = 0;
$projectIdList = array_column($projectStats, 'id');
$storyGroup = $this->loadModel('story')->fetchStoriesByProjectIdList($projectIdList);
$executionGroup = $this->loadModel('execution')->fetchExecutionsByProjectIdList($projectIdList);
foreach($projectStats as $project)
{
if($browseType == 'all')
{
if($project->status == 'wait') $waitCount ++;
if($project->status == 'doing') $doingCount ++;
if($project->status == 'suspended') $suspendedCount ++;
if($project->status == 'closed') $closedCount ++;
}
$projectStories = zget($storyGroup, $project->id, array());
$project->storyCount = count($projectStories);
$project->storyPoints = round(array_sum(array_column($projectStories, 'estimate')), 2) . ' ' . $this->config->hourUnit;
$executions = zget($executionGroup, $project->id, array());
$project->executionCount = count($executions);
if(!empty($project->delay) && $project->delay > 0)
{
$project->postponed = true;
$project->delayInfo = sprintf($lang->project->delayInfo, $project->delay);
}
$project = $this->project->formatDataForList($project, $PMList);
}
$canBatchEdit = hasPriv('project', 'batchEdit');
$summary = $browseType == 'all' ? sprintf($lang->project->allSummary, count($projectStats), $waitCount, $doingCount, $suspendedCount, $closedCount) : sprintf($lang->project->summary, count($projectStats));
$footToolbar = $canBatchEdit ? array('items' => array(array('text' => $lang->edit, 'class' => 'btn batch-btn size-sm secondary', 'data-url' => $this->createLink('project', 'batchEdit', "from=pgmproject&programID={$programID}")))) : null;
dtable
(
set::userMap($users),
set::cols($cols),
set::data(array_values($projectStats)),
set::checkable($canBatchEdit),
set::nested(false),
set::onRenderCell(jsRaw('window.renderCell')),
set::orderBy($orderBy),
set::sortLink(createLink('program', 'project', "programID={$programID}&&browseType={$browseType}&orderBy={name}_{sortType}&recTotal={$pager->recTotal}&recPerPage={$pager->recPerPage}&pageID={$pager->pageID}")),
set::footToolbar($footToolbar),
set::footPager(usePager()),
!$canBatchEdit ? set::footer([jsRaw("function(){return {html: '{$summary}'};}"), 'flex', 'pager']) : null,
set::checkInfo(jsRaw("function(checkedIDList){ return window.footerSummary(checkedIDList, '{$summary}');}"))
);
render();