同步操作将从 FastAdmin 开源后台框架/FastAdmin 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
<?phpnamespace app\admin\controller;use app\common\controller\Backend;use fast\Http;use think\addons\AddonException;use think\addons\Service;use think\Cache;use think\Config;use think\Db;use think\Exception;/*** 插件管理** @icon fa fa-cube* @remark 可在线安装、卸载、禁用、启用、配置、升级插件,插件升级前请做好备份。*/class Addon extends Backend{protected $model = null;protected $noNeedRight = ['get_table_list'];public function _initialize(){parent::_initialize();if (!$this->auth->isSuperAdmin() && in_array($this->request->action(), ['install', 'uninstall', 'local', 'upgrade', 'authorization', 'testdata'])) {$this->error(__('Access is allowed only to the super management group'));}}/*** 插件列表*/public function index(){$addons = get_addon_list();foreach ($addons as $k => &$v) {$config = get_addon_config($v['name']);$v['config'] = $config ? 1 : 0;$v['url'] = str_replace($this->request->server('SCRIPT_NAME'), '', $v['url']);}$this->assignconfig(['addons' => $addons, 'api_url' => config('fastadmin.api_url'), 'faversion' => config('fastadmin.version'), 'domain' => request()->host(true)]);return $this->view->fetch();}/*** 配置*/public function config($name = null){$name = $name ? $name : $this->request->get("name");if (!$name) {$this->error(__('Parameter %s can not be empty', 'name'));}if (!preg_match("/^[a-zA-Z0-9]+$/", $name)) {$this->error(__('Addon name incorrect'));}$info = get_addon_info($name);$config = get_addon_fullconfig($name);if (!$info) {$this->error(__('Addon not exists'));}if ($this->request->isPost()) {$params = $this->request->post("row/a", [], 'trim');if ($params) {foreach ($config as $k => &$v) {if (isset($params[$v['name']])) {if ($v['type'] == 'array') {$params[$v['name']] = is_array($params[$v['name']]) ? $params[$v['name']] : (array)json_decode($params[$v['name']], true);$value = $params[$v['name']];} else {$value = is_array($params[$v['name']]) ? implode(',', $params[$v['name']]) : $params[$v['name']];}$v['value'] = $value;}}try {$addon = get_addon_instance($name);//插件自定义配置实现逻辑if (method_exists($addon, 'config')) {$addon->config($name, $config);} else {//更新配置文件set_addon_fullconfig($name, $config);Service::refresh();}} catch (Exception $e) {$this->error(__($e->getMessage()));}$this->success();}$this->error(__('Parameter %s can not be empty', ''));}$tips = [];$groupList = [];foreach ($config as $index => &$item) {//如果有设置分组if (isset($item['group']) && $item['group']) {if (!in_array($item['group'], $groupList)) {$groupList["custom" . (count($groupList) + 1)] = $item['group'];}}if ($item['name'] == '__tips__') {$tips = $item;unset($config[$index]);}}$groupList['other'] = '其它';$this->view->assign("groupList", $groupList);$this->view->assign("addon", ['info' => $info, 'config' => $config, 'tips' => $tips]);$configFile = ADDON_PATH . $name . DS . 'config.html';$viewFile = is_file($configFile) ? $configFile : '';return $this->view->fetch($viewFile);}/*** 安装*/public function install(){$name = $this->request->post("name");$force = (int)$this->request->post("force");if (!$name) {$this->error(__('Parameter %s can not be empty', 'name'));}if (!preg_match("/^[a-zA-Z0-9]+$/", $name)) {$this->error(__('Addon name incorrect'));}$info = [];try {$uid = $this->request->post("uid");$token = $this->request->post("token");$version = $this->request->post("version");$faversion = $this->request->post("faversion");$extend = ['uid' => $uid,'token' => $token,'version' => $version,'faversion' => $faversion];$info = Service::install($name, $force, $extend);} catch (AddonException $e) {$this->result($e->getData(), $e->getCode(), __($e->getMessage()));} catch (Exception $e) {$this->error(__($e->getMessage()), $e->getCode());}$this->success(__('Install successful'), '', ['addon' => $info]);}/*** 卸载*/public function uninstall(){$name = $this->request->post("name");$force = (int)$this->request->post("force");$droptables = (int)$this->request->post("droptables");if (!$name) {$this->error(__('Parameter %s can not be empty', 'name'));}if (!preg_match("/^[a-zA-Z0-9]+$/", $name)) {$this->error(__('Addon name incorrect'));}//只有开启调试且为超级管理员才允许删除相关数据库$tables = [];if ($droptables && Config::get("app_debug") && $this->auth->isSuperAdmin()) {$tables = get_addon_tables($name);}try {Service::uninstall($name, $force);if ($tables) {$prefix = Config::get('database.prefix');//删除插件关联表foreach ($tables as $index => $table) {//忽略非插件标识的表名if (!preg_match("/^{$prefix}{$name}/", $table)) {continue;}Db::execute("DROP TABLE IF EXISTS `{$table}`");}}} catch (AddonException $e) {$this->result($e->getData(), $e->getCode(), __($e->getMessage()));} catch (Exception $e) {$this->error(__($e->getMessage()));}$this->success(__('Uninstall successful'));}/*** 禁用启用*/public function state(){$name = $this->request->post("name");$action = $this->request->post("action");$force = (int)$this->request->post("force");if (!$name) {$this->error(__('Parameter %s can not be empty', 'name'));}if (!preg_match("/^[a-zA-Z0-9]+$/", $name)) {$this->error(__('Addon name incorrect'));}try {$action = $action == 'enable' ? $action : 'disable';//调用启用、禁用的方法Service::$action($name, $force);Cache::rm('__menu__');} catch (AddonException $e) {$this->result($e->getData(), $e->getCode(), __($e->getMessage()));} catch (Exception $e) {$this->error(__($e->getMessage()));}$this->success(__('Operate successful'));}/*** 本地上传*/public function local(){Config::set('default_return_type', 'json');$info = [];$file = $this->request->file('file');try {$uid = $this->request->post("uid");$token = $this->request->post("token");$faversion = $this->request->post("faversion");if (!$uid || !$token) {throw new Exception(__('Please login and try to install'));}$extend = ['uid' => $uid,'token' => $token,'faversion' => $faversion];$info = Service::local($file, $extend);} catch (AddonException $e) {$this->result($e->getData(), $e->getCode(), __($e->getMessage()));} catch (Exception $e) {$this->error(__($e->getMessage()));}$this->success(__('Offline installed tips'), '', ['addon' => $info]);}/*** 更新插件*/public function upgrade(){$name = $this->request->post("name");$addonTmpDir = RUNTIME_PATH . 'addons' . DS;if (!$name) {$this->error(__('Parameter %s can not be empty', 'name'));}if (!preg_match("/^[a-zA-Z0-9]+$/", $name)) {$this->error(__('Addon name incorrect'));}if (!is_dir($addonTmpDir)) {@mkdir($addonTmpDir, 0755, true);}$info = [];try {$uid = $this->request->post("uid");$token = $this->request->post("token");$version = $this->request->post("version");$faversion = $this->request->post("faversion");$extend = ['uid' => $uid,'token' => $token,'version' => $version,'faversion' => $faversion];//调用更新的方法$info = Service::upgrade($name, $extend);Cache::rm('__menu__');} catch (AddonException $e) {$this->result($e->getData(), $e->getCode(), __($e->getMessage()));} catch (Exception $e) {$this->error(__($e->getMessage()));}$this->success(__('Operate successful'), '', ['addon' => $info]);}/*** 测试数据*/public function testdata(){$name = $this->request->post("name");if (!$name) {$this->error(__('Parameter %s can not be empty', 'name'));}if (!preg_match("/^[a-zA-Z0-9]+$/", $name)) {$this->error(__('Addon name incorrect'));}try {Service::importsql($name, 'testdata.sql');} catch (AddonException $e) {$this->result($e->getData(), $e->getCode(), __($e->getMessage()));} catch (Exception $e) {$this->error(__($e->getMessage()), $e->getCode());}$this->success(__('Import successful'), '');}/*** 已装插件*/public function downloaded(){$offset = (int)$this->request->get("offset");$limit = (int)$this->request->get("limit");$filter = $this->request->get("filter");$search = $this->request->get("search");$search = htmlspecialchars(strip_tags($search));$onlineaddons = $this->getAddonList();$filter = (array)json_decode($filter, true);$addons = get_addon_list();$list = [];foreach ($addons as $k => $v) {if ($search && stripos($v['name'], $search) === false && stripos($v['title'], $search) === false && stripos($v['intro'], $search) === false) {continue;}if (isset($onlineaddons[$v['name']])) {$v = array_merge($v, $onlineaddons[$v['name']]);$v['price'] = '-';} else {$v['category_id'] = 0;$v['flag'] = '';$v['banner'] = '';$v['image'] = '';$v['donateimage'] = '';$v['demourl'] = '';$v['price'] = __('None');$v['screenshots'] = [];$v['releaselist'] = [];$v['url'] = addon_url($v['name']);$v['url'] = str_replace($this->request->server('SCRIPT_NAME'), '', $v['url']);}$v['createtime'] = filemtime(ADDON_PATH . $v['name']);if ($filter && isset($filter['category_id']) && is_numeric($filter['category_id']) && $filter['category_id'] != $v['category_id']) {continue;}$list[] = $v;}$total = count($list);if ($limit) {$list = array_slice($list, $offset, $limit);}$result = array("total" => $total, "rows" => $list);$callback = $this->request->get('callback') ? "jsonp" : "json";return $callback($result);}/*** 检测*/public function isbuy(){$name = $this->request->post("name");$uid = $this->request->post("uid");$token = $this->request->post("token");$version = $this->request->post("version");$faversion = $this->request->post("faversion");$extend = ['uid' => $uid,'token' => $token,'version' => $version,'faversion' => $faversion];try {$result = Service::isBuy($name, $extend);} catch (Exception $e) {$this->error(__($e->getMessage()));}return json($result);}/*** 刷新授权*/public function authorization(){$params = ['uid' => $this->request->post('uid'),'token' => $this->request->post('token'),'faversion' => $this->request->post('faversion'),];try {Service::authorization($params);} catch (Exception $e) {$this->error(__($e->getMessage()));}$this->success(__('Operate successful'));}/*** 获取插件相关表*/public function get_table_list(){$name = $this->request->post("name");if (!preg_match("/^[a-zA-Z0-9]+$/", $name)) {$this->error(__('Addon name incorrect'));}$tables = get_addon_tables($name);$prefix = Config::get('database.prefix');foreach ($tables as $index => $table) {//忽略非插件标识的表名if (!preg_match("/^{$prefix}{$name}/", $table)) {unset($tables[$index]);}}$tables = array_values($tables);$this->success('', null, ['tables' => $tables]);}protected function getAddonList(){$onlineaddons = Cache::get("onlineaddons");if (!is_array($onlineaddons) && config('fastadmin.api_url')) {$onlineaddons = [];$params = ['uid' => $this->request->post('uid'),'token' => $this->request->post('token'),'version' => config('fastadmin.version'),'faversion' => config('fastadmin.version'),];$json = [];try {$json = Service::addons($params);} catch (\Exception $e) {}$rows = isset($json['rows']) ? $json['rows'] : [];foreach ($rows as $index => $row) {$onlineaddons[$row['name']] = $row;}Cache::set("onlineaddons", $onlineaddons, 600);}return $onlineaddons;}}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。