// +---------------------------------------------------------------------- namespace ywxapp\controller; use ywxapp\service\AddonService as AddonService; use think\facade\Db; /** * Addon 类 * * @author ywxapp */ 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('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('addon')->where('name', $name)->find(); return json([ 'code' => 200, 'data' => [ 'info' => $info, 'installed' => $installed ?: false ] ]); } }