259 lines
7.5 KiB
PHP
259 lines
7.5 KiB
PHP
<?php
|
|
declare(strict_types=1);
|
|
/**
|
|
* The obtain view file of extension module of ZenTaoPMS.
|
|
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.zentao.net)
|
|
* @license ZPL(https://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
|
* @author Tingting Dai <daitingting@easycorp.ltd>
|
|
* @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();
|
|
|