znt/module/store/ui/appview.html.php

150 lines
4.8 KiB
PHP

<?php
declare(strict_types=1);
/**
* The appview view file of store 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 Ke Zhao<zhaoke@easycorp.ltd>
* @package store
* @link https://www.zentao.net
*/
namespace zin;
$screenshots = array_filter($cloudApp->screenshot_urls);
if(!empty($screenshots) && count($screenshots)%3) $screenshots = array_merge($screenshots, array_fill(0, count($screenshots)%3, ''));
$screenshotsWg = array();
foreach($screenshots as $screenshot)
{
$screenshotsWg[] = div
(
setClass('flex-1 img-thumbnail'),
$screenshot ? img
(
set::src($screenshot),
setClass('state'),
on::click('window.open("' . $screenshot . '")')
) : null
);
}
$dynamicArticlesWd = array();
foreach($dynamicArticles as $article)
{
$dynamicArticlesWd[] = h::tr(h::td(a($article->title, set::href($article->url), set::target('_bland'))));
}
$dropMenus = array();
$dropMenus[] = array('text' => $lang->store->gitUrl, 'icon' => 'github', 'id' => 'git', 'target' => '_blank', 'url' => zget($cloudApp, 'git_url', '#'));
$dropMenus[] = array('text' => $lang->store->dockerfileUrl, 'icon' => 'docker', 'id' => 'docker', 'target' => '_blank', 'url' => zget($cloudApp, 'dockerfile_url', '#'));
$dropMenus[] = array('text' => $lang->store->forumUrl, 'icon' => 'forum', 'id' => 'forum', 'target' => '_blank', 'url' => 'https://www.qucheng.com/forum/usage.html');
detailHeader(
to::prefix
(
backBtn
(
set::icon('back'),
set::type('secondary'),
set::url(inLink('browse')),
$lang->goback
)
),
to::title(''),
to::suffix
(
div
(
setID('store-detail-action'),
dropdown
(
set::staticMenu(true),
btn
(
setClass('ghost text-black mr-2'),
set::icon('info-sign'),
$lang->store->support,
),
set::items($dropMenus)
),
hasPriv('instance', 'manage') ? btn
(
$lang->store->install,
setClass('primary btn install-btn w-20'),
set::type('primary'),
set::url($this->createLink('space', 'createApplication', "id={$cloudApp->id}")),
setData('toggle', 'modal')
) : null
)
)
);
detailBody
(
sectionList
(
section
(
div
(
setClass('flex'),
img(set::src($cloudApp->logo), setStyle(array('width' => '50px', 'height' => '50px'))),
div(setClass('app-name-container'),div($cloudApp->alias, setClass('app-name')))
)
),
section
(
set::title($lang->store->appBasicInfo),
set::content($cloudApp->desc),
set::useHtml(true),
h::table
(
setStyle('min-width', '600px'),
setClass('table w-auto max-w-full bordered mt-4 text-center store-info'),
h::tr
(
h::th($lang->store->appVersion),
h::th($lang->store->appType),
h::th($lang->store->author),
h::th($lang->store->releaseDate)
),
h::tr
(
h::td($cloudApp->app_version),
h::td(trim(implode('/', helper::arrayColumn($cloudApp->categories, 'alias')), '/')),
h::td($cloudApp->author),
h::td((new \DateTime($cloudApp->publish_time))->format('Y-m-d'))
)
)
),
section
(
set::title($lang->store->screenshots),
div
(
setClass('flex gap-5 flex-wrap'),
empty($screenshotsWg) ? div($lang->store->noScreenshot, setClass('errorBox')) : '',
...$screenshotsWg
)
),
section
(
set::title($lang->store->appDynamic),
set::content(empty($dynamicArticles) ? $lang->store->noDynamicArticle : ''),
empty($dynamicArticles) ? '' : div
(
setClass('border pb-5 pt-5'),
h::table
(
setID('dynamicTable'),
setClass('table borderless table-hover mb-3'),
...$dynamicArticlesWd,
),
pager(set::props(array('id' => 'dynamicPager')))
)
)
)
);