viewphpmetric.html.php 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. <?php
  2. /**
  3. * The view file of metric module of ZenTaoPMS.
  4. *
  5. * @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.zentao.net)
  6. * @license ZPL(https://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
  7. * @author zhouxin<zhouxin@easycorp.ltd>
  8. * @package metric
  9. * @link http://www.zentao.net
  10. */
  11. namespace zin;
  12. /**
  13. * Build content of table data.
  14. *
  15. * @param array $items
  16. * @access public
  17. * @return array
  18. */
  19. $buildItems = function($items): array
  20. {
  21. $itemList = array();
  22. foreach($items as $item)
  23. {
  24. $itemList[] = item
  25. (
  26. set::name($item['name']),
  27. !empty($item['href']) ? a
  28. (
  29. set::href($item['href']),
  30. !empty($item['attr']) && is_array($item['attr']) ? set($item['attr']) : null,
  31. $item['text']
  32. ) : $item['text'],
  33. set::collapse(!empty($item['text']))
  34. );
  35. }
  36. return $itemList;
  37. };
  38. $oldMetricTabs = (string)$metric->fromID === '0' ? '' : tabs
  39. (
  40. set::collapse(true),
  41. tabPane
  42. (
  43. set::key('oldMetricInfo'),
  44. set::title($lang->metric->oldMetricInfo),
  45. set::className('overflow-hidden'),
  46. set::active(true),
  47. tableData
  48. (
  49. set::tdClass('word-no-wrap'),
  50. $buildItems($oldMetricInfo)
  51. )
  52. )
  53. );
  54. detailHeader
  55. (
  56. to::title
  57. (
  58. entityLabel
  59. (
  60. set::entityID($metric->id),
  61. set::level(1),
  62. set::text($metric->name)
  63. ),
  64. $metric->deleted == '1' ? label
  65. (
  66. set::text($lang->deleted),
  67. setClass('danger')
  68. ) : null
  69. ),
  70. to::prefix
  71. (
  72. backBtn
  73. (
  74. set::icon('back'),
  75. set::type('secondary'),
  76. $lang->goback
  77. )
  78. )
  79. );
  80. $fnGenerateDataDisplay = function() use($resultData, $resultHeader, $lang, $metric)
  81. {
  82. if(empty($resultData)) $resultData = array($resultData);
  83. if(count($resultData) == 1 && count((array)$resultData[0]) == 1) return div
  84. (
  85. set::className('card-data'),
  86. center(p
  87. (
  88. set::className('card-digit'),
  89. $resultData[0]->value
  90. ), p
  91. (
  92. set::className('card-title'),
  93. $lang->metric->objectList[$metric->object]
  94. ))
  95. );
  96. return dtable
  97. (
  98. set::height(400),
  99. set::cols($resultHeader),
  100. set::data($resultData)
  101. );
  102. };
  103. if(!$this->metric->checkCalcExists($metric))
  104. {
  105. $metricDataSection = section
  106. (
  107. set::title($lang->metric->metricData),
  108. set::content($lang->metric->noCalc)
  109. );
  110. }
  111. else
  112. {
  113. $metricDataSection = section
  114. (
  115. set::title($lang->metric->metricData),
  116. $fnGenerateDataDisplay($resultData, $resultHeader, $lang, $metric)
  117. );
  118. }
  119. $actionMenuList = !$metric->deleted ? $this->metric->buildOperateMenu($metric) : array();
  120. detailBody
  121. (
  122. sectionList
  123. (
  124. section
  125. (
  126. set::title($lang->metric->desc),
  127. set::content(empty(trim($metric->desc)) ? $lang->metric->noDesc : $metric->desc),
  128. set::useHtml(true)
  129. ),
  130. section
  131. (
  132. set::title($lang->metric->formula),
  133. set::content(empty(trim($metric->definition)) ? $lang->metric->noFormula : $metric->definition),
  134. set::useHtml(true)
  135. ),
  136. $metricDataSection
  137. ),
  138. history
  139. (
  140. set::commentUrl(createLink('action', 'comment', array('objectType' => 'metric', 'objectID' => $metric->id)))
  141. ),
  142. floatToolbar
  143. (
  144. isAjaxRequest('modal') ? null : to::prefix(backBtn(set::icon('back'), $lang->goback)),
  145. !empty($actionMenuList['main']) ? set::main($actionMenuList['main']) : null,
  146. !empty($actionMenuList['suffix']) ? set::suffix($actionMenuList['suffix']) : null,
  147. set::object($metric)
  148. ),
  149. detailSide
  150. (
  151. tabs
  152. (
  153. set::collapse(true),
  154. tabPane
  155. (
  156. set::key('legendBasicInfo'),
  157. set::className('overflow-hidden'),
  158. set::title($lang->metric->legendBasicInfo),
  159. set::active(true),
  160. tableData
  161. (
  162. set::tdClass('break-all'),
  163. $buildItems($legendBasic)
  164. )
  165. ),
  166. tabPane
  167. (
  168. set::key('legendCreateInfo'),
  169. set::title($lang->metric->legendCreateInfo),
  170. tableData
  171. (
  172. $buildItems($createEditInfo)
  173. )
  174. )
  175. ),
  176. $oldMetricTabs
  177. )
  178. );
  179. if(!isInModal())
  180. {
  181. floatPreNextBtn
  182. (
  183. !empty($preAndNext->pre) ? set::preLink(createLink('metric', 'view', "id={$preAndNext->pre->id}")) : null,
  184. !empty($preAndNext->next) ? set::nextLink(createLink('metric', 'view', "id={$preAndNext->next->id}")) : null
  185. );
  186. }
  187. render();