v3.0
|
|
@ -0,0 +1,500 @@
|
|||
###ver3.0 `2014/3/23`
|
||||
-----
|
||||
####update:
|
||||
- 文档分享[文件、文件夹分享;支持添加密码;文件分享支持多种格式在线预览]
|
||||
- 回收站;(避免误删除)
|
||||
- 系统设置(自定义程序的一些配置)
|
||||
- 头部菜单管理
|
||||
- 文件夹下载,多选批量下载
|
||||
- 数据全面安全优化
|
||||
- 上传优化:
|
||||
- 分片上传,不再受php.ini环境限制;
|
||||
- 加入上传速度
|
||||
- 上传目录:随着当前目录变化而变化。
|
||||
- 上传完成可点击,进入文件所在目录
|
||||
- 界面简化(不显示切换到当前目录;保存路径不要,列表不自动删除;不需要最大化,以及调整窗口大小)
|
||||
- 上传;总status ——放到标题栏
|
||||
- 大文件分片上传尝试(失败情况处理)
|
||||
- 上传文件夹:不刷新f5 - 最后刷新
|
||||
- 显示文件名,大小;
|
||||
- 允许重复文件上传
|
||||
- 上传前可以删除
|
||||
- 进图展示优化:显示文件大小、速度、完成进度
|
||||
- 编辑器:
|
||||
- 编辑器 函数列表;c9 IDE;展示并定位;实时更新:php function、js:function
|
||||
- 函数列表开启与关闭配置
|
||||
- php代码自动补全 缺少关键字部分
|
||||
- 下拉列表;点击其他地方则消失
|
||||
- 非txt则open;不能open则tips bindary:fla ...;右键加入:强制编辑
|
||||
- 字体优化
|
||||
- 修复github主题光标位置错位问题(选中、编辑都会出现)
|
||||
- 离线下载优化:加入取消机制;避免持续执行;显示文件大小、速度、完成进度
|
||||
- 图片缓存,按照文件MD5来缓存;与路径无关
|
||||
- 文件列表,hover的title更多详细信息展示
|
||||
- 对话框,标题栏右键加入:刷新、新窗口打开
|
||||
- 对话框双击最大化、取消最大化(只对可以缩放的对话框有效)
|
||||
- 对话框最大化、最小化对话框放大按钮图标改变
|
||||
- 权限前端验证(上传等 上传格式前端限制);前端检测 - 新建、上传、删除
|
||||
- 设置中心 - -用户管理 非管理员显示优化
|
||||
- 公共js部分采用动态调用方式;后续优化可由js完成前端MVC
|
||||
- 文件、文件夹创建快捷方式
|
||||
- 文件夹创建工程项目
|
||||
- 未知文件打开提示、不自动下载
|
||||
- 右键菜单:加入字母快捷打开
|
||||
- 右键自适应:隐藏 - -zip - 视频;多选时:含有视频音频文件时才显示——加入播放列表
|
||||
- 右键触发到菜单上(暂时修改jquery-contentMenu 屏蔽右键按下移动触发菜单功能)
|
||||
- 拖拽优化:框选、tasktap切换;选中其他文字问题;性能问题
|
||||
- 框选文件,超出屏幕则自定滚动选中;屏蔽文字可以被选中的问题
|
||||
- simple主题,界面UI优化
|
||||
- seajs text:tpl修改为html;
|
||||
- 统一走proxy;隐藏真实地址;web_root,web_host,
|
||||
- 统一proxy后,office打开权限问题解决:加密方式生成临时访问地址
|
||||
- 播放器更多格式支持:wmv、avi、mpg等
|
||||
|
||||
####fix bug and 优化:
|
||||
- win下 中文路径导致的问题处理
|
||||
- public中拖拽问题 复制粘贴问题
|
||||
- 桌面任务栏,右键菜单绑定丢失问题
|
||||
- 对话框,标题栏右键菜单不显示问题处理
|
||||
- 用户名支持中文
|
||||
- 密码含有特殊字符bug处理
|
||||
- 播放器解决第一次打开有时候无法播放的问题。
|
||||
- 桌面新建位置问题;列表在不同情况下新建问题。始终放在最后
|
||||
- firefox兼容性 mac兼容性;ie9 10兼容性;
|
||||
- appstore 创建、修复只允许管理员操作,显示优化
|
||||
- app创建,js代码类型时,单引号导致不可用问题。
|
||||
- 循环跳转 session判断 if(!isset($_SESSION)){session_start();}
|
||||
- win下 中文扩展名导致获取目录列表问题:扩展名获取优化
|
||||
- 编辑器保存 ajax 异步请求。loading
|
||||
- 上传目录错误问题;(上传到了其他目录 ie8 中文)
|
||||
- 优化mac下gd库支持
|
||||
- 窗口拖动到task之下,出不来问题。top大于一定值则锁定
|
||||
- 多个同域名;登陆退出互不干扰
|
||||
- office变更 https://view.officeapps.live.com/op/view.aspx?src=
|
||||
- appstore icon方式;默认减少;
|
||||
- 列表模式:重命名oexe没修改但自动加入了;(oexe不显示)
|
||||
- 非管理员,zip压缩导致文件名被截断问题修复;win-win 中文解压缩处理;mac-mac中文解压缩处理
|
||||
- 下载有BOM问题
|
||||
- wwwroot识别问题;
|
||||
|
||||
|
||||
###ver2.8 `2014/11/23`
|
||||
-----
|
||||
####update:
|
||||
- 上传控件优化
|
||||
- 兼容性优化;支持ie8以上
|
||||
- 更新font-awesome到最新版本
|
||||
####fix bug:
|
||||
- 安全优化
|
||||
- 上传图片取消大文件压缩选项
|
||||
- 优化部分操作下显示问题
|
||||
|
||||
|
||||
###ver2.73 `2014/9/17`
|
||||
####fix bug:
|
||||
- 安全优化补丁
|
||||
|
||||
|
||||
###ver2.72 `2014/9/16`
|
||||
####fix bug:(bug解决和程序优化)
|
||||
- 任意执行:远程下载apache 扩漏洞:判断扩展名中是否含有.php.
|
||||
- 不存在的用户
|
||||
- 桌面:开始按钮被tab盖住了
|
||||
- 主题切换,错位问题
|
||||
- 透明对话框拖动时 标题栏不显示问题
|
||||
|
||||
###ver2.71 `2014/8/31`
|
||||
-----
|
||||
####update:
|
||||
- 编辑器配置保存:文字大小、主题风格;主题修改
|
||||
- 精简初始桌面应用
|
||||
|
||||
####fix bug:(bug解决和程序优化)
|
||||
- 修改用户密码失败:
|
||||
- 打开设置设置壁纸,关掉,再打开个人中心,桌面乱掉
|
||||
- 桌面开始菜单 最大化问题
|
||||
- 语言选择下拉菜单错位
|
||||
- 修改主题重叠问题
|
||||
- appstore 添加应用tips不见
|
||||
|
||||
|
||||
###ver2.7 `2014/8/25`
|
||||
-----
|
||||
####update:
|
||||
- 安全及性能优化
|
||||
- 静态文件加入?版本标识,版本更新后不缓存
|
||||
- webuploader 升级到0.14 优化部分上传问题
|
||||
- 错误级别:error_reporting(E_ERROR | E_WARNING);
|
||||
- 地址栏(tab模式、编辑模式)两种模式宽度自适应
|
||||
- 自建office解析服务器配置
|
||||
- 最大化全屏
|
||||
|
||||
####fix bug:(bug解决和程序优化)
|
||||
- install 加入iconv、mbstring检测
|
||||
- 右键重命名 快捷键冒泡处理
|
||||
- 文件列表图片缩略图拖拽问题
|
||||
- 标题超出部分截取优化
|
||||
- 编辑器预览滚动条自适应
|
||||
|
||||
|
||||
|
||||
###ver2.61 `2014/7/12`
|
||||
-----
|
||||
####update:
|
||||
- 实时搜索,根据搜索框内容变化,实时选中匹配到的结果;
|
||||
- 弹出搜索框遍历子文件夹递归搜索
|
||||
- session key 加入kod_前缀 避免和其他系统key冲突
|
||||
- 编辑器选中优化 选择鼠标到窗口外事件处理
|
||||
|
||||
####fix bug:(bug解决和程序优化)
|
||||
- backspace后退截获浏览器事件,作为后退前一次访问的文件夹;
|
||||
- 搜索首字母不匹配问题
|
||||
- 弹出层中的弹出层关闭,父窗口失去焦点问题。
|
||||
- 代码中grunt部分代码拆分开,放到程序外面;提交到git、osc
|
||||
- 桌面:删除alert enter快捷键删除
|
||||
- install 检测 加入跳过,(只判断用到的函数) 加入多语言
|
||||
- zip压缩没有权限 提示红色,false 统一查找
|
||||
- 登录成功后 验证码输错清除
|
||||
- 非root用户拖拽到文件夹问题
|
||||
- 非root解压问题 不能解压
|
||||
- list oexe 图标问题
|
||||
- 用户目录不存在判断
|
||||
- fileCahe 互斥锁 reset 不用
|
||||
- ie 8~10样式问题调整
|
||||
|
||||
|
||||
###ver2.6 `2014/7/6`
|
||||
-----
|
||||
####update:
|
||||
- 完全性优化;加入严格的校验机制
|
||||
- 首次运行环境检测[data目录检测,必须的函数支持提示]
|
||||
- 上传已存在处理——创建副本(另外包括粘贴,解压)
|
||||
- 选中优化 ctrl选中拖拽
|
||||
- 键盘快捷键选中文件,多个字符支持
|
||||
- 文件文件夹权限修改(右键——属性,即可修改)
|
||||
- 对话框加入ico,对应任务栏
|
||||
- 右键等部分菜单效果优化
|
||||
- 远程下载加入进度条,下载速度等信息
|
||||
|
||||
####fix bug:(bug解决和程序优化)
|
||||
- 下载前判断当前目录可写
|
||||
- 文件扩展名处理,分为用户方式和扩展名权限方式
|
||||
- 上传结束提示:是否成功、失败原因
|
||||
- 上传扩展名限制 解决apache .php.*当做php执行bug
|
||||
- 文件名非法字符限定 <script>
|
||||
- 树目录展开箭头状态修复
|
||||
- 树目录新建文件,没有子节点刷新bug解决
|
||||
- 文件大小为0上传不了问题
|
||||
- windows下进入某些系统文件夹死循环bug解决
|
||||
- tips 居中显示
|
||||
- 任务栏标签选中问题:已经显示且为交点窗口 点击——隐藏;否则——显示,并且置为焦点窗口
|
||||
- 拖入url ——oexe 新窗口打开
|
||||
- 选中文件时,移动到屏幕可视区域(解决上下左右选中文件滚动条不一致问题)
|
||||
|
||||
|
||||
###ver2.51 `2014/6/22`
|
||||
-----
|
||||
####fix bug:(bug解决和程序优化)
|
||||
|
||||
- 登陆多次密码输入错误验证码bug解决
|
||||
- 修复漏洞:创建副本加入权限控制。和拖文件拽权限一致
|
||||
- 文件上传失败检测
|
||||
- 树目录同步优化
|
||||
|
||||
|
||||
###ver2.5 `2014/6/15`
|
||||
-----
|
||||
####update:
|
||||
- 增加创建副本功能 按住ctrl拖拽即可,可以到当前,也可以到文件夹。
|
||||
- 多选拖拽优化:剪切到、移动到某个文件夹
|
||||
- 创建副本功能
|
||||
- 树目录和文件列表一致性保持 更新相互通知
|
||||
|
||||
####fix bug:(bug解决和程序优化)
|
||||
- 桌面重命名bug
|
||||
- 统一对话框部分bug
|
||||
- php notice 提示解决
|
||||
- ajax返回非json 则展示服务错误的返回
|
||||
- 所有入口都加入index.php 解决部分服务器没有设置默认入口问题
|
||||
|
||||
###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:
|
||||
- 公共目录支持(多个用户可以共享目录,写权限跟随用户组权限设定)
|
||||
- 自动升级优化
|
||||
- 文件管理工具栏 增加菜单选项,方便移动设备操作
|
||||
- 文件编辑器,文件树目录 上下左右键盘切换 快捷键加入
|
||||
- 树目录去掉库,改为个人目录等多处文案修改
|
||||
- 默认打开用户目录
|
||||
|
||||
####fix bug:(bug解决和程序优化)
|
||||
- 桌面任务栏点不中bug
|
||||
- 部分文案问题
|
||||
- 众多细节优化
|
||||
|
||||
|
||||
###ver2.1 `2014/4/2`
|
||||
-----
|
||||
####update:
|
||||
- 文件夹拖拽上传,完美解决(保持原始目录结构)
|
||||
- 解压缩优化;解压中文问题。解压缩整体速度
|
||||
- 树目录增加快捷键支持(上下、左右展开树目录;复制、粘贴、剪切、删除、打开、搜索、新建文件(夹)、)
|
||||
- pdf预览支持
|
||||
- mac快捷键 ctrl 一一对应command
|
||||
- 音乐播放器和视频播放器相互独立
|
||||
- 图片懒加载、图片较多的情况下只加载首屏图片缩略图;
|
||||
- 编辑文件打开出错,自动关闭标签;文件打开20M限制(大于20M则不处理,浏览器会卡死)
|
||||
- 标签关闭提示:检测是否有未保存文件,文件修改实时修改是否修修改的按钮状态
|
||||
|
||||
####fix bug:(bug解决和程序优化)
|
||||
- 文本文件编辑 文件名含有url编码则出错bug
|
||||
- 右键菜单在最下面时,右键位置重叠导致点击菜单问题
|
||||
- 编辑器打开文件时光标问题,处理:移动到行尾;编辑器enter建不显示自动提示
|
||||
- iframe 打开url 优化。解决canvas问题
|
||||
- 文件编辑器,载入loading去掉
|
||||
- 删除错误时,或上传错误时也刷新目录。删除提示颜色错误
|
||||
- 对话框右键 点击右键菜单隐藏修复
|
||||
- 手机端 touch =双击
|
||||
- 文件列表 explorer 右键 不清除选才·
|
||||
- 树目录中文展开问题。
|
||||
- ie 重命名状态textarea不可选则问题
|
||||
- 修复mac 下 ctrl连选出现右键菜单。
|
||||
- ie 树目录右键兼容性
|
||||
-
|
||||
|
||||
|
||||
###ver2.0 `2014/3/2`
|
||||
-----
|
||||
|
||||
####fix bug:(bug解决和程序优化)
|
||||
- body右键屏蔽(保留input、textarea)
|
||||
- 重命名&新建时 右键(编辑内容系统菜单)
|
||||
- 对话框 不显示边框(位移处理,opacity:0)
|
||||
- esc 退出程序 屏蔽该功能。
|
||||
- 关闭播放器,还在播放bug
|
||||
- 增加资源管理器任务栏。任务栏加入右键功能。
|
||||
- 对话框增加右键功能
|
||||
- guest [三类用户 root/default/guest] guest登陆处加链接。20min
|
||||
- 打包程序[update user_add,admin/demo; 删除webuploader.js thumb less]
|
||||
- 编辑添加应用权限只能是root用户才可以。
|
||||
- 保存文件不可写提示!
|
||||
- 解压缩结果提示。(对话框)
|
||||
|
||||
####upload
|
||||
- dialog display
|
||||
- root登陆 目录修改为服务器路径
|
||||
- artdialog 已经打开的窗口 (设了id) 最小化时,再次打开则显示
|
||||
- 最小化窗口后,再次打开 dialog display (setting-display)
|
||||
- 上传进度加入大小
|
||||
- 上传窗口关闭,自动停止所有上传队列
|
||||
- 拖拽后,更新上传地址为当前地址。(之前上传队列也会这样。bug)
|
||||
- root用户非服务器路径下文件预览(图片、mp3、视频、html、swf、……php代理输出文件内容,http方式)
|
||||
- 对话框最小化或关闭,重置最大index为焦点窗口
|
||||
- 图片缩略图生成:小于5k则不生成(直接输出)
|
||||
- 加载文件列表改为异步方式,数据返回采用回调函数方式。增强体验
|
||||
- 选中优化,文件&文件夹重命名、文件&文件夹新建 后自动选中。(f5增加回调。);
|
||||
- 选中保持,选中后如果调整排序等等,保持选中状态。
|
||||
- 上传文件选中当前。
|
||||
- f5改为异步(加入mask loading) 优化文件夹打开体验
|
||||
- 键盘按键选中文件 增加字符搜索定位功能(单个字符,增加到多个字符选中。两次响应直接延迟250ms)
|
||||
- 幻灯片播放[优化成fancybox或者 重写动画部分、打开时关不掉问题]
|
||||
- 编辑器backspace、delete时不提示。
|
||||
- 编辑器,增加选中效果
|
||||
- 增加不自动提示功能,配置项作为全局配置。影响后续建立的文件。选中标记状态。
|
||||
- 更换桌面背景图片【load后替换】
|
||||
- 更换主题【css load 后载入】
|
||||
- 删除。不清除选中。提前准备数据
|
||||
- 构建打包,合并压缩。添加版本、版权
|
||||
- 自动升级(本地记录版本,服务器js调用 参数 url、###version;忽略此版本。cookie。统计用户)
|
||||
|
||||
|
||||
###ver2.0 debug `2014/3/2`
|
||||
-----
|
||||
####fix bug:(bug解决和程序优化)
|
||||
- 优化文件打开处理
|
||||
- 文件&文件夹:含有%、+号的处理(显示不出等问题,encoenURIComponent——rawurldecode)
|
||||
- 文件下载,支持大文件下载、断点续传。
|
||||
- 解决更改排序方式后 ——对应右键菜单不同步问题。
|
||||
- 优化右键更改列表状态,同步保存配置到服务端。
|
||||
- 文件浏览器打开(a点击新窗口跳转,a不支持click,用子元素冒泡来实现点击)
|
||||
- 优化配置文件存储方案。直接由前端操作后端key,value
|
||||
- 修复添加收藏夹问题(已打开设置窗口再添加失败问题)
|
||||
- 修复树目录中文文件名bug
|
||||
- 优化pic图片幻灯片播放
|
||||
- 优化新建文件&文件夹 清空选择状态
|
||||
- 对话框组件 ie8 优化;tips不显示任务栏;
|
||||
- 优化地址栏过长编辑状态问题
|
||||
- 优化新建、重命名文件(夹) 高度自适应问题
|
||||
- firefox ctrl+s 系统对话框屏蔽
|
||||
- 树目录:收藏夹优化(右键绑定);右键操作优化,拖拽优化(文件管理&编辑器)
|
||||
- 收藏夹优化(右键 >编辑删除)
|
||||
|
||||
####update:
|
||||
**新增功能**
|
||||
|
||||
- 多用户、权限控制:
|
||||
- 可以建立权限组,将功能分配给权限组
|
||||
- 添加用户,选择所属的权限组。
|
||||
- 权限按功能划分成颗粒,可以任意配置,例如普通使用者、游客等
|
||||
- 搜索:支持递归搜索,可选择是否搜索文件内容。
|
||||
- 增加桌面自定义壁纸。
|
||||
- 皮肤优化 ok 多色彩支持。
|
||||
- 应用商店,root用户可以管理应用。安装、修改、删除。普通用户可以安装应用。
|
||||
- 应用添加了图标。对应右键功能。
|
||||
- office文档在线预览。
|
||||
|
||||
**上传下载**
|
||||
|
||||
- 采用全新上传控件,跟安全,更好的体验。
|
||||
- 拖拽支持文件夹,多个文件。上传自动过滤不允许的文件类型
|
||||
- 拖拽上传 和上统一优化,修复webuploader的文件判断;火狐拖拽上传,ie9+拖拽上传。
|
||||
- 上传时自动过滤不合格的文件,上传失败错误返回。
|
||||
|
||||
**文件编辑**
|
||||
|
||||
- 编辑器支持多光标
|
||||
- 支持几乎所有编程语言的代码高亮
|
||||
- 支持代码自动补全(基于文档、或自定义的代码快照)
|
||||
- 快速预览功能
|
||||
- 优化文件保存完美解决。编码自动识别转换。(字符串转义问题。1&#'[{'"+~%25\\\\ ////)
|
||||
- 文件编辑,添加收藏夹
|
||||
- 优化音乐播放器,添加音乐后自动播放新添加的第一首;解决之前添加列表后暂停问题。
|
||||
- 优化任务栏,多标签;最小化flash问题(left+10000 visiable)
|
||||
- ctrl,shift 多选时拖拽优化(按住这两个键时,不能拖动;拖动加入延迟200ms)
|
||||
- 编辑器在没打开文件的情况下工具栏不可用问题。
|
||||
- 搜索、替换;vim模式
|
||||
- ……
|
||||
|
||||
**登陆退出**
|
||||
|
||||
- 登陆优化 ok【页面&验证码&记住密码】
|
||||
- 三次错误需要输入验证码,保证系统的安全性
|
||||
- 优化自动登录安全性,客户端保存cookie自动登录信息。【tooken加入本地ip】
|
||||
|
||||
**系统优化**
|
||||
|
||||
- 解决较慢操作,阻塞其他操作问题。(同一个用户session会加锁,入口处做释放)
|
||||
- 前后端代码基本全部重构,前端采用模块化方法sea.js|require.js 模块化。
|
||||
- 凡是有模板调用的(display——页面部分php解析。并将配置注入到页面js变量,便于js使用)
|
||||
- 加入模板机制;通用模块采用懒加载模式;使用artTemplate 对模板绑定数据。
|
||||
- kv结构存储
|
||||
- 路由权限控制
|
||||
- 后端统一json输出。
|
||||
|
||||
###ver1.21 `2013/11/6`
|
||||
-----
|
||||
####fix bug:
|
||||
- 修复文件下载bug
|
||||
- 修复编辑器自动补全问题,<aa bb /> ——> <aa bb></a>
|
||||
- 兼容部分服务器问题。
|
||||
|
||||
###ver1.2 `2013/10/16`
|
||||
-----
|
||||
####fix bug:
|
||||
- 设置,外部通用调用方式
|
||||
- 打包中文乱码问题。
|
||||
- simple,default主题,navbar 下拉菜单右边位置问题。
|
||||
- 文件管理:有滚动条时,上下超过可视区域框选问题修复,统一和win操作一致。
|
||||
- 文件大小写不敏感设置,扩展名获取bug
|
||||
- 目录读取权限判断,解决“系统错误”相关问题。
|
||||
|
||||
####update:
|
||||
- 地址栏宽度自适应优化,支持浏览器窗口调整
|
||||
- 增加远程下载功能;上传功能优化,
|
||||
- 整体样式风格优化,
|
||||
- 右键菜单优化(可持续粘贴,剪切后粘贴清空剪贴板)。
|
||||
- 新建文件、文件重命名高度自适应优化
|
||||
- 关闭调试状态错误信息
|
||||
- 图片播放幻灯片优化,支持浏览器窗口调整,解决事件绑定bug,添加图片倒影;添加关闭按钮,关闭动画等功能
|
||||
- 优化桌面,弹出层层级问题;任务栏为最上层
|
||||
- 优化多标签,没有标签时不显示标签容器,放至层级覆盖
|
||||
- 地址栏超出宽度,自动隐藏最左边内容
|
||||
- 右键菜单状态同步,排序方式初始化当前值,设置后标记当前值。
|
||||
- 优化编辑器:拖动内容&文件到编辑区,内容处理。
|
||||
- 拖拽上传,信息框自动隐出后关闭
|
||||
- setting,editor,player最小化时,再次调用则显示出弹出层
|
||||
- 优化影音播放器,皮肤及相关配置信息存储于js中,不用之前的服务器请求方式,修改皮肤后可以直接更新到界面上。
|
||||
|
||||
|
||||
###ver1.01 `2013/9/10`
|
||||
-----
|
||||
####fix bug:
|
||||
- 添加到收藏
|
||||
- simple,default主题,navbar 下拉菜单右边位置问题。
|
||||
|
||||
####update:
|
||||
- 添加到收藏夹,修改收藏夹,更新文件管理收藏夹部分。
|
||||
- 修改主题,同时修改编辑器主题。【编辑区,文件管理,桌面】
|
||||
- 优化setting部分代码,整合为一个整体。
|
||||
- 优化debug,增加less编译,导出功能优化,先编译后复制再操作
|
||||
|
||||
|
||||
###ver1.0 `2013.9.1`
|
||||
-----
|
||||
####update:
|
||||
- 代码模块化优化,静态文件分离,可以分开部署
|
||||
- 编辑器单独逻辑提取,完整融合到文件管理,树目录融合文件管理,懒加载语法高亮
|
||||
- 多标签实现,弹层对话框多标签支持,桌面任务栏实现;编辑器多标签支持
|
||||
- 弹层功能优化,实现最大最小化,最小化关联多标签任务栏管理
|
||||
|
||||
####fix bug:
|
||||
- linux 下浏览器打开文件和文件夹,中文问题
|
||||
- 重命名&新建&上传 刷新列表使用动画,当前选中失效问题,不使用动画加载方式。
|
||||
- html5拖拽上传优化
|
||||
|
||||
|
||||
###ver0.8 `2013.6.15`
|
||||
-----
|
||||
####update:
|
||||
- 整体优化,实现全部操作ajax本地化 ,进一步提升体验
|
||||
- 浏览器强刷新,保持之前最后所在路径
|
||||
- 重命名,新建,粘贴操作后添加选中状态
|
||||
- 代码主题列表优化,重新设计,提高可配置性
|
||||
- 优化代码,添加getTplList模版,简化关联配置获取
|
||||
- 增加设置功能,ajax刷新设置。缩略图片增加tips预览(被注释frame/setting.php)
|
||||
- 增加重命名只选择名称部分功能
|
||||
- 增加iframe js api互操作ie支持。四大浏览器内核皆支持。
|
||||
- 文件夹打开,采用ajax实现。包括头部地址栏,父级目录,左边树目录以及收藏夹
|
||||
- 历史记录完美实现,前进后退按钮实时变化状态。
|
||||
- 快捷键backspace实现后退(left header main 分别加入函数,屏蔽默认history(-1)操作) -
|
||||
|
||||
####fix bug:
|
||||
- 完善修改windows以及linux获取文件列表,中文路径属性获取失败问题。
|
||||
- 复制,剪切。剪贴板内容覆盖判空处理
|
||||
- 修复一些地方ajax线程同步问题,重命名后选中失效问题解决
|
||||
- 修复返回上层目录,根目录检测
|
||||
- 修复linux下 音视频播放,中文路径问题
|
||||
- 修复文件右键菜单位置出错问题
|
||||
- 修复ie下frame js相互通信问题
|
||||
- ajax更新文件列表下,各种bug修复。进一步提升操作友好性
|
||||
- 修复当前目录改变的情况下,播放器消失的问题。现在能使播放器始终保留
|
||||
|
|
@ -1,9 +1,10 @@
|
|||
##KodExplorer (http://kalcaddle.com/)
|
||||
###ver2.73(2014.9.17)
|
||||
`商业版授权请联系:kalcaddle#qq.com`
|
||||
KodExplorer(http://kalcaddle.com/)[](http://gruntjs.com/)
|
||||
========
|
||||
KodExplorer是一款开源的基于Web的在线文件管理、代码编辑器。它提供了类windows经典用户界面,一整套在线文件管理、文件预览、编辑、上传下载、在线解压缩、音乐播放功能。让你直接在浏览器端实现web开发、源码文件预览、网站部署。同时拥有与本地操作一样方便、快捷、安全的体验。
|
||||
`商业版授权请联系:kalcaddle#qq.com`
|
||||
|
||||
#### 1.是什么:
|
||||
- Kodexplorer为千帆网络工作室开发的一款服务器文件管理程序。
|
||||
- kodExplorer为千帆网络工作室开发的一款服务器文件管理程序。
|
||||
- 完美取代FTP管理:可用于服务器文件管理,zip解压缩、备份还原、支持图片、音乐、视频预览、office、pdf等格式在线预览。文件夹拖拽上传……。
|
||||
- 在线编程:支持几乎所有编程语言的在线编辑(高亮,多光标编辑.堪比本地的sublime)
|
||||
- 极佳的操作体验:及其便捷的快捷键支持,让你拥有本地化的体验
|
||||
|
|
@ -24,11 +25,14 @@
|
|||
管理员: admin/admin
|
||||
普通用户:demo/demo
|
||||
游客用户:guest/guest
|
||||
|
||||
[如何使用] 下载程序,解压上传到你的服务器路径下,data目录设置777权限。访问体验超便捷的服务吧!
|
||||
(为确保数据安全,最好配置服务器不允许列目录)
|
||||
[关于上传问题] 程序没有做任何限制,如果需要上传大文件,则修改
|
||||
php.ini:`upload_max_filesize = 1000M post_max_size = 1000M` [详情:http://955.cc/R2yT]
|
||||
注意不能大于2g,可能否则导致php无法正常运行(不支持post)。
|
||||
[关于解压缩问题] 程序不做任何限制,如若失败请设置php内存限制。memory_limit 1000M
|
||||
[关于解压缩乱码] linux服务器压缩,下载到windows下中文会乱码。是由于系统导致的。所以尽量不要跨系统操作。
|
||||
[关于"系统错误"] 请配置php错误提示级别error_reporting; 配置php.ini或者允许error_reporting函数
|
||||
[关于兼容性] 建议使用chrome firefox ie9+ 体验更完整。ie8以下基本上不做兼容处理。chrome支持文件夹拖拽上传。
|
||||
[文件打开] office文件在线预览功能,服务器必须在公网(外部能访问该服务器);
|
||||
|
|
@ -37,423 +41,17 @@
|
|||
[忘记密码] 修改data/system/member.php 密码为明文的md5值 例如将admin密码重设为admin
|
||||
则修改第一行:"name":"admin","password":"21232f297a57a5a743894a0e4a801fc3"
|
||||
|
||||
【文件拖拽上传】除了ie8以下的大部分浏览器支持;建议使用chrome、360、猎豹、uc等
|
||||
【文件夹拖拽上传】除了ie10以下、firefox大部分浏览器都支持,建议使用chrome、360、猎豹、uc等
|
||||
|
||||

|
||||
|
||||
###ver2.73 `2014/9/17`
|
||||
####fix bug:
|
||||
- 安全优化补丁
|
||||
|
||||
|
||||
###ver2.72 `2014/9/16`
|
||||
####fix bug:(bug解决和程序优化)
|
||||
- 任意执行:远程下载apache 扩漏洞:判断扩展名中是否含有.php.
|
||||
- 不存在的用户
|
||||
- 桌面:开始按钮被tab盖住了
|
||||
- 主题切换,错位问题
|
||||
- 透明对话框拖动时 标题栏不显示问题
|
||||
|
||||
###ver2.71 `2014/8/31`
|
||||
----
|
||||
####update:
|
||||
- 编辑器配置保存:文字大小、主题风格;主题修改
|
||||
- 精简初始桌面应用
|
||||
|
||||
####fix bug:(bug解决和程序优化)
|
||||
- 修改用户密码失败:
|
||||
- 打开设置设置壁纸,关掉,再打开个人中心,桌面乱掉
|
||||
- 桌面开始菜单 最大化问题
|
||||
- 语言选择下拉菜单错位
|
||||
- 修改主题重叠问题
|
||||
- appstore 添加应用tips不见
|
||||
|
||||
|
||||
###ver2.7 `2014/8/25`
|
||||
----
|
||||
####update:
|
||||
- 安全及性能优化
|
||||
- 静态文件加入?版本标识,版本更新后不缓存
|
||||
- webuploader 升级到0.14 优化部分上传问题
|
||||
- 错误级别:error_reporting(E_ERROR | E_WARNING);
|
||||
- 地址栏(tab模式、编辑模式)两种模式宽度自适应
|
||||
- 自建office解析服务器配置
|
||||
- 最大化全屏
|
||||
|
||||
####fix bug:(bug解决和程序优化)
|
||||
- install 加入iconv、mbstring检测
|
||||
- 右键重命名 快捷键冒泡处理
|
||||
- 文件列表图片缩略图拖拽问题
|
||||
- 标题超出部分截取优化
|
||||
- 编辑器预览滚动条自适应
|
||||
|
||||
|
||||
|
||||
###ver2.61 `2014/7/12`
|
||||
----
|
||||
####update:
|
||||
- 实时搜索,根据搜索框内容变化,实时选中匹配到的结果;
|
||||
- 弹出搜索框遍历子文件夹递归搜索
|
||||
- session key 加入kod_前缀 避免和其他系统key冲突
|
||||
- 编辑器选中优化 选择鼠标到窗口外事件处理
|
||||
|
||||
####fix bug:(bug解决和程序优化)
|
||||
- backspace后退截获浏览器事件,作为后退前一次访问的文件夹;
|
||||
- 搜索首字母不匹配问题
|
||||
- 弹出层中的弹出层关闭,父窗口失去焦点问题。
|
||||
- 代码中grunt部分代码拆分开,放到程序外面;提交到git、osc
|
||||
- 桌面:删除alert enter快捷键删除
|
||||
- install 检测 加入跳过,(只判断用到的函数) 加入多语言
|
||||
- zip压缩没有权限 提示红色,false 统一查找
|
||||
- 登录成功后 验证码输错清除
|
||||
- 非root用户拖拽到文件夹问题
|
||||
- 非root解压问题 不能解压
|
||||
- list oexe 图标问题
|
||||
- 用户目录不存在判断
|
||||
- fileCahe 互斥锁 reset 不用
|
||||
- ie 8~10样式问题调整
|
||||
|
||||
|
||||
###ver2.6 `2014/7/6`
|
||||
----
|
||||
####update:
|
||||
- 完全性优化;加入严格的校验机制
|
||||
- 首次运行环境检测[data目录检测,必须的函数支持提示]
|
||||
- 上传已存在处理——创建副本(另外包括粘贴,解压)
|
||||
- 选中优化 ctrl选中拖拽
|
||||
- 键盘快捷键选中文件,多个字符支持
|
||||
- 文件文件夹权限修改(右键——属性,即可修改)
|
||||
- 对话框加入ico,对应任务栏
|
||||
- 右键等部分菜单效果优化
|
||||
- 远程下载加入进度条,下载速度等信息
|
||||
|
||||
####fix bug:(bug解决和程序优化)
|
||||
- 下载前判断当前目录可写
|
||||
- 文件扩展名处理,分为用户方式和扩展名权限方式
|
||||
- 上传结束提示:是否成功、失败原因
|
||||
- 上传扩展名限制 解决apache .php.*当做php执行bug
|
||||
- 文件名非法字符限定 <script>
|
||||
- 树目录展开箭头状态修复
|
||||
- 树目录新建文件,没有子节点刷新bug解决
|
||||
- 文件大小为0上传不了问题
|
||||
- windows下进入某些系统文件夹死循环bug解决
|
||||
- tips 居中显示
|
||||
- 任务栏标签选中问题:已经显示且为交点窗口 点击——隐藏;否则——显示,并且置为焦点窗口
|
||||
- 拖入url ——oexe 新窗口打开
|
||||
- 选中文件时,移动到屏幕可视区域(解决上下左右选中文件滚动条不一致问题)
|
||||
|
||||
|
||||
###ver2.51 `2014/6/22`
|
||||
----
|
||||
####fix bug:(bug解决和程序优化)
|
||||
|
||||
- 登陆多次密码输入错误验证码bug解决
|
||||
- 修复漏洞:创建副本加入权限控制。和拖文件拽权限一致
|
||||
- 文件上传失败检测
|
||||
- 树目录同步优化
|
||||
|
||||
|
||||
###ver2.5 `2014/6/15`
|
||||
----
|
||||
####update:
|
||||
- 增加创建副本功能 按住ctrl拖拽即可,可以到当前,也可以到文件夹。
|
||||
- 多选拖拽优化:剪切到、移动到某个文件夹
|
||||
- 创建副本功能
|
||||
- 树目录和文件列表一致性保持 更新相互通知
|
||||
|
||||
####fix bug:(bug解决和程序优化)
|
||||
- 桌面重命名bug
|
||||
- 统一对话框部分bug
|
||||
- php notice 提示解决
|
||||
- ajax返回非json 则展示服务错误的返回
|
||||
- 所有入口都加入index.php 解决部分服务器没有设置默认入口问题
|
||||
|
||||
###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:
|
||||
- 公共目录支持(多个用户可以共享目录,写权限跟随用户组权限设定)
|
||||
- 自动升级优化
|
||||
- 文件管理工具栏 增加菜单选项,方便移动设备操作
|
||||
- 文件编辑器,文件树目录 上下左右键盘切换 快捷键加入
|
||||
- 树目录去掉库,改为个人目录等多处文案修改
|
||||
- 默认打开用户目录
|
||||
|
||||
####fix bug:(bug解决和程序优化)
|
||||
- 桌面任务栏点不中bug
|
||||
- 部分文案问题
|
||||
- 众多细节优化
|
||||
|
||||
|
||||
###ver2.1 `2014/4/2`
|
||||
----
|
||||
####update:
|
||||
- 文件夹拖拽上传,完美解决(保持原始目录结构)
|
||||
- 解压缩优化;解压中文问题。解压缩整体速度
|
||||
- 树目录增加快捷键支持(上下、左右展开树目录;复制、粘贴、剪切、删除、打开、搜索、新建文件(夹)、)
|
||||
- pdf预览支持
|
||||
- mac快捷键 ctrl 一一对应command
|
||||
- 音乐播放器和视频播放器相互独立
|
||||
- 图片懒加载、图片较多的情况下只加载首屏图片缩略图;
|
||||
- 编辑文件打开出错,自动关闭标签;文件打开20M限制(大于20M则不处理,浏览器会卡死)
|
||||
- 标签关闭提示:检测是否有未保存文件,文件修改实时修改是否修修改的按钮状态
|
||||
|
||||
####fix bug:(bug解决和程序优化)
|
||||
- 文本文件编辑 文件名含有url编码则出错bug
|
||||
- 右键菜单在最下面时,右键位置重叠导致点击菜单问题
|
||||
- 编辑器打开文件时光标问题,处理:移动到行尾;编辑器enter建不显示自动提示
|
||||
- iframe 打开url 优化。解决canvas问题
|
||||
- 文件编辑器,载入loading去掉
|
||||
- 删除错误时,或上传错误时也刷新目录。删除提示颜色错误
|
||||
- 对话框右键 点击右键菜单隐藏修复
|
||||
- 手机端 touch =双击
|
||||
- 文件列表 explorer 右键 不清除选才·
|
||||
- 树目录中文展开问题。
|
||||
- ie 重命名状态textarea不可选则问题
|
||||
- 修复mac 下 ctrl连选出现右键菜单。
|
||||
- ie 树目录右键兼容性
|
||||
-
|
||||
|
||||
|
||||
###ver2.0 `2014/3/2`
|
||||
----
|
||||
|
||||
####fix bug:(bug解决和程序优化)
|
||||
- body右键屏蔽(保留input、textarea)
|
||||
- 重命名&新建时 右键(编辑内容系统菜单)
|
||||
- 对话框 不显示边框(位移处理,opacity:0)
|
||||
- esc 退出程序 屏蔽该功能。
|
||||
- 关闭播放器,还在播放bug
|
||||
- 增加资源管理器任务栏。任务栏加入右键功能。
|
||||
- 对话框增加右键功能
|
||||
- guest [三类用户 root/default/guest] guest登陆处加链接。20min
|
||||
- 打包程序[update user_add,admin/demo; 删除webuploader.js thumb less]
|
||||
- 编辑添加应用权限只能是root用户才可以。
|
||||
- 保存文件不可写提示!
|
||||
- 解压缩结果提示。(对话框)
|
||||
|
||||
####upload
|
||||
- dialog display
|
||||
- root登陆 目录修改为服务器路径
|
||||
- artdialog 已经打开的窗口 (设了id) 最小化时,再次打开则显示
|
||||
- 最小化窗口后,再次打开 dialog display (setting-display)
|
||||
- 上传进度加入大小
|
||||
- 上传窗口关闭,自动停止所有上传队列
|
||||
- 拖拽后,更新上传地址为当前地址。(之前上传队列也会这样。bug)
|
||||
- root用户非服务器路径下文件预览(图片、mp3、视频、html、swf、……php代理输出文件内容,http方式)
|
||||
- 对话框最小化或关闭,重置最大index为焦点窗口
|
||||
- 图片缩略图生成:小于5k则不生成(直接输出)
|
||||
- 加载文件列表改为异步方式,数据返回采用回调函数方式。增强体验
|
||||
- 选中优化,文件&文件夹重命名、文件&文件夹新建 后自动选中。(f5增加回调。);
|
||||
- 选中保持,选中后如果调整排序等等,保持选中状态。
|
||||
- 上传文件选中当前。
|
||||
- f5改为异步(加入mask loading) 优化文件夹打开体验
|
||||
- 键盘按键选中文件 增加字符搜索定位功能(单个字符,增加到多个字符选中。两次响应直接延迟250ms)
|
||||
- 幻灯片播放[优化成fancybox或者 重写动画部分、打开时关不掉问题]
|
||||
- 编辑器backspace、delete时不提示。
|
||||
- 编辑器,增加选中效果
|
||||
- 增加不自动提示功能,配置项作为全局配置。影响后续建立的文件。选中标记状态。
|
||||
- 更换桌面背景图片【load后替换】
|
||||
- 更换主题【css load 后载入】
|
||||
- 删除。不清除选中。提前准备数据
|
||||
- 构建打包,合并压缩。添加版本、版权
|
||||
- 自动升级(本地记录版本,服务器js调用 参数 url、###version;忽略此版本。cookie。统计用户)
|
||||
|
||||
|
||||
###ver2.0 debug `2014/3/2`
|
||||
----
|
||||
####fix bug:(bug解决和程序优化)
|
||||
- 优化文件打开处理
|
||||
- 文件&文件夹:含有%、+号的处理(显示不出等问题,encoenURIComponent——rawurldecode)
|
||||
- 文件下载,支持大文件下载、断点续传。
|
||||
- 解决更改排序方式后 ——对应右键菜单不同步问题。
|
||||
- 优化右键更改列表状态,同步保存配置到服务端。
|
||||
- 文件浏览器打开(a点击新窗口跳转,a不支持click,用子元素冒泡来实现点击)
|
||||
- 优化配置文件存储方案。直接由前端操作后端key,value
|
||||
- 修复添加收藏夹问题(已打开设置窗口再添加失败问题)
|
||||
- 修复树目录中文文件名bug
|
||||
- 优化pic图片幻灯片播放
|
||||
- 优化新建文件&文件夹 清空选择状态
|
||||
- 对话框组件 ie8 优化;tips不显示任务栏;
|
||||
- 优化地址栏过长编辑状态问题
|
||||
- 优化新建、重命名文件(夹) 高度自适应问题
|
||||
- firefox ctrl+s 系统对话框屏蔽
|
||||
- 树目录:收藏夹优化(右键绑定);右键操作优化,拖拽优化(文件管理&编辑器)
|
||||
- 收藏夹优化(右键 >编辑删除)
|
||||
|
||||
####update:
|
||||
**新增功能**
|
||||
|
||||
- 多用户、权限控制:
|
||||
- 可以建立权限组,将功能分配给权限组
|
||||
- 添加用户,选择所属的权限组。
|
||||
- 权限按功能划分成颗粒,可以任意配置,例如普通使用者、游客等
|
||||
- 搜索:支持递归搜索,可选择是否搜索文件内容。
|
||||
- 增加桌面自定义壁纸。
|
||||
- 皮肤优化 ok 多色彩支持。
|
||||
- 应用商店,root用户可以管理应用。安装、修改、删除。普通用户可以安装应用。
|
||||
- 应用添加了图标。对应右键功能。
|
||||
- office文档在线预览。
|
||||
|
||||
**上传下载**
|
||||
|
||||
- 采用全新上传控件,跟安全,更好的体验。
|
||||
- 拖拽支持文件夹,多个文件。上传自动过滤不允许的文件类型
|
||||
- 拖拽上传 和上统一优化,修复webuploader的文件判断;火狐拖拽上传,ie9+拖拽上传。
|
||||
- 上传时自动过滤不合格的文件,上传失败错误返回。
|
||||
|
||||
**文件编辑**
|
||||
|
||||
- 编辑器支持多光标
|
||||
- 支持几乎所有编程语言的代码高亮
|
||||
- 支持代码自动补全(基于文档、或自定义的代码快照)
|
||||
- 快速预览功能
|
||||
- 优化文件保存完美解决。编码自动识别转换。(字符串转义问题。1&#'[{'"+~%25\\\\ ////)
|
||||
- 文件编辑,添加收藏夹
|
||||
- 优化音乐播放器,添加音乐后自动播放新添加的第一首;解决之前添加列表后暂停问题。
|
||||
- 优化任务栏,多标签;最小化flash问题(left+10000 visiable)
|
||||
- ctrl,shift 多选时拖拽优化(按住这两个键时,不能拖动;拖动加入延迟200ms)
|
||||
- 编辑器在没打开文件的情况下工具栏不可用问题。
|
||||
- 搜索、替换;vim模式
|
||||
- ……
|
||||
|
||||
**登陆退出**
|
||||
|
||||
- 登陆优化 ok【页面&验证码&记住密码】
|
||||
- 三次错误需要输入验证码,保证系统的安全性
|
||||
- 优化自动登录安全性,客户端保存cookie自动登录信息。【tooken加入本地ip】
|
||||
|
||||
**系统优化**
|
||||
|
||||
- 解决较慢操作,阻塞其他操作问题。(同一个用户session会加锁,入口处做释放)
|
||||
- 前后端代码基本全部重构,前端采用模块化方法sea.js|require.js 模块化。
|
||||
- 凡是有模板调用的(display——页面部分php解析。并将配置注入到页面js变量,便于js使用)
|
||||
- 加入模板机制;通用模块采用懒加载模式;使用artTemplate 对模板绑定数据。
|
||||
- kv结构存储
|
||||
- 路由权限控制
|
||||
- 后端统一json输出。
|
||||
|
||||
###ver1.21 `2013/11/6`
|
||||
----
|
||||
####fix bug:
|
||||
- 修复文件下载bug
|
||||
- 修复编辑器自动补全问题,<aa bb /> ——> <aa bb></a>
|
||||
- 兼容部分服务器问题。
|
||||
|
||||
###ver1.2 `2013/10/16`
|
||||
----
|
||||
####fix bug:
|
||||
- 设置,外部通用调用方式
|
||||
- 打包中文乱码问题。
|
||||
- simple,default主题,navbar 下拉菜单右边位置问题。
|
||||
- 文件管理:有滚动条时,上下超过可视区域框选问题修复,统一和win操作一致。
|
||||
- 文件大小写不敏感设置,扩展名获取bug
|
||||
- 目录读取权限判断,解决“系统错误”相关问题。
|
||||
|
||||
####update:
|
||||
- 地址栏宽度自适应优化,支持浏览器窗口调整
|
||||
- 增加远程下载功能;上传功能优化,
|
||||
- 整体样式风格优化,
|
||||
- 右键菜单优化(可持续粘贴,剪切后粘贴清空剪贴板)。
|
||||
- 新建文件、文件重命名高度自适应优化
|
||||
- 关闭调试状态错误信息
|
||||
- 图片播放幻灯片优化,支持浏览器窗口调整,解决事件绑定bug,添加图片倒影;添加关闭按钮,关闭动画等功能
|
||||
- 优化桌面,弹出层层级问题;任务栏为最上层
|
||||
- 优化多标签,没有标签时不显示标签容器,放至层级覆盖
|
||||
- 地址栏超出宽度,自动隐藏最左边内容
|
||||
- 右键菜单状态同步,排序方式初始化当前值,设置后标记当前值。
|
||||
- 优化编辑器:拖动内容&文件到编辑区,内容处理。
|
||||
- 拖拽上传,信息框自动隐出后关闭
|
||||
- setting,editor,player最小化时,再次调用则显示出弹出层
|
||||
- 优化影音播放器,皮肤及相关配置信息存储于js中,不用之前的服务器请求方式,修改皮肤后可以直接更新到界面上。
|
||||
|
||||
|
||||
###ver1.01 `2013/9/10`
|
||||
----
|
||||
####fix bug:
|
||||
- 添加到收藏
|
||||
- simple,default主题,navbar 下拉菜单右边位置问题。
|
||||
|
||||
####update:
|
||||
- 添加到收藏夹,修改收藏夹,更新文件管理收藏夹部分。
|
||||
- 修改主题,同时修改编辑器主题。【编辑区,文件管理,桌面】
|
||||
- 优化setting部分代码,整合为一个整体。
|
||||
- 优化debug,增加less编译,导出功能优化,先编译后复制再操作
|
||||
|
||||
|
||||
###ver1.0 `2013.9.1`
|
||||
----
|
||||
####update:
|
||||
- 代码模块化优化,静态文件分离,可以分开部署
|
||||
- 编辑器单独逻辑提取,完整融合到文件管理,树目录融合文件管理,懒加载语法高亮
|
||||
- 多标签实现,弹层对话框多标签支持,桌面任务栏实现;编辑器多标签支持
|
||||
- 弹层功能优化,实现最大最小化,最小化关联多标签任务栏管理
|
||||
|
||||
####fix bug:
|
||||
- linux 下浏览器打开文件和文件夹,中文问题
|
||||
- 重命名&新建&上传 刷新列表使用动画,当前选中失效问题,不使用动画加载方式。
|
||||
- html5拖拽上传优化
|
||||
|
||||
|
||||
###ver0.8 `2013.6.15`
|
||||
----
|
||||
####update:
|
||||
- 整体优化,实现全部操作ajax本地化 ,进一步提升体验
|
||||
- 浏览器强刷新,保持之前最后所在路径
|
||||
- 重命名,新建,粘贴操作后添加选中状态
|
||||
- 代码主题列表优化,重新设计,提高可配置性
|
||||
- 优化代码,添加getTplList模版,简化关联配置获取
|
||||
- 增加设置功能,ajax刷新设置。缩略图片增加tips预览(被注释frame/setting.php)
|
||||
- 增加重命名只选择名称部分功能
|
||||
- 增加iframe js api互操作ie支持。四大浏览器内核皆支持。
|
||||
- 文件夹打开,采用ajax实现。包括头部地址栏,父级目录,左边树目录以及收藏夹
|
||||
- 历史记录完美实现,前进后退按钮实时变化状态。
|
||||
- 快捷键backspace实现后退(left header main 分别加入函数,屏蔽默认history(-1)操作) -
|
||||
|
||||
####fix bug:
|
||||
- 完善修改windows以及linux获取文件列表,中文路径属性获取失败问题。
|
||||
- 复制,剪切。剪贴板内容覆盖判空处理
|
||||
- 修复一些地方ajax线程同步问题,重命名后选中失效问题解决
|
||||
- 修复返回上层目录,根目录检测
|
||||
- 修复linux下 音视频播放,中文路径问题
|
||||
- 修复文件右键菜单位置出错问题
|
||||
- 修复ie下frame js相互通信问题
|
||||
- ajax更新文件列表下,各种bug修复。进一步提升操作友好性
|
||||
- 修复当前目录改变的情况下,播放器消失的问题。现在能使播放器始终保留
|
||||
|
||||
|
||||
## editor
|
||||

|
||||
|
||||
## desktop
|
||||

|
||||
|
||||
## player
|
||||

|
||||
|
||||
## desktop
|
||||

|
||||
|
|
|
|||
|
|
@ -6,14 +6,20 @@
|
|||
* @license http://kalcaddle.com/tools/licenses/license.txt
|
||||
*/
|
||||
|
||||
date_default_timezone_set('PRC');
|
||||
@date_default_timezone_set(@date_default_timezone_get());
|
||||
@set_time_limit(600);//10min pathInfoMuti,search,upload,download...
|
||||
@ini_set('session.cache_expire',600);
|
||||
@set_time_limit(600);//30min pathInfoMuti,search,upload,download...
|
||||
@ini_set("display_errors","On");
|
||||
@error_reporting(E_ERROR|E_WARING|E_PARSE);
|
||||
//error_reporting(E_ALL);
|
||||
|
||||
function P($path){return str_replace('\\','/',$path);}
|
||||
define('WEB_ROOT',str_replace(P($_SERVER['SCRIPT_NAME']),'',P(dirname(dirname(__FILE__))).'/index.php').'/');
|
||||
define('HOST', 'http://'.$_SERVER['HTTP_HOST'].'/');
|
||||
$web_root = str_replace(P($_SERVER['SCRIPT_NAME']),'',P(dirname(dirname(__FILE__))).'/index.php').'/';
|
||||
if (substr($web_root,-10) == 'index.php/') {//解决部分主机不兼容问题
|
||||
$web_root = P($_SERVER['DOCUMENT_ROOT']).'/';
|
||||
}
|
||||
define('WEB_ROOT',$web_root);
|
||||
define('HOST','http://'.$_SERVER['HTTP_HOST'].'/');
|
||||
define('BASIC_PATH', P(dirname(dirname(__FILE__))).'/');
|
||||
define('APPHOST', HOST.str_replace(WEB_ROOT,'',BASIC_PATH));//程序根目录
|
||||
define('TEMPLATE', BASIC_PATH .'template/'); //模版文件路径
|
||||
|
|
@ -27,23 +33,21 @@ define('DATA_PATH', BASIC_PATH .'data/'); //用户数据目录
|
|||
define('LOG_PATH', DATA_PATH .'log/'); //日志目录
|
||||
define('USER_PATH', DATA_PATH .'User/'); //用户目录
|
||||
define('USER_SYSTEM', DATA_PATH .'system/'); //用户数据存储目录
|
||||
define('DATA_THUMB', DATA_PATH .'thumb/'); //缩略图生成存放
|
||||
define('LANGUAGE_PATH', DATA_PATH .'i18n/'); //多语言目录
|
||||
define('PUBLIC_PATH', DATA_PATH .'public/'); //公共共享目录 读写权限跟随用户目录的读写权限
|
||||
define('PUBLIC_PATH', DATA_PATH .'public/'); //公共共享目录,读写权限跟随用户目录的读写权限
|
||||
|
||||
define('OFFICE_SERVER', "");
|
||||
//默认为空则调用微软解析api,需要外网才可以;
|
||||
//如果内网或局域网使用,引号内填写配置好的地址前缀 形如:"http://***/view.aspx?src="
|
||||
|
||||
define('STATIC_JS','app');//_dev app js编译||开发状态
|
||||
define('STATIC_LESS','css');
|
||||
//本地使用,引号内填写office解析服务器地址 形如:"http://***/view.aspx?src="
|
||||
define('OFFICE_SERVER',"");
|
||||
define('STATIC_JS','app'); //_dev(开发状态)||app(打包压缩)
|
||||
define('STATIC_LESS','css');//less(开发状态)||css(打包压缩)
|
||||
define('STATIC_PATH',"./static/");//静态文件目录
|
||||
//define('STATIC_PATH','http://static.kalcaddle.com/static/');
|
||||
//define('STATIC_PATH','http://static.kalcaddle.com/static/');//静态文件统一分离
|
||||
|
||||
include(FUNCTION_DIR.'web.function.php');
|
||||
include(FUNCTION_DIR.'file.function.php');
|
||||
include(CLASS_DIR.'fileCache.class.php');
|
||||
include(CONTROLLER_DIR.'util.php');
|
||||
|
||||
include(CORER_DIR.'Application.class.php');
|
||||
include(CORER_DIR.'Controller.class.php');
|
||||
include(CORER_DIR.'Model.class.php');
|
||||
|
|
@ -70,10 +74,9 @@ if (strtoupper(substr(PHP_OS, 0,3)) === 'WIN') {
|
|||
$config['system_charset']='utf-8';
|
||||
}
|
||||
|
||||
init_lang();
|
||||
$in = parse_incoming();//所有过滤处理。
|
||||
$in = parse_incoming();
|
||||
session_start();
|
||||
session_write_close();//之后要修改$_SESSION 需要先调用session_start()
|
||||
session_write_close();//避免session锁定问题;之后要修改$_SESSION 需要先调用session_start()
|
||||
$config['autorun'] = array(
|
||||
array('controller'=>'user','function'=>'loginCheck'),
|
||||
array('controller'=>'user','function'=>'authCheck')
|
||||
|
|
|
|||
|
|
@ -8,43 +8,59 @@
|
|||
|
||||
// 配置项可选值
|
||||
$config['setting_all'] = array(
|
||||
'themeall' => "default/:<b>areo blue</b>:default,simple/:<b>simple</b>:simple,metro/:<b>metro</b>:metro,metro/blue_:metro-blue:color, metro/leaf_:metro-green:color,metro/green_:metro-green+:color,metro/grey_:metro-grey:color,metro/purple_:metro-purple:color,metro/pink_:metro-pink:color,metro/orange_:metro-orange:color",
|
||||
'language' => "en:English,zh_CN:简体中文,zh_TW:繁體中文",
|
||||
'themeall' => "default/:<b>areo blue</b>:default,simple/:<b>simple</b>:simple,metro/:<b>metro</b>:metro,metro/blue_:metro-blue:color,metro/leaf_:metro-green:color,metro/green_:metro-green+:color,metro/grey_:metro-grey:color,metro/purple_:metro-purple:color,metro/pink_:metro-pink:color,metro/orange_:metro-orange:color",
|
||||
'codethemeall' => "chrome,clouds,crimson_editor,eclipse,github,solarized_light,tomorrow,xcode,ambiance,idle_fingers,monokai,pastel_on_dark,solarized_dark,tomorrow_night_blue,tomorrow_night_eighties",
|
||||
'wallall' => "1,2,3,4,5,6,7,8,9,10,11,12,13,14,15",
|
||||
'wallall' => "1,2,3,4,5,6,7,8,9,10,11,12,13",
|
||||
'musicthemeall' => "ting,beveled,kuwo,manila,mp3player,qqmusic,somusic,xdj",
|
||||
'moviethemeall' => "webplayer,qqplayer,vplayer,tvlive,youtube"
|
||||
);
|
||||
$config['setting_all']['language'] = "en:English,zh_CN:简体中文,zh_TW:簡體中文";
|
||||
|
||||
// 默认配置
|
||||
$config['setting_default'] = array(
|
||||
'list_type' => "icon", // list||icon
|
||||
'list_sort_field' => "name", // name||size||ext||mtime
|
||||
'list_sort_order' => "up", // asc||desc
|
||||
'theme' => "metro/", // app theme
|
||||
'codetheme' => "github", // code editor theme
|
||||
'wall' => "1", // wall picture
|
||||
'theme' => "simple/", // app theme [default,simple,metro/,metro/black....]
|
||||
'codetheme' => "clouds", // code editor theme
|
||||
'wall' => "7", // wall picture
|
||||
'musictheme' => "mp3player", // music player theme
|
||||
'movietheme' => "webplayer" // movie player theme
|
||||
);
|
||||
|
||||
// 默认配置
|
||||
$config['system_file'] = array(
|
||||
'member'=> USER_SYSTEM.'member.php',
|
||||
'group' => USER_SYSTEM.'group.php',
|
||||
'apps' => USER_SYSTEM.'apps.php'
|
||||
//初始系统配置
|
||||
$config['setting_system_default'] = array(
|
||||
'system_password' => rand_string(10),
|
||||
'system_name' => "KodExplorer",
|
||||
'system_desc' => "——芒果云.资源管理器",
|
||||
'path_hidden' => ".htaccess,.git,.DS_Store",//目录列表隐藏的项
|
||||
'auto_login' => "1", // 是否自动登录;登录用户为guest
|
||||
'first_in' => "explorer", // 登录后默认进入[explorer desktop,editor]
|
||||
'new_user_app' => "365日历,pptv直播,ps,qq音乐,搜狐影视,时钟,天气,水果忍者,计算器,豆瓣电台,音悦台,icloud",
|
||||
'new_user_folder' => "download,music,image,desktop"
|
||||
);
|
||||
|
||||
//权限路由配置;精确到需要做权限控制的控制器和方法
|
||||
//默认菜单配置
|
||||
$config['setting_menu_default'] = array(
|
||||
array('name'=>'desktop','type'=>'system','url'=>'index.php?desktop','target'=>'_self','use'=>'1'),
|
||||
array('name'=>'explorer','type'=>'system','url'=>'index.php?explorer','target'=>'_self','use'=>'1'),
|
||||
array('name'=>'editor','type'=>'system','url'=>'index.php?editor','target'=>'_self','use'=>'1'),
|
||||
array('name'=>'adminer','type'=>'','url'=>'./lib/plugins/adminer/','target'=>'_blank','use'=>'1')
|
||||
);
|
||||
|
||||
//权限配置;精确到需要做权限控制的控制器和方法
|
||||
//需要权限认证的Action;root组无视权限
|
||||
$config['role_setting'] = array(
|
||||
'explorer' => array(
|
||||
'mkdir','mkfile','pathRname','pathDelete','zip','unzip','pathCopy','pathChmod',
|
||||
'pathCute','pathCuteDrag','pathCopyDrag','clipboard','pathPast','pathInfo',
|
||||
'serverDownload','fileUpload','search'),
|
||||
'app' => array('user_app','add','edit','del'),//
|
||||
'serverDownload','fileUpload','search','pathDeleteRecycle',
|
||||
'fileDownload','zipDownload','fileDownloadRemove','fileProxy','makeFileProxy'),
|
||||
'app' => array('user_app','init_app','add','edit','del'),//
|
||||
'user' => array('changePassword'),//可以设立公用账户
|
||||
'editor' => array('fileSave'),
|
||||
'setting' => array('set'),
|
||||
'userShare' => array('set','del'),
|
||||
'setting' => array('set','system_setting','php_info'),
|
||||
'fav' => array('add','del','edit'),
|
||||
'member' => array('get','add','del','edit'),
|
||||
'group' => array('get','add','del','edit'),
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
<?php
|
||||
define('KOD_VERSION','2.73');
|
||||
define('KOD_VERSION','3.0');
|
||||
|
|
@ -9,7 +9,7 @@
|
|||
class app extends Controller{
|
||||
function __construct() {
|
||||
parent::__construct();
|
||||
$this->sql=new fileCache($this->config['system_file']['apps']);
|
||||
$this->sql=new fileCache(USER_SYSTEM.'apps.php');
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -19,6 +19,31 @@ class app extends Controller{
|
|||
$this->display(TEMPLATE.'app/index.php');
|
||||
}
|
||||
|
||||
public function init_app($user_info){
|
||||
$list = $this->sql->get();
|
||||
$new_user_app = $this->config['setting_system']['new_user_app'];
|
||||
$default = explode(',',$new_user_app);
|
||||
$info = array();
|
||||
foreach ($default as $key) {
|
||||
$info[$key] = $list[$key];
|
||||
}
|
||||
$desktop = USER_PATH.$user_info['name'].'/home/desktop/';
|
||||
mk_dir($desktop);
|
||||
foreach ($info as $key => $data) {
|
||||
if (!is_array($data)) {
|
||||
continue;
|
||||
}
|
||||
$path = iconv_system($desktop.$key.'.oexe');
|
||||
unset($data['name']);
|
||||
unset($data['desc']);
|
||||
unset($data['group']);
|
||||
file_put_contents($path, json_encode($data));
|
||||
}
|
||||
$user_info['status'] = 1;
|
||||
$member = new fileCache(USER_SYSTEM.'member.php');
|
||||
$member->update($user_info['name'],$user_info);
|
||||
}
|
||||
|
||||
/**
|
||||
* 用户app 添加、编辑
|
||||
*/
|
||||
|
|
@ -31,9 +56,9 @@ class app extends Controller{
|
|||
if (!checkExt($path)) {
|
||||
show_json($this->L['error']);exit;
|
||||
}
|
||||
|
||||
$data = json_decode(rawurldecode($this->in['data']),true);
|
||||
unset($data['name']);unset($data['desc']);unset($data['group']);
|
||||
|
||||
$res = file_put_contents($path, json_encode($data));
|
||||
show_json($this->L['success']);
|
||||
}
|
||||
|
|
@ -56,7 +81,6 @@ class app extends Controller{
|
|||
* 添加
|
||||
*/
|
||||
public function add() {
|
||||
if (!$GLOBALS['is_root']) show_json($this->L['no_permission'],false);
|
||||
$res=$this->sql->add(rawurldecode($this->in['name']),$this->_init());
|
||||
if($res) show_json($this->L['success']);
|
||||
show_json($this->L['error_repeat'],false);
|
||||
|
|
@ -66,7 +90,6 @@ class app extends Controller{
|
|||
* 编辑
|
||||
*/
|
||||
public function edit() {
|
||||
if (!$GLOBALS['is_root']) show_json($this->L['no_permission'],false);
|
||||
//查找到一条记录,修改为该数组
|
||||
if($this->sql->replace_update(
|
||||
rawurldecode($this->in['old_name']),
|
||||
|
|
@ -79,7 +102,6 @@ class app extends Controller{
|
|||
* 删除
|
||||
*/
|
||||
public function del() {
|
||||
if (!$GLOBALS['is_root']) show_json($this->L['no_permission'],false);
|
||||
if($this->sql->delete(rawurldecode($this->in['name']))){
|
||||
show_json($this->L['success']);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,289 +0,0 @@
|
|||
<?php
|
||||
/*
|
||||
* @link http://www.kalcaddle.com/
|
||||
* @author warlee | e-mail:kalcaddle@qq.com
|
||||
* @copyright warlee 2014.(Shanghai)Co.,Ltd
|
||||
* @license http://kalcaddle.com/tools/licenses/license.txt
|
||||
*/
|
||||
|
||||
class debug extends Controller{
|
||||
public $path_app;
|
||||
public $path_to;
|
||||
function __construct() {
|
||||
load_class('pclzip');
|
||||
$this->path_app = BASIC_PATH;
|
||||
$this->parent = dirname(BASIC_PATH);
|
||||
$this->path_to = $this->parent.'/release';
|
||||
$this->zip_to = $this->parent.'/tag/kodexplorer'.KOD_VERSION.'.zip';
|
||||
|
||||
//自动更新覆盖包
|
||||
$this->update_to= $this->parent.'/release_update';
|
||||
$this->update_zip_to= $this->parent.'/update/2.0-'.KOD_VERSION.'.zip';
|
||||
parent::__construct();
|
||||
}
|
||||
/**
|
||||
* 首页
|
||||
*/
|
||||
public function index() {
|
||||
echo '<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />';
|
||||
debug_out(HOST,WEB_ROOT,BASIC_PATH,APPHOST,$config,$_COOKIE,$_SESSION,$_SERVER);
|
||||
}
|
||||
function less(){
|
||||
header("Content-type: text/html; charset=utf-8");
|
||||
ob_end_clean();
|
||||
echo str_pad('',1024);
|
||||
echo '<h3>开始编译less</h3><hr/>';flush();
|
||||
$this->_less();
|
||||
echo '成功!<br/>';flush();
|
||||
}
|
||||
|
||||
function export(){
|
||||
header("Content-type: text/html; charset=utf-8");
|
||||
ob_end_clean(); //在循环输出前,要关闭输出缓冲区
|
||||
echo str_pad('',1024); //浏览器在接受输出一定长度内容之前不会显示缓冲输出
|
||||
|
||||
echo '<h1>开始导出!</h1><hr/><h3>删除初始文件</h3><hr/>';flush();
|
||||
del_dir($this->path_to);
|
||||
echo '删除完成!<br/><h3>删除成功,开始编译less</h3><hr/>';flush();
|
||||
//$this->_less();
|
||||
echo '编译成功!<br/><h3>开始复制文件</h3><hr/>';flush();
|
||||
$this->_fileInit();
|
||||
echo '复制成功!<br/><h3>删除开发相关文件</h3><hr/>';flush();
|
||||
$this->_remove();
|
||||
echo '删除成功!<br/><h3>开始替换模板种less相关内容</h3><hr/>';flush();
|
||||
$this->_fileReplace();
|
||||
echo '替换成功!<br/><h3>初始化默认用户数据...</h3><hr/>';flush();
|
||||
$this->_initUser();
|
||||
echo '初始化默认用户成功!<br/><h3>打包程序</h3><hr/>';flush();
|
||||
|
||||
|
||||
ini_set('memory_limit', '2028M');//2G;
|
||||
$archive = new PclZip($this->zip_to);
|
||||
$v_list = $archive->create($this->path_to,PCLZIP_OPT_REMOVE_PATH,$this->path_to);
|
||||
echo '打包成功!<br/><h3>初始化配置文件</h3><hr/>';flush();
|
||||
|
||||
$this->make_update();
|
||||
echo '更新成功!<br/><h1>导出处理完成!^_^</h1>';flush();
|
||||
}
|
||||
|
||||
function make_update(){
|
||||
del_dir($this->update_to);
|
||||
mk_dir($this->update_to);
|
||||
copy_dir($this->path_to.'/', $this->update_to);
|
||||
$file_list = array(
|
||||
$this->update_to.'/static/js/lib/jquery-1.8.0.min.js'
|
||||
);
|
||||
$path_list = array(
|
||||
$this->update_to.'/data/User',
|
||||
$this->update_to.'/data/thumb',
|
||||
$this->update_to.'/data/system',
|
||||
$this->update_to.'/data/public',
|
||||
|
||||
$this->update_to.'/static/style/font-awesome',
|
||||
$this->update_to.'/static/images/wall_page',
|
||||
$this->update_to.'/static/images/thumb',
|
||||
$this->update_to.'/static/images/wall_page',
|
||||
|
||||
$this->update_to.'/static/js/lib/cmp4',
|
||||
$this->update_to.'/static/js/lib/ztree',
|
||||
$this->update_to.'/static/js/lib/seajs'
|
||||
);
|
||||
foreach($file_list as $val){
|
||||
del_file($val);
|
||||
}
|
||||
echo '<br/>1.更新包;文件删除完成:';flush();
|
||||
foreach($path_list as $val){
|
||||
del_dir($val);
|
||||
}
|
||||
echo '<br/>2.更新包;文件夹删除完成:';flush();
|
||||
$archive = new PclZip($this->update_zip_to);
|
||||
$v_list = $archive->create($this->update_to,PCLZIP_OPT_REMOVE_PATH,$this->update_to);
|
||||
echo '更新包打包成功!<br/><hr/>';flush();
|
||||
}
|
||||
|
||||
//----------------------------
|
||||
function _less(){
|
||||
load_class('lessc.inc');
|
||||
$path = BASIC_PATH.'static/style/skin/';
|
||||
$app_theme = array('default','metro','simple');
|
||||
$app_less = array(
|
||||
'app_code_edit',
|
||||
'app_desktop',
|
||||
'app_editor',
|
||||
'app_explorer',
|
||||
'app_setting'
|
||||
);
|
||||
$num = count($app_theme)*count($app_less);$i=1;
|
||||
foreach($app_theme as $theme){
|
||||
foreach($app_less as $app){
|
||||
$less = new lessc();
|
||||
$path_in = $path.$theme.'/'.$app.'.less';
|
||||
$path_out = $path.$theme.'/'.$app.'.css';
|
||||
try {
|
||||
$cache = $less->cachedCompile($path_in);
|
||||
$out = str_replace(array("{\n",";\n",",\n",' '),
|
||||
array('{',';',',',' '),$cache["compiled"]);
|
||||
file_put_contents($path_out,$out);
|
||||
echo $path_out,' ...成功!('.$i++.'/'.$num.')','<br/>';
|
||||
unset($less);unset($out);
|
||||
}catch (exception $e) {
|
||||
echo "<p style='color:#f66'>fatal error: " . $e->getMessage(),'</p>';
|
||||
}
|
||||
flush();
|
||||
}
|
||||
}
|
||||
//编译metro多主题
|
||||
$color_arr = array(
|
||||
'blue' => '#5db2ff',
|
||||
'leaf' => '#03B3B2',
|
||||
'green' => '#008a17',
|
||||
'grey' => '#444',
|
||||
'purple' => '#8D3CC4',
|
||||
'pink' => '#DC4FAD',
|
||||
'orange' => '#FF8F32'
|
||||
);
|
||||
|
||||
$config = $path.'metro/config.less';
|
||||
$file = file_get_contents($config);
|
||||
preg_match('/\/\*replace_start\*\/(.*)\/\*replace_end/isU',$file,$res);
|
||||
$default = $res[1];
|
||||
preg_match('/\/\*replace_start_color\*\/(.*)\/\*replace_end_color/isU',$file,$res2);
|
||||
$new = $res2[1];
|
||||
foreach ($color_arr as $name => $color) {
|
||||
$theme = preg_replace('/@main_color:(.*);/isU',"@main_color:".$color.";",$new);
|
||||
$file_str = preg_replace('/\/\*replace_start\*\/(.*)\/\*replace_end/isU',
|
||||
"/*replace_start*/".$theme."/*replace_end",$file);
|
||||
file_put_contents($config,$file_str);
|
||||
foreach($app_less as $app){
|
||||
$less = new lessc();
|
||||
$path_in = $path.'metro/'.$app.'.less';
|
||||
$path_out = $path.'metro/'.$name.'_'.$app.'.css';
|
||||
try {
|
||||
$cache = $less->cachedCompile($path_in);
|
||||
$out = str_replace(array("{\n",";\n",",\n",' '),
|
||||
array('{',';',',',' '),$cache["compiled"]);
|
||||
file_put_contents($path_out,$out);
|
||||
echo $path_out,' ...成功!('.$i++.'/'.$num.')','<br/>';
|
||||
}catch (exception $e) {
|
||||
echo "<p style='color:#f66'>fatal error: " . $e->getMessage(),'</p>';
|
||||
}
|
||||
flush();
|
||||
}
|
||||
}
|
||||
$file_str = preg_replace('/\/\*replace_start\*\/(.*)\/\*replace_end/isU',
|
||||
"/*replace_start*/".$default."/*replace_end",$file);
|
||||
file_put_contents($config,$file_str);
|
||||
}
|
||||
|
||||
function _fileInit(){
|
||||
mk_dir($this->path_to);
|
||||
echo '<br/>新建文件夹成功,开始复制文件';flush();
|
||||
copy_dir($this->path_app, $this->path_to);
|
||||
echo '<br/>复制文件成功,开始清除调试相关信息<hr/>';flush();
|
||||
echo $this->path_app,'<br/>',$this->path_to;
|
||||
}
|
||||
// 删除
|
||||
function _remove(){
|
||||
$file_list = array(
|
||||
$this->path_to.'/data/system/install.lock',
|
||||
$this->path_to.'/lib/class/lessc.inc.class.php',
|
||||
$this->path_to.'/static/style/base.less',
|
||||
$this->path_to.'/static/js/lib/less-1.4.2.min.js',
|
||||
$this->path_to.'/static/js/lib/webuploader/webuploader.js',
|
||||
$this->path_to.'/static/style/skin/common.less',
|
||||
$this->path_to.'/todo.txt',
|
||||
$this->path_to.'/controller/debug.class.php',
|
||||
);
|
||||
$path_list = array(
|
||||
$this->path_to.'/data/log',
|
||||
$this->path_to.'/data/User',
|
||||
$this->path_to.'/data/public/',
|
||||
$this->path_to.'/data/thumb',
|
||||
$this->path_to.'/static/js/_dev',
|
||||
$this->path_to.'/static/js/app/update'
|
||||
);
|
||||
foreach($file_list as $val){
|
||||
del_file($val);
|
||||
}
|
||||
echo '<br/>1.文件删除完成:';flush();
|
||||
mkdir($this->path_to.'/data/User');
|
||||
foreach($path_list as $val){
|
||||
del_dir($val);
|
||||
}
|
||||
|
||||
mk_dir($this->path_to.'/data/thumb');
|
||||
echo '<br/>2.文件夹删除完成:';flush();
|
||||
$path = $this->path_to.'/static/style/skin/';
|
||||
$app_theme = array('default','metro','simple');
|
||||
$app_less = array(
|
||||
'app_code_edit','app_desktop','app_editor','app_explorer','app_setting',
|
||||
'button','config','dialog','filelist','right_menu','tree'
|
||||
);
|
||||
foreach($app_theme as $theme){
|
||||
foreach($app_less as $app){
|
||||
$temp = $path.$theme.'/'.$app.'.less';
|
||||
del_file($temp);
|
||||
}
|
||||
}
|
||||
echo '<br/>3.less文件删除完成<hr/>';flush();
|
||||
}
|
||||
|
||||
// 删除less相关信息
|
||||
function _fileReplace(){
|
||||
$file_list = array(
|
||||
$this->path_to.'/template/app/index.php',
|
||||
$this->path_to.'/template/desktop/index.php',
|
||||
$this->path_to.'/template/editor/edit.php',
|
||||
$this->path_to.'/template/editor/editor.php',
|
||||
$this->path_to.'/template/explorer/index.php',
|
||||
$this->path_to.'/template/setting/index.php'
|
||||
);
|
||||
foreach($file_list as $val){
|
||||
$content = file_get_contents($val);
|
||||
$content = str_replace("<?php if(STATIC_LESS == 'css'){ ?>",'',$content);
|
||||
$content = str_replace("<?php echo STATIC_JS;?>",'app',$content);
|
||||
$content = preg_replace('/<\?php }else{\/\/less_compare_online \?>.*<\?php } \?>/isU','',$content);
|
||||
file_put_contents($val,$content);
|
||||
echo '<br/>处理template文件:'.$val,'成功';flush();
|
||||
}
|
||||
|
||||
$config = $this->path_to.'/config/config.php';
|
||||
$content = file_get_contents($config);
|
||||
$content = str_replace("('STATIC_JS','_dev')","('STATIC_JS','app')",$content);
|
||||
$content = str_replace("('STATIC_LESS','less')","('STATIC_LESS','css')",$content);
|
||||
file_put_contents($config,$content);
|
||||
}
|
||||
|
||||
// 默认用户初始化 admin/admin
|
||||
function _initUser(){
|
||||
echo '<br/>开始创建用户';flush();
|
||||
$root = array('home','recycle','data');
|
||||
$home = array('desktop','doc','download','image','movie','music');
|
||||
$user = array(
|
||||
'admin'=>array('admin','root'),
|
||||
'demo'=>array('demo','default'),
|
||||
'guest'=>array('guest','guest')
|
||||
);
|
||||
|
||||
mk_dir($this->path_to.'/data/public/test/');//创建公共目录
|
||||
foreach ($user as $name => $v) {//创建用户目录及初始化
|
||||
$user_path = $this->path_to.'/data/User/'.$name.'/';
|
||||
mk_dir($user_path);
|
||||
foreach ($root as $dir) {
|
||||
mk_dir($user_path.$dir);
|
||||
}
|
||||
foreach ($home as $dir) {
|
||||
mk_dir($user_path.'home/'.$dir);
|
||||
}
|
||||
fileCache::save($user_path.'data/config.php',$this->config['setting_default']);
|
||||
}
|
||||
$this->_initUserData();
|
||||
}
|
||||
function _initUserData(){
|
||||
echo '<br/>初始化用户数据';flush();
|
||||
$role = '<?php exit;?>{"root":{"role":"root","name":"Administrator","path":"","ext_not_allow":""},"default":{"role":"default","name":"default","ext_not_allow":"php|asp|jsp","explorer:mkdir":1,"explorer:mkfile":1,"explorer:pathRname":1,"explorer:pathDelete":1,"explorer:zip":1,"explorer:unzip":1,"explorer:pathCopy":1,"explorer:pathCute":1,"explorer:pathCuteDrag":1,"explorer:clipboard":1,"explorer:pathPast":1,"explorer:pathInfo":1,"explorer:pathInfoMuti":1,"explorer:serverDownload":1,"explorer:fileUpload":1,"explorer:search":1,"app:user_app":1,"editor:fileSave":1},"guest":{"role":"guest","name":"guest","ext_not_allow":"php|asp|jsp"}}';
|
||||
$user = '<?php exit;?>{"admin":{"name":"admin","password":"21232f297a57a5a743894a0e4a801fc3","role":"root","status":0},"guest":{"name":"guest","password":"084e0343a0486ff05530df6c705c8bb4","role":"guest","status":0},"demo":{"name":"demo","password":"fe01ce2a7fbac8fafaed7c982a04e229","role":"default","status":0}}';
|
||||
file_put_contents($this->path_to.'/data/system/group.php',$role);
|
||||
file_put_contents($this->path_to.'/data/system/member.php',$user);
|
||||
}
|
||||
}
|
||||
|
|
@ -11,7 +11,6 @@ class desktop extends Controller{
|
|||
parent::__construct();
|
||||
$this->tpl = TEMPLATE.'desktop/';
|
||||
}
|
||||
|
||||
public function index() {
|
||||
$wall = $this->config['user']['wall'];
|
||||
if(strlen($wall)>3){
|
||||
|
|
@ -19,13 +18,9 @@ class desktop extends Controller{
|
|||
}else{
|
||||
$this->assign('wall',STATIC_PATH.'images/wall_page/'.$wall.'.jpg');
|
||||
}
|
||||
|
||||
if (!is_dir(MYHOME.'desktop/') && is_writable(MYHOME)) {
|
||||
mkdir(MYHOME.'desktop/');
|
||||
}
|
||||
|
||||
$upload_max = get_post_max();
|
||||
$this->assign('upload_max',$upload_max);
|
||||
$this->display('index.php');
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ class editor extends Controller{
|
|||
// 获取文件数据
|
||||
public function fileGet(){
|
||||
$filename=_DIR($this->in['filename']);
|
||||
if (!is_readable($filename)) show_json($this->L['no_permission'],false);
|
||||
if (!is_readable($filename)) show_json($this->L['no_permission_read'],false);
|
||||
if (filesize($filename) >= 1024*1024*20) show_json($this->L['edit_too_big'],false);
|
||||
|
||||
$filecontents=file_get_contents($filename);//文件内容
|
||||
|
|
@ -63,10 +63,11 @@ class editor extends Controller{
|
|||
public function getConfig(){
|
||||
$default = array(
|
||||
'font_size' => '14px',
|
||||
'theme' => 'github',
|
||||
'theme' => 'clouds',
|
||||
'auto_wrap' => 0,
|
||||
'display_char' => 0,
|
||||
'auto_complete' => 1
|
||||
'auto_complete' => 1,
|
||||
'function_list' => 1
|
||||
);
|
||||
$config_file = USER.'data/editor_config.php';
|
||||
if (!file_exists($config_file)) {//不存在则创建
|
||||
|
|
@ -76,17 +77,26 @@ class editor extends Controller{
|
|||
$sql=new fileCache($config_file);
|
||||
$default = $sql->get();
|
||||
}
|
||||
if (!isset($default['function_list'])) {
|
||||
$default['function_list'] = 1;
|
||||
}
|
||||
return json_encode($default);
|
||||
}
|
||||
/*
|
||||
* 获取编辑器配置信息
|
||||
*/
|
||||
public function setConfig(){
|
||||
$key = $this->in['k'];$value = $this->in['v'];
|
||||
$file = USER.'data/editor_config.php';
|
||||
if (!is_writeable($file)) {//配置不可写
|
||||
show_json($this->L['no_permission_write'],false);
|
||||
}
|
||||
$key= $this->in['k'];
|
||||
$value = $this->in['v'];
|
||||
if ($key !='' && $value != '') {
|
||||
$config_file = USER.'data/editor_config.php';
|
||||
$sql=new fileCache($config_file);
|
||||
$default = $sql->update($key,$value);
|
||||
$sql=new fileCache($file);
|
||||
if(!$sql->update($key,$value)){
|
||||
$sql->add($key,$value);//没有则添加一条
|
||||
}
|
||||
show_json($this->L["setting_success"]);
|
||||
}else{
|
||||
show_json($this->L['error'],false);
|
||||
|
|
|
|||
|
|
@ -17,19 +17,14 @@ class explorer extends Controller{
|
|||
}
|
||||
public function index(){
|
||||
if(isset($this->in['path']) && $this->in['path'] !=''){
|
||||
$dir = $_GET['path'];
|
||||
$dir = _DIR_CLEAR($_GET['path']);
|
||||
}else if(isset($_SESSION['this_path'])){
|
||||
$dir = $_SESSION['this_path'];
|
||||
$dir = _DIR_CLEAR($_SESSION['this_path']);
|
||||
}else{
|
||||
$dir = '/';//首次进入系统,不带参数
|
||||
if ($GLOBALS['is_root']) $dir = WEB_ROOT;
|
||||
}
|
||||
$dir = rtrim($dir,'/').'/';
|
||||
$is_frame = false;//是否以iframe方式打开
|
||||
if (isset($this->in['type']) && $this->in['type'] == 'iframe') $is_frame = true;//
|
||||
$upload_max = get_post_max();
|
||||
$this->assign('upload_max',$upload_max);
|
||||
$this->assign('is_frame',$is_frame);
|
||||
$this->assign('dir',$dir);
|
||||
$this->display('index.php');
|
||||
}
|
||||
|
|
@ -40,6 +35,7 @@ class explorer extends Controller{
|
|||
$val['path'] = _DIR($val['path']);
|
||||
}
|
||||
$data = path_info_muti($info_list,$this->L['time_type_info']);
|
||||
_DIR_OUT($data['path']);
|
||||
show_json($data);
|
||||
}
|
||||
|
||||
|
|
@ -63,7 +59,7 @@ class explorer extends Controller{
|
|||
show_json($info,$state);
|
||||
}
|
||||
|
||||
public function _pathAllow($path){
|
||||
private function _pathAllow($path){
|
||||
$name = get_path_this($path);
|
||||
$path_not_allow = array('*','?','"','<','>','|');
|
||||
foreach ($path_not_allow as $tip) {
|
||||
|
|
@ -103,7 +99,11 @@ class explorer extends Controller{
|
|||
$hi->add($user_path);
|
||||
$_SESSION['history']=$hi->getHistory();
|
||||
}
|
||||
|
||||
//回收站不记录前进后退
|
||||
if($this->in['path'] != '*recycle*/' && $this->in['type'] !=='desktop'){
|
||||
$_SESSION['this_path']=$user_path;
|
||||
}
|
||||
$list=$this->path($this->path);
|
||||
$list['history_status']= array('back'=>$hi->isback(),'next'=>$hi->isnext());
|
||||
show_json($list);
|
||||
|
|
@ -152,16 +152,32 @@ class explorer extends Controller{
|
|||
}
|
||||
}
|
||||
private function _tree_init($app){
|
||||
if ($app == 'editor' && isset($this->in['project'])) {
|
||||
$list_project = $this->path(_DIR($this->in['project']),true,true);
|
||||
$project = array_merge($list_project['folderlist'],$list_project['filelist']);
|
||||
$tree_data = array(
|
||||
array('name'=> get_path_this($this->in['project']),
|
||||
'children'=>$project,
|
||||
'iconSkin' => "my",
|
||||
'menuType' => "menuTreeRoot",
|
||||
'open' => true,
|
||||
'this_path' => $this->in['project'],
|
||||
'isParent' => count($project)>0?true:false)
|
||||
);
|
||||
show_json($tree_data);
|
||||
return;
|
||||
}
|
||||
|
||||
$check_file = ($app == 'editor'?true:false);
|
||||
$favData=new fileCache($this->config['user_fav_file']);
|
||||
$fav_list = $favData->get();
|
||||
$fav = array();
|
||||
foreach($fav_list as $key => $val){
|
||||
$fav[] = array(
|
||||
'ext' => 'folder',
|
||||
'name' => $val['name'],
|
||||
'this_path' => $val['path'],
|
||||
'iconSkin' => "fav",
|
||||
'menuType' => "menuTreeFav",
|
||||
'type' => 'folder',
|
||||
'isParent' => path_haschildren(_DIR($val['path']),$check_file)
|
||||
);
|
||||
|
|
@ -172,31 +188,21 @@ class explorer extends Controller{
|
|||
if ($check_file) {//编辑器
|
||||
$root = array_merge($list_root['folderlist'],$list_root['filelist']);
|
||||
$share = array_merge($list_share['folderlist'],$list_share['filelist']);
|
||||
$root_isparent = count($root)>0?true:false;
|
||||
$share_isparent = count($share)>0?true:false;
|
||||
|
||||
$tree_data = array(
|
||||
array('name'=>$this->L['fav'],'ext'=>'__fav__','iconSkin'=>"fav",
|
||||
'open'=>true,'children'=>$fav),
|
||||
array('name'=>$this->L['root_path'],'ext'=>'__root__','children'=>$root,
|
||||
'iconSkin'=>"my",'open'=>true,'this_path'=> MYHOME,'isParent'=>$root_isparent),
|
||||
array('name'=>$this->L['public_path'],'ext'=>'__root__','children'=>$share,
|
||||
'iconSkin'=>"lib",'open'=>true,'this_path'=> PUBLIC_PATH,'isParent'=>$share_isparent)
|
||||
);
|
||||
}else{//文件管理器
|
||||
$root = $list_root['folderlist'];
|
||||
$share = $list_share['folderlist'];
|
||||
$root_isparent = count($root)>0?true:false;
|
||||
$share_isparent = count($share)>0?true:false;
|
||||
$tree_data = array(
|
||||
array('name'=>$this->L['fav'],'ext'=>'__fav__','iconSkin'=>"fav",
|
||||
'open'=>true,'children'=>$fav),
|
||||
array('name'=>$this->L['root_path'],'ext'=>'__root__','children'=>$root,
|
||||
'iconSkin'=>"my",'open'=>true,'this_path'=> MYHOME,'isParent'=>$root_isparent),
|
||||
array('name'=>$this->L['public_path'],'ext'=>'__root__','children'=>$share,
|
||||
'iconSkin'=>"lib",'open'=>true,'this_path'=> PUBLIC_PATH,'isParent'=>$share_isparent)
|
||||
);
|
||||
}
|
||||
|
||||
$root_isparent = count($root)>0?true:false;
|
||||
$public_isparent = count($share)>0?true:false;
|
||||
$tree_data = array(
|
||||
array('name'=>$this->L['fav'],'iconSkin'=>"fav",
|
||||
'menuType' => "menuTreeFavRoot",'open'=>true,'children'=>$fav),
|
||||
array('name'=>$this->L['root_path'],'children'=>$root,'menuType'=>"menuTreeRoot",
|
||||
'iconSkin'=>"my",'open'=>true,'this_path'=> MYHOME,'isParent'=>$root_isparent),
|
||||
array('name'=>$this->L['public_path'],'children'=>$share,'menuType'=>"menuTreeRoot",
|
||||
'iconSkin'=>"lib",'open'=>true,'this_path'=> '*public*','isParent'=>$public_isparent)
|
||||
);
|
||||
show_json($tree_data);
|
||||
}
|
||||
|
||||
|
|
@ -235,6 +241,36 @@ class explorer extends Controller{
|
|||
}
|
||||
}
|
||||
public function pathDelete(){
|
||||
$list = json_decode($this->in['list'],true);
|
||||
if (!is_writable(USER_RECYCLE)) show_json($this->L['no_permission_write'],false);
|
||||
$success=0;$error=0;
|
||||
foreach ($list as $val) {
|
||||
$path_this = _DIR($val['path']);
|
||||
$filename = get_path_this($path_this);
|
||||
$filename = get_filename_auto(USER_RECYCLE.$filename,date(' h.i.s'));//已存在处理 创建副本
|
||||
if (@rename($path_this,$filename)) {
|
||||
$success++;
|
||||
}else{
|
||||
$error++;
|
||||
}
|
||||
}
|
||||
$state = $error==0?true:false;
|
||||
$info = $success.' success,'.$error.' error';
|
||||
if (count($info_list) == 1 && $error==0) {
|
||||
$info = $this->L['remove_success'];
|
||||
}
|
||||
show_json($info,$state);
|
||||
}
|
||||
public function pathDeleteRecycle(){
|
||||
if(!isset($this->in['list'])){
|
||||
if (!del_dir(USER_RECYCLE)) {
|
||||
show_json($this->L['remove_fali'],false);
|
||||
}else{
|
||||
mkdir(USER_RECYCLE);
|
||||
show_json($this->L['recycle_clear_success'],true);
|
||||
}
|
||||
return;
|
||||
}
|
||||
$list = json_decode($this->in['list'],true);
|
||||
$success = 0;$error = 0;
|
||||
foreach ($list as $val) {
|
||||
|
|
@ -255,11 +291,15 @@ class explorer extends Controller{
|
|||
show_json($this->L['remove_success'].$success.'success,'.$error.'error',$code);
|
||||
}
|
||||
}
|
||||
|
||||
public function mkfile(){
|
||||
$new= rtrim($this->path,'/');
|
||||
$this->_pathAllow($new);
|
||||
if(touch($new)){
|
||||
show_json($this->L['create_success']);
|
||||
if (isset($this->in['content'])) {
|
||||
file_put_contents($new,$this->in['content']);
|
||||
}
|
||||
show_json($this->L['create_success'],true,get_path_this($new));
|
||||
}else{
|
||||
show_json($this->L['create_error'],false);
|
||||
}
|
||||
|
|
@ -353,7 +393,7 @@ class explorer extends Controller{
|
|||
}
|
||||
public function pathPast(){
|
||||
if (!isset($_SESSION['path_copy'])){
|
||||
show_json($data,false,$this->L['clipboard_null']);
|
||||
show_json($this->L['clipboard_null'],false,$data);
|
||||
}
|
||||
|
||||
session_start();//re start
|
||||
|
|
@ -361,11 +401,11 @@ class explorer extends Controller{
|
|||
$clipboard = json_decode($_SESSION['path_copy'],true);
|
||||
$copy_type = $_SESSION['path_copy_type'];
|
||||
$path_past=$this->path;
|
||||
if (!is_writable($path_past)) show_json($data,false,$this->L['no_permission_write']);
|
||||
if (!is_writable($path_past)) show_json($this->L['no_permission_write'],false,$data);
|
||||
|
||||
$list_num = count($clipboard);
|
||||
if ($list_num == 0) {
|
||||
show_json($data,false,$this->L['clipboard_null']);
|
||||
show_json($this->L['clipboard_null'],false,$data);
|
||||
}
|
||||
for ($i=0; $i < $list_num; $i++) {
|
||||
$path_copy = _DIR($clipboard[$i]['path']);
|
||||
|
|
@ -397,49 +437,82 @@ class explorer extends Controller{
|
|||
$data[] = iconv_app($filename);
|
||||
}
|
||||
if ($copy_type == 'copy') {
|
||||
$info=$this->L['past_success'].$error;
|
||||
$msg=$this->L['past_success'].$error;
|
||||
}else{
|
||||
$_SESSION['path_copy'] = json_encode(array());
|
||||
$_SESSION['path_copy_type'] = '';
|
||||
$info=$this->L['cute_past_success'].$error;
|
||||
$msg=$this->L['cute_past_success'].$error;
|
||||
}
|
||||
$state = ($error ==''?true:false);
|
||||
show_json($data,$state,$info);
|
||||
show_json($msg,$state,$data);
|
||||
}
|
||||
public function fileDownload(){
|
||||
file_download($this->path);
|
||||
file_put_out($this->path,true);
|
||||
}
|
||||
public function zip(){
|
||||
//文件下载后删除,用于文件夹下载
|
||||
public function fileDownloadRemove(){
|
||||
$path = rawurldecode(_DIR_CLEAR($this->in['path']));
|
||||
$path = USER_TEMP.iconv_system($path);
|
||||
file_put_out($path,true);
|
||||
del_file($path);
|
||||
}
|
||||
public function zipDownload(){
|
||||
if(!file_exists(USER_TEMP)){
|
||||
mkdir(USER_TEMP);
|
||||
}else{//清除未删除的临时文件,一天前
|
||||
$list = path_list(USER_TEMP,true,false);
|
||||
$max_time = 3600*24;
|
||||
if ($list['filelist']>=1) {
|
||||
for ($i=0; $i < count($list['filelist']); $i++) {
|
||||
$create_time = $list['filelist'][$i]['mtime'];//最后修改时间
|
||||
if(time() - $create_time >$max_time){
|
||||
del_file($list['filelist'][$i]['path'].$list['filelist'][$i]['name']);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
$zip_file = $this->zip(USER_TEMP);
|
||||
show_json($this->L['zip_success'],true,get_path_this($zip_file));
|
||||
}
|
||||
public function zip($zip_path){
|
||||
load_class('pclzip');
|
||||
ini_set('memory_limit', '2028M');//2G;
|
||||
$zip_list = json_decode($this->in['list'],true);
|
||||
$list_num = count($zip_list);
|
||||
for ($i=0; $i < $list_num; $i++) {
|
||||
$zip_list[$i]['path'] = _DIR($zip_list[$i]['path']);
|
||||
$zip_list[$i]['path'] = rtrim(_DIR($zip_list[$i]['path']),'/');
|
||||
}
|
||||
//指定目录
|
||||
$basic_path = $zip_path;
|
||||
if (!isset($zip_path)){
|
||||
$basic_path =get_path_father($zip_list[0]['path']);
|
||||
if ($list_num == 1) {
|
||||
$path_this_name=get_path_this($zip_list[0]['path']);
|
||||
$zipname = $basic_path.$path_this_name.'.zip';
|
||||
}else{
|
||||
$path_this_name=get_path_this(get_path_father($zip_list[0]['path']));
|
||||
$zipname = $basic_path.$path_this_name.'.zip';
|
||||
}
|
||||
if ($list_num == 1){
|
||||
$path_this_name=get_path_this($zip_list[0]['path']);
|
||||
}else{
|
||||
$path_this_name=get_path_this(get_path_father($basic_path));
|
||||
}
|
||||
$zipname = $basic_path.$path_this_name.'.zip';
|
||||
$zipname = get_filename_auto($zipname);
|
||||
if (!is_writeable($basic_path)) {
|
||||
show_json("{$zipname}".$this->L['no_permission_write'],false);
|
||||
show_json($this->L['no_permission_write'],false);
|
||||
}else{
|
||||
$files = array();
|
||||
for ($i=0; $i < $list_num; $i++) {
|
||||
$files[] = $zip_list[$i]['path'];
|
||||
}
|
||||
$remove_path_pre = _DIR_CLEAR(get_path_father($zip_list[0]['path']));
|
||||
$archive = new PclZip($zipname);
|
||||
$v_list = $archive->create(implode(',',$files),PCLZIP_OPT_REMOVE_PATH,$basic_path);
|
||||
$v_list = $archive->create(implode(',',$files),PCLZIP_OPT_REMOVE_PATH,$remove_path_pre);
|
||||
if ($v_list == 0) {
|
||||
show_json("Error : ".$archive->errorInfo(true),false);
|
||||
show_json("Error:".$archive->errorInfo(true),false);
|
||||
}
|
||||
$info = $this->L['zip_success'].$this->L['size'].":".size_format(filesize($zipname));
|
||||
show_json($info);
|
||||
if (!isset($zip_path)) {
|
||||
show_json($info,true,iconv_app(get_path_this($zipname)));
|
||||
}else{
|
||||
return iconv_app($zipname);
|
||||
}
|
||||
}
|
||||
}
|
||||
public function unzip(){
|
||||
|
|
@ -452,8 +525,8 @@ class explorer extends Controller{
|
|||
if (isset($this->in['path_to'])) {//解压到指定位置
|
||||
$unzip_to = _DIR($this->in['path_to']);
|
||||
}
|
||||
if (!is_writeable($path)) {
|
||||
show_json("{$path}".$this->L['no_permission_write'],false);
|
||||
if (!is_writeable($unzip_to)) {
|
||||
show_json($this->L['no_permission_write'],false);
|
||||
}
|
||||
$zip = new PclZip($path);//
|
||||
if ($GLOBALS['is_root'] == 1){
|
||||
|
|
@ -474,17 +547,21 @@ class explorer extends Controller{
|
|||
}
|
||||
public function image(){
|
||||
if (filesize($this->path) <= 1024*10) {//小于10k 不再生成缩略图
|
||||
file_proxy_out($this->path);
|
||||
file_put_out($this->path);
|
||||
}
|
||||
load_class('imageThumb');
|
||||
$image= $this->path;
|
||||
$image_md5 = md5_file($image);//文件md5
|
||||
if (strlen($image_md5)<5) {
|
||||
$image_md5 = md5($image);
|
||||
$image_thum = $this->config['pic_thumb'].$image_md5.'.png';
|
||||
if (!is_dir($this->config['pic_thumb'])){
|
||||
mkdir($this->config['pic_thumb'],"0777");
|
||||
}
|
||||
|
||||
$image_thum = DATA_THUMB.$image_md5.'.png';
|
||||
if (!is_dir(DATA_THUMB)){
|
||||
mkdir(DATA_THUMB,"0777");
|
||||
}
|
||||
if (!file_exists($image_thum)){//如果拼装成的url不存在则没有生成过
|
||||
if ($_SESSION['this_path']==$this->config['pic_thumb']){//当前目录则不生成缩略图
|
||||
if ($_SESSION['this_path']==DATA_THUMB){//当前目录则不生成缩略图
|
||||
$image_thum=$this->path;
|
||||
}else {
|
||||
$cm=new CreatMiniature();
|
||||
|
|
@ -497,7 +574,7 @@ class explorer extends Controller{
|
|||
$image_thum=STATIC_PATH.'images/image.png';
|
||||
}
|
||||
//输出
|
||||
file_proxy_out($image_thum);
|
||||
file_put_out($image_thum);
|
||||
}
|
||||
|
||||
// 远程下载
|
||||
|
|
@ -508,16 +585,20 @@ class explorer extends Controller{
|
|||
if (isset($_SESSION[$uuid])){
|
||||
$info = $_SESSION[$uuid];
|
||||
$result = array(
|
||||
'uuid' => $this->in['uuid'],
|
||||
'length' => (int)$info['length'],
|
||||
'size' => (int)filesize($info['path']),
|
||||
'size' => (int)filesize($info['path'].'.download'),
|
||||
'time' => mtime()
|
||||
);
|
||||
show_json($result);
|
||||
}else{
|
||||
show_json('',false);
|
||||
}
|
||||
}else if($this->in['type'] == 'remove'){//取消下载;文件被删掉则自动停止
|
||||
del_file($_SESSION[$uuid]['path']);
|
||||
unset($_SESSION[$uuid]);
|
||||
show_json('',false);
|
||||
}
|
||||
|
||||
//下载
|
||||
$save_path = _DIR($this->in['save_path']);
|
||||
if (!is_writeable($save_path)) show_json($this->L['no_permission_write'],false);
|
||||
|
|
@ -527,7 +608,7 @@ class explorer extends Controller{
|
|||
if (!$header) show_json($this->L['download_error_exists'],false);
|
||||
|
||||
$save_path = $save_path.urldecode($header['name']);
|
||||
if (!checkExt($save_path)) $save_path = $_DIR($this->in['save_path']).date().'.temp';
|
||||
if (!checkExt($save_path)) $save_path = _DIR($this->in['save_path']).date().'.temp';
|
||||
|
||||
$save_path = iconv_system($save_path);
|
||||
$save_path = get_filename_auto($save_path);
|
||||
|
|
@ -544,10 +625,16 @@ class explorer extends Controller{
|
|||
}
|
||||
}
|
||||
|
||||
// 远程下载
|
||||
public function fileProxy() {
|
||||
if (!$GLOBALS['is_root']) show_json($this->L['no_permission'],false);
|
||||
file_proxy_out($this->path);
|
||||
//生成临时文件key
|
||||
public function makeFileProxy(){
|
||||
load_class('mcrypt');
|
||||
$pass = $this->config['setting_system']['system_password'];
|
||||
$fid = Mcrypt::encode($this->path,$pass,60*50*24);
|
||||
show_json($fid);
|
||||
}
|
||||
//代理输出
|
||||
public function fileProxy(){
|
||||
file_put_out($this->path);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -555,7 +642,8 @@ class explorer extends Controller{
|
|||
*/
|
||||
public function fileUpload(){
|
||||
$save_path = $this->path;
|
||||
if (!is_writeable($save_path)) show_json('path is not writeable',false);
|
||||
if (!is_writeable($save_path)) show_json($this->L['no_permission_write'],false);
|
||||
|
||||
if ($save_path == '') show_json($this->L['upload_error_big'],false);
|
||||
if (strlen($this->in['fullPath']) > 1) {//folder drag upload
|
||||
$full_path = _DIR_CLEAR(rawurldecode($this->in['fullPath']));
|
||||
|
|
@ -565,18 +653,79 @@ class explorer extends Controller{
|
|||
$save_path = $save_path.$full_path;
|
||||
}
|
||||
}
|
||||
upload('file',$save_path);
|
||||
//upload('file',$save_path);
|
||||
//分片上传
|
||||
$temp_dir = USER_TEMP;
|
||||
mk_dir($temp_dir);
|
||||
if (!is_writeable($temp_dir)) show_json($this->L['no_permission_write'],false);
|
||||
upload_chunk('file',$save_path,$temp_dir);
|
||||
}
|
||||
|
||||
//share list
|
||||
private function path_share(){
|
||||
$path_hidden = $this->config['setting_system']['path_hidden'];
|
||||
$ex_name = explode(',',$path_hidden);
|
||||
|
||||
$userShare = init_controller('userShare');
|
||||
$share_list = $userShare->get();
|
||||
$list = array(
|
||||
'folderlist' => array(),
|
||||
'filelist' => array(),
|
||||
'share_list' => $share_list,
|
||||
'path_type' => "writeable"
|
||||
);
|
||||
foreach ($share_list as $key => $value) {
|
||||
$value['path'] = $key;
|
||||
$value['atime']='';$value['ctime']='';
|
||||
$value['mode']='';$value['is_readable'] = 1;$value['is_writable'] = 1;
|
||||
$value['exists'] = intval(file_exists(_DIR($share_list[$key]['path'])));
|
||||
if ($value['type']=='file') {
|
||||
if(in_array($val['name'],$ex_name)) continue;
|
||||
$value['ext'] = get_path_ext($share_list[$key]['path']);
|
||||
$list['filelist'][] = $value;
|
||||
}else{
|
||||
if(in_array($val['name'],$ex_name)) continue;
|
||||
$list['folderlist'][] = $value;
|
||||
}
|
||||
}
|
||||
return $list;
|
||||
}
|
||||
|
||||
//获取文件列表&哦exe文件json解析
|
||||
private function path($dir,$list_file=true,$check_children=false){
|
||||
$path_hidden = $this->config['setting_system']['path_hidden'];
|
||||
$ex_name = explode(',',$path_hidden);
|
||||
if (strstr($dir,"*share*")) {
|
||||
return $this->path_share();
|
||||
}
|
||||
|
||||
$list = path_list($dir,$list_file,$check_children);
|
||||
foreach ($list['filelist'] as $key => &$val) {
|
||||
$filelist_new = array();
|
||||
$folderlist_new = array();
|
||||
foreach ($list['filelist'] as $key => $val) {
|
||||
if (in_array($val['name'],$ex_name)) continue;
|
||||
if ($val['ext'] == 'oexe'){
|
||||
$path = iconv_system($val['path']).'/'.iconv_system($val['name']);
|
||||
$json = json_decode(file_get_contents($path),true);
|
||||
if(is_array($json)) $list['filelist'][$key] = array_merge($val,$json);
|
||||
if(is_array($json)) $val = array_merge($val,$json);
|
||||
}
|
||||
$filelist_new[] = $val;
|
||||
}
|
||||
foreach ($list['folderlist'] as $key => $val) {
|
||||
if (in_array($val['name'],$ex_name)) continue;
|
||||
$folderlist_new[] = $val;
|
||||
}
|
||||
$list['filelist'] = $filelist_new;
|
||||
$list['folderlist'] = $folderlist_new;
|
||||
|
||||
//读写权限判断
|
||||
$list['path_type'] = 'readable';
|
||||
if (is_writable($dir)) {
|
||||
$list['path_type'] = 'writeable';
|
||||
}else if (!is_readable($dir)) {
|
||||
$list['path_type'] = 'not_readable';
|
||||
}
|
||||
|
||||
_DIR_OUT($list);
|
||||
return $list;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ class group extends Controller{
|
|||
private $sql;
|
||||
function __construct() {
|
||||
parent::__construct();
|
||||
$this->sql=new fileCache($this->config['system_file']['group']);
|
||||
$this->sql=new fileCache(USER_SYSTEM.'group.php');
|
||||
}
|
||||
|
||||
public function get() {
|
||||
|
|
@ -37,7 +37,7 @@ class group extends Controller{
|
|||
if ($role_old == 'root') show_json($this->L['default_group_can_not_do'],false);
|
||||
|
||||
if ($this->sql->replace_update($role_old,$this->in['role'],$group)){
|
||||
$member = new fileCache($this->config['system_file']['member']);
|
||||
$member = new fileCache(USER_SYSTEM.'member.php');
|
||||
if ($member -> update('role',$this->in['role'],$role_old)) {
|
||||
show_json($this->L['success']);
|
||||
}
|
||||
|
|
@ -54,7 +54,7 @@ class group extends Controller{
|
|||
if (!$role) show_json($this->L["groupname_can_not_null"],false);
|
||||
if ($role == 'root') show_json($this->L['default_group_can_not_do'],false);
|
||||
if($this->sql->delete($role)){
|
||||
$member = new fileCache($this->config['system_file']['member']);
|
||||
$member = new fileCache(USER_SYSTEM.'member.php');
|
||||
$member -> update('role','',$role);//改组用户设置为空
|
||||
show_json($this->L['success']);
|
||||
}
|
||||
|
|
@ -76,10 +76,10 @@ class group extends Controller{
|
|||
foreach ($this->config['role_setting'] as $key => $actions) {
|
||||
foreach ($actions as $action) {
|
||||
$k = $key.':'.$action;
|
||||
if (isset($this->in[$k])) {
|
||||
if (isset($this->in[$k])){
|
||||
$role_arr[$k] = 1;
|
||||
}else{
|
||||
//$role_arr[$k] = 0;
|
||||
$role_arr[$k] = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,9 +27,12 @@ class member extends Controller{
|
|||
if (!$this->in['name'] ||
|
||||
!$this->in['password'] ||
|
||||
!$this->in['role'] ) show_json($this->L["data_not_full"],false);
|
||||
|
||||
$this->in['name'] = rawurldecode($this->in['name']);
|
||||
$this->in['password'] = rawurldecode($this->in['password']);
|
||||
$user = array(
|
||||
'name' => $this->in['name'],
|
||||
'password' => md5($this->in['password']),
|
||||
'name' => rawurldecode($this->in['name']),
|
||||
'password' => md5(rawurldecode($this->in['password'])),
|
||||
'role' => $this->in['role'],
|
||||
'status' => 0,
|
||||
);
|
||||
|
|
@ -47,6 +50,10 @@ class member extends Controller{
|
|||
if (!$this->in['name'] ||
|
||||
!$this->in['name_to'] ||
|
||||
!$this->in['role_to'] ) show_json($this->L["data_not_full"],false);
|
||||
|
||||
$this->in['name'] = rawurldecode($this->in['name']);
|
||||
$this->in['name_to'] = rawurldecode($this->in['name_to']);
|
||||
$this->in['password_to'] = rawurldecode($this->in['password_to']);
|
||||
if ($this->in['name'] == 'admin') show_json($this->L['default_user_can_not_do'],false);
|
||||
|
||||
//查找到一条记录,修改为该数组
|
||||
|
|
@ -84,9 +91,10 @@ class member extends Controller{
|
|||
*/
|
||||
public function _initUser($name){
|
||||
$root = array('home','recycle','data');
|
||||
$home = array('desktop','doc','download','image','movie','music');
|
||||
$user_path = USER_PATH.$name.'/';
|
||||
$new_user_folder = $this->config['setting_system']['new_user_folder'];
|
||||
$home = explode(',',$new_user_folder);
|
||||
|
||||
$user_path = USER_PATH.$name.'/';
|
||||
mk_dir($user_path);
|
||||
foreach ($root as $dir) {
|
||||
mk_dir($user_path.$dir);
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
|
||||
class setting extends Controller{
|
||||
private $sql;
|
||||
function __construct() {
|
||||
function __construct(){
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
|
|
@ -28,11 +28,42 @@ class setting extends Controller{
|
|||
$this->display($this->in['slider'].'.php');
|
||||
}
|
||||
|
||||
public function php_info(){
|
||||
phpinfo();
|
||||
}
|
||||
public function get_setting(){
|
||||
$setting = $GLOBALS['config']['setting_system']['menu'];
|
||||
show_json($setting);
|
||||
}
|
||||
|
||||
|
||||
//管理员 系统设置全局数据
|
||||
public function system_setting(){
|
||||
$setting_file = USER_SYSTEM.'system_setting.php';
|
||||
$data = json_decode($this->in['data'],true);
|
||||
if (!$data) {
|
||||
show_json($this->L['error'],false);
|
||||
}
|
||||
$setting = $GLOBALS['config']['setting_system'];
|
||||
foreach ($data as $key => $value){
|
||||
$setting[$key] = $value;
|
||||
}
|
||||
//$setting['menu'] = $GLOBALS['config']['setting_menu_default'];
|
||||
//为了保存更多的数据;不直接覆盖文件 $data->setting_file;
|
||||
fileCache::save($setting_file,$setting);
|
||||
show_json($this->L['success']);
|
||||
//show_json($setting);
|
||||
}
|
||||
|
||||
/**
|
||||
* 参数设置
|
||||
* 可以同时修改多个:key=a,b,c&value=1,2,3
|
||||
*/
|
||||
public function set(){
|
||||
$file = $this->config['user_seting_file'];
|
||||
if (!is_writeable($file)) {//配置不可写
|
||||
show_json($this->L['no_permission_write'],false);
|
||||
}
|
||||
$key = $this->in['k'];
|
||||
$value = $this->in['v'];
|
||||
if ($key !='' && $value != '') {
|
||||
|
|
@ -44,7 +75,7 @@ class setting extends Controller{
|
|||
for ($i=0; $i < $num; $i++) {
|
||||
$conf[$arr_k[$i]] = $arr_v[$i];
|
||||
}
|
||||
fileCache::save($this->config['user_seting_file'],$conf);
|
||||
fileCache::save($file,$conf);
|
||||
show_json($this->L["setting_success"]);
|
||||
}else{
|
||||
show_json($this->L['error'],false);
|
||||
|
|
|
|||
|
|
@ -0,0 +1,459 @@
|
|||
<?php
|
||||
/*
|
||||
* @link http://www.kalcaddle.com/
|
||||
* @author warlee | e-mail:kalcaddle@qq.com
|
||||
* @copyright warlee 2014.(Shanghai)Co.,Ltd
|
||||
* @license http://kalcaddle.com/tools/licenses/license.txt
|
||||
*/
|
||||
|
||||
class share extends Controller{
|
||||
private $sql;
|
||||
private $share_info;
|
||||
private $share_path;
|
||||
private $path;
|
||||
function __construct(){
|
||||
parent::__construct();
|
||||
$this->tpl = TEMPLATE.'share/';
|
||||
|
||||
//不需要检查的action
|
||||
$arr_not_check = array('common_js');
|
||||
if (!in_array(ACT,$arr_not_check)){
|
||||
$this->_check_share();
|
||||
$this->_init_info();
|
||||
$this->assign('can_download',$this->share_info['not_download']=='1'?0:1);
|
||||
}
|
||||
//需要检查下载权限的Action
|
||||
$arr_check_download = array('fileDownload','zipDownload');//'fileProxy','fileGet'
|
||||
if (in_array(ACT,$arr_check_download)){
|
||||
if ($this->share_info['not_download']=='1') {
|
||||
show_json($this->L['share_not_download_tips'],false);
|
||||
}
|
||||
}
|
||||
|
||||
// //禁止下载后;也会无法预览 'fileProxy','fileGet'
|
||||
// if (ACT == 'file' && $this->share_info['not_download']=='1') {
|
||||
// $this->error($this->L['share_not_download_tips']);
|
||||
// }
|
||||
}
|
||||
//======//
|
||||
private function _check_share(){
|
||||
if (!isset($this->in['user']) || !isset($this->in['sid'])) {
|
||||
$this->error($this->L['share_error_param']);
|
||||
}
|
||||
//储存该共享基础信息
|
||||
$share_data = USER_PATH.$this->in['user'].'/data/share.php';
|
||||
if (!file_exists($share_data)) {
|
||||
$this->error($this->L['share_error_user']);
|
||||
}
|
||||
$this->sql=new fileCache($share_data);
|
||||
$list = $this->sql->get();
|
||||
if (!isset($list[$this->in['sid']])){
|
||||
$this->error($this->L['share_error_sid']);
|
||||
}
|
||||
|
||||
$this->share_info = $list[$this->in['sid']];
|
||||
$share_info = $this->share_info;
|
||||
//检查是否过期
|
||||
if ($share_info['time'].length!=0) {
|
||||
$date = date_create_from_format('y/m/d',$share_info['time_to']);
|
||||
if (time() > $date) {
|
||||
$this->error($this->L['share_error_time']);
|
||||
}
|
||||
}
|
||||
|
||||
//密码检测
|
||||
if ($share_info['share_password']=='') return;
|
||||
//if ($_SESSION['kod_user']['name']==$this->in['user']) return;
|
||||
|
||||
//提交密码
|
||||
if (!isset($this->in['password'])){
|
||||
//输入密码
|
||||
if ($_SESSION['password_'.$this->in['sid']]==$share_info['share_password']) return;
|
||||
$this->error('password');
|
||||
}else{
|
||||
if ($this->in['password'] == $share_info['share_password']) {
|
||||
session_start();
|
||||
$_SESSION['password_'.$this->in['sid']]=$share_info['share_password'];
|
||||
show_json('success');
|
||||
}else{
|
||||
show_json($this->L['share_error_password'],false);
|
||||
}
|
||||
}
|
||||
}
|
||||
private function _init_info(){
|
||||
//获取用户组,根据是否为root 定义前缀
|
||||
$member = new fileCache(USER_SYSTEM.'member.php');
|
||||
$user = $member->get($this->in['user']);
|
||||
if (!is_array($user) || !isset($user['password'])) {
|
||||
$this->error($this->L['share_error_user']);
|
||||
}
|
||||
define('USER',USER_PATH.$user['name'].'/');
|
||||
define('USER_TEMP',USER.'data/share_temp/');
|
||||
|
||||
$share_path = _DIR_CLEAR($this->share_info['path']);
|
||||
if (substr($share_path,0,strlen('*public*/')) == '*public*/') {
|
||||
$share_path = PUBLIC_PATH.str_replace('*public*/','',$share_path);
|
||||
}else{
|
||||
if ($user['role'] != 'root') {
|
||||
$share_path = USER.'home/'.$share_path;
|
||||
}else{
|
||||
$share_path = _DIR_CLEAR($this->share_info['path']);
|
||||
}
|
||||
}
|
||||
|
||||
if ($this->share_info['type'] != 'file'){
|
||||
$share_path=rtrim($share_path,'/').'/';
|
||||
define('HOME',$share_path);//dir_out时当作前缀剔除;系统
|
||||
}
|
||||
|
||||
$share_path = iconv_system($share_path);
|
||||
if (!file_exists($share_path)) {
|
||||
$this->error($this->L['share_error_path']);
|
||||
}
|
||||
$this->share_path = $share_path;
|
||||
$this->path = $share_path.$this->_clear($this->in['path']);
|
||||
}
|
||||
private function _clear($path){
|
||||
return iconv_system(_DIR_CLEAR(rawurldecode($path)));
|
||||
}
|
||||
private function error($msg){
|
||||
$this->assign('msg',$msg);
|
||||
$this->display('tips.php');
|
||||
exit;
|
||||
}
|
||||
|
||||
//==========================
|
||||
/*
|
||||
* 文件浏览
|
||||
*/
|
||||
public function file() {
|
||||
$this->share_view_add();
|
||||
if ($this->share_info['type']!='file') {
|
||||
$this->share_info['name'] = get_path_this($this->path);
|
||||
}
|
||||
$size = filesize($this->path);
|
||||
$this->share_info['size'] = size_format($size);
|
||||
$this->_assign_info();
|
||||
$this->display('file.php');
|
||||
}
|
||||
/*
|
||||
* 文件夹浏览
|
||||
*/
|
||||
public function folder() {
|
||||
$this->share_view_add();
|
||||
if(isset($this->in['path']) && $this->in['path'] !=''){
|
||||
$dir = '/'._DIR_CLEAR($this->in['path']);
|
||||
}else{
|
||||
$dir = '/';//首次进入系统,不带参数
|
||||
}
|
||||
$dir = '/'.trim($dir,'/').'/';
|
||||
$this->_assign_info();
|
||||
$this->assign('dir',$dir);
|
||||
$this->display('explorer.php');
|
||||
}
|
||||
/*
|
||||
* 代码阅读
|
||||
*/
|
||||
public function code_read() {
|
||||
$this->share_view_add();
|
||||
$this->_assign_info();
|
||||
$this->display('editor.php');
|
||||
}
|
||||
|
||||
//==========================
|
||||
//页面统一注入变量
|
||||
private function _assign_info(){
|
||||
$config = new fileCache(USER.'data/config.php');
|
||||
$config = $config->get();
|
||||
if (count($config)<1) {
|
||||
$config = $GLOBALS['config']['setting_default'];
|
||||
}
|
||||
$this->assign('config_theme',$config['theme']);
|
||||
$this->assign('config_list_type',$config['list_type']);
|
||||
$this->assign('config_sort_field',$config['sort_field']);
|
||||
$this->assign('config_sort_order',$config['sort_order']);
|
||||
$this->assign('config_musictheme',$config['musictheme']);
|
||||
$this->assign('config_movietheme',$config['movietheme']);
|
||||
|
||||
$this->share_info['share_password'] = '';
|
||||
$this->share_info['num_view'] = intval($this->share_info['num_view']);
|
||||
$this->share_info['num_download'] = intval($this->share_info['num_download']);
|
||||
$this->share_info['path'] = get_path_this(iconv_app($this->path));
|
||||
$this->assign('share_info',$this->share_info);
|
||||
}
|
||||
//下载次数统计
|
||||
private function share_download_add(){
|
||||
$num = abs(intval($this->share_info['num_download'])) +1;
|
||||
$this->share_info['num_download'] = $num;
|
||||
$this->sql->update($this->in['sid'],$this->share_info);
|
||||
}
|
||||
//浏览次数统计
|
||||
private function share_view_add(){
|
||||
$num = abs(intval($this->share_info['num_view'])) +1;
|
||||
$this->share_info['num_view'] = $num;
|
||||
$this->sql->update($this->in['sid'],$this->share_info);
|
||||
}
|
||||
|
||||
public function common_js(){
|
||||
$basic_path = BASIC_PATH;
|
||||
if ($GLOBALS['is_root']) {
|
||||
$basic_path = '/';//对非root用户隐藏所有地址
|
||||
}
|
||||
$the_config = array(
|
||||
'lang' => $GLOBALS['language'],
|
||||
'is_root' => 0,
|
||||
'web_root' => '/',
|
||||
'web_host' => HOST,
|
||||
'static_path' => STATIC_PATH,
|
||||
'basic_path' => BASIC_PATH,
|
||||
'version' => KOD_VERSION,
|
||||
'app_host' => APPHOST,
|
||||
'office_server' => OFFICE_SERVER,
|
||||
'json_data' => "",
|
||||
'share_page' => 'share'
|
||||
);
|
||||
|
||||
$js = 'LNG='.json_encode($GLOBALS['L']).';';
|
||||
$js .= 'AUTH=[];';
|
||||
$js .= 'G='.json_encode($the_config).';';
|
||||
header("Content-Type:application/javascript");
|
||||
echo $js;
|
||||
}
|
||||
|
||||
|
||||
//========ajax function============
|
||||
public function pathInfo(){
|
||||
$info_list = json_decode($this->in['list'],true);
|
||||
foreach ($info_list as &$val) {
|
||||
$val['path'] = $this->share_path.$this->_clear($val['path']);
|
||||
}
|
||||
$data = path_info_muti($info_list,$this->L['time_type_info']);
|
||||
_DIR_OUT($data['path']);
|
||||
show_json($data);
|
||||
}
|
||||
public function fileSave(){
|
||||
show_json($this->L['no_permission'],false);
|
||||
}
|
||||
|
||||
// 单文件编辑
|
||||
public function edit(){
|
||||
$default = array(
|
||||
'font_size' => '14px',
|
||||
'theme' => 'clouds',
|
||||
'auto_wrap' => 0,
|
||||
'display_char' => 0,
|
||||
'auto_complete' => 1,
|
||||
'function_list' => 1
|
||||
);
|
||||
$this->_assign_info();
|
||||
$this->assign('editor_config',$default);//获取编辑器配置信息
|
||||
$this->display('edit.php');
|
||||
}
|
||||
public function pathList(){
|
||||
$list=$this->path($this->path);
|
||||
show_json($list);
|
||||
}
|
||||
public function treeList(){
|
||||
$path=$this->path;
|
||||
if (isset($this->in['project'])) {
|
||||
$path = $this->share_path.$this->_clear($this->in['project']);
|
||||
}
|
||||
if (isset($this->in['name'])){
|
||||
$path=$path.'/'.$this->_clear($this->in['name']);
|
||||
}
|
||||
$list_file = ($this->in['app'] == 'editor'?true:false);//编辑器内列出文件
|
||||
$list=$this->path($path,$list_file,true);
|
||||
function sort_by_key($a, $b){
|
||||
if ($a['name'] == $b['name']) return 0;
|
||||
return ($a['name'] > $b['name']) ? 1 : -1;
|
||||
}
|
||||
usort($list['folderlist'], "sort_by_key");
|
||||
usort($list['filelist'], "sort_by_key");
|
||||
|
||||
$result = array_merge($list['folderlist'],$list['filelist']);
|
||||
if ($this->in['app'] != 'editor') {
|
||||
$result =$list['folderlist'];
|
||||
}
|
||||
if ($this->in['type']=='init') {
|
||||
$result = array(
|
||||
array(
|
||||
'name'=>iconv_app(get_path_this($path)),
|
||||
'children'=>$result,
|
||||
'menuType'=>"menuTreeRoot",
|
||||
'open'=>true,
|
||||
'this_path'=> '/',
|
||||
'isParent'=>count($result)>0?true:false
|
||||
)
|
||||
);
|
||||
}
|
||||
show_json($result);
|
||||
}
|
||||
|
||||
public function search(){
|
||||
if (!isset($this->in['search'])) show_json($this->L['please_inpute_search_words'],false);
|
||||
$is_content = false;
|
||||
$is_case = false;
|
||||
$ext = '';
|
||||
if (isset($this->in['is_content'])) $is_content = true;
|
||||
if (isset($this->in['is_case'])) $is_case = true;
|
||||
if (isset($this->in['ext'])) $ext= str_replace(' ','',$this->in['ext']);
|
||||
$list = path_search(
|
||||
$this->path,
|
||||
iconv_system($this->in['search']),
|
||||
$is_content,$ext,$is_case);
|
||||
_DIR_OUT($list);
|
||||
show_json($list);
|
||||
}
|
||||
|
||||
|
||||
//代理输出
|
||||
public function fileProxy(){
|
||||
file_put_out($this->path);
|
||||
}
|
||||
public function fileDownload(){
|
||||
$this->share_download_add();
|
||||
file_put_out($this->path,true);
|
||||
}
|
||||
//文件下载后删除,用于文件夹下载
|
||||
public function fileDownloadRemove(){
|
||||
if ($this->share_info['not_download']=='1') {
|
||||
show_json($this->L['share_not_download_tips'],false);
|
||||
}
|
||||
$path = rawurldecode(_DIR_CLEAR($this->in['path']));
|
||||
$path = USER_TEMP.iconv_system($path);
|
||||
file_put_out($path,true);
|
||||
del_file($path);
|
||||
}
|
||||
public function zipDownload(){
|
||||
$this->share_download_add();
|
||||
if(!file_exists(USER_TEMP)){
|
||||
mkdir(USER_TEMP);
|
||||
}else{//清除未删除的临时文件,一天前
|
||||
$list = path_list(USER_TEMP,true,false);
|
||||
$max_time = 3600*24;
|
||||
if ($list['filelist']>=1) {
|
||||
for ($i=0; $i < count($list['filelist']); $i++) {
|
||||
$create_time = $list['filelist'][$i]['mtime'];//最后修改时间
|
||||
if(time() - $create_time >$max_time){
|
||||
del_file($list['filelist'][$i]['path'].$list['filelist'][$i]['name']);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
$zip_file = $this->zip(USER_TEMP);
|
||||
show_json($this->L['zip_success'],true,get_path_this($zip_file));
|
||||
}
|
||||
private function zip($zip_path){
|
||||
if (!isset($zip_path)) {
|
||||
show_json($this->L['share_not_download_tips'],false);
|
||||
}
|
||||
load_class('pclzip');
|
||||
ini_set('memory_limit', '2028M');//2G;
|
||||
$zip_list = json_decode($this->in['list'],true);
|
||||
$list_num = count($zip_list);
|
||||
for ($i=0; $i<$list_num; $i++) {
|
||||
$zip_list[$i]['path'] = _DIR_CLEAR($this->path.$this->_clear($zip_list[$i]['path']));
|
||||
}
|
||||
|
||||
//指定目录
|
||||
if ($list_num == 1) {
|
||||
$path_this_name=get_path_this($zip_list[0]['path']);
|
||||
}else{
|
||||
$path_this_name=get_path_this(get_path_father($zip_list[0]['path']));
|
||||
}
|
||||
$zipname = $zip_path.$path_this_name.'.zip';
|
||||
$zipname = get_filename_auto($zipname,date(' h.i.s'));
|
||||
$files = array();
|
||||
for ($i=0; $i < $list_num; $i++) {
|
||||
$files[] = $zip_list[$i]['path'];
|
||||
}
|
||||
$remove_path_pre = get_path_father($zip_list[0]['path']);
|
||||
$archive = new PclZip($zipname);
|
||||
$v_list = $archive->create(implode(',',$files),PCLZIP_OPT_REMOVE_PATH,$remove_path_pre);
|
||||
return iconv_app($zipname);
|
||||
}
|
||||
|
||||
// 获取文件数据
|
||||
public function fileGet(){
|
||||
$name = $this->_clear($this->in['filename']);
|
||||
$filename= $this->share_path.$name;
|
||||
if (filesize($filename) >= 1024*1024*20) show_json($this->L['edit_too_big'],false);
|
||||
|
||||
$filecontents=file_get_contents($filename);//文件内容
|
||||
$charset=$this->_get_charset($filecontents);
|
||||
if ($charset!='' || $charset!='utf-8') {
|
||||
$filecontents=mb_convert_encoding($filecontents,'utf-8',$charset);
|
||||
}
|
||||
$data = array(
|
||||
'ext' => get_path_ext($name),
|
||||
'name' => iconv_app($name),
|
||||
'filename' => $name,
|
||||
'charset' => $charset,
|
||||
'content' => $filecontents
|
||||
);
|
||||
show_json($data);
|
||||
}
|
||||
private function _get_charset(&$str) {
|
||||
if ($str == '') return 'utf-8';
|
||||
//前面检测成功则,自动忽略后面
|
||||
$charset=strtolower(mb_detect_encoding($str,$this->config['check_charset']));
|
||||
if (substr($str,0,3)==chr(0xEF).chr(0xBB).chr(0xBF)){
|
||||
$charset='utf-8';
|
||||
}else if($charset=='cp936'){
|
||||
$charset='gbk';
|
||||
}
|
||||
if ($charset == 'ascii') $charset = 'utf-8';
|
||||
return strtolower($charset);
|
||||
}
|
||||
|
||||
|
||||
public function image(){
|
||||
if (filesize($this->path) <= 1024*10) {//小于10k 不再生成缩略图
|
||||
file_put_out($this->path);
|
||||
}
|
||||
load_class('imageThumb');
|
||||
$image= $this->path;
|
||||
$image_thum = DATA_THUMB.md5($image).'.png';
|
||||
if (!is_dir(DATA_THUMB)){
|
||||
mkdir(DATA_THUMB,"0777");
|
||||
}
|
||||
if (!file_exists($image_thum)){//如果拼装成的url不存在则没有生成过
|
||||
if ($_SESSION['this_path']==DATA_THUMB){//当前目录则不生成缩略图
|
||||
$image_thum=$this->path;
|
||||
}else {
|
||||
$cm=new CreatMiniature();
|
||||
$cm->SetVar($image,'file');
|
||||
//$cm->Prorate($image_thum,72,64);//生成等比例缩略图
|
||||
$cm->BackFill($image_thum,72,64,true);//等比例缩略图,空白处填填充透明色
|
||||
}
|
||||
}
|
||||
if (!file_exists($image_thum) || filesize($image_thum)<100){//缩略图生成失败则用默认图标
|
||||
$image_thum=STATIC_PATH.'images/image.png';
|
||||
}
|
||||
file_put_out($image_thum);
|
||||
}
|
||||
|
||||
//获取文件列表&哦exe文件json解析
|
||||
private function path($dir,$list_file=true,$check_children=false){
|
||||
$list = path_list($dir,$list_file,$check_children);
|
||||
|
||||
$file_parem = array('filelist'=>array(),'folderlist'=>array());
|
||||
$path_hidden = $this->config['setting_system']['path_hidden'];
|
||||
$ex_name = explode(',',$path_hidden);
|
||||
foreach ($list['filelist'] as $key => $val) {
|
||||
if (in_array($val['name'],$ex_name)) continue;
|
||||
if ($val['ext'] == 'oexe'){
|
||||
$path = iconv_system($val['path']).'/'.iconv_system($val['name']);
|
||||
$json = json_decode(file_get_contents($path),true);
|
||||
if(is_array($json)) $val = array_merge($val,$json);
|
||||
}
|
||||
$file_parem['filelist'][] = $val;
|
||||
}
|
||||
foreach ($list['folderlist'] as $key => $val) {
|
||||
if (in_array($val['name'],$ex_name)) continue;
|
||||
$file_parem['folderlist'][] = $val;
|
||||
}
|
||||
_DIR_OUT($file_parem);
|
||||
return $file_parem;
|
||||
}
|
||||
}
|
||||
|
|
@ -14,19 +14,29 @@ class user extends Controller
|
|||
function __construct(){
|
||||
parent::__construct();
|
||||
$this->tpl = TEMPLATE . 'user/';
|
||||
if(!isset($_SESSION)){//避免session不可写导致循环跳转
|
||||
$this->login("session write error!");
|
||||
}else{
|
||||
$this->user = &$_SESSION['kod_user'];
|
||||
$this->notCheck = array('loginFirst','loginSubmit','checkCode');//不需要判断的action
|
||||
}
|
||||
//不需要判断的action
|
||||
$this->notCheck = array('loginFirst','login','logout','loginSubmit','checkCode','public_link');
|
||||
}
|
||||
|
||||
/**
|
||||
* 登陆状态检测;并初始化数据状态
|
||||
*/
|
||||
public function loginCheck(){
|
||||
if(isset($_SESSION['kod_login']) && $_SESSION['kod_login'] === true){
|
||||
if (ST == 'share') return true;//共享页面
|
||||
if(in_array(ACT,$this->notCheck)){//不需要判断的action
|
||||
return;
|
||||
}else if(isset($_SESSION['kod_login']) && $_SESSION['kod_login'] === true){
|
||||
define('USER',USER_PATH.$this->user['name'].'/');
|
||||
define('USER_TEMP',USER.'data/temp/');
|
||||
define('USER_RECYCLE',USER.'recycle/');
|
||||
|
||||
if (!file_exists(USER)) {
|
||||
$this->logout();
|
||||
return;
|
||||
}
|
||||
if ($this->user['role'] == 'root') {
|
||||
define('MYHOME',USER.'home/');
|
||||
|
|
@ -39,14 +49,16 @@ class user extends Controller
|
|||
$GLOBALS['web_root'] = str_replace(WEB_ROOT,'',HOME);//从服务器开始到用户目录
|
||||
$GLOBALS['is_root'] = 0;
|
||||
}
|
||||
$this->config['user_share_file'] = USER.'data/share.php'; // 收藏夹文件存放地址.
|
||||
$this->config['user_fav_file'] = USER.'data/fav.php'; // 收藏夹文件存放地址.
|
||||
$this->config['user_seting_file'] = USER.'data/config.php'; //用户配置文件
|
||||
$this->config['user'] = fileCache::load($this->config['user_seting_file']);
|
||||
return;
|
||||
}else if(in_array(ACT,$this->notCheck)){//不需要判断的action
|
||||
if(count($this->config['user'])<1){
|
||||
$this->config['user'] = $this->config['setting_default'];
|
||||
}
|
||||
return;
|
||||
}else if(isset($_COOKIE['kod_name']) && isset($_COOKIE['kod_token'])){
|
||||
$member = new fileCache($this->config['system_file']['member']);
|
||||
$member = new fileCache(USER_SYSTEM.'member.php');
|
||||
$user = $member->get($_COOKIE['kod_name']);
|
||||
if (!is_array($user) || !isset($user['password'])) {
|
||||
$this->login();
|
||||
|
|
@ -60,15 +72,71 @@ class user extends Controller
|
|||
header('location:'.get_url());
|
||||
exit;
|
||||
}
|
||||
}else{
|
||||
if ($this->config['setting_system']['auto_login'] != '1') {
|
||||
$this->logout();//不自动登录
|
||||
}else{
|
||||
if (!file_exists(USER_SYSTEM.'install.lock')) {
|
||||
$this->display('install.html');exit;
|
||||
}
|
||||
header('location:./index.php?user/loginSubmit&name=guest&password=guest');
|
||||
}
|
||||
}
|
||||
$this->login();
|
||||
}
|
||||
|
||||
//临时文件访问
|
||||
public function public_link(){
|
||||
load_class('mcrypt');
|
||||
$pass = $this->config['setting_system']['system_password'];
|
||||
$path = Mcrypt::decode($this->in['fid'],$pass);
|
||||
if (strlen($path) == 0) {
|
||||
show_json($this->L['error'],false);
|
||||
}
|
||||
file_put_out($path);
|
||||
}
|
||||
public function common_js(){
|
||||
$basic_path = BASIC_PATH;
|
||||
if ($GLOBALS['is_root']) {
|
||||
$basic_path = '/';//对非root用户隐藏所有地址
|
||||
}
|
||||
$the_config = array(
|
||||
'lang' => $GLOBALS['language'],
|
||||
'is_root' => $GLOBALS['is_root'],
|
||||
'web_root' => $GLOBALS['web_root'],
|
||||
'web_host' => HOST,
|
||||
'static_path' => STATIC_PATH,
|
||||
'basic_path' => BASIC_PATH,
|
||||
'version' => KOD_VERSION,
|
||||
'app_host' => APPHOST,
|
||||
'office_server' => OFFICE_SERVER,
|
||||
'myhome' => MYHOME,
|
||||
'upload_max' => get_post_max(),
|
||||
'json_data' => "",
|
||||
|
||||
'theme' => $this->config['user']['theme'], //列表排序依照的字段
|
||||
'list_type' => $this->config['user']['list_type'], //列表排序依照的字段
|
||||
'sort_field' => $this->config['user']['list_sort_field'], //列表排序依照的字段
|
||||
'sort_order' => $this->config['user']['list_sort_order'], //列表排序升序or降序
|
||||
'musictheme' => $this->config['user']['musictheme'],
|
||||
'movietheme' => $this->config['user']['movietheme']
|
||||
);
|
||||
|
||||
$js = 'LNG='.json_encode($GLOBALS['L']).';';
|
||||
$js .= 'AUTH='.json_encode($GLOBALS['auth']).';';
|
||||
$js .= 'G='.json_encode($the_config).';';
|
||||
header("Content-Type:application/javascript");
|
||||
echo $js;
|
||||
}
|
||||
|
||||
/**
|
||||
* 登陆view
|
||||
*/
|
||||
public function login($msg = ''){
|
||||
// session_start();
|
||||
// setcookie('kod_name', null, time()-3600);
|
||||
// setcookie('kod_token', null, time()-3600);
|
||||
// setcookie('kod_user_language', '', time()-3600);
|
||||
// session_destroy();
|
||||
if (!file_exists(USER_SYSTEM.'install.lock')) {
|
||||
$this->display('install.html');exit;
|
||||
}
|
||||
|
|
@ -82,17 +150,16 @@ class user extends Controller
|
|||
*/
|
||||
public function loginFirst(){
|
||||
touch(USER_SYSTEM.'install.lock');
|
||||
header('location:./index.php');
|
||||
header('location:./index.php?user/login');
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 退出处理
|
||||
*/
|
||||
public function logout(){
|
||||
session_start();
|
||||
setcookie('kod_name', null, time()-3600);
|
||||
setcookie('kod_token', null, time()-3600);
|
||||
setcookie('kod_name', '', time()-3600);
|
||||
setcookie('kod_token', '', time()-3600);
|
||||
setcookie('kod_user_language', '', time()-3600);
|
||||
session_destroy();
|
||||
header('location:./index.php?user/login');
|
||||
}
|
||||
|
|
@ -105,35 +172,37 @@ class user extends Controller
|
|||
$msg = $this->L['login_not_null'];
|
||||
}else{
|
||||
//错误三次输入验证码
|
||||
session_start();//re start
|
||||
$name = $this->in['name'];
|
||||
$name = rawurldecode($this->in['name']);
|
||||
$password = rawurldecode($this->in['password']);
|
||||
|
||||
session_start();//re start 有新的修改后调用
|
||||
if(isset($_SESSION['code_error_time']) &&
|
||||
intval($_SESSION['code_error_time']) >=3 &&
|
||||
$_SESSION['check_code'] !== strtolower($this->in['check_code'])){
|
||||
// pr($_SESSION['check_code'].'--'.strtolower($this->in['check_code']));exit;
|
||||
$this->login($this->L['code_error']);
|
||||
}
|
||||
$member = new fileCache($this->config['system_file']['member']);
|
||||
$member = new fileCache(USER_SYSTEM.'member.php');
|
||||
$user = $member->get($name);
|
||||
if ($user ===false){
|
||||
$msg = $this->L['user_not_exists'];
|
||||
$_SESSION['code_error_time'] = intval($_SESSION['code_error_time']) + 1;
|
||||
}else if(md5($this->in['password'])==$user['password']){
|
||||
}else if(md5($password)==$user['password']){
|
||||
if($user['status'] == 0){//初始化app
|
||||
$this->init_app($user);
|
||||
$app = init_controller('app');
|
||||
$app->init_app($user);
|
||||
}
|
||||
$group = new fileCache($this->config['system_file']['group']);
|
||||
$_SESSION['kod_login'] = true;
|
||||
$_SESSION['kod_user']= $user;
|
||||
if ($this->in['rember_password'] == 'on') {
|
||||
setcookie('kod_name', $user['name'], time()+3600*24*365);
|
||||
setcookie('kod_token',md5($user['password'].get_client_ip()), time()+3600*24*365);
|
||||
if ($this->in['rember_password'] == '1') {
|
||||
setcookie('kod_token',md5($user['password'].get_client_ip()),time()+3600*24*365);
|
||||
}
|
||||
header('location:./index.php');
|
||||
return;
|
||||
}else{
|
||||
$_SESSION['code_error_time'] = intval($_SESSION['code_error_time']) + 1;
|
||||
$msg = $this->L['password_error'];
|
||||
}
|
||||
$_SESSION['code_error_time'] = intval($_SESSION['code_error_time']) + 1;
|
||||
}
|
||||
$this->login($msg);
|
||||
}
|
||||
|
|
@ -146,7 +215,7 @@ class user extends Controller
|
|||
$password_new=$this->in['password_new'];
|
||||
if (!$password_now && !$password_new)show_json($this->L['password_not_null'],false);
|
||||
if ($this->user['password']==md5($password_now)){
|
||||
$sql=new fileCache($this->config['system_file']['member']);
|
||||
$sql=new fileCache(USER_SYSTEM.'member.php');
|
||||
$this->user['password'] = md5($password_new);
|
||||
$sql->update($this->user['name'],$this->user);
|
||||
setcookie('kod_token',md5(md5($password_new)),time()+3600*24*365);
|
||||
|
|
@ -163,86 +232,55 @@ class user extends Controller
|
|||
if (isset($GLOBALS['is_root']) && $GLOBALS['is_root'] == 1) return;
|
||||
if (in_array(ACT,$this->notCheck)) return;
|
||||
if (!array_key_exists(ST,$this->config['role_setting']) ) return;
|
||||
if (!in_array(ACT,$this->config['role_setting'][ST])) return;
|
||||
if (!in_array(ACT,$this->config['role_setting'][ST]) &&
|
||||
ST.':'.ACT != 'user:common_js') return;//输出处理过的权限
|
||||
|
||||
//有权限限制的函数
|
||||
$key = ST.':'.ACT;
|
||||
$group = new fileCache($this->config['system_file']['group']);
|
||||
$GLOBALS['auth'] = $auth = $group->get($this->user['role']);
|
||||
$group = new fileCache(USER_SYSTEM.'group.php');
|
||||
$auth= $group->get($this->user['role']);
|
||||
|
||||
//默认扩张功能等价权限
|
||||
|
||||
//向下版本兼容处理
|
||||
//未定义;新版本首次使用默认开放的功能
|
||||
if(!isset($auth['userShare:set'])){
|
||||
$auth['userShare:set'] = 1;
|
||||
}
|
||||
if(!isset($auth['explorer:fileDownload'])){
|
||||
$auth['explorer:fileDownload'] = 0;
|
||||
}
|
||||
//默认扩展功能 等价权限
|
||||
$auth['user:common_js'] = 1;//权限数据配置后输出到前端
|
||||
$auth['explorer:pathChmod'] = $auth['explorer:pathRname'];
|
||||
$auth['explorer:pathDeleteRecycle'] = $auth['explorer:pathDelete'];
|
||||
$auth['explorer:pathCopyDrag'] = $auth['explorer:pathCuteDrag'];
|
||||
if ($auth[$key] !== 1) show_json($this->L['no_permission'],false);
|
||||
$auth['explorer:fileDownloadRemove']= $auth['explorer:fileDownload'];
|
||||
$auth['explorer:zipDownload'] = $auth['explorer:fileDownload'];
|
||||
$auth['explorer:fileProxy'] = $auth['explorer:fileDownload'];
|
||||
$auth['explorer:makeFileProxy'] = $auth['explorer:fileDownload'];
|
||||
$auth['userShare:del'] = $auth['userShare:set'];
|
||||
if ($auth[$key] != 1) show_json($this->L['no_permission'],false);
|
||||
|
||||
$GLOBALS['auth'] = $auth;//全局
|
||||
//扩展名限制:新建文件&上传文件&重命名文件&保存文件&zip解压文件
|
||||
$check_arr = array(
|
||||
'mkfile' => isset($this->in['path'])?$this->in['path']:'',
|
||||
'pathRname' => isset($this->in['rname_to'])?$this->in['rname_to']:'',
|
||||
'mkfile' => $this->check_key('path'),
|
||||
'pathRname' => $this->check_key('rname_to'),
|
||||
'fileUpload'=> isset($_FILES['file']['name'])?$_FILES['file']['name']:'',
|
||||
'fileSave' => isset($this->in['path'])?$this->in['path']:''
|
||||
'fileSave' => $this->check_key('path')
|
||||
);
|
||||
if (array_key_exists(ACT,$check_arr) && !checkExt($check_arr[ACT])){
|
||||
show_json($this->L['no_permission_ext'],false);
|
||||
}
|
||||
}
|
||||
|
||||
private function check_key($key){
|
||||
return isset($this->in[$key])? rawurldecode($this->in[$key]):'';
|
||||
}
|
||||
|
||||
public function checkCode() {
|
||||
session_start();//re start
|
||||
header("Content-type: image/png");
|
||||
$fontsize = 18;$len = 4;
|
||||
$width = 70;$height=27;
|
||||
$im = @imagecreatetruecolor($width, $height) or die("create image error!");
|
||||
$background_color = imagecolorallocate($im, 255, 255, 255);
|
||||
imagefill($im, 0, 0, $background_color);
|
||||
for ($i = 0; $i < 2000; $i++) {//获取随机淡色
|
||||
$line_color = imagecolorallocate($im, mt_rand(180,255),mt_rand(160, 255),mt_rand(100, 255));
|
||||
imageline($im,mt_rand(0,$width),mt_rand(0,$height), //画直线
|
||||
mt_rand(0,$width), mt_rand(0,$height),$line_color);
|
||||
imagearc($im,mt_rand(0,$width),mt_rand(0,$height), //画弧线
|
||||
mt_rand(0,$width), mt_rand(0,$height), $height, $width,$line_color);
|
||||
}
|
||||
$border_color = imagecolorallocate($im, 160, 160, 160);
|
||||
imagerectangle($im, 0, 0, $width-1, $height-1, $border_color);//画矩形,边框颜色200,200,200
|
||||
|
||||
$str = "ABCDEFGHJKMNPQRSTUVWXYZabcdefghjkmnpqrstuvwxyz23456789";
|
||||
$code = '';
|
||||
for ($i = 0; $i < $len; $i++) {//写入随机字串
|
||||
$current = $str[mt_rand(0, strlen($str)-1)];
|
||||
$text_color = imagecolorallocate($im,mt_rand(30, 140),mt_rand(30,140),mt_rand(30,140));
|
||||
imagechar($im,10,$i*$fontsize+6,rand(1,$height/3),$current,$text_color);
|
||||
$code.= $current;
|
||||
}
|
||||
imagepng($im);//显示图
|
||||
imagedestroy($im);//销毁图片
|
||||
$code = rand_string(4);
|
||||
$_SESSION['check_code'] = strtolower($code);
|
||||
}
|
||||
|
||||
/**
|
||||
* 用户app初始化
|
||||
*/
|
||||
public function init_app($user) {
|
||||
$sql=new fileCache($this->config['system_file']['apps']);
|
||||
$list = $sql->get();
|
||||
|
||||
$default = array('365日历','pptv直播','ps','qq音乐','搜狐影视',
|
||||
'时钟','水果忍者','计算器','豆瓣电台','音悦台');
|
||||
$info = array();
|
||||
foreach ($default as $key) {
|
||||
$info[$key] = $list[$key];
|
||||
}
|
||||
$desktop = USER_PATH.$user['name'].'/home/desktop/';
|
||||
foreach ($info as $key => $data) {
|
||||
//touch($path);
|
||||
$path = iconv_system($desktop.$key.'.oexe');
|
||||
unset($data['name']);
|
||||
unset($data['desc']);
|
||||
unset($data['group']);
|
||||
file_put_contents($path, json_encode($data));
|
||||
}
|
||||
$user['status'] = 1;
|
||||
$member = new fileCache($this->config['system_file']['member']);
|
||||
$member->update($user['name'],$user);
|
||||
check_code($code);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,93 @@
|
|||
<?php
|
||||
/*
|
||||
* @link http://www.kalcaddle.com/
|
||||
* @author warlee | e-mail:kalcaddle@qq.com
|
||||
* @copyright warlee 2014.(Shanghai)Co.,Ltd
|
||||
* @license http://kalcaddle.com/tools/licenses/license.txt
|
||||
*/
|
||||
class userShare extends Controller{
|
||||
private $sql;
|
||||
function __construct(){
|
||||
parent::__construct();
|
||||
$this->sql=new fileCache($this->config['user_share_file']);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取
|
||||
*/
|
||||
public function get() {
|
||||
return $this->sql->get();
|
||||
}
|
||||
public function checkByPath(){
|
||||
$share_list = $this->sql->get('path','',$this->in['path']);
|
||||
//show_json($this->sql->get(),true,$this->in['path']);
|
||||
|
||||
if (count($share_list)==0) {
|
||||
show_json('',false);//没有找到
|
||||
}else{
|
||||
$val = array_values($share_list);
|
||||
show_json($val[0],true);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑
|
||||
*/
|
||||
public function set(){
|
||||
$share_info = $this->_getData();
|
||||
|
||||
//含有sid则为更新,否则为插入
|
||||
if (isset($this->in['sid']) && strlen($this->in['sid']) == 8) {
|
||||
$info_new = $this->sql->get($this->in['sid']);
|
||||
//只更新指定key
|
||||
foreach ($share_info as $key=>$val) {
|
||||
$info_new[$key] = $val;
|
||||
}
|
||||
if($this->sql->update($this->in['sid'],$info_new)){
|
||||
show_json($info_new,true);
|
||||
}
|
||||
show_json($this->L['error'],false);
|
||||
}else{//插入
|
||||
$share_list = $this->sql->get();
|
||||
$new_id = rand_string(8);
|
||||
while (isset($share_list[$new_id])) {
|
||||
$new_id = rand_string(8);
|
||||
}
|
||||
$share_info['sid'] = $new_id;
|
||||
if($this->sql->add($new_id,$share_info)){
|
||||
show_json($share_info,true);
|
||||
}
|
||||
show_json($this->L['error'],false);
|
||||
}
|
||||
show_json($this->L['error'],false);
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除
|
||||
*/
|
||||
public function del() {
|
||||
$list = json_decode($this->in['list'],true);
|
||||
foreach ($list as $val) {
|
||||
$this->sql->delete($val['path']);
|
||||
}
|
||||
show_json($this->L['success'],true);
|
||||
}
|
||||
|
||||
public function _getData(){
|
||||
if (!$this->in['name'] || !$this->in['path'] || !$this->in['type']){
|
||||
show_json($this->L["data_not_full"],false);
|
||||
}
|
||||
$in = array(
|
||||
'mtime'=>time(),//更新则记录最后时间
|
||||
'sid'=>$this->in['sid'],
|
||||
'type'=>$this->in['type'],
|
||||
'path'=>$this->in['path'],
|
||||
'name'=>$this->in['name'],
|
||||
'time_to'=>$this->in['time_to']?$this->in['time_to']:'',
|
||||
'share_password'=>$this->in['share_password']?$this->in['share_password']:'',
|
||||
'code_read'=>$this->in['code_read']?$this->in['code_read']:'',
|
||||
'not_download'=>$this->in['not_download']?$this->in['not_download']:''
|
||||
);
|
||||
return $in;
|
||||
}
|
||||
}
|
||||
|
|
@ -8,27 +8,36 @@
|
|||
|
||||
//处理成标准目录
|
||||
function _DIR_CLEAR($path){
|
||||
$path = htmlspecial_decode($path);
|
||||
$path = str_replace('\\','/',trim($path));
|
||||
if (strstr($path,'../')) {//preg耗性能
|
||||
$path = preg_replace('/\.+\/+/', '/', $path);
|
||||
$path = preg_replace('/\/+/', '/', $path);
|
||||
}
|
||||
return str_replace('//','/',$path);
|
||||
$path = preg_replace('/\/+/', '/', $path);
|
||||
return $path;
|
||||
}
|
||||
|
||||
//处理成用户目录,并且不允许相对目录的请求操作
|
||||
function _DIR($path){
|
||||
$path = _DIR_CLEAR(rawurldecode($path));
|
||||
$path = iconv_system($path);
|
||||
if (substr($path,0,strlen(PUBLIC_PATH)) == PUBLIC_PATH) {
|
||||
return $path;
|
||||
if (substr($path,0,strlen('*recycle*/')) == '*recycle*/') {
|
||||
return USER_RECYCLE.str_replace('*recycle*/','',$path);
|
||||
}
|
||||
if (substr($path,0,strlen('*public*/')) == '*public*/') {
|
||||
return PUBLIC_PATH.str_replace('*public*/','',$path);
|
||||
}
|
||||
if (substr($path,0,strlen('*share*/')) == '*share*/') {
|
||||
return "*share*/";
|
||||
}
|
||||
$path = HOME.$path;
|
||||
if (is_dir($path)) $path.='/';
|
||||
if (is_dir($path)) $path = rtrim($path,'/').'/';
|
||||
return $path;
|
||||
}
|
||||
|
||||
//处理成用户目录输出
|
||||
function _DIR_OUT(&$arr){
|
||||
xxsClear($arr);
|
||||
if ($GLOBALS['is_root']) return;
|
||||
if (is_array($arr)) {
|
||||
foreach ($arr['filelist'] as $key => $value) {
|
||||
|
|
@ -44,9 +53,38 @@ function _DIR_OUT(&$arr){
|
|||
//前缀处理 非root用户目录/从HOME开始
|
||||
function pre_clear($path){
|
||||
if (substr($path,0,strlen(PUBLIC_PATH)) == PUBLIC_PATH) {
|
||||
return $path;
|
||||
return '*public*/'.str_replace(PUBLIC_PATH,'',$path);
|
||||
}
|
||||
return str_replace(HOME, '', $path);
|
||||
return str_replace(HOME,'',$path);
|
||||
}
|
||||
function xxsClear(&$list){
|
||||
if (is_array($list)) {
|
||||
foreach ($list['filelist'] as $key => $value) {
|
||||
$list['filelist'][$key]['ext'] = htmlspecial($value['ext']);
|
||||
$list['filelist'][$key]['path'] = htmlspecial($value['path']);
|
||||
$list['filelist'][$key]['name'] = htmlspecial($value['name']);
|
||||
}
|
||||
foreach ($list['folderlist'] as $key => $value) {
|
||||
$list['folderlist'][$key]['path'] = htmlspecial($value['path']);
|
||||
$list['folderlist'][$key]['name'] = htmlspecial($value['name']);
|
||||
}
|
||||
}else{
|
||||
$list = htmlspecial($list);
|
||||
}
|
||||
}
|
||||
function htmlspecial($str){
|
||||
return str_replace(
|
||||
array('<','>','"',"'"),
|
||||
array('<','>','"',''','&'),
|
||||
$str
|
||||
);
|
||||
}
|
||||
function htmlspecial_decode($str){
|
||||
return str_replace(
|
||||
array('<','>','"','''),
|
||||
array('<','>','"',"'"),
|
||||
$str
|
||||
);
|
||||
}
|
||||
|
||||
//扩展名权限判断
|
||||
|
|
@ -55,19 +93,41 @@ function checkExtUnzip($s,$info){
|
|||
}
|
||||
//扩展名权限判断 有权限则返回1 不是true
|
||||
function checkExt($file,$changExt=false){
|
||||
if (strstr($file,'<') || strstr($file,'>') || $file=='') {
|
||||
return 0;
|
||||
}
|
||||
if ($GLOBALS['is_root'] == 1) return 1;
|
||||
if ($file=='') return false;
|
||||
$not_allow = $GLOBALS['auth']['ext_not_allow'];
|
||||
$file = rawurldecode($file);
|
||||
$ext_arr = explode('|',$not_allow);
|
||||
foreach ($ext_arr as $current) {
|
||||
if (stristr($file,'.'.$current)){//含有扩展名
|
||||
return false;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
function php_env_check(){
|
||||
$L = $GLOBALS['L'];
|
||||
$error = '';
|
||||
$base_path = get_path_this(BASIC_PATH).'/';
|
||||
if(!function_exists('iconv')) $error.= '<li>'.$L['php_env_error_iconv'].'</li>';
|
||||
if(!function_exists('mb_convert_encoding')) $error.= '<li>'.$L['php_env_error_mb_string'].'</li>';
|
||||
if(!version_compare(PHP_VERSION,'5.0','>=')) $error.= '<li>'.$L['php_env_error_version'].'</li>';
|
||||
if(!function_exists('file_get_contents')) $error.='<li>'.$L['php_env_error_file'].'</li>';
|
||||
if(!path_writable(BASIC_PATH)) $error.= '<li>'.$base_path.$L['php_env_error_path'].'</li>';
|
||||
if(!path_writable(BASIC_PATH.'data')) $error.= '<li>'.$base_path.'/data'.$L['php_env_error_path'].'</li>';
|
||||
if(!path_writable(BASIC_PATH.'data/system')) $error.= '<li>'.$base_path.'/data/system'.$L['php_env_error_path'].'</li>';
|
||||
if(!path_writable(BASIC_PATH.'data/User')) $error.= '<li>'.$base_path.'/data/User'.$L['php_env_error_path'].'</li>';
|
||||
if(!path_writable(BASIC_PATH.'data/thumb')) $error.= '<li>'.$base_path.'/data/thumb'.$L['php_env_error_path'].'</li>';
|
||||
if( !function_exists('imagecreatefromjpeg')||
|
||||
!function_exists('imagecreatefromgif')||
|
||||
!function_exists('imagecreatefrompng')||
|
||||
!function_exists('imagecolorallocate')){
|
||||
$error.= '<li>'.$L['php_env_error_gd'].'</li>';
|
||||
}
|
||||
return $error;
|
||||
}
|
||||
|
||||
//语言包加载:优先级:cookie获取>自动识别
|
||||
//首次没有cookie则自动识别——存入cookie,过期时间无限
|
||||
|
|
@ -90,9 +150,29 @@ function init_lang(){
|
|||
setcookie('kod_user_language',$lang, time()+3600*24*365);
|
||||
}
|
||||
|
||||
$GLOBALS['language'] = $lang;
|
||||
$lang = str_replace(array('/','\\','..'),'',$lang);
|
||||
define('LANGUAGE_TYPE', $lang);
|
||||
include(LANGUAGE_PATH.$lang.'/main.php');
|
||||
$GLOBALS['L'] = $L;
|
||||
$GLOBALS['lang'] = $L;
|
||||
$GLOBALS['language'] = $lang;
|
||||
}
|
||||
|
||||
function init_setting(){
|
||||
$setting_file = USER_SYSTEM.'system_setting.php';
|
||||
if (!file_exists($setting_file)){//不存在则建立
|
||||
$setting = $GLOBALS['config']['setting_system_default'];
|
||||
$setting['menu'] = $GLOBALS['config']['setting_menu_default'];
|
||||
fileCache::save($setting_file,$setting);
|
||||
}else{
|
||||
$setting = fileCache::load($setting_file);
|
||||
}
|
||||
$GLOBALS['app']->setDefaultController($setting['first_in']);//设置默认控制器
|
||||
$GLOBALS['app']->setDefaultAction('index'); //设置默认控制器函数
|
||||
|
||||
$GLOBALS['config']['setting_system'] = $setting;//全局
|
||||
$GLOBALS['L']['kod_name'] = $setting['system_name'];
|
||||
$GLOBALS['L']['kod_name_desc'] = $setting['system_desc'];
|
||||
if (isset($setting['powerby'])) {
|
||||
$GLOBALS['L']['kod_power_by'] = $setting['powerby'];
|
||||
}
|
||||
}
|
||||
|
|
@ -1 +1 @@
|
|||
<?php exit;?>{"list_type":"icon","list_sort_field":"name","list_sort_order":"up","theme":"metro\/","codetheme":"crimson_editor","wall":"8","musictheme":"mp3player","movietheme":"webplayer"}
|
||||
<?php exit;?>{"list_type":"icon","list_sort_field":"name","list_sort_order":"up","theme":"simple\/","codetheme":"clouds","wall":"7","musictheme":"mp3player","movietheme":"webplayer"}
|
||||
|
|
@ -1 +0,0 @@
|
|||
<?php exit;?>{"font_size":"16px","theme":"eclipse","auto_wrap":"0","display_char":"0","auto_complete":"0"}
|
||||
|
|
@ -1 +0,0 @@
|
|||
<?php exit;?>{"kod":{"name":"kod","path":"D:\/WWW\/www\/kod"},"0.000":{"name":"0.000","path":"D:\/WWW\/0.000\/"},"001":{"name":"001","path":"D:\/WWW\/www\/kod\/dev\/data\/User\/admin\/home\/001"}}
|
||||
|
|
@ -1 +0,0 @@
|
|||
{"type":"url","content":"http:\/\/hoorayos.com\/demo\/extapp\/clock\/index.php","icon":"time.png","width":"140","height":"140","simple":1,"resize":0}
|
||||
|
|
@ -1 +0,0 @@
|
|||
{"type":"url","content":"http:\/\/kuang.xiami.com\/kuang\/play\/xiamiradio","icon":"xiami.jpg","width":"530","height":"282","simple":0,"resize":1}
|
||||
|
|
@ -1 +0,0 @@
|
|||
{"type":"url","content":"http:\/\/douban.fm\/partner\/qq_plus","icon":"douban.png","width":"545","height":"460","simple":0,"resize":1}
|
||||
|
|
@ -1 +0,0 @@
|
|||
{"type":"url","content":"http:\/\/topic.kugou.com\/radio\/baiduNew.htm","icon":"kugou_radio.png","width":"554","height":"432","simple":0,"resize":1}
|
||||
|
|
@ -1 +1 @@
|
|||
<?php exit;?>{"list_type":"icon","list_sort_field":"mtime","list_sort_order":"up","theme":"metro\/","codetheme":"github","wall":"1","musictheme":"mp3player","movietheme":"webplayer"}
|
||||
<?php exit;?>{"list_type":"icon","list_sort_field":"name","list_sort_order":"up","theme":"simple\/","codetheme":"clouds","wall":"7","musictheme":"mp3player","movietheme":"webplayer"}
|
||||
|
|
@ -1 +0,0 @@
|
|||
<?php exit;?>[]
|
||||
|
|
@ -1 +0,0 @@
|
|||
{"type":"url","content":"http:\/\/baidu.html.zcom.com\/chuangyebang\/","icon":"chuangyebang.jpg","width":"545","height":"440","simple":0,"resize":1}
|
||||
|
|
@ -1 +0,0 @@
|
|||
{"type":"url","content":"http:\/\/tv.e1951.com\/tv\/index.htm","icon":"app_s2.png","width":"800","height":"600","simple":0,"resize":1}
|
||||
|
|
@ -1 +0,0 @@
|
|||
{"type":"url","content":"http:\/\/xiuxiu.web.meitu.com\/baidu\/","icon":"meitu.gif","width":"800","height":"570","simple":0,"resize":1}
|
||||
|
|
@ -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":"name","list_sort_order":"up","theme":"simple\/","codetheme":"clouds","wall":"7","musictheme":"mp3player","movietheme":"webplayer"}
|
||||
|
|
@ -1 +0,0 @@
|
|||
<?php exit;?>[]
|
||||
|
|
@ -1,10 +1,132 @@
|
|||
<?php
|
||||
$L = array(
|
||||
"config" => array(
|
||||
"type" => "en",
|
||||
"name" => "english",
|
||||
"authoer" => "warlee"
|
||||
),
|
||||
"upload_clear" =>'clear',
|
||||
"upload_setting" =>"setting",
|
||||
"upload_tips" =>'use piecewise upload, no longer limited to php.ini;',
|
||||
"upload_exist" =>"duplicate files",
|
||||
"upload_exist_rename" =>"rename",
|
||||
"upload_exist_replace" =>"replace",
|
||||
"upload_exist_skip" =>"skip",
|
||||
|
||||
"more" =>"more",
|
||||
'system_setting' =>"System Setting",
|
||||
"openProject" =>"Open with Project",
|
||||
"url_download" =>"Download url",
|
||||
"url_link" =>"Url",
|
||||
"app_type_link" =>"Shortcut",
|
||||
"createLink" =>"Create Shortcut",
|
||||
"createProject" =>"Add to project",
|
||||
"only_read" =>"Read Only",
|
||||
"only_read_desc" =>"No permission to write",
|
||||
"explorerNew" =>'kod link',
|
||||
'zip_download_ready' =>'compression will automatically download, please wait...',
|
||||
"set_background" =>"as your desktop wallpaper",
|
||||
|
||||
"share" =>"Share",
|
||||
"share_title" =>"Resource sharing",
|
||||
"share_name" =>"Share title",
|
||||
"share_time" =>"Expiration time",
|
||||
"share_time_desc" =>"Blank says don't set an expiration time",
|
||||
"share_password" =>"Password",
|
||||
"share_password_desc" =>"Vlank that do not need the password",
|
||||
"share_cancle" =>"Cancel share",
|
||||
"share_create" =>"Create Share",
|
||||
"share_url" =>"Share Link",
|
||||
"share_not_download" =>"Can't Download",
|
||||
"share_not_download_tips" =>"Prohibit the download share! ",
|
||||
"share_code_read" =>"Code reading",
|
||||
"share_save" =>"Save Configuration",
|
||||
"share_error_param" =>'parameter error!',
|
||||
"share_error_user" =>'user information error!',
|
||||
"share_error_sid" =>'share does not exist!',
|
||||
"share_error_time" =>'you come late, this share has expired!',
|
||||
"share_error_path" =>'The file does not exist, is deleted or moved away!',
|
||||
"share_error_password" =>"Password error!",
|
||||
'share_error_show_tips' =>"this file type does not support preview!",
|
||||
"share_view_num" =>'view:',
|
||||
"share_download_num" =>'download:',
|
||||
"my_share" => "My share",
|
||||
"share_edit" => "Edit share",
|
||||
"share_remove" => "Cancle share",
|
||||
"share_remove_tips" => "Determine the cancel share? The Share link will fail.",
|
||||
"share_open_page" => "open sharing page",
|
||||
"share_open_path" => "goto the file directory",
|
||||
"recycle_clear" => 'Clear trash',
|
||||
"recycle_clear_success" => "Clear trash success.",
|
||||
"recycle_clear_info" => "are you sure clear recycle bin?",
|
||||
"recycle_remove" => "delete",
|
||||
"fav_remove" => "Cancle fav",
|
||||
"remove_item" => "item",//删除3项内容 (3 item)
|
||||
"uploading" =>"uploading",
|
||||
'show_file' =>"new page preview",
|
||||
"unknow_file_title" =>"file open tip!",
|
||||
"unknow_file_tips" =>"not to support the open",
|
||||
"unknow_file_download" =>"Download",
|
||||
"unknow_file_office" =>"office preview,this process needs to be deployed in the network",
|
||||
|
||||
//editor
|
||||
"shortcut" => 'Shortcuts',
|
||||
"learnMore" => 'Learn more',
|
||||
"code_mode" => 'syntax highlighter',
|
||||
"replace" => 'Replace',
|
||||
"selectAll" => 'Select All',
|
||||
"reload" => "Reload",
|
||||
"about" => "About",
|
||||
'complete_current' => "Autocompletion",
|
||||
"view" => 'View',
|
||||
"tools" => "Tools",
|
||||
"help" => "Help",
|
||||
"not_exists" => "Not Exists",
|
||||
"group_role_fileDownload" => "Download",
|
||||
"group_role_share" => "Share",
|
||||
|
||||
"system_setting" => "system settings",
|
||||
"system_setting_menu" => "menu management",
|
||||
"system_name" => "program name",
|
||||
"system_name_desc" => "logo program",
|
||||
"system_desc" => "program description",
|
||||
"path_hidden" => "directory exclusions",
|
||||
"path_hidden_desc" => "Exclude directories and files,split with ','",
|
||||
"new_user_folder" => "default directory",
|
||||
"new_user_folder_desc" => "split with ','",
|
||||
"new_user_app" =>"default app",
|
||||
"new_user_app_desc" =>"Application Center, a comma separated",
|
||||
"auto_login" =>"Guest auto login",
|
||||
"auto_login_desc" =>"default:<code>guest</code>;ensure that the <code>guest</code> user exists",
|
||||
"first_in" =>"after landing the default entry",
|
||||
"menu_name" =>"Menu name",
|
||||
"menu_hidden" =>"Hide",
|
||||
"menu_show" =>"Show",
|
||||
"menu_move_down" =>"Down",
|
||||
"menu_move_up" =>"Up",
|
||||
"menu_move_del" =>"remove",
|
||||
"menu_open_window" =>"new window",
|
||||
"url_path" =>"url link",
|
||||
"url_path_desc" =>"url or javascript",
|
||||
"no_permission_read" =>"does not have read permissions",
|
||||
|
||||
|
||||
"php_env_check" => "Environment check:",
|
||||
"php_env_error" => "Environment error:",
|
||||
"php_env_error_ignore" =>"Ignore",
|
||||
"php_env_error_version" =>"PHP version must more than 5.0",
|
||||
"php_env_error_iconv" =>"not open iconv",
|
||||
"php_env_error_mb_string" =>"not open mb_string",
|
||||
"php_env_error_file" =>"not open file_get_contents",
|
||||
"php_env_error_path" =>"can't write",
|
||||
"php_env_error_gd" =>"not open php GD",
|
||||
"install_login" =>"Use the following account login",
|
||||
"install_enter" =>"Enter",
|
||||
"install_user_default" =>"root:admin/admin(need change)<br/>default:demo/demo<br/>guest:guest/guest",
|
||||
|
||||
"copyright_desc" =>"This is a highly acclaimed web document management system, you can use it to do the internal document management or share, can also be used to manage the website on the server, instead of Ftp
|
||||
Even as webIDE, can be directly online development. You can also integrate the two times the development of this program to your existing system. ",
|
||||
'copyright_contact' =>'contract me:3232048103@qq.com <a href="javascript:core.openIE(\'http://kalcaddle.com/qa.html\');">Q&A</a>',
|
||||
"copyright_info" =>'Copyright © <a href="http://kalcaddle.com/" target="_blank">kalcaddle.com</a> All rights reserved.',
|
||||
"copyright_pre" =>'Powered by KodExplorer',
|
||||
"kod_name" => "KodExplorer",
|
||||
"kod_name_desc" => "kod online explorer",
|
||||
"kod_power_by" => " - Powered by KodExplorer",
|
||||
|
||||
//login
|
||||
"login" => "login",
|
||||
|
|
@ -29,10 +151,6 @@ $L = array(
|
|||
"dialog_display_all" => "display all",
|
||||
"dialog_close_all" => "close all",
|
||||
|
||||
//desc
|
||||
"title" => "kodexplorer-online explorer",
|
||||
"title_name" => "kod online explorer",
|
||||
|
||||
//general
|
||||
"open" => "open",
|
||||
"open_with" => "open with",
|
||||
|
|
@ -64,7 +182,7 @@ $L = array(
|
|||
"modify_time" => "modified",
|
||||
"last_time" => "last visited",
|
||||
"sort_type" => "sort of way",
|
||||
"time_type" => "Y/m/d h:i",
|
||||
"time_type" => "Y/m/d h:i:s",
|
||||
"time_type_info" => "F j, Y, g:i a",
|
||||
"public_path" => "Public path",
|
||||
|
||||
|
|
@ -135,7 +253,6 @@ $L = array(
|
|||
"app_url" => 'url address',
|
||||
"app_code" => 'js code',
|
||||
|
||||
|
||||
//file management
|
||||
"edit" => "edit",
|
||||
"edit_can_not" => "is not a text file",
|
||||
|
|
@ -215,7 +332,7 @@ $L = array(
|
|||
"my_download" => "my download",
|
||||
|
||||
"ui_desktop" => "desktop",
|
||||
"ui_filemanage" => "explorer",
|
||||
"ui_explorer" => "explorer",
|
||||
"ui_editor" => "editor",
|
||||
"adminer" => "adminer",
|
||||
"ui_project_home" => "project home",
|
||||
|
|
@ -335,6 +452,7 @@ $L = array(
|
|||
"wordwrap" => "wrapping",
|
||||
"char_all_display" => "show & invisible character",
|
||||
"auto_complete" => "auto complete or not",
|
||||
"function_list" => "function list",
|
||||
"code_theme" => "code theme",
|
||||
"font_size" => "font",
|
||||
|
||||
|
|
@ -342,7 +460,7 @@ $L = array(
|
|||
"button_ok" => "ok",
|
||||
"button_submit" => "submit",
|
||||
"button_set" => "set",
|
||||
"button_cancle" => "cancel",
|
||||
"button_cancel" => "cancel",
|
||||
"button_edit" => "edit",
|
||||
"button_save" => "save",
|
||||
"button_save_all" => "save all",
|
||||
|
|
|
|||
|
|
@ -1,14 +1,136 @@
|
|||
<?php
|
||||
|
||||
$L= array(
|
||||
"config" => array(
|
||||
"type" => "zh_CN",
|
||||
"name" => "简体中文",
|
||||
"authoer" => "warlee"
|
||||
),
|
||||
"upload_clear" =>'清空',
|
||||
"upload_setting" =>"设置",
|
||||
"upload_tips" =>'采用分片上传,不再受php.ini限制;推荐chrome体验文件夹拖拽上传',
|
||||
"upload_exist" =>"同名文件处理",
|
||||
"upload_exist_rename" =>"重命名",
|
||||
"upload_exist_replace" =>"覆盖",
|
||||
"upload_exist_skip" =>"跳过",
|
||||
"more" =>"更多",
|
||||
'system_setting' =>"系统设置",
|
||||
"openProject" =>"编辑器打开项目",
|
||||
"url_download" =>"下载地址",
|
||||
"url_link" =>"外链地址",
|
||||
"app_type_link" => "快捷方式",
|
||||
"createLink" =>"创建快捷方式",
|
||||
"createProject" =>"添加到编辑器工程",
|
||||
"only_read" => "只读",
|
||||
"only_read_desc" => "该目录没有写权限<br/>可以在操作系统中设置此目录的权限",
|
||||
"explorerNew" => 'kod 链接',
|
||||
'zip_download_ready' =>'压缩后会自动下载,请稍后...',
|
||||
"set_background" =>"设置为桌面壁纸",
|
||||
|
||||
"share" =>"分享",
|
||||
"share_title" =>"资源分享",
|
||||
"share_name" =>"分享标题",
|
||||
"share_time" =>"到期时间",
|
||||
"share_time_desc" =>"留空表示不设置到期时间",
|
||||
"share_password" =>"提取密码",
|
||||
"share_password_desc" =>"留空表示不需要密码",
|
||||
"share_cancle" =>"取消共享",
|
||||
"share_create" =>"创建公开链接",
|
||||
"share_url" =>"分享地址",
|
||||
"share_not_download" =>"禁止下载",
|
||||
"share_not_download_tips" =>"分享者禁止了下载!",
|
||||
"share_code_read" =>"代码阅读",
|
||||
"share_save" =>"保存配置",
|
||||
"share_error_param" =>'参数错误!',
|
||||
"share_error_user" =>'用户信息错误!',
|
||||
"share_error_sid" =>'分享不存在!',
|
||||
"share_error_time" =>'您来晚了,该分享已经过期!',
|
||||
"share_error_path" =>'分享文件不存在,被删除或者移走了!',
|
||||
"share_error_password" =>"密码错误!",
|
||||
'share_error_show_tips' =>"该类型文件暂不支持预览!",
|
||||
"share_view_num" =>'浏览:',
|
||||
"share_download_num" =>'下载:',
|
||||
"my_share" => "我的分享",
|
||||
"share_edit" => "编辑分享",
|
||||
"share_remove" => "取消分享",
|
||||
"share_remove_tips" => "确定取消分享?公开连接将失效.",
|
||||
"share_open_page" => "打开分享页面",
|
||||
"share_open_path" => "进入文件所在目录",
|
||||
"recycle_clear" => '清空回收站',
|
||||
"recycle_clear_success" => "清空回收站成功!",
|
||||
"recycle_clear_info" => "您确定要彻底删除回收站吗?",
|
||||
"recycle_remove" => "彻底删除",
|
||||
"fav_remove" => "取消收藏",
|
||||
"remove_item" =>"项内容",//删除3项内容 (3 item)
|
||||
"uploading" =>"正在上传",
|
||||
'show_file' =>"新页面预览",
|
||||
"unknow_file_title" =>"文件打开提示!",
|
||||
"unknow_file_tips" =>"暂不支持打开",
|
||||
"unknow_file_download" =>"下载到本地",
|
||||
"unknow_file_office" =>"office预览,此程序需要部署在外网",
|
||||
|
||||
//editor
|
||||
"shortcut" => '快捷键',
|
||||
"learnMore" => '了解更多',
|
||||
"code_mode" => '高亮语法',
|
||||
"replace" => '替换',
|
||||
"selectAll" => '全选',
|
||||
"reload" => "重新载入",
|
||||
"about" => "关于",
|
||||
'complete_current' => "自动补全当前",
|
||||
"view" => '视图',
|
||||
"tools" => "工具",
|
||||
"help" => "帮助",
|
||||
"not_exists" => "不存在",
|
||||
"group_role_fileDownload" => "文件下载",
|
||||
"group_role_share" => "共享",
|
||||
|
||||
"system_setting" => "系统设置",
|
||||
"system_setting_menu" => "菜单管理",
|
||||
"system_name" => "程序名称",
|
||||
"system_name_desc" => "程序logo标题",
|
||||
"system_desc" => "程序描述",
|
||||
"system_desc" => "程序描述",
|
||||
"path_hidden" => "目录排除",
|
||||
"path_hidden_desc" => "默认不显示的目录和文件,逗号隔开",
|
||||
"new_user_folder" => "新用户默认创建目录",
|
||||
"new_user_folder_desc" => "用逗号隔开",
|
||||
"new_user_app" =>"新用户默认创建app",
|
||||
"new_user_app_desc" =>"应用中心的应用,多个用逗号隔开",
|
||||
"auto_login" =>"游客自动登录",
|
||||
"auto_login_desc" =>"默认登录用户名为<code>guest</code>的用户;开启后确保<code>guest</code>用户存在",
|
||||
"first_in" =>"登陆后默认进入",
|
||||
"menu_name" =>"菜单名",
|
||||
"menu_hidden" => "隐藏",
|
||||
"menu_show" =>"显示",
|
||||
"menu_move_down" =>"下移",
|
||||
"menu_move_up" =>"上移",
|
||||
"menu_move_del" =>"删除",
|
||||
"menu_open_window" =>"新窗口打开",
|
||||
"url_path" =>"url地址",
|
||||
"url_path_desc" =>"url地址或js代码",
|
||||
"no_permission_read" =>"该文件没有读取权限",
|
||||
|
||||
|
||||
"php_env_check" => "运行环境监测:",
|
||||
"php_env_error" => "环境错误:",
|
||||
"php_env_error_ignore" =>"忽略",
|
||||
"php_env_error_version" =>"PHP版本不能低于5.0",
|
||||
"php_env_error_iconv" =>"未开启 iconv",
|
||||
"php_env_error_mb_string" =>"未开启 mb_string",
|
||||
"php_env_error_file" =>"未开启 file_get_contents",
|
||||
"php_env_error_path" =>"不可写",
|
||||
"php_env_error_gd" =>"须开启php GD库, 否则验证码、缩略图使用将不正常",
|
||||
"install_login" =>"您可以用如下账号登陆",
|
||||
"install_enter" =>"进入系统",
|
||||
"install_user_default" =>"管理员:admin/admin(请务必修改密码)<br/>普通用户:demo/demo<br/>游客用户:guest/guest",
|
||||
|
||||
"copyright_desc" =>"这是一款备受好评的web文档管理系统,你可以用它来做内部文档管理或分享、也可以用来管理服务器上的网站,取代Ftp
|
||||
,甚至可以当作webIDE直接在线开发。同时你也可以将此程序二次开发整合到你现有的系统。",
|
||||
'copyright_contact' =>'授权或定制请联系QQ:<a href="http://wpa.qq.com/msgrd?v=3&uin=3232048103&site=qq&menu=yes" target="_blank">3232048103</a><a href="javascript:core.openIE(\'http://kalcaddle.com/qa.html\');">问题反馈</a>',
|
||||
"copyright_info" =>'Copyright © <a href="http://kalcaddle.com/" target="_blank">kalcaddle.com</a> All rights reserved.',
|
||||
"copyright_pre" =>'Powered by KodExplorer',
|
||||
"kod_name" => "KodExplorer",
|
||||
"kod_name_desc" => "芒果云•资源管理器",
|
||||
"kod_power_by" => " - Powered by KodExplorer",
|
||||
|
||||
|
||||
//login
|
||||
"login" => "登陆",
|
||||
"login" => "登陆 ",
|
||||
"guest_login" => "游客登录",
|
||||
"username" => "用户名",
|
||||
"password" => "密码",
|
||||
|
|
@ -30,10 +152,6 @@ $L= array(
|
|||
"dialog_display_all" => "显示所有窗口",
|
||||
"dialog_close_all" => "关闭所有窗口",
|
||||
|
||||
//网站描述
|
||||
"title" => "KODExplorer-芒果云•资源管理器",
|
||||
"title_name" => "芒果云•资源管理器",
|
||||
|
||||
//通用
|
||||
"open" => "打开",
|
||||
"others" => "其他",
|
||||
|
|
@ -65,7 +183,7 @@ $L= array(
|
|||
"modify_time" => "修改时间",
|
||||
"last_time" => "最后访问",
|
||||
"sort_type" => "排序方式",
|
||||
"time_type" => "Y/m/d H:i",
|
||||
"time_type" => "Y/m/d H:i:s",
|
||||
"time_type_info" => "Y年m月d日 H:i:s",
|
||||
"public_path" => "公共目录",
|
||||
|
||||
|
|
@ -219,7 +337,7 @@ $L= array(
|
|||
|
||||
//界面
|
||||
"ui_desktop" => "桌面",
|
||||
"ui_filemanage" => "文件管理",
|
||||
"ui_explorer" => "文件管理",
|
||||
"ui_editor" => "编辑器",
|
||||
"adminer" => "adminer",
|
||||
"ui_project_home" => "项目主页",
|
||||
|
|
@ -295,7 +413,7 @@ $L= array(
|
|||
"group_role_upload" => "允许上传",
|
||||
"group_role_download" => "远程下载",
|
||||
"group_role_passowrd" => "修改密码",
|
||||
"group_role_config" => "用户数据",
|
||||
"group_role_config" => "配置数据",
|
||||
"group_role_fav" => "收藏夹操作(添加/编辑/删除)",
|
||||
"group_role_list" => "列表查看",
|
||||
"group_role_member_add" => "添加用户",
|
||||
|
|
@ -340,6 +458,7 @@ $L= array(
|
|||
"wordwrap" => "自动换行(不自动换行)",
|
||||
"char_all_display" => "显示不可见字符(隐藏)",
|
||||
"auto_complete" => "自动提示(取消)",
|
||||
"function_list" => "函数列表",
|
||||
"code_theme" => "代码风格",
|
||||
"font_size" => "字体",
|
||||
|
||||
|
|
@ -347,7 +466,7 @@ $L= array(
|
|||
"button_ok" => "确定",
|
||||
"button_submit" => "提交",
|
||||
"button_set" => "设置",
|
||||
"button_cancle" => "取消",
|
||||
"button_cancel" => "取消",
|
||||
"button_edit" => "编辑",
|
||||
"button_save" => "保存",
|
||||
"button_save_all" => "保存全部",
|
||||
|
|
|
|||
|
|
@ -1,38 +1,156 @@
|
|||
<?php
|
||||
|
||||
$L= array(
|
||||
"config" => array(
|
||||
"type" => "zh_TW",
|
||||
"name" => "簡體中文",
|
||||
"authoer" => "warlee"
|
||||
),
|
||||
"upload_clear" =>'清空',
|
||||
"upload_setting" =>"設置",
|
||||
"upload_tips" =>'采用分片上傳,不再受php.ini限制;推薦chrome體驗文件夾拖拽上傳',
|
||||
"upload_exist" =>"同名文件處理",
|
||||
"upload_exist_rename" =>"重命名",
|
||||
"upload_exist_replace" =>"覆蓋",
|
||||
"upload_exist_skip" =>"跳過",
|
||||
|
||||
//login
|
||||
"login" => "登陸",
|
||||
"guest_login" => "游客登陸",
|
||||
"username" => "用戶名",
|
||||
"more" =>"更多",
|
||||
'system_setting' =>"系統設置",
|
||||
"openProject" =>"編輯器打開項目",
|
||||
"url_download" =>"下載地址",
|
||||
"url_link" =>"外鏈地址",
|
||||
"app_type_link" =>"快捷方式",
|
||||
"createLink" =>"創建快捷方式",
|
||||
"createProject" =>"添加到編輯器工程",
|
||||
"only_read" =>"只讀",
|
||||
"only_read_desc" =>"該目錄沒有寫權限<br/>可以在操作系統中設置此目錄的權限",
|
||||
"explorerNew" =>'kod 鏈接',
|
||||
'zip_download_ready' =>'壓縮後會自動下載,請稍後...',
|
||||
"set_background" =>"設置為桌面壁紙",
|
||||
|
||||
"share" =>"分享",
|
||||
"share_title" =>"資源分享",
|
||||
"share_name" =>"分享標題",
|
||||
"share_time" =>"到期時間",
|
||||
"share_time_desc" =>"留空表示不設置到期時間",
|
||||
"share_password" =>"提取密碼",
|
||||
"share_password_desc" =>"留空表示不需要密碼",
|
||||
"share_cancle" =>"取消共享",
|
||||
"share_create" =>"創建公開鏈接",
|
||||
"share_url" =>"分享地址",
|
||||
"share_not_download" =>"禁止下載",
|
||||
"share_not_download_tips" =>"分享者禁止了下載!",
|
||||
"share_code_read" =>"代碼閱讀",
|
||||
"share_save" =>"保存配置",
|
||||
"share_error_param" =>'參數錯誤!',
|
||||
"share_error_user" =>'用戶信息錯誤!',
|
||||
"share_error_sid" =>'分享不存在!',
|
||||
"share_error_time" =>'您來晚了,該分享已經過期!',
|
||||
"share_error_path" =>'分享文件不存在,被刪除或者移走了!',
|
||||
"share_error_password" =>"密碼錯誤!",
|
||||
'share_error_show_tips' =>"該類型文件暫不支持預覽!",
|
||||
"share_view_num" =>'瀏覽:',
|
||||
"share_download_num" =>'下載:',
|
||||
"my_share" => "我的分享",
|
||||
"share_edit" => "編輯分享",
|
||||
"share_remove" => "取消分享",
|
||||
"share_remove_tips" => "確定取消分享?公開連接將失效.",
|
||||
"share_open_page" => "打開分享頁面",
|
||||
"share_open_path" => "進入文件所在目錄",
|
||||
"recycle_clear" => '清空回收站',
|
||||
"recycle_clear_success" => "清空回收站成功!",
|
||||
"recycle_clear_info" => "您確定要徹底刪除回收站嗎?",
|
||||
"recycle_remove" => "徹底刪除",
|
||||
"fav_remove" => "取消收藏",
|
||||
"remove_item" =>"項內容",//刪除3項內容 (3 item)
|
||||
"uploading" =>"正在上傳",
|
||||
'show_file' =>"新頁面預覽",
|
||||
"unknow_file_title" =>"文件打開提示!",
|
||||
"unknow_file_tips" =>"暫不支持打開",
|
||||
"unknow_file_download" =>"下載到本地",
|
||||
"unknow_file_office" =>"office預覽,此程序需要部署在外網",
|
||||
|
||||
//editor
|
||||
"shortcut" => '快捷鍵',
|
||||
"learnMore" => '了解更多',
|
||||
"code_mode" => '高亮語法',
|
||||
"replace" => '替換',
|
||||
"selectAll" => '全選',
|
||||
"reload" => "重新載入",
|
||||
"about" => "關於",
|
||||
'complete_current' => "自動補全當前",
|
||||
"view" => '視圖',
|
||||
"tools" => "工具",
|
||||
"help" => "幫助",
|
||||
"not_exists" => "不存在",
|
||||
"group_role_fileDownload" => "文件下載",
|
||||
"group_role_share" => "共享",
|
||||
|
||||
"system_setting" => "系統設置",
|
||||
"system_setting_menu" => "菜單管理",
|
||||
"system_name" => "程序名稱",
|
||||
"system_name_desc" => "程序logo標題",
|
||||
"system_desc" => "程序描述",
|
||||
"system_desc" => "程序描述",
|
||||
"path_hidden" => "目錄排除",
|
||||
"path_hidden_desc" => "默認不顯示的目錄和文件,逗號隔開",
|
||||
"new_user_folder" => "新用戶默認創建目錄",
|
||||
"new_user_folder_desc" => "用逗號隔開",
|
||||
"new_user_app" =>"新用戶默認創建app",
|
||||
"new_user_app_desc" =>"應用中心的應用,多個用逗號隔開",
|
||||
"auto_login" =>"遊客自動登錄",
|
||||
"auto_login_desc" =>"默認登錄用戶名為<code>guest</code>的用戶;開啟後確保<code>guest</code>用戶存在",
|
||||
"first_in" =>"登陸後默認進入",
|
||||
"menu_name" =>"菜單名",
|
||||
"menu_hidden" => "隱藏",
|
||||
"menu_show" =>"顯示",
|
||||
"menu_move_down" =>"下移",
|
||||
"menu_move_up" =>"上移",
|
||||
"menu_move_del" =>"刪除",
|
||||
"menu_open_window" =>"新窗口打開",
|
||||
"url_path" =>"url地址",
|
||||
"url_path_desc" =>"url地址或js代碼",
|
||||
"no_permission_read" =>"該文件沒有讀取權限",
|
||||
|
||||
|
||||
"php_env_check" => "運行環境監測:",
|
||||
"php_env_error" => "環境錯誤:",
|
||||
"php_env_error_ignore" =>"忽略",
|
||||
"php_env_error_version" =>"PHP版本不能低於5.0",
|
||||
"php_env_error_iconv" =>"未開啟 iconv",
|
||||
"php_env_error_mb_string" =>"未開啟 mb_string",
|
||||
"php_env_error_file" =>"未開啟 file_get_contents",
|
||||
"php_env_error_path" =>"不可寫",
|
||||
"php_env_error_gd" =>"須開啟php GD庫, 否則驗證碼、縮略圖使用將不正常",
|
||||
"install_login" =>"您可以用如下賬號登陸",
|
||||
"install_enter" =>"進入系統",
|
||||
"install_user_default" =>"管理員:admin/admin(請務必修改密碼)<br/>普通用戶:demo/demo<br/>遊客用戶:guest/guest",
|
||||
|
||||
"copyright_desc" =>"這是壹款備受好評的web文檔管理系統,妳可以用它來做內部文檔管理或分享、也可以用來管理服務器上的網站,取代Ftp
|
||||
,甚至可以當作webIDE直接在線開發。同時妳也可以將此程序二次開發整合到妳現有的系統。",
|
||||
'copyright_contact' =>'授權或定制請聯系QQ:<a href="http://wpa.qq.com/msgrd?v=3&uin=3232048103&site=qq&menu=yes" target="_blank">3232048103</a><a href="javascript:core.openIE(\'http://kalcaddle.com/qa.html\');">問題反饋</a>',
|
||||
"copyright_info" =>'Copyright © <a href="http://kalcaddle.com/" target="_blank">kalcaddle.com</a> All rights reserved.',
|
||||
"copyright_pre" =>'Powered by KodExplorer',
|
||||
"kod_name" => "KodExplorer",
|
||||
"kod_name_desc" => "芒果雲•資源管理器",
|
||||
"kod_power_by" => " - Powered by KodExplorer",
|
||||
|
||||
|
||||
"login" => "登六",
|
||||
"guest_login" => "遊客登六",
|
||||
"username" => "用護名",
|
||||
"password" => "密碼",
|
||||
"login_code" => "驗證碼",
|
||||
"login_rember_password" => "記住密碼",
|
||||
"us" => "千帆網路工作室",
|
||||
"login_not_null" => "用戶名密碼不能為空!",
|
||||
"login_not_null" => "用護名密碼不能為空!",
|
||||
"code_error" => "驗證碼錯誤",
|
||||
"user_not_exists" => "用戶名不存在!",
|
||||
"user_not_exists" => "用護名不存在!",
|
||||
"password_error" => "密碼錯誤!",
|
||||
"password_not_null" => "密碼不能為空!",
|
||||
"old_password_error" => "原密碼錯誤!",
|
||||
"permission" => "許可權!",
|
||||
"permission_edit" => "修改权限",
|
||||
"no_permission" => "您没有此权限!",
|
||||
"no_permission_ext" => "您没有该类型文件权限",
|
||||
"permission_edit" => "修改權限",
|
||||
"no_permission" => "您沒有此權限!",
|
||||
"no_permission_ext" => "您沒有該類型文件權限",
|
||||
"dialog_min" => "最小化",
|
||||
"dialog_min_all" => "最小化所有",
|
||||
"dialog_display_all" => "显示所有窗口",
|
||||
"dialog_close_all" => "关闭所有窗口",
|
||||
|
||||
//網站描述
|
||||
"title" => "KODExplorer-芒果雲•資源管理器",
|
||||
"title_name" => "芒果雲•資源管理器",
|
||||
"dialog_display_all" => "顯示所有窗口",
|
||||
"dialog_close_all" => "關閉所有窗口",
|
||||
|
||||
//通用
|
||||
"open" => "打開",
|
||||
|
|
@ -51,7 +169,7 @@ $L= array(
|
|||
"save_success" => "保存成功!",
|
||||
"success" => "操作成功",
|
||||
"error" => "操作失敗",
|
||||
"error_repeat" => "'操作失敗,請注意名稱不能重複!'",
|
||||
"error_repeat" => "'操作失敗,請註意名稱不能重複!'",
|
||||
"system_error" => "系統錯誤",
|
||||
"name" => "名稱",
|
||||
"type" => "類型",
|
||||
|
|
@ -65,15 +183,15 @@ $L= array(
|
|||
"modify_time" => "修改時間",
|
||||
"last_time" => "最後訪問",
|
||||
"sort_type" => "排序方式",
|
||||
"time_type" => "Y/m/d H:i",
|
||||
"time_type" => "Y/m/d H:i:s",
|
||||
"time_type_info" => "Y年m月d日 H:i:s",
|
||||
"public_path" => "公共目录",
|
||||
"public_path" => "公共目錄",
|
||||
|
||||
//右鍵
|
||||
"file" => "檔",
|
||||
"folder" => "檔夾",
|
||||
"copy" => "複製",
|
||||
"clone" => "创建副本",
|
||||
"clone" => "創建副本",
|
||||
"past" => "粘貼",
|
||||
"cute" => "剪切",
|
||||
"remove" => "刪除",
|
||||
|
|
@ -104,7 +222,7 @@ $L= array(
|
|||
"unziping" => "正在解壓...",
|
||||
"moving" => "移動操作中...",
|
||||
"remove_title" => "刪除確認",
|
||||
"remove_info" => "确认删除选中内容吗?",
|
||||
"remove_info" => "確認刪除選中內容嗎?",
|
||||
"name_isexists" => "出錯了,該名稱已存在!",
|
||||
|
||||
"install" => '安裝',
|
||||
|
|
@ -137,11 +255,10 @@ $L= array(
|
|||
"app_url" => '鏈接地址',
|
||||
"app_code" => 'js 代碼',
|
||||
|
||||
|
||||
//檔管理
|
||||
"edit" => "編輯",
|
||||
"edit_can_not" => "不是文本檔",
|
||||
"edit_too_big" => "文件太大,不能大于20M",
|
||||
"edit_too_big" => "文件太大,不能大於20M",
|
||||
"open_default" => "默認方式打開",
|
||||
"open_ie" => "流覽器打開",
|
||||
"refresh" => "刷新",
|
||||
|
|
@ -177,7 +294,7 @@ $L= array(
|
|||
"download_address" => "下載地址",
|
||||
"download_ready" => "即將下載",
|
||||
"download_success" => "下載成功!",
|
||||
"download_error" => "下载失败!",
|
||||
"download_error" => "下載失敗!",
|
||||
"download_error_create" => "寫入出錯!",
|
||||
"download_error_exists" => "遠程檔不存!",
|
||||
"upload_error_null" => "沒有檔!",
|
||||
|
|
@ -216,29 +333,27 @@ $L= array(
|
|||
"my_movie" => "我的視頻",
|
||||
"my_download" => "我的下載",
|
||||
|
||||
|
||||
//介面
|
||||
"ui_desktop" => "桌面",
|
||||
"ui_filemanage" => "檔管理",
|
||||
"ui_explorer" => "檔管理",
|
||||
"ui_editor" => "編輯器",
|
||||
"adminer" => "adminer",
|
||||
"ui_project_home" => "專案主頁",
|
||||
"ui_login" => "登陸",
|
||||
"ui_login" => "登六",
|
||||
"ui_logout" => "退出",
|
||||
|
||||
|
||||
//設置
|
||||
"setting" => "系統設置",
|
||||
"setting_title" => "選項",
|
||||
"setting_user" => "个人中心",
|
||||
"setting_user" => "個人中心",
|
||||
"setting_password" => "修改密碼",
|
||||
"setting_password_old" => "原密碼",
|
||||
"setting_password_new" => "修改為",
|
||||
"setting_language" => "語言設置",
|
||||
"setting_member" => "用戶管理",
|
||||
"setting_group" => "用戶組管理",
|
||||
"setting_group_add" => "添加用戶組",
|
||||
"setting_group_edit" => "編輯用戶組",
|
||||
"setting_member" => "用護管理",
|
||||
"setting_group" => "用護組管理",
|
||||
"setting_group_add" => "添加用護組",
|
||||
"setting_group_edit" => "編輯用護組",
|
||||
"setting_theme" => "主題切換",
|
||||
"setting_wall" => "更換壁紙",
|
||||
"setting_wall_diy" => "自定義壁紙:",
|
||||
|
|
@ -254,23 +369,23 @@ $L= array(
|
|||
"absolute_path" => "絕對地址",
|
||||
|
||||
// setting page
|
||||
"group" => "用戶組",
|
||||
"group" => "用護組",
|
||||
"data_not_full" => "數據提交不完整!",
|
||||
"default_user_can_not_do" => "默認用戶不能操作",
|
||||
"default_group_can_not_do" => "默認用戶組不能操作",
|
||||
"username_can_not_null" => "用戶名不能為空!",
|
||||
"groupname_can_not_null" => "用戶組名不能為空!",
|
||||
"groupdesc_can_not_null" => "用戶組描述不能為空!",
|
||||
"group_move_user_error" => "所屬用戶組用戶移動失敗",
|
||||
"group_already_remove" => "該用戶組已被刪除",
|
||||
"group_not_exists" => "該用戶組不存在",
|
||||
"member_add" => "添加用戶",
|
||||
"default_user_can_not_do" => "默認用護不能操作",
|
||||
"default_group_can_not_do" => "默認用護組不能操作",
|
||||
"username_can_not_null" => "用護名不能為空!",
|
||||
"groupname_can_not_null" => "用護組名不能為空!",
|
||||
"groupdesc_can_not_null" => "用護組描述不能為空!",
|
||||
"group_move_user_error" => "所屬用護組用護移動失敗",
|
||||
"group_already_remove" => "該用護組已被刪除",
|
||||
"group_not_exists" => "該用護組不存在",
|
||||
"member_add" => "添加用護",
|
||||
"password_null_not_update" => "密碼不填表示不更改",
|
||||
"if_save_file" => "檔尚未保存,是否保存?",
|
||||
"if_remove" => "確認刪除",
|
||||
"member_remove_tips" => "刪除後該用戶目錄會被清空",
|
||||
"group_remove_tips" => "刪除後該用戶組用戶無法登陸<br/>(需要重新設置用戶組)",
|
||||
"group_name" => "用戶組名",
|
||||
"member_remove_tips" => "刪除後該用護目錄會被清空",
|
||||
"group_remove_tips" => "刪除後該用護組用護無法登六<br/>(需要重新設置用護組)",
|
||||
"group_name" => "用護組名",
|
||||
"group_name_tips" => "建議英文名,不能重複",
|
||||
"group_desc" => "展示名稱",
|
||||
"group_desc_tips" => "組名描述",
|
||||
|
|
@ -278,9 +393,9 @@ $L= array(
|
|||
"group_role_ext_tips" => "多個用|分隔開",
|
||||
"group_role_file" => "檔管理",
|
||||
"group_role_upload" => "上傳下載",
|
||||
"group_role_user" => "用戶數據",
|
||||
"group_role_group" => "用戶組管理",
|
||||
"group_role_member" => "用戶管理",
|
||||
"group_role_user" => "用護數據",
|
||||
"group_role_group" => "用護組管理",
|
||||
"group_role_member" => "用護管理",
|
||||
"group_role_mkfile" => "新建檔",
|
||||
"group_role_mkdir" => "新建檔夾",
|
||||
"group_role_pathrname" => "重命名",
|
||||
|
|
@ -295,17 +410,17 @@ $L= array(
|
|||
"group_role_upload" => "允許上傳",
|
||||
"group_role_download" => "遠程下載",
|
||||
"group_role_passowrd" => "修改密碼",
|
||||
"group_role_config" => "用戶配置",
|
||||
"group_role_config" => "用護配置",
|
||||
"group_role_fav" => "收藏夾操作(添加/編輯/刪除)",
|
||||
"group_role_list" => "列表查看",
|
||||
"group_role_member_add" => "添加用戶",
|
||||
"group_role_member_edit" => "編輯用戶",
|
||||
"group_role_member_del" => "刪除用戶",
|
||||
"group_role_group_add" => "添加用戶組",
|
||||
"group_role_group_edit" => "編輯用戶組",
|
||||
"group_role_group_del" => "刪除用戶組",
|
||||
"group_role_member_add" => "添加用護",
|
||||
"group_role_member_edit" => "編輯用護",
|
||||
"group_role_member_del" => "刪除用護",
|
||||
"group_role_group_add" => "添加用護組",
|
||||
"group_role_group_edit" => "編輯用護組",
|
||||
"group_role_group_del" => "刪除用護組",
|
||||
"group_role_ext_warning" => "不允許此類檔的上傳,<br/>重命名(重命名為指定擴展名),<br/>編輯保存,遠程下載,解壓",
|
||||
"group_tips"=>"<li>1.用戶組名不能重複,修改組名後原屬於改組用戶會自動關聯</li><li>2.擴展名限制關係系統安全性,請務必謹慎操作<i>(果在web目錄下新建php;就意味著改程式的許可權對此用戶形同虛設)</i></li><li>3.戶管理、許可權組管理;查看許可權和增刪改許可權是綁定的;程式會自動關聯</li><li>4.設定許可權組能添加許可權組後,後續許可權是不繼承的<i>(此許可權相當於最高許可權)</i></li>",
|
||||
"group_tips"=>"<li>1.用護組名不能重複,修改組名後原屬於改組用護會自動關聯</li><li>2.擴展名限制關系系統安全性,請務必謹慎操作<i>(果在web目錄下新建php;就意味著改程式的許可權對此用護形同虛設)</i></li><li>3.護管理、許可權組管理;查看許可權和增刪改許可權是邦定的;程式會自動關聯</li><li>4.設定許可權組能添加許可權組後,後續許可權是不繼承的<i>(此許可權相當於最高許可權)</i></li>",
|
||||
|
||||
//explorer_ajax
|
||||
"not_null" => "必填項不能為空!",
|
||||
|
|
@ -320,7 +435,7 @@ $L= array(
|
|||
"copy_success" => "【複製】—— 覆蓋剪貼板成功!",
|
||||
"cute_success" => "【剪切】—— 覆蓋剪貼板成功!",
|
||||
"clipboard_state" => "剪切板狀態:",
|
||||
"no_permission_write" => "该文件或目录没有写权限",
|
||||
"no_permission_write" => "該文件或目錄沒有寫權限",
|
||||
"copy_not_exists" => "來源不存在",
|
||||
"current_has_parent" => "目標檔夾是原始檔案夾的子檔夾!",
|
||||
"past_success" => "<b>粘貼操作完成</b>",
|
||||
|
|
@ -330,7 +445,7 @@ $L= array(
|
|||
"zip_null" => "沒有選擇的檔或目錄",
|
||||
"unzip_success" => "解壓完成",
|
||||
"gotoline" => "跳轉到行",
|
||||
"path_is_current" => "所打開路徑和當前路徑一樣!",
|
||||
"path_is_current" => "所打開路徑和當前路徑壹洋!",
|
||||
"path_exists" => "該名稱已存在!",
|
||||
|
||||
//編輯器
|
||||
|
|
@ -340,6 +455,7 @@ $L= array(
|
|||
"wordwrap" => "自動換行/不自動換行",
|
||||
"char_all_display" => "顯示&隱藏不可見字元",
|
||||
"auto_complete" => "自動提示(取消)",
|
||||
"function_list" => "函數列表",
|
||||
"code_theme" => "代碼風格",
|
||||
"font_size" => "字體",
|
||||
|
||||
|
|
@ -347,7 +463,7 @@ $L= array(
|
|||
"button_ok" => "確定",
|
||||
"button_submit" => "提交",
|
||||
"button_set" => "設置",
|
||||
"button_cancle" => "取消",
|
||||
"button_cancel" => "取消",
|
||||
"button_edit" => "編輯",
|
||||
"button_save" => "保存",
|
||||
"button_save_all" => "保存全部",
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
<?php exit;?>{"root":{"role":"root","name":"Administrator","path":"","ext_not_allow":""},"guest":{"role":"guest","name":"guest","ext_not_allow":"php|asp|jsp"},"default":{"role":"default","name":"default","ext_not_allow":"php|asp|jsp","explorer:mkdir":1,"explorer:mkfile":1,"explorer:pathRname":1,"explorer:pathDelete":1,"explorer:zip":1,"explorer:unzip":1,"explorer:pathCopy":1,"explorer:pathCute":1,"explorer:pathCuteDrag":1,"explorer:clipboard":1,"explorer:pathPast":1,"explorer:pathInfo":1,"explorer:serverDownload":1,"explorer:fileUpload":1,"explorer:search":1,"app:user_app":1,"editor:fileSave":1}}
|
||||
<?php exit;?>{"root":{"role":"root","name":"Administrator","path":"","ext_not_allow":""},"default":{"role":"default","name":"default","ext_not_allow":"php|asp|jsp","explorer:mkdir":1,"explorer:mkfile":1,"explorer:pathRname":1,"explorer:pathDelete":1,"explorer:zip":1,"explorer:unzip":1,"explorer:pathCopy":1,"explorer:pathCute":1,"explorer:pathCuteDrag":1,"explorer:clipboard":1,"explorer:pathPast":1,"explorer:pathInfo":1,"explorer:pathInfoMuti":1,"explorer:serverDownload":1,"explorer:fileUpload":1,"explorer:search":1,"app:user_app":1,"editor:fileSave":1},"guest":{"role":"guest","name":"guest","ext_not_allow":"php|asp|jsp"}}
|
||||
|
|
@ -1 +1 @@
|
|||
<?php exit;?>{"admin":{"name":"admin","password":"21232f297a57a5a743894a0e4a801fc3","role":"root","status":1},"guest":{"name":"guest","password":"084e0343a0486ff05530df6c705c8bb4","role":"guest","status":1},"demo":{"name":"demo","password":"fe01ce2a7fbac8fafaed7c982a04e229","role":"default","status":1}}
|
||||
<?php exit;?>{"admin":{"name":"admin","password":"21232f297a57a5a743894a0e4a801fc3","role":"root","status":0},"guest":{"name":"guest","password":"084e0343a0486ff05530df6c705c8bb4","role":"guest","status":0},"demo":{"name":"demo","password":"fe01ce2a7fbac8fafaed7c982a04e229","role":"default","status":0}}
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
include ('./config/config.php');
|
||||
$app = new Application(); //声明控制器类
|
||||
$app->setDefaultController('explorer');//设置默认控制器
|
||||
$app->setDefaultAction('index'); //设置默认控制器函数
|
||||
$app = new Application();
|
||||
init_lang();
|
||||
init_setting();
|
||||
$app->run();
|
||||
?>
|
||||
|
|
@ -0,0 +1,121 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* @link http://www.kalcaddle.com/
|
||||
* @author warlee | e-mail:kalcaddle@qq.com
|
||||
* @copyright warlee 2014.(Shanghai)Co.,Ltd
|
||||
* @license http://kalcaddle.com/tools/licenses/license.txt
|
||||
*------
|
||||
* 字符串加解密类;
|
||||
* 一次一密;且定时解密有效
|
||||
* 可用于加密&动态key生成
|
||||
* demo:
|
||||
* 加密:echo Mcrypt::encode('abc','123');
|
||||
* 解密:echo Mcrypt::decode('9f843I0crjv5y0dWE_-uwzL_mZRyRb1ynjGK4I_IACQ','123');
|
||||
*/
|
||||
|
||||
class Mcrypt{
|
||||
public $default_key = 'a!takA:dlmcldEv,e';
|
||||
|
||||
/**
|
||||
* 字符加解密,一次一密,可定时解密有效
|
||||
*
|
||||
* @param string $string 原文或者密文
|
||||
* @param string $operation 操作(encode | decode)
|
||||
* @param string $key 密钥
|
||||
* @param int $expiry 密文有效期,单位s,0 为永久有效
|
||||
* @return string 处理后的 原文或者 经过 base64_encode 处理后的密文
|
||||
*/
|
||||
public function encode($string,$key = '', $expiry = 3600){
|
||||
$ckey_length = 4;
|
||||
$key = md5($key ? $key : $this->default_key); //解密密匙
|
||||
$keya = md5(substr($key, 0, 16)); //做数据完整性验证
|
||||
$keyb = md5(substr($key, 16, 16)); //用于变化生成的密文 (初始化向量IV)
|
||||
$keyc = substr(md5(microtime()), - $ckey_length);
|
||||
$cryptkey = $keya . md5($keya . $keyc);
|
||||
$key_length = strlen($cryptkey);
|
||||
$string = sprintf('%010d', $expiry ? $expiry + time() : 0).substr(md5($string . $keyb), 0, 16) . $string;
|
||||
$string_length = strlen($string);
|
||||
|
||||
$rndkey = array();
|
||||
for($i = 0; $i <= 255; $i++) {
|
||||
$rndkey[$i] = ord($cryptkey[$i % $key_length]);
|
||||
}
|
||||
|
||||
$box = range(0, 255);
|
||||
// 打乱密匙簿,增加随机性
|
||||
for($j = $i = 0; $i < 256; $i++) {
|
||||
$j = ($j + $box[$i] + $rndkey[$i]) % 256;
|
||||
$tmp = $box[$i];
|
||||
$box[$i] = $box[$j];
|
||||
$box[$j] = $tmp;
|
||||
}
|
||||
// 加解密,从密匙簿得出密匙进行异或,再转成字符
|
||||
$result = '';
|
||||
for($a = $j = $i = 0; $i < $string_length; $i++) {
|
||||
$a = ($a + 1) % 256;
|
||||
$j = ($j + $box[$a]) % 256;
|
||||
$tmp = $box[$a];
|
||||
$box[$a] = $box[$j];
|
||||
$box[$j] = $tmp;
|
||||
$result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256]));
|
||||
}
|
||||
$result = $keyc . str_replace('=', '', base64_encode($result));
|
||||
$result = str_replace(array('+', '/', '='),array('-', '_', '.'), $result);
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* 字符加解密,一次一密,可定时解密有效
|
||||
*
|
||||
* @param string $string 原文或者密文
|
||||
* @param string $operation 操作(encode | decode)
|
||||
* @param string $key 密钥
|
||||
* @param int $expiry 密文有效期,单位s,0 为永久有效
|
||||
* @return string 处理后的 原文或者 经过 base64_encode 处理后的密文
|
||||
*/
|
||||
public function decode($string,$key = '')
|
||||
{
|
||||
$string = str_replace(array('-', '_', '.'),array('+', '/', '='), $string);
|
||||
$ckey_length = 4;
|
||||
$key = md5($key ? $key : $this->default_key); //解密密匙
|
||||
$keya = md5(substr($key, 0, 16)); //做数据完整性验证
|
||||
$keyb = md5(substr($key, 16, 16)); //用于变化生成的密文 (初始化向量IV)
|
||||
$keyc = substr($string, 0, $ckey_length);
|
||||
|
||||
$cryptkey = $keya . md5($keya . $keyc);
|
||||
$key_length = strlen($cryptkey);
|
||||
$string = base64_decode(substr($string, $ckey_length));
|
||||
$string_length = strlen($string);
|
||||
|
||||
$result = '';
|
||||
$box = range(0, 255);
|
||||
$rndkey = array();
|
||||
for($i = 0; $i <= 255; $i++) {
|
||||
$rndkey[$i] = ord($cryptkey[$i % $key_length]);
|
||||
}
|
||||
// 打乱密匙簿,增加随机性
|
||||
for($j = $i = 0; $i < 256; $i++) {
|
||||
$j = ($j + $box[$i] + $rndkey[$i]) % 256;
|
||||
$tmp = $box[$i];
|
||||
$box[$i] = $box[$j];
|
||||
$box[$j] = $tmp;
|
||||
}
|
||||
// 加解密,从密匙簿得出密匙进行异或,再转成字符
|
||||
for($a = $j = $i = 0; $i < $string_length; $i++) {
|
||||
$a = ($a + 1) % 256;
|
||||
$j = ($j + $box[$a]) % 256;
|
||||
$tmp = $box[$a];
|
||||
$box[$a] = $box[$j];
|
||||
$box[$j] = $tmp;
|
||||
$result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256]));
|
||||
}
|
||||
if ((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0)
|
||||
&& substr($result, 10, 16) == substr(md5(substr($result, 26) . $keyb), 0, 16)
|
||||
) {
|
||||
return substr($result, 26);
|
||||
} else {
|
||||
return '';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -59,9 +59,10 @@ class Application {
|
|||
if (!method_exists($instance, $function)) {
|
||||
pr($function.' method not exists',1);
|
||||
}
|
||||
$instance -> $function();
|
||||
return $instance -> $function();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 运行自动加载的控制器
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ function _autoload($className){
|
|||
*/
|
||||
function init_model($model_name){
|
||||
if (!class_exists($model_name.'Model')) {
|
||||
$model_file = MODEL_DIR . strtolower($model_name) . 'Model.class.php';
|
||||
$model_file = MODEL_DIR.$model_name.'Model.class.php';
|
||||
require_once ($model_file);
|
||||
|
||||
if(!is_file($model_file)){
|
||||
|
|
@ -42,7 +42,7 @@ function init_model($model_name){
|
|||
*/
|
||||
function init_controller($controller_name){
|
||||
if (!class_exists($controller_name)) {
|
||||
$model_file = CONTROLLER_DIR . strtolower($controller_name) . '.class.php';
|
||||
$model_file = CONTROLLER_DIR.$controller_name.'.class.php';
|
||||
if(!is_file($model_file)){
|
||||
return false;
|
||||
}
|
||||
|
|
@ -144,6 +144,32 @@ function spend_time(&$pretime){
|
|||
return $spend;
|
||||
}
|
||||
|
||||
function check_code($code){
|
||||
header("Content-type: image/png");
|
||||
$fontsize = 18;$len = strlen($code);
|
||||
$width = 70;$height=27;
|
||||
$im = @imagecreatetruecolor($width, $height) or die("create image error!");
|
||||
$background_color = imagecolorallocate($im, 255, 255, 255);
|
||||
imagefill($im, 0, 0, $background_color);
|
||||
for ($i = 0; $i < 2000; $i++) {//获取随机淡色
|
||||
$line_color = imagecolorallocate($im, mt_rand(180,255),mt_rand(160, 255),mt_rand(100, 255));
|
||||
imageline($im,mt_rand(0,$width),mt_rand(0,$height), //画直线
|
||||
mt_rand(0,$width), mt_rand(0,$height),$line_color);
|
||||
imagearc($im,mt_rand(0,$width),mt_rand(0,$height), //画弧线
|
||||
mt_rand(0,$width), mt_rand(0,$height), $height, $width,$line_color);
|
||||
}
|
||||
$border_color = imagecolorallocate($im, 160, 160, 160);
|
||||
imagerectangle($im, 0, 0, $width-1, $height-1, $border_color);//画矩形,边框颜色200,200,200
|
||||
|
||||
for ($i = 0; $i < $len; $i++) {//写入随机字串
|
||||
$current = $str[mt_rand(0, strlen($str)-1)];
|
||||
$text_color = imagecolorallocate($im,mt_rand(30, 140),mt_rand(30,140),mt_rand(30,140));
|
||||
imagechar($im,10,$i*$fontsize+6,rand(1,$height/3),$code[$i],$text_color);
|
||||
}
|
||||
imagejpeg($im);//显示图
|
||||
imagedestroy($im);//销毁图片
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回当前浮点式的时间,单位秒;主要用在调试程序程序时间时用
|
||||
*
|
||||
|
|
@ -290,6 +316,7 @@ function show_json($data,$code = true,$info=''){
|
|||
if ($info != '') {
|
||||
$result['info'] = $info;
|
||||
}
|
||||
header("X-Powered-By: kodExplorer.");
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
echo json_encode($result);
|
||||
exit;
|
||||
|
|
@ -565,7 +592,7 @@ function pr($var, $exit = false){
|
|||
|
||||
/**
|
||||
* 调试输出变量,对象的值。
|
||||
参数任意个(任意类型的变量)
|
||||
* 参数任意个(任意类型的变量)
|
||||
*
|
||||
* @return echo
|
||||
*/
|
||||
|
|
@ -611,7 +638,7 @@ function rand_from_to($from, $to){
|
|||
* @param string $addChars 额外字符
|
||||
* @return string
|
||||
*/
|
||||
function rand_string($len = 4, $type = ''){
|
||||
function rand_string($len = 4, $type){
|
||||
$str = '';
|
||||
switch ($type) {
|
||||
case 0://大小写中英文
|
||||
|
|
|
|||
|
|
@ -34,30 +34,40 @@
|
|||
// 传入参数没有和输出无关时,则传入时处理成系统编码。
|
||||
function iconv_app($str){
|
||||
global $config;
|
||||
return iconv($config['system_charset'], $config['app_charset'], $str);
|
||||
$result = iconv($config['system_charset'], $config['app_charset'], $str);
|
||||
if (strlen($result)==0) {
|
||||
$result = $str;
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
function iconv_system($str){
|
||||
global $config;
|
||||
return iconv($config['app_charset'], $config['system_charset'], $str);
|
||||
$result = iconv($config['app_charset'], $config['system_charset'], $str);
|
||||
if (strlen($result)==0) {
|
||||
$result = $str;
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
function get_filesize($path){
|
||||
return abs(sprintf("%u",filesize($path)));
|
||||
}
|
||||
/**
|
||||
* 获取文件详细信息
|
||||
* 文件名从程序编码转换成系统编码,传入utf8,系统函数需要为gbk
|
||||
*/
|
||||
function file_info($path,$date_formate=false){
|
||||
if (!$date_formate) $date_formate = $GLOBALS['L']['time_type'];
|
||||
function file_info($path){
|
||||
$name = get_path_this($path);
|
||||
$size = abs(filesize($path));
|
||||
$size = get_filesize($path);
|
||||
$info = array(
|
||||
'name' => iconv_app($name),
|
||||
'path' => iconv_app(get_path_father($path)),
|
||||
'ext' => get_path_ext($path),
|
||||
'type' => 'file',
|
||||
'mode' => get_mode($path),
|
||||
'atime' => date($date_formate, fileatime($path)), //访问时间
|
||||
'ctime' => date($date_formate, filectime($path)), //创建时间
|
||||
'mtime' => date($date_formate, filemtime($path)), //最后修改时间
|
||||
'atime' => fileatime($path), //最后访问时间
|
||||
'ctime' => filectime($path), //创建时间
|
||||
'mtime' => filemtime($path), //最后修改时间
|
||||
'is_readable' => intval(is_readable($path)),
|
||||
'is_writeable' => intval(is_writeable($path)),
|
||||
'size' => $size,
|
||||
|
|
@ -68,16 +78,15 @@ function file_info($path,$date_formate=false){
|
|||
/**
|
||||
* 获取文件夹细信息
|
||||
*/
|
||||
function folder_info($path,$date_formate=false){
|
||||
if (!$date_formate) $date_formate = $GLOBALS['L']['time_type'];
|
||||
function folder_info($path){
|
||||
$info = array(
|
||||
'name' => iconv_app(get_path_this($path)),
|
||||
'path' => iconv_app(get_path_father($path)),
|
||||
'type' => 'folder',
|
||||
'mode' => get_mode($path),
|
||||
'atime' => date($date_formate, fileatime($path)), //访问时间
|
||||
'ctime' => date($date_formate, filectime($path)), //创建时间
|
||||
'mtime' => date($date_formate, filemtime($path)), //最后修改时间
|
||||
'atime' => fileatime($path), //访问时间
|
||||
'ctime' => filectime($path), //创建时间
|
||||
'mtime' => filemtime($path), //最后修改时间
|
||||
'is_readable' => intval(is_readable($path)),
|
||||
'is_writeable' => intval(is_writeable($path))
|
||||
);
|
||||
|
|
@ -106,16 +115,22 @@ function get_path_father($path){
|
|||
*/
|
||||
function get_path_ext($path){
|
||||
$name = get_path_this($path);
|
||||
$ext = '';
|
||||
if(strstr($name,'.')){
|
||||
$ext = substr($name,strrpos($name,'.')+1);
|
||||
return strtolower($ext);
|
||||
}else{
|
||||
return '';
|
||||
$ext = strtolower($ext);
|
||||
}
|
||||
if (strlen($ext)>3 && preg_match("/([\x81-\xfe][\x40-\xfe])/", $ext, $match)) {
|
||||
$ext = '';
|
||||
}
|
||||
return $ext;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//自动获取不重复文件(夹)名
|
||||
function get_filename_auto($path){
|
||||
//如果传入$file_add 则检测存在则自定重命名 a.txt 为a{$file_add}.txt
|
||||
function get_filename_auto($path,$file_add){
|
||||
$i=1;
|
||||
$father = get_path_father($path);
|
||||
$name = get_path_this($path);
|
||||
|
|
@ -125,9 +140,14 @@ function get_filename_auto($path){
|
|||
$name = substr($name,0,strlen($name)-strlen($ext));
|
||||
}
|
||||
while(file_exists($path)){
|
||||
if (isset($file_add) && $file_add != '') {
|
||||
$path = $father.$name.$file_add.$ext;
|
||||
$file_add.'-';
|
||||
}else{
|
||||
$path = $father.$name.'('.$i.')'.$ext;
|
||||
$i++;
|
||||
}
|
||||
}
|
||||
return $path;
|
||||
}
|
||||
|
||||
|
|
@ -177,7 +197,7 @@ function _path_info_more($dir, &$file_num = 0, &$path_num = 0, &$size = 0){
|
|||
$fullpath = $dir . "/" . $file;
|
||||
if (!is_dir($fullpath)) {
|
||||
$file_num ++;
|
||||
$size += filesize($fullpath);
|
||||
$size += get_filesize($fullpath);
|
||||
} else {
|
||||
_path_info_more($fullpath, $file_num, $path_num, $size);
|
||||
$path_num ++;
|
||||
|
|
@ -221,12 +241,12 @@ function path_info_muti($list,$time_type){
|
|||
$pathinfo['size'] += $temp['size'];
|
||||
}else{
|
||||
$pathinfo['file_num']++;
|
||||
$pathinfo['size'] += filesize($val['path']);
|
||||
$pathinfo['size'] += get_filesize($val['path']);
|
||||
}
|
||||
}
|
||||
$pathinfo['size_friendly'] = size_format($pathinfo['size']);
|
||||
$pathinfo['father_name'] = get_path_father($list[0]['path']);
|
||||
$pathinfo['mode'] = get_mode($pathinfo['father_name']);
|
||||
$father_name = get_path_father($list[0]['path']);
|
||||
$pathinfo['mode'] = get_mode($father_name);
|
||||
return $pathinfo;
|
||||
}
|
||||
|
||||
|
|
@ -432,9 +452,9 @@ function path_search($path,$search,$is_content=false,$file_ext='',$is_case=false
|
|||
}
|
||||
if ($is_content && is_file($f)){
|
||||
$fp = fopen($f, "r");
|
||||
$content = @fread($fp,filesize($f));
|
||||
$content = @fread($fp,get_filesize($f));
|
||||
fclose($fp);
|
||||
if ($strpos($content,$search) !== false){
|
||||
if ($strpos($content,iconv_app($search)) !== false){
|
||||
$filelist[] = file_info($f);
|
||||
}
|
||||
}
|
||||
|
|
@ -482,7 +502,8 @@ function chmod_path($path,$mod){
|
|||
*/
|
||||
function size_format($bytes, $precision = 2){
|
||||
if ($bytes == 0) return "0 B";
|
||||
$unit = array('TB' => 1099511627776, // pow( 1024, 4)
|
||||
$unit = array(
|
||||
'TB' => 1099511627776, // pow( 1024, 4)
|
||||
'GB' => 1073741824, // pow( 1024, 3)
|
||||
'MB' => 1048576, // pow( 1024, 2)
|
||||
'kB' => 1024, // pow( 1024, 1)
|
||||
|
|
@ -537,78 +558,77 @@ function ext_type($ext){
|
|||
}
|
||||
|
||||
/**
|
||||
* 文件下载
|
||||
* 输出、文件下载
|
||||
* 默认以附件方式下载;$download为false时则为输出文件
|
||||
*/
|
||||
function file_download($file){
|
||||
if (!file_exists($file)) show_json('file not exists');
|
||||
function file_put_out($file,$download=false){
|
||||
if (!is_file($file)) show_json('not a file!');
|
||||
set_time_limit(0);
|
||||
//ob_clean();//清除之前所有输出缓冲
|
||||
if (!file_exists($file)) show_json('file not exists',false);
|
||||
if (isset($_SERVER['HTTP_RANGE']) && ($_SERVER['HTTP_RANGE'] != "") &&
|
||||
preg_match("/^bytes=([0-9]+)-$/i", $_SERVER['HTTP_RANGE'], $match) && ($match[1] < $fsize)) {
|
||||
$start = $match[1];
|
||||
}else{
|
||||
$start = 0;
|
||||
}
|
||||
|
||||
$size = filesize($file);
|
||||
$size = get_filesize($file);
|
||||
header("Cache-Control: public");
|
||||
header("X-Powered-By: kodExplorer.");
|
||||
if ($download) {
|
||||
header("Content-Type: application/octet-stream");
|
||||
$filename = get_path_this($file);//解决在IE中下载时中文乱码问题
|
||||
if(preg_match('/MSIE/',$_SERVER['HTTP_USER_AGENT'])){
|
||||
$filename = str_replace('+','%20',urlencode($filename));
|
||||
}
|
||||
header("Content-Disposition: attachment;filename=".get_path_this($file));
|
||||
|
||||
if ($start > 0) {
|
||||
header("HTTP/1.1 206 Partial Content");
|
||||
header("Content-Length: " . ($size - $start));
|
||||
header("Content-Ranges: bytes".$start ."-".($size - 1)."/" .$size);
|
||||
header("Content-Disposition: attachment;filename=".$filename);
|
||||
}else{
|
||||
$mime = get_file_mime(get_path_ext($file));
|
||||
header("Content-Type: ".$mime);
|
||||
}
|
||||
if ($start > 0){
|
||||
header("HTTP/1.1 206 Partial Content");
|
||||
header("Content-Ranges: bytes".$start ."-".($size - 1)."/" .$size);
|
||||
header("Content-Length: ".($size - $start));
|
||||
}else{
|
||||
header("Content-Length: $size");
|
||||
header("Accept-Ranges: bytes");
|
||||
header("Content-Length: $size");
|
||||
}
|
||||
|
||||
$fp = fopen($file, "rb");
|
||||
fseek($fp, $start);
|
||||
while (!feof($fp)) {
|
||||
set_time_limit(0);
|
||||
print (fread($fp, 1024 * 8)); //输出文件
|
||||
flush();
|
||||
ob_flush();
|
||||
}
|
||||
fclose($fp);
|
||||
exit;
|
||||
}
|
||||
|
||||
/**
|
||||
* 文件代理输出
|
||||
*/
|
||||
function file_proxy_out($file){
|
||||
if (!file_exists($file)) show_json('file not exists',false);
|
||||
$mime = get_file_mime(get_path_ext($file));
|
||||
header("Cache-Control:public");
|
||||
header("Content-Type:".$mime);
|
||||
header("Content-Length: ".filesize($file)); //输出总长
|
||||
$fp = fopen($file, "rb");
|
||||
set_time_limit(0);
|
||||
while (!feof($fp)) {
|
||||
print (fread($fp, 1024 * 8)); //输出文件
|
||||
flush();
|
||||
ob_flush();
|
||||
}
|
||||
fclose($fp);
|
||||
exit;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 文件下载到服务器
|
||||
*/
|
||||
function file_download_this($from, $file_name){
|
||||
set_time_limit(0);
|
||||
$fp = @fopen ($from, "rb");
|
||||
if ($fp){
|
||||
$new_fp = @fopen ($file_name, "wb");
|
||||
fclose($new_fp);
|
||||
|
||||
$temp_file = $file_name.'.download';
|
||||
$download_fp = @fopen ($temp_file, "wb");
|
||||
while(!feof($fp)){
|
||||
fwrite($new_fp, fread($fp, 1024 * 8 ), 1024 * 8);
|
||||
if(!file_exists($file_name)){//删除目标文件;则终止下载
|
||||
fclose($download_fp);
|
||||
del_file($temp_file);
|
||||
del_file($file_name);
|
||||
return false;
|
||||
}
|
||||
fwrite($download_fp, fread($fp, 1024 * 8 ), 1024 * 8);
|
||||
}
|
||||
//下载完成,重命名临时文件到目标文件
|
||||
del_file($file_name);
|
||||
rename($temp_file,$file_name);
|
||||
return true;
|
||||
}else{
|
||||
return false;
|
||||
|
|
@ -620,6 +640,8 @@ function file_download_this($from, $file_name){
|
|||
*/
|
||||
function get_mode($file){
|
||||
$Mode = fileperms($file);
|
||||
$theMode = ' '.decoct($Mode);
|
||||
$theMode = substr($theMode,-4);
|
||||
$Owner = array();$Group=array();$World=array();
|
||||
if ($Mode &0x1000) $Type = 'p'; // FIFO pipe
|
||||
elseif ($Mode &0x2000) $Type = 'c'; // Character special
|
||||
|
|
@ -646,7 +668,7 @@ function get_mode($file){
|
|||
$Mode = $Type.$Owner['r'].$Owner['w'].$Owner['x'].' '.
|
||||
$Group['r'].$Group['w'].$Group['e'].' '.
|
||||
$World['r'].$World['w'].$World['e'];
|
||||
return $Mode;
|
||||
return $Mode.' ('.$theMode.') ';
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -673,16 +695,66 @@ function upload($fileInput, $path = './'){
|
|||
if (!isset($file)) show_json($L['upload_error_null'],false);
|
||||
|
||||
$file_name = iconv_system($file['name']);
|
||||
$info = _upload($file['tmp_name'],$file['size'],$path.$file_name);
|
||||
show_json($info['data'],$info['code'],$info['path']);
|
||||
}
|
||||
function _upload($tmp_name,$size,$save_path){
|
||||
global $L;
|
||||
$save_path = get_filename_auto($save_path);
|
||||
if(move_uploaded_file($tmp_name,$save_path)){
|
||||
return array('code'=>true,'data'=>$L['upload_success'],'path'=>$save_path);
|
||||
$save_path = get_filename_auto($path.$file_name);
|
||||
if(move_uploaded_file($file['tmp_name'],$save_path)){
|
||||
show_json($L['upload_success'],true,iconv_app($save_pathe));
|
||||
}else {
|
||||
return array('code'=>fasle,'data'=>$L['move_error']);
|
||||
show_json($L['move_error'],false);
|
||||
}
|
||||
}
|
||||
|
||||
//分片上传处理
|
||||
function upload_chunk($fileInput, $path = './',$temp_path){
|
||||
global $config,$L;
|
||||
$file = $_FILES[$fileInput];
|
||||
$chunk = isset($_REQUEST["chunk"]) ? intval($_REQUEST["chunk"]) : 0;
|
||||
$chunks = isset($_REQUEST["chunks"]) ? intval($_REQUEST["chunks"]) : 1;
|
||||
if (!isset($file)) show_json($L['upload_error_null'],false);
|
||||
$file_name = iconv_system($file['name']);
|
||||
|
||||
if ($chunks>1) {//并发上传,不一定有前后顺序
|
||||
$temp_file_pre = $temp_path.md5($temp_path.$file_name).'.part';
|
||||
if (get_filesize($file['tmp_name']) ==0) {
|
||||
show_json($L['upload_success'],false,'chunk_'.$chunk.' error!');
|
||||
}
|
||||
if(move_uploaded_file($file['tmp_name'],$temp_file_pre.$chunk)){
|
||||
$done = true;
|
||||
for($index = 0; $index<$chunks; $index++ ){
|
||||
if (!file_exists($temp_file_pre.$index)) {
|
||||
$done = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!$done){
|
||||
show_json($L['upload_success'],true,'chunk_'.$chunk.' success!');
|
||||
}
|
||||
|
||||
$save_path = $path.$file_name;
|
||||
$out = fopen($save_path, "wb");
|
||||
if ($done && flock($out, LOCK_EX)) {
|
||||
for( $index = 0; $index < $chunks; $index++ ) {
|
||||
if (!$in = fopen($temp_file_pre.$index,"rb")) break;
|
||||
while ($buff = fread($in, 4096)) {
|
||||
fwrite($out, $buff);
|
||||
}
|
||||
fclose($in);
|
||||
unlink($temp_file_pre.$index);
|
||||
}
|
||||
flock($out, LOCK_UN);
|
||||
fclose($out);
|
||||
}
|
||||
show_json($L['upload_success'],true,iconv_app($save_path));
|
||||
}else {
|
||||
show_json($L['move_error'],false);
|
||||
}
|
||||
}
|
||||
|
||||
//正常上传
|
||||
$save_path = get_filename_auto($path.$file_name); //自动重命名
|
||||
if(move_uploaded_file($file['tmp_name'],$save_path)){
|
||||
show_json($L['upload_success'],true,iconv_app($save_path));
|
||||
}else {
|
||||
show_json($L['move_error'],false);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -709,7 +781,7 @@ function write_log($log, $type = 'default', $level = 'log'){
|
|||
default: $target .= 'Log_' . $now_day . '.log';break;
|
||||
}
|
||||
//检测日志文件大小, 超过配置大小则重命名
|
||||
if (file_exists($target) && filesize($target) <= 100000) {
|
||||
if (file_exists($target) && get_filesize($target) <= 100000) {
|
||||
$file_name = substr(basename($target),0,strrpos(basename($target),'.log')).'.log';
|
||||
rename($target, dirname($target) .'/'. $file_name);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -542,9 +542,32 @@ function get_file_mime($ext){
|
|||
"z" => "application/x-compress",
|
||||
"zip" => "application/zip"
|
||||
);
|
||||
|
||||
//代码 或文本浏览器输出
|
||||
$text = array('oexe','inc','inf','csv','log','asc','tsv');
|
||||
$code = array("abap","abc","as","ada","adb","htgroups","htpasswd","conf","htaccess","htgroups",
|
||||
"htpasswd","asciidoc","asm","ahk","bat","cmd","c9search_results","cpp","c","cc","cxx","h","hh","hpp",
|
||||
"cirru","cr","clj","cljs","CBL","COB","coffee","cf","cson","Cakefile","cfm","cs","css","curly","d",
|
||||
"di","dart","diff","patch","Dockerfile","dot","dummy","dummy","e","ejs","ex","exs","elm","erl",
|
||||
"hrl","frt","fs","ldr","ftl","gcode","feature",".gitignore","glsl","frag","vert","go","groovy",
|
||||
"haml","hbs","handlebars","tpl","mustache","hs","hx","html","htm","xhtml","erb","rhtml","ini",
|
||||
"cfg","prefs","io","jack","jade","java","js","jsm","json","jq","jsp","jsx","jl","tex","latex",
|
||||
"ltx","bib","lean","hlean","less","liquid","lisp","ls","logic","lql","lsl","lua","lp","lucene",
|
||||
"Makefile","GNUmakefile","makefile","OCamlMakefile","make","md","markdown","mask","matlab",
|
||||
"mel","mc","mush","mysql","nix","m","mm","ml","mli","pas","p","pl","pm","pgsql","php","phtml",
|
||||
"ps1","praat","praatscript","psc","proc","plg","prolog","properties","proto","py","r","Rd",
|
||||
"Rhtml","rb","ru","gemspec","rake","Guardfile","Rakefile","Gemfile","rs","sass","scad","scala",
|
||||
"scm","rkt","scss","sh","bash",".bashrc","sjs","smarty","tpl","snippets","soy","space","sql",
|
||||
"styl","stylus","svg","tcl","tex","txt","textile","toml","twig","ts","typescript","str","vala",
|
||||
"vbs","vb","vm","v","vh","sv","svh","vhd","vhdl","xml","rdf","rss",
|
||||
"wsdl","xslt","atom","mathml","mml","xul","xbl","xaml","xq","yaml","yml","htm",
|
||||
"xib","storyboard","plist","csproj");
|
||||
if (array_key_exists($ext,$mimetypes)){
|
||||
return $mimetypes[$ext];
|
||||
}else{
|
||||
if(in_array($ext,$text) || in_array($ext,$code)){
|
||||
return "text/plain";
|
||||
}
|
||||
return 'application/octet-stream';
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 4.3 KiB |
|
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 2.7 KiB |
|
After Width: | Height: | Size: 8.5 KiB |
|
After Width: | Height: | Size: 7.0 KiB |
|
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 3.2 KiB |
|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.8 KiB |
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 5.6 KiB After Width: | Height: | Size: 5.6 KiB |
|
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 3.5 KiB |
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 2.9 KiB |
|
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 4.8 KiB |
|
After Width: | Height: | Size: 4.7 KiB |
|
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 2.9 KiB |
|
Before Width: | Height: | Size: 6.9 KiB After Width: | Height: | Size: 6.9 KiB |
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 3.9 KiB |
|
Before Width: | Height: | Size: 6.6 KiB After Width: | Height: | Size: 6.6 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.8 KiB |
|
Before Width: | Height: | Size: 7.0 KiB After Width: | Height: | Size: 7.0 KiB |
|
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.5 KiB |
|
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 2.9 KiB |
|
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 4.2 KiB |
|
Before Width: | Height: | Size: 5.9 KiB After Width: | Height: | Size: 5.9 KiB |
|
Before Width: | Height: | Size: 8.9 KiB After Width: | Height: | Size: 8.9 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 6.3 KiB After Width: | Height: | Size: 6.3 KiB |
|
After Width: | Height: | Size: 7.9 KiB |
|
After Width: | Height: | Size: 7.3 KiB |