2.4 version

pull/19/head
kalcaddle 2014-06-08 14:47:38 +08:00
parent a8f86a3689
commit de692316c5
31 changed files with 555 additions and 400 deletions

View File

@ -1,6 +1,6 @@
#KODexplorer (http://kalcaddle.com/) #KODexplorer (http://kalcaddle.com/)
###ver2.2(2014.4.19) power by warlee ###ver2.4(2014.6.8) power by warlee
商业版授权请联系QQ:kalcaddle@qq.com 商业版授权请联系QQ:kalcaddle#qq.com
##是什么: ##是什么:
Kodexplorer为千帆网络工作室开发的一款服务器文件管理程序。 Kodexplorer为千帆网络工作室开发的一款服务器文件管理程序。
@ -24,7 +24,7 @@
普通用户demo/demo 普通用户demo/demo
游客用户guest/guest 游客用户guest/guest
【如何使用】下载程序,上传到你的服务器路径下,解压。访问即可,体验超便捷的服务吧! 【如何使用】下载程序,上传到你的服务器路径下,解压,data目录设置777权限。访问体验超便捷的服务吧!
【关于上传问题】 程序没有做任何限制,如果需要上传大文件,则修改php.iniupload_max_filesize = 1000M post_max_size = 1000M 【关于上传问题】 程序没有做任何限制,如果需要上传大文件,则修改php.iniupload_max_filesize = 1000M post_max_size = 1000M
【关于解压缩问题】 程序不做任何限制,如若失败请设置php内存限制。memory_limit 1000M 【关于解压缩问题】 程序不做任何限制,如若失败请设置php内存限制。memory_limit 1000M
【关于兼容性】建议使用chrome firefox ie9+ 体验更完整。ie8以下基本上不做兼容处理。chrome才支持文件夹拖拽上传。 【关于兼容性】建议使用chrome firefox ie9+ 体验更完整。ie8以下基本上不做兼容处理。chrome才支持文件夹拖拽上传。
@ -36,7 +36,38 @@
![](https://cloud.githubusercontent.com/assets/3761968/2583304/764f562a-b9cf-11e3-8e59-afdbdffc20eb.png) ![](https://cloud.githubusercontent.com/assets/3761968/2583304/764f562a-b9cf-11e3-8e59-afdbdffc20eb.png)
ver2.2 `2014/4/19`
ver2.4 `2014/6/8`
=====================
##update:
语言选择
远程下载文件名优化
树目录事件优化
收藏夹点击 undefined
没权限建立文件夹错误提示 红色
打开dialog 不显示问题。先显示后打开
ajax error 系统错误 对话框提示内容
懒加载优化
ver2.3 `2014/6/2`
=====================
##update:
拖动url——创建ext app
文件管理,树目录变化后(增删改)自动同步到文件列表
文件管理,文件列表变化后(增删改)自动同步到树目录
中文用户名限制
对话框打开关闭动画
其他多处优化
##fix bug:bug解决和程序优化
文件名限制bug
同目录多个程序cookie bug修复
地址栏 最后显示宽度问题
服务器路径下 编辑器预览404修复
树目录显示优化
登陆记住密码优化
ver2.2 `2014/5/11`
===================== =====================
##update: ##update:
公共目录支持(多个用户可以共享目录,写权限跟随用户组权限设定) 公共目录支持(多个用户可以共享目录,写权限跟随用户组权限设定)
@ -48,6 +79,7 @@ ver2.2 `2014/4/19`
##fix bug:bug解决和程序优化 ##fix bug:bug解决和程序优化
桌面任务栏点不中bug 桌面任务栏点不中bug
部分文案问题 部分文案问题
众多细节优化
ver2.1 `2014/4/2` ver2.1 `2014/4/2`

View File

@ -5,10 +5,12 @@
* @copyright warlee 2014.(Shanghai)Co.,Ltd * @copyright warlee 2014.(Shanghai)Co.,Ltd
* @license http://kalcaddle.com/tools/licenses/license.txt * @license http://kalcaddle.com/tools/licenses/license.txt
*/ */
date_default_timezone_set('PRC'); date_default_timezone_set('PRC');
@ini_set('display_errors',0);
@ini_set('session.cache_expire',600); @ini_set('session.cache_expire',600);
@set_time_limit(600);//30min pathInfoMuti,search,upload,download... @set_time_limit(600);//30min pathInfoMuti,search,upload,download...
@ini_set('display_errors',0);
function P($path){return str_replace('\\','/',$path);} function P($path){return str_replace('\\','/',$path);}
define('WEB_ROOT',str_replace(P($_SERVER['SCRIPT_NAME']),'',P(dirname(dirname(__FILE__))).'/index.php').'/'); define('WEB_ROOT',str_replace(P($_SERVER['SCRIPT_NAME']),'',P(dirname(dirname(__FILE__))).'/index.php').'/');

View File

@ -1,2 +1,2 @@
<?php <?php
define('KOD_VERSION','2.2');//2014.4.2 define('KOD_VERSION','2.4');//2014.6.8

View File

@ -87,7 +87,17 @@ class app extends Controller{
show_json($this->L['error'],false); show_json($this->L['error'],false);
} }
public function get_url_title(){
$html = curl_get_contents($this->in['url']);
$result = match($html,"<title>(.*)<\/title>");
if (strlen($result)>50) {
$result = mb_substr($result,0,50,'utf-8');
}
if (strlen($result) == 0) {
$result = urlencode($this->in['url']);
}
show_json($result);
}
private function _init(){ private function _init(){
return json_decode(rawurldecode($this->in['data'])); return json_decode(rawurldecode($this->in['data']));

View File

@ -47,7 +47,9 @@ class debug extends Controller{
$this->_remove(); $this->_remove();
echo '删除成功!<br/><h3>开始替换模板种less相关内容</h3><hr/>';flush(); echo '删除成功!<br/><h3>开始替换模板种less相关内容</h3><hr/>';flush();
$this->_fileReplace(); $this->_fileReplace();
echo '替换成功!<br/><h3>打包程序</h3><hr/>';flush(); echo '替换成功!<br/><h3>初始化默认用户数据...</h3><hr/>';flush();
$this->_initUser();
echo '初始化默认用户成功!<br/><h3>打包程序</h3><hr/>';flush();
load_class('pclzip'); load_class('pclzip');
ini_set('memory_limit', '2028M');//2G; ini_set('memory_limit', '2028M');//2G;
@ -55,7 +57,6 @@ class debug extends Controller{
$v_list = $archive->create($this->path_to,PCLZIP_OPT_REMOVE_PATH,$this->path_to); $v_list = $archive->create($this->path_to,PCLZIP_OPT_REMOVE_PATH,$this->path_to);
echo '打包成功!<br/><h3>初始化配置文件</h3><hr/>';flush(); echo '打包成功!<br/><h3>初始化配置文件</h3><hr/>';flush();
$this->_initUser();
echo '更新成功!<br/><h1>导出处理完成!^_^</h1>';flush(); echo '更新成功!<br/><h1>导出处理完成!^_^</h1>';flush();
} }
@ -156,6 +157,8 @@ class debug extends Controller{
); );
$path_list = array( $path_list = array(
$this->path_to.'/data/log', $this->path_to.'/data/log',
$this->path_to.'/data/User',
$this->path_to.'/data/public/',
$this->path_to.'/data/thumb', $this->path_to.'/data/thumb',
$this->path_to.'/static/js/_dev', $this->path_to.'/static/js/_dev',
$this->path_to.'/static/js/app/update', $this->path_to.'/static/js/app/update',
@ -222,7 +225,8 @@ class debug extends Controller{
'guest'=>array('guest','guest') 'guest'=>array('guest','guest')
); );
foreach ($user as $name => $v) { mk_dir($this->path_to.'/data/public/test/');//创建公共目录
foreach ($user as $name => $v) {//创建用户目录及初始化
$user_path = $this->path_to.'/data/User/'.$name.'/'; $user_path = $this->path_to.'/data/User/'.$name.'/';
mk_dir($user_path); mk_dir($user_path);
foreach ($root as $dir) { foreach ($root as $dir) {
@ -232,7 +236,6 @@ class debug extends Controller{
mk_dir($user_path.'home/'.$dir); mk_dir($user_path.'home/'.$dir);
} }
fileCache::save($user_path.'data/config.php',$this->config['setting_default']); fileCache::save($user_path.'data/config.php',$this->config['setting_default']);
} }
$this->_initUserData(); $this->_initUserData();
} }

View File

@ -245,7 +245,7 @@ class explorer extends Controller{
if(mkdir($new,0777)){ if(mkdir($new,0777)){
show_json($this->L['create_success']); show_json($this->L['create_success']);
}else{ }else{
show_json($this->L['create_error']); show_json($this->L['create_error'],false);
} }
} }
public function pathCopy(){ public function pathCopy(){
@ -448,7 +448,16 @@ class explorer extends Controller{
public function serverDownload() { public function serverDownload() {
$url = rawurldecode($this->in['url']); $url = rawurldecode($this->in['url']);
$save_path = _DIR($this->in['save_path']); $save_path = _DIR($this->in['save_path']);
$save_path = $save_path.'download_'.rand(100,999).'.tmp';
$name = get_path_this($url);
if (stripos($name,'?')) $name = substr($name,0,stripos($name,'?'));
if (!$name) $name = 'index.html';
$ext = get_path_ext($name);
$ext_arr = explode('|',$GLOBALS['auth']['ext_not_allow']);
if (in_array($ext,$ext_arr)){
$name .= '.tmp';
}
$save_path = $save_path.$name;
$result = file_download_this($url,$save_path); $result = file_download_this($url,$save_path);
if ($result == 1){ if ($result == 1){
show_json($this->L['download_success'],true,$save_path); show_json($this->L['download_success'],true,$save_path);

View File

@ -45,6 +45,10 @@ class user extends Controller
$this->authApi();//api方式验证 $this->authApi();//api方式验证
if($_SESSION['isLogin'] === true){ if($_SESSION['isLogin'] === true){
define('USER',USER_PATH.$this->user['name'].'/'); define('USER',USER_PATH.$this->user['name'].'/');
if (!file_exists(USER)) {
$this->logout();
return;
}
if ($this->user['role'] == 'root') { if ($this->user['role'] == 'root') {
define('MYHOME',USER.'home/'); define('MYHOME',USER.'home/');
define('HOME',''); define('HOME','');
@ -66,7 +70,7 @@ class user extends Controller
$member = new fileCache($this->config['system_file']['member']); $member = new fileCache($this->config['system_file']['member']);
$user = $member->get($_COOKIE['kod_name']); $user = $member->get($_COOKIE['kod_name']);
if(md5($user['password'].get_client_ip()) == $_COOKIE['kod_token']){ if(md5($user['password'].get_client_ip()) == $_COOKIE['kod_token']){
session_start();//re start
$_SESSION['isLogin'] = true; $_SESSION['isLogin'] = true;
$_SESSION['user']= $user; $_SESSION['user']= $user;
setcookie('kod_name', $_COOKIE['kod_name'], time()+3600*24*365); setcookie('kod_name', $_COOKIE['kod_name'], time()+3600*24*365);
@ -180,12 +184,11 @@ class user extends Controller
} }
//扩展名限制:新建文件&上传文件&重命名文件&保存文件&zip解压文件 //扩展名限制:新建文件&上传文件&重命名文件&保存文件&zip解压文件
$check_arr = array( $check_arr = array(
'mkfile' => $this->in['path'], 'mkfile' => trim($this->in['path']),
'pathRname' => $this->in['rname_to'], 'pathRname' => trim($this->in['rname_to']),
'fileUpload'=> $_FILES['file']['name'], 'fileUpload'=> trim($_FILES['file']['name']),
'fileSave' => $this->in['path'], 'fileSave' => trim($this->in['path'])
); );
if (array_key_exists(ACT,$check_arr)){ if (array_key_exists(ACT,$check_arr)){
$ext = get_path_ext($check_arr[ACT]); $ext = get_path_ext($check_arr[ACT]);
$ext_arr = explode('|',$auth['ext_not_allow']); $ext_arr = explode('|',$auth['ext_not_allow']);

View File

@ -1 +1 @@
<?php exit;?>{"list_type":"icon","list_sort_field":"name","list_sort_order":"up","theme":"simple\/","codetheme":"crimson_editor","wall":"1","musictheme":"mp3player","movietheme":"webplayer"} <?php exit;?>{"list_type":"icon","list_sort_field":"name","list_sort_order":"up","theme":"metro\/","codetheme":"github","wall":"8","musictheme":"qqmusic","movietheme":"webplayer"}

View File

@ -1 +1 @@
<?php exit;?>{"0.000":{"name":"0.000","path":"D:\/wwwroot\/0.000\/"},"config":{"name":"config","path":"D:\/wwwroot\/tools\/eXtplorer\/config"},"kod":{"name":"kod","path":"D:\/wwwroot\/www\/kod"}} <?php exit;?>{"0.000":{"name":"0.000","path":"D:\/wwwroot\/0.000\/"},"config":{"name":"config","path":"D:\/wwwroot\/tools\/eXtplorer\/config"},"kod":{"name":"kod","path":"D:\/wwwroot\/www\/kod"},"\u5e7b\u4e61":{"name":"\u5e7b\u4e61","path":"D:\/wwwroot\/www\/kod\/dev\/data\/public\/images\/\u6211\u7684\u6536\u85cf\/\u5e7b\u4e61"}}

View File

@ -1 +1 @@
<?php exit;?>{"list_type":"icon","list_sort_field":"mtime","list_sort_order":"up","theme":"metro\/","codetheme":"github","wall":"1","musictheme":"kuwo","movietheme":"webplayer"} <?php exit;?>{"list_type":"icon","list_sort_field":"mtime","list_sort_order":"up","theme":"metro\/","codetheme":"github","wall":"1","musictheme":"mp3player","movietheme":"webplayer"}

View File

@ -14,11 +14,11 @@ define(function(require, exports) {
'bindary':['pdf','bin','zip','swf','gzip','rar','arj','tar','gz','cab','tbz','tbz2','lzh','uue','bz2' 'bindary':['pdf','bin','zip','swf','gzip','rar','arj','tar','gz','cab','tbz','tbz2','lzh','uue','bz2'
,'ace','exe','so','dll','chm','rtf','odp','odt','pages','class','psd','ttf'] ,'ace','exe','so','dll','chm','rtf','odp','odt','pages','class','psd','ttf']
}, },
contextmenu:function(){ contextmenu:function(event){
rightMenu.hidden(); rightMenu.hidden();
var e = event || window.event; var e = event || window.event;
if ($.nodeName(e.target,'TEXTAREA') || if (e && ($.nodeName(e.target,'TEXTAREA') ||
$.nodeName(e.target,'INPUT')){ $.nodeName(e.target,'INPUT'))){
return true; return true;
} }
//return false; //return false;
@ -70,6 +70,24 @@ define(function(require, exports) {
return G.web_host+G.web_root+path; return G.web_host+G.web_root+path;
} }
}, },
ajaxError:function(XMLHttpRequest, textStatus, errorThrown){
core.tips.close(LNG.system_error,false);
var error = '<div style="color:#f60;">'+XMLHttpRequest.responseText+'</div>';
var dialog = $.dialog.list['ajaxErrorDialog'];
if (dialog) {
dialog.content(error);
}else{
$.dialog({
id:'ajaxErrorDialog',
fixed:true,
resize:true,
title:'ajax error',
width:450,
height:200,
content:error
});
}
},
// setting 对话框 // setting 对话框
setting:function(setting){ setting:function(setting){
if (setting == undefined) setting = ''; if (setting == undefined) setting = '';
@ -279,6 +297,7 @@ define(function(require, exports) {
beforeSend:function(){ beforeSend:function(){
$message.hide().html(LNG.searching+'<img src="'+G.static_path+'images/loading.gif">').fadeIn(fade); $message.hide().html(LNG.searching+'<img src="'+G.static_path+'images/loading.gif">').fadeIn(fade);
}, },
error:core.ajaxError,
success:function(data){ success:function(data){
if (!data.code) { if (!data.code) {
$message.hide().html(data.data).fadeIn(fade); $message.hide().html(data.data).fadeIn(fade);
@ -292,9 +311,6 @@ define(function(require, exports) {
var render = template.compile(tpl.list); var render = template.compile(tpl.list);
data.data.LNG = LNG; data.data.LNG = LNG;
$(render(data.data)).insertAfter('.search_result .message').fadeIn(fade); $(render(data.data)).insertAfter('.search_result .message').fadeIn(fade);
},
error:function(data){
$message.hide().html(LNG.system_error).fadeIn(fade);
} }
}); });
} }
@ -370,14 +386,12 @@ define(function(require, exports) {
$.ajax({ $.ajax({
url:'?explorer/serverDownload&save_path='+path+'&url='+urlEncode2(urls[i]), url:'?explorer/serverDownload&save_path='+path+'&url='+urlEncode2(urls[i]),
dataType:'json', dataType:'json',
error:core.ajaxError,
success:function(data){ success:function(data){
if (data.code) { if (data.code) {
FrameCall.father('ui.f5',""); FrameCall.father('ui.f5',"");
} }
core.tips.tips(data); core.tips.tips(data);
},
error:function(data){
core.tips.tips(LNG.system_error,false);
} }
}); });
} }
@ -451,6 +465,9 @@ define(function(require, exports) {
$(this).delay(index*300).slideUp(600); $(this).delay(index*300).slideUp(600);
}); });
select_name_arr = []; select_name_arr = [];
if (Config.pageApp == 'explorer') {
ui.tree.checkIfChange(G.this_path);
}
}).on('error',function(a,b){ }).on('error',function(a,b){
//console.log(a,b); //console.log(a,b);
}); });
@ -458,7 +475,7 @@ define(function(require, exports) {
var timer; var timer;
inState = false; inState = false;
dragOver = function(e){ dragOver = function(e){
stopPP(e); //stopPP(e);
if (inState == false){ if (inState == false){
inState = true; inState = true;
MaskView.tips(LNG.upload_drag_tips); MaskView.tips(LNG.upload_drag_tips);
@ -476,12 +493,19 @@ define(function(require, exports) {
},100); },100);
} }
dragDrop = function(e){ dragDrop = function(e){
e = e.originalEvent || e;
var txt = e.dataTransfer.getData("text/plain");
if (txt && txt.substring(0,4) == 'http') {
ui.path.pathOperate.appAddURL(txt);
console.log(txt);
}else{
core.upload();//满足 拖拽到当前,则上传到当前。
}
stopPP(e); stopPP(e);
if (inState) { if (inState) {
inState = false; inState = false;
MaskView.close(); MaskView.close();
} }
core.upload();//满足 拖拽到当前,则上传到当前。
} }
} }
}; };

View File

@ -39,9 +39,7 @@ define(function(require, exports) {
beforeSend:function(){ beforeSend:function(){
core.tips.loading(); core.tips.loading();
}, },
error:function(){ error:core.ajaxError,
core.tips.close(LNG.system_error,false);
},
success: function(data) { success: function(data) {
core.tips.close(data); core.tips.close(data);
if (typeof(callback) == 'function')callback(data); if (typeof(callback) == 'function')callback(data);
@ -59,9 +57,7 @@ define(function(require, exports) {
beforeSend:function(){ beforeSend:function(){
core.tips.loading(); core.tips.loading();
}, },
error:function(){ error:core.ajaxError,
core.tips.close(LNG.system_error,false);
},
success: function(data) { success: function(data) {
core.tips.close(data); core.tips.close(data);
if (typeof (callback) == 'function')callback(data); if (typeof (callback) == 'function')callback(data);
@ -81,9 +77,7 @@ define(function(require, exports) {
beforeSend:function(){ beforeSend:function(){
core.tips.loading(); core.tips.loading();
}, },
error:function(){ error:core.ajaxError,
core.tips.close(LNG.system_error,false);
},
success: function(data) { success: function(data) {
core.tips.close(data); core.tips.close(data);
if (typeof(callback) == 'function')callback(data); if (typeof(callback) == 'function')callback(data);
@ -97,7 +91,11 @@ define(function(require, exports) {
//删除 文件|文件夹 & 包含批量删除 //删除 文件|文件夹 & 包含批量删除
var remove = function(param,callback){ var remove = function(param,callback){
if (param.length<1) return; if (param.length<1) return;
var name = param[0]['path'].substr(-40) + '...'; var name = param[0]['path'];
if (name.length > 20) {
name = name.substr(-20) + '...'
};
$.dialog({ $.dialog({
id:'dialog_path_remove', id:'dialog_path_remove',
fixed: true,//不跟随页面滚动 fixed: true,//不跟随页面滚动
@ -117,9 +115,7 @@ define(function(require, exports) {
beforeSend:function(){ beforeSend:function(){
core.tips.loading(); core.tips.loading();
}, },
error:function(){ error:core.ajaxError,
common.tips.close(LNG.system_error,false);
},
success: function(data) { success: function(data) {
core.tips.close(data); core.tips.close(data);
if (typeof(callback) == 'function')callback(data); if (typeof(callback) == 'function')callback(data);
@ -137,9 +133,7 @@ define(function(require, exports) {
type:'POST', type:'POST',
dataType:'json', dataType:'json',
data:_json(param), data:_json(param),
error:function(){ error:core.ajaxError,
core.tips.close(LNG.system_error,false);
},
success: function(data) { success: function(data) {
core.tips.tips(data); core.tips.tips(data);
} }
@ -153,9 +147,7 @@ define(function(require, exports) {
type:'POST', type:'POST',
dataType:'json', dataType:'json',
data:_json(param), data:_json(param),
error:function(){ error:core.ajaxError,
core.tips.close(LNG.system_error,false);
},
success:function(data){ success:function(data){
core.tips.tips(data); core.tips.tips(data);
} }
@ -171,9 +163,7 @@ define(function(require, exports) {
beforeSend: function(){ beforeSend: function(){
core.tips.loading(LNG.moving); core.tips.loading(LNG.moving);
}, },
error:function(){ error:core.ajaxError,
core.tips.close(LNG.system_error,false);
},
success:function(data){ success:function(data){
if (!data.code){ if (!data.code){
core.tips.close(data); core.tips.close(data);
@ -196,9 +186,7 @@ define(function(require, exports) {
beforeSend: function(){ beforeSend: function(){
core.tips.loading(LNG.getting); core.tips.loading(LNG.getting);
}, },
error:function(){//请求出错处理 error:core.ajaxError,
core.tips.close(LNG.system_error,false);
},
success:function(data){ success:function(data){
if (!data.code){ if (!data.code){
core.tips.close(data);return; core.tips.close(data);return;
@ -225,9 +213,7 @@ define(function(require, exports) {
beforeSend: function(){ beforeSend: function(){
core.tips.loading(LNG.getting); core.tips.loading(LNG.getting);
}, },
error:function(){ error:core.ajaxError,
core.tips.close(LNG.system_error,false);
},
success:function(data){ success:function(data){
if (!data.code){ if (!data.code){
core.tips.close(data);return; core.tips.close(data);return;
@ -258,9 +244,7 @@ define(function(require, exports) {
beforeSend: function(){ beforeSend: function(){
core.tips.loading(LNG.ziping); core.tips.loading(LNG.ziping);
}, },
error:function(){ error:core.ajaxError,
core.tips.close(LNG.system_error,false);
},
success:function(data){ success:function(data){
core.tips.close(data); core.tips.close(data);
data.code = 100; data.code = 100;
@ -277,9 +261,7 @@ define(function(require, exports) {
beforeSend: function(){ beforeSend: function(){
core.tips.loading(LNG.unziping); core.tips.loading(LNG.unziping);
}, },
error:function(){ error:core.ajaxError,
core.tips.close(LNG.system_error,false);
},
success:function(data){ success:function(data){
core.tips.close(data); core.tips.close(data);
data.code = 100; data.code = 100;
@ -298,9 +280,7 @@ define(function(require, exports) {
beforeSend: function(){ beforeSend: function(){
core.tips.loading(LNG.moving); core.tips.loading(LNG.moving);
}, },
error:function(){ error:core.ajaxError,
core.tips.close(LNG.system_error,false);
},
success:function(data){ success:function(data){
core.tips.close(data); core.tips.close(data);
if (!data.code) return; if (!data.code) return;
@ -313,9 +293,7 @@ define(function(require, exports) {
$.ajax({ $.ajax({
url:'index.php?explorer/clipboard', url:'index.php?explorer/clipboard',
dataType:'json', dataType:'json',
error:function(){ error:core.ajaxError,
core.tips.tips(LNG.system_error,false);
},
success:function(data){ success:function(data){
if (!data.code) return; if (!data.code) return;
$.dialog({ $.dialog({
@ -415,9 +393,7 @@ define(function(require, exports) {
beforeSend:function(){ beforeSend:function(){
core.tips.loading(); core.tips.loading();
}, },
error:function(){ error:core.ajaxError,
core.tips.close(LNG.system_error,false);
},
success: function(data) { success: function(data) {
core.tips.close(data); core.tips.close(data);
if (!data.code) return; if (!data.code) return;
@ -476,10 +452,51 @@ define(function(require, exports) {
var appList = function(){ var appList = function(){
core.appStore(); core.appStore();
}; };
//ui.path.pathOperate.appAddURL('http://www.baidu.com');
var appAddURL = function(url){
if (url && url.length<4 && url.substring(0,4)!='http') return;
$.ajax({
url: './index.php?app/get_url_title&url='+url,
dataType:'json',
beforeSend:function(){
core.tips.loading();
},
success: function(result) {
var name = result.data;
core.tips.close(result);
var data = {
content:url,
desc: "",
group: "others",
type: "url",
icon: "internet.png",
name: name,
resize: 1,
simple: 0,
height: "70%",
width: "80%"
};
var filename = urlEncode2(G.this_path+name);
url = './index.php?app/user_app&action=add&path='+filename;
$.ajax({
url: url,
type:'POST',
dataType:'json',
data:'data='+urlEncode2(json_encode(data)),
success: function(data) {
core.tips.close(data);
if (!data.code) return;
ui.f5();
}
});
}
});
};
return{ return{
appEdit:appEdit, appEdit:appEdit,
appList:appList, appList:appList,
appAddURL:appAddURL,
newFile:newFile, newFile:newFile,
newFolder:newFolder, newFolder:newFolder,

View File

@ -2,6 +2,7 @@ define(function(require, exports) {
var pathOperate = require('./pathOperate'); var pathOperate = require('./pathOperate');
var pathOpen = require('./pathOpen'); var pathOpen = require('./pathOpen');
var successCallback; var successCallback;
var isUpdateRefresh = false;//上传连续更新树目录队列方式。没有处理完不做反应处理完后sleep 2s;
ui.pathOpen = pathOpen; ui.pathOpen = pathOpen;
// 目录树操作 // 目录树操作
@ -145,9 +146,9 @@ define(function(require, exports) {
showLine: false, showLine: false,
selectedMulti: false, selectedMulti: false,
dblClickExpand: false, dblClickExpand: false,
dblClickExpand: function(treeId, treeNode) { // dblClickExpand: function(treeId, treeNode) {
return treeNode.level >= 0; // return treeNode.level >= 0;
},// 双击 展开&折叠 // },// 双击 展开&折叠
addDiyDom: function(treeId, treeNode) { addDiyDom: function(treeId, treeNode) {
var spaceWidth = Global.treeSpaceWide; var spaceWidth = Global.treeSpaceWide;
var switchObj = $("#" + treeNode.tId + "_switch"), var switchObj = $("#" + treeNode.tId + "_switch"),
@ -185,8 +186,8 @@ define(function(require, exports) {
var title = LNG.name+':'+treeNode.name+"\n"+LNG.size+':'+treeNode.size_friendly+"\n" var title = LNG.name+':'+treeNode.name+"\n"+LNG.size+':'+treeNode.size_friendly+"\n"
+LNG.modify_time+':'+treeNode.mtime; +LNG.modify_time+':'+treeNode.mtime;
if (treeNode.type == 'folder') { if (treeNode.type != 'file') {
title = LNG.name+':'+treeNode.name+"\n"+LNG.modify_time+':'+treeNode.mtime; title = treeNode.name;
} }
switchObj.parent().addClass(selector).attr('title',title); switchObj.parent().addClass(selector).attr('title',title);
} }
@ -195,8 +196,15 @@ define(function(require, exports) {
onClick: function(event,treeId,treeNode){ onClick: function(event,treeId,treeNode){
var zTree = $.fn.zTree.getZTreeObj("folderList"); var zTree = $.fn.zTree.getZTreeObj("folderList");
zTree.selectNode(treeNode); zTree.selectNode(treeNode);
zTree.expandNode(treeNode);
if(treeNode.type=='folder' && Config.pageApp=='editor') return; if(treeNode.type=='folder' && Config.pageApp=='editor') return;
if (treeNode.level == 0) {
if (Config.pageApp=='explorer' && treeNode.ext != '__fav__'){
ui.path.list(treeNode.this_path+'/');//更新文件列表
}
return false;
}
if (Config.pageApp=='editor'){ if (Config.pageApp=='editor'){
ui.tree.openEditor();//编辑器优先打开文件 ui.tree.openEditor();//编辑器优先打开文件
}else if(Config.pageApp=='explorer'){ }else if(Config.pageApp=='explorer'){
@ -207,18 +215,6 @@ define(function(require, exports) {
var zTree = $.fn.zTree.getZTreeObj("folderList"); var zTree = $.fn.zTree.getZTreeObj("folderList");
zTree.selectNode(treeNode); zTree.selectNode(treeNode);
}, },
beforeClick: function(treeId, treeNode) {
if (treeNode.level == 0 ) {
var zTree = $.fn.zTree.getZTreeObj("folderList");
zTree.selectNode(treeNode);
zTree.expandNode(treeNode);
if (treeNode.ext == '__root__' && Config.pageApp=='explorer') {
ui.path.list(treeNode.this_path+'/');//更新文件列表
}
return false;
}
return true;
},
beforeAsync:function(treeId, treeNode){ beforeAsync:function(treeId, treeNode){
treeNode.ajax_name= urlEncode(treeNode.name); treeNode.ajax_name= urlEncode(treeNode.name);
treeNode.ajax_path= urlEncode(treeNode.path); treeNode.ajax_path= urlEncode(treeNode.path);
@ -249,6 +245,7 @@ define(function(require, exports) {
successCallback = function(){ successCallback = function(){
var sel = zTree.getNodesByParam('name',treeNode.name,parent)[0]; var sel = zTree.getNodesByParam('name',treeNode.name,parent)[0];
zTree.selectNode(sel); zTree.selectNode(sel);
f5_refresh();
} }
}); });
}else{//新建文件 }else{//新建文件
@ -258,14 +255,21 @@ define(function(require, exports) {
successCallback = function(){ successCallback = function(){
var sel = zTree.getNodesByParam('name',treeNode.name,parent)[0]; var sel = zTree.getNodesByParam('name',treeNode.name,parent)[0];
zTree.selectNode(sel); zTree.selectNode(sel);
f5_refresh();
} }
}); });
} }
}else{//重命名 }else{//重命名
var from = treeNode.path + treeNode.beforeName; var from = treeNode.path + treeNode.beforeName;
var to = treeNode.path + treeNode.name; var to = treeNode.path + treeNode.name;
pathOperate.rname(from,to,treeNode.name,function(){ pathOperate.rname(from,to,function(data){
if (!data.code) return;
refresh(parent); refresh(parent);
successCallback = function(){
var sel = zTree.getNodesByParam('name',treeNode.name,parent)[0];
zTree.selectNode(sel);
f5_refresh();
}
}); });
} }
} }
@ -294,9 +298,12 @@ define(function(require, exports) {
//配置请求数据 通用 //配置请求数据 通用
var _param = function(makeArray){ var _param = function(makeArray){
var zTree = $.fn.zTree.getZTreeObj("folderList"),path, var zTree = $.fn.zTree.getZTreeObj("folderList");
treeNode = zTree.getSelectedNodes()[0], if (!zTree) return;
path = '',type='';
var treeNode = zTree.getSelectedNodes()[0],
path = '',
type ='';
if (!treeNode) return {path:'',type:''}; if (!treeNode) return {path:'',type:''};
if (treeNode.father){ if (treeNode.father){
@ -318,13 +325,23 @@ define(function(require, exports) {
}else{ }else{
return {path:path,type:type,node:treeNode}; return {path:path,type:type,node:treeNode};
} }
} };
//通用刷新 不传参数则刷新选中节点 //通用刷新 不传参数则刷新选中节点
var refresh = function(treeNode){ var refresh = function(treeNode){
var zTree = $.fn.zTree.getZTreeObj("folderList"); var zTree = $.fn.zTree.getZTreeObj("folderList");
if (treeNode == undefined) treeNode=zTree.getSelectedNodes()[0]; if (treeNode == undefined) treeNode=zTree.getSelectedNodes()[0];
zTree.reAsyncChildNodes(treeNode, "refresh"); if (!treeNode.isParent){
treeNode = treeNode.getParentNode();
} }
zTree.reAsyncChildNodes(treeNode, "refresh");
};
var f5_refresh = function(){//树目录变化后,对应刷新文件目录
if (Config.pageApp == 'explorer') {
ui.f5();
}
};
//对外接口 //对外接口
return { return {
pathOpen:pathOpen, pathOpen:pathOpen,
@ -358,6 +375,7 @@ define(function(require, exports) {
var param = _param(); var param = _param();
if (!param.node.isParent) param.node = param.node.getParentNode(); if (!param.node.isParent) param.node = param.node.getParentNode();
pathOperate.past(param.path,function(){ pathOperate.past(param.path,function(){
f5_refresh();
refresh(param.node); refresh(param.node);
}); });
}, },
@ -369,16 +387,40 @@ define(function(require, exports) {
title:LNG.tips,content: LNG.remove_not,ok:true}); title:LNG.tips,content: LNG.remove_not,ok:true});
}else{ }else{
pathOperate.remove(param,function(){ pathOperate.remove(param,function(){
f5_refresh();
refresh(parent); refresh(parent);
}); });
} }
}, },
checkIfChange:function(explorer_path){
if (isUpdateRefresh) return;
isUpdateRefresh = true;
var zTree = $.fn.zTree.getZTreeObj("folderList");
if (!zTree) return;
zTree.getNodesByFilter(function(treeNode){
var path;
if (treeNode.this_path){
path = treeNode.this_path;
}else if (treeNode.path != ''){
path = treeNode.path+treeNode.name;
}
if (path == explorer_path ||
path+'/'==explorer_path) {
refresh(treeNode);
return true;
}
return false;
},true);
setTimeout(function(){
isUpdateRefresh = false;
},1000);
},
explorer:function(){//管理文档 explorer:function(){//管理文档
var path = _param().path; var path = _param().path;
if (!path) path = G.this_path; if (!path) path = G.this_path;
core.explorer(path); core.explorer(path);
}, },
fileBox:function(type){//管理文档 fileBox:function(type){//管理文档
if (type = 'save_file') {};//没有则自动创建 if (type = 'save_file') {};//没有则自动创建
if (type = 'save_folder') {}; if (type = 'save_folder') {};

View File

@ -213,6 +213,7 @@
url:'index.php?explorer/pathList&path='+G.this_path, url:'index.php?explorer/pathList&path='+G.this_path,
dataType:'json', dataType:'json',
//async:false,//同步阻塞.阻塞其他线程,等待执行完成。//解决重命名后设置选中 //async:false,//同步阻塞.阻塞其他线程,等待执行完成。//解决重命名后设置选中
error:core.ajaxError,
success:function(data){ success:function(data){
if (!data.code) { if (!data.code) {
core.tips.tips(data); core.tips.tips(data);
@ -224,9 +225,6 @@
if (typeof(callback) == 'function'){ if (typeof(callback) == 'function'){
callback(data); callback(data);
} }
},
error:function(data){
core.tips.tips(LNG.system_error,false);
} }
}); });
} }

View File

@ -259,9 +259,7 @@ define(function(require, exports) {
beforeSend: function(){ beforeSend: function(){
Tips.loading(LNG.sending); Tips.loading(LNG.sending);
}, },
error:function(data) { error:core.ajaxError,
Tips.close(LNG.system_error,false);
},
success:function(data){ success:function(data){
Tips.close(data); Tips.close(data);
if (!data.code) return; if (!data.code) return;

View File

@ -264,6 +264,7 @@ define(function(require, exports) {
core.tips.tips(LNG.path_exists,'warning'); core.tips.tips(LNG.path_exists,'warning');
}else{ }else{
pathOperate.newFile(G.this_path+filename,function(){ pathOperate.newFile(G.this_path+filename,function(){
ui.tree.checkIfChange(G.this_path);
ui.f5_callback(function() { ui.f5_callback(function() {
_setSelectByFilename(filename); _setSelectByFilename(filename);
}); });
@ -280,6 +281,7 @@ define(function(require, exports) {
_newFile(newname_ext); _newFile(newname_ext);
}else{ }else{
pathOperate.newFile(G.this_path+filename,function(){ pathOperate.newFile(G.this_path+filename,function(){
ui.tree.checkIfChange(G.this_path);
ui.f5_callback(function() { ui.f5_callback(function() {
_setSelectByFilename(filename); _setSelectByFilename(filename);
}); });
@ -318,6 +320,7 @@ define(function(require, exports) {
core.tips.tips(LNG.path_exists,'warning'); core.tips.tips(LNG.path_exists,'warning');
}else{ }else{
pathOperate.newFolder(G.this_path+filename,function(){ pathOperate.newFolder(G.this_path+filename,function(){
ui.tree.checkIfChange(G.this_path);
ui.f5_callback(function() { ui.f5_callback(function() {
_setSelectByFilename(filename); _setSelectByFilename(filename);
}); });
@ -333,6 +336,7 @@ define(function(require, exports) {
_newFolder(); _newFolder();
}else{ }else{
pathOperate.newFolder(G.this_path+filename,function(){ pathOperate.newFolder(G.this_path+filename,function(){
ui.tree.checkIfChange(G.this_path);
ui.f5_callback(function() { ui.f5_callback(function() {
_setSelectByFilename(filename); _setSelectByFilename(filename);
}); });
@ -381,6 +385,7 @@ define(function(require, exports) {
path =urlEncode(G.this_path+selectid); path =urlEncode(G.this_path+selectid);
rname_to=urlEncode(G.this_path+rname_to); rname_to=urlEncode(G.this_path+rname_to);
pathOperate.rname(path,rname_to,function(){ pathOperate.rname(path,rname_to,function(){
ui.tree.checkIfChange(G.this_path);
ui.f5_callback(function() { ui.f5_callback(function() {
_setSelectByFilename(select_name); _setSelectByFilename(select_name);
}); });
@ -403,6 +408,7 @@ define(function(require, exports) {
path =urlEncode(G.this_path+selectid); path =urlEncode(G.this_path+selectid);
rname_to=urlEncode(G.this_path+rname_to); rname_to=urlEncode(G.this_path+rname_to);
pathOperate.rname(path,rname_to,function(){ pathOperate.rname(path,rname_to,function(){
ui.tree.checkIfChange(G.this_path);
ui.f5_callback(function() { ui.f5_callback(function() {
_setSelectByFilename(select_name); _setSelectByFilename(select_name);
}); });
@ -413,6 +419,10 @@ define(function(require, exports) {
} }
}); });
}; };
var refreshCallback=function(){//当前目录文件变化,刷新目录
ui.f5();
ui.tree.checkIfChange(G.this_path);
};
return { return {
//app //app
appEdit:function(create){ appEdit:function(create){
@ -469,16 +479,17 @@ define(function(require, exports) {
pathOperate:pathOperate, pathOperate:pathOperate,
search :function(){core.search('',_param().path);}, search :function(){core.search('',_param().path);},
fav :function(){pathOperate.fav(_param().path);}, fav :function(){pathOperate.fav(_param().path);},
remove :function(){pathOperate.remove(_param(true),ui.f5);fileLight.clear();}, remove :function(){pathOperate.remove(_param(true),refreshCallback);fileLight.clear();},
copy :function(){pathOperate.copy(_param(true));}, copy :function(){pathOperate.copy(_param(true));},
cute :function(){pathOperate.cute(_param(true),ui.f5);}, cute :function(){pathOperate.cute(_param(true),ui.f5);},
zip :function(){pathOperate.zip(_param(true),ui.f5);}, zip :function(){pathOperate.zip(_param(true),refreshCallback);},
unZip :function(){pathOperate.unZip(_param().path,ui.f5);}, unZip :function(){pathOperate.unZip(_param().path,ui.f5);},
cuteDrag:function(dragTo){pathOperate.cuteDrag(_param(true),dragTo,ui.f5);}, cuteDrag:function(dragTo){pathOperate.cuteDrag(_param(true),dragTo,refreshCallback);},
info:function(){pathOperate.info(_param(true));}, info:function(){pathOperate.info(_param(true));},
past:function(){ past:function(){
fileLight.clear(); fileLight.clear();
pathOperate.past(G.this_path,function(list){ pathOperate.past(G.this_path,function(list){
ui.tree.checkIfChange(G.this_path);
ui.f5_callback(function() { ui.f5_callback(function() {
_setSelectByFilename(list.data); _setSelectByFilename(list.data);
}); });

View File

@ -14,7 +14,7 @@ define(function(require, exports) {
//图片缩略图懒加载 桌面不做处理 //图片缩略图懒加载 桌面不做处理
$(".fileContiner .picture img").lazyload({ $(".fileContiner .picture img").lazyload({
effect : "fadeIn", //effect : "fadeIn",
//placeholder:G.static_path + 'images/loading_tree.gif', //placeholder:G.static_path + 'images/loading_tree.gif',
container: $(".bodymain") container: $(".bodymain")
}); });
@ -427,10 +427,10 @@ define(function(require, exports) {
callback(data); callback(data);
} }
}, },
error:function(data){ error:function(XMLHttpRequest, textStatus, errorThrown){
core.tips.tips(LNG.system_error,false);
$('.tools-left .msg').fadeOut(100); $('.tools-left .msg').fadeOut(100);
$(Config.FileBoxSelector).html(''); $(Config.FileBoxSelector).html('');
core.ajaxError(XMLHttpRequest, textStatus, errorThrown);
} }
}); });
} }
@ -643,15 +643,16 @@ define(function(require, exports) {
//自适应宽度 //自适应宽度
set_width:function(){ set_width:function(){
$(".yarnball").stop(true,true); $(".yarnball").stop(true,true);
var box_width = $('#yarnball').innerWidth()-3; var box_width = $('#yarnball').innerWidth();
var need_width = 0; var need_width = 0;
$('#yarnball li a').each(function(index){ $('#yarnball li a').each(function(index){
need_width += $(this).outerWidth()+ parseInt($(this).css('margin-left')); need_width += $(this).outerWidth()+ parseInt($(this).css('margin-left'))+5;
}); });
var m_width = (box_width-30) - need_width;
if(m_width<0){ var m_width = box_width - need_width;
if(m_width<=0){
$(".yarnball") $(".yarnball")
.css('width',box_width - m_width +'px') .css('width',need_width +'px')
.css('left',m_width+'px'); .css('left',m_width+'px');
}else{ }else{
$(".yarnball").css({'left':'3px','width':box_width +'px'}); $(".yarnball").css({'left':'3px','width':box_width +'px'});

View File

@ -113,6 +113,11 @@ define(function(require, exports) {
tips(LNG.not_null,'error'); tips(LNG.not_null,'error');
return false; return false;
} }
if (escape(role).indexOf("%u")>=0){
tips('名称不能为中文!','warning');
return false;
}
$('.group_editor .tag.this').each(function(){ $('.group_editor .tag.this').each(function(){
var data = $(this).attr('data-role').split(';'); var data = $(this).attr('data-role').split(';');
for (var i = 0; i < data.length; i++) { for (var i = 0; i < data.length; i++) {

View File

@ -103,6 +103,11 @@ define(function(require, exports) {
tips(LNG.not_null,'warning'); tips(LNG.not_null,'warning');
return false; return false;
} }
if (escape(name).indexOf("%u")>=0){
tips('名称不能为中文!','warning');
return false;
}
$.ajax({ $.ajax({
url:api+'add&name='+name+'&password='+password+'&role='+role, url:api+'add&name='+name+'&password='+password+'&role='+role,
dataType:'json', dataType:'json',
@ -149,6 +154,10 @@ define(function(require, exports) {
tips(LNG.not_null,'error'); tips(LNG.not_null,'error');
return false; return false;
} }
if (escape(name_to).indexOf("%u")>=0){
tips('名称不能为中文!','warning');
return false;
}
var password = ''; var password = '';
if (password_to !='') password = '&password_to'+password_to; if (password_to !='') password = '&password_to'+password_to;

View File

@ -83,6 +83,11 @@ var path_info = "<div class='pathinfo'>\
<div class='content'>{{mtime}}</div>\ <div class='content'>{{mtime}}</div>\
<div style='clear:both'></div>\ <div style='clear:both'></div>\
</div>\ </div>\
<div class='p'>\
<div class='title'>{{LNG.last_time}}</div>\
<div class='content'>{{atime}}</div>\
<div style='clear:both'></div>\
</div>\
<div class='line'></div>\ <div class='line'></div>\
<div class='p'>\ <div class='p'>\
<div class='title'>{{LNG.permission}}:</div>\ <div class='title'>{{LNG.permission}}:</div>\

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -160,6 +160,12 @@ artDialog.fn = artDialog.prototype = {
config.init && config.init.call(that, window); config.init && config.init.call(that, window);
_titleBarHeight = DOM.title.css('height'); _titleBarHeight = DOM.title.css('height');
_titleBarHeight = _titleBarHeight.replace('px',''); _titleBarHeight = _titleBarHeight.replace('px','');
DOM.wrap
.css({opacity:0.6,top:'-='+DOM.wrap.height()*0.02})
.animate(
{opacity:1,top:'+='+DOM.wrap.height()*0.02},
{easing: 'swing',duration:200});
return that; return that;
}, },
@ -532,7 +538,6 @@ artDialog.fn = artDialog.prototype = {
/** 关闭对话框 */ /** 关闭对话框 */
close: function () { close: function () {
if (this.closed) return this; if (this.closed) return this;
var that = this, var that = this,
DOM = that.DOM, DOM = that.DOM,
wrap = DOM.wrap, wrap = DOM.wrap,
@ -544,9 +549,10 @@ artDialog.fn = artDialog.prototype = {
if (typeof fn === 'function' && fn.call(that, window) === false) { if (typeof fn === 'function' && fn.call(that, window) === false) {
return that; return that;
}; };
that.unlock(); that.unlock();
wrap.animate({opacity:0,top:'-='+wrap.height() * 0.03},
{easing:'swing',duration:250,complete:function(){
// 置空内容 // 置空内容
that._elemBack && that._elemBack(); that._elemBack && that._elemBack();
wrap[0].className = wrap[0].style.cssText = ''; wrap[0].className = wrap[0].style.cssText = '';
@ -570,11 +576,11 @@ artDialog.fn = artDialog.prototype = {
for (var i in that) { for (var i in that) {
if (that.hasOwnProperty(i) && i !== 'DOM') delete that[i]; if (that.hasOwnProperty(i) && i !== 'DOM') delete that[i];
}; };
// 移除HTMLElement或重用 // 移除HTMLElement或重用
_box ? wrap.remove() : _box = that; _box ? wrap.remove() : _box = that;
this.resetIndex(); that.resetIndex();
return that; return that;
}});
}, },
/** /**

View File

@ -161,8 +161,8 @@ var tips = function(msg,code){
Tips.tips(msg,code); Tips.tips(msg,code);
} }
var Tips = (function(){ var Tips = (function(){
var in_time = 600; var in_time = 500;
var delay = 1200; var delay = 500;
var opacity = 0.7; var opacity = 0.7;
var _init = function(msg,code){ var _init = function(msg,code){
var tipsIDname = "messageTips"; var tipsIDname = "messageTips";

View File

@ -107,6 +107,8 @@ http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
static_path : "<?php echo STATIC_PATH;?>", static_path : "<?php echo STATIC_PATH;?>",
public_path : "<?php echo PUBLIC_PATH;?>", public_path : "<?php echo PUBLIC_PATH;?>",
basic_path : "<?php echo BASIC_PATH;?>", basic_path : "<?php echo BASIC_PATH;?>",
version : "<?php echo KOD_VERSION;?>",
app_host : "<?php echo APPHOST;?>",
myhome : "<?php echo MYHOME;?>",//当前绝对路径 myhome : "<?php echo MYHOME;?>",//当前绝对路径
frist_file : "<?php echo $_GET['filename'];?>", frist_file : "<?php echo $_GET['filename'];?>",

View File

@ -1,23 +0,0 @@
==== todolist ====
官网改版:历史版本;更新内容;
0.官网改版(英文版)github提交说明文档……
1.回收站
2.文件共享
3.通用文件保存控件(文件、文件夹)
4.编辑器新建文件保存;另存为文件
5.创建副本,ctrl+拖拽;创建副本
6.同名处理(拖拽、上传、上传文件夹、粘贴、解压、压缩)——覆盖、都保留、跳过(全部——当前)
7.远程下载——列表——进度。
8.选中后直接下载(文件文件夹混合,无需多一步压缩的操作)
9.加入task机制 长时间运行的建立task——可以中途中断task用户关联
搜索、压缩、解压、远程下载、上传(任务,可以指定中断)
time()/5=0 每5s检测文件是否存在不存在——终止任务
权限前端验证(上传等 上传格式前端限制)
目录权限监 pathList时输出时代入目录权限(is_writeable);前端检测 新建、上传、删除、压缩、剪切
环境检测 目录权限(data目录必须可写)、GD库检测、set_time_out()...
设置默认根目录(个人设置)pathList=tree_init
共享目录测试 共享目录(地址栏显示问题)
树目录 根目录 点击没反应
集群