templatehome.html.php 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. <?php
  2. /**
  3. * The browse template home file of doc 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 Song chenxuan<songchenxuan@easycorp.ltd>
  7. * @package doc
  8. * @link https://www.zentao.net
  9. */
  10. namespace zin;
  11. $scopeList = $this->doc->getTemplateScopes();
  12. $scopeTemplates = $this->doc->getScopeTemplates(array_keys($scopeList));
  13. $allTemplates = $this->doc->getTemplatesByType();
  14. $buildScopeCards = function($templates) use ($lang, $allTemplates)
  15. {
  16. $cardItems = array();
  17. foreach($templates as $template)
  18. {
  19. $hasChildren = false;
  20. foreach($allTemplates as $templateInfo)
  21. {
  22. if($templateInfo->id == $template->id) continue;
  23. if(strpos(",{$templateInfo->path},", ",{$template->id},") !== false) $hasChildren = true;
  24. }
  25. $cardDesc = $template->templateDesc ? $template->templateDesc : $lang->docTemplate->noDesc;
  26. $viewLink = createLink('doc', 'view', "docID=$template->id");
  27. $editLink = createLink('doc', 'browsetemplate', "libID=$template->lib&type=all&docID=$template->id&orderBy=id_desc&recPerPage=20&page=1&mode=edit");
  28. $deleteLink = createLink('doc', 'deleteTemplate', "templateID=$template->id");
  29. $actions = array();
  30. if($template->addedBy == $this->app->user->account || hasPriv('doc', 'editTemplate')) $actions[] = array('icon' => 'edit', 'text' => $this->lang->docTemplate->edit, 'url' => $editLink);
  31. if(hasPriv('doc', 'deleteTemplate')) $actions[] = array('icon' => 'trash', 'text' => $this->lang->docTemplate->delete, 'url' => $deleteLink, 'data-confirm' => $hasChildren ? $this->lang->docTemplate->confirmDeleteTemplateWithSub : $this->lang->docTemplate->confirmDelete);
  32. $cardItems[] = div
  33. (
  34. hasPriv('doc', 'viewTemplate') ? on::click()->do("clickTemplateCard(event, '$viewLink')") : null,
  35. setClass('doc-space-card-lib px-2 w-1/5 group'),
  36. div
  37. (
  38. setClass('canvas border rounded py-2 px-3 col gap-1 hover:shadow-lg hover:border-primary relative cursor-pointer'),
  39. div
  40. (
  41. setClass('flex gap-2 items-center py-2'),
  42. icon
  43. (
  44. setClass('icon-file-archive text-2xl')
  45. ),
  46. div
  47. (
  48. setClass('font-bold text-clip'),
  49. set::title($template->title),
  50. $template->title
  51. )
  52. ),
  53. div
  54. (
  55. setClass('text-gray text-clip text-sm py-1'),
  56. set::title($cardDesc),
  57. $cardDesc
  58. ),
  59. div
  60. (
  61. setClass('toolbar absolute top-1 right-1 opacity-0 group-hover:opacity-100'),
  62. !empty($actions) ? dropdown
  63. (
  64. btn(setClass('size-sm dropdown'), set::type('ghost'), set::icon('ellipsis-v'), set::caret(false)),
  65. set::items($actions),
  66. set::flip(true),
  67. set::placement('bottom-center'),
  68. set::strategy('absolute'),
  69. set::hasIcons(false)
  70. ) : null
  71. )
  72. )
  73. );
  74. }
  75. return $cardItems;
  76. };
  77. $scopeItems = array();
  78. foreach($scopeList as $scope)
  79. {
  80. $scopeDocs = $scopeTemplates[$scope->id];
  81. $scopeItems[] = div
  82. (
  83. setClass('doc-space-card ring rounded surface-light'),
  84. div(setClass('row items-center justify-between gap-2 px-2.5 py-1 border-b'), div(setClass('row items-center ml-2 flex-none'), div
  85. (
  86. setClass('min-w-0 flex-auto'),
  87. strong($scope->name),
  88. span(setClass('label ml-2 flex-none bg-white size-sm text-sm'), $lang->docTemplate->scopeLabel)
  89. )), toolbar
  90. (
  91. item(set(array
  92. (
  93. 'type' => 'ghost',
  94. 'caret' => 'right',
  95. 'class' => 'text-primary',
  96. 'text' => $lang->more,
  97. 'url' => createLink('doc', 'browseTemplate', "libID={$scope->id}&type=all&docID=0&orderBy=id_desc&recPerPae=20&pageID=1&mode=list")
  98. )))
  99. )),
  100. div
  101. (
  102. setClass('doc-space-card-libs py-3 px-1.5'),
  103. !empty($scopeDocs) ? div
  104. (
  105. setClass('row'),
  106. $buildScopeCards($scopeDocs)
  107. ) : div
  108. (
  109. setClass('center gap-4 py-10'),
  110. div
  111. (
  112. setClass('text-gray'),
  113. $lang->docTemplate->noTemplate
  114. )
  115. )
  116. )
  117. );
  118. }
  119. featureBar();
  120. toolbar
  121. (
  122. common::hasPriv('doc', 'manageScope') ? btn
  123. (
  124. setData(array('toggle' => 'modal', 'size' => 'sm')),
  125. set::text($lang->doc->manageScope),
  126. set::icon('plus'),
  127. set::type('primary'),
  128. set::url(createLink('doc', 'manageScope'))
  129. ) : null
  130. );
  131. div
  132. (
  133. setClass('doc-home-body flex-auto min-h-0 col gap-4 p-0.5 items-stretch overflow-auto scrollbar-hover'),
  134. $scopeItems
  135. );