audit.html.php 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311
  1. <?php
  2. /**
  3. * The audit view file of review module of ZenTaoPMS.
  4. * @copyright Copyright 2009-2024 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.zentao.net)
  5. * @license ZPL(https://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
  6. * @author Mengyi Liu
  7. * @package review
  8. * @link https://www.zentao.net
  9. */
  10. namespace zin;
  11. $sideWidth = '550';
  12. div
  13. (
  14. setClass('detail-header row gap-2 items-center flex-none'),
  15. backBtn
  16. (
  17. setClass('mr-2 size-md primary-outline'),
  18. set::icon('back'),
  19. set::text($lang->goback)
  20. ),
  21. entityTitle(setClass('min-w-0'), set::id($review->id), set::object($review), set::title($review->title), set::titleClass('text-lg text-clip font-bold'), set::type('review'), set::joinerClass('text-lg'))
  22. );
  23. $reviewData = json_decode($review->data, true);
  24. $showWithPageEditor = isset($reviewData['$migrate']) && $reviewData['$migrate'] == 'html';
  25. jsVar('showWithPageEditor', $showWithPageEditor);
  26. $articleContent = array();
  27. $docID = isset($doc->id) ? $doc->id : 0;
  28. $bookID = isset($bookID) ? $bookID : 0;
  29. $isTemplate = !empty($review->template) && empty($review->doc);
  30. if(empty($review->template) && empty($review->doc) && $review->category == 'PP')
  31. {
  32. $from = 'doc';
  33. $ganttType = 'gantt';
  34. $productID = $review->product;
  35. $projectID = $review->project;
  36. include $app->getModuleRoot() . 'programplan/ui/ganttfields.html.php';
  37. data('showFields', 'PM,status,deadline');
  38. $ganttFields['column_text'] = $lang->programplan->ganttBrowseType['gantt'];
  39. $articleContent[] = gantt
  40. (
  41. set('ganttLang', $ganttLang),
  42. set('ganttFields', $ganttFields),
  43. set('options', $plans),
  44. set('showChart', false),
  45. set('colsWidth', $sideWidth - 40),
  46. set('height', '300')
  47. );
  48. }
  49. elseif($isTemplate)
  50. {
  51. if($config->requestType == 'PATH_INFO' && !empty($review->data))
  52. {
  53. preg_match_all("/data-fetcher='([^']+\?(m=doc&f=zentaoList&[^']+))'/", $review->data, $matches);
  54. foreach($matches[2] as $i => $httpQuery)
  55. {
  56. parse_str($httpQuery, $queries);
  57. $moduleName = $queries[$config->moduleVar];
  58. $methodName = $queries[$config->methodVar];
  59. unset($queries[$config->moduleVar], $queries[$config->methodVar], $queries[$config->viewVar]);
  60. $url = helper::createLink($moduleName, $methodName, http_build_query($queries));
  61. $review->data = str_replace($matches[1][$i], $url, $review->data);
  62. }
  63. }
  64. $articleContent[] = empty($review->data) ? null : pageEditor
  65. (
  66. set::size('auto'),
  67. set::readonly(true),
  68. set::value($review->data)
  69. );
  70. }
  71. else
  72. {
  73. if(isset($doc) and $doc)
  74. {
  75. $articleContent[] = div(setClass('text-md py-1 font-bold'), $doc->title);
  76. $articleContent[] = div
  77. (
  78. setClass('detail-content article-content'),
  79. $doc->contentType === 'doc' ? pageEditor
  80. (
  81. set::size('auto'),
  82. set::readonly(true),
  83. set::value(isset($doc->rawContent) ? $doc->rawContent : $doc->content)
  84. ) : editor
  85. (
  86. set::resizable(false),
  87. set::markdown($doc->contentType == 'markdown'),
  88. set::readonly(true),
  89. set::hideUI(true),
  90. set::size('auto'),
  91. html($doc->content)
  92. )
  93. );
  94. }
  95. elseif(isset($template) and (!isset($doc) or !$doc))
  96. {
  97. $articleContent[] = pageEditor
  98. (
  99. set::size('auto'),
  100. set::readonly(true),
  101. set::value(empty($template->rawContent) ? $template->content : $template->rawContent)
  102. );
  103. }
  104. }
  105. $reviewclContent = array();
  106. if($cmcl)
  107. {
  108. $cmclTrs = array();
  109. foreach($cmcl as $category => $list)
  110. {
  111. $listTrs = array();
  112. $i = 0;
  113. foreach($list as $data)
  114. {
  115. $listData = array();
  116. $listData[] = h::td
  117. (
  118. set::title(zget($items, $data->title)),
  119. zget($items, $data->title)
  120. );
  121. $listData[] = h::td(a(set::href(createLink('cmcl', 'view', "id=$data->id")), set::title($data->contents), $data->contents));
  122. $listData[] = h::td
  123. (
  124. radioList
  125. (
  126. setClass('issueResult'),
  127. on::change('window.resultChange'),
  128. set::name('issueResult[' . $data->id . ']'),
  129. set::inline(true),
  130. set::items($lang->review->checkList),
  131. set::value('1')
  132. )
  133. );
  134. $listData[] = h::td
  135. (
  136. setClass('issue-opintion'),
  137. textarea
  138. (
  139. set::name("issueOpinion[{$data->id}]"),
  140. set::value(''),
  141. set::disabled(true),
  142. set::rows('1')
  143. ),
  144. inputGroup
  145. (
  146. setClass('opinionDate hidden mt-2'),
  147. span
  148. (
  149. setClass('nowrap content-center mr-1'),
  150. $lang->review->opinionDate
  151. ),
  152. datePicker(set::name("opinionDate[$data->id]"))
  153. )
  154. );
  155. $listTrs[] = $i == 0 ? $listData : h::tr($listData);
  156. $i ++;
  157. }
  158. $cmclTrs[] = h::tr
  159. (
  160. h::td
  161. (
  162. setClass('text-center'),
  163. set::rowspan(count($list)),
  164. h::strong(zget($typeList, $category))
  165. ),
  166. $listTrs
  167. );
  168. }
  169. $reviewclContent[] = panel
  170. (
  171. setID('reviewcl'),
  172. setClass('w-full overflow-y-auto'),
  173. div(setClass('text-md py-1 font-bold'), $lang->review->reviewcl),
  174. div
  175. (
  176. setClass('detail-content'),
  177. h::table(setClass('table bordered'), h::tr
  178. (
  179. h::td
  180. (
  181. setClass('text-center w-24'),
  182. $lang->review->listCategory
  183. ),
  184. h::td
  185. (
  186. setClass('text-center w-32'),
  187. $lang->review->listItem
  188. ),
  189. h::td
  190. (
  191. setClass('text-center'),
  192. $lang->review->listTitle
  193. ),
  194. h::td
  195. (
  196. setClass('text-center w-24'),
  197. $lang->review->listResult
  198. ),
  199. h::td
  200. (
  201. setClass('text-center w-44'),
  202. $lang->review->opinion
  203. )
  204. ), $cmclTrs)
  205. )
  206. );
  207. }
  208. $reviewclContent[] = panel
  209. (
  210. setClass(empty($reviewcl) ? '' : 'review-footer'),
  211. formGroup
  212. (
  213. setClass('mb-3'),
  214. set::label($lang->review->auditResult),
  215. radioList
  216. (
  217. on::change('window.auditResultChange'),
  218. set::name('result'),
  219. set::inline(true),
  220. set::items($lang->review->auditResultList),
  221. set::value(isset($result->resule) ? $result->resule : 'pass')
  222. )
  223. ),
  224. formRow
  225. (
  226. setClass('mb-3'),
  227. formGroup
  228. (
  229. setClass('w-1/2'),
  230. set::label($lang->review->auditedDate),
  231. set::control('datePicker'),
  232. set::name('createdDate'),
  233. set::value(helper::today())
  234. ),
  235. formGroup
  236. (
  237. setClass('w-1/2'),
  238. set::label($lang->review->consumed),
  239. inputControl
  240. (
  241. input
  242. (
  243. set::name('consumed'),
  244. set::value(isset($result->consumed) ? $result->consumed : 0)
  245. ),
  246. to::suffix('h')
  247. )
  248. )
  249. ),
  250. formGroup
  251. (
  252. setClass('mb-3'),
  253. set::label($lang->review->auditOpinion),
  254. set::control('editor'),
  255. set::name('opinion'),
  256. set::value(isset($result->opinion) ? $result->opinion : '')
  257. ),
  258. formRow
  259. (
  260. setClass('form-actions'),
  261. button(setClass('btn primary'), set::type('primary'), set::btnType('submit'), $lang->save)
  262. )
  263. );
  264. div
  265. (
  266. setClass('row gap-4 mt-2'),
  267. div
  268. (
  269. width("{$sideWidth}px"),
  270. panel(setID('reviewRow'), setClass('overflow-y-auto'), (
  271. setID('bookTree')
  272. ), div
  273. (
  274. $articleContent
  275. ), !empty($review->files) ? fileList(set::files($review->files), set::padding(false)) : null, isset($doc) ? fileList(set::files($doc->files), set::padding(false)) : null)
  276. ),
  277. div
  278. (
  279. setID('issueList'),
  280. setClass('col'),
  281. form
  282. (
  283. set::actions(array()),
  284. $reviewclContent
  285. ),
  286. div
  287. (
  288. setClass('mt-4'),
  289. history(set::objectID($review->id))
  290. )
  291. )
  292. );
  293. pageJS(<<<JAVASCRIPT
  294. $(function()
  295. {
  296. if($bookID && !showWithPageEditor) loadCurrentPage({url: $.createLink('review', 'book', 'bookID=' + $bookID + '&reviewID=' + $review->id + '&docID' + $docID), selector: '#bookTree', partial: true});
  297. });
  298. JAVASCRIPT
  299. );
  300. render();