project.html.php 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. <?php
  2. namespace zin;
  3. jsVar('confirmDeleteTip', $lang->project->confirmDelete);
  4. dropmenu();
  5. featureBar
  6. (
  7. set::current($browseType),
  8. set::linkParams("programID={$programID}&browseType={key}&orderBy=$orderBy&recTotal={$pager->recTotal}&recPerPage={$pager->recPerPage}"),
  9. checkbox
  10. (
  11. setID('involved'),
  12. set::name('involved'),
  13. set::checked($this->cookie->involved),
  14. set::text($lang->project->mine)
  15. )
  16. );
  17. toolbar(hasPriv('project', 'create') ? item(set
  18. (array(
  19. 'text' => $lang->project->create,
  20. 'icon' => 'plus',
  21. 'class'=> 'btn primary',
  22. 'url' => $this->createLink('project', 'createGuide', "programID={$programID}"),
  23. 'data-toggle' => 'modal'
  24. ))) : null);
  25. $cols = $this->config->project->dtable->fieldList;
  26. $cols['actions']['list']['edit']['data-app'] = 'program';
  27. $cols['progress']['sortType'] = false;
  28. $projectStats = initTableData($projectStats, $cols, $this->project);
  29. $waitCount = 0;
  30. $doingCount = 0;
  31. $suspendedCount = 0;
  32. $closedCount = 0;
  33. $projectIdList = array_column($projectStats, 'id');
  34. $storyGroup = $this->loadModel('story')->fetchStoriesByProjectIdList($projectIdList);
  35. $executionGroup = $this->loadModel('execution')->fetchExecutionsByProjectIdList($projectIdList);
  36. foreach($projectStats as $project)
  37. {
  38. if($browseType == 'all')
  39. {
  40. if($project->status == 'wait') $waitCount ++;
  41. if($project->status == 'doing') $doingCount ++;
  42. if($project->status == 'suspended') $suspendedCount ++;
  43. if($project->status == 'closed') $closedCount ++;
  44. }
  45. $projectStories = zget($storyGroup, $project->id, array());
  46. $project->storyCount = count($projectStories);
  47. $project->storyPoints = round(array_sum(array_column($projectStories, 'estimate')), 2) . ' ' . $this->config->hourUnit;
  48. $executions = zget($executionGroup, $project->id, array());
  49. $project->executionCount = count($executions);
  50. if(!empty($project->delay) && $project->delay > 0)
  51. {
  52. $project->postponed = true;
  53. $project->delayInfo = sprintf($lang->project->delayInfo, $project->delay);
  54. }
  55. $project = $this->project->formatDataForList($project, $PMList);
  56. }
  57. $canBatchEdit = hasPriv('project', 'batchEdit');
  58. $summary = $browseType == 'all' ? sprintf($lang->project->allSummary, count($projectStats), $waitCount, $doingCount, $suspendedCount, $closedCount) : sprintf($lang->project->summary, count($projectStats));
  59. $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;
  60. dtable
  61. (
  62. set::userMap($users),
  63. set::cols($cols),
  64. set::data(array_values($projectStats)),
  65. set::checkable($canBatchEdit),
  66. set::nested(false),
  67. set::onRenderCell(jsRaw('window.renderCell')),
  68. set::orderBy($orderBy),
  69. set::sortLink(createLink('program', 'project', "programID={$programID}&&browseType={$browseType}&orderBy={name}_{sortType}&recTotal={$pager->recTotal}&recPerPage={$pager->recPerPage}&pageID={$pager->pageID}")),
  70. set::footToolbar($footToolbar),
  71. set::footPager(usePager()),
  72. !$canBatchEdit ? set::footer([jsRaw("function(){return {html: '{$summary}'};}"), 'flex', 'pager']) : null,
  73. set::checkInfo(jsRaw("function(checkedIDList){ return window.footerSummary(checkedIDList, '{$summary}');}"))
  74. );
  75. render();