diff --git a/web/admin/setup/sql/default.sql b/web/admin/setup/sql/default.sql
index 2e2c60eff..b4011cf77 100755
--- a/web/admin/setup/sql/default.sql
+++ b/web/admin/setup/sql/default.sql
@@ -1,9 +1,9 @@
CREATE TABLE IF NOT EXISTS `backup` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
+ `pid` INTEGER,
`type` INTEGER,
`name` TEXT,
- `pid` INTEGER,
`filename` TEXT,
`size` INTEGER,
`add_time` TEXT
diff --git a/web/admin/site/backup.py b/web/admin/site/backup.py
index e543d81f4..72b978fcf 100644
--- a/web/admin/site/backup.py
+++ b/web/admin/site/backup.py
@@ -23,7 +23,7 @@ import thisdb
from .site import blueprint
-# 设置默认站
+# 获取备份列表
@blueprint.route('/get_backup', endpoint='get_backup',methods=['POST'])
@panel_login_required
def get_backup():
@@ -32,6 +32,22 @@ def get_backup():
site_id = request.form.get('search', '')
return MwSites.instance().getBackup(site_id,page=page,size=limit)
+# 设置备份
+@blueprint.route('/to_backup', endpoint='to_backup',methods=['POST'])
+@panel_login_required
+def to_backup():
+ site_id = request.form.get('id', '')
+ return MwSites.instance().toBackup(site_id)
+
+# 删除备份
+@blueprint.route('/del_backup', endpoint='del_backup',methods=['POST'])
+@panel_login_required
+def del_backup():
+ site_id = request.form.get('id', '')
+ return MwSites.instance().delBackup(site_id)
+
+
+
diff --git a/web/static/app/site.js b/web/static/app/site.js
index ff10cea86..50baefff4 100755
--- a/web/static/app/site.js
+++ b/web/static/app/site.js
@@ -803,7 +803,7 @@ function getBackup(id,name,page) {
var ftpdown = "下载 | ";
body += "
"+frdata.data[i].name+" | \
" + (toSize(frdata.data[i].size)) + " | \
- " + frdata.data[i].addtime + " | \
+ " + frdata.data[i].add_time + " | \
"+ ftpdown + "删除 | \
"
}
@@ -813,9 +813,9 @@ function getBackup(id,name,page) {
if(name == 0){
var sBody = "\
- 文件名称 | 文件大小 | 打包时间 | 操作 |
\
- "+body+"\
-
"
+ 文件名称 | 文件大小 | 打包时间 | 操作 |
\
+ "+body+"\
+ "
$("#webBackupList").html(sBody);
$(".page").html(frdata.page);
return;
@@ -830,17 +830,17 @@ function getBackup(id,name,page) {
shift: 0,
shadeClose: false,
content: ""
+ \
+ \
+
\
+ \
+ 文件名称 | 文件大小 | 打包时间 | 操作 |
\
+ \
+ " + body + "\
+
\
+
" + frdata.page + "
\
+
\
+ "
});
},'json');
}
diff --git a/web/thisdb/__init__.py b/web/thisdb/__init__.py
index 33f664b8b..41674e2d2 100644
--- a/web/thisdb/__init__.py
+++ b/web/thisdb/__init__.py
@@ -13,6 +13,8 @@ from .option import *
from .sites import *
from .site_types import *
+from .backup import *
+
from .domain import *
from .binding import *
diff --git a/web/thisdb/backup.py b/web/thisdb/backup.py
index 5b03532cc..961498b82 100644
--- a/web/thisdb/backup.py
+++ b/web/thisdb/backup.py
@@ -10,16 +10,27 @@
import core.mw as mw
-# 站点-子目录绑定
+__FIELD = 'id,pid,type,name,filename,size,add_time'
-__FIELD = 'id,type,name,pid,filename,size,add_time'
+def addBackup(pid,name,filename,size,type=0):
-def getBackupPage(
- site_id = 1,
- page = 1,
- size = 10,
-):
- start = (page - 1) * size
+ add_time = mw.formatDate()
+ insert_data = {
+ 'type':type,
+ 'name':name,
+ 'pid':pid,
+ 'filename':filename,
+ 'size':size,
+ 'add_time':add_time,
+ }
+ mw.M('backup').insert(insert_data)
+ return True
+
+def getBackupById(bp_id):
+ return mw.M('backup').field(__FIELD).where("id=?", (bp_id,)).find()
+
+def getBackupPage(site_id,page = 1,size = 10):
+ start = (int(page) - 1) * int(size)
limit = str(start) + ',' + str(size)
bk_list = mw.M('backup').where('pid=?', (site_id,)).field(__FIELD).limit(limit).order('id desc').select()
count = mw.M('backup').where('pid=?', (site_id,)).count()
@@ -28,3 +39,6 @@ def getBackupPage(
rdata['list'] = bk_list
rdata['count'] = count
return rdata
+
+def deleteBackupById(bp_id):
+ return mw.M('backup').where("id=?", (bp_id,)).delete()
diff --git a/web/utils/site.py b/web/utils/site.py
index 90f9789b2..5cdb56a4d 100644
--- a/web/utils/site.py
+++ b/web/utils/site.py
@@ -2351,15 +2351,46 @@ export PATH
data = {}
data['data'] = info['list']
data['site'] = site_info
- data['page'] = mw.getPage({'count':info['count'],'tojs':'getBackup','p':page, 'row':limit})
+ data['page'] = mw.getPage({'count':info['count'],'tojs':'getBackup','p':page, 'row':size})
return data
+ def toBackup(self, site_id):
+ site_info = thisdb.getSitesById(site_id)
+
+ filename = site_info['name'] + '_' + time.strftime('%Y%m%d_%H%M%S', time.localtime()) + '.zip'
+ backup_path = mw.getBackupDir() + '/site'
+ zip_name = backup_path + '/' + filename
+ if not (os.path.exists(backup_path)):
+ os.makedirs(backup_path)
+ exec_log = mw.getPanelDir() + '/logs/panel_exec.log'
+ cmd = "cd '" + site_info['path'] + "' && zip '" + zip_name + "' -r ./* > " + exec_log + " 2>&1"
+ mw.execShell(cmd)
+
+ fsize = 0
+ if os.path.exists(zip_name):
+ fsize = os.path.getsize(zip_name)
+
+ thisdb.addBackup(site_id,filename,zip_name,fsize)
+
+ msg = mw.getInfo('备份网站[{1}]成功!', (site_info['name'],))
+ mw.writeLog('网站管理', msg)
+ return mw.returnData(True, '备份成功!')
+
+ def delBackup(self,backup_id):
+ info = thisdb.getBackupById(backup_id)
+ if os.path.exists(info['filename']):
+ os.remove(info['filename'])
+ msg = mw.getInfo('删除网站[{1}]的备份[{2}]成功!', (info['name'], info['filename']))
+ mw.writeLog('网站管理', msg)
+
+ thisdb.deleteBackupById(backup_id)
+ return mw.returnData(True, '站点删除成功!')
+
def getPhpVersion(self):
- phpVersions = ('00', '52', '53', '54', '55',
- '56', '70', '71', '72', '73',
- '74', '80', '81', '82', '83',
- '84')
+ phpVersions = ('00', '52', '53', '54', '55', '56',
+ '70', '71', '72', '73', '74', '80',
+ '81', '82', '83', '84')
data = []
for val in phpVersions:
tmp = {}