Files
YwxAppThink/ywxapp/controller/Addon.php
T
ywxapp 1d49e6f5ee feat: 公共表更名 common/member 前缀 + 插件命令自动加载 + 版本 1.1.1
- 18 张公共表更名(addon/attachment/configure/links/spider_log/spider_stat/sms/notice/ad/task/prop/medal/help/card -> common_*,member_wallets->member_wallet,score_rule/score_log -> member_*,addon_config->common_addonconf),模型全部对齐新表名,Db 直引用清零
- Attachment 模型补  表名绑定,修复富文本上传查 wxapp_attachment 1146 隐患
- install.sql + 迁移 SQL:backend_admin/backend_role delete_at 默认 0,修复软删除(NULL != 0)误过滤导致后台菜单为空
- AppService::boot() 支持插件 info.php 声明 commands 自动注册插件命令(psr-4 自动加载,坏类名自动跳过)
- 各插件(haonav/mqttbroker/wxchat/articles/blog/forum 等)字段与配置同步调整
- 框架版本 1.1.0 -> 1.1.1
2026-08-20 20:19:15 +08:00

139 lines
4.3 KiB
PHP

<?php
// +----------------------------------------------------------------------
// | YwxApp [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2026-2036 http://ywxapp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Author: ywxapp<admin@ywxapp.cn>
// +----------------------------------------------------------------------
namespace ywxapp\controller;
use ywxapp\service\AddonService as AddonService;
use think\facade\Db;
/**
* Addon 类
*
* @author ywxapp <admin@ywxapp.cn>
*/
class Addon
{
public function index()
{
$list = [];
if (defined('ADDON_PATH') && is_dir(ADDON_PATH)) {
foreach (scandir(ADDON_PATH) as $name) {
if ($name === '.' || $name === '..' || !is_dir(ADDON_PATH . $name)) {
continue;
}
$infoFile = ADDON_PATH . $name . DIRECTORY_SEPARATOR . 'info.php';
if (!is_file($infoFile)) {
continue;
}
$info = include $infoFile;
if (!isset($info['name'])) {
continue;
}
$installedInfo = Db::name('common_addon')->where('name', $name)->find();
$list[] = [
'name' => $name,
'title' => $info['title'] ?? $name,
'description' => $info['description'] ?? '',
'version' => $info['version'] ?? '1.0.0',
'author' => $info['author'] ?? '',
'installed' => $installedInfo ? true : false,
'status' => $installedInfo['status'] ?? 0,
'installed_version' => $installedInfo['version'] ?? null,
'has_update' => $installedInfo
? version_compare($info['version'] ?? '1.0.0', $installedInfo['version'], '>')
: false,
];
}
}
return json([
'code' => 200,
'data' => $list
]);
}
public function install($name)
{
try {
AddonService::instance($name)->install();
return json(['code' => 200, 'msg' => '安装成功']);
} catch (\Exception $e) {
return json(['code' => 500, 'msg' => $e->getMessage()]);
}
}
public function uninstall($name)
{
try {
AddonService::instance($name)->uninstall();
return json(['code' => 200, 'msg' => '卸载成功']);
} catch (\Exception $e) {
return json(['code' => 500, 'msg' => $e->getMessage()]);
}
}
public function enable($name)
{
try {
AddonService::instance($name)->enable();
return json(['code' => 200, 'msg' => '启用成功']);
} catch (\Exception $e) {
return json(['code' => 500, 'msg' => $e->getMessage()]);
}
}
public function disable($name)
{
try {
AddonService::instance($name)->disable();
return json(['code' => 200, 'msg' => '禁用成功']);
} catch (\Exception $e) {
return json(['code' => 500, 'msg' => $e->getMessage()]);
}
}
public function upgrade($name)
{
try {
$service = AddonService::instance($name);
if (!method_exists($service, 'upgrade')) {
return json(['code' => 500, 'msg' => '当前版本不支持在线升级']);
}
$service->upgrade();
return json(['code' => 200, 'msg' => '升级成功']);
} catch (\Exception $e) {
return json(['code' => 500, 'msg' => $e->getMessage()]);
}
}
public function info($name)
{
try {
$info = AddonService::instance($name)->getInfo();
} catch (\Exception $e) {
return json(['code' => 404, 'msg' => '插件不存在']);
}
$installed = Db::name('common_addon')->where('name', $name)->find();
return json([
'code' => 200,
'data' => [
'info' => $info,
'installed' => $installed ?: false
]
]);
}
}