browse.html.php 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. <?php
  2. /**
  3. * The browse view file of store 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 Ke Zhao<zhaoke@easycorp.ltd>
  8. * @package store
  9. * @link https://www.zentao.net
  10. */
  11. namespace zin;
  12. $tree = array();
  13. foreach($categories as $id => $category)
  14. {
  15. $item = new stdclass();
  16. $item->id = $id;
  17. $item->parent = 0;
  18. $item->name = $category;
  19. $item->url = helper::createLink('store', 'browse', "sortType=$sortType&categoryID=$id");
  20. $tree[] = $item;
  21. }
  22. jsVar('tree', $tree);
  23. jsVar('postCategories', '');
  24. jsVar('sortType', $sortType);
  25. jsVar('currentCategoryID', $currentCategoryID);
  26. $setting = usePager();
  27. $cloudApps = array_chunk($cloudApps, 3);
  28. $groups = array();
  29. $canInstall = hasPriv('instance', 'manage');
  30. if(!empty($cloudApps))
  31. {
  32. foreach ($cloudApps as $group)
  33. {
  34. $items = array();
  35. if(count($group) < 3) $group = array_merge($group, array_fill(count($group) - 1, 3 - count($group), new stdclass()));
  36. foreach($group as $cloudApp)
  37. {
  38. if(empty($cloudApp->id))
  39. {
  40. $items[] = div(setClass('flex-1 p-2 content-between flex col store-item'));
  41. continue;
  42. }
  43. $items[] = div
  44. (
  45. setClass('flex-1 bg-white shadow p-2 content-between flex col store-item state open-url'),
  46. set('data-url', createLink('store', 'appview', "id=$cloudApp->id")),
  47. div
  48. (
  49. setStyle('height', '100px'),
  50. setClass('flex border-b border-lighter'),
  51. !empty($cloudApp->logo) ? img(set::src($cloudApp->logo), setStyle(array('width' => '80px', 'height' => '80px'))) : null,
  52. div
  53. (
  54. setClass('ml-4'),
  55. div($cloudApp->alias, setClass('app-name'), span($cloudApp->app_version, setClass('ml-5 label gray-pale rounded-full'))),
  56. div($cloudApp->introduction, setClass('line-2'))
  57. )
  58. ),
  59. div
  60. (
  61. setClass('mt-5 flex justify-between'),
  62. span
  63. (
  64. $lang->store->author,
  65. span($cloudApp->author, setClass('font-semibold ml-2'))
  66. ),
  67. $canInstall ? btn
  68. (
  69. $lang->store->install,
  70. setClass('primary btn size-sm install-btn'),
  71. setData('prevent', true),
  72. setData('toggle', 'modal'),
  73. setData('size', 'sm'),
  74. in_array($cloudApp->id, $installedApps) ? setData('confirm', $lang->store->alreadyInstalled) : null,
  75. setData('url', $this->createLink('space', 'createApplication', "id={$cloudApp->id}")),
  76. on::click('installApp', array('stop' => true))
  77. ) : null
  78. )
  79. );
  80. }
  81. $groups[] = div
  82. (
  83. setClass('flex gap-5 mt-5'),
  84. ...$items
  85. );
  86. }
  87. }
  88. $closeLink = createLink('store', 'browse', "sortType=$sortType");
  89. featureBar
  90. (
  91. set::current($sortType),
  92. set::linkParams("sortType={key}")
  93. );
  94. toolbar
  95. (
  96. formGroup
  97. (
  98. set::name('name'),
  99. on::keyup('searchApp'),
  100. set::control(array
  101. (
  102. 'id' => 'searchName',
  103. 'type' => 'inputControl',
  104. 'prefixWidth' => 'icon',
  105. 'placeholder' => $lang->store->searchApp,
  106. 'value' => $keyword
  107. ))
  108. )
  109. );
  110. div
  111. (
  112. setID('cloudAppContainer'),
  113. setClass('mb-5 flex col'),
  114. div(...$groups),
  115. count($cloudApps) ? pager(
  116. set::props(array('id' => 'storePager')),
  117. set::page($setting['page']),
  118. set::recTotal($setting['recTotal']),
  119. set::recPerPage($setting['recPerPage']),
  120. set::linkCreator($setting['linkCreator']),
  121. set::items($setting['items']),
  122. set::gap($setting['gap'])
  123. ) : null
  124. );
  125. sidebar
  126. (
  127. moduleMenu(set(array
  128. (
  129. 'modules' => $tree,
  130. 'activeKey' => $currentCategoryID,
  131. 'closeLink' => $closeLink,
  132. 'showDisplay' => false
  133. )))
  134. );