view.html.php 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. <?php
  2. /**
  3. * The view view file of review 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 review
  9. * @version $Id$
  10. * @link http://www.zentao.net
  11. */
  12. namespace zin;
  13. $sections = array();
  14. if($review->type == 'projectchange')
  15. {
  16. $sections[] = setting()->title($lang->projectchange->deliverable)->control(array('control' => 'dtable', 'cols' => array_values($config->projectchange->deliverable->dtable->fieldList), 'data' => array_values($review->deliverables), 'userMap' => $users));
  17. $sections[] = setting()->title($lang->projectchange->reason)->control('html')->content($projectchange->reason);
  18. $sections[] = setting()->title($lang->projectchange->desc)->control('html')->content($projectchange->desc);
  19. if(!empty($projectchange->files)) $sections[] = setting()->control('fileList')->files($projectchange->files)->object($projectchange)->padding(false);
  20. }
  21. else
  22. {
  23. if(empty($review->deliverables))
  24. {
  25. $reviewData = json_decode($review->data, true);
  26. $showWithPageEditor = isset($reviewData['$migrate']) && $reviewData['$migrate'] == 'html';
  27. if(!empty($bookID) && !$showWithPageEditor)
  28. {
  29. $nodeTree = $this->review->buildBookTree($book, $review, isset($docID) ? $docID : 0);
  30. $sections[] = setting()->control('treeEditor')->items($nodeTree)->canSplit(false);
  31. }
  32. elseif(!$showWithPageEditor && $review->oldCategory == 'PP')
  33. {
  34. $from = 'doc';
  35. $ganttType = 'gantt';
  36. $productID = $review->product;
  37. $projectID = $review->project;
  38. include $app->getModuleRoot() . 'programplan/ui/ganttfields.html.php';
  39. data('showFields', $this->config->programplan->ganttCustom->ganttFields);
  40. $ganttFields['column_text'] = $lang->programplan->ganttBrowseType['gantt'];
  41. $sections[] = array('control' => 'gantt', 'ganttLang' => $ganttLang, 'ganttFields' => $ganttFields, 'showChart' => true, 'colsWidth' => '500', 'options' => $plans, 'height' =>
  42. 250);
  43. }
  44. elseif($showWithPageEditor)
  45. {
  46. if(!empty($review->data)) $sections[] = setting()->control('pageEditor')->content($review->data)->readonly(true);
  47. }
  48. else
  49. {
  50. if(!empty($doc))
  51. {
  52. if($doc->contentType == 'doc')
  53. {
  54. $sections[] = setting()->control('pageEditor')
  55. ->content(isset($doc->rawContent) ? $doc->rawContent : $doc->content)
  56. ->readonly(true);
  57. }
  58. else
  59. {
  60. $sections[] = setting()->title($doc->title)
  61. ->control('html')
  62. ->content($doc->content)
  63. ->id($doc->contentType == 'markdown' ? 'markdownContent' : null);
  64. }
  65. }
  66. if(!empty($doc) && !empty($doc->files)) $sections[] = array('control' => 'fileList', 'files' => $doc->files, 'showDelete' => false, 'object' => $doc, 'padding' => false);
  67. }
  68. }
  69. else
  70. {
  71. $i = 0;
  72. $titleAction['items'][] = array('size' => 'xs', 'type' => 'ghost', 'class' => 'mr-2', 'data-on' => 'click', 'data-call' => 'toggleDetail', 'data-params' => 'event');
  73. foreach($review->deliverables as $deliverable)
  74. {
  75. if($i == 0)
  76. {
  77. $titleAction['items'][0]['icon'] = 'angle-top';
  78. }
  79. else
  80. {
  81. $titleAction['items'][0]['icon'] = 'angle-down';
  82. }
  83. $className = $i == 0 ? '' : 'hidden';
  84. $title = $deliverable->name . ' ' . $deliverable->version;
  85. $deliverableData = !empty($deliverable->data) ? json_decode($deliverable->data, true) : array();
  86. $showWithPageEditor = isset($deliverableData['$migrate']) && $deliverableData['$migrate'] == 'html';
  87. if($deliverable->doc && !$showWithPageEditor)
  88. {
  89. $sections[] = setting()->title($title)->titleActions($titleAction)
  90. ->control('pageEditor')
  91. ->content($deliverable->doc->rawContent)
  92. ->readonly(true)
  93. ->className($className);
  94. if(!empty($deliverable->doc->files)) $sections[] = array('control' => 'fileList', 'files' => $deliverable->doc->files, 'showDelete' => false, 'object' => $deliverable->doc, 'padding' => false);
  95. }
  96. elseif($showWithPageEditor)
  97. {
  98. $sections[] = setting()->title($title)->titleActions($titleAction)
  99. ->control('pageEditor')
  100. ->content($deliverable->data)
  101. ->readonly(true)
  102. ->className($className);
  103. }
  104. $i ++;
  105. }
  106. }
  107. }
  108. if(!empty($review->files)) $sections[] = array('control' => 'fileList', 'files' => $review->files, 'showDelete' => false, 'object' => $review, 'padding' => false);
  109. $basicItems = array();
  110. if($review->type == 'projectchange')
  111. {
  112. $basicItems[$lang->projectchange->urgency] = zget($lang->projectchange->urgencyList, $projectchange->urgency);
  113. $basicItems[$lang->projectchange->type] = zget($lang->projectchange->typeList, $projectchange->type);
  114. $basicItems[$lang->projectchange->owner] = zget($users, $projectchange->owner);
  115. }
  116. else
  117. {
  118. $basicItems[$lang->review->version] = $review->version;
  119. }
  120. $basicItems[$lang->review->status] = zget($lang->review->statusList, $review->status);
  121. $basicItems[$lang->review->reviewedBy] = $review->reviewedBy ? implode(' ', array_map(function($account) use ($users){return zget($users, $account);}, explode(',', str_replace(' ', '', $review->reviewedBy)))) : '';
  122. $basicItems[$lang->review->reviewer] = array();
  123. $basicItems[$lang->review->deadline] = helper::isZeroDate($review->deadline) ? '' : substr($review->deadline, 0, 19);
  124. $basicItems[$lang->review->createdBy] = zget($users, $review->createdBy);
  125. $basicItems[$lang->review->createdDate] = $review->createdDate;
  126. $basicItems[$lang->review->reviewer] = array
  127. (
  128. 'children' => wg(div
  129. (
  130. setClass('row gap-2 flex-wrap'),
  131. array_values(array_map(function($account, $resultList) use($users)
  132. {
  133. $class = (in_array('', $resultList)) ? '' : 'text-gray';
  134. return span(setClass("mr-1 $class"), zget($users, $account));
  135. }, array_keys($reviewerResult), array_values($reviewerResult)))
  136. ))
  137. );
  138. $tabs[] = setting()
  139. ->group('basic')
  140. ->title($lang->review->basicInfo)
  141. ->control('datalist')
  142. ->items($basicItems)
  143. ->labelWidth(100);
  144. $actions = $review->deleted ? array() : $this->loadModel('common')->buildOperateMenu($review);
  145. $hasDivider = !empty($actions['mainActions']) && !empty($actions['suffixActions']);
  146. if(!empty($actions)) $actions = array_merge($actions['mainActions'], $hasDivider ? array(array('type' => 'divider')) : array(), $actions['suffixActions']);
  147. foreach($actions as $actionID => $action)
  148. {
  149. if(!isset($action['icon'])) continue;
  150. if($action['icon'] == 'list-alt' && $review->type == 'deliverable' && empty($review->approval)) unset($actions[$actionID]);
  151. if($action['icon'] == 'edit')
  152. {
  153. if($review->type == 'baseline')
  154. {
  155. if(hasPriv('cm', 'edit')) $actions[$actionID]['url'] = createLink('cm', 'edit', "id={$review->object}");
  156. else unset($actions[$actionID]);
  157. }
  158. else if($review->type == 'projectchange')
  159. {
  160. if(hasPriv('projectchange', 'edit')) $actions[$actionID]['url'] = createLink('projectchange', 'edit', "id={$review->object}");
  161. else unset($actions[$actionID]);
  162. }
  163. }
  164. }
  165. $lastAction = end($actions);
  166. if(isset($lastAction['type']) && $lastAction['type'] == 'divider') unset($actions[count($actions) - 1]);
  167. $approvalID = isset($approval->id) ? $approval->id : 0;
  168. detail
  169. (
  170. set::object($review),
  171. set::objectType('review'),
  172. set::sections($sections),
  173. set::tabs($tabs),
  174. set::urlFormatter(array('{id}' => $review->id, '{approval}' => $approvalID, '{deliverable}' => $review->deliverable, '{project}' => $review->project, '{type}' => $review->type, '{rawCategory}' => $review->category)),
  175. set::actions(array_values($actions))
  176. );