* @package extension * @link https://www.zentao.net */ namespace zin; $searchForm = div ( setClass('mb-5'), inputGroup ( input ( set::name('key'), set::value($this->post->key ? $this->post->key : ''), set::placeholder($lang->extension->bySearch) ), span ( setClass('input-group-btn'), btn ( icon('search'), on::click('searchExtension') ) ) ) ); $menuItems = array(); foreach(array('byUpdatedTime', 'byAddedTime', 'byDownloads') as $listType) { $active = (strtolower($listType) == $type) ? 'active' : ''; $menuItems[] = li ( setClass('menu-item'), a ( setClass($active), set::href(createLink('extension', 'obtain', "type=$listType")), $lang->extension->$listType ) ); } $featureItems = array(); foreach($lang->extension->featureBar['browse'] as $browseType => $browseLabel) { $featureItems[] = li ( setClass('nav-item'), a ( set('href', createLink('extension', 'browse', "type=$browseType")), set('data-id', $browseType), $browseLabel ) ); } featurebar($featureItems); toolbar ( hasPriv('extension', 'upload') ? item(set(array ( 'icon' => 'cog', 'text' => $lang->extension->upload, 'class' => 'ghost', 'url' => createLink('extension', 'upload'), 'data-toggle' => 'modal' ))) : null, hasPriv('extension', 'obtain') ? item(set(array ( 'icon' => 'download-alt', 'text' => $lang->extension->obtain, 'class' => 'primary', 'url' => createLink('extension', 'obtain') ))) : null ); foreach($moduleTree as $module) $module->url = createLink('extension', 'obtain', "type=bymodule¶m=" . base64_encode($module->id)); sidebar ( setClass('pb-5'), div ( setClass('fast-menu bg-white p-4 shadow-sm rounded rounded-sm'), $searchForm, menu ( setClass('p-0'), $menuItems ) ), moduleMenu ( setClass('module-menu'), set::title($lang->extension->byCategory), set::modules($moduleTree), set::activeKey($moduleID), set::closeLink(createLink('extension', 'obtain')), set::showDisplay(false) ) ); $extensionItems = array(); $extensionCount = count($extensions); $i = 1; foreach($extensions as $extension) { $currentRelease = $extension->currentRelease; $latestRelease = isset($extension->latestRelease) ? $extension->latestRelease : ''; $labelClass = $extension->offcial ? 'secondary' : 'warning'; $extensionInfo = array(); $extensionInfo[] = $lang->extension->author . ': '; $extensionInfo[] = html($extension->author); $extensionInfo[] = ' ' . $lang->extension->downloads . ': ' . $extension->downloads; $extensionInfo[] = ' ' . $lang->extension->compatible . ': ' . $lang->extension->compatibleList[$currentRelease->compatible]; if(!empty($currentRelease->depends)) { $extensionInfo[] = ' ' . $lang->extension->depends . ': '; foreach(json_decode($currentRelease->depends, true) as $code => $limit) { $extensionInfo[] .= $code; if($limit != 'all') { $extensionInfo[] .= '(' . !empty($limit['min']) . '>= v' . $limit['min']; $extensionInfo[] .= !empty($limit['max']) . '<= v' . $limit['max'] . ') '; } } } $btnItems = array(); $viewLink = $extension->site . "/extension-viewExt-{$extension->id}.html"; $btnItems[] = array('text' => $lang->extension->view, 'url' => $viewLink, 'target' => '_blank'); if($currentRelease->public) { if($extension->type != 'computer' && $extension->type != 'mobile') { if(isset($installeds[$extension->code])) { if($installeds[$extension->code]->version != $extension->latestRelease->releaseVersion && $this->extension->checkVersion($extension->latestRelease->zentaoCompatible)) { $upgradeLink = inlink('upgrade', "extension=$extension->code&downLink=" . helper::safe64Encode($currentRelease->downLink) . "&md5=$currentRelease->md5&type=$extension->type"); $btnItems[] = array('url' => $upgradeLink, 'text' => $lang->extension->upgrade, 'data-toggle' => 'modal'); } else { $btnItems[] = array('url' => 'javascript', 'text' => $lang->extension->upgrade, 'disabled' => 'disabled', 'class' => 'text-success'); } } } } $btnItems[] = array('text' => $lang->extension->downloadAB, 'url' => $currentRelease->downLink, 'target' => '_blank'); $btnItems[] = array('text' => $lang->extension->site, 'url' => $extension->site, 'target' => '_blank'); $stars = html::printStars($extension->stars, false); $extensionItems[] = div ( setClass('pb-2' . ($i < $extensionCount ? ' border-b' : '') . ($i > 1 ? ' mt-5' : '')), div ( setClass('font-bold mb-2'), $extension->name . "($currentRelease->releaseVersion)", span ( setClass("label $labelClass size-sm font-medium ml-2"), $lang->extension->obtainOfficial[$extension->offcial] ), $latestRelease && $latestRelease->releaseVersion != $currentRelease->releaseVersion ? div ( setClass('pull-right text-sm text-warning'), html(sprintf($lang->extension->latest, $latestRelease->viewLink, $latestRelease->releaseVersion, $latestRelease->zentaoCompatible)) ) : null ), div ( setClass('mb-2'), $extension->abstract ), div ( div ( setclass('mb-2'), $extensionInfo ), span ( $lang->extension->grade . ': ', html($stars) ), div ( setClass('pull-right'), btnGroup ( set::items($btnItems) ) ) ) ); $i ++; } if($pager->recTotal) { $extensionItems[] = pager ( set::style(array('float' => 'right')), set::type('full'), set::page($pager->pageID), set::recTotal($pager->recTotal), set::recPerPage($pager->recPerPage) ); } div ( setClass('flex col gap-y-1 p-5 bg-white'), $extensions ? $extensionItems : div ( setClass('alert ghost text-danger flex items-center'), icon ( 'exclamation-sign', set::size('2x'), set('class', 'alert-icon') ), div ( div ( setClass('font-bold text-lg'), $lang->extension->errorOccurs ), p ( html($lang->extension->errorGetExtensions) ) ) ) ); render();