网站备份

pull/109/head
Mr Chen 6 years ago
parent cf92234cd0
commit 28fc507522
  1. 67
      class/core/site_api.py
  2. 50
      route/static/app/site.js

@ -53,8 +53,8 @@ class site_api:
p = request.form.get('p', '').encode('utf-8')
start = (int(p) - 1) * (int(limit))
_list = public.M('sites').where('', ()).field(
'id,name,path,status,ps,addtime,edate').limit((str(start)) + ',' + limit).order('id desc').select()
_list = public.M('sites').where('', ()).field('id,name,path,status,ps,addtime,edate').limit(
(str(start)) + ',' + limit).order('id desc').select()
_ret = {}
_ret['data'] = _list
@ -75,6 +75,69 @@ class site_api:
return public.returnJson(True, '修改成功!')
return public.returnJson(False, '修改失败!')
def getBackupApi(self):
limit = request.form.get('limit', '').encode('utf-8')
p = request.form.get('p', '').encode('utf-8')
mid = request.form.get('search', '').encode('utf-8')
find = public.M('sites').where("id=?", (mid,)).field(
"id,name,path,status,ps,addtime,edate").find()
start = (int(p) - 1) * (int(limit))
_list = public.M('backup').where('type=?', (mid,)).field('id,type,name,pid,filename,size,addtime').limit(
(str(start)) + ',' + limit).order('id desc').select()
_ret = {}
_ret['data'] = _list
count = public.M('backup').where("id=?", (mid,)).count()
info = {}
info['count'] = count
info['tojs'] = 'getBackup'
info['p'] = p
info['row'] = limit
_ret['page'] = public.getPage(info)
_ret['site'] = find
return public.getJson(_ret)
def toBackupApi(self):
mid = request.form.get('id', '').encode('utf-8')
find = public.M('sites').where(
"id=?", (mid,)).field('name,path,id').find()
fileName = find['name'] + '_' + \
time.strftime('%Y%m%d_%H%M%S', time.localtime()) + '.zip'
backupPath = public.getBackupDir() + '/site'
zipName = backupPath + '/' + fileName
if not (os.path.exists(backupPath)):
os.makedirs(backupPath)
tmps = '/tmp/panelExec.log'
execStr = "cd '" + find['path'] + "' && zip '" + \
zipName + "' -r ./* > " + tmps + " 2>&1"
# print execStr
# print public.execShell(execStr)
if os.path.exists(zipName):
fsize = os.path.getsize(zipName)
else:
fsize = 0
sql = public.M('backup').add('type,name,pid,filename,size,addtime',
(mid, fileName, find['id'], zipName, fsize, public.getDate()))
msg = public.getInfo('备份网站[{1}]成功!', (find['name'],))
public.writeLog('网站管理', msg)
return public.returnJson(True, '备份成功!')
def delBackupApi(self):
mid = request.form.get('id', '').encode('utf-8')
filename = public.M('backup').where(
"id=?", (mid,)).getField('filename')
if os.path.exists(filename):
os.remove(filename)
name = public.M('backup').where("id=?", (mid,)).getField('name')
msg = public.getInfo('删除网站[{1}]的备份[{2}]成功!', (name, filename))
public.writeLog('网站管理', msg)
public.M('backup').where("id=?", (mid,)).delete()
return public.returnJson(True, '站点删除成功!')
def getPhpVersionApi(self):
return self.getPhpVersion()

@ -32,9 +32,9 @@ function getWeb(page, search) {
//是否有备份
if (data.data[i].backup_count > 0) {
var backup = "<a href='javascript:;' class='btlink' onclick=\"getBackup(" + data.data[i].id + ",'" + data.data[i].name + "')\">"+lan.site.backup_yes+"</a>";
var backup = "<a href='javascript:;' class='btlink' onclick=\"getBackup(" + data.data[i].id + ")\">有备份</a>";
} else {
var backup = "<a href='javascript:;' class='btlink' onclick=\"getBackup(" + data.data[i].id + ",'" + data.data[i].name + "')\">"+lan.site.backup_no+"</a>";
var backup = "<a href='javascript:;' class='btlink' onclick=\"getBackup(" + data.data[i].id + ")\">无备份</a>";
}
//是否设置有效期
var web_end_time = (data.data[i].edate == "0000-00-00") ? lan.site.web_end_time : data.data[i].edate;
@ -809,13 +809,13 @@ function isDomain(domain) {
* @param {String} name 主域名
*/
function webBackup(id, name) {
var loadT =layer.msg(lan.database.backup_the, {icon:16,time:0,shade: [0.3, '#000']});
var data = "id="+id;
$.post('/site?action=ToBackup', data, function(rdata) {
var loadT =layer.msg('正在备份,请稍候...', {icon:16,time:0,shade: [0.3, '#000']});
$.post('/site/to_backup', "id="+id, function(rdata) {
layer.closeAll();
layer.msg(rdata.msg,{icon:rdata.status?1:2})
layer.msg(rdata.msg,{icon:rdata.status?1:2});
getBackup(id);
});
},'json');
}
/**
@ -825,13 +825,13 @@ function webBackup(id, name) {
* @param {String} name 主域名
*/
function webBackupDelete(id,pid){
layer.confirm(lan.site.webback_del_confirm,{title:lan.site.del_bak_file,icon:3,closeBtn:2},function(index){
var loadT =layer.msg(lan.public.the_del, {icon:16,time:0,shade: [0.3, '#000']});
$.post('/site?action=DelBackup','id='+id, function(rdata){
layer.confirm('真的要删除备份包吗?',{title:'删除备份文件!',icon:3,closeBtn:2},function(index){
var loadT =layer.msg('正在删除,请稍候...', {icon:16,time:0,shade: [0.3, '#000']});
$.post('/site/del_backup','id='+id, function(rdata){
layer.closeAll();
layer.msg(rdata.msg,{icon:rdata.status?1:2});
getBackup(pid);
});
},'json');
})
}
@ -840,22 +840,18 @@ function getBackup(id,name,page) {
if(page == undefined){
page = '1';
}
$.post('/data?action=getFind','table=sites&id=' + id, function(rdata) {
$.post('/data?action=getData','table=backup&search=' + id + '&limit=5&p='+page+'&type=0&tojs=getBackup',function(frdata){
$.post('/site/get_backup','search=' + id + '&limit=5&p='+page, function(frdata){
var body = '';
for (var i = 0; i < frdata.data.length; i++) {
if(frdata.data[i].type == '1') continue;
if(frdata.data[i].filename.length < 15){
var ftpdown = "<a class='btlink' href='/cloud?filename="+frdata.data[i].filename+"&name="+ frdata.data[i].name+"' target='_blank'>下载</a> | ";
}else{
var ftpdown = "<a class='btlink' href='/download?filename="+frdata.data[i].filename+"&name="+frdata.data[i].name+"' target='_blank'>下载</a> | ";
if(frdata.data[i].type == '1') {
continue;
}
var ftpdown = "<a class='btlink' href='/files/download?filename="+frdata.data[i].filename+"&name="+frdata.data[i].name+"' target='_blank'>下载</a> | ";
body += "<tr><td><span class='glyphicon glyphicon-file'></span>"+frdata.data[i].name+"</td>\
<td>" + (ToSize(frdata.data[i].size)) + "</td>\
<td>" + (toSize(frdata.data[i].size)) + "</td>\
<td>" + frdata.data[i].addtime + "</td>\
<td class='text-right' style='color:#ccc'>"+ ftpdown + "<a class='btlink' href='javascript:;' onclick=\"WebBackupDelete('" + frdata.data[i].id + "',"+id+")\">"+lan.public.del+"</a></td>\
<td class='text-right' style='color:#ccc'>"+ ftpdown + "<a class='btlink' href='javascript:;' onclick=\"webBackupDelete('" + frdata.data[i].id + "',"+id+")\">删除</a></td>\
</tr>"
}
var ftpdown = '';
@ -866,7 +862,7 @@ function getBackup(id,name,page) {
<thead><tr><th>文件名称</th><th></th><th></th><th width='140px' class='text-right'></th></tr></thead>\
<tbody id='webBackupBody' class='list-list'>"+body+"</tbody>\
</table>"
$("#WebBackupList").html(sBody);
$("#webBackupList").html(sBody);
$(".page").html(frdata.page);
return;
}
@ -875,19 +871,17 @@ function getBackup(id,name,page) {
type: 1,
skin: 'demo-class',
area: '700px',
title: lan.site.backup_title,
title: '打包备份',
closeBtn: 2,
shift: 0,
shadeClose: false,
content: "<div class='bt-form ptb15 mlr15' id='WebBackup'>\
<button class='btn btn-default btn-sm' style='margin-right:10px' type='button' onclick=\"webBackup('" + rdata.id + "','" + rdata.name + "')\">打包备份</button>\
content: "<div class='bt-form ptb15 mlr15' id='webBackup'>\
<button class='btn btn-default btn-sm' style='margin-right:10px' type='button' onclick=\"webBackup('" + frdata['site']['id'] + "','" + frdata['site']['name'] + "')\">打包备份</button>\
<div class='divtable mtb15' style='margin-bottom:0'><table width='100%' id='webBackupList' class='table table-hover'>\
<thead><tr><th>文件名称</th><th></th><th></th><th width='140px' class='text-right'></th></tr></thead>\
<tbody id='webBackupBody' class='list-list'>"+body+"</tbody>\
</table><div class='page'>"+frdata.page+"</div></div></div>"
});
});
},'json');
}

Loading…
Cancel
Save