作者 Karson

修复无法清除缓存的BUG

@@ -6,10 +6,12 @@ use app\common\controller\Backend; @@ -6,10 +6,12 @@ use app\common\controller\Backend;
6 use fast\Http; 6 use fast\Http;
7 use fast\Random; 7 use fast\Random;
8 use fast\Tree; 8 use fast\Tree;
  9 +use RecursiveDirectoryIterator;
  10 +use RecursiveIteratorIterator;
  11 +use think\Cache;
9 use think\Config; 12 use think\Config;
10 use think\Db; 13 use think\Db;
11 use think\Lang; 14 use think\Lang;
12 -use think\Cache;  
13 15
14 /** 16 /**
15 * Ajax异步请求接口 17 * Ajax异步请求接口
@@ -353,19 +355,20 @@ class Ajax extends Backend @@ -353,19 +355,20 @@ class Ajax extends Backend
353 $wipe_cache_type = ['TEMP_PATH', 'LOG_PATH', 'CACHE_PATH']; 355 $wipe_cache_type = ['TEMP_PATH', 'LOG_PATH', 'CACHE_PATH'];
354 foreach ($wipe_cache_type as $item) 356 foreach ($wipe_cache_type as $item)
355 { 357 {
356 - if ($item == 'LOG_PATH')  
357 - {  
358 - $dirs = (array) glob(constant($item) . '*');  
359 - foreach ($dirs as $dir)  
360 - {  
361 - array_map('unlink', (array) glob($dir . DIRECTORY_SEPARATOR . '*.*'));  
362 - }  
363 - array_map('rmdir', $dirs);  
364 - }  
365 - else 358 + $dir = constant($item);
  359 + if (!is_dir($dir))
  360 + continue;
  361 + $files = new RecursiveIteratorIterator(
  362 + new RecursiveDirectoryIterator($dir, RecursiveDirectoryIterator::SKIP_DOTS), RecursiveIteratorIterator::CHILD_FIRST
  363 + );
  364 +
  365 + foreach ($files as $fileinfo)
366 { 366 {
367 - array_map('unlink', (array) glob(constant($item) . DIRECTORY_SEPARATOR . '*.*')); 367 + $todo = ($fileinfo->isDir() ? 'rmdir' : 'unlink');
  368 + $todo($fileinfo->getRealPath());
368 } 369 }
  370 +
  371 + //rmdir($dir);
369 } 372 }
370 Cache::clear(); 373 Cache::clear();
371 $this->code = 1; 374 $this->code = 1;
@@ -7001,8 +7001,24 @@ define("bootstrap-table-export", ["bootstrap-table","tableexport"], (function (g @@ -7001,8 +7001,24 @@ define("bootstrap-table-export", ["bootstrap-table","tableexport"], (function (g
7001 htmlForm.push(sprintf('<select class="form-control" name="field-%s" data-name="%s">%s</select>', vObjCol.field, vObjCol.field, selectHtml)); 7001 htmlForm.push(sprintf('<select class="form-control" name="field-%s" data-name="%s">%s</select>', vObjCol.field, vObjCol.field, selectHtml));
7002 htmlForm.push('</div>'); 7002 htmlForm.push('</div>');
7003 } 7003 }
  7004 +
7004 htmlForm.push('<div class="col-sm-6">'); 7005 htmlForm.push('<div class="col-sm-6">');
7005 - htmlForm.push(sprintf('<input type="text" class="form-control input-md" name="%s" placeholder="%s" id="%s">', vObjCol.field, vObjCol.title, vObjCol.field)); 7006 + if (vObjCol.searchList) {
  7007 + if (typeof vObjCol.searchList == 'function') {
  7008 + htmlForm.push(vObjCol.searchList.call(this, vObjCol));
  7009 + } else {
  7010 + var isArray = vObjCol.searchList.constructor === Array;
  7011 + var searchList = [];
  7012 + searchList.push(sprintf('<option value="">%s</option>', $.fn.bootstrapTable.locales.formatAdvancedChoose()));
  7013 + $.each(vObjCol.searchList, function (key, value) {
  7014 + searchList.push("<option value='" + (isArray ? value : key) + "'>" + value + "</option>");
  7015 + });
  7016 + htmlForm.push(sprintf('<select class="form-control" name="%s">%s</select>', vObjCol.field, searchList.join('')));
  7017 + }
  7018 + } else {
  7019 + htmlForm.push(sprintf('<input type="text" class="form-control input-md" name="%s" placeholder="%s" id="%s">', vObjCol.field, vObjCol.title, vObjCol.field));
  7020 + }
  7021 +
7006 htmlForm.push('</div>'); 7022 htmlForm.push('</div>');
7007 htmlForm.push('</div>'); 7023 htmlForm.push('</div>');
7008 } 7024 }
@@ -7060,6 +7076,9 @@ define("bootstrap-table-export", ["bootstrap-table","tableexport"], (function (g @@ -7060,6 +7076,9 @@ define("bootstrap-table-export", ["bootstrap-table","tableexport"], (function (g
7060 }, 7076 },
7061 formatAdvancedCloseButton: function () { 7077 formatAdvancedCloseButton: function () {
7062 return "Close"; 7078 return "Close";
  7079 + },
  7080 + formatAdvancedChoose: function () {
  7081 + return "Choose";
7063 } 7082 }
7064 }); 7083 });
7065 7084
@@ -7154,7 +7173,10 @@ define("bootstrap-table-export", ["bootstrap-table","tableexport"], (function (g @@ -7154,7 +7173,10 @@ define("bootstrap-table-export", ["bootstrap-table","tableexport"], (function (g
7154 $("#avdSearchModalContent_" + this.options.idTable + " select").each(function () { 7173 $("#avdSearchModalContent_" + this.options.idTable + " select").each(function () {
7155 var name = $(this).data("name"); 7174 var name = $(this).data("name");
7156 var sym = $(this).val(); 7175 var sym = $(this).val();
7157 - var value = $("input[name='" + name + "']").val(); 7176 + var obj = $("[name='" + name + "']");
  7177 + if (obj.size() == 0)
  7178 + return true;
  7179 + var value = obj.size() > 1 ? $("[name='" + name + "']:checked").val() : obj.val();
7158 if (value == '' && sym.indexOf("NULL") == -1) { 7180 if (value == '' && sym.indexOf("NULL") == -1) {
7159 return true; 7181 return true;
7160 } 7182 }
@@ -7204,9 +7226,14 @@ define('table',['jquery', 'bootstrap', 'backend', 'config', 'toastr', 'moment', @@ -7204,9 +7226,14 @@ define('table',['jquery', 'bootstrap', 'backend', 'config', 'toastr', 'moment',
7204 method: 'get', 7226 method: 'get',
7205 toolbar: "#toolbar", 7227 toolbar: "#toolbar",
7206 search: true, 7228 search: true,
  7229 + cache: false,
7207 advancedSearch: true, 7230 advancedSearch: true,
7208 idTable: 'advancedTable', 7231 idTable: 'advancedTable',
7209 showExport: true, 7232 showExport: true,
  7233 + exportDataType: "all",
  7234 + exportTypes: ['json', 'xml', 'csv', 'txt', 'doc', 'excel'],
  7235 + pageSize: 10,
  7236 + pageList: [10, 25, 50, 'All'],
7210 pagination: true, 7237 pagination: true,
7211 clickToSelect: true, 7238 clickToSelect: true,
7212 showRefresh: false, 7239 showRefresh: false,
@@ -7571,6 +7598,7 @@ define('upload',['jquery', 'bootstrap', 'backend', 'config', 'plupload'], functi @@ -7571,6 +7598,7 @@ define('upload',['jquery', 'bootstrap', 'backend', 'config', 'plupload'], functi
7571 plupload: function (element, onAfterUpload) { 7598 plupload: function (element, onAfterUpload) {
7572 element = typeof element == 'undefined' ? Upload.config.classname : element; 7599 element = typeof element == 'undefined' ? Upload.config.classname : element;
7573 $(element, Upload.config.container).each(function () { 7600 $(element, Upload.config.container).each(function () {
  7601 + var that = this;
7574 var id = $(this).prop("id"); 7602 var id = $(this).prop("id");
7575 var url = $(this).data("url"); 7603 var url = $(this).data("url");
7576 var maxsize = $(this).data("maxsize"); 7604 var maxsize = $(this).data("maxsize");
@@ -7579,6 +7607,7 @@ define('upload',['jquery', 'bootstrap', 'backend', 'config', 'plupload'], functi @@ -7579,6 +7607,7 @@ define('upload',['jquery', 'bootstrap', 'backend', 'config', 'plupload'], functi
7579 var multiple = $(this).data("multiple"); 7607 var multiple = $(this).data("multiple");
7580 //上传URL 7608 //上传URL
7581 url = url ? url : Config.upload.uploadurl; 7609 url = url ? url : Config.upload.uploadurl;
  7610 + url = Backend.api.fixurl(url);
7582 //最大可上传 7611 //最大可上传
7583 maxsize = maxsize ? maxsize : Config.upload.maxsize; 7612 maxsize = maxsize ? maxsize : Config.upload.maxsize;
7584 //文件类型 7613 //文件类型
@@ -7610,7 +7639,7 @@ define('upload',['jquery', 'bootstrap', 'backend', 'config', 'plupload'], functi @@ -7610,7 +7639,7 @@ define('upload',['jquery', 'bootstrap', 'backend', 'config', 'plupload'], functi
7610 //这里可以改成其它的表现形式 7639 //这里可以改成其它的表现形式
7611 //document.getElementById('filelist').innerHTML += '<div id="' + file.id + '">' + file.name + ' (' + plupload.formatSize(file.size) + ') <b></b></div>'; 7640 //document.getElementById('filelist').innerHTML += '<div id="' + file.id + '">' + file.name + ' (' + plupload.formatSize(file.size) + ') <b></b></div>';
7612 }); 7641 });
7613 - $("#" + id).data("bakup-html", $("#" + id).html()); 7642 + $(that).data("bakup-html", $(that).html());
7614 //添加后立即上传 7643 //添加后立即上传
7615 setTimeout(function () { 7644 setTimeout(function () {
7616 Upload.list[id].start(); 7645 Upload.list[id].start();
@@ -7619,11 +7648,11 @@ define('upload',['jquery', 'bootstrap', 'backend', 'config', 'plupload'], functi @@ -7619,11 +7648,11 @@ define('upload',['jquery', 'bootstrap', 'backend', 'config', 'plupload'], functi
7619 UploadProgress: function (up, file) { 7648 UploadProgress: function (up, file) {
7620 //这里可以改成其它的表现形式 7649 //这里可以改成其它的表现形式
7621 //document.getElementById(file.id).getElementsByTagName('b')[0].innerHTML = '<span>' + file.percent + "%</span>"; 7650 //document.getElementById(file.id).getElementsByTagName('b')[0].innerHTML = '<span>' + file.percent + "%</span>";
7622 - $("#" + id).prop("disabled", true).html("<i class='fa fa-upload'></i> 上传" + file.percent + "%"); 7651 + $(that).prop("disabled", true).html("<i class='fa fa-upload'></i> 上传" + file.percent + "%");
7623 }, 7652 },
7624 FileUploaded: function (up, file, info) { 7653 FileUploaded: function (up, file, info) {
7625 //还原按钮文字及状态 7654 //还原按钮文字及状态
7626 - $("#" + id).prop("disabled", false).html($("#" + id).data("bakup-html")); 7655 + $(that).prop("disabled", false).html($(that).data("bakup-html"));
7627 //这里可以改成其它的表现形式 7656 //这里可以改成其它的表现形式
7628 //document.getElementById(file.id).getElementsByTagName('b')[0].innerHTML += (' [Url]: ' + '<a href="' + url + '" target="_blank">' + url + '</a>'); 7657 //document.getElementById(file.id).getElementsByTagName('b')[0].innerHTML += (' [Url]: ' + '<a href="' + url + '" target="_blank">' + url + '</a>');
7629 //这里建议不修改 7658 //这里建议不修改
@@ -7634,13 +7663,20 @@ define('upload',['jquery', 'bootstrap', 'backend', 'config', 'plupload'], functi @@ -7634,13 +7663,20 @@ define('upload',['jquery', 'bootstrap', 'backend', 'config', 'plupload'], functi
7634 ret.code = ret.code == 200 ? 1 : ret.code; 7663 ret.code = ret.code == 200 ? 1 : ret.code;
7635 var data = ret.hasOwnProperty("data") && ret.data != "" ? ret.data : null; 7664 var data = ret.hasOwnProperty("data") && ret.data != "" ? ret.data : null;
7636 var msg = ret.hasOwnProperty("msg") && ret.msg != "" ? ret.msg : ""; 7665 var msg = ret.hasOwnProperty("msg") && ret.msg != "" ? ret.msg : "";
7637 - $("input[data-plupload-id='" + id + "-text']").val(data.url);  
7638 - var afterUpload = $("#" + id).data("after-upload");  
7639 - if (afterUpload && typeof Upload.api.custom[afterUpload] == 'function') {  
7640 - Upload.api.custom[afterUpload].call(info, id, data);  
7641 - }  
7642 - if (typeof onAfterUpload == 'function') {  
7643 - onAfterUpload.call(info, id, data); 7666 + if (ret.code === 1) {
  7667 + //$("input[data-plupload-id='" + id + "-text']").val(data.url);
  7668 + if ($(that).data("input-id")) {
  7669 + $("input#" + $(that).data("input-id")).val(data.url);
  7670 + }
  7671 + var afterUpload = $("#" + id).data("after-upload");
  7672 + if (afterUpload && typeof Upload.api.custom[afterUpload] == 'function') {
  7673 + Upload.api.custom[afterUpload].call(that, data);
  7674 + }
  7675 + if (typeof onAfterUpload == 'function') {
  7676 + onAfterUpload.call(that, data);
  7677 + }
  7678 + } else {
  7679 + Toastr.error(msg ? msg : __('Operation failed'));
7644 } 7680 }
7645 } else { 7681 } else {
7646 Toastr.error(e.message + "(code:-2)"); 7682 Toastr.error(e.message + "(code:-2)");
@@ -7698,8 +7734,8 @@ define('upload',['jquery', 'bootstrap', 'backend', 'config', 'plupload'], functi @@ -7698,8 +7734,8 @@ define('upload',['jquery', 'bootstrap', 'backend', 'config', 'plupload'], functi
7698 }, 7734 },
7699 custom: { 7735 custom: {
7700 //自定义上传完成回调 7736 //自定义上传完成回调
7701 - afteruploadcallback: function (id, response) {  
7702 - console.log(this, id, response); 7737 + afteruploadcallback: function (response) {
  7738 + console.log(this, response);
7703 alert("Custom Callback,Response URL:" + response.url); 7739 alert("Custom Callback,Response URL:" + response.url);
7704 }, 7740 },
7705 }, 7741 },