viewdeliverable.html.php 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. <?php
  2. /**
  3. * The view deliverable file of project module of ZenTaoPMS.
  4. *
  5. * @copyright Copyright 2009-2015 青岛易软天创网络科技有限公司(QingDao Nature Easy Soft Network Technology Co,LTD, www.cnezsoft.com)
  6. * @license ZPL (http://zpl.pub/page/zplv12.html)
  7. * @author Yidong Wang <yidong@cnezsoft.com>
  8. * @package project
  9. * @version $Id$
  10. * @link http://www.zentao.net
  11. */
  12. namespace zin;
  13. $versions = array();
  14. $versionBox = null;
  15. if($deliverable->reviews)
  16. {
  17. if(!$reviewID) $reviewID = $review->id;
  18. foreach($deliverable->reviews as $id => $reviewData)
  19. {
  20. if(empty($reviewData->vsrsion)) $reviewVersion = $id;
  21. $baselineLabel = $reviewData->isBaseline ? "[{$lang->project->baseline}]" : '';
  22. $versionItem = setting()
  23. ->text("#{$reviewData->version} {$baselineLabel}")
  24. ->url(inlink('viewdeliverable', "id={$deliverable->id}&reviewID={$id}"));
  25. $versionItem->selected($id == $reviewID);
  26. $versions[] = $versionItem;
  27. }
  28. $version = !empty($review->version) ? $review->version : $review->id;
  29. $baseline = $review->isBaseline ? "[{$lang->project->baseline}]" : '';
  30. $versionBtn = btn(set::type('ghost'), setClass('text-link font-normal text-base'), "#{$version} {$baseline}");
  31. if(count($versions) > 1)
  32. {
  33. $versionBox = to::title
  34. (
  35. dropdown
  36. (
  37. $versionBtn,
  38. set::items($versions)
  39. )
  40. );
  41. }
  42. else
  43. {
  44. $versionBox = to::title($versionBtn);
  45. }
  46. }
  47. $sections = array();
  48. if(!empty($deliverable->data) && empty($doc))
  49. {
  50. $deliverableData = json_decode($deliverable->data, true);
  51. $showWithPageEditor = isset($deliverableData['$migrate']) && $deliverableData['$migrate'] == 'html';
  52. if(!empty($review->template) && !$showWithPageEditor)
  53. {
  54. $reviewInfo = $this->loadModel('review')->getByID($review->id);
  55. $template = $this->loadModel('doc')->getByID($review->template);
  56. $nodeTree = $this->review->buildBookTree($template, $reviewInfo);
  57. $sections[] = setting()->control('treeEditor')->items($nodeTree)->canSplit(false);
  58. }
  59. else
  60. {
  61. $sections[] = setting()->control('pageEditor')->content($deliverable->data)->readonly(true);
  62. }
  63. }
  64. elseif(!empty($doc))
  65. {
  66. if($doc->contentType == 'doc')
  67. {
  68. $sections[] = setting()->control('pageEditor')
  69. ->content(isset($doc->rawContent) ? $doc->rawContent : $doc->content)
  70. ->readonly(true);
  71. }
  72. else
  73. {
  74. $sections[] = setting()->title($doc->title)
  75. ->control('html')
  76. ->content($doc->content)
  77. ->id($doc->contentType == 'markdown' ? 'markdownContent' : null);
  78. }
  79. if(!empty($doc) && !empty($doc->files)) $sections[] = array('control' => 'fileList', 'files' => $doc->files, 'showDelete' => false, 'object' => $doc, 'padding' => false);
  80. }
  81. else
  82. {
  83. $sections[] = setting()->control('html')->content($lang->noData);
  84. }
  85. $renderStages = function() use ($deliverable, $lang, $stageList)
  86. {
  87. $stages = array();
  88. foreach($deliverable->stages as $stage => $required)
  89. {
  90. $stages[] = zget($stageList, $stage) . ' ' . zget($lang->deliverable->requiredList, $required) . '<br/>';
  91. }
  92. return $stages;
  93. };
  94. $status = zget($lang->review->statusList, $deliverable->status);
  95. if($deliverable->hasApproval == 0)
  96. {
  97. $status = $deliverable->status == 'pass' ? $lang->project->confirmed : $lang->project->needConfirm;
  98. }
  99. $moduleName = zget($modules, $deliverable->module, '');
  100. $moduleName = ltrim($moduleName, '/');
  101. $basicItems = array();
  102. $basicItems[$lang->deliverable->activity] = array('control' => 'html', 'content' => zget($activities, $deliverable->activity, ''), 'title' => zget($activities, $deliverable->activity, ''));
  103. $basicItems[$lang->deliverable->module] = $moduleName;
  104. $basicItems[$lang->deliverable->name] = $deliverable->deliverableName;
  105. $basicItems[$lang->deliverable->when] = array('control' => 'html', 'content' => $renderStages);
  106. $basicItems[$lang->project->submitFrom] = $deliverable->submitFromName;
  107. $basicItems[$lang->deliverable->versionStatus] = zget($lang->deliverable->versionStatusList, $deliverable->versionStatus, '');
  108. $basicItems[$lang->deliverable->reviewStatus] = $status;
  109. $basicItems[$lang->deliverable->submitedBy] = !empty($deliverable->createdBy) ? zget($users, $deliverable->createdBy) . $lang->at . $deliverable->createdDate : '';
  110. $basicItems[$lang->review->submitedBy] = isset($review->createdBy) ? zget($users, $review->createdBy) . $lang->at . $review->createdDate : '';
  111. $basicItems[$lang->review->reviewedBy] = isset($review->reviewedBy) ? implode(' ', array_map(function($account) use ($users){return zget($users, $account);}, explode(',', str_replace(' ', '', $review->reviewedBy)))) : '';
  112. $tabs[] = setting()
  113. ->group('basic')
  114. ->title($lang->review->basicInfo)
  115. ->control('datalist')
  116. ->items($basicItems)
  117. ->labelWidth(100);
  118. if(!empty($deliverable->files)) $sections[] = array('control' => 'fileList', 'files' => $deliverable->files, 'showDelete' => false, 'object' => $deliverable->review, 'padding' => false);
  119. $operateList = $this->loadModel('common')->buildOperateMenu($deliverable);
  120. $actions = $operateList['mainActions'];
  121. $divider = empty($actions) ? array() : array(array('type' => 'divider'));
  122. if(!empty($operateList['suffixActions'])) $actions = array_merge($actions, $divider, $operateList['suffixActions']);
  123. foreach($actions as $id => $action)
  124. {
  125. if(!isset($action['icon'])) continue;
  126. /* 如果交付物状态为通过,并且有更新,则可以再次创建评审。 */
  127. if($action['icon'] == 'sub-review')
  128. {
  129. if($deliverable->hasApproval == 0)
  130. {
  131. $actions[$id]['icon'] = 'ok';
  132. $actions[$id]['hint'] = $lang->project->updateVersion;
  133. $actions[$id]['text'] = $lang->project->updateVersion;
  134. }
  135. if($deliverable->status == 'pass')
  136. {
  137. $actions[$id]['url'] = helper::createLink('review', 'create', "projectID={$deliverable->project}&deliverable={$deliverable->id}&reviewID=0&type=deliverable");
  138. }
  139. }
  140. if($action['icon'] != 'edit') continue;
  141. if(!$deliverable->editLink || $deliverable->status == 'reviewing' || !empty($deliverable->frozen))
  142. {
  143. unset($actions[$id]);
  144. continue;
  145. }
  146. $actions[$id]['url'] = $deliverable->editLink;
  147. if($deliverable->linkAttr == 'blank')
  148. {
  149. $actions[$id]['target'] = '_blank';
  150. unset($actions[$id]['data-toggle']);
  151. }
  152. }
  153. /* 如果最后一个是分隔符,则删除。 */
  154. $endAction = end($actions);
  155. if(isset($endAction['type']) && $endAction['type'] == 'divider')
  156. {
  157. $lastIndex = count($actions) - 1;
  158. unset($actions[$lastIndex]);
  159. }
  160. detail
  161. (
  162. set::object($deliverable),
  163. set::objectType('projectdeliverable'),
  164. set::sections($sections),
  165. set::history(array('commentBtn' => false)),
  166. set::tabs($tabs),
  167. set::urlFormatter(array('{review}' => $deliverable->reviewID, '{id}' => $deliverable->id, '{project}' => $deliverable->project)),
  168. set::actions(array_values($actions)),
  169. $versionBox
  170. );