viewsqlmetric.html.php 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357
  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. jsVar('metricID', $metric->id);
  13. jsVar('params', $params);
  14. /**
  15. * Build content of table data.
  16. *
  17. * @param array $items
  18. * @access public
  19. * @return array
  20. */
  21. $buildItems = function($items): array
  22. {
  23. $itemList = array();
  24. foreach($items as $item)
  25. {
  26. $itemList[] = item
  27. (
  28. set::name($item['name']),
  29. !empty($item['href']) ? a
  30. (
  31. set::href($item['href']),
  32. !empty($item['attr']) && is_array($item['attr']) ? set($item['attr']) : null,
  33. $item['text']
  34. ) : $item['text'],
  35. set::collapse(!empty($item['text']))
  36. );
  37. }
  38. return $itemList;
  39. };
  40. $formAction = array(
  41. array(
  42. 'text' => $lang->metric->testMetric,
  43. 'class' => 'secondary',
  44. 'type' => 'submit',
  45. 'onclick' => 'window.testMetric()'
  46. )
  47. );
  48. /**
  49. * Build default value and query value control.
  50. *
  51. * @param string $name
  52. * @param string $controlType
  53. * @param string $value
  54. * @param string $optionType
  55. * @access public
  56. * @return array
  57. */
  58. $buildValueControl = function($paramName, $controlType, $value, $optionType, $varID)
  59. {
  60. $name = $paramName . '[]';
  61. $options = $this->metric->getControlOptions($optionType);
  62. $dateControl = formGroup
  63. (
  64. set::width('150px'),
  65. set::label(''),
  66. datePicker
  67. (
  68. set::name($name),
  69. set::value($value)
  70. ),
  71. setClass("form-body-item {$paramName}-{$varID}-date"),
  72. setClass($controlType !== 'date' ? 'hidden' : '')
  73. );
  74. $selectControl = formGroup
  75. (
  76. set::width('150px'),
  77. set::label(''),
  78. picker
  79. (
  80. set::name($name),
  81. set::items($options),
  82. set::disabled($controlType !== 'select' ? true : false)
  83. ),
  84. setClass("form-body-item {$paramName}-{$varID}-select"),
  85. setClass($controlType !== 'select' ? 'hidden' : '')
  86. );
  87. $inputControl = formGroup
  88. (
  89. set::width('150px'),
  90. set::label(''),
  91. input
  92. (
  93. set::name($name),
  94. set::value($value),
  95. set::disabled($controlType !== 'input' ? true : false)
  96. ),
  97. setClass("form-body-item {$paramName}-{$varID}-input"),
  98. setClass($controlType !== 'input' ? 'hidden' : '')
  99. );
  100. return div
  101. (
  102. $dateControl,
  103. $selectControl,
  104. $inputControl,
  105. setClass("{$paramName}-{$varID}-group")
  106. );
  107. return $control;
  108. };
  109. $formHeader = div
  110. (
  111. div
  112. (
  113. setClass('form-header-item'),
  114. setStyle('width', '50px'),
  115. setStyle('text-align', 'center'),
  116. $lang->metric->param->varName
  117. ),
  118. div
  119. (
  120. setClass('form-header-item'),
  121. setStyle('width', '150px'),
  122. setStyle('text-align', 'center'),
  123. $lang->metric->param->showName
  124. ),
  125. div
  126. (
  127. setClass('form-header-item'),
  128. setStyle('width', '300px'),
  129. setStyle('text-align', 'center'),
  130. $lang->metric->param->varType
  131. ),
  132. div
  133. (
  134. setClass('form-header-item'),
  135. setStyle('width', '150px'),
  136. $lang->metric->param->defaultValue,
  137. setStyle('text-align', 'center')
  138. ),
  139. div
  140. (
  141. setClass('form-header-item'),
  142. setStyle('width', '150px'),
  143. setStyle('text-align', 'center'),
  144. $lang->metric->param->queryValue
  145. ),
  146. setClass('flex form-header'),
  147. setStyle('justify-content', 'space-between'),
  148. setStyle('flex', '1')
  149. );
  150. /**
  151. * Build a param control group.
  152. *
  153. * @param object $param
  154. * @param callable $buildValueControl
  155. * @access public
  156. * @return array
  157. */
  158. $buildParamControlGroup = function($param, $buildValueControl, $typeList, $optionList)
  159. {
  160. $varID = ltrim($param['varName'], '$');
  161. $varType = zget($param, 'varType', '');
  162. $varNameLabel = div
  163. (
  164. $param['varName'],
  165. setStyle('width', '50px'),
  166. setClass("form-body-item varName-{$varID}")
  167. );
  168. $showNameControl = formGroup
  169. (
  170. set::width('150px'),
  171. set::control('input'),
  172. set::name('showName[]'),
  173. set::value($param['showName']),
  174. setClass("form-body-item showName-{$varID}")
  175. );
  176. $varTypeControl = formGroup
  177. (
  178. set::width('150px'),
  179. set::name('varType[]'),
  180. set::control('select'),
  181. set::items($typeList),
  182. set::value(zget($param, 'varType')),
  183. set::label(''),
  184. setClass("form-body-item varType-{$varID}")
  185. );
  186. $optionsControl = formGroup
  187. (
  188. set::width('150px'),
  189. set::name('options[]'),
  190. set::control('select'),
  191. set::items($optionList),
  192. set::value($param['options']),
  193. setClass("form-body-item options-{$varID}"),
  194. set::label('')
  195. );
  196. $defaultValueControl = $buildValueControl('defaultValue', $varType, zget($param, 'defaultValue', ''), $param['options'], $varID);
  197. $queryValueControl = $buildValueControl('queryValue', $varType, zget($param, 'queryValue', ''), $param['options'], $varID);
  198. $varNameControl = formGroup
  199. (
  200. set::className('hidden'),
  201. set::control('hidden'),
  202. set::name('varName[]'),
  203. set::value($param['varName']),
  204. setClass("form-body-item varNameLabel-{$varID}")
  205. );
  206. $paramControlGroup = formRow
  207. (
  208. $varNameLabel,
  209. $showNameControl,
  210. div
  211. (
  212. $varTypeControl,
  213. $optionsControl,
  214. setClass('flex form-body-group'),
  215. setStyle('justify-content', 'flex-start')
  216. ),
  217. $defaultValueControl,
  218. $queryValueControl,
  219. $varNameControl,
  220. setClass('flex form-body'),
  221. setStyle('justify-content', 'space-between'),
  222. setStyle('align-items', 'center'),
  223. setStyle('flex', '1'),
  224. setStyle('width', '100%')
  225. );
  226. return $paramControlGroup;
  227. };
  228. $paramControlGroups = array();
  229. foreach($params as $param) $paramControlGroups[] = $buildParamControlGroup($param, $buildValueControl, $lang->metric->param->typeList, $lang->metric->param->options);
  230. $formAction = array(
  231. array(
  232. 'text' => $lang->metric->testMetric,
  233. 'class' => 'secondary',
  234. 'type' => 'submit',
  235. 'onclick' => 'testMetric({id})'
  236. )
  237. );
  238. detailHeader
  239. (
  240. to::title
  241. (
  242. entityLabel
  243. (
  244. set::entityID($metric->id),
  245. set::level(1),
  246. set::text($metric->name)
  247. ),
  248. $metric->deleted == '1' ? label
  249. (
  250. set::text($lang->deleted),
  251. setClass('danger')
  252. ) : null
  253. ),
  254. to::prefix
  255. (
  256. backBtn
  257. (
  258. set::icon('back'),
  259. set::type('secondary'),
  260. $lang->goback
  261. )
  262. )
  263. );
  264. $actionMenuList = !$metric->deleted ? $this->metric->buildOperateMenu($metric) : array();
  265. detailBody
  266. (
  267. on::change('#varType', 'toggleVarType'),
  268. on::change('#options', 'toggleOptionsList'),
  269. sectionList
  270. (
  271. section
  272. (
  273. set::title($lang->metric->declaration),
  274. set::content(empty(trim($metric->definition)) ? $lang->metric->noFormula : $metric->definition),
  275. set::useHtml(true)
  276. ),
  277. section
  278. (
  279. set::title($lang->metric->sqlStatement),
  280. set::content(empty(trim($metric->sql)) ? $lang->metric->noSQL : $metric->sql),
  281. set::useHtml(true)
  282. ),
  283. section
  284. (
  285. set::title($lang->metric->metricData),
  286. formBase
  287. (
  288. $formHeader,
  289. $paramControlGroups,
  290. setClass('flex params-form'),
  291. setStyle('flex-direction', 'column'),
  292. setStyle('justify-content', 'space-between'),
  293. set::actions($formAction),
  294. div
  295. (
  296. setClass('response-box')
  297. )
  298. )
  299. )
  300. ),
  301. history
  302. (
  303. set::commentUrl(createLink('action', 'comment', array('objectType' => 'metric', 'objectID' => $metric->id)))
  304. ),
  305. floatToolbar
  306. (
  307. isAjaxRequest('modal') ? null : to::prefix(backBtn(set::icon('back'), $lang->goback)),
  308. !empty($actionMenuList['main']) ? set::main($actionMenuList['main']) : null,
  309. !empty($actionMenuList['suffix']) ? set::suffix($actionMenuList['suffix']) : null,
  310. set::object($metric)
  311. ),
  312. detailSide
  313. (
  314. tabs
  315. (
  316. set::collapse(true),
  317. tabPane
  318. (
  319. set::key('legendBasicInfo'),
  320. set::className('overflow-hidden'),
  321. set::title($lang->metric->legendBasicInfo),
  322. set::active(true),
  323. tableData
  324. (
  325. $buildItems($legendBasic)
  326. )
  327. )
  328. )
  329. )
  330. );
  331. if(!isInModal())
  332. {
  333. floatPreNextBtn
  334. (
  335. !empty($preAndNext->pre) ? set::preLink(createLink('metric', 'view', "id={$preAndNext->pre->id}")) : null,
  336. !empty($preAndNext->next) ? set::nextLink(createLink('metric', 'view', "id={$preAndNext->next->id}")) : null
  337. );
  338. }
  339. render();