diff --git a/README.md b/README.md index c3981c1..b8fbb30 100644 --- a/README.md +++ b/README.md @@ -36,13 +36,17 @@ - 在`系统基本设置`修改宝塔面板接口设置。你需要一个官方最新脚本安装并绑定账号的宝塔面板,用于获取最新插件列表及插件包。并根据界面提示安装好专用插件。 - 在`定时任务设置`执行所显示的命令从宝塔官方获取最新的插件列表并批量下载插件包(增量更新)。当然你也可以去插件列表,一个一个点击下载。 -- 在public/install/src和update文件夹里面分别是bt安装包和更新包,解压后源码里面全部的 www.example.com 替换成你自己搭建的云端域名,然后重新打包。可使用VSCode等支持批量替换的软件。 -- 将bt安装脚本public/install/install_6.0.sh和更新脚本update6.sh里面的 www.example.com 替换成你自己搭建的云端域名。 +- 在public/install/src和update文件夹里面分别是Linux面板安装包和更新包,解压后源码里面全部的 www.example.com 替换成你自己搭建的云端域名(如果云端用了强制https也需要单独改),然后重新打包。可使用VSCode等支持批量替换的软件。 +- 在public/win/panel/panel_x.x.x.zip是Windows面板的更新包,同样方法替换域名。 +- Linux面板安装脚本public/install/install_6.0.sh和更新脚本update6.sh里面的 www.example.com 替换成你自己搭建的云端域名。 +- Windows面板更新脚本 public/win/install/panel_update.py、public/win/panel/data/setup.py、api.py 里面的 www.example.com 替换成你自己搭建的云端域名。 - 访问网站`/download`查看使用此第三方云端的一键安装脚本 ## 其他 -- [bt官方更新包修改记录](./wiki/update.md) +- [Linux面板官方更新包修改记录](./wiki/update.md) + +- [Windows面板官方更新包修改记录](./wiki/updatewin.md) - 宝塔面板官方版与此第三方云端版对比: diff --git a/app/command/UpdateAll.php b/app/command/UpdateAll.php index 3395667..f6df2f1 100644 --- a/app/command/UpdateAll.php +++ b/app/command/UpdateAll.php @@ -25,16 +25,27 @@ class UpdateAll extends Command $res = Db::name('config')->cache('configs',0)->column('value','key'); Config::set($res, 'sys'); + if(config_get('bt_url')){ + $this->process_plugins($input, $output, 'Linux'); + } + if(config_get('wbt_url')){ + $this->process_plugins($input, $output, 'Windows'); + } + + config_set('runtime', date('Y-m-d H:i:s')); + } + + private function process_plugins(Input $input, Output $output, $os){ //刷新插件列表 - if(!$this->refresh_plugin_list($input, $output)){ + if(!$this->refresh_plugin_list($input, $output, $os)){ return; } $count = 0; - $type = intval(config_get('updateall_type')); + $type = intval(config_get($os=='Windows'?'updateall_type_win':'updateall_type')); - $json_arr = Plugins::get_plugin_list(); + $json_arr = Plugins::get_plugin_list($os); //循环下载缺少的插件 foreach($json_arr['list'] as $plugin){ if($type == 0 && ($plugin['type']==8 || $plugin['type']==12) || $type == 1 && $plugin['type']==12 || $plugin['type']==10 || $plugin['type']==5) continue; @@ -43,18 +54,18 @@ class UpdateAll extends Command $ver = $version['m_version'].'.'.$version['version']; if(isset($version['download'])){ if(!file_exists(get_data_dir().'plugins/other/'.$version['download'])){ - if(!$this->download_plugin($input, $output, $plugin['name'], $ver)){ + if(!$this->download_plugin($input, $output, $plugin['name'], $ver, $os)){ sleep(1); - $this->download_plugin($input, $output, $plugin['name'], $ver); + $this->download_plugin($input, $output, $plugin['name'], $ver, $os); } sleep(1); $count++; } }else{ - if(!file_exists(get_data_dir().'plugins/package/'.$plugin['name'].'-'.$ver.'.zip')){ - if(!$this->download_plugin($input, $output, $plugin['name'], $ver)){ + if(!file_exists(get_data_dir($os).'plugins/package/'.$plugin['name'].'-'.$ver.'.zip')){ + if(!$this->download_plugin($input, $output, $plugin['name'], $ver, $os)){ sleep(1); - $this->download_plugin($input, $output, $plugin['name'], $ver); + $this->download_plugin($input, $output, $plugin['name'], $ver, $os); } sleep(1); $count++; @@ -62,29 +73,15 @@ class UpdateAll extends Command } } } - - $imgcount = 0; - //循环下载缺少的插件图片 - /*foreach($json_arr['list'] as $plugin){ - if(isset($plugin['min_image']) && strpos($plugin['min_image'], 'fname=')){ - $fname = substr($plugin['min_image'], strpos($plugin['min_image'], '?fname=')+7); - if(!file_exists(get_data_dir().'plugins/other/'.$fname)){ - $this->download_plugin_image($input, $output, $fname); - sleep(1); - $imgcount++; - } - } - }*/ - $output->writeln('本次成功下载'.$count.'个插件'.($imgcount>0?','.$imgcount.'个图片':'')); - config_set('runtime', date('Y-m-d H:i:s')); + $output->writeln($os.'本次成功下载'.$count.'个插件'); } - private function refresh_plugin_list(Input $input, Output $output){ + private function refresh_plugin_list(Input $input, Output $output, $os){ try{ - Plugins::refresh_plugin_list(); - Db::name('log')->insert(['uid' => 1, 'action' => '刷新插件列表', 'data' => '刷新插件列表成功', 'addtime' => date("Y-m-d H:i:s")]); - $output->writeln('刷新插件列表成功'); + Plugins::refresh_plugin_list($os); + Db::name('log')->insert(['uid' => 1, 'action' => '刷新插件列表', 'data' => '刷新'.$os.'插件列表成功', 'addtime' => date("Y-m-d H:i:s")]); + $output->writeln('刷新'.$os.'插件列表成功'); return true; }catch(\Exception $e){ $output->writeln($e->getMessage()); @@ -93,12 +90,12 @@ class UpdateAll extends Command } } - private function download_plugin(Input $input, Output $output, $plugin_name, $version){ + private function download_plugin(Input $input, Output $output, $plugin_name, $version, $os){ $fullname = $plugin_name.'-'.$version; try{ - Plugins::download_plugin($plugin_name, $version); - Db::name('log')->insert(['uid' => 1, 'action' => '下载插件', 'data' => $fullname, 'addtime' => date("Y-m-d H:i:s")]); - $output->writeln('下载插件: '.$fullname.' 成功'); + Plugins::download_plugin($plugin_name, $version, $os); + Db::name('log')->insert(['uid' => 1, 'action' => '下载插件', 'data' => $fullname.' os:'.$os, 'addtime' => date("Y-m-d H:i:s")]); + $output->writeln('下载'.$os.'插件: '.$fullname.' 成功'); return true; }catch(\Exception $e){ $output->writeln($fullname.' '.$e->getMessage()); diff --git a/app/common.php b/app/common.php index 58499cd..3f8eb10 100644 --- a/app/common.php +++ b/app/common.php @@ -2,8 +2,8 @@ // 应用公共文件 use think\facade\Db; -function get_data_dir(){ - return app()->getRootPath().'data/'; +function get_data_dir($os = 'Linux'){ + return app()->getRootPath().'data/'.($os == 'Windows' ? 'win/' : ''); } diff --git a/app/controller/Admin.php b/app/controller/Admin.php index bda4bc0..5fc6322 100644 --- a/app/controller/Admin.php +++ b/app/controller/Admin.php @@ -133,7 +133,7 @@ class Admin extends BaseController if(!$bt_url || !$bt_key)return json(['code'=>-1, 'msg'=>'参数不能为空']); $btapi = new Btapi($bt_url, $bt_key); $result = $btapi->get_config(); - if($result && isset($result['status']) && $result['status']==1){ + if($result && isset($result['status']) && ($result['status']==1 || isset($result['sites_path']))){ $result = $btapi->get_user_info(); if($result && isset($result['username'])){ return json(['code'=>0, 'msg'=>'面板连接测试成功!']); @@ -157,11 +157,25 @@ class Admin extends BaseController return view(); } + public function pluginswin(){ + $typelist = []; + $json_arr = Plugins::get_plugin_list('Windows'); + if($json_arr){ + foreach($json_arr['type'] as $type){ + $typelist[$type['id']] = $type['title']; + } + } + View::assign('typelist', $typelist); + return view(); + } + public function plugins_data(){ $type = input('post.type/d'); $keyword = input('post.keyword', null, 'trim'); + $os = input('get.os'); + if(!$os) $os = 'Linux'; - $json_arr = Plugins::get_plugin_list(); + $json_arr = Plugins::get_plugin_list($os); if(!$json_arr) return json([]); $typelist = []; @@ -184,7 +198,7 @@ class Admin extends BaseController $versions[] = ['status'=>$status, 'type'=>1, 'version'=>$ver, 'download'=>$version['download'], 'md5'=>$version['md5']]; }else{ $status = false; - if(file_exists(get_data_dir().'plugins/package/'.$plugin['name'].'-'.$ver.'.zip')){ + if(file_exists(get_data_dir($os).'plugins/package/'.$plugin['name'].'-'.$ver.'.zip')){ $status = true; } $versions[] = ['status'=>$status, 'type'=>0, 'version'=>$ver]; @@ -209,10 +223,12 @@ class Admin extends BaseController public function download_plugin(){ $name = input('post.name', null, 'trim'); $version = input('post.version', null, 'trim'); + $os = input('post.os'); + if(!$os) $os = 'Linux'; if(!$name || !$version) return json(['code'=>-1, 'msg'=>'参数不能为空']); try{ - Plugins::download_plugin($name, $version); - Db::name('log')->insert(['uid' => 0, 'action' => '下载插件', 'data' => $name.'-'.$version, 'addtime' => date("Y-m-d H:i:s")]); + Plugins::download_plugin($name, $version, $os); + Db::name('log')->insert(['uid' => 0, 'action' => '下载插件', 'data' => $name.'-'.$version.' os:'.$os, 'addtime' => date("Y-m-d H:i:s")]); return json(['code'=>0,'msg'=>'下载成功']); }catch(\Exception $e){ return json(['code'=>-1, 'msg'=>$e->getMessage()]); @@ -220,9 +236,11 @@ class Admin extends BaseController } public function refresh_plugins(){ + $os = input('get.os'); + if(!$os) $os = 'Linux'; try{ - Plugins::refresh_plugin_list(); - Db::name('log')->insert(['uid' => 0, 'action' => '刷新插件列表', 'data' => '刷新插件列表成功', 'addtime' => date("Y-m-d H:i:s")]); + Plugins::refresh_plugin_list($os); + Db::name('log')->insert(['uid' => 0, 'action' => '刷新插件列表', 'data' => '刷新'.$os.'插件列表成功', 'addtime' => date("Y-m-d H:i:s")]); return json(['code'=>0,'msg'=>'获取最新插件列表成功!']); }catch(\Exception $e){ return json(['code'=>-1, 'msg'=>$e->getMessage()]); diff --git a/app/controller/Api.php b/app/controller/Api.php index 180205d..92fcead 100644 --- a/app/controller/Api.php +++ b/app/controller/Api.php @@ -22,18 +22,40 @@ class Api extends BaseController return json($json_arr); } + //获取插件列表(win) + public function get_plugin_list_win(){ + if(!$this->checklist()) return ''; + $record = Db::name('record')->where('ip',$this->clientip)->find(); + if($record){ + Db::name('record')->where('id',$record['id'])->update(['usetime'=>date("Y-m-d H:i:s")]); + }else{ + Db::name('record')->insert(['ip'=>$this->clientip, 'addtime'=>date("Y-m-d H:i:s"), 'usetime'=>date("Y-m-d H:i:s")]); + } + $json_file = get_data_dir('Windows').'config/plugin_list.json'; + if(file_exists($json_file)){ + $data = file_get_contents($json_file); + $json_arr = json_decode($data, true); + if($json_arr){ + return json($json_arr); + } + } + return json((object)[]); + } + //下载插件包 public function download_plugin(){ $plugin_name = input('post.name'); $version = input('post.version'); + $os = input('post.os'); if(!$plugin_name || !$version){ return '参数不能为空'; } + if(!in_array($os,['Windows','Linux'])) $os = 'Linux'; if(!preg_match('/^[a-zA-Z0-9_]+$/', $plugin_name) || !preg_match('/^[0-9.]+$/', $version)){ return '参数不正确'; } if(!$this->checklist()) '你的服务器被禁止使用此云端'; - $filepath = get_data_dir().'plugins/package/'.$plugin_name.'-'.$version.'.zip'; + $filepath = get_data_dir($os).'plugins/package/'.$plugin_name.'-'.$version.'.zip'; if(file_exists($filepath)){ $filename = $plugin_name.'.zip'; $this->output_file($filepath, $filename); @@ -46,19 +68,21 @@ class Api extends BaseController public function download_plugin_main(){ $plugin_name = input('post.name'); $version = input('post.version'); + $os = input('post.os'); if(!$plugin_name || !$version){ return '参数不能为空'; } + if(!in_array($os,['Windows','Linux'])) $os = 'Linux'; if(!preg_match('/^[a-zA-Z0-9_]+$/', $plugin_name) || !preg_match('/^[0-9.]+$/', $version)){ return '参数不正确'; } if(!$this->checklist()) '你的服务器被禁止使用此云端'; - $filepath = get_data_dir().'plugins/main/'.$plugin_name.'-'.$version.'.dat'; + $filepath = get_data_dir($os).'plugins/main/'.$plugin_name.'-'.$version.'.dat'; if(file_exists($filepath)){ $filename = $plugin_name.'_main.py'; $this->output_file($filepath, $filename); }else{ - $filepath = get_data_dir().'plugins/folder/'.$plugin_name.'-'.$version.'/'.$plugin_name.'/'.$plugin_name.'_main.py'; + $filepath = get_data_dir($os).'plugins/folder/'.$plugin_name.'-'.$version.'/'.$plugin_name.'/'.$plugin_name.'_main.py'; if(file_exists($filepath)){ $filename = $plugin_name.'_main.py'; $this->output_file($filepath, $filename); @@ -86,14 +110,26 @@ class Api extends BaseController } public function get_update_logs(){ - $version = config_get('new_version'); - $data = [ - [ - 'title' => 'Linux面板'.$version, - 'body' => config_get('update_msg'), - 'addtime' => config_get('update_date') - ] - ]; + $type = input('get.type'); + if($type == 'Windows'){ + $version = config_get('new_version_win'); + $data = [ + [ + 'title' => 'Linux面板'.$version, + 'body' => config_get('update_msg_win'), + 'addtime' => config_get('update_date_win') + ] + ]; + }else{ + $version = config_get('new_version'); + $data = [ + [ + 'title' => 'Linux面板'.$version, + 'body' => config_get('update_msg'), + 'addtime' => config_get('update_date') + ] + ]; + } return jsonp($data); } @@ -102,6 +138,11 @@ class Api extends BaseController return $version; } + public function get_version_win(){ + $version = config_get('new_version_win'); + return $version; + } + //安装统计 public function setup_count(){ return 'ok'; @@ -130,6 +171,32 @@ class Api extends BaseController return json($data); } + //检测更新(win) + public function check_update_win(){ + $version = config_get('new_version_win'); + $down_url = request()->root(true).'/win/panel/panel_'.$version.'.zip'; + $data = [ + 'force' => false, + 'version' => $version, + 'downUrl' => $down_url, + 'updateMsg' => config_get('update_msg_win'), + 'uptime' => config_get('update_date_win'), + 'is_beta' => 0, + 'py_version' => '3.8.6', + 'adviser' => -1, + 'is_rec' => -1, + 'btb' => '', + 'beta' => [ + 'py_version' => '3.8.6', + 'version' => $version, + 'downUrl' => $down_url, + 'updateMsg' => config_get('update_msg_win'), + 'uptime' => config_get('update_date_win'), + ] + ]; + return json($data); + } + //获取内测版更新日志 public function get_beta_logs(){ return json(['beta_ps'=>'当前暂无内测版', 'list'=>[]]); @@ -160,6 +227,11 @@ class Api extends BaseController return time(); } + //同步时间 + public function get_win_date(){ + return date("Y-m-d H:i:s"); + } + //查询是否专业版(废弃) public function is_pro(){ return json(['endtime'=>true, 'code'=>1]); @@ -190,6 +262,14 @@ class Api extends BaseController return json(['status'=>false, 'msg'=>'不支持绑定宝塔官网账号', 'data'=>'5b5d']); } + //绑定一键部署列表 + public function get_deplist(){ + $os = input('post.os'); + $json_arr = Plugins::get_deplist($os); + if(!$json_arr) return json([]); + return json($json_arr); + } + public function return_success(){ return json(['status'=>true, 'msg'=>1, 'data'=>(object)[]]); } diff --git a/app/lib/Plugins.php b/app/lib/Plugins.php index 10742a1..13a38fd 100644 --- a/app/lib/Plugins.php +++ b/app/lib/Plugins.php @@ -8,30 +8,35 @@ use ZipArchive; class Plugins { - private static function get_btapi(){ - $bt_url = config_get('bt_url'); - $bt_key = config_get('bt_key'); + private static function get_btapi($os){ + if($os == 'Windows'){ + $bt_url = config_get('wbt_url'); + $bt_key = config_get('wbt_key'); + }else{ + $bt_url = config_get('bt_url'); + $bt_key = config_get('bt_key'); + } if(!$bt_url || !$bt_key) throw new Exception('请先配置好宝塔面板接口信息'); $btapi = new Btapi($bt_url, $bt_key); return $btapi; } //刷新插件列表 - public static function refresh_plugin_list(){ - $btapi = self::get_btapi(); + public static function refresh_plugin_list($os = 'Linux'){ + $btapi = self::get_btapi($os); $result = $btapi->get_plugin_list(); if($result && isset($result['list']) && isset($result['type'])){ if(empty($result['list']) || empty($result['type'])){ throw new Exception('获取插件列表失败:插件列表为空'); } - self::save_plugin_list($result); + self::save_plugin_list($result, $os); }else{ throw new Exception('获取插件列表失败:'.(isset($result['msg'])?$result['msg']:'面板连接失败')); } } //保存插件列表 - private static function save_plugin_list($data){ + private static function save_plugin_list($data, $os){ $data['ip'] = '127.0.0.1'; $data['serverid'] = ''; $data['beta'] = 0; @@ -45,15 +50,15 @@ class Plugins $data['list'] = $list; if($data['pro']>-1) $data['pro'] = 0; if($data['ltd']>-1) $data['ltd'] = strtotime('+1 year'); - $json_file = get_data_dir().'config/plugin_list.json'; + $json_file = get_data_dir($os).'config/plugin_list.json'; if(!file_put_contents($json_file, json_encode($data))){ throw new Exception('保存插件列表失败,文件无写入权限'); } } //获取插件列表 - public static function get_plugin_list(){ - $json_file = get_data_dir().'config/plugin_list.json'; + public static function get_plugin_list($os = 'Linux'){ + $json_file = get_data_dir($os).'config/plugin_list.json'; if(file_exists($json_file)){ $data = file_get_contents($json_file); $json_arr = json_decode($data, true); @@ -65,8 +70,8 @@ class Plugins } //获取一个插件信息 - public static function get_plugin_info($name){ - $json_arr = self::get_plugin_list(); + public static function get_plugin_info($name, $os = 'Linux'){ + $json_arr = self::get_plugin_list($os); if(!$json_arr) return null; foreach($json_arr['list'] as $plugin){ if($plugin['name'] == $name){ @@ -77,30 +82,30 @@ class Plugins } //下载插件(自动判断是否第三方) - public static function download_plugin($plugin_name, $version){ - $plugin_info = Plugins::get_plugin_info($plugin_name); + public static function download_plugin($plugin_name, $version, $os = 'Linux'){ + $plugin_info = Plugins::get_plugin_info($plugin_name, $os); if(!$plugin_info) throw new Exception('未找到该插件信息'); if($plugin_info['type'] == 10 && isset($plugin_info['versions'][0]['download'])){ if($plugin_info['price'] == 0){ - $btapi = self::get_btapi(); + $btapi = self::get_btapi($os); $btapi->create_plugin_other_order($plugin_info['id']); } $fname = $plugin_info['versions'][0]['download']; $filemd5 = $plugin_info['versions'][0]['md5']; - Plugins::download_plugin_other($fname, $filemd5); + Plugins::download_plugin_other($fname, $filemd5, $os); if(isset($plugin_info['min_image']) && strpos($plugin_info['min_image'], 'fname=')){ $fname = substr($plugin_info['min_image'], strpos($plugin_info['min_image'], '?fname=')+7); - Plugins::download_plugin_other($fname); + Plugins::download_plugin_other($fname, null, $os); } }else{ - Plugins::download_plugin_package($plugin_name, $version); + Plugins::download_plugin_package($plugin_name, $version, $os); } } //下载插件包 - public static function download_plugin_package($plugin_name, $version){ - $filepath = get_data_dir().'plugins/package/'.$plugin_name.'-'.$version.'.zip'; - $btapi = self::get_btapi(); + public static function download_plugin_package($plugin_name, $version, $os = 'Linux'){ + $filepath = get_data_dir($os).'plugins/package/'.$plugin_name.'-'.$version.'.zip'; + $btapi = self::get_btapi($os); $result = $btapi->get_plugin_filename($plugin_name, $version); if($result && isset($result['status'])){ if($result['status'] == true){ @@ -110,12 +115,12 @@ class Plugins $zip = new ZipArchive; if ($zip->open($filepath) === true) { - $zip->extractTo(get_data_dir().'plugins/folder/'.$plugin_name.'-'.$version); + $zip->extractTo(get_data_dir($os).'plugins/folder/'.$plugin_name.'-'.$version); $zip->close(); - $main_filepath = get_data_dir().'plugins/folder/'.$plugin_name.'-'.$version.'/'.$plugin_name.'/'.$plugin_name.'_main.py'; + $main_filepath = get_data_dir($os).'plugins/folder/'.$plugin_name.'-'.$version.'/'.$plugin_name.'/'.$plugin_name.'_main.py'; if(file_exists($main_filepath) && filesize($main_filepath)>10){ if(!strpos(file_get_contents($main_filepath), 'import ')){ //加密py文件,需要解密 - self::decode_plugin_main($plugin_name, $version, $main_filepath); + self::decode_plugin_main($plugin_name, $version, $main_filepath, $os); self::noauth_plugin_main($main_filepath); $zip->open($filepath, ZipArchive::CREATE); $zip->addFile($main_filepath, $plugin_name.'/'.$plugin_name.'_main.py'); @@ -138,9 +143,9 @@ class Plugins } //下载插件主程序文件 - public static function download_plugin_main($plugin_name, $version){ - $filepath = get_data_dir().'plugins/main/'.$plugin_name.'-'.$version.'.dat'; - $btapi = self::get_btapi(); + public static function download_plugin_main($plugin_name, $version, $os = 'Linux'){ + $filepath = get_data_dir($os).'plugins/main/'.$plugin_name.'-'.$version.'.dat'; + $btapi = self::get_btapi($os); $result = $btapi->get_plugin_main_filename($plugin_name, $version); if($result && isset($result['status'])){ if($result['status'] == true){ @@ -160,8 +165,8 @@ class Plugins } //解密并下载插件主程序文件 - public static function decode_plugin_main($plugin_name, $version, $main_filepath){ - $btapi = self::get_btapi(); + public static function decode_plugin_main($plugin_name, $version, $main_filepath, $os = 'Linux'){ + $btapi = self::get_btapi($os); $result = $btapi->get_decode_plugin_main($plugin_name, $version); if($result && isset($result['status'])){ if($result['status'] == true){ @@ -180,20 +185,29 @@ class Plugins public static function noauth_plugin_main($main_filepath){ $data = file_get_contents($main_filepath); if(!$data) return false; + $data = str_replace('\'http://www.bt.cn/api/panel/get_soft_list_test', 'public.GetConfigValue(\'home\')+\'/api/panel/get_soft_list_test', $data); $data = str_replace('\'https://www.bt.cn/api/panel/get_soft_list_test', 'public.GetConfigValue(\'home\')+\'/api/panel/get_soft_list_test', $data); $data = str_replace('\'http://www.bt.cn/api/panel/get_soft_list', 'public.GetConfigValue(\'home\')+\'/api/panel/get_soft_list', $data); $data = str_replace('\'https://www.bt.cn/api/panel/get_soft_list', 'public.GetConfigValue(\'home\')+\'/api/panel/get_soft_list', $data); $data = str_replace('\'http://www.bt.cn/api/panel/notpro', 'public.GetConfigValue(\'home\')+\'/api/panel/notpro', $data); $data = str_replace('\'https://www.bt.cn/api/panel/notpro', 'public.GetConfigValue(\'home\')+\'/api/panel/notpro', $data); + + $data = str_replace('\'http://www.bt.cn/api/wpanel/get_soft_list_test', 'public.GetConfigValue(\'home\')+\'/api/wpanel/get_soft_list_test', $data); + $data = str_replace('\'https://www.bt.cn/api/wpanel/get_soft_list_test', 'public.GetConfigValue(\'home\')+\'/api/wpanel/get_soft_list_test', $data); + $data = str_replace('\'http://www.bt.cn/api/wpanel/get_soft_list', 'public.GetConfigValue(\'home\')+\'/api/wpanel/get_soft_list', $data); + $data = str_replace('\'https://www.bt.cn/api/wpanel/get_soft_list', 'public.GetConfigValue(\'home\')+\'/api/wpanel/get_soft_list', $data); + $data = str_replace('\'http://www.bt.cn/api/wpanel/notpro', 'public.GetConfigValue(\'home\')+\'/api/wpanel/notpro', $data); + $data = str_replace('\'https://www.bt.cn/api/wpanel/notpro', 'public.GetConfigValue(\'home\')+\'/api/wpanel/notpro', $data); + file_put_contents($main_filepath, $data); } //下载插件其他文件 - public static function download_plugin_other($fname, $filemd5 = null){ + public static function download_plugin_other($fname, $filemd5 = null, $os = 'Linux'){ $filepath = get_data_dir().'plugins/other/'.$fname; @mkdir(dirname($filepath), 0777, true); - $btapi = self::get_btapi(); + $btapi = self::get_btapi($os); $result = $btapi->get_plugin_other_filename($fname); if($result && isset($result['status'])){ if($result['status'] == true){ @@ -244,4 +258,17 @@ class Plugins } } + //获取一键部署列表 + public static function get_deplist($os = 'Linux'){ + $json_file = get_data_dir($os).'config/deployment_list.json'; + if(file_exists($json_file)){ + $data = file_get_contents($json_file); + $json_arr = json_decode($data, true); + if($json_arr){ + return $json_arr; + } + } + return false; + } + } \ No newline at end of file diff --git a/app/view/admin/layout.html b/app/view/admin/layout.html index 74f3baf..4350043 100644 --- a/app/view/admin/layout.html +++ b/app/view/admin/layout.html @@ -34,8 +34,12 @@
宝塔Linux面板更新到{:config_get('new_version')}
+1、使用官方安装程序进行安装,安装完先不要进入面板。
+2、在命令提示符(cmd)输入以下一键更新命令,然后重启面板。
+注意:仅支持Windows Server 2008 R2/2012/2016/2019,64位系统(中文简体),且未安装其它环境
" + msg + "
" + error + "" + msg + "
\ +" + h + "
" + f + "