From e4131eb2e676a4c284ea3c0b381cb6b5c978e147 Mon Sep 17 00:00:00 2001
From: Karson <karsonzhang@163.com>
Date: Sun, 7 May 2017 19:14:05 +0800
Subject: [PATCH] 修复无法清除缓存的BUG

---
 application/admin/controller/Ajax.php   | 27 +++++++++++++++------------
 public/assets/js/require-backend.min.js | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++--------------
 2 files changed, 65 insertions(+), 26 deletions(-)

diff --git a/application/admin/controller/Ajax.php b/application/admin/controller/Ajax.php
index ecbd462..b92838a 100644
--- a/application/admin/controller/Ajax.php
+++ b/application/admin/controller/Ajax.php
@@ -6,10 +6,12 @@ use app\common\controller\Backend;
 use fast\Http;
 use fast\Random;
 use fast\Tree;
+use RecursiveDirectoryIterator;
+use RecursiveIteratorIterator;
+use think\Cache;
 use think\Config;
 use think\Db;
 use think\Lang;
-use think\Cache;
 
 /**
  * Ajax异步请求接口
@@ -353,19 +355,20 @@ class Ajax extends Backend
         $wipe_cache_type = ['TEMP_PATH', 'LOG_PATH', 'CACHE_PATH'];
         foreach ($wipe_cache_type as $item)
         {
-            if ($item == 'LOG_PATH')
-            {
-                $dirs = (array) glob(constant($item) . '*');
-                foreach ($dirs as $dir)
-                {
-                    array_map('unlink', (array) glob($dir . DIRECTORY_SEPARATOR . '*.*'));
-                }
-                array_map('rmdir', $dirs);
-            }
-            else
+            $dir = constant($item);
+            if (!is_dir($dir))
+                continue;
+            $files = new RecursiveIteratorIterator(
+                    new RecursiveDirectoryIterator($dir, RecursiveDirectoryIterator::SKIP_DOTS), RecursiveIteratorIterator::CHILD_FIRST
+            );
+
+            foreach ($files as $fileinfo)
             {
-                array_map('unlink', (array) glob(constant($item) . DIRECTORY_SEPARATOR . '*.*'));
+                $todo = ($fileinfo->isDir() ? 'rmdir' : 'unlink');
+                $todo($fileinfo->getRealPath());
             }
+
+            //rmdir($dir);
         }
         Cache::clear();
         $this->code = 1;
diff --git a/public/assets/js/require-backend.min.js b/public/assets/js/require-backend.min.js
index ad5a715..186de16 100644
--- a/public/assets/js/require-backend.min.js
+++ b/public/assets/js/require-backend.min.js
@@ -7001,8 +7001,24 @@ define("bootstrap-table-export", ["bootstrap-table","tableexport"], (function (g
                     htmlForm.push(sprintf('<select class="form-control" name="field-%s" data-name="%s">%s</select>', vObjCol.field, vObjCol.field, selectHtml));
                     htmlForm.push('</div>');
                 }
+
                 htmlForm.push('<div class="col-sm-6">');
-                htmlForm.push(sprintf('<input type="text" class="form-control input-md" name="%s" placeholder="%s" id="%s">', vObjCol.field, vObjCol.title, vObjCol.field));
+                if (vObjCol.searchList) {
+                    if (typeof vObjCol.searchList == 'function') {
+                        htmlForm.push(vObjCol.searchList.call(this, vObjCol));
+                    } else {
+                        var isArray = vObjCol.searchList.constructor === Array;
+                        var searchList = [];
+                        searchList.push(sprintf('<option value="">%s</option>', $.fn.bootstrapTable.locales.formatAdvancedChoose()));
+                        $.each(vObjCol.searchList, function (key, value) {
+                            searchList.push("<option value='" + (isArray ? value : key) + "'>" + value + "</option>");
+                        });
+                        htmlForm.push(sprintf('<select class="form-control" name="%s">%s</select>', vObjCol.field, searchList.join('')));
+                    }
+                } else {
+                    htmlForm.push(sprintf('<input type="text" class="form-control input-md" name="%s" placeholder="%s" id="%s">', vObjCol.field, vObjCol.title, vObjCol.field));
+                }
+
                 htmlForm.push('</div>');
                 htmlForm.push('</div>');
             }
@@ -7060,6 +7076,9 @@ define("bootstrap-table-export", ["bootstrap-table","tableexport"], (function (g
         },
         formatAdvancedCloseButton: function () {
             return "Close";
+        },
+        formatAdvancedChoose: function () {
+            return "Choose";
         }
     });
 
@@ -7154,7 +7173,10 @@ define("bootstrap-table-export", ["bootstrap-table","tableexport"], (function (g
             $("#avdSearchModalContent_" + this.options.idTable + " select").each(function () {
                 var name = $(this).data("name");
                 var sym = $(this).val();
-                var value = $("input[name='" + name + "']").val();
+                var obj = $("[name='" + name + "']");
+                if (obj.size() == 0)
+                    return true;
+                var value = obj.size() > 1 ? $("[name='" + name + "']:checked").val() : obj.val();
                 if (value == '' && sym.indexOf("NULL") == -1) {
                     return true;
                 }
@@ -7204,9 +7226,14 @@ define('table',['jquery', 'bootstrap', 'backend', 'config', 'toastr', 'moment', 
             method: 'get',
             toolbar: "#toolbar",
             search: true,
+            cache: false,
             advancedSearch: true,
             idTable: 'advancedTable',
             showExport: true,
+            exportDataType: "all",
+            exportTypes: ['json', 'xml', 'csv', 'txt', 'doc', 'excel'],
+            pageSize: 10,
+            pageList: [10, 25, 50, 'All'],
             pagination: true,
             clickToSelect: true,
             showRefresh: false,
@@ -7571,6 +7598,7 @@ define('upload',['jquery', 'bootstrap', 'backend', 'config', 'plupload'], functi
             plupload: function (element, onAfterUpload) {
                 element = typeof element == 'undefined' ? Upload.config.classname : element;
                 $(element, Upload.config.container).each(function () {
+                    var that = this;
                     var id = $(this).prop("id");
                     var url = $(this).data("url");
                     var maxsize = $(this).data("maxsize");
@@ -7579,6 +7607,7 @@ define('upload',['jquery', 'bootstrap', 'backend', 'config', 'plupload'], functi
                     var multiple = $(this).data("multiple");
                     //上传URL
                     url = url ? url : Config.upload.uploadurl;
+                    url = Backend.api.fixurl(url);
                     //最大可上传
                     maxsize = maxsize ? maxsize : Config.upload.maxsize;
                     //文件类型
@@ -7610,7 +7639,7 @@ define('upload',['jquery', 'bootstrap', 'backend', 'config', 'plupload'], functi
                                     //这里可以改成其它的表现形式
                                     //document.getElementById('filelist').innerHTML += '<div id="' + file.id + '">' + file.name + ' (' + plupload.formatSize(file.size) + ') <b></b></div>';
                                 });
-                                $("#" + id).data("bakup-html", $("#" + id).html());
+                                $(that).data("bakup-html", $(that).html());
                                 //添加后立即上传
                                 setTimeout(function () {
                                     Upload.list[id].start();
@@ -7619,11 +7648,11 @@ define('upload',['jquery', 'bootstrap', 'backend', 'config', 'plupload'], functi
                             UploadProgress: function (up, file) {
                                 //这里可以改成其它的表现形式
                                 //document.getElementById(file.id).getElementsByTagName('b')[0].innerHTML = '<span>' + file.percent + "%</span>";
-                                $("#" + id).prop("disabled", true).html("<i class='fa fa-upload'></i> 上传" + file.percent + "%");
+                                $(that).prop("disabled", true).html("<i class='fa fa-upload'></i> 上传" + file.percent + "%");
                             },
                             FileUploaded: function (up, file, info) {
                                 //还原按钮文字及状态
-                                $("#" + id).prop("disabled", false).html($("#" + id).data("bakup-html"));
+                                $(that).prop("disabled", false).html($(that).data("bakup-html"));
                                 //这里可以改成其它的表现形式
                                 //document.getElementById(file.id).getElementsByTagName('b')[0].innerHTML += (' [Url]: ' + '<a href="' + url + '" target="_blank">' + url + '</a>');
                                 //这里建议不修改
@@ -7634,13 +7663,20 @@ define('upload',['jquery', 'bootstrap', 'backend', 'config', 'plupload'], functi
                                         ret.code = ret.code == 200 ? 1 : ret.code;
                                         var data = ret.hasOwnProperty("data") && ret.data != "" ? ret.data : null;
                                         var msg = ret.hasOwnProperty("msg") && ret.msg != "" ? ret.msg : "";
-                                        $("input[data-plupload-id='" + id + "-text']").val(data.url);
-                                        var afterUpload = $("#" + id).data("after-upload");
-                                        if (afterUpload && typeof Upload.api.custom[afterUpload] == 'function') {
-                                            Upload.api.custom[afterUpload].call(info, id, data);
-                                        }
-                                        if (typeof onAfterUpload == 'function') {
-                                            onAfterUpload.call(info, id, data);
+                                        if (ret.code === 1) {
+                                            //$("input[data-plupload-id='" + id + "-text']").val(data.url);
+                                            if ($(that).data("input-id")) {
+                                                $("input#" + $(that).data("input-id")).val(data.url);
+                                            }
+                                            var afterUpload = $("#" + id).data("after-upload");
+                                            if (afterUpload && typeof Upload.api.custom[afterUpload] == 'function') {
+                                                Upload.api.custom[afterUpload].call(that, data);
+                                            }
+                                            if (typeof onAfterUpload == 'function') {
+                                                onAfterUpload.call(that, data);
+                                            }
+                                        } else {
+                                            Toastr.error(msg ? msg : __('Operation failed'));
                                         }
                                     } else {
                                         Toastr.error(e.message + "(code:-2)");
@@ -7698,8 +7734,8 @@ define('upload',['jquery', 'bootstrap', 'backend', 'config', 'plupload'], functi
             },
             custom: {
                 //自定义上传完成回调
-                afteruploadcallback: function (id, response) {
-                    console.log(this, id, response);
+                afteruploadcallback: function (response) {
+                    console.log(this, response);
                     alert("Custom Callback,Response URL:" + response.url);
                 },
             },
--
libgit2 0.24.0