diff --git a/public/install/src/panel6.zip b/public/install/src/panel6.zip
index 4131e34..1e9ae30 100644
Binary files a/public/install/src/panel6.zip and b/public/install/src/panel6.zip differ
diff --git a/public/install/update/LinuxPanel-8.0.4.zip b/public/install/update/LinuxPanel-8.0.4.zip
index e27b40e..6cbc135 100644
Binary files a/public/install/update/LinuxPanel-8.0.4.zip and b/public/install/update/LinuxPanel-8.0.4.zip differ
diff --git a/route/app.php b/route/app.php
index d061bea..a0f6895 100644
--- a/route/app.php
+++ b/route/app.php
@@ -49,6 +49,7 @@ Route::group('api', function () {
Route::get('/index/get_win_date', 'api/get_win_date');
Route::get('/panel/is_pro', 'api/is_pro');
Route::get('/getIpAddress', 'api/get_ip_address');
+ Route::get('/GetAD', 'api/return_empty');
Route::post('/Auth/GetAuthToken', 'api/get_auth_token');
Route::post('/Auth/GetBindCode', 'api/return_error');
Route::post('/Auth/GetSSLList', 'api/get_ssl_list');
diff --git a/wiki/files/linux/bt.js b/wiki/files/linux/bt.js
index 5af7379..6437730 100644
--- a/wiki/files/linux/bt.js
+++ b/wiki/files/linux/bt.js
@@ -1,458 +1,483 @@
-/*
- *宝塔面板去除各种计算题与延时等待
-*/
-if("undefined" != typeof bt && bt.hasOwnProperty("show_confirm")){
- bt.show_confirm = function(title, msg, callback, error) {
- layer.open({
- type: 1,
- title: title,
- area: "365px",
- closeBtn: 2,
- shadeClose: true,
- btn: [lan['public'].ok, lan['public'].cancel],
- content: "
",
- yes: function (index, layero) {
- layer.close(index);
- if (callback) callback();
- }
- });
- }
-}
-if("undefined" != typeof bt && bt.hasOwnProperty("prompt_confirm")){
- bt.prompt_confirm = function (title, msg, callback) {
- layer.open({
- type: 1,
- title: title,
- area: "350px",
- closeBtn: 2,
- btn: ['确认', '取消'],
- content: "",
- yes: function (layers, index) {
- layer.close(layers)
- if (callback) callback()
- }
- });
- }
-}
-if("undefined" != typeof bt && bt.hasOwnProperty("compute_confirm")){
- bt.compute_confirm = function (config, callback) {
- layer.open({
- type: 1,
- title: config.title,
- area: '430px',
- closeBtn: 2,
- shadeClose: true,
- btn: [lan['public'].ok, lan['public'].cancel],
- content:
- '',
- yes: function (layers, index) {
- layer.close(layers)
- if (callback) callback()
- }
- });
- }
-}
-if("undefined" != typeof database && database.hasOwnProperty("del_database")){
- database.del_database = function (wid, dbname, obj, callback) {
- var is_db_type = false, del_data = []
- if (typeof wid === 'object') {
- del_data = wid
- is_db_type = wid.some(function (item) {
- return item.db_type > 0
- })
- var ids = [];
- for (var i = 0; i < wid.length; i++) {
- ids.push(wid[i].id);
- }
- wid = ids
- }
- var type = $('.database-pos .tabs-item.active').data('type'),
- title = '',
- tips = '';
- title = typeof dbname === "function" ? '批量删除数据库' : '删除数据库 - [ ' + dbname + ' ]';
- tips = is_db_type || !recycle_bin_db_open || type !== 'mysql' ? '当前列表存在彻底删除后无法恢复的数据库,请仔细查看列表,以防误删,是否继续操作?' : '当前列表数据库将迁移至数据库回收站,如需彻底删除请前往数据库回收站,是否继续操作?'
- var arrs = wid instanceof Array ? wid : [wid]
- var ids = JSON.stringify(arrs),
- countDown = 9;
- if (arrs.length == 1) countDown = 4
- var loadT = bt.load('正在检测数据库数据信息,请稍候...'),
- param = { url: 'database/' + bt.data.db_tab_name + '/check_del_data', data: { data: JSON.stringify({ ids: ids }) } }
- if (bt.data.db_tab_name == 'mysql') param = { url: 'database?action=check_del_data', data: { ids: ids } }
- bt_tools.send(param, function (res) {
- loadT.close()
- layer.open({
- type: 1,
- title: title,
- area: '740px',
- skin: 'verify_site_layer_info',
- closeBtn: 2,
- shadeClose: true,
- content: '' +
- "
"+
- '
' +
- '
' +
- '
' +
- (is_db_type ? '注意:远程数据库暂不支持数据库回收站,选中的数据库将彻底删除
' : '') +
- (!recycle_bin_db_open ? '风险操作:当前数据库回收站未开启,删除数据库将永久消失
' : '')
- + '请仔细阅读以上要删除信息,防止数据库被误删
' +
- '
',
- btn: ['下一步', lan.public.cancel],
- success: function (layers) {
- setTimeout(function () { $(layers).css('top', ($(window).height() - $(layers).height()) / 2); }, 50)
- var rdata = res.data,
- newTime = parseInt(new Date().getTime() / 1000),
- t_icon = ' ';
- for (var j = 0; j < rdata.length; j++) {
- for (var i = 0; i < del_data.length; i++) {
- if (rdata[j].id == del_data[i].id) {
- var is_time_rule = (newTime - rdata[j].st_time) > (86400 * 30) && (rdata[j].total > 1024 * 10),
- is_database_rule = res.db_size <= rdata[j].total,
- database_time = bt.format_data(rdata[j].st_time, 'yyyy-MM-dd'),
- database_size = bt.format_size(rdata[j].total);
- var f_size = database_size
- var t_size = '注意:此数据库较大,可能为重要数据,请谨慎操作.\n数据库:' + database_size;
- if (rdata[j].total < 2048) t_size = '注意事项:当前数据库不为空,可能为重要数据,请谨慎操作.\n数据库:' + database_size;
- if (rdata[j].total === 0) t_size = '';
- rdata[j]['t_size'] = t_size
- rdata[j]['f_size'] = f_size
- rdata[j]['database_time'] = database_time
- rdata[j]['is_time_rule'] = is_time_rule
- rdata[j]['is_database_rule'] = is_database_rule
- rdata[j]['db_type'] = del_data[i].db_type
- rdata[j]['conn_config'] = del_data[i].conn_config
- }
- }
- }
- var filterData = rdata.filter(function (el) {
- return ids.indexOf(el.id) != -1
- })
- bt_tools.table({
- el: '#check_layer_content',
- data: filterData,
- height: '300px',
- column: [
- { fid: 'name', title: '数据库名称' },
- {
- title: '数据库大小', template: function (row) {
- return '' + row.f_size + (row.is_database_rule ? t_icon : '') + ''
- }
- },
- {
- title: '数据库位置', template: function (row) {
- var type_column = '-'
- switch (row.db_type) {
- case 0:
- type_column = '本地数据库'
- break;
- case 1:
- case 2:
- type_column = '远程数据库'
- break;
- }
- return '' + type_column + ''
- }
- },
- {
- title: '创建时间', template: function (row) {
- return '' + row.database_time + ''
- }
- },
- {
- title: '删除结果', align: 'right', template: function (row, index, ev, _that) {
- var _html = ''
- switch (row.db_type) {
- case 0:
- _html = type !== 'mysql' ? '彻底删除' : (!recycle_bin_db_open ? '彻底删除' : '移至回收站')
- break;
- case 1:
- case 2:
- _html = '彻底删除'
- break;
- }
- return '' + _html + ''
- }
- }
- ],
- success: function () {
- $('#check_layer_content').find('.glyphicon-info-sign').click(function (e) {
- var msg = $(this).parent().prop('title')
- msg = msg.replace('数据库:','
数据库:')
- layer.tips(msg, $(this).parent(), { tips: [1, 'red'], time: 3000 })
- $(document).click(function (ev) {
- layer.closeAll('tips');
- $(this).unbind('click');
- ev.stopPropagation();
- ev.preventDefault();
- });
- e.stopPropagation();
- e.preventDefault();
- });
- if ($('.remote_database').length) {
- $('.remote_database').each(function (index, el) {
- var id = $(el).parent().parent().parent().index()
- $('#check_layer_content tbody tr').eq(id).css('background-color', '#ff00000a')
- })
- }
- }
- })
- },
- yes: function (indes, layers) {
- title = typeof dbname === "function" ? '二次验证信息,批量删除数据库' : '二次验证信息,删除数据库 - [ ' + dbname + ' ]';
- if (type !== 'mysql') {
- tips = '当前数据库暂不支持数据库回收站,删除后将无法恢复,此操作不可逆,是否继续操作?';
- } else {
- tips = is_db_type ? '远程数据库不支持数据库回收站,删除后将无法恢复,此操作不可逆,是否继续操作?' : recycle_bin_db_open ? '删除后如需彻底删除请前往数据库回收站,是否继续操作?' : '删除后可能会影响业务使用,此操作不可逆,是否继续操作?'
- }
- layer.open({
- type: 1,
- title: title,
- icon: 0,
- skin: 'delete_site_layer',
- area: "530px",
- closeBtn: 2,
- shadeClose: true,
- content: "",
- btn: ['确认删除', '取消删除'],
- yes: function (indexs) {
- var data = {
- id: wid,
- name: dbname
- };
- if (typeof dbname === "function") {
- delete data.id;
- delete data.name;
- }
- layer.close(indexs)
- layer.close(indes)
- if (typeof dbname === "function") {
- dbname(data)
- } else {
- data.id = data.id[0]
- bt.database.del_database(data, function (rdata) {
- layer.closeAll()
- if (callback) callback(rdata);
- bt.msg(rdata);
- })
- }
- }
- })
- }
- })
- })
- }
-}
-if("undefined" != typeof site && site.hasOwnProperty("del_site")){
- site.del_site = function (wid, wname, callback) {
- title = typeof wname === "function" ? '批量删除站点' : '删除站点 [ ' + wname + ' ]';
- layer.open({
- type: 1,
- title: title,
- icon: 0,
- skin: 'delete_site_layer',
- area: "440px",
- closeBtn: 2,
- shadeClose: true,
- content: "",
- btn: [lan.public.ok, lan.public.cancel],
- success: function (layers, indexs) {
- $(layers).find('.check_type_group label').hover(function () {
- var name = $(this).find('input').attr('name');
- if (name === 'database' && !recycle_bin_db_open) {
- layer.tips('风险操作:当前数据库回收站未开启,删除数据库将永久消失!', this, { tips: [1, 'red'], time: 0 })
- } else if (name === 'path' && !recycle_bin_open) {
- layer.tips('风险操作:当前文件回收站未开启,删除站点目录将永久消失!', this, { tips: [1, 'red'], time: 0 })
- }
- }, function () {
- layer.closeAll('tips');
- });
- },
- yes: function (indexs) {
- var data = { id: wid, webname: wname };
- $('#site_delete_form input[type=checkbox]').each(function (index, item) {
- if ($(item).is(':checked')) data[$(item).attr('name')] = 1
- })
- var is_database = data.hasOwnProperty('database'), is_path = data.hasOwnProperty('path'), is_ftp = data.hasOwnProperty('ftp');
- if ((!is_database && !is_path) && (!is_ftp || is_ftp)) {
- if (typeof wname === "function") {
- wname(data)
- return false;
- }
- bt.site.del_site(data, function (rdata) {
- layer.close(indexs);
- if (callback) callback(rdata);
- bt.msg(rdata);
- })
- return false
- }
- if (typeof wname === "function") {
- delete data.id;
- delete data.webname;
- }
- layer.close(indexs)
- var ids = JSON.stringify(wid instanceof Array ? wid : [wid]), countDown = typeof wname === 'string' ? 4 : 9;
- title = typeof wname === "function" ? '二次验证信息,批量删除站点' : '二次验证信息,删除站点 [ ' + wname + ' ]';
- var loadT = bt.load('正在检测站点数据信息,请稍候...')
- bt.send('check_del_data', 'site/check_del_data', { ids: ids }, function (res) {
- loadT.close()
- layer.open({
- type: 1,
- title: title,
- closeBtn: 2,
- skin: 'verify_site_layer_info',
- area: '740px',
- content: '' +
- '
' +
- '
堡塔温馨提示您,请冷静几秒钟,确认以下要删除的数据。
' +
- '
' +
- '
风险事项:当前未开启数据库回收站功能,删除数据库后,数据库将永久消失!
' +
- '
风险事项:当前未开启文件回收站功能,删除站点目录后,站点目录将永久消失!
' +
- '
注意:请仔细阅读以上要删除信息,防止网站数据被误删
' +
- '
',
- // recycle_bin_db_open &&
- // recycle_bin_open &&
- btn: ['确认删除', '取消删除'],
- success: function (layers) {
- var html = '', rdata = res.data;
- for (var i = 0; i < rdata.length; i++) {
- var item = rdata[i], newTime = parseInt(new Date().getTime() / 1000),
- t_icon = '';
-
- site_html = (function (item) {
- if (!is_path) return ''
- var is_time_rule = (newTime - item.st_time) > (86400 * 30) && (item.total > 1024 * 10),
- is_path_rule = res.file_size <= item.total,
- dir_time = bt.format_data(item.st_time, 'yyyy-MM-dd'),
- dir_size = bt.format_size(item.total);
-
- var f_html = ' ' + (item.limit ? '大于50MB' : dir_size) + ' ' + (is_path_rule ? t_icon : '');
- var f_title = (is_path_rule ? '注意:此目录较大,可能为重要数据,请谨慎操作.\n' : '') + '目录:' + item.path + '(' + (item.limit ? '大于' : '') + dir_size + ')';
-
- return '' +
- '站点名:' + item.name + '' +
- '目录:' + item.path + ' (' + f_html + ')' +
- '创建时间:' + dir_time + '' +
- '
'
- }(item)),
- database_html = (function (item) {
- if (!is_database || !item.database) return '';
- var is_time_rule = (newTime - item.st_time) > (86400 * 30) && (item.total > 1024 * 10),
- is_database_rule = res.db_size <= item.database.total,
- database_time = bt.format_data(item.database.st_time, 'yyyy-MM-dd'),
- database_size = bt.format_size(item.database.total);
-
- var f_size = ' ' + database_size + ' ' + (is_database_rule ? t_icon : '');
- var t_size = '注意:此数据库较大,可能为重要数据,请谨慎操作.\n数据库:' + database_size;
-
- return '' +
- '数据库:' + item.database.name + '' +
- '大小:' + f_size + '' +
- '创建时间:' + database_time + '' +
- '
'
- }(item))
- if ((site_html + database_html) !== '') html += '' + site_html + database_html + '
';
- }
- if (html === '') html = '无数据
'
- $('.check_layer_content').html(html)
- },
- yes: function (indes, layers) {
- if (typeof wname === "function") {
- wname(data)
- } else {
- bt.site.del_site(data, function (rdata) {
- layer.closeAll()
- if (rdata.status) site.get_list();
- if (callback) callback(rdata);
- bt.msg(rdata);
- })
- }
- }
- })
- })
- }
- })
- }
-}
-if("undefined" != typeof bt && bt.hasOwnProperty("firewall") && bt.firewall.hasOwnProperty("add_accept_port")){
- bt.firewall.add_accept_port = function(type, port, ps, callback) {
- var action = "AddDropAddress";
- if (type == 'port') {
- ports = port.split(':');
- if (port.indexOf('-') != -1) ports = port.split('-');
- for (var i = 0; i < ports.length; i++) {
- if (!bt.check_port(ports[i])) {
- layer.msg('可用端口范围:1-65535', { icon: 2 });
- // layer.msg(lan.firewall.port_err, {
- // icon: 5
- // });
- return;
- }
- }
- action = "AddAcceptPort";
- }
-
- loading = bt.load();
- bt.send(action, 'firewall/' + action, { port: port, type: type, ps: ps }, function(rdata) {
- loading.close();
- if (callback) callback(rdata);
- })
- }
-}
-function SafeMessage(j, h, g, f) {
- if(f == undefined) {
- f = ""
- }
- var mess = layer.open({
- type: 1,
- title: j,
- area: "350px",
- closeBtn: 2,
- shadeClose: true,
- content: ""
- });
- $(".bt-cancel").click(function(){
- layer.close(mess);
- });
- $("#toSubmit").click(function() {
- layer.close(mess);
- g();
- })
-}
-$(document).ready(function () {
- if($('#updata_pro_info').length>0){
- $('#updata_pro_info').html('');
- bt.set_cookie('productPurchase', 1);
- }
+/*
+ *宝塔面板去除各种计算题与延时等待
+*/
+if("undefined" != typeof bt && bt.hasOwnProperty("show_confirm")){
+ bt.show_confirm = function(title, msg, callback, error) {
+ layer.open({
+ type: 1,
+ title: title,
+ area: "365px",
+ closeBtn: 2,
+ shadeClose: true,
+ btn: [lan['public'].ok, lan['public'].cancel],
+ content: "",
+ yes: function (index, layero) {
+ layer.close(index);
+ if (callback) callback();
+ }
+ });
+ }
+}
+if("undefined" != typeof bt && bt.hasOwnProperty("prompt_confirm")){
+ bt.prompt_confirm = function (title, msg, callback) {
+ layer.open({
+ type: 1,
+ title: title,
+ area: "350px",
+ closeBtn: 2,
+ btn: ['确认', '取消'],
+ content: "",
+ yes: function (layers, index) {
+ layer.close(layers)
+ if (callback) callback()
+ }
+ });
+ }
+}
+if("undefined" != typeof bt && bt.hasOwnProperty("compute_confirm")){
+ bt.compute_confirm = function (config, callback) {
+ layer.open({
+ type: 1,
+ title: config.title,
+ area: '430px',
+ closeBtn: 2,
+ shadeClose: true,
+ btn: [lan['public'].ok, lan['public'].cancel],
+ content:
+ '',
+ yes: function (layers, index) {
+ layer.close(layers)
+ if (callback) callback()
+ }
+ });
+ }
+}
+if("undefined" != typeof bt && bt.hasOwnProperty("input_confirm")){
+ bt.input_confirm = function (config, callback) {
+ layer.open({
+ type: 1,
+ title: config.title,
+ area: '430px',
+ closeBtn: 2,
+ shadeClose: true,
+ btn: [lan['public'].ok, lan['public'].cancel],
+ content:
+ '',
+ yes: function (layers, index) {
+ layer.close(layers);
+ if (callback) callback();
+ },
+ });
+ }
+}
+if("undefined" != typeof database && database.hasOwnProperty("del_database")){
+ database.del_database = function (wid, dbname, obj, callback) {
+ var is_db_type = false, del_data = []
+ if (typeof wid === 'object') {
+ del_data = wid
+ is_db_type = wid.some(function (item) {
+ return item.db_type > 0
+ })
+ var ids = [];
+ for (var i = 0; i < wid.length; i++) {
+ ids.push(wid[i].id);
+ }
+ wid = ids
+ }
+ var type = $('.database-pos .tabs-item.active').data('type'),
+ title = '',
+ tips = '';
+ title = typeof dbname === "function" ? '批量删除数据库' : '删除数据库 - [ ' + dbname + ' ]';
+ tips = is_db_type || !recycle_bin_db_open || type !== 'mysql' ? '当前列表存在彻底删除后无法恢复的数据库,请仔细查看列表,以防误删,是否继续操作?' : '当前列表数据库将迁移至数据库回收站,如需彻底删除请前往数据库回收站,是否继续操作?'
+ var arrs = wid instanceof Array ? wid : [wid]
+ var ids = JSON.stringify(arrs),
+ countDown = 9;
+ if (arrs.length == 1) countDown = 4
+ var loadT = bt.load('正在检测数据库数据信息,请稍候...'),
+ param = { url: 'database/' + bt.data.db_tab_name + '/check_del_data', data: { data: JSON.stringify({ ids: ids }) } }
+ if (bt.data.db_tab_name == 'mysql') param = { url: 'database?action=check_del_data', data: { ids: ids } }
+ bt_tools.send(param, function (res) {
+ loadT.close()
+ layer.open({
+ type: 1,
+ title: title,
+ area: '740px',
+ skin: 'verify_site_layer_info',
+ closeBtn: 2,
+ shadeClose: true,
+ content: '' +
+ "
"+
+ '
' +
+ '
' +
+ '
' +
+ (is_db_type ? '注意:远程数据库暂不支持数据库回收站,选中的数据库将彻底删除
' : '') +
+ (!recycle_bin_db_open ? '风险操作:当前数据库回收站未开启,删除数据库将永久消失
' : '')
+ + '请仔细阅读以上要删除信息,防止数据库被误删
' +
+ '
',
+ btn: ['下一步', lan.public.cancel],
+ success: function (layers) {
+ setTimeout(function () { $(layers).css('top', ($(window).height() - $(layers).height()) / 2); }, 50)
+ var rdata = res.data,
+ newTime = parseInt(new Date().getTime() / 1000),
+ t_icon = ' ';
+ for (var j = 0; j < rdata.length; j++) {
+ for (var i = 0; i < del_data.length; i++) {
+ if (rdata[j].id == del_data[i].id) {
+ var is_time_rule = (newTime - rdata[j].st_time) > (86400 * 30) && (rdata[j].total > 1024 * 10),
+ is_database_rule = res.db_size <= rdata[j].total,
+ database_time = bt.format_data(rdata[j].st_time, 'yyyy-MM-dd'),
+ database_size = bt.format_size(rdata[j].total);
+ var f_size = database_size
+ var t_size = '注意:此数据库较大,可能为重要数据,请谨慎操作.\n数据库:' + database_size;
+ if (rdata[j].total < 2048) t_size = '注意事项:当前数据库不为空,可能为重要数据,请谨慎操作.\n数据库:' + database_size;
+ if (rdata[j].total === 0) t_size = '';
+ rdata[j]['t_size'] = t_size
+ rdata[j]['f_size'] = f_size
+ rdata[j]['database_time'] = database_time
+ rdata[j]['is_time_rule'] = is_time_rule
+ rdata[j]['is_database_rule'] = is_database_rule
+ rdata[j]['db_type'] = del_data[i].db_type
+ rdata[j]['conn_config'] = del_data[i].conn_config
+ }
+ }
+ }
+ var filterData = rdata.filter(function (el) {
+ return ids.indexOf(el.id) != -1
+ })
+ bt_tools.table({
+ el: '#check_layer_content',
+ data: filterData,
+ height: '300px',
+ column: [
+ { fid: 'name', title: '数据库名称' },
+ {
+ title: '数据库大小', template: function (row) {
+ return '' + row.f_size + (row.is_database_rule ? t_icon : '') + ''
+ }
+ },
+ {
+ title: '数据库位置', template: function (row) {
+ var type_column = '-'
+ switch (row.db_type) {
+ case 0:
+ type_column = '本地数据库'
+ break;
+ case 1:
+ case 2:
+ type_column = '远程数据库'
+ break;
+ }
+ return '' + type_column + ''
+ }
+ },
+ {
+ title: '创建时间', template: function (row) {
+ return '' + row.database_time + ''
+ }
+ },
+ {
+ title: '删除结果', align: 'right', template: function (row, index, ev, _that) {
+ var _html = ''
+ switch (row.db_type) {
+ case 0:
+ _html = type !== 'mysql' ? '彻底删除' : (!recycle_bin_db_open ? '彻底删除' : '移至回收站')
+ break;
+ case 1:
+ case 2:
+ _html = '彻底删除'
+ break;
+ }
+ return '' + _html + ''
+ }
+ }
+ ],
+ success: function () {
+ $('#check_layer_content').find('.glyphicon-info-sign').click(function (e) {
+ var msg = $(this).parent().prop('title')
+ msg = msg.replace('数据库:','
数据库:')
+ layer.tips(msg, $(this).parent(), { tips: [1, 'red'], time: 3000 })
+ $(document).click(function (ev) {
+ layer.closeAll('tips');
+ $(this).unbind('click');
+ ev.stopPropagation();
+ ev.preventDefault();
+ });
+ e.stopPropagation();
+ e.preventDefault();
+ });
+ if ($('.remote_database').length) {
+ $('.remote_database').each(function (index, el) {
+ var id = $(el).parent().parent().parent().index()
+ $('#check_layer_content tbody tr').eq(id).css('background-color', '#ff00000a')
+ })
+ }
+ }
+ })
+ },
+ yes: function (indes, layers) {
+ title = typeof dbname === "function" ? '二次验证信息,批量删除数据库' : '二次验证信息,删除数据库 - [ ' + dbname + ' ]';
+ if (type !== 'mysql') {
+ tips = '当前数据库暂不支持数据库回收站,删除后将无法恢复,此操作不可逆,是否继续操作?';
+ } else {
+ tips = is_db_type ? '远程数据库不支持数据库回收站,删除后将无法恢复,此操作不可逆,是否继续操作?' : recycle_bin_db_open ? '删除后如需彻底删除请前往数据库回收站,是否继续操作?' : '删除后可能会影响业务使用,此操作不可逆,是否继续操作?'
+ }
+ layer.open({
+ type: 1,
+ title: title,
+ icon: 0,
+ skin: 'delete_site_layer',
+ area: "530px",
+ closeBtn: 2,
+ shadeClose: true,
+ content: "",
+ btn: ['确认删除', '取消删除'],
+ yes: function (indexs) {
+ var data = {
+ id: wid,
+ name: dbname
+ };
+ if (typeof dbname === "function") {
+ delete data.id;
+ delete data.name;
+ }
+ layer.close(indexs)
+ layer.close(indes)
+ if (typeof dbname === "function") {
+ dbname(data)
+ } else {
+ data.id = data.id[0]
+ bt.database.del_database(data, function (rdata) {
+ layer.closeAll()
+ if (callback) callback(rdata);
+ bt.msg(rdata);
+ })
+ }
+ }
+ })
+ }
+ })
+ })
+ }
+}
+if("undefined" != typeof site && site.hasOwnProperty("del_site")){
+ site.del_site = function (wid, wname, callback) {
+ title = typeof wname === "function" ? '批量删除站点' : '删除站点 [ ' + wname + ' ]';
+ layer.open({
+ type: 1,
+ title: title,
+ icon: 0,
+ skin: 'delete_site_layer',
+ area: "440px",
+ closeBtn: 2,
+ shadeClose: true,
+ content: "",
+ btn: [lan.public.ok, lan.public.cancel],
+ success: function (layers, indexs) {
+ $(layers).find('.check_type_group label').hover(function () {
+ var name = $(this).find('input').attr('name');
+ if (name === 'database' && !recycle_bin_db_open) {
+ layer.tips('风险操作:当前数据库回收站未开启,删除数据库将永久消失!', this, { tips: [1, 'red'], time: 0 })
+ } else if (name === 'path' && !recycle_bin_open) {
+ layer.tips('风险操作:当前文件回收站未开启,删除站点目录将永久消失!', this, { tips: [1, 'red'], time: 0 })
+ }
+ }, function () {
+ layer.closeAll('tips');
+ });
+ },
+ yes: function (indexs) {
+ var data = { id: wid, webname: wname };
+ $('#site_delete_form input[type=checkbox]').each(function (index, item) {
+ if ($(item).is(':checked')) data[$(item).attr('name')] = 1
+ })
+ var is_database = data.hasOwnProperty('database'), is_path = data.hasOwnProperty('path'), is_ftp = data.hasOwnProperty('ftp');
+ if ((!is_database && !is_path) && (!is_ftp || is_ftp)) {
+ if (typeof wname === "function") {
+ wname(data)
+ return false;
+ }
+ bt.site.del_site(data, function (rdata) {
+ layer.close(indexs);
+ if (callback) callback(rdata);
+ bt.msg(rdata);
+ })
+ return false
+ }
+ if (typeof wname === "function") {
+ delete data.id;
+ delete data.webname;
+ }
+ layer.close(indexs)
+ var ids = JSON.stringify(wid instanceof Array ? wid : [wid]), countDown = typeof wname === 'string' ? 4 : 9;
+ title = typeof wname === "function" ? '二次验证信息,批量删除站点' : '二次验证信息,删除站点 [ ' + wname + ' ]';
+ var loadT = bt.load('正在检测站点数据信息,请稍候...')
+ bt.send('check_del_data', 'site/check_del_data', { ids: ids }, function (res) {
+ loadT.close()
+ layer.open({
+ type: 1,
+ title: title,
+ closeBtn: 2,
+ skin: 'verify_site_layer_info',
+ area: '740px',
+ content: '' +
+ '
' +
+ '
堡塔温馨提示您,请冷静几秒钟,确认以下要删除的数据。
' +
+ '
' +
+ '
风险事项:当前未开启数据库回收站功能,删除数据库后,数据库将永久消失!
' +
+ '
风险事项:当前未开启文件回收站功能,删除站点目录后,站点目录将永久消失!
' +
+ '
注意:请仔细阅读以上要删除信息,防止网站数据被误删
' +
+ '
',
+ // recycle_bin_db_open &&
+ // recycle_bin_open &&
+ btn: ['确认删除', '取消删除'],
+ success: function (layers) {
+ var html = '', rdata = res.data;
+ for (var i = 0; i < rdata.length; i++) {
+ var item = rdata[i], newTime = parseInt(new Date().getTime() / 1000),
+ t_icon = '';
+
+ site_html = (function (item) {
+ if (!is_path) return ''
+ var is_time_rule = (newTime - item.st_time) > (86400 * 30) && (item.total > 1024 * 10),
+ is_path_rule = res.file_size <= item.total,
+ dir_time = bt.format_data(item.st_time, 'yyyy-MM-dd'),
+ dir_size = bt.format_size(item.total);
+
+ var f_html = ' ' + (item.limit ? '大于50MB' : dir_size) + ' ' + (is_path_rule ? t_icon : '');
+ var f_title = (is_path_rule ? '注意:此目录较大,可能为重要数据,请谨慎操作.\n' : '') + '目录:' + item.path + '(' + (item.limit ? '大于' : '') + dir_size + ')';
+
+ return '' +
+ '站点名:' + item.name + '' +
+ '目录:' + item.path + ' (' + f_html + ')' +
+ '创建时间:' + dir_time + '' +
+ '
'
+ }(item)),
+ database_html = (function (item) {
+ if (!is_database || !item.database) return '';
+ var is_time_rule = (newTime - item.st_time) > (86400 * 30) && (item.total > 1024 * 10),
+ is_database_rule = res.db_size <= item.database.total,
+ database_time = bt.format_data(item.database.st_time, 'yyyy-MM-dd'),
+ database_size = bt.format_size(item.database.total);
+
+ var f_size = ' ' + database_size + ' ' + (is_database_rule ? t_icon : '');
+ var t_size = '注意:此数据库较大,可能为重要数据,请谨慎操作.\n数据库:' + database_size;
+
+ return '' +
+ '数据库:' + item.database.name + '' +
+ '大小:' + f_size + '' +
+ '创建时间:' + database_time + '' +
+ '
'
+ }(item))
+ if ((site_html + database_html) !== '') html += '' + site_html + database_html + '
';
+ }
+ if (html === '') html = '无数据
'
+ $('.check_layer_content').html(html)
+ },
+ yes: function (indes, layers) {
+ if (typeof wname === "function") {
+ wname(data)
+ } else {
+ bt.site.del_site(data, function (rdata) {
+ layer.closeAll()
+ if (rdata.status) site.get_list();
+ if (callback) callback(rdata);
+ bt.msg(rdata);
+ })
+ }
+ }
+ })
+ })
+ }
+ })
+ }
+}
+if("undefined" != typeof bt && bt.hasOwnProperty("firewall") && bt.firewall.hasOwnProperty("add_accept_port")){
+ bt.firewall.add_accept_port = function(type, port, ps, callback) {
+ var action = "AddDropAddress";
+ if (type == 'port') {
+ ports = port.split(':');
+ if (port.indexOf('-') != -1) ports = port.split('-');
+ for (var i = 0; i < ports.length; i++) {
+ if (!bt.check_port(ports[i])) {
+ layer.msg('可用端口范围:1-65535', { icon: 2 });
+ // layer.msg(lan.firewall.port_err, {
+ // icon: 5
+ // });
+ return;
+ }
+ }
+ action = "AddAcceptPort";
+ }
+
+ loading = bt.load();
+ bt.send(action, 'firewall/' + action, { port: port, type: type, ps: ps }, function(rdata) {
+ loading.close();
+ if (callback) callback(rdata);
+ })
+ }
+}
+function SafeMessage(j, h, g, f) {
+ if(f == undefined) {
+ f = ""
+ }
+ var mess = layer.open({
+ type: 1,
+ title: j,
+ area: "350px",
+ closeBtn: 2,
+ shadeClose: true,
+ content: ""
+ });
+ $(".bt-cancel").click(function(){
+ layer.close(mess);
+ });
+ $("#toSubmit").click(function() {
+ layer.close(mess);
+ g();
+ })
+}
+$(document).ready(function () {
+ if($('#updata_pro_info').length>0){
+ $('#updata_pro_info').html('');
+ bt.set_cookie('productPurchase', 1);
+ }
})
\ No newline at end of file
diff --git a/wiki/update.md b/wiki/update.md
index d8f5c80..afee78f 100644
--- a/wiki/update.md
+++ b/wiki/update.md
@@ -57,12 +57,10 @@
__set_pyenv方法内,temp_file = public.readFile(filename)这行代码下面加上
```python
- temp_file = temp_file.replace('wget -O Tpublic.sh', '#wget -O Tpublic.sh')
- temp_file = temp_file.replace('\cp -rpa Tpublic.sh', '#\cp -rpa Tpublic.sh')
temp_file = temp_file.replace('http://download.bt.cn/install/public.sh', 'http://www.example.com/install/public.sh')
temp_file = temp_file.replace('https://download.bt.cn/install/public.sh', 'http://www.example.com/install/public.sh')
```
-
+
- class/plugin_deployment.py 文件,SetupPackage方法内替换 public.GetConfigValue('home') => 'https://www.bt.cn'
- script/flush_plugin.py 文件,删除clear_hosts()一行