obtain.html.php 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257
  1. <?php
  2. /**
  3. * The obtain view file of extension module of ZenTaoPMS.
  4. * @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(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 Tingting Dai <daitingting@easycorp.ltd>
  7. * @package extension
  8. * @link https://www.zentao.net
  9. */
  10. namespace zin;
  11. $searchForm = div
  12. (
  13. setClass('mb-5'),
  14. inputGroup
  15. (
  16. input
  17. (
  18. set::name('key'),
  19. set::value($this->post->key ? $this->post->key : ''),
  20. set::placeholder($lang->extension->bySearch)
  21. ),
  22. span
  23. (
  24. setClass('input-group-btn'),
  25. btn
  26. (
  27. icon('search'),
  28. on::click('searchExtension')
  29. )
  30. )
  31. )
  32. );
  33. $menuItems = array();
  34. foreach(array('byUpdatedTime', 'byAddedTime', 'byDownloads') as $listType)
  35. {
  36. $active = (strtolower($listType) == $type) ? 'active' : '';
  37. $menuItems[] = li
  38. (
  39. setClass('menu-item'),
  40. a
  41. (
  42. setClass($active),
  43. set::href(createLink('extension', 'obtain', "type=$listType")),
  44. $lang->extension->$listType
  45. )
  46. );
  47. }
  48. $featureItems = array();
  49. foreach($lang->extension->featureBar['browse'] as $browseType => $browseLabel)
  50. {
  51. $featureItems[] = li
  52. (
  53. setClass('nav-item'),
  54. a
  55. (
  56. set('href', createLink('extension', 'browse', "type=$browseType")),
  57. set('data-id', $browseType),
  58. $browseLabel
  59. )
  60. );
  61. }
  62. featurebar($featureItems);
  63. toolbar
  64. (
  65. hasPriv('extension', 'upload') ? item(set(array
  66. (
  67. 'icon' => 'cog',
  68. 'text' => $lang->extension->upload,
  69. 'class' => 'ghost',
  70. 'url' => createLink('extension', 'upload'),
  71. 'data-toggle' => 'modal'
  72. ))) : null,
  73. hasPriv('extension', 'obtain') ? item(set(array
  74. (
  75. 'icon' => 'download-alt',
  76. 'text' => $lang->extension->obtain,
  77. 'class' => 'primary',
  78. 'url' => createLink('extension', 'obtain')
  79. ))) : null
  80. );
  81. foreach($moduleTree as $module) $module->url = createLink('extension', 'obtain', "type=bymodule&param=" . base64_encode($module->id));
  82. sidebar
  83. (
  84. setClass('pb-5'),
  85. div
  86. (
  87. setClass('fast-menu bg-white p-4 shadow-sm rounded rounded-sm'),
  88. $searchForm,
  89. menu
  90. (
  91. setClass('p-0'),
  92. $menuItems
  93. )
  94. ),
  95. moduleMenu
  96. (
  97. setClass('module-menu'),
  98. set::title($lang->extension->byCategory),
  99. set::modules($moduleTree),
  100. set::activeKey($moduleID),
  101. set::closeLink(createLink('extension', 'obtain')),
  102. set::showDisplay(false)
  103. )
  104. );
  105. $extensionItems = array();
  106. $extensionCount = count($extensions);
  107. $i = 1;
  108. foreach($extensions as $extension)
  109. {
  110. $currentRelease = $extension->currentRelease;
  111. $latestRelease = isset($extension->latestRelease) ? $extension->latestRelease : '';
  112. $labelClass = $extension->offcial ? 'secondary' : 'warning';
  113. $extensionInfo = array();
  114. $extensionInfo[] = $lang->extension->author . ': ';
  115. $extensionInfo[] = html($extension->author);
  116. $extensionInfo[] = ' ' . $lang->extension->downloads . ': ' . $extension->downloads;
  117. $extensionInfo[] = ' ' . $lang->extension->compatible . ': ' . $lang->extension->compatibleList[$currentRelease->compatible];
  118. if(!empty($currentRelease->depends))
  119. {
  120. $extensionInfo[] = ' ' . $lang->extension->depends . ': ';
  121. foreach(json_decode($currentRelease->depends, true) as $code => $limit)
  122. {
  123. $extensionInfo[] .= $code;
  124. if($limit != 'all')
  125. {
  126. $extensionInfo[] .= '(' . !empty($limit['min']) . '>= v' . $limit['min'];
  127. $extensionInfo[] .= !empty($limit['max']) . '<= v' . $limit['max'] . ') ';
  128. }
  129. }
  130. }
  131. $btnItems = array();
  132. $viewLink = $extension->site . "/extension-viewExt-{$extension->id}.html";
  133. $btnItems[] = array('text' => $lang->extension->view, 'url' => $viewLink, 'target' => '_blank');
  134. if($currentRelease->public)
  135. {
  136. if($extension->type != 'computer' && $extension->type != 'mobile')
  137. {
  138. if(isset($installeds[$extension->code]))
  139. {
  140. if($installeds[$extension->code]->version != $extension->latestRelease->releaseVersion && $this->extension->checkVersion($extension->latestRelease->zentaoCompatible))
  141. {
  142. $upgradeLink = inlink('upgrade', "extension=$extension->code&downLink=" . helper::safe64Encode($currentRelease->downLink) . "&md5=$currentRelease->md5&type=$extension->type");
  143. $btnItems[] = array('url' => $upgradeLink, 'text' => $lang->extension->upgrade, 'data-toggle' => 'modal');
  144. }
  145. else
  146. {
  147. $btnItems[] = array('url' => 'javascript', 'text' => $lang->extension->upgrade, 'disabled' => 'disabled', 'class' => 'text-success');
  148. }
  149. }
  150. }
  151. }
  152. $btnItems[] = array('text' => $lang->extension->downloadAB, 'url' => $currentRelease->downLink, 'target' => '_blank');
  153. $btnItems[] = array('text' => $lang->extension->site, 'url' => $extension->site, 'target' => '_blank');
  154. $stars = html::printStars($extension->stars, false);
  155. $extensionItems[] = div
  156. (
  157. setClass('pb-2' . ($i < $extensionCount ? ' border-b' : '') . ($i > 1 ? ' mt-5' : '')),
  158. div
  159. (
  160. setClass('font-bold mb-2'),
  161. $extension->name . "($currentRelease->releaseVersion)",
  162. span
  163. (
  164. setClass("label $labelClass size-sm font-medium ml-2"),
  165. $lang->extension->obtainOfficial[$extension->offcial]
  166. ),
  167. $latestRelease && $latestRelease->releaseVersion != $currentRelease->releaseVersion ? div
  168. (
  169. setClass('pull-right text-sm text-warning'),
  170. html(sprintf($lang->extension->latest, $latestRelease->viewLink, $latestRelease->releaseVersion, $latestRelease->zentaoCompatible))
  171. ) : null
  172. ),
  173. div
  174. (
  175. setClass('mb-2'),
  176. $extension->abstract
  177. ),
  178. div
  179. (
  180. div
  181. (
  182. setclass('mb-2'),
  183. $extensionInfo
  184. ),
  185. span
  186. (
  187. $lang->extension->grade . ': ',
  188. html($stars)
  189. ),
  190. div
  191. (
  192. setClass('pull-right'),
  193. btnGroup
  194. (
  195. set::items($btnItems)
  196. )
  197. )
  198. )
  199. );
  200. $i ++;
  201. }
  202. if($pager->recTotal)
  203. {
  204. $extensionItems[] = pager
  205. (
  206. set::style(array('float' => 'right')),
  207. set::type('full'),
  208. set::page($pager->pageID),
  209. set::recTotal($pager->recTotal),
  210. set::recPerPage($pager->recPerPage)
  211. );
  212. }
  213. div
  214. (
  215. setClass('flex col gap-y-1 p-5 bg-white'),
  216. $extensions ? $extensionItems : div
  217. (
  218. setClass('alert ghost text-danger flex items-center'),
  219. icon
  220. (
  221. 'exclamation-sign',
  222. set::size('2x'),
  223. set('class', 'alert-icon')
  224. ),
  225. div
  226. (
  227. div
  228. (
  229. setClass('font-bold text-lg'),
  230. $lang->extension->errorOccurs
  231. ),
  232. p
  233. (
  234. html($lang->extension->errorGetExtensions)
  235. )
  236. )
  237. )
  238. );
  239. render();