KODExplorer

master
MaNing 3 years ago
parent 07b7bee252
commit 6a42e3f339

File diff suppressed because it is too large Load Diff

@ -1,2 +1,171 @@
# KODExplorer # KodExplorer
----
[![Home page](https://img.shields.io/badge/home-page-yellow.svg?style=flat)](http://kodcloud.com) [![GPLV3 License](https://img.shields.io/badge/Licence-GPLV3-green.svg?style=flat)](http://kodcloud.com) [![Download](http://kodcloud.com/tools/version/?analyze/download)](https://gitee.com/kalcaddle/KODExplorer/repository/archive/master.zip)
> KodExplorer可道云原名芒果云是基于Web技术的私有云和在线文件管理系统。致力于为用户提供安全可控、可靠易用、高扩展性的私有云解决方案。用户只需通过简单环境搭建即可使用KodExplorer快速完成私有云/私有网盘/在线文档管理系统的部署和搭建。可道云提供了类windows经典用户界面延续了windows平台的用户界面、操作逻辑和使用习惯支持100余种文件格式的在线预览解决了文件在线存储与管理、共享和跨平台访问、在线办公影音娱乐等一系列问题使得用户的私有云产品可以拥有本地操作一样方便、快捷、安全的体验。
> 全平台支持:LinuxWindowsMac; 只需要php5以上服务器环境.
-----
> 开源协议: 采用GPL v3协议; 注: 开源版和商业版不是同一个版本。开源版是可道云商业版的一个衍生子版本,提供给个人或开发者使用。团队通过商业版授权、功能增强来盈利确保团队及项目不断发展。进一步会开源更多的功能及组件贡献到开源版中。
![](https://raw.githubusercontent.com/kalcaddle/static/master/images/kod/common2.png)
![](https://raw.githubusercontent.com/kalcaddle/static/master/images/kod/common3.png)
# 特性
- 像使用操作系统一样使用体验,右键操作,拖拽,快捷键……
- 框中选择拖拽移动拖拽上传在线编辑器影音播放器解压缩。全面ajax保证性能和体验
- 各个功能直接无缝连接;以对话框形式存在,多任务管理等功能
- 完备的中文支持,各种情况下乱码解决;
## 文件管理
- 便捷的文件选择单选鼠标框选shift连选ctrl随意选择键盘上下左右、home、end选择同时支持类似windows的键盘字母快捷定位文件功能
- 文件操作:选择文件后,可以进行复制,剪切,删除,属性查看,压缩,重命名,打开预览等操作……
- 文件上传多文件批量上传html5拖拽上传(拖拽到窗口实现无缝上传)
- 右键功能:文件右键,文件夹右键,多选后右键操作,桌面右键,树目录右键操作,右键菜单绑定快捷键 (全选——复制——剪切——粘贴——删除——重命名,设置……)
- 文件浏览:列表模式,图标模式;双击进入子文件夹;地址栏操作;打开文件夹记录逆势操作记录(前进后退)
- 拖拽操作:选中后拖拽,实现剪切到指定文件夹功能;支持拖拽到文件夹、地址栏路径、回收站、左侧树目录等
- 快捷键操作delete删除ctrl+A全选ctrl+C复制ctrl+X剪切up/down/left/right/home/end选择文件等等几乎还原了windows的所有快捷键操作
- 强大的视图综合windows和mac系统文件管理的有点整合了图标模式、列表模式、分栏模式极大方便了不同场景下的操作体验
- 多用户支持,自定义角色组。
- 剪贴板:复制,剪切,粘贴,清除
- 收藏夹:将文件、文件夹添加到收藏夹中
- 快捷分享:将文件或文件夹共享给其他人。
- 搜索:支持文件、文件夹快捷搜索;同时支持文本文件内容全文搜索;搜索结果直接跳转到文件对应行
- 上传:支持文件多选上传,文件夹上传、支持拖拽文件、文件夹直接上传(webkit内核);支持断点续传、自动分块上传
- 离线下载:支持下载链接直接下载到服务器
- 下载:支持多选或文件夹直接下载;下载支持断点续传、多线程下载
- 在线解压缩: 全功能在线解压ziprar7ztargziptgz并完美解决了linux到windows压缩包内中文解压乱码的问题
- 其他特性:完美解决各种系统中文乱码问题;文件名自然排序;自动计算选中文件个数和大小;图片自动缩略图展示
## 在线预览
- 打开方式支持:可以选择对应关联了扩展名的打开方式,可以通过安装插件扩展各种文件打开方式;
- 文本文件:文本文件内容查看编辑保存;,
- 图片文件:自动生成缩略图,图片幻灯片播放;
- 音频播放在线播放音乐视频文件支持mp3wavwmam4aaacogaoggwebmawav等常见格式
- 视频播放在线视频文件播放支持格式flvf4vmp4mkvwmvrmvbvobwebmwebmv等各种视频格式
- 办公文档支持pdf、word、excle、ppt下各种文件格式的在线预览
- 压缩文件支持ziprar7ztargziptgz 等压缩文件直接在线预览,而无需先解压;可以打开压缩包内的文件,同时支持打开方式选择
- 工程文档支持AutoCAD各种图纸格式、3d模型在线预览
- 其他文档swf、pdf、epub等文件实现在线预览支持
## 编辑器
- 超过120种语言的语法高亮显示部分编程语言自动纠错支持html、js、php等语言代码格式化
- 支持多标签:同时编辑多份文件,拖动标签可以切换顺序;支持最大化模式
- 自动完成
- 多光标支持:支持多光标同时编辑,鼠标中间拖拽直接多光标选中
- 主题切换:选择你喜欢的编程风格
- Web开发支持Emmet插件(html/js/css),进行极速编程
- 快速预览支持html、php等文件结果快速预览
- 查找、替换;撤销反撤销,维持历史记录;支持用正则表达式搜索和替换
- 自动补全[]{}()""'';自动换行,自定义字体,鼠标拖放文本,代码折叠等诸多实用功能
- markdown支持支持语法高亮、快捷工具栏支持实时预览支持latex公式、流程图、时序图、甘特图、类图等高级特性
# 安装
**1. 通过源码安装**
```
git clone https://gitee.com/kalcaddle/KODExplorer.git
chmod -Rf 777 ./KODExplorer/*
```
**2. 下载安装**
```
wget https://gitee.com/kalcaddle/KODExplorer/repository/archive/master.zip
unzip master.zip
chmod -Rf 777 ./*
```
# 使用帮助
* 忘记密码
> 登陆页面: 点击"忘记密码".
* 拖拽上传及文件夹上传
> 浏览器适配: ChromeFirefox and Edge
* 如何使系统更安全?
> 确认管理员密码足够复杂,并养成定期修改密码的习惯.
> 开启登陆验证码.
> 设置http服务器禁用列目录功能;
> php设置: 设置防跨站保护开启open_basedir.
# 一些界面截图
### 文件管理:
- 概览
![Overview](https://raw.githubusercontent.com/kalcaddle/static/master/images/kod/file.png)
- 文件视图 图标模式,列表模式(支持文件夹展开),分栏模式
![File list Type](https://raw.githubusercontent.com/kalcaddle/static/master/images/kod/file-resize.png)
- 压缩包 压缩/解压/在线预览 (ziprar7ztargziptgz)
![Archives create/extract/preview](https://raw.githubusercontent.com/kalcaddle/static/master/images/kod/file-unzip.png)
- 拖拽上传
![Drag upload](https://raw.githubusercontent.com/kalcaddle/static/master/images/kod/file-upload-drag.png)
- 播放器
![Player](https://raw.githubusercontent.com/kalcaddle/static/master/images/kod/file-player.png)
- office在线预览编辑
![Online Office](https://raw.githubusercontent.com/kalcaddle/static/master/images/kod/file-open-pptx.png)
### 编辑器:
- 概览
![Overview](https://raw.githubusercontent.com/kalcaddle/static/master/images/kod/editor.png)
- 实时预览
![Live preview](https://raw.githubusercontent.com/kalcaddle/static/master/images/kod/editor-preview.png)
- 文件夹搜索
![Search folder](https://raw.githubusercontent.com/kalcaddle/static/master/images/kod/editor-search.png)
- Markdown
![Markdown](https://raw.githubusercontent.com/kalcaddle/static/master/images/kod/file-markdown.png)
- 代码风格
![Code style](https://raw.githubusercontent.com/kalcaddle/static/master/images/kod/editor-theme.png)
### 其他:
- 权限组
![System role](https://raw.githubusercontent.com/kalcaddle/static/master/images/kod/system-role.png)
- 多彩的主题风格
![Colorful Theme](https://raw.githubusercontent.com/kalcaddle/static/master/images/kod/system-theme.png)
- 自定义主题
![Custom Theme](https://raw.githubusercontent.com/kalcaddle/static/master/images/kod/common-alpha.png)
- 多语言支持
![Language](https://raw.githubusercontent.com/kalcaddle/static/master/images/kod/language.png)
# 运行环境
- 服务器:
- WindowsLinuxMac ...
- PHP 5.0+
- 数据库: File system driver;sqlite;mysql;...
- 浏览器适配:
- Chrome
- Firefox
- Opera
- IE8+
> 注: 你甚至可以将kod安装到你的路由器、家用NAS设备
# 鸣谢
kod项目离不开其他的开源项目
* seajs
* jQuery
* ace
* [zTree]
* webuploader
* artTemplate
* artDialog
* jQuery-contextMenu
* ...

@ -0,0 +1,109 @@
<?php
/*
* @link http://kodcloud.com/
* @author warlee | e-mail:kodcloud@qq.com
* @copyright warlee 2014.(Shanghai)Co.,Ltd
* @license http://kodcloud.com/tools/license/license.txt
*/
if(!function_exists('get_client_ip')){
require_once(dirname(dirname(__FILE__)).'/function/web.function.php');
}
class SSO{
static private function init(){
$sessionName = 'KOD_SESSION_SSO';
$sessionID = $_COOKIE[$sessionName]?$_COOKIE[$sessionName]:md5(uniqid());
$basicPath = dirname(dirname(dirname(__FILE__))).'/';
$sessionPath = $basicPath.'data/session/';
if(file_exists($basicPath.'config/define.php')){
include($basicPath.'config/define.php');
$sessionPath = DATA_PATH.'session/';
}
if(!file_exists($sessionPath)){
mkdir($sessionPath);
}
$sessionSavePath = @session_save_path();
@session_write_close();
@session_name($sessionName);
if( class_exists('SaeStorage') ||
defined('SAE_APPNAME') ||
defined('SESSION_PATH_DEFAULT') ||
@ini_get('session.save_handler') != 'files' ||
isset($_SERVER['HTTP_APPNAME']) ){
//sae 关闭自定义session路径
}else{
@session_save_path($sessionPath);//session path
}
@session_id($sessionID);
@session_start();
$_SESSION['kodSSO'] = true;
@session_write_close();
unset($_SESSION);
@session_start();
if(!isset($_SESSION['kodSSO']) || !$_SESSION['kodSSO']){
@session_save_path($sessionSavePath);//session path
@session_start();
$_SESSION['kodSSO'] = true;
@session_write_close();
}
//echo '<pre>';var_dump($_SESSION);echo '</pre>';exit;
return $_SESSION;
}
/**
* 设置session 认证
* @param [type] $key [认证key]
*/
static public function sessionSet($key,$value='success'){
self::init();
@session_start();
$_SESSION[$key] = $value;
@session_write_close();
}
static public function sessionCheck($key,$value='success'){
$session = self::init();
if( isset($session[$key]) && $session[$key] == $value){
return true;
}
return false;
}
/**
* 直接调用kod的登陆检测(适用于同服务器同域名;)
* @param [type] $kodHost kod的地址;例如 http://test.com/ ;默认为插件目录
* @param [type] $appKey 应用标记 例如 loginCheck
* @param [type] $appUrl 验证后跳转到的url;默认为当前url
* @param [type] $auth 验证方式:例如:'check=userName&value=smartx'
* check (userID|userName|roleID|roleName|groupID|groupName) 校验方式,为空则所有登陆用户
*/
static public function sessionAuth($appKey,$auth,$kodHost='',$appUrl=''){
if($kodHost==''){
$appUrl = this_url();
if(strstr($appUrl,'/plugins/')){
$kodHost = substr($appUrl,0,strpos($appUrl,'/plugins/'));
}else{
if(isset($_COOKIE['APP_HOST'])){
$kodHost = $_COOKIE['APP_HOST'];
}else{
$kodHost = $_SERVER['HTTP_REFERER'];
if(strstr($kodHost,'/index.php?')){
$kodHost = substr($kodHost,0,strpos($kodHost,'/index.php?'));
}else if(strstr($kodHost,'/?')){
$kodHost = substr($kodHost,0,strpos($kodHost,'/?'));
}
}
}
}
$authUrl = rtrim($kodHost,'/').'/index.php?user/sso&app='.$appKey.'&'.$auth;
if($appUrl == ''){
$appUrl = this_url();
}
if(!self::sessionCheck($appKey)){
session_destroy();
header('Location: '.$authUrl.'&link='.rawurlencode($appUrl));
exit;
}
}
}

@ -0,0 +1,53 @@
<?php
/*
* @link http://kodcloud.com/
* @author warlee | e-mail:kodcloud@qq.com
* @copyright warlee 2014.(Shanghai)Co.,Ltd
* @license http://kodcloud.com/tools/license/license.txt
*/
class api extends Controller{
function __construct(){
parent::__construct();
}
/**
* 通用文件预览方案
* image,media,cad,office,webodf,pdf,epub,swf,text
* 跨域:epub,pdf,odf,[text];
* @return [type] [description]
*/
public function view(){
if(!isset($this->in['path'])){
show_tips('参数错误!');
}
$this->checkAccessToken();
$this->setIdentify();
$this->display('view.html');
}
private function setIdentify(){
if(! $_SESSION['accessPlugin'] ){
session_start();
$_SESSION['accessPlugin'] = 'ok';
session_write_close();
}
}
public function checkAccessToken(){
$model = $this->loadModel('Plugin');
$config = $model->getConfig('fileView');
if(!$config['apiKey']){
return;
}
$timeTo = isset($this->in['timeTo'])?intval($this->in['timeTo']):'';
$token = md5($config['apiKey'].$this->in['path'].$timeTo);
//show_tips(array($config['apiKey'],$token,$this->in));
if($token != $this->in['token']){
show_tips('token 错误!');
}
if($timeTo != '' && $timeTo <= time()){
show_tips('token已失效!');
}
}
}

@ -0,0 +1,141 @@
<?php
/*
* @link http://kodcloud.com/
* @author warlee | e-mail:kodcloud@qq.com
* @copyright warlee 2014.(Shanghai)Co.,Ltd
* @license http://kodcloud.com/tools/license/license.txt
*/
class app extends Controller{
function __construct() {
parent::__construct();
$this->sql=new FileCache(USER_SYSTEM.'apps.php');
}
/**
* 用户首页展示
*/
public function index() {
$this->display('index.html');
}
public function initApp(){
//为空则不初始化桌面
if(!$this->config['settingSystem']['desktopFolder']){
return;
}
$list = $this->sql->get();
$newUserApp = $this->config['settingSystem']['newUserApp'];
$default = explode(',',$newUserApp);
$info = array();
foreach ($default as $key) {
$info[$key] = $list[$key];
}
$desktop = iconv_system(HOME.DESKTOP_FOLDER.'/');
if($GLOBALS['isRoot'] == 1){
$desktop = iconv_system(MYHOME.DESKTOP_FOLDER.'/');
}
mk_dir($desktop);
if(!path_writeable($desktop)){
return;
}
foreach ($info as $key => $data) {
if (!is_array($data)) {
continue;
}
$path = $desktop.iconv_system($key).'.oexe';
unset($data['name']);
unset($data['desc']);
unset($data['group']);
file_put_contents($path, json_encode($data));
}
}
/**
* 用户app 添加、编辑
*/
public function userApp() {
$path = _DIR($this->in['path']);
if(get_path_ext($path) != 'oexe'){
$path .= '.oexe';
}
if (!checkExt($path)) {
show_json(LNG('error'));exit;
}
$data = $this->_init();
unset($data['name']);
unset($data['path']);
unset($data['desc']);
unset($data['group']);
$res = file_put_contents($path, json_encode($data));
show_json(LNG('success'));
}
/**
* 获取列表
*/
public function get() {
$list = array();
if (!isset($this->in['group']) || $this->in['group']=='all') {
$list = $this->sql->get();
}else{
$list = $this->sql->get(array('group',$this->in['group']));
}
$list = array_reverse($list);
show_json($list);
}
/**
* 添加
*/
public function add() {
$res=$this->sql->set(rawurldecode($this->in['name']),$this->_init());
if($res) show_json(LNG('success'));
show_json(LNG('error_repeat'),false);
}
/**
* 编辑
*/
public function edit() {
//查找到一条记录,修改为该数组
$this->sql->remove(rawurldecode($this->in['old_name']));
if($this->sql->set(rawurldecode($this->in['name']),$this->_init())){
show_json(LNG('success'));
}
show_json(LNG('error_repeat'),false);
}
/**
* 删除
*/
public function del() {
if($this->sql->remove(rawurldecode($this->in['name']))){
show_json(LNG('success'));
}
show_json(LNG('error'),false);
}
public function getUrlTitle(){
$html = curl_get_contents($this->in['url']);
$result = match_text($html,"<title>(.*)<\/title>");
if (strlen($result)>50) {
$result = mb_substr($result,0,50,'utf-8');
}
if (!$result || strlen($result) == 0) {
$result = $this->in['url'];
$result = str_replace(array('http://','&','/'),array('','@','-'), $result);
}
show_json($result);
}
private function _init(){
$data = rawurldecode($this->in['data']);
$arr = json_decode($data,true);
if(!is_array($arr)){
show_json(LNG('error'),false);
}
return $arr;
}
}

@ -0,0 +1,32 @@
<?php
/*
* @link http://kodcloud.com/
* @author warlee | e-mail:kodcloud@qq.com
* @copyright warlee 2014.(Shanghai)Co.,Ltd
* @license http://kodcloud.com/tools/license/license.txt
*/
class desktop extends Controller{
function __construct() {
parent::__construct();
}
public function index() {
$wap = is_wap() && (!isset($_COOKIE['forceWap']) || $_COOKIE['forceWap'] == '1');
$desktopApps = include(DATA_PATH.'system/desktop_app.php');
$wall = $this->config['user']['wall'];
if( !strstr($wall,'/') ){
$wall = STATIC_PATH.'images/wall_page/'.$wall.'.jpg';
}
$wall = str_replace('&amp;','&',$wall);
$desktop = iconv_system(HOME.DESKTOP_FOLDER.'/');
if($GLOBALS['isRoot'] == 1){
$desktop = iconv_system(MYHOME.DESKTOP_FOLDER.'/');
}
mk_dir($desktop);
$this->assign('wall',$wall);
$this->assign('desktopApps',$desktopApps);
$this->display('index.html');
}
}

@ -0,0 +1,152 @@
<?php
/*
* @link http://kodcloud.com/
* @author warlee | e-mail:kodcloud@qq.com
* @copyright warlee 2014.(Shanghai)Co.,Ltd
* @license http://kodcloud.com/tools/license/license.txt
*/
class editor extends Controller{
function __construct() {
parent::__construct();
}
// 多文件编辑器
public function index(){
$this->themeSet();
$this->display('editor.html');
}
// 单文件编辑
public function edit(){
$this->themeSet();
$this->display('edit.html');
}
private function themeSet(){
$setClass = '';
//获取编辑器配置数据
$editorConfig = $this->config['editorDefault'];
$configFile = USER.'data/editor_config.php';
if (!file_exists(iconv_system($configFile))) {//不存在则创建
$sql=FileCache::save($configFile,$editorConfig);
}else{
$editorConfig=FileCache::load($configFile);
}
$blackTheme = array("ambiance","idle_fingers","monokai","pastel_on_dark","twilight",
"solarized_dark","tomorrow_night_blue","tomorrow_night_eighties");
if(in_array($editorConfig['theme'],$blackTheme)){
$setClass = 'class="code-theme-black"';
}
$this->assign('editorConfig',json_encode($editorConfig));//获取编辑器配置信息
$this->assign('codeThemeBlack',$setClass);//获取编辑器配置信息
}
// 获取文件数据
public function fileGet(){
if(isset($this->in['fileUrl'])){
$pass = $this->config['settingSystem']['systemPassword'];
$fileUrl = $this->in['fileUrl'];
if(!request_url_safe($fileUrl)){
show_json(LNG('url error!'),false);
}
$urlInfo = parse_url_query($fileUrl);
if( isset($urlInfo['fid']) &&
strlen(Mcrypt::decode($urlInfo['fid'],$pass)) != 0
){
$filepath = Mcrypt::decode($urlInfo['fid'],$pass);
$displayName = get_path_this($filepath);
if(isset($urlInfo['downFilename'])){
$displayName = rawurldecode($urlInfo['downFilename']);
}
}else{
$displayName = rawurldecode($urlInfo['name']);
$filepath = $fileUrl.'&accessToken='.access_token_get();
}
}else{
$displayName = rawurldecode($this->in['filename']);
$filepath =_DIR($this->in['filename']);
if (!file_exists($filepath)){
show_json(LNG('not_exists'),false);
}
if (!path_readable($filepath)){
show_json(LNG('no_permission_read_all'),false);
}
if (filesize($filepath) >= 1024*1024*20){
show_json(LNG('edit_too_big'),false);
}
}
$fileContents=file_get_contents($filepath);//文件内容
//echo $fileContents;exit;
if(isset($this->in['charset']) && $this->in['charset']){
$charset = strtolower($this->in['charset']);
}else{
$charset = get_charset($fileContents);
}
if ($charset !='' &&
$charset !='utf-8' &&
function_exists("mb_convert_encoding")
){
$fileContents = @mb_convert_encoding($fileContents,'utf-8',$charset);
}
$data = array(
'ext' => get_path_ext($displayName),
'name' => iconv_app(get_path_this($displayName)),
'filename' => $displayName,
'charset' => $charset,
'base64' => true,// 部分防火墙编辑文件误判问题处理
'content' => base64_encode($fileContents)
);
show_json($data);
}
public function fileSave(){
$fileStr = rawurldecode($this->in['filestr']);
$path =_DIR($this->in['path']);
if(isset($this->in['create_file']) && !file_exists($path)){//不存在则创建
if(!@touch($path)){
show_json(LNG('create_error'),false);
}
}
if (!path_writeable($path)) show_json(LNG('no_permission_write_file'),false);
//支持二进制文件读写操作base64方式
if(isset($this->in['base64'])){
$fileStr = base64_decode($fileStr);
}
$charset = strtolower($this->in['charset']);
if(isset($this->in['charsetSave'])){
$charset = strtolower($this->in['charsetSave']);
}
if ( $charset !='' &&
$charset != 'utf-8' &&
$charset != 'ascii' &&
function_exists("mb_convert_encoding")
) {
$fileStr = @mb_convert_encoding($fileStr,$charset,'utf-8');
}
$fp=fopen($path,'wb');
fwrite($fp,$fileStr);
fclose($fp);
show_json(LNG('save_success'));
}
/*
* 获取编辑器配置信息
*/
public function setConfig(){
$file = USER.'data/editor_config.php';
if (!path_writeable(iconv_system($file))) {//配置不可写
show_json(LNG('no_permission_write_file'),false);
}
$key= $this->in['k'];
$value = $this->in['v'];
if ($key !='' && $value != '') {
$sql=new FileCache($file);
$sql->set($key,$value);//没有则添加一条
show_json(LNG('setting_success'));
}else{
show_json(LNG('error'),false);
}
}
}

File diff suppressed because it is too large Load Diff

@ -0,0 +1,82 @@
<?php
/*
* @link http://kodcloud.com/
* @author warlee | e-mail:kodcloud@qq.com
* @copyright warlee 2014.(Shanghai)Co.,Ltd
* @license http://kodcloud.com/tools/license/license.txt
*/
class fav extends Controller{
private $sql;
function __construct(){
parent::__construct();
$this->sql=new FileCache(USER.'data/fav.php');
}
/**
* 获取收藏夹json
*/
public function get() {
show_json($this->sql->get());
}
/**
* 添加
*/
public function add() {
$name = $this->in['name'];
$path = $this->in['path'];
if($this->sql->get($name)){//已存在则自动重命名
$index = 0;
while ($this->sql->get($name.'('.$index.')')) {
$index ++;
}
$name = $name.'('.$index.')';
}
$res=$this->sql->set(
$name,
array(
'name' => $name,
'path' => $path,
'ext' => $this->in['ext'],
'type' => $this->in['type']
)
);
show_json(LNG('success'));
}
/**
* 编辑
*/
public function edit() {
$this->in['name'] = $this->in['name'];
$this->in['path'] = $this->in['path'];
$this->in['nameTo'] = $this->in['nameTo'];
$newFav = $this->sql->get($this->in['name']);
if(!isset($newFav['type'])){
$newFav['type'] = 'folder';
}
//查找到一条记录,修改为该数组
$toArray=array(
'name'=>$this->in['nameTo'],
'path'=>$this->in['pathTo'],
'type'=>$newFav['type']
);
$this->sql->remove($this->in['name']);
if($this->sql->set($this->in['nameTo'],$toArray)){
show_json(LNG('success'));
}
show_json(LNG('error_repeat'),false);
}
/**
* 删除
*/
public function del() {
$this->in['name'] = $this->in['name'];
if($this->sql->remove($this->in['name'])){
show_json(LNG('success'));
}
show_json(LNG('error'),false);
}
}

@ -0,0 +1,223 @@
<?php
/*
* @link http://kodcloud.com/
* @author warlee | e-mail:kodcloud@qq.com
* @copyright warlee 2014.(Shanghai)Co.,Ltd
* @license http://kodcloud.com/tools/license/license.txt
*
*
* 插件管理:页面;列表;
*/
class pluginApp extends Controller{
function __construct() {
parent::__construct();
}
//?pluginApp/to/epubReader/index&a=1
//?pluginApp/to/epubReader/&a=1 ==>ignore index;
public function to() {
$route = $this->in['URLremote'];
if(count($route) >= 3){
$app = clear_html($route[2]);
$action = $route[3];
if(count($route) == 3){
$action = 'index';
}
$model = $this->loadModel('Plugin');
if(!$model->checkAuth($app)){
if(!$_SESSION['kodLogin']){
show_tips("出错了!您尚未登录",APP_HOST,3);
}
show_tips("出错了!插件未开启,或您没有{$app}插件的权限!");
}
$appConfig = $model->getConfig($app);
if(!$appConfig['pluginAuthOpen'] && !$this->checkAccessPlugin()){
if(!$_SESSION['kodLogin']){
show_tips("出错了!您尚未登录",APP_HOST,3);
}
show_tips("出错了!插件未开启,或您没有{$app}插件的权限");
}
Hook::trigger("pluginRun.before",$app.'Plugin.'.$action);
Hook::trigger($app.'Plugin.'.$action.'.before');
Hook::apply($app.'Plugin.'.$action);
Hook::trigger($app.'Plugin.'.$action.'.after');
Hook::trigger("pluginRun.after",$app.'Plugin.'.$action);
}
}
//权限认证
private function checkAccessPlugin(){
if( $_SESSION['kodLogin'] == true ||
$_SESSION['accessPlugin'] == 'ok' ||
$this->checkAccessShare()
){
return true;
}
return false;
}
private function checkAccessShare(){
if(!isset($this->in['path'])){
return false;
}
$share = KOD_USER_SHARE;
if(substr(urldecode($this->in['path']),0,strlen($share)) == $share){
return true;
}
return false;
}
//plugin manager
public function index() {
$this->display('index.html');
}
public function appList(){
$model = $this->loadModel('Plugin');
$list = $model->viewList();
show_json($list);
}
public function changeStatus(){
if( !isset($this->in['app']) ||
!isset($this->in['status'])){
show_json(LNG('data_not_full'),false);
}
$app = $this->in['app'];
$status = $this->in['status']?1:0;
$model = $this->loadModel('Plugin');
//启用插件则检测配置文件,必填字段是否为空;为空则调用配置
if($status){
$config = $model->getConfig($app);
$package = $model->getPackageJson($app);
$needConfig = false;
foreach($package['configItem'] as $key=>$item) {
if( (isset($item['require']) && $item['require']) &&
(!isset($item['value']) || $item['value'] === '' || $item['value'] === null) &&
(!isset($config[$key]) || $config[$key] == "")
){
$needConfig = true;
break;
}
}
if($needConfig){
show_json('needConfig',false);
}
}
$model->changeStatus($app,$status);
$list = $model->viewList();
show_json($list);
}
public function setConfig(){
if( !$this->in['app'] ||
!$this->in['value']){
show_json(LNG('data_not_full'),false);
}
$json = $this->in['value'];
$app = $this->in['app'];
$model = $this->loadModel('Plugin');
//重置为默认配置
if($json == 'reset'){
$json = $model->getConfigDefault($app);
}else{
if(!is_array($json)){
show_json($json,false);
}
}
$model->changeStatus($app,1);
$model->setConfig($app,$json);
show_json(LNG('success'));
}
// download=>fileSize=>unzip=>remove
public function install(){
if(!preg_match("/^[0-9a-zA-Z_]*$/",$this->in['app'])) show_json("error!",false);
$app = _DIR_CLEAR($this->in['app']);
$appPath = PLUGIN_DIR.$app.'.zip';
$appPathTemp = $appPath.'.downloading';
switch($this->in['step']){
case 'check':
$info = $this->pluginInfo($app);
if(!is_array($info)){
show_json(false,false);
}
echo json_encode($info);
break;
case 'download':
if(!is_writable(PLUGIN_DIR)){
show_json(LNG("no_permission_write").': '.PLUGIN_DIR,false);
}
$info = $this->pluginInfo($app);
if(!$info || !$info['code']){
show_json(LNG('error'),false);
}
$result = Downloader::start($info['data'],$appPath);
show_json($result['data'],!!$result['code'],$app);
break;
case 'fileSize':
if(file_exists($appPath)){
show_json(filesize($appPath));
}
if(file_exists($appPathTemp)){
show_json(filesize($appPathTemp));
}
show_json(0,false);
break;
case 'unzip':
//hook log
$GLOBALS['isRoot'] = 1;
if(!file_exists($appPath)){
show_json(LNG("error"),false);
}
$result = KodArchive::extract($appPath,PLUGIN_DIR.$app.'/');
del_file($appPathTemp);
del_file($appPath);
show_json($result['data'],!!$result['code']);
break;
case 'remove':
del_file($appPathTemp);
del_file($appPath);
show_json(LNG('success'));
break;
case 'update':
show_json(Hook::apply($app.'Plugin.update'));
break;
default:break;
}
}
private function pluginInfo($app){
$api = $this->config['settings']['pluginServer'].'plugin/install';
$param = array(
"app" => $app,
"version" => KOD_VERSION,
"versionHash" => $this->config['settingSystem']['versionHash'],
"systemOS" => $this->config['systemOS'],
"phpVersion" => PHP_VERSION,
"channel" => INSTALL_CHANNEL,
"lang" => I18n::getType()
);
$info = url_request($api,'POST',$param);
$result = false;
if($info && $info['data']){
$result = json_decode($info['data'],true);
}
return $result;
}
public function unInstall(){
if( !$this->in['app']){
show_json(LNG('data_not_full'),false);
}
if(!preg_match("/^[0-9a-zA-Z_]*$/",$this->in['app'])) show_json("error!",false);
$model = $this->loadModel('Plugin');
$model->remove($this->in['app']);
del_dir(PLUGIN_DIR.$this->in['app']);
$list = $model->viewList();
show_json($list);
}
}

@ -0,0 +1,147 @@
<?php
/*
* @link http://kodcloud.com/
* @author warlee | e-mail:kodcloud@qq.com
* @copyright warlee 2014.(Shanghai)Co.,Ltd
* @license http://kodcloud.com/tools/license/license.txt
*/
class setting extends Controller{
private $sql;
function __construct(){
parent::__construct();
}
/**
* 用户首页展示
*/
public function index() {
$this->display('index.html');
}
/**
* 用户首页展示
*/
public function slider() {
switch ($this->in['slider']) {
case 'about':show_json(file_get_contents(LANGUAGE_PATH.I18n::getType().'/about.html'));break;
case 'help':show_json(file_get_contents(LANGUAGE_PATH.I18n::getType().'/help.html'));break;
case 'member':break;
case 'fav':break;
case 'user':
case 'theme':
case 'wall':
show_json(array(
'settingAll' => $this->config['settingAll'],
'user' => $this->config['user'],
'wallpageDesktop' => $this->config['settingSystem']['wallpageDesktop'],
'wallpageLogin' => $this->config['settingSystem']['wallpageLogin'],
));
break;
case 'system':
if($GLOBALS['isRoot']){
if(isset($this->in['env_check'])){
show_json(php_env_check());
}
$result = $this->config['settingSystem'];
unset($result['systemPassword']);
show_json($result,true);
}else{
show_json('error',false);
}
break;
default:break;
}
}
public function phpInfo(){
phpinfo();
}
//管理员 系统设置全局数据
public function systemSetting(){
$settingFile = USER_SYSTEM.'system_setting.php';
$data = json_decode($this->in['data'],true);
if (!$data) {
show_json(LNG('error'),false);
}
$setting = $GLOBALS['config']['settingSystem'];
foreach ($data as $key => $value){
if ($key=='menu') {
$setting[$key] = $value;
}else{
$setting[$key] = rawurldecode($value);
}
}
//为了保存更多的数据;不直接覆盖文件 $data->setting_file;
FileCache::save($settingFile,$setting);
show_json(LNG('success'));
}
public function systemTools(){
$action = $this->in['action'];
switch($action){
case 'clearCache':$this->_clearCache();break;
case 'clearSession':$this->_clearSession();break;
case 'clearUserRecycle':$this->_clearUserRecycle();break;
default:break;
}
show_json(LNG('success'),true);
}
private function _clearSession(){
del_dir(KOD_SESSION);
}
private function _clearCache(){
del_dir(TEMP_PATH);
mk_dir(TEMP_PATH.'log');
mk_dir(TEMP_PATH.'thumb');
}
private function _clearUserRecycle(){
$sql = systemMember::loadData();
$user_arr = $sql->get();
foreach ($user_arr as $key => $user) {
$userPath = iconv_system(USER_PATH.$user['path']."/");
$pathArr = array(
$userPath.'data/temp',
$userPath.'data/share_temp',
$userPath.'recycle_kod'
);
foreach ($pathArr as $value) {
del_dir($value);
mk_dir($value);
}
}
}
/**
* 参数设置
* 可以同时修改多个key=a,b,c&value=1,2,3
* 防xss 做过滤
*/
public function set(){
$file = USER.'data/config.php';
if (!path_writeable(iconv_system($file))) {//配置不可写
show_json(LNG('no_permission_write_file'),false);
}
$key = $this->in['k'];
$value = $this->in['v'];
if ($key !='' && $value != '') {
$conf = $this->config['user'];
if(!strpos($key,',')){//多个参数value不能包含','
$conf[$key] = clear_html($value);
}else{
$arr_k = explode(',', $key);
$arr_v = explode(',',$value);
$num = count($arr_k);
for ($i=0; $i < $num; $i++) {
$conf[$arr_k[$i]] = clear_html($arr_v[$i]);
}
}
FileCache::save($file,$conf);
show_json(LNG('setting_success'));
}else{
show_json(LNG('error'),false);
}
}
}

@ -0,0 +1,631 @@
<?php
/*
* @link http://kodcloud.com/
* @author warlee | e-mail:kodcloud@qq.com
* @copyright warlee 2014.(Shanghai)Co.,Ltd
* @license http://kodcloud.com/tools/license/license.txt
*/
class share extends Controller{
private $sql;
private $shareInfo;
private $sharePath;
private $path;
function __construct(){
parent::__construct();
$auth = systemRole::getInfo(1);//经过role检测
$arrNotCheck = array('commonJs','manifest','manifestJS');
if(substr($this->in['fileUrl'],0,4) == 'http'){
$arrNotCheck[] = 'fileGet';
}
if (!in_array(ACT,$arrNotCheck)){
$this->initShare();
$this->checkShare();
$this->assign('canDownload',$this->shareInfo['notDownload']=='1'?0:1);
}
//需要检查下载权限的Action
$arrCheckDownload = array('fileDownload','zipDownload');//'fileProxy','fileGet'
if (in_array(ACT,$arrCheckDownload)){
if ($this->shareInfo['notDownload']=='1') {
show_json(LNG('share_not_download_tips'),false);
}
}
}
private function initShare(){
if(isset($this->in['user'])){
$this->initShareOld();
return;
}
$this->path = _DIR($this->in['path']);
$this->shareInfo = $GLOBALS['kodShareInfo'];
$user = systemMember::getInfo($GLOBALS['kodPathId']);
$userHome = user_home_path($user);
define('USER',USER_PATH.$user['path'].'/');
define('USER_TEMP',USER.'data/share_temp/');
define('HOME',$userHome);
}
private function checkShare(){
$shareInfo = $this->shareInfo;
if(!$this->shareInfo){
$this->_error(LNG('share_error_user'));
}
if (isset($shareInfo['timeTo'])&&
strlen($shareInfo['timeTo'])!=0) {
$date = strtotime($shareInfo['timeTo']);
if (time() > $date) {
$this->_error(LNG('share_error_time'));
}
}
//密码检测
if ($shareInfo['sharePassword']=='') return;
if (!isset($this->in['password'])){
if ($_SESSION['password_'.$this->in['sid']]==$shareInfo['sharePassword']){
return;
}
$this->_error('password');
}else{
if ($this->in['password'] == $shareInfo['sharePassword']) {
session_start();
$_SESSION['password_'.$this->in['sid']]=$shareInfo['sharePassword'];
session_write_close();
show_json('success');
}else{
show_json(LNG('share_error_password'),false);
}
}
}
private function initShareOld(){
if (!isset($this->in['user']) || !isset($this->in['sid'])) {
$this->_error(LNG('share_error_param'));
}
$member = systemMember::loadData();
$user = $member->get($this->in['user']);
if (!is_array($user) || !isset($user['password'])){
$this->_error(LNG('share_error_user'));
}
$userHome = user_home_path($user);
define('USER',USER_PATH.$user['path'].'/');
define('USER_TEMP',USER.'data/share_temp/');
define('HOME',$userHome);
$shareData = USER_PATH.$user['path'].'/data/share.php';
if (!file_exists(iconv_system($shareData))) {
$this->_error(LNG('share_error_user'));
}
$this->sql=new FileCache($shareData);
$list = $this->sql->get();
if (!isset($this->in['sid']) ||! $list[$this->in['sid']]){
$this->_error(LNG('share_error_sid'));
}
$this->shareInfo = $list[$this->in['sid']];
$sharePath = _DIR_CLEAR($this->shareInfo['path']);
if ($user['role'] != '1') {
$sharePath = HOME.ltrim($sharePath,'/');
}
if ($this->shareInfo['type'] != 'file'){
$sharePath=rtrim($sharePath,'/').'/';
}
$sharePath = iconv_system($sharePath);
if (!file_exists($sharePath)) {
$this->_error(LNG('share_error_path'));
}
$this->sharePath = $sharePath;
if($this->shareInfo['type'] == 'file'){
$this->path = $sharePath;
}else if(isset($this->in['path'])){
$this->path = $sharePath.$this->_clear($this->in['path']);
}else{
$this->path = $sharePath;
}
$this->path = _DIR_CLEAR($this->path);
$GLOBALS['kodPathPre'] = iconv_app(_DIR_CLEAR($sharePath));
//debug_out($GLOBALS['kodPathPre'],$GLOBALS['kodPathId'],$this->shareInfo,$this->path,$sharePath);
}
private function _clear($path){
return iconv_system(_DIR_CLEAR($path));
}
private function _error($msg){
$this->assign('configTheme','mac');
$this->assign('msg',$msg);
$this->display('tips.html');
exit;
}
//==========================
//页面统一注入变量
private function _assignInfo(){
$config = FileCache::load(USER.'data/config.php');
if (count($config)<1) {
$config = $GLOBALS['config']['settingDefault'];
}
$this->assign('configTheme',$config['theme']);
$this->shareInfo['sharePassword'] = '';
$this->shareInfo['path'] = get_path_this(iconv_app($this->path));
$this->assign('shareInfo',$this->shareInfo);
}
//下载次数统计
private function _shareDownloadAdd(){
$this->shareInfo['numDownload'] = abs(intval($this->shareInfo['numDownload'])) +1;
$this->sql->set($this->in['sid'],$this->shareInfo);
}
//==========================
/*
* 文件浏览
*/
public function file() {
$this->shareViewAdd();
if ($this->shareInfo['type']!='file') {
//$this->shareInfo['name'] = get_path_this($this->path);
}
$size = filesize($this->path);
$this->shareInfo['size'] = size_format($size);
$this->_assignInfo();
$this->display('file.html');
}
/*
* 文件夹浏览
*/
public function folder() {
$this->shareViewAdd();
if(isset($this->in['path']) && $this->in['path'] !=''){
$dir = '/'._DIR_CLEAR($this->in['path']);
}else{
$dir = '/';//首次进入系统,不带参数
}
$dir = '/'.trim($dir,'/').'/';
$this->_assignInfo();
$this->assign('dir',$dir);
if ($this->config['forceWap']) {
$this->display('explorerWap.html');
}else{
$this->display('explorer.html');
}
}
/*
* 代码阅读
*/
public function codeRead() {
$this->shareViewAdd();
$this->_assignInfo();
$this->display('editor.html');
}
//浏览次数统计
private function shareViewAdd(){
$this->shareInfo['numDownload'] = isset($this->shareInfo['numDownload'])?$this->shareInfo['numDownload']:0;
$this->shareInfo['numView'] = isset($this->shareInfo['numView'])?$this->shareInfo['numView']:0;
$this->shareInfo['numView'] = abs(intval($this->shareInfo['numView'])) +1;
$this->sql->set($this->in['sid'],$this->shareInfo);
}
public function commonJs(){
$out = ob_get_clean();
$versionDesc = isset($this->config['settings']['versionDesc'])?$this->config['settings']['versionDesc']:"";
$theConfig = array(
'environment' => STATIC_JS,
'lang' => I18n::getType(),
'systemOS' => $this->config['systemOS'],
'isRoot' => 0,
'webRoot' => '',
'webHost' => HOST,
'appHost' => APP_HOST,
'staticPath' => STATIC_PATH,
'appIndex' => $_SERVER['SCRIPT_NAME'],
'version' => KOD_VERSION,
'versionBuild' => KOD_VERSION_BUILD,
'versionDesc' => $versionDesc,
'kodID' => md5(BASIC_PATH.$this->config['settingSystem']['systemPassword']),
'jsonData' => "",
'sharePage' => 'share',
'settings' => array(
'updloadChunkSize' => file_upload_size(),
'updloadThreads' => $this->config['settings']['updloadThreads'],
'updloadBindary' => $this->config['settings']['updloadBindary'],
'uploadCheckChunk' => $this->config['settings']['uploadCheckChunk'],
'paramRewrite' => $this->config['settings']['paramRewrite'],
'pluginServer' => $this->config['settings']['pluginServer'],
//'appType' => $this->config['settings']['appType']
),
//虚拟目录
'KOD_GROUP_PATH' => KOD_GROUP_PATH,
'KOD_GROUP_SHARE' => KOD_GROUP_SHARE,
'KOD_USER_SELF' => KOD_USER_SELF,
'KOD_USER_SHARE' => KOD_USER_SHARE,
'KOD_USER_RECYCLE' => KOD_USER_RECYCLE,
'KOD_USER_FAV' => KOD_USER_FAV,
'KOD_GROUP_ROOT_SELF' => KOD_GROUP_ROOT_SELF,
'KOD_GROUP_ROOT_ALL' => KOD_GROUP_ROOT_ALL,
'ST' => $this->in['st'],
'ACT' => $this->in['act'],
);
if(ST.''.ACT == 'explorer.fileView'){
unset($theConfig['sharePage']);
}
$userConfig = $GLOBALS['config']['settingDefault'];
if(isset($this->in['user'])){
$member = systemMember::loadData();
$user = $member->get($this->in['user']);
$userConfig = FileCache::load(USER_PATH.$user['path'].'/'.'data/config.php');
}
if(isset($this->config['settingSystem']['versionHash'])){
$theConfig['versionHash'] = $this->config['settingSystem']['versionHash'];
$theConfig['versionHashUser'] = $this->config['settingSystem']['versionHashUser'];
}
$theConfig['userConfig'] = $userConfig;
$useTime = mtime() - $GLOBALS['config']['appStartTime'];
header("Content-Type: application/javascript; charset=utf-8");
echo 'if(typeof(kodReady)=="undefined"){kodReady=[];}';
Hook::trigger('user.commonJs.insert',$this->in['st'],$this->in['act']);
echo ';AUTH=[];';
echo 'G='.json_encode($theConfig).';';
$lang = json_encode_force(I18n::getAll());
if(!$lang){
$lang = '{}';
}
echo 'LNG='.$lang.';G.useTime='.$useTime.';';
}
//chrome安装: 必须https;serviceWorker引入处理;manifest配置; [manifest.json配置目录同sw.js引入];
public function manifest(){
$json = file_get_contents(BASIC_PATH.'static/others/app/manifest.json');
$name = stristr(I18n::getType(),'zh') ? '可道云':'kodExplorer';
$static = STATIC_PATH == './static/' ? APP_HOST.'static/':STATIC_PATH;
$assign = array(
"{{name}}" => $name,
"{{appDesc}}" => LNG('common.copyright.name'),
"{{static}}" => $static,
);
$json = str_replace(array_keys($assign),array_values($assign),$json);
header("Content-Type: application/javascript; charset=utf-8");
echo $json;
}
public function manifestJS(){
header("Content-Type: application/javascript; charset=utf-8");
echo file_get_contents(BASIC_PATH.'static/others/app/sw.js');
}
//========ajax function============
public function pathInfo(){
$infoList = json_decode($this->in['dataArr'],true);
foreach ($infoList as &$val) {
$val['path'] = $this->sharePath.$this->_clear($val['path']);
}
$data = path_info_muti($infoList,LNG('time_type_info'));
$data['path'] = _DIR_OUT($data['path']);
//属性查看,单个文件则生成临时下载地址。没有权限则不显示
if (count($infoList)==1 && $infoList[0]['type']!='folder') {//单个文件
$file = $infoList[0]['path'];
if($this->shareInfo['notDownload']!='1'){
$data['downloadPath'] = _make_file_proxy($file);
}
if($data['size'] < 100*1024|| isset($this->in['getMd5'])){
$data['fileMd5'] = @md5_file($file);
}else{
$data['fileMd5'] = "...";
}
//获取图片尺寸
$ext = get_path_ext($file);
if(in_array($ext,array('jpg','gif','png','jpeg','bmp')) ){
$size = ImageThumb::imageSize($file);
if($size){
$data['imageSize'] = $size;
}
}
}
show_json($data);
}
public function fileSave(){
show_json(LNG('no_permission'),false);
}
// 单文件编辑
public function edit(){
$member = systemMember::loadData();
$user = $member->get($this->in['user']);
$codeConfig = FileCache::load(USER_PATH.$user['path'].'/data/editor_config.php');
if(!is_array($codeConfig)){
$codeConfig = $GLOBALS['config']['editorDefault'];
}
$black_theme = array("ambiance","idle_fingers","monokai","pastel_on_dark","twilight",
"solarized_dark","tomorrow_night_blue","tomorrow_night_eighties");
$setClass = "";
if(in_array($codeConfig['theme'],$black_theme)){
$setClass = 'class="code-theme-black"';
}
$this->_assignInfo();
$this->assign('editorConfig',json_encode($codeConfig));//获取编辑器配置信息
$this->assign('codeThemeBlack',$setClass);//获取编辑器配置信息
$this->display('edit.html');
}
public function pathList(){
$list=$this->_path($this->path);
show_json($list);
}
public function treeList(){
$path=$this->path;
if (isset($this->in['project'])) {
$path = $this->sharePath.$this->_clear($this->in['project']);
}
if (isset($this->in['path'])) {
$path = $this->sharePath.$this->_clear($this->in['path']);
}
if (isset($this->in['name'])){
$path=$path.'/'.$this->_clear($this->in['name']);
}
$listFile = ($this->in['app'] == 'editor'?true:false);//编辑器内列出文件
$list=$this->_path($path,$listFile,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 (isset($this->in['type']) && $this->in['type']=='init') {
$result = array(
array(
'name' => iconv_app(get_path_this($path)),
'children' => $result,
//'menuType' => "menuTreeRoot",
'open' => true,
'type' => 'folder',
'path' => '/',
'isParent' => count($result)>0?true:false
)
);
}
show_json($result);
}
public function search(){
if (!isset($this->in['search'])) show_json(LNG('please_inpute_search_words'),false);
$isContent = intval($this->in['is_content']);
$isCase = intval($this->in['is_case']);
$ext= trim($this->in['ext']);
$list = path_search(
$this->path,
rawurldecode($this->in['search']),
$isContent,$ext,$isCase);
show_json(_DIR_OUT($list));
}
/**
* 上传,html5拖拽 flash 多文件
*/
public function fileUpload(){
$fileName = $_FILES['file']['name']? $_FILES['file']['name']:$GLOBALS['in']['name'];
$GLOBALS['isRoot']=0;
$GLOBALS['auth']['extNotAllow'] = "htm|html|php|phtml|pwml|asp|aspx|ascx|jsp|pl|htaccess|shtml|shtm|phtm";
if(!checkExt($fileName)){
show_json(LNG('no_permission_ext'),false);
}
$savePath = $this->sharePath.$this->_clear($this->in['upload_to']);
if (!path_writeable($savePath)) show_json(LNG('no_permission_write'),false);
if ($savePath == '') show_json(LNG('upload_error_big'),false);
if (strlen($this->in['fullPath']) > 1) {//folder drag upload
$fullPath = _DIR_CLEAR(rawurldecode($this->in['fullPath']));
$fullPath = get_path_father($fullPath);
$fullPath = iconv_system($fullPath);
if (mk_dir($savePath.$fullPath)) {
$savePath = $savePath.$fullPath;
}
}
//分片上传
$tempDir = iconv_system(USER_TEMP);
mk_dir($tempDir);
if (!path_writeable($tempDir)) show_json(LNG('no_permission_write'),false);
upload($savePath,$tempDir,'rename');
}
//代理输出
public function fileProxy(){
$mime = get_file_mime(get_path_ext($this->path));
if($mime == 'text/plain' && is_file($this->path)){//文本则转编码
$fileContents = file_get_contents($this->path);
$charset=get_charset($fileContents);
if ($charset!='' || $charset!='utf-8') {
$fileContents=mb_convert_encoding($fileContents,'utf-8',$charset);
}
echo $fileContents;
return;
}
$download = isset($_GET['download']);
$filename = isset($_GET['downFilename'])?$_GET['downFilename']:false;
file_put_out($this->path,$download,$filename);
}
public function fileDownload(){
$this->_shareDownloadAdd();
file_put_out($this->path,true);
}
//文件下载后删除,用于文件夹下载
public function fileDownloadRemove(){
if ($this->shareInfo['notDownload']=='1') {
show_json(LNG('share_not_download_tips'),false);
}
$path = get_path_this(_DIR_CLEAR($this->in['path']));
$path = iconv_system(USER_TEMP.$path);
file_put_out($path,true);
del_file($path);
}
public function zipDownload(){
$this->_shareDownloadAdd();
$userTemp = iconv_system(USER_TEMP);
if(!file_exists($userTemp)){
mkdir($userTemp);
}else{//清除未删除的临时文件,一天前
$list = path_list($userTemp,true,false);
$maxTime = 3600*24;
if ($list['fileList']>=1) {
for ($i=0; $i < count($list['fileList']); $i++) {
$createTime = $list['fileList'][$i]['mtime'];//最后修改时间
if(time() - $createTime >$maxTime){
del_file($list['fileList'][$i]['path'].$list['fileList'][$i]['name']);
}
}
}
}
$zipFile = $this->zip($userTemp);
show_json(LNG('zip_success'),true,get_path_this($zipFile));
}
private function zip($zipPath){
if (!isset($zipPath)) {
show_json(LNG('share_not_download_tips'),false);
}
ignore_timeout();
$zipList = json_decode($this->in['dataArr'],true);
$listNum = count($zipList);
$files = array();
for ($i=0; $i < $listNum; $i++) {
$item = $this->path.$this->_clear($zipList[$i]['path']);
if(file_exists($item)){
$files[] = $item;
}
}
if(count($files)==0){
show_json(LNG('not_exists'),false);
}
//指定目录
if (count($files) == 1) {
$pathThisName=get_path_this($files[0]);
}else{
$pathThisName=get_path_this(get_path_father($files[0]));
}
$zipname = $zipPath.$pathThisName.'.zip';
$zipname = get_filename_auto($zipname,date('_H-i-s'));
KodArchive::create($zipname,$files);
return iconv_app($zipname);
}
// 获取文件数据
public function fileGet(){
if(isset($this->in['fileUrl'])){ //http
$displayName = $this->in['name'];
$filepath = $this->in['fileUrl'];
if(!request_url_safe($filepath)){
show_json(LNG('url error!'),false);
}
}else{
$displayName = _DIR_CLEAR($this->in['filename']);
$filepath= $this->sharePath.iconv_system($displayName);
if (!path_readable($filepath)){
show_json(LNG('no_permission_read'),false);
}
if (filesize($filepath) >= 1024*1024*20){
show_json(LNG('edit_too_big'),false);
}
if (!file_exists($filepath)){
show_json(LNG('not_exists'),false);
}
}
$fileContents=file_get_contents($filepath);//文件内容
$charset=get_charset($fileContents);
if ($charset!='' &&
$charset!='utf-8' &&
function_exists("mb_convert_encoding")
){
$fileContents=@mb_convert_encoding($fileContents,'utf-8',$charset);
}
$data = array(
'ext' => get_path_ext($displayName),
'name' => iconv_app(get_path_this($displayName)),
'filename' => $displayName,
'charset' => $charset,
'base64' => true,// 部分防火墙编辑文件误判问题处理
'content' => base64_encode($fileContents)
);
show_json($data);
}
public function image(){
$thumbWidth = 250;
if(isset($this->in['thumbWidth'])){
$thumbWidth = intval($this->in['thumbWidth']);//自定义预览大图
}
if(substr($this->path,0,4) == 'http'){
header('Location: '.$this->in['path']);
exit;
}
if (@filesize($this->path) <= 1024*50 ||
!function_exists('imagecolorallocate') ||
get_path_ext($this->path) == 'gif') {//小于50k、不支持gd库、gif图 不再生成缩略图
file_put_out($this->path,false);
return;
}
if (!is_dir(DATA_THUMB)){
mk_dir(DATA_THUMB);
}
$image = $this->path;
$imageMd5 = @md5_file($image).'_'.$thumbWidth;//文件md5
if (strlen($imageMd5)<5) {
$imageMd5 = md5($image).'_'.$thumbWidth;
}
$imageThumb = DATA_THUMB.$imageMd5.'.png';
if (!file_exists($imageThumb)){//如果拼装成的url不存在则没有生成过
if (get_path_father($image)==DATA_THUMB){//当前目录则不生成缩略图
$imageThumb=$this->path;
}else {
$cm = new ImageThumb($image,'file');
$cm->prorate($imageThumb,$thumbWidth,$thumbWidth);//生成等比例缩略图
}
}
if (!file_exists($imageThumb) ||
filesize($imageThumb)<100){//使
$imageThumb=$this->path;
}
file_put_out($imageThumb,false);
file_put_out($imageThumb);//输出
}
//获取文件列表&哦exe文件json解析
private function _path($dir,$listFile=true,$check_children=false){
$list = path_list($dir,$listFile,true);
$listNew = array('fileList'=>array(),'folderList'=>array());
$pathHidden = $this->config['settingSystem']['pathHidden'];
$exName = explode(',',$pathHidden);
foreach ($list['fileList'] as $key => $val) {
if (in_array($val['name'],$exName)) continue;
if ($val['ext'] == 'oexe'){
$path = iconv_system($val['path']);
$json = json_decode(@file_get_contents($path),true);
if(is_array($json)) $val = array_merge($val,$json);
}
$listNew['fileList'][] = $val;
}
foreach ($list['folderList'] as $key => $val) {
if (in_array($val['name'],$exName)) continue;
$listNew['folderList'][] = $val;
}
$s = _DIR_OUT($listNew);
return _DIR_OUT($listNew);
}
}

@ -0,0 +1,279 @@
<?php
/*
* @link http://kodcloud.com/
* @author warlee | e-mail:kodcloud@qq.com
* @copyright warlee 2014.(Shanghai)Co.,Ltd
* @license http://kodcloud.com/tools/license/license.txt
*/
//群组管理【管理员调用or组空间大小变更】
//根目录id为1==》共享空间
class systemGroup extends Controller{
public static $staticSql = null;
private $sql;
function __construct() {
parent::__construct();
$this->sql= self::loadData();
$this->_init();
}
//保证只加载一次文件
public static function loadData(){
if(is_null(self::$staticSql)){
self::$staticSql = systemGroupData();
}
return self::$staticSql;
}
public static function getInfo($theId){
$sql = self::loadData();
return $sql->get($theId);
}
/**
* 空间使用变更
* @param [type] $theId [userID or groupID]
* @param [type] $sizeAdd [变更的大小 sizeMax G为单位 sizeUse Byte为单位]
*/
public static function spaceChange($theId,$sizeAdd=false){
$sql = self::loadData();
$info = $sql->get($theId);
if(!is_array($info)){
show_json(LNG('data_not_full'),false);
}
if($sizeAdd===false){//重置用户空间;避免覆盖、解压等导致的问题
$pathinfo = _path_info_more(GROUP_PATH.$info['path'].'/');
$currentUse = $pathinfo['size'];
if(isset($info['homePath']) && file_exists(iconv_system($info['homePath']))){
$pathinfo = _path_info_more(iconv_system($info['homePath']));
$currentUse += $pathinfo['size'];
}
}else{
$currentUse = floatval($info['config']['sizeUse'])+floatval($sizeAdd);
}
$info['config']['sizeUse'] = $currentUse<0?0:$currentUse;
$sql->set($theId,$info);
}
/**
* 空间剩余检测
* 1073741824 —— 1G
*/
public static function spaceCheck($theId){
$sql = self::loadData();
$info = $sql->get($theId);
if(!is_array($info)){
show_json(LNG('data_not_full'),false);
}
$sizeUse = floatval($info['config']['sizeUse']);
$sizeMax = floatval($info['config']['sizeMax']);
if($sizeMax!=0 && $sizeMax*1073741824<$sizeUse){
show_json(LNG('space_is_full'),false);
}
}
//管理员调用
//===================
private function _init(){
if(count($this->sql->get()) > 0) return;
$default = array(
'1' =>array(
'groupID' => '1',
'name' => 'root',
'parentID' => '',
'children' => '',
'config' => array('sizeMax' => floatval(1.5),
'sizeUse' => floatval(1024*1024)),//总大小,目前使用大小
'path' => 'root',
'createTime'=> time(),
)
);
$this->sql->reset($default);
$this->initDir($default[0]['path']);
}
//删除 path id
public static function _filterList($list,$filter_key = 'path'){
if($GLOBALS['isRoot']) return $list;
foreach ($list as $key => &$val) {
unset($val[$filter_key]);
}
return $list;
}
public function get() {
$items = self::_filterList($this->sql->get());
show_json($items,true);
}
/**
* 群组添加
* systemGroup/add&name=t1&parentID=101&sizeMax=0
*/
public function add(){
if (!isset($this->in['name']) || //必填项
!isset($this->in['parentID']) ||
!isset($this->in['sizeMax'])
) show_json(LNG('data_not_full'),false);
//名称可以重复
$groupID = $this->sql->getMaxId().'';
$groupName = rawurldecode($this->in['name']);
$groupInfo = array(
'groupID' => $groupID,
'name' => $groupName,
'parentID' => $this->in['parentID'],
'children' => '',
'config' => array('sizeMax' => floatval($this->in['sizeMax']),//G
'sizeUse' => floatval(1024*1024)),//总大小,目前使用大小
'path' => make_path($groupName),
'createTime'=> time(),
);
if(file_exists(iconv_system(GROUP_PATH.$groupInfo['path'])) ){
$groupInfo['path'] = make_path($groupInfo['path'].'_'.$groupInfo['groupID']);
}
//用户组目录
if( isset($this->in['homePath'])){
$homePath = _DIR(rawurldecode($this->in['homePath']));
if(file_exists($homePath)){
$groupInfo['homePath'] = iconv_app($homePath);
}
}else{
unset($groupInfo['homePath']);
}
$this->_parentChildChange($groupInfo,true);//更新父节点
if ($this->sql->set($groupID,$groupInfo)) {
$this->initDir($groupInfo['path']);
show_json(LNG('success'));
}
show_json(LNG('error'),false);
}
/**
* 编辑 systemGroup/edit&groupID=101&name=warlee&sizeMax=0
*/
public function edit() {
if (!$this->in['groupID']) show_json(LNG('data_not_full'),false);
$groupInfo = $this->sql->get($this->in['groupID']);
if(!is_array($groupInfo)){//用户不存在
show_json(LNG('not_exists'),false);
}
//name sizeMax parentID
if(isset($this->in['name'])){
$groupInfo['name'] = rawurldecode($this->in['name']);
}
if(isset($this->in['sizeMax'])){
$groupInfo['config']['sizeMax'] = floatval($this->in['sizeMax']);
}
if( isset($this->in['parentID']) &&
$groupInfo['parentID']!= '' && //根目录不能修改父节点
$this->in['parentID']!=$groupInfo['parentID']){//父节点变更
$childChange = explode(',',$groupInfo['children']);
if( in_array($this->in['parentID'],$childChange)
|| $this->in['parentID'] == $this->in['groupID']){//不能移动到子节点;死循环
show_json(LNG('current_has_parent'),false);
}
self::spaceChange($this->in['groupID']);//重置用户使用空间
$this->_parentChildChange($groupInfo,false);//向所有父节点删除包含此节点的children
$groupInfo['parentID'] = $this->in['parentID'];
$this->_parentChildChange($groupInfo,true);//向所有新的父节点添加包含此节点的children
}
//用户组目录
if( isset($this->in['homePath'])){
$groupInfo['homePath'] = _DIR(rawurldecode($this->in['homePath']));
if(!file_exists($groupInfo['homePath'])){
show_json(LNG('not_exists'),false);
}
$groupInfo['homePath'] = iconv_app($groupInfo['homePath']);
}else{
unset($groupInfo['homePath']);
}
if($groupInfo != $this->sql->get($this->in['groupID'])){
$this->sql->set($this->in['groupID'],$groupInfo);
}
show_json(LNG('success'));
}
/**
* 删除 ?systemMember/del&userID=102
*/
public function del() {
if (!isset($this->in['groupID'])) show_json(LNG('data_not_full'),false);
if (strlen($this->in['groupID']) <= 1) show_json(LNG('default_user_can_not_do'),false);
$groupInfo = $this->sql->get($this->in['groupID']);
$this->_parentChildChange($groupInfo,false);//向所有父节点删除包含此节点的children
$this->sql->set(//将该节点的子节点的父节点设置为根目录
array('parentID',$groupInfo["groupID"]),
array('parentID','1')
);
systemMember::groupRemoveUserUpdate($groupInfo["groupID"]);//用户所在组变更
$this->sql->remove($this->in['groupID']);
if( strlen($groupInfo['path'])!=0){
del_dir(iconv_system(GROUP_PATH.$groupInfo['path'].'/'));
show_json(LNG('success'));
}
show_json(LNG('error'),false);
}
//============内部处理函数=============
//回溯更改节点的children
private function _parentChildChange($groupInfo,$isAdd){
if(!is_array($groupInfo)){
show_json(LNG('not_exists'),false);
}
if($groupInfo['parentID'] == 1){
return;
}
$childChange = explode(',',$groupInfo['children']);
if($childChange[0]==''){
unset($childChange[0]);
}
$childChange[] = $groupInfo['groupID'];//包含当前
while(strlen($groupInfo['groupID'])>2){//节点id从100开始
$groupInfo = $this->sql->get($groupInfo['parentID']);
if(!is_array($groupInfo)){
show_json(LNG('not_exists'),false);
}
$childrenNew = explode(',',$groupInfo['children']);
if($childrenNew[0]==''){
unset($childrenNew[0]);
}
if($isAdd){//添加
foreach ($childChange as $key=>$val) {
$childrenNew[] = $val;
}
}else{//删除
foreach ($childrenNew as $key=>$val) {
if(in_array($val,$childChange))
unset($childrenNew[$key]);
}
}
$childStr = implode(',',$childrenNew);
if($childStr != $groupInfo['children']){//有变更
$groupInfo['children'] = $childStr;
$this->sql->set($groupInfo['groupID'],$groupInfo);
}
}
}
//
/**
*初始化用户数据和配置。
*/
public function initDir($path){
$root = array('home','data');
$newGroupFolder = $this->config['settingSystem']['newGroupFolder'];
$home = explode(',',$newGroupFolder);
$path = GROUP_PATH.$path.'/';
foreach ($root as $dir) {
mk_dir(iconv_system($path.$dir));
}
foreach ($home as $dir) {
mk_dir(iconv_system($path.'home/'.$dir));
}
}
}

@ -0,0 +1,529 @@
<?php
/*
* @link http://kodcloud.com/
* @author warlee | e-mail:kodcloud@qq.com
* @copyright warlee 2014.(Shanghai)Co.,Ltd
* @license http://kodcloud.com/tools/license/license.txt
*/
//用户管理【管理员配置用户or用户空间大小变更】
class systemMember extends Controller{
public static $staticSql = null;
private $sql;
function __construct() {
parent::__construct();
$this->tpl = TEMPLATE.'member/';
$this->sql= self::loadData();
}
//保证只加载一次文件
public static function loadData(){
if(is_null(self::$staticSql)){
self::$staticSql = systemMemberData();
}
return self::$staticSql;
}
public static function getInfo($theId){
$sql = self::loadData();
return $sql->get($theId);
}
/**
* 空间使用变更
* @param [type] $theId [userID or groupID]
* @param [type] $sizeAdd [变更的大小 sizeMax G为单位 sizeUse Byte为单位]
*/
public static function spaceChange($theId,$sizeAdd=false){
$sql = self::loadData();
$info = $sql->get($theId);
if(!is_array($info)){
show_json(LNG('data_not_full'),false);
}
if($sizeAdd===false){//重置用户空间;避免覆盖、解压等导致的问题
$pathinfo = _path_info_more(iconv_system(USER_PATH.$info['path'].'/'));
$currentUse = $pathinfo['size'];
if(isset($info['homePath']) && file_exists(iconv_system($info['homePath']))){
$pathinfo = _path_info_more(iconv_system($info['homePath']));
$currentUse += $pathinfo['size'];
}
}else{
$currentUse = floatval($info['config']['sizeUse'])+floatval($sizeAdd);
}
$info['config']['sizeUse'] = $currentUse<0?0:$currentUse;
$sql->set($theId,$info);
}
/**
* 空间剩余检测
* 1073741824 —— 1G
*/
public static function spaceCheck($theId){
$sql = self::loadData();
$info = $sql->get($theId);
if(!is_array($info)){
show_json(LNG('data_not_full'),false);
}
$sizeUse = floatval($info['config']['sizeUse']);
$sizeMax = floatval($info['config']['sizeMax']);
if($sizeMax!=0 && $sizeMax*1073741824<$sizeUse){
show_json(LNG('space_is_full'),false);
}
}
// 组删除后,所属该组的用户都删除;全局调用
public static function groupRemoveUserUpdate($groupID){
$sql = self::loadData();
$userAll = $sql->get();
foreach ($userAll as $key => $val) {
if(in_array($groupID,array_keys($val['groupInfo']))){
unset($val['groupInfo'][$groupID]);
$sql->set($val['userID'],$val);
}
}
}
// 权限组删除所属该组的用户删除权限id
public static function roleRemoveUserUpdate($roleId){
$sql = self::loadData();
$userAll = $sql->get();
foreach ($userAll as $key => $val) {
if($val['role'] == $roleId){
$val['role'] = '';
$sql->set($val['userID'],$val);
}
}
}
//获取当前用户在某个群组的权限id; false|[id]
//兼容旧版本 'read'|'write'|false
public static function userAuthGroup($groupID){
$result = self::_userAuthGroupRole($groupID);
if($result === false) return false;
$result = $result == 'read' ? "1" : $result;
$result = $result == 'write' ? "2" : $result;
if(!is_array($GLOBALS['config']['pathRoleGroup'][$result])){
$result = "1";
}
return $result;
}
//获取在某个组的用户
public static function userAtGroup($groupID){
$sql = self::loadData();
$allUser = self::_filterList($sql->get());
if($groupID=='0'){
return $allUser;
}
$selectUser = array();
foreach ($allUser as $val) {
if(isset($val['groupInfo'][$groupID])){
$selectUser[] = $val;
}
}
return $selectUser;
}
//缓存用户共享对象=======================================
public static function userShareSql($userID){
static $userShareArr;
if(!is_array($userShareArr)){
$userShareArr = array();
}
if(!isset($userShareArr[$userID])){
$userInfo = systemMember::getInfo($userID);
if(!isset($userInfo['path'])){
return;
}
$sql = new FileCache(USER_PATH.$userInfo['path'].'/data/share.php');
$userShareArr[$userID] = $sql;
}
return $userShareArr[$userID];
}
//获取某个用户共享列表
public static function userShareList($userID){
$sql = self::userShareSql($userID);
$list = $sql->get();
if($userID == $_SESSION['kodUser']['userID']){//自己的列表则展示密码;否则清空密码
return $list;
}
//含有密码则不罗列
foreach($list as $key=>&$val){
if($val['sharePassword']){
unset($list[$key]);
}
}
return $list;
}
//获取某个用户某个共享
public static function userShareGet($userID,$name){
$sql = self::userShareSql($userID);
return $sql->get('name',$name);
}
//判断自己对某个组的权限 return false/'read'/'write'
public static function _userAuthGroupRole($groupID){
$sql = self::loadData();
$userInfo = $sql->get($_SESSION['kodUser']['userID']);
$groupInfo = $userInfo['groupInfo'];//自己所在的组
if(!is_array($groupInfo)){
return false;
}
if(isset($groupInfo[$groupID])){
return $groupInfo[$groupID];
}
$role = false;
$plist = array();
foreach ($groupInfo as $key => $value) {//
$group = systemGroup::getInfo($key);//测试组,是否在用户所在组的子组
$arr = explode(',',$group['children']);
if (in_array($groupID,$arr)) {
//return $groupInfo[$key]; // 找到最近的父级部门,而非第一个
if(empty($plist)){
$plist = $arr;
$role = $groupInfo[$key];
}else if(in_array($group['groupID'], $plist)){
$plist = $arr;
$role = $groupInfo[$key];
}
}
}
return $role;
}
//删除 path id
public static function _filterList($list,$filter_key = 'path'){
if($GLOBALS['isRoot']) return $list;
foreach ($list as $key => &$val) {
unset($val[$filter_key]);
unset($val['password']);
}
return $list;
}
//后台管理=====================
//管理员调用===================
/**
* 获取用户列表数据,根据用户组筛选;默认输出所有用户
*/
public function get($groupID='0') {
$result = self::userAtGroup($groupID);
foreach($result as $key=>&$val){
unset($val['password']);
}
show_json($result);
}
/**
* 获取用户列表数据,根据用户组筛选;默认输出所有用户
*/
public function getByName($name = '') {
if(!$name){
$name = $this->in['name'];
}
$result = $this->sql->get(array('name',$name));
if(is_array($result) && count($result)>0){
$arr = array_values($result);
unset($arr[0]['password']);
show_json($arr[0]);
}
show_json(LNG("not_exists"),false);
}
/**
* 用户添加
* systemMember/add&name=warlee&password=123&sizeMax=0&groupInfo={"0":"read","10":"write"}&role=default
*/
public function add($user = false){
if (!isset($this->in['name']) || //必填项
!isset($this->in['password']) ||
!isset($this->in['role']) ||
!isset($this->in['groupInfo']) || //{"0":"read","100":"read"}
!isset($this->in['sizeMax'])
){
show_json(LNG('data_not_full'),false);
}
$name = trim(rawurldecode($this->in['name']));
$password = rawurldecode($this->in['password']);
$groupInfo = json_decode(rawurldecode($this->in['groupInfo']),true);
if(!is_array($groupInfo)){
show_json(LNG('systemMember_group_error'),false);
}
if($this->sql->get(array('name',$name))){
show_json(LNG('error_repeat'),false,$name);
}
//非系统管理员,不能添加系统管理员
if(!$GLOBALS['isRoot'] && $this->in['role']=='1'){
show_json(LNG('group_role_error'),false);
}
$userArray = array();
if(isset($this->in['isImport'])){
$arr = explode("\n",$name);
foreach($arr as $v){
if(trim($v)!=''){
$userArray[] = trim($v);
}
}
}else{
$userArray[] = $name;
}
$nickName = 0;
if(isset($this->in['nickName'])){
$nickName = trim(rawurldecode($this->in['nickName']));
}
//批量添加
$errorArr = array();
foreach ($userArray as $val) {
if($this->sql->get('name',$val)){//已存在
$errorArr[] = $val;
continue;
}
$userID = $this->sql->getMaxId().'';
$userInfo = array(
'userID' => $userID,
'name' => $val,
'nickName' => $nickName ? $nickName : $val,
'password' => md5($password),
'role' => $this->in['role'],
'config' => array('sizeMax' => floatval($this->in['sizeMax']),//M
'sizeUse' => 1024*1024),//总大小,目前使用大小
'groupInfo' => $groupInfo,
'path' => make_path($val),
'status' => 1, //0禁用1启用
'lastLogin' => '', //最后登录时间 首次登陆则激活
'createTime'=> time(),
);
if(file_exists(iconv_system(USER_PATH.$userInfo['path'])) ){
$userInfo['path'] = $userInfo['path'].'_'.$userInfo['userID'];
}
//用户组目录
if( isset($this->in['homePath'])){
$homePath = _DIR(rawurldecode($this->in['homePath']));
if(file_exists($homePath)){
$userInfo['homePath'] = iconv_app($homePath);
}
}else{
unset($userInfo['homePath']);
}
if ($this->sql->set($userID,$userInfo)) {
$this->initDir($userInfo['path']);
}else{
$errorArr[] = $val;
}
}
$success = count($userArray)-count($errorArr);
$msg = LNG('success');
if(count($errorArr) > 0 ){
$msg = LNG('word_success').' : '.$success.', ';//部分失败
if($success == 0 ){
$msg = LNG('error_repeat');
}
$msg .= LNG('word_error').' : '.count($errorArr);
}
if($success==count($userArray)){
show_json($msg,true,$success);
}else{
show_json($msg,false,implode("\n",$errorArr));
}
}
/**
* 编辑 systemMember/edit&userID=101&name=warlee&password=123&sizeMax=0
* &groupInfo={%220%22:%22read%22,%22100%22:%22read%22}&role=default
*/
public function edit() {
if (!$this->in['userID']) show_json(LNG('data_not_full'),false);
$userID = $this->in['userID'];
$userInfo = $this->sql->get($userID);
if(!$userInfo){//用户不存在,或者默认用户不能修改
show_json(LNG('error'),false);
}
//非系统管理员,不能将别人设置为系统管理员
if(!$GLOBALS['isRoot'] && $this->in['role']=='1'){
show_json(LNG('group_role_error'),false);
}
//非系统管理员,不能修改系统管理员
if(!$GLOBALS['isRoot'] && $userInfo['role']=='1'){
show_json(LNG('group_role_error_admin'),false);
}
//管理员自己不能添加自己到非管理员组
if($GLOBALS['isRoot']
&& $_SESSION['kodUser']['userID']==$userID
&& $this->in['role']!='1'){
show_json(LNG('error'),false);
}
//修改为一个已存在的名字则提示
$theName = trim(rawurldecode($this->in['name']));
if($userInfo['name']!=$theName){
if($this->sql->get(array('name',$theName))){
show_json(LNG('error_repeat'),false);
}
}
$this->in['name'] = rawurlencode($theName);//还原
$editArr = array('name','nickName','role','password','groupInfo','homePath','status','sizeMax');
foreach ($editArr as $key) {
if(!isset($this->in[$key])) continue;
$userInfo[$key] = rawurldecode($this->in[$key]);
if($key == 'password'){
$userInfo['password'] = md5($userInfo[$key]);
}else if($key == 'sizeMax'){
$userInfo['config']['sizeMax'] = floatval($userInfo[$key]);
}else if($key == 'groupInfo'){//分组信息
$userInfo['groupInfo'] = json_decode(rawurldecode($this->in['groupInfo']),true);
}
}
//用户组目录
if( isset($this->in['homePath'])){
$userInfo['homePath'] = _DIR(rawurldecode($this->in['homePath']));
if(!file_exists($userInfo['homePath'])){
show_json(LNG('not_exists'),false);
}
$userInfo['homePath'] = iconv_app($userInfo['homePath']);
}else{
unset($userInfo['homePath']);
}
if($this->sql->set($userID,$userInfo)){
//self::spaceChange($userID);//重置用户使用空间
show_json(LNG('success'),true,$userInfo);
}
show_json(LNG('error_repeat'),false);
}
/**
* 用户批量操作 systemMember/doAction&action=&userID=[101,222,131]&param=
* action :
* -------------
* del 删除用户
* statusSet 启用&禁用 param=0/1
* roleSet 权限组 param=roleID
* groupReset 重置分组 param=group_json
* groupRemoveFrom 从某个组删除 param=groupID
* groupAdd 添加到某个分组 param=group_json
*/
public function doAction() {
if (!isset($this->in['userID'])){
show_json(LNG('username_can_not_null'),false);
}
$action = $this->in['action'];
$userArr = json_decode($this->in['userID'],true);
if(!is_array($userArr)){
show_json(LNG('error'),false);
}
if (in_array('1', $userArr)){//批量处理不处理系统管理员admin
show_json(LNG('default_user_can_not_do'),false);
}
foreach ($userArr as $userID) {
switch ($action) {
case 'del'://删除
$userInfo = $this->sql->get($userID);
if($this->sql->remove($userID) && $userInfo['name']!=''){
del_dir(iconv_system(USER_PATH.$userInfo['path'].'/'));
}
break;
case 'statusSet'://禁用&启用
$status = intval($this->in['param']);
$this->sql->set(array('userID',$userID),array('status',$status));
break;
case 'spaceSet'://批量设置用户空间大小
$value = intval($this->in['param']);
$userInfo = $this->sql->get($userID);
$userInfo['config']['sizeMax'] = $value;
$this->sql->set($userID,$userInfo);
break;
case 'roleSet'://设置权限组
$role = $this->in['param'];
//非系统管理员,不能将别人设置为系统管理员
if(!$GLOBALS['isRoot'] && $role=='1'){
show_json(LNG('group_role_error'),false);
}
$this->sql->set(array('userID',$userID),array('role',$role));
break;
case 'groupReset'://设置分组
$groupArr = json_decode($this->in['param'],true);
if(!is_array($groupArr)){
show_json(LNG('error'),false);
}
$this->sql->set(array('userID',$userID),array('groupInfo',$groupArr));
break;
case 'groupRemoveFrom'://从某个组移除
$groupID = $this->in['param'];
$userInfo = $this->sql->get($userID);
unset($userInfo['groupInfo'][$groupID]);
$this->sql->set($userID,$userInfo);
break;
case 'groupAdd'://添加到某个组
$groupArr = json_decode($this->in['param'],true);
if(!is_array($groupArr)){
show_json(LNG('error'),false);
}
$userInfo = $this->sql->get($userID);
foreach ($groupArr as $key => $value) {
$userInfo['groupInfo'][$key] = $value;
}
$this->sql->set($userID,$userInfo);
default:break;
}
}
show_json(LNG('success'));
}
public function initInstall(){
$sql = systemMember::loadData();
$list = $sql->get();
foreach ($list as $id => &$info) {//创建用户目录及初始化
$path = make_path($info['name']);
$this->initDir($path);
$info['path'] = $path;
$info['createTime'] = time();
}
$sql->reset($list);
//初始化群组目录
$homeFolders = explode(',',$this->config['settingSystem']['newGroupFolder']);
$sql = systemGroup::loadData();
$list = $sql->get();
foreach ($list as $id => &$info) {//创建用户目录及初始化
$path = make_path($info['name']);
$rootPath = GROUP_PATH.$path.'/';
foreach ($homeFolders as $dir) {
mk_dir(iconv_system($rootPath.'home/'.$dir));
}
$info['path'] = $path;
$info['createTime'] = time();
}
$sql->reset($list);
}
//============内部处理函数=============
/**
*初始化用户数据和配置。
*/
public function initDir($path){
$userFolder = array('home','recycle_kod','data');
$homeFolders = explode(',',$this->config['settingSystem']['newUserFolder']);
$rootPath = USER_PATH.$path.'/';
foreach ($userFolder as $dir) {
mk_dir(iconv_system($rootPath.$dir));
}
foreach ($homeFolders as $dir) {
mk_dir(iconv_system($rootPath.'home/'.$dir));
}
FileCache::save($rootPath.'data/config.php',$this->config['settingDefault']);
}
}

@ -0,0 +1,170 @@
<?php
/*
* @link http://kodcloud.com/
* @author warlee | e-mail:kodcloud@qq.com
* @copyright warlee 2014.(Shanghai)Co.,Ltd
* @license http://kodcloud.com/tools/license/license.txt
*/
class systemRole extends Controller{
public static $staticSql = null;
private $sql;
function __construct(){
parent::__construct();
$this->sql= self::loadData();
}
//保证只加载一次文件
public static function loadData(){
if(is_null(self::$staticSql)){
self::$staticSql = systemRoleData();
}
return self::$staticSql;
}
public static function getInfo($theId){
$sql = self::loadData();
return $sql->get($theId);
}
//获取所有权限组
//用户组权限
public function get() {
if(isset($this->in['group_role'])){
$this->in['action'] == 'get';
$this->roleGroupAction();
}
show_json($this->sql->get());
}
/**
* 权限添加
*/
public function add(){
$role = $this->_initData();
$roleId = $role['roleID'] = $this->sql->getMaxId().'';
$this->_checkExist( $this->sql->get(),array('name',$role['name']),$roleId );
if ($this->sql->set($role['roleID'],$role)) {
show_json(LNG('success'),true,$role['roleID']);
}
show_json(LNG('error'),false);
}
/**
* 编辑
*/
public function edit(){
$role = $this->_initData();
$roleId = $this->in['roleID'];
$this->_checkExist( $this->sql->get(),array('name',$role['name']),$roleId );
if ($this->sql->set($roleId,$role)){
show_json(LNG('success'),true,$roleId);
}
show_json(LNG('error'),false);
}
/**
* 删除
*/
public function del() {
if (!isset($this->in['roleID'])) show_json(LNG('data_not_full'),false);
if (strlen($this->in['roleID']) <= 1) show_json(LNG('default_user_can_not_do'),false);
systemMember::roleRemoveUserUpdate($this->in['roleID']);//用户所在权限组变更
if($this->sql->remove($this->in['roleID'])){
show_json(LNG('success'));
}
show_json(LNG('error'),false);
}
/**
* 用户组权限列表配置
* 增删改查
*/
public function roleGroupAction(){
$sql = new FileCache(USER_SYSTEM.'system_role_group.php');
switch ($this->in['action']) {
case 'get':
$roleGroup = $sql->get();
if($roleGroup['1']['name'] == 'read'){
$roleGroup['1']['name'] = LNG('system_role_read');
}
if($roleGroup['2']['name'] == 'write'){
$roleGroup['2']['name'] = LNG('system_role_write');
}
show_json($roleGroup,true,$this->config['pathRoleDefine']);
break;
case 'add':
$roleId = $sql->getMaxId().'';
$roleArr = json_decode($this->in['role_arr'],true);
if(!is_array($roleArr)) show_json(LNG('error'),false);
if(!trim($roleArr['name'])) show_json(LNG("data_not_full"),false);
$this->_checkExist( $sql->get(),array('name',$roleArr['name']),$roleId);
if ($sql->set($roleId,$roleArr)) {
show_json(array($roleId),true,$sql->get());
}
show_json(LNG('error'),false);
break;
case 'set':
$roleId = $this->in['roleID'];
$roleArr = json_decode($this->in['role_arr'],true);
if(!is_array($roleArr)) show_json(LNG('error'),false);
if(!trim($roleArr['name'])) show_json(LNG("data_not_full"),false);
$this->_checkExist( $sql->get(),array('name',$roleArr['name']),$roleId);
if ($sql->set($roleId,$roleArr)){
show_json(LNG('success'),true,$sql->get());
}
show_json(LNG('error'),false);
break;
case 'del':
$roleId = $this->in['roleID'];
if(in_array($roleId,array("1","2"))){
show_json(LNG('default_user_can_not_do'),false);
}
if($sql->remove($this->in['roleID'])){
show_json(LNG('success'),true,$sql->get());
}
show_json(LNG('error'),false);
break;
default:break;
}
}
//检测是否存在
private function _checkExist($data,$find,$checkID){
$findData = array();
foreach ($data as $key => $val) {
if ($val[$find[0]] == $find[1]) {
$findData[$key] = $data[$key];
}
}
if(is_array($findData) && count($findData)>0 ){
$key = array_keys($findData);$key=$key[0];
if($key != $checkID) show_json(LNG("error_repeat"),false);
}
}
//===========内部调用============
/**
* 初始化数据 get
* 只传键即可 &extNotAllow='php,jsp'&explorer.mkfile=1&explorer.pathRname=1
*/
private function _initData(){
if (strlen($this->in['name'])<1) show_json(LNG('groupname_can_not_null'),false);
$roleArr = array(
'name' => rawurldecode($this->in['name']),
'extNotAllow' => $this->in['extNotAllow']
);
foreach ($this->config['roleSetting'] as $key => $actions) {
foreach ($actions as $action) {
$keyUrl = $key.'_'.$action;//url explorer.mkdir => explorer_mkdir;
$keyAuth = $key.'.'.$action;
if (isset($this->in[$keyUrl])){
$roleArr[$keyAuth] = 1;
}else{
$roleArr[$keyAuth] = 0;
}
}
}
return $roleArr;
}
}

@ -0,0 +1,653 @@
<?php
/*
* @link http://kodcloud.com/
* @author warlee | e-mail:kodcloud@qq.com
* @copyright warlee 2014.(Shanghai)Co.,Ltd
* @license http://kodcloud.com/tools/license/license.txt
*/
class user extends Controller{
private $user; //用户相关信息
private $auth; //用户所属组权限
private $notCheck;
function __construct(){
parent::__construct();
//php5.4 bug;需要重新读取一次
@session_start();
@session_write_close();
if(!isset($_SESSION)){//避免session不可写导致循环跳转
$this->login(DATA_PATH."<br/>".LNG('path_can_not_write_data') );
}else{
$this->user = &$_SESSION['kodUser'];
if(!isset($this->user['path']) && isset($this->user['name'])){//旧版本数据
$this->user['path'] = $this->user['name'];
}
}
//不需要判断的action
$this->notCheckST = array('share','debug');
$this->notCheckACT = array(
'loginFirst','login','logout','loginSubmit',
'checkCode','publicLink','qrcode','sso');
$this->notCheckApp = array();//'pluginApp.to'
if(!$this->user){
$this->notCheckApp = array('pluginApp.to','api.view');
}
$this->config['forceWap'] = is_wap() && (!isset($_COOKIE['forceWap']) || $_COOKIE['forceWap'] == '1');
if( isset($_GET['forceWap']) ){
$this->config['forceWap'] = $_GET['forceWap'];
}
}
public function bindHook(){
$this->loadModel('Plugin')->init();
$this->bindCheckPassword();
}
/**
* 登录状态检测;并初始化数据状态
*/
public function loginCheck(){
// CSRF-TOKEN更新后同步;关闭X-CSRF-TOKEN的httpOnly
if( ACT == 'commonJs' && isset($_SESSION['X-CSRF-TOKEN'])){
$this->_setCsrfToken();
}
if(in_array(ST,$this->notCheckST)) return;//不需要判断的控制器
if(in_array(ACT,$this->notCheckACT)) return;//不需要判断的action
if(in_array(ST.'.'.ACT,$this->notCheckApp)) return;//不需要判断的对应入口
if(isset($_SESSION['kodLogin']) && $_SESSION['kodLogin']===true && $this->user){
$user = systemMember::getInfo($this->user['userID']);
$this->_loginSuccess($user);
return;
}else if($_COOKIE['kodUserID']!='' && $_COOKIE['kodToken']!=''){
$user = systemMember::getInfo($_COOKIE['kodUserID']);
if (!is_array($user) || !isset($user['password'])) {
$this->logout();
}
if($this->_makeLoginToken($user) === $_COOKIE['kodToken']){
@session_start();//re start
$_SESSION['kodLogin'] = true;
$_SESSION['kodUser']= $user;
$_SESSION['X-CSRF-TOKEN'] = rand_string(20);
$this->_setCsrfToken();
setcookie('kodUserID', $_COOKIE['kodUserID'], time()+3600*24*100);
setcookie('kodToken',$_COOKIE['kodToken'],time()+3600*24*100);
//check if session work
@session_write_close();
unset($_SESSION);
@session_start();
if( !isset($_SESSION['kodUser']) ||
!is_array($_SESSION['kodUser'])){
$this->login(DATA_PATH."<br/>".LNG('path_can_not_write_data') );
}else{
$this->_loginSuccess($user);
}
return;
}
$this->logout();//session user数据不存在
}else{
if ($this->config['settingSystem']['autoLogin'] != '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');
exit;
}
}
}
private function _setCsrfToken(){
setcookie_header('X-CSRF-TOKEN',$_SESSION['X-CSRF-TOKEN'], time()+3600*24*100);
}
private function _loginSuccess($user){
$this->user = $user;
if(!$user){//false
show_tips('[Error Code:1001] user data error!');
}else if(!$user['path']){//服务器管理后立即生效
$this->login("Your 'path' is empty,please install again");
}else if($user['status'] == 0){
$this->login(LNG('login_error_user_not_use'));
}else if($user['role']==''){
$this->login(LNG('login_error_role'));
}
define('USER',USER_PATH.$this->user['path'].'/');//utf-8
define('USER_TEMP',USER.'data/temp/');
define('USER_RECYCLE',USER.'recycle_kod/');
@session_start();//re start
$_SESSION['kodUser']= $user;
@session_write_close();
if (!file_exists(iconv_system(USER))) {
$this->login("User/".get_path_this(USER)." ".LNG('not_exists'));
}
$user_home = user_home_path($this->user);//utf-8
define('HOME_PATH',$user_home);
if ($this->user['role'] == '1') {
define('MYHOME',$user_home);
define('HOME','');
$GLOBALS['webRoot'] = WEB_ROOT;//服务器目录
$GLOBALS['isRoot'] = 1;
}else{
define('HOME',$user_home);
define('MYHOME','/');
$GLOBALS['webRoot'] = '';//从服务器开始到用户目录
$GLOBALS['isRoot'] = 0;
}
$desktop = $this->config['settingSystem']['desktopFolder'];
if(isset($this->config['settingSystemDefault']['desktopFolder'])){
$desktop = $this->config['settingSystemDefault']['desktopFolder'];
}
define('DESKTOP_FOLDER',$desktop);
$this->config['user'] = FileCache::load(USER.'data/config.php');
if(!is_array($this->config['user'])){
$this->config['user'] = array();
}
foreach($this->config['settingDefault'] as $key=>$val){
if(!isset($this->config['user'][$key]) ){
$this->config['user'][$key] = $val;
}
}
}
private function _loginCheckPassword($user,$password){
if($this->checkPassword($password)) return;
if($user['role'] == '1'){ // 管理员,提示修改;
if(isset($_SESSION['adminPasswordTips'])) return;
@session_start();
$_SESSION['adminPasswordTips']= 1;
@session_write_close();
show_tips("安全提示:<br/><br/>密码长度必须大于6,同时包含英文和数字;<br/>强烈建议登陆后修改密码!",false);
}
show_tips("密码长度必须大于6,同时包含英文和数字;<br/>请联系管理员修改后再试!",false);
}
private function checkPassword($password){
if(defined('INSTALL_CHANNEL') && INSTALL_CHANNEL =='hikvision.com'){
$this->config['settingSystemDefault']['passwordCheck'] = '1';
}
if($this->config['settingSystemDefault']['passwordCheck'] == '0') return true;
$hasNumber = preg_match('/\d/',$password);
$hasChar = preg_match('/[A-Za-z]/',$password);
if( strlen($password) >= 6 && $hasNumber && $hasChar) return true;
return false;
}
private function bindCheckPassword(){
$action = strtolower(ST.'.'.ACT);
$check = array(
'user.changepassword' => 'passwordNew',
'systemmember.edit' => 'password',
'systemmember.add' => 'password',
);
if(!isset($check[$action])) return;
$password = $this->in[$check[$action]];
if($this->checkPassword($password)) return;
show_json("密码长度必须大于6,同时包含英文和数字;<br/>请联系管理员修改后再试!",false);
}
/**
* 共享kod登陆并跳转
* check: 校验方式:userID|userName|roleID|roleName|groupID|groupName,为空则所有登陆用户
* value: 对应的值
* link : 登陆后的跳转链接
*/
public function sso(){
$result = false;
$error = "未登录!";
if(!isset($_SESSION) || $_SESSION['kodLogin'] != 1){//避免session不可写导致循环跳转
$this->login($error);
}
$user = $_SESSION['kodUser'];
//admin 或者不填则允许所有kod用户登陆
if( $user['role'] == '1' ||
!isset($this->in['check']) ||
!isset($this->in['value']) ){
$result = true;
}
$checkValue = false;
switch ($this->in['check']) {
case 'userID':$checkValue = $user['userID'];break;
case 'userName':$checkValue = $user['name'];break;
case 'roleID':$checkValue = $user['role'];break;
case 'roleName':
$role = systemRole::getInfo($user['role']);
$checkValue = $role['name'];
break;
case 'groupID':
$checkValue = array_keys($user['groupInfo']);
break;
case 'groupName':
$checkValue = array();
foreach ($user['groupInfo'] as $groupID=>$val){
$item = systemGroup::getInfo($groupID);
$checkValue[] = $item['name'];
}
break;
default:break;
}
if(!$result && $checkValue != false){
if( (is_string($checkValue) && $checkValue == $this->in['value']) ||
(is_array($checkValue) && in_array($this->in['value'],$checkValue))
){
$result = true;
}else{
$error = clear_html($this->in['check']).' 没有权限, 配置权限需要为: "'
.clear_html($this->in['value']).'"';
}
}
if($result){
include(LIB_DIR.'api/sso.class.php');
SSO::sessionSet($this->in['app']);
header('location:'.$this->in['link']);
exit;
}
$this->login($error);
}
public function accessToken(){
if($_SESSION['kodLogin'] === true){
show_json(access_token_get(),true);
}else{
show_json('not login!',false);
}
}
//临时文件访问
public function publicLink(){
$pass = $this->config['settingSystem']['systemPassword'];
$fid = $this->in['fid'];//$this->in['fid'] 第三项
$path = Mcrypt::decode($fid,$pass);
if (strlen($path) == 0) {
show_json(LNG('error'),false);
}
$download = isset($_GET['download']);
$filename = isset($_GET['downFilename'])?$_GET['downFilename']:false;
file_put_out($path,$download,$filename);
}
public function commonJs(){
$out = ob_get_clean();
$basicPath = BASIC_PATH;
$userPath = USER_PATH;
$groupPath = GROUP_PATH;
if (!$GLOBALS['isRoot']) {//对非root用户隐藏地址
$basicPath = '/';
$userPath = '/';
$groupPath = '/';
}
$theConfig = array(
'environment' => STATIC_JS,
'lang' => I18n::getType(),
'systemOS' => $this->config['systemOS'],
'isRoot' => $GLOBALS['isRoot'],
'userID' => $this->user['userID'],
'webRoot' => $GLOBALS['webRoot'],
'webHost' => HOST,
'appHost' => APP_HOST,
'staticPath' => STATIC_PATH,
'appIndex' => $_SERVER['SCRIPT_NAME'],
'basicPath' => $basicPath,
'userPath' => $userPath,
'groupPath' => $groupPath,
'myhome' => MYHOME,
'myDesktop' => MYHOME.DESKTOP_FOLDER.'/',
'settings' => array(
'updloadChunkSize' => file_upload_size(),
'updloadThreads' => $this->config['settings']['updloadThreads'],
'updloadBindary' => $this->config['settings']['updloadBindary'],
'uploadCheckChunk' => $this->config['settings']['uploadCheckChunk'],
'paramRewrite' => $this->config['settings']['paramRewrite'],
'pluginServer' => $this->config['settings']['pluginServer'],
'appType' => $this->config['settings']['appType']
),
'phpVersion' => PHP_VERSION,
'version' => KOD_VERSION,
'versionBuild' => KOD_VERSION_BUILD,
'kodID' => md5(BASIC_PATH.$this->config['settingSystem']['systemPassword']),
'jsonData' => "",
'selfShare' => systemMember::userShareList($this->user['userID']),
'userConfig' => $this->config['user'],
'accessToken' => access_token_get(),
'versionEnv' => base64_encode(serverInfo()),
//虚拟目录
'KOD_GROUP_PATH' => KOD_GROUP_PATH,
'KOD_GROUP_SHARE' => KOD_GROUP_SHARE,
'KOD_USER_SELF' => KOD_USER_SELF,
'KOD_USER_SHARE' => KOD_USER_SHARE,
'KOD_USER_RECYCLE' => KOD_USER_RECYCLE,
'KOD_USER_FAV' => KOD_USER_FAV,
'KOD_GROUP_ROOT_SELF' => KOD_GROUP_ROOT_SELF,
'KOD_GROUP_ROOT_ALL' => KOD_GROUP_ROOT_ALL,
'ST' => $this->in['st'],
'ACT' => $this->in['act'],
);
if(isset($this->config['settingSystem']['versionHash'])){
$theConfig['versionHash'] = $this->config['settingSystem']['versionHash'];
$theConfig['versionHashUser'] = $this->config['settingSystem']['versionHashUser'];
}
if (!isset($GLOBALS['auth'])) {
$GLOBALS['auth'] = array();
}
$useTime = mtime() - $GLOBALS['config']['appStartTime'];
header("Content-Type: application/javascript; charset=utf-8");
echo 'if(typeof(kodReady)=="undefined"){kodReady=[];}';
Hook::trigger('user.commonJs.insert',$this->in['st'],$this->in['act']);
echo ';AUTH='.json_encode($GLOBALS['auth']).';';
echo 'G='.json_encode($theConfig).';';
$lang = json_encode_force(I18n::getAll());
if(!$lang){
$lang = '{}';
}
echo 'LNG='.$lang.';G.useTime='.$useTime.';';
}
public function appConfig(){
$theConfig = array(
'lang' => I18n::getType(),
'isRoot' => $GLOBALS['isRoot'],
'userID' => $this->user['userID'],
'myhome' => MYHOME,
'settings' => array(
'updloadChunkSize' => file_upload_size(),
'updloadThreads' => $this->config['settings']['updloadThreads'],
'uploadCheckChunk' => $this->config['settings']['uploadCheckChunk'],
),
'version' => KOD_VERSION,
'versionBuild' => KOD_VERSION_BUILD,
// 'userConfig' => $this->config['user'],
);
show_json($theConfig);
}
/**
* 登录view
*/
public function login($msg = ''){
if(isset($this->in['isAjax'])){
show_json($msg,false);
}
if (!file_exists(USER_SYSTEM.'install.lock')) {
chmod_path(BASIC_PATH,DEFAULT_PERRMISSIONS);
$this->display('install.html');
exit;
}
$this->assign('msg',$msg);
if (is_wap()) {
$this->display('loginWap.html');
}else{
$this->display('login.html');
}
exit;
}
/**
* 首次登录
*/
public function loginFirst(){
if (!file_exists(USER_SYSTEM.'install.lock')) {
touch(USER_SYSTEM.'install.lock');
if(!isset($this->in['password'])){
$this->in['password'] = 'admin';
}
$root = '1';
$sql = systemMember::loadData();
$user = array(//重置admin
'name' => 'admin',
'path' => "admin",
'password' => md5($this->in['password']),
'userID' => $root,
'role' => '1',
'config' => array('sizeMax'=>'0','sizeUse'=>1024),
'groupInfo' => array('1'=>'write'),
'createTime' => time(),
'status' => 1,
);
$sql->set($root,$user);
if( !$user['createTime'] ||
!$user['path'] ||
!file_exists(USER_PATH.$user['path'])
){
$member = new systemMember();
$member->initInstall();
}
}
header('location:./index.php?user/login');
exit;
}
/**
* 退出处理
*/
public function logout(){
session_start();
user_logout();
}
/**
* 登录数据提交处理;登陆跳转:
*
* 自动登陆index.php?user/loginSubmit&name=guest&password=guest
* 登陆自动跳转index.php?user/login&link=http://baidu.com
* api登陆:index.php?user/loginSubmit&login_token=ZGVtbw==|da9926fdab0c7c32ab2c329255046793
*/
public function loginSubmit(){
$apiLoginCheck = false;
if(isset($this->in['login_token'])){
$api_token = $this->config['settings']['apiLoginTonken'];
$param = explode('|',$this->in['login_token']);
if( strlen($api_token) < 5 ||
count($param) != 2 ||
md5(base64_decode($param[0]).$api_token) != $param[1]
){
$this->_loginDisplay("API 接口参数错误!",false);
}
$this->in['name'] = urlencode(base64_decode($param[0]));
$apiLoginCheck = true;
}else{
if(!isset($this->in['name']) || !isset($this->in['password'])) {
$this->_loginDisplay(LNG('login_not_null'),false);
}
if( need_check_code()
&& $this->in['name'] != 'guest'
&& $_SESSION['checkCode'] !== strtolower($this->in['checkCode']) ){
$this->_loginDisplay(LNG('code_error'),false);
}
}
$name = rawurldecode($this->in['name']);
$password = rawurldecode($this->in['password']);
if($this->in['salt']){
$key = substr($password,0,5)."2&$%@(*@(djfhj1923";
$password = Mcrypt::decode(substr($password,5),$key);
}
$member = systemMember::loadData();
$user = $member->get('name',$name);
if($apiLoginCheck && $user){//api自动登陆
}else if ($user === false || md5($password) !== $user['password']){
$this->_loginDisplay(LNG('password_error'),false);//$member->get()
}else if($user['status'] == 0){
$this->_loginDisplay(LNG('login_error_user_not_use'),false);
}else if($user['role']==''){
$this->_loginDisplay(LNG('login_error_role'),false);
}
//首次登陆初始化app 没有最后登录时间
$this->_loginCheckPassword($user,$password);
$this->_loginSuccess($user);//登陆成功
if(!$user['lastLogin']){
$app = init_controller('app');
$app->initApp($user);
}
$user['lastLogin'] = time();//记录最后登录时间
$member->set($user['userID'],$user);
session_start();//re start 有新的修改后调用
$_SESSION['kodLogin'] = true;
$_SESSION['kodUser']= $user;
$_SESSION['X-CSRF-TOKEN'] = rand_string(20);
$this->_setCsrfToken();
setcookie('kodUserID', $user['userID'], time()+3600*24*100);
if ($this->in['rememberPassword'] == '1') {
setcookie('kodToken',$this->_makeLoginToken($user),time()+3600*24*100);
}
$this->_loginDisplay('ok',true);
}
private function _loginDisplay($msg,$success){
if(isset($this->in['isAjax'])){
if(isset($this->in['getToken']) && $success){
show_json(access_token_get(),true);
}
show_json($msg,$success);
}else{
if($success){
$href = './';
if(isset($this->in['link'])){
$href = rawurldecode($this->in['link']);
}
header('location:'.$href);
}else{
$this->login($msg);
}
}
exit;
}
//登陆token
private function _makeLoginToken($userInfo){
//$ua = $_SERVER['HTTP_USER_AGENT'];
$system_pass = $this->config['settingSystem']['systemPassword'];
return md5($userInfo['password'].$system_pass.$userInfo['userID']);
}
public function versionInstall(){
}
/**
* 修改密码
*/
public function changePassword(){
$passwordNow=rawurldecode($this->in['passwordNow']);
$passwordNew=rawurldecode($this->in['passwordNew']);
if (!$passwordNow && !$passwordNew)show_json(LNG('password_not_null'),false);
if ($this->user['password']==md5($passwordNow)){
$sql=systemMember::loadData();
$this->user['password'] = md5($passwordNew);
$sql->set($this->user['userID'],$this->user);
show_json('success');
}else {
show_json(LNG('old_password_error'),false);
}
}
//CSRF 防护cookie设置CSRF-TOKENheader:提交X-CSRF-TOKEN
//referer检测
private function _checkCSRF(){
$not_check = array('user.commonJs','pluginApp.index');
if( !$this->config['settingSystem']['csrfProtect'] ||
isset($this->in['accessToken']) ||
in_array(ST.'.'.ACT, $not_check)
){
return;
}
if( !isset($_SERVER['HTTP_X_CSRF_TOKEN'])||
$_SERVER['HTTP_X_CSRF_TOKEN'] != $_SESSION['X-CSRF-TOKEN']
){
show_json('token_error',false);
}
}
private function _checkKey($key){
if(!isset($this->in[$key])){
return '';
}
return is_string($this->in[$key])? rawurldecode($this->in[$key]):'';
}
private function initAuth(){
$auth = systemRole::getInfo($this->user['role']);
//向下版本兼容处理
//未定义;新版本首次使用默认开放的功能
if(!isset($auth['userShare.set'])){
$auth['userShare.set'] = 1;
}
if(!isset($auth['explorer.fileDownload'])){
$auth['explorer.fileDownload'] = 1;
}
//默认扩展功能 等价权限
$auth['user.commonJs'] = 1;//权限数据配置后输出到前端
$auth['explorer.pathDeleteRecycle'] = $auth['explorer.pathDelete'];
$auth['explorer.pathCopyDrag'] = $auth['explorer.pathCuteDrag'];
$auth['explorer.officeSave'] = $auth['editor.fileSave'];
$auth['explorer.fileSave'] = $auth['editor.fileSave'];
$auth['explorer.imageRotate'] = $auth['editor.fileSave'];
$auth['explorer.fileDownloadRemove']= $auth['explorer.fileDownload'];
$auth['explorer.zipDownload'] = $auth['explorer.fileDownload'];
$auth['explorer.unzipList'] = $auth['explorer.unzip'];
//彻底禁止下载;文件获取
//$auth['explorer.fileProxy'] = $auth['explorer.fileDownload'];
//$auth['editor.fileGet'] = $auth['explorer.fileDownload'];
//$auth['explorer.officeView'] = $auth['explorer.fileDownload'];
$auth['editor.fileGet'] = 1;
$auth['explorer.fileProxy'] = 1;
$auth['explorer.officeView']= 1;
$auth['explorer.pathList'] = 1;
$auth['explorer.treeList'] = 1;
if(!$auth['explorer.fileDownload']){
$auth['explorer.zip'] = 0;
}
$auth['userShare.del'] = $auth['userShare.set'];
$GLOBALS['auth'] = $auth;
}
/**
* 权限验证;统一入口检验
*/
public function authCheck(){
$this->initAuth();
if(in_array(ST,$this->notCheckST)) return;//不需要判断的控制器
if(in_array(ACT,$this->notCheckACT)) return;//不需要判断的action
if(in_array(ST.'.'.ACT,$this->notCheckApp)) return;//不需要判断的对应入口
if (!array_key_exists(ST,$this->config['roleSetting']) ) return;
if (!in_array(ACT,$this->config['roleSetting'][ST])) return;//输出处理过的权限
$this->_checkCSRF();
if (isset($GLOBALS['isRoot']) && $GLOBALS['isRoot'] == 1) return;
if ($GLOBALS['auth'][ST.'.'.ACT] != 1) show_json(LNG('no_permission'),false);
//扩展名限制:新建文件&上传文件&重命名文件&保存文件&zip解压文件
$check_arr = array(
'mkfile' => $this->_checkKey('path'),
'pathRname' => $this->_checkKey('rnameTo'),
'fileUpload'=> $_FILES['file']['name']? $_FILES['file']['name']:$GLOBALS['in']['name'],
'fileSave' => $this->_checkKey('path')
);
if (array_key_exists(ACT,$check_arr) && !checkExt($check_arr[ACT])){
show_json(LNG('no_permission_ext'),false);
}
}
public function checkCode() {
session_start();//re start
$captcha = new MyCaptcha(4);
$_SESSION['checkCode'] = $captcha->getString();
}
public function qrcode(){
$url = $this->in['url'];
if(function_exists('imagecolorallocate')){
ob_get_clean();
QRcode::png($this->in['url']);
}else{
header('location: https://demo.kodcloud.com/?user/view/qrcode&url='.rawurlencode($url));
}
}
}

@ -0,0 +1,110 @@
<?php
/*
* @link http://kodcloud.com/
* @author warlee | e-mail:kodcloud@qq.com
* @copyright warlee 2014.(Shanghai)Co.,Ltd
* @license http://kodcloud.com/tools/license/license.txt
*/
class userShare extends Controller{
private $sql;
function __construct(){
parent::__construct();
$this->sql=new FileCache(USER.'data/share.php');
}
/**
* 获取
*/
public function get($ret = 0) {
$list = $this->sql->get();
foreach($list as $key=>&$val){
//unset($val['sharePassword']);
}
if($ret){
return $list;
}
show_json($list, true);
}
//检测该目录是否已被共享
public function checkByPath(){
$this->in['path'] = _DIR_CLEAR($this->in['path']);
$shareInfo = $this->sql->get('path',$this->in['path']);
if (!$shareInfo) {
show_json('',false);//没有找到
}else{
show_json($shareInfo,true,$this->get(1));
}
}
/**
* 编辑
*/
public function set(){
if (!$this->in['name'] || !$this->in['path'] || !$this->in['type']){
show_json(LNG('data_not_full'),false);
}
$shareInfo = array(
'mtime' => time(),//更新则记录最后时间
'sid' => isset($this->in['sid'])?$this->in['sid']:'',
'type' => $this->in['type'],
'path' => _DIR_CLEAR($this->in['path']),
'name' => $this->in['name'],
'showName' => isset($this->in['showName'])?$this->in['showName']:$this->in['name'],
'timeTo' => isset($this->in['timeTo'])?$this->in['timeTo']:'',
'sharePassword' => isset($this->in['sharePassword'])?$this->in['sharePassword']:'',
'codeRead' => isset($this->in['codeRead'])?$this->in['codeRead']:'',
'canUpload' => isset($this->in['canUpload'])?$this->in['canUpload']:'',
'notDownload' => isset($this->in['notDownload'])?$this->in['notDownload']:''
);
if(substr($shareInfo['path'],0,1) == '{'){//用户只能分享自己的目录;
show_json(LNG('path_can_not_action'),false);
}
$name = $shareInfo['name'];
$search = $this->sql->get('name',$name);
$i = 0;
while($i>200 || $search && $search['sid']!=$shareInfo['sid']){
$name = $shareInfo['name'].'('.$i.')';
$search = $this->sql->get('name',$name);
$i++;
}
if($i !=0){
$shareInfo['name'] = $name;
}
//含有sid则为更新否则为插入
if (isset($this->in['sid']) && strlen($this->in['sid']) == 8) {
$infoNew = $this->sql->get($this->in['sid']);
foreach ($shareInfo as $key=>$val) {//只更新指定key
$infoNew[$key] = $val;
}
if($this->sql->set($this->in['sid'],$infoNew)){
show_json($infoNew,true,$this->get(1));
}
show_json(LNG('error'),false);
}else{//插入
$shareList = $this->sql->get();
$newId = rand_string(8);
while (isset($shareList[$newId])) {
$newId = rand_string(8);
}
$shareInfo['sid'] = $newId;
if($this->sql->set($newId,$shareInfo)){
show_json($shareInfo,true,$this->get(1));
}
show_json(LNG('error'),false);
}
show_json(LNG('error'),false);
}
/**
* 删除
*/
public function del() {
$list = json_decode($this->in['dataArr'],true);
foreach ($list as $val) {
$this->sql->remove($val['path']);
}
show_json(LNG('success'),true,$this->get(1));
}
}

File diff suppressed because one or more lines are too long

@ -0,0 +1,106 @@
<?php
/*
* @link http://kodcloud.com/
* @author warlee | e-mail:kodcloud@qq.com
* @copyright warlee 2014.(Shanghai)Co.,Ltd
* @license http://kodcloud.com/tools/license/license.txt
*/
/**
* 程序路由处理类
* 这里类判断外界参数调用内部方法
*/
class Application {
private $defaultController = null; //默认的类名
private $defaultAction = null; //默认的方法名
public $subDir =''; //控制器子目录
public $model = ''; //控制器对应模型 对象。
/**
* 设置默认的类名
* @param string $defaultController
*/
public function setDefaultController($defaultController){
$this -> defaultController = $defaultController;
}
/**
* 设置默认的方法名
* @param string $defaultAction
*/
public function setDefaultAction($defaultAction){
$this -> defaultAction = $defaultAction;
}
/**
* 设置控制器子目录
* @param string $dir
*/
public function setSubDir($dir){
$this -> subDir = $dir;
}
/**
* 运行controller 的方法
* @param $class , controller类名。
* @param $function , 方法名
*/
public function appRun($className,$function){
$subDir = $this -> subDir ? $this -> subDir . '/' : '';
$classFile = CONTROLLER_DIR . $subDir.$className.'.class.php';
Hook::filter('Application.appRun',$classFile);
if (!file_exists_case($classFile)) {
show_tips($className.' controller '.LNG("not_exists"),APP_HOST,5);
}
include_once($classFile);
if (!class_exists($className)) {
show_tips($className.' class '.LNG("not_exists"),APP_HOST,5);
}
$instance = new $className();
if (!method_exists($instance, $function)) {
show_tips($function.' method '.LNG("not_exists"),APP_HOST,5);
}
return $instance -> $function();
}
/**
* 运行自动加载的控制器
*/
private function autorun(){
global $config;
if (count($config['autorun']) > 0) {
foreach ($config['autorun'] as $key => $var) {
$this->appRun($var['controller'],$var['function']);
}
}
}
/**
* 调用实际类和方式
*/
public function run(){
$URI = $GLOBALS['in']['URLremote'];
if (!isset($URI[0]) || $URI[0] == '') $URI[0] = $this->defaultController;
if (!isset($URI[1]) || $URI[1] == '') $URI[1] = $this->defaultAction;
//需要校验权限的方法,统一大小写敏感;处理需要权限的方法
$roleSetting = $GLOBALS['config']['roleSetting'];
$st = $URI[0];
$act = $URI[1];
if (array_key_exists($st,$roleSetting) ){
if( !in_array($act,$roleSetting[$st]) &&
in_array_not_case($act,$roleSetting[$st])
){
show_tips($act.' action not exists!');
}
}
define('ST',$st);
define('ACT',$act);
//自动加载运行类。
$this->autorun();
$this->appRun(ST,ACT);
}
}

@ -0,0 +1,74 @@
<?php
/*
* @link http://kodcloud.com/
* @author warlee | e-mail:kodcloud@qq.com
* @copyright warlee 2014.(Shanghai)Co.,Ltd
* @license http://kodcloud.com/tools/license/license.txt
*/
/**
* 控制器抽象类
*/
abstract class Controller {
public $in;
public $config; // 全局配置
public $tpl; // 模板目录
public $values; // 模板变量
/**
* 构造函数
*/
function __construct(){
global $in,$config;
$this ->config = &$config;
$this ->in = &$in;
$this ->values['config'] = &$config;
$this ->values['in'] = &$in;
$this ->tpl = TEMPLATE.get_class($this).'/';
}
/**
* 加载模型
* @param string $class
*/
public function loadModel($class){
$args = func_get_args();
$this -> $class = call_user_func_array('init_model', $args);
return $this -> $class;
}
/**
* 加载类库文件
* @param string $class
*/
public function loadClass($class){
if (1 === func_num_args()) {
$this -> $class = new $class;
} else {
$reflectionObj = new ReflectionClass($class);
$args = func_get_args();
array_shift($args);
$this -> $class = $reflectionObj -> newInstanceArgs($args);
}
return $this -> $class;
}
/**
* 显示模板
*
* TODO smarty
* @param
*/
protected function assign($key,$value){
$this->values[$key] = $value;
}
/**
* 显示模板
* @param
*/
protected function display($tplFile){
ob_end_clean();
extract($this->values);
require($this->tpl.$tplFile);
}
}

@ -0,0 +1,38 @@
<?php
/*
* @link http://kodcloud.com/
* @author warlee | e-mail:kodcloud@qq.com
* @copyright warlee 2014.(Shanghai)Co.,Ltd
* @license http://kodcloud.com/tools/license/license.txt
*/
/**
* 模型抽象类
* 一个关于各种模型的基本行为类,每个模型都必须继承这个类的方法
*/
abstract class Model {
var $db = null;
var $in;
var $config;
/**
* 构造函数
* @return Null
*/
function __construct(){
global $config, $in;
$this -> in = &$in;
$this -> config = &$config;
}
/**
* TODO db
*/
function db(){
if ($this ->db != NULL) {
return $this ->db;
}else{
}
}
}

@ -0,0 +1,59 @@
<?php
$desktopApps = array(
'my_computer' => array(
"type" => "app",
"content" => "core.explorer('','".LNG('my_computer')."');",
"icon" => STATIC_PATH."images/file_icon/icon_others/computer.png",
"name" => LNG('my_computer'),
"menuType" => "systemBox menu-default",
"ext" => 'oexe',
"path" => "",
"resize" => 1
),
'recycle' => array(
"type" => "app",
"content" => "core.explorer('".KOD_USER_RECYCLE."','".LNG('recycle')."');",
"icon" => STATIC_PATH."images/file_icon/icon_others/recycle.png",
"name" => LNG('recycle'),
"menuType" => "systemBox menu-recycle-button",
"ext" => 'oexe',
"path" => "",
"resize" => 1
),
'PluginCenter' => array(
"type" => "app",
"content" => "core.openWindowBig('./index.php?pluginApp/index','".LNG('PluginCenter')."');",
"icon" => STATIC_PATH."images/file_icon/icon_others/plugins.png",
"name" => LNG('PluginCenter'),
"menuType" => "systemBox menu-default",
"ext" => 'oexe',
"path" => "",
"resize" => 1
),
'setting' => array(
"type" => "app",
"content" => "core.setting();",
"icon" => STATIC_PATH."images/file_icon/icon_others/setting.png",
"name" => LNG('setting'),
"menuType" => "systemBox menu-default",
"ext" => 'oexe',
"path" => "/",
"resize" => 1
),
'appStore' => array(
"type" => "app",
"content" => "core.appStore();",
"icon" => STATIC_PATH."images/file_icon/icon_others/appStore.png",
"name" => LNG('app_store'),
"menuType" => "systemBox menu-default",
"ext" => 'oexe',
"path" => "",
"resize" => 1
)
);
//管理员插件中心
if(!$GLOBALS['isRoot']){
unset($desktopApps['PluginCenter']);
}
return $desktopApps;

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -0,0 +1,534 @@
<?php
//扩展名权限判断 有权限则返回1 不是true
function checkExt($file){
if($GLOBALS['isRoot']) return 1;
if($file == '.htaccess' || $file == '.user.ini') return false;
if (strstr($file,'<') || strstr($file,'>') || $file=='') {
return 0;
}
//'php|phtml|phtm|pwml|asp|aspx|ascx|jsp|pl|htaccess|shtml|shtm'
$notAllow = strtolower($GLOBALS['auth']['extNotAllow']);
$extArr = explode('|',$notAllow);
if(in_array('asp',$extArr)){
$extArr = array_merge($extArr,array('aspx','ascx','pwml'));
}
if(in_array('php',$extArr)){
$extArr = array_merge($extArr,array('phtml','phtm','htaccess','pwml'));
}
if(in_array('htm',$extArr) || in_array('html',$extArr)){
$extArr = array_merge($extArr,array('html','shtml','shtm','html','svg'));
}
foreach ($extArr as $current) {
if ($current !== '' && stristr($file,'.'.$current)){//含有扩展名
return 0;
}
}
return 1;
}
function checkExtSafe($file){
if($file == '.htaccess' || $file == '.user.ini') return false;
if (strstr($file,'<') || strstr($file,'>') || $file=='') return false;
$disable = 'php|phtml|phtm|pwml|asp|aspx|ascx|jsp|pl|html|htm|svg|shtml|shtm';
$extArr = explode('|',$disable);
foreach ($extArr as $ext) {
if ($ext && stristr($file,'.'.$ext)) return false;
}
return true;
}
//-----解压缩跨平台编码转换;自动识别编码-----
//压缩前,文件名处理;
//ACT=zip——压缩到当前
//ACT=zipDownload---打包下载[判断浏览器&UA——得到地区自动转换为目标编码]
function zip_pre_name($fileName,$toCharset=false){
if(get_path_this($fileName) == '.DS_Store') return '';//过滤文件
if (!function_exists('iconv')){
return $fileName;
}
$charset = $GLOBALS['config']['systemCharset'];
if($toCharset == false){//默认从客户端和浏览器自动识别
$toCharset = 'utf-8';
$clientLanugage = I18n::defaultLang();
$langType = I18n::getType();
if( client_is_windows() && (
$clientLanugage =='zh-CN' ||
$clientLanugage =='zh-TW' ||
$langType =='zh-CN' ||
$langType =='zh-TW' )
){
$toCharset = "gbk";//压缩或者打包下载压缩时文件名采用的编码
}
}
$result = iconv_to($fileName,$charset,$toCharset);
if(!$result){
$result = $fileName;
}
//write_log("zip:".$charset.'=>'.$toCharset.';'.$fileName.'=>'.$result,'zip');
return $result;
}
function unzip_filter_ext($name){
$add = '.txt';
if( checkExt($name) &&
!stristr($name,'user.ini') &&
!stristr($name,'.htaccess')
){//允许
return $name;
}
return $name.$add;
}
//解压到kod文件名处理;识别编码并转换到当前系统编码
function unzip_pre_name($fileName){
$fileName = str_replace(array('../','..\\',''),'',$fileName);
if (!function_exists('iconv')){
return unzip_filter_ext($fileName);
}
if(isset($GLOBALS['unzipFileCharsetGet'])){
$charset = $GLOBALS['unzipFileCharsetGet'];
}else{
$charset = get_charset($fileName);
}
$toCharset = $GLOBALS['config']['systemCharset'];
$result = iconv_to($fileName,$charset,$toCharset);
if(!$result){
$result = $fileName;
}
$result = unzip_filter_ext($result);
//echo $charset.'==>'.$toCharset.':'.$result.'==='.$fileName.'<br/>';
return $result;
}
// 获取压缩文件内编码
// $GLOBALS['unzipFileCharsetGet']
function unzip_charset_get($list){
if(count($list) == 0) return 'utf-8';
$charsetArr = array();
for ($i=0; $i < count($list); $i++) {
$charset = get_charset($list[$i]['filename']);
if(!isset($charsetArr[$charset])){
$charsetArr[$charset] = 1;
}else{
$charsetArr[$charset] += 1;
}
}
arsort($charsetArr);
$keys = array_keys($charsetArr);
if(in_array('gbk',$keys)){//含有gbk,则认为是gbk
$keys[0] = 'gbk';
}
$GLOBALS['unzipFileCharsetGet'] = $keys[0];
return $keys[0];
}
/**
* 服务器相关环境
* 检测环境是否支持升级版本
*/
function serverInfo(){
$lib = array(
"sqlit3"=>intval( class_exists('SQLite3') ),
"sqlit" =>intval( extension_loaded('sqlite') ),
"curl" =>intval( function_exists('curl_init') ),
"pdo" =>intval( class_exists('PDO') ),
"mysqli"=>intval( extension_loaded('mysqli') ),
"mysql" =>intval( extension_loaded('mysql') ),
);
$libStr = "";
foreach($lib as $key=>$val){
$libStr .= $key.'='.$val.';';
}
$system = explode(" ", php_uname());
$env = array(
"sys" => strtolower($system[0]),
"php" => floatval(PHP_VERSION),
"server"=> $_SERVER['SERVER_SOFTWARE'],
"lib" => $libStr,
"info" => php_uname().';php='.PHP_VERSION,
);
$result = str_replace("\/","@",json_encode($env));
return $result;
}
function charset_check(&$str,$check,$tempCharset='utf-8'){
if ($str === '' || !function_exists("mb_convert_encoding")){
return false;
}
$testStr1 = @mb_convert_encoding($str,$tempCharset,$check);
$testStr2 = @mb_convert_encoding($testStr1,$check,$tempCharset);
if($str == $testStr2){
return true;
}
return false;
}
//https://segmentfault.com/a/1190000003020776
//http://blog.sina.com.cn/s/blog_b97feef301019571.html
function get_charset(&$str) {
if($GLOBALS['config']['checkCharsetDefault']){//直接指定编码
return $GLOBALS['config']['checkCharsetDefault'];
}
if ($str === '' || !function_exists("mb_detect_encoding")){
return 'utf-8';
}
$bom_arr = array(
'utf-8' => chr(0xEF) . chr(0xBB) .chr(0xBF),
'utf-16le' => chr(0xFF) . chr(0xFE),
'utf-16be' => chr(0xFE) . chr(0xFF),
'utf-32le' => chr(0xFF) . chr(0xFE) . chr(0x00) . chr(0x00),
'utf-32be' => chr(0x00) . chr(0x00) . chr(0xFE) . chr(0xFF),
);
foreach ($bom_arr as $key => $value) {
if (substr($str,0,strlen($value)) === $value ){
return $key;
}
}
//前面检测成功则,自动忽略后面
$charset=strtolower(@mb_detect_encoding($str,$GLOBALS['config']['checkCharset']));
$charsetGet = $charset;
if ($charset == 'cp936'){
// 有交叉,部分文件无法识别
if(charset_check($str,'ISO-8859-4') && !charset_check($str,'gbk') && !charset_check($str,'big5')){
$charset = 'ISO-8859-4';
}elseif(charset_check($str,'gbk') && !charset_check($str,'big5')){
$charset = 'gbk';
}else if(charset_check($str,'big5')){
$charset = 'big5';
}
}else if ($charset == 'euc-cn'){
$charset = 'gbk';
}else if ($charset == 'ascii'){
$charset = 'utf-8';
}
if ($charset == 'iso-8859-1'){
//检测详细编码;value为用什么编码检测为空则用utf-8
$check = array(
'utf-8' => $charset,
'utf-16' => 'gbk',
'cp1251' => 'utf-8',
'cp1252' => 'utf-8'
);
foreach($check as $key => $val){
if(charset_check($str,$key,$val)){
if($val == ''){
$val = 'utf-8';
}
$charset = $key;
break;
}
}
}
//show_json($charset,false,$charsetGet);
return $charset;
}
function file_upload_size(){
global $config;
$size = get_post_max();
if(isset($config['settings']['updloadChunkSize'])){
$chunk = $config['settings']['updloadChunkSize'];
if($size >= $chunk){
$size = $chunk;
}
}
return $size;
}
function check_list_dir(){
$url = APP_HOST.'app/core/';
$find = "Application.class.php";
@ini_set('default_socket_timeout',1);
$context = stream_context_create(array('http'=>array('method'=>"GET",'timeout'=>1)));
$str = @file_get_contents($url,false,$context);
if(stripos($str,$find) === false){//not find;ok success
return true;
}else{
return false;
}
}
function php_env_check(){
$error = '';
if(!function_exists('iconv')) $error.= '<li>'.LNG('php_env_error').' iconv</li>';
if(!function_exists('json_encode')) $error.= '<li>'.LNG('php_env_error').' json</li>';
if(!function_exists('curl_init')) $error.= '<li>'.LNG('php_env_error').' curl</li>';
if(!function_exists('mb_convert_encoding')) $error.= '<li>'.LNG('php_env_error').' mb_string</li>';
if(!function_exists('file_get_contents')) $error.='<li>'.LNG('php_env_error').' file_get_contents</li>';
if(!version_compare(PHP_VERSION,'5.0','>=')) $error.= '<li>'.LNG('php_env_error_version').'</li>';
if(!check_list_dir()) $error.='<li>'.LNG('php_env_error_list_dir').'</li>';
$parent = get_path_father(BASIC_PATH);
$arr_check = array(
BASIC_PATH,
DATA_PATH,
DATA_PATH.'system',
DATA_PATH.'User',
DATA_PATH.'Group',
DATA_PATH.'session'
);
foreach ($arr_check as $value) {
if(!path_writeable($value)){
$error.= '<li>'.str_replace($parent,'',$value).'/ '.LNG('php_env_error_path').'</li>';
}
}
if( !function_exists('imagecreatefromjpeg')||
!function_exists('imagecreatefromgif')||
!function_exists('imagecreatefrompng')||
!function_exists('imagecolorallocate')){
$error.= '<li>'.LNG('php_env_error_gd').'</li>';
}
return $error;
}
//提前判断版本是否一致;
function check_cache(){
//检查是否更新失效
$content = file_get_contents(BASIC_PATH.'config/version.php');
$result = match_text($content,"'KOD_VERSION','(.*)'");
if($result != KOD_VERSION){
show_tips("您服务器开启了php缓存,文件更新尚未生效;
请关闭缓存或稍后1分钟刷新页面再试
<a href='http://www.tuicool.com/articles/QVjeu2i' target='_blank'>了解详情</a>");
}
}
function init_common(){
$GLOBALS['in'] = parse_incoming();
if(!file_exists(DATA_PATH)){
show_tips("data 目录不存在!\n\n(检查 DATA_PATH);");
}
// session path create and check
$errorTips = "[Error Code:1002] 目录权限错误!请设置程序目录及所有子目录为读写状态,
linux 运行如下指令:
<pre>su -c 'setenforce 0'\nchmod -R 777 ".BASIC_PATH.'</pre>';
if( !defined('SESSION_PATH_DEFAULT') ){
//检查session是否存在
if( !file_exists(KOD_SESSION) ||
!file_exists(KOD_SESSION.'index.html')){
mk_dir(KOD_SESSION);
touch(KOD_SESSION.'index.html');
if(!file_exists(KOD_SESSION.'index.html') ){
show_tips($errorTips);
}
}
//检查目录权限
if( !is_writable(KOD_SESSION) ||
!is_writable(KOD_SESSION.'index.html') ||
!is_writable(DATA_PATH.'system/apps.php') ||
!is_writable(DATA_PATH)){
show_tips($errorTips);
}
}
//version check update
$file = LIB_DIR.'update.php';
if(file_exists($file)){
//覆盖安装文件删除不了重定向问题优化
if(!is_writable($file) ){
show_tips($errorTips);
}
//update;
include($file);
updateCheck($file);
//clear
del_file($file);
if(file_exists($file)){
show_tips($errorTips);
}
user_logout();
}
}
//登陆是否需要验证码
function need_check_code(){
$setting = $GLOBALS['config']['settingSystem'];
if( !$setting['needCheckCode'] ||
!function_exists('imagecreatefromjpeg')||
!function_exists('imagecreatefromgif')||
!function_exists('imagecreatefrompng')||
!function_exists('imagecolorallocate')
){
return false;
}else{
return true;
}
}
function make_path($str){
//return md5(rand_string(30).$str.time());
$replace = array('/','\\',':','*','?','"','<','>','|');
return str_replace($replace, "_", $str);
}
function init_setting(){
$settingFile = USER_SYSTEM.'system_setting.php';
$settingSystemDefault = $GLOBALS['config']['settingSystemDefault'];
if (!file_exists($settingFile)){
$setting = $settingSystemDefault;
FileCache::save($settingFile,$setting);
}else{
$setting = FileCache::load($settingFile);
}
//合并配置
foreach ($settingSystemDefault as $key => $value) {
if(!isset($setting[$key])){
$setting[$key] = $value;
}
}
$GLOBALS['app']->setDefaultController($setting['firstIn']);
$GLOBALS['app']->setDefaultAction('index');
$GLOBALS['config']['settingSystem'] = $setting;
//group_role
$roleGroupFile = USER_SYSTEM.'system_role_group.php';
$roleGroup = $GLOBALS['config']['pathRoleGroupDefault'];
if (!file_exists($roleGroupFile)){
FileCache::save($roleGroupFile,$roleGroup);
}else{
$roleGroup = FileCache::load($roleGroupFile);
}
$GLOBALS['config']['pathRoleGroup'] = $roleGroup;
if(is_array($GLOBALS['L'])){
I18n::set($GLOBALS['L']);
}
I18n::set(array(
'kod_name' => $GLOBALS['config']['settingSystem']['systemName'],
'kod_name_desc' => $GLOBALS['config']['settingSystem']['systemDesc'],
));
if(isset($GLOBALS['config']['setting_system']['system_name'])){
I18n::set(array(
'kod_name' => $GLOBALS['config']['setting_system']['system_name'],
'kod_name_desc' => $GLOBALS['config']['setting_system']['system_desc'],
));
}
define('STATIC_PATH',$GLOBALS['config']['settings']['staticPath']);
}
function user_logout(){
@session_destroy();
@session_name('KOD_SESSION_SSO');
@session_start();
@session_destroy();
setcookie(SESSION_ID, '', time()-3600,'/');
setcookie('kod_name', '', time()-3600);
setcookie('kodToken', '', time()-3600);
setcookie('X-CSRF-TOKEN','',time()-3600);
$url = './index.php?user/login';
//之前界面维持,不是主动退出则登陆后跳转到之前页面
if(defined('ACT') && ACT != 'logout' && count($_GET)!=0 ){
$url .= '&link='.rawurlencode(this_url());
}
//移动端;接口请求时退出
if(isset($_REQUEST['HTTP_X_PLATFORM'])){
show_json('login error!',10001);
}
header('Location:'.$url);
exit;
}
function hash_encode($str) {
return str_replace(
base64_encode($str),
array('+','/','='),
array('_a','_b','_c')
);
}
function hash_decode($str) {
return base64_decode(
str_replace($str,array('_a','_b','_c'),array('+','/','='))
);
}
// 目录hash;
function hash_path($path,$addExt=false){
$password = 'kodcloud';
if(isset($GLOBALS['config']['settingSystem']['systemPassword'])){
$password = $GLOBALS['config']['settingSystem']['systemPassword'];
}
$pre = substr(md5($path.$password),0,8);
$result = $pre.md5($path);
if(file_exists($path)){
$result = $pre.md5($path.filemtime($path));
if(filesize($path) < 50*1024*1024){
$fileMd5 = @md5_file($path);
if($fileMd5){
$result = $fileMd5;
}
}
}
if($addExt){
$result = $result.'.'.get_path_ext($path);
}
return $result;
}
function navbar_menu_add($array){
$menu = &$GLOBALS['config']['settingSystem']['menu'];
$exist = false;
foreach ($menu as $value) {
if($value['name'] == $array['name']){
return false;
}
}
$menu[] = $array;
}
/**
* 检测用户是否在用户选择数据中
* @param [type] $info 组合数据 "all:0;role:1;2;user:2;group:101,102;"
* @return [type] [description]
*/
function check_user_select($info){
if(!is_string($info) || !$info) return true;
$valueArr = array(
"all" => "0",
"user" => array(),
"group" => array(),
"role" => array()
);
$userTypeArr = explode(';',$info);
for($i = 0;$i< count($userTypeArr);$i++){
$splitArr = explode(':',$userTypeArr[$i]);
if(count($splitArr) == 2){
$valueArr[$splitArr[0]] = $splitArr[1];
if($splitArr[0] != 'all'){
$valueArr[$splitArr[0]] = explode(',',$splitArr[1]);
}
}
}
if(!$valueArr['user'] && !$valueArr['group'] && !$valueArr['role']){
$valueArr['all'] = '1';
}
if($valueArr['all'] == '1'){
return true;
}
$userInfo = $_SESSION['kodUser'];
if(!$userInfo){
return false;
}
if( $valueArr['all'] == '1' ||
in_array($userInfo['userID'],$valueArr['user']) ||
in_array($userInfo['role'],$valueArr['role']) ){
return true;
}
$groupArr = array_keys($userInfo['groupInfo']);
foreach ($groupArr as $id) {
if( in_array($id,$valueArr['group']) ){
return true;
}
}
return false;
}

@ -0,0 +1,788 @@
<?php
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
/**
* Converts to and from JSON format.
*
* JSON (JavaScript Object Notation) is a lightweight data-interchange
* format. It is easy for humans to read and write. It is easy for machines
* to parse and generate. It is based on a subset of the JavaScript
* Programming Language, Standard ECMA-262 3rd Edition - December 1999.
* This feature can also be found in Python. JSON is a text format that is
* completely language independent but uses conventions that are familiar
* to programmers of the C-family of languages, including C, C++, C#, Java,
* JavaScript, Perl, TCL, and many others. These properties make JSON an
* ideal data-interchange language.
*
* This package provides a simple encoder and decoder for JSON notation. It
* is intended for use with client-side Javascript applications that make
* use of HTTPRequest to perform server communication functions - data can
* be encoded into JSON notation for use in a client-side javascript, or
* decoded from incoming Javascript requests. JSON format is native to
* Javascript, and can be directly eval()'ed with no further parsing
* overhead
*
* All strings should be in ASCII or UTF-8 format!
*
* LICENSE: Redistribution and use in source and binary forms, with or
* without modification, are permitted provided that the following
* conditions are met: Redistributions of source code must retain the
* above copyright notice, this list of conditions and the following
* disclaimer. Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following disclaimer
* in the documentation and/or other materials provided with the
* distribution.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
* NO EVENT SHALL CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
* TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
* DAMAGE.
*
* @category
* @package Services_JSON
* @author Michal Migurski <mike-json@teczno.com>
* @author Matt Knapp <mdknapp[at]gmail[dot]com>
* @author Brett Stimmerman <brettstimmerman[at]gmail[dot]com>
* @copyright 2005 Michal Migurski
* @version CVS: $Id: JSON.php,v 1.31 2006/06/28 05:54:17 migurski Exp $
* @license http://www.opensource.org/licenses/bsd-license.php
* @link http://pear.php.net/pepr/pepr-proposal-show.php?id=198
*/
/**
* Marker constant for Services_JSON::decode(), used to flag stack state
*/
define('SERVICES_JSON_SLICE', 1);
/**
* Marker constant for Services_JSON::decode(), used to flag stack state
*/
define('SERVICES_JSON_IN_STR', 2);
/**
* Marker constant for Services_JSON::decode(), used to flag stack state
*/
define('SERVICES_JSON_IN_ARR', 3);
/**
* Marker constant for Services_JSON::decode(), used to flag stack state
*/
define('SERVICES_JSON_IN_OBJ', 4);
/**
* Marker constant for Services_JSON::decode(), used to flag stack state
*/
define('SERVICES_JSON_IN_CMT', 5);
/**
* Behavior switch for Services_JSON::decode()
*/
define('SERVICES_JSON_LOOSE_TYPE', 16);
/**
* Behavior switch for Services_JSON::decode()
*/
define('SERVICES_JSON_SUPPRESS_ERRORS', 32);
/**
* Converts to and from JSON format.
*
* Brief example of use:
*
* <code>
* // create a new instance of Services_JSON
* $json = new Services_JSON();
*
* // convert a complexe value to JSON notation, and send it to the browser
* $value = array('foo', 'bar', array(1, 2, 'baz'), array(3, array(4)));
* $output = $json->encode($value);
*
* print($output);
* // prints: ["foo","bar",[1,2,"baz"],[3,[4]]]
*
* // accept incoming POST data, assumed to be in JSON notation
* $input = file_get_contents('php://input', 1000000);
* $value = $json->decode($input);
* </code>
*/
class Services_JSON
{
/**
* constructs a new JSON instance
*
* @param int $use object behavior flags; combine with boolean-OR
*
* possible values:
* - SERVICES_JSON_LOOSE_TYPE: loose typing.
* "{...}" syntax creates associative arrays
* instead of objects in decode().
* - SERVICES_JSON_SUPPRESS_ERRORS: error suppression.
* Values which can't be encoded (e.g. resources)
* appear as NULL instead of throwing errors.
* By default, a deeply-nested resource will
* bubble up with an error, so all return values
* from encode() should be checked with isError()
*/
function __construct($use = 0)
{
$this->use = $use;
}
/**
* convert a string from one UTF-16 char to one UTF-8 char
*
* Normally should be handled by mb_convert_encoding, but
* provides a slower PHP-only method for installations
* that lack the multibye string extension.
*
* @param string $utf16 UTF-16 character
* @return string UTF-8 character
* @access private
*/
function utf162utf8($utf16)
{
// oh please oh please oh please oh please oh please
if(function_exists('mb_convert_encoding')) {
return mb_convert_encoding($utf16, 'UTF-8', 'UTF-16');
}
$bytes = (ord($utf16[0]) << 8) | ord($utf16[1]);
switch(true) {
case ((0x7F & $bytes) == $bytes):
// this case should never be reached, because we are in ASCII range
// see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
return chr(0x7F & $bytes);
case (0x07FF & $bytes) == $bytes:
// return a 2-byte UTF-8 character
// see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
return chr(0xC0 | (($bytes >> 6) & 0x1F))
. chr(0x80 | ($bytes & 0x3F));
case (0xFFFF & $bytes) == $bytes:
// return a 3-byte UTF-8 character
// see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
return chr(0xE0 | (($bytes >> 12) & 0x0F))
. chr(0x80 | (($bytes >> 6) & 0x3F))
. chr(0x80 | ($bytes & 0x3F));
}
// ignoring UTF-32 for now, sorry
return '';
}
/**
* convert a string from one UTF-8 char to one UTF-16 char
*
* Normally should be handled by mb_convert_encoding, but
* provides a slower PHP-only method for installations
* that lack the multibye string extension.
*
* @param string $utf8 UTF-8 character
* @return string UTF-16 character
* @access private
*/
function utf82utf16($utf8)
{
// oh please oh please oh please oh please oh please
if(function_exists('mb_convert_encoding')) {
return mb_convert_encoding($utf8, 'UTF-16', 'UTF-8');
}
switch(strlen($utf8)) {
case 1:
// this case should never be reached, because we are in ASCII range
// see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
return $utf8;
case 2:
// return a UTF-16 character from a 2-byte UTF-8 char
// see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
return chr(0x07 & (ord($utf8[0]) >> 2))
. chr((0xC0 & (ord($utf8[0]) << 6))
| (0x3F & ord($utf8[1])));
case 3:
// return a UTF-16 character from a 3-byte UTF-8 char
// see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
return chr((0xF0 & (ord($utf8[0]) << 4))
| (0x0F & (ord($utf8[1]) >> 2)))
. chr((0xC0 & (ord($utf8[1]) << 6))
| (0x7F & ord($utf8[2])));
}
// ignoring UTF-32 for now, sorry
return '';
}
/**
* encodes an arbitrary variable into JSON format
*
* @param mixed $var any number, boolean, string, array, or object to be encoded.
* see argument 1 to Services_JSON() above for array-parsing behavior.
* if var is a strng, note that encode() always expects it
* to be in ASCII or UTF-8 format!
*
* @return mixed JSON string representation of input var or an error if a problem occurs
* @access public
*/
function encode($var)
{
switch (gettype($var)) {
case 'boolean':
return $var ? 'true' : 'false';
case 'NULL':
return 'null';
case 'integer':
return (int) $var;
case 'double':
case 'float':
return (float) $var;
case 'string':
// STRINGS ARE EXPECTED TO BE IN ASCII OR UTF-8 FORMAT
$ascii = '';
$strlen_var = strlen($var);
/*
* Iterate over every character in the string,
* escaping with a slash or encoding to UTF-8 where necessary
*/
for ($c = 0; $c < $strlen_var; ++$c) {
$ord_var_c = ord($var{$c});
switch (true) {
case $ord_var_c == 0x08:
$ascii .= '\b';
break;
case $ord_var_c == 0x09:
$ascii .= '\t';
break;
case $ord_var_c == 0x0A:
$ascii .= '\n';
break;
case $ord_var_c == 0x0C:
$ascii .= '\f';
break;
case $ord_var_c == 0x0D:
$ascii .= '\r';
break;
case $ord_var_c == 0x22:
case $ord_var_c == 0x2F:
case $ord_var_c == 0x5C:
// double quote, slash, slosh
$ascii .= '\\'.$var{$c};
break;
case (($ord_var_c >= 0x20) && ($ord_var_c <= 0x7F)):
// characters U-00000000 - U-0000007F (same as ASCII)
$ascii .= $var{$c};
break;
case (($ord_var_c & 0xE0) == 0xC0):
// characters U-00000080 - U-000007FF, mask 110XXXXX
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
$char = pack('C*', $ord_var_c, ord($var{$c + 1}));
$c += 1;
$utf16 = $this->utf82utf16($char);
$ascii .= sprintf('\u%04s', bin2hex($utf16));
break;
case (($ord_var_c & 0xF0) == 0xE0):
// characters U-00000800 - U-0000FFFF, mask 1110XXXX
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
$char = pack('C*', $ord_var_c,
ord($var{$c + 1}),
ord($var{$c + 2}));
$c += 2;
$utf16 = $this->utf82utf16($char);
$ascii .= sprintf('\u%04s', bin2hex($utf16));
break;
case (($ord_var_c & 0xF8) == 0xF0):
// characters U-00010000 - U-001FFFFF, mask 11110XXX
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
$char = pack('C*', $ord_var_c,
ord($var{$c + 1}),
ord($var{$c + 2}),
ord($var{$c + 3}));
$c += 3;
$utf16 = $this->utf82utf16($char);
$ascii .= sprintf('\u%04s', bin2hex($utf16));
break;
case (($ord_var_c & 0xFC) == 0xF8):
// characters U-00200000 - U-03FFFFFF, mask 111110XX
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
$char = pack('C*', $ord_var_c,
ord($var{$c + 1}),
ord($var{$c + 2}),
ord($var{$c + 3}),
ord($var{$c + 4}));
$c += 4;
$utf16 = $this->utf82utf16($char);
$ascii .= sprintf('\u%04s', bin2hex($utf16));
break;
case (($ord_var_c & 0xFE) == 0xFC):
// characters U-04000000 - U-7FFFFFFF, mask 1111110X
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
$char = pack('C*', $ord_var_c,
ord($var{$c + 1}),
ord($var{$c + 2}),
ord($var{$c + 3}),
ord($var{$c + 4}),
ord($var{$c + 5}));
$c += 5;
$utf16 = $this->utf82utf16($char);
$ascii .= sprintf('\u%04s', bin2hex($utf16));
break;
}
}
return '"'.$ascii.'"';
case 'array':
/*
* As per JSON spec if any array key is not an integer
* we must treat the the whole array as an object. We
* also try to catch a sparsely populated associative
* array with numeric keys here because some JS engines
* will create an array with empty indexes up to
* max_index which can cause memory issues and because
* the keys, which may be relevant, will be remapped
* otherwise.
*
* As per the ECMA and JSON specification an object may
* have any string as a property. Unfortunately due to
* a hole in the ECMA specification if the key is a
* ECMA reserved word or starts with a digit the
* parameter is only accessible using ECMAScript's
* bracket notation.
*/
// treat as a JSON object
if (is_array($var) && count($var) && (array_keys($var) !== range(0, sizeof($var) - 1))) {
$properties = array_map(array($this, 'name_value'),
array_keys($var),
array_values($var));
foreach($properties as $property) {
if(Services_JSON::isError($property)) {
return $property;
}
}
return '{' . join(',', $properties) . '}';
}
// treat it like a regular array
$elements = array_map(array($this, 'encode'), $var);
foreach($elements as $element) {
if(Services_JSON::isError($element)) {
return $element;
}
}
return '[' . join(',', $elements) . ']';
case 'object':
$vars = get_object_vars($var);
$properties = array_map(array($this, 'name_value'),
array_keys($vars),
array_values($vars));
foreach($properties as $property) {
if(Services_JSON::isError($property)) {
return $property;
}
}
return '{' . join(',', $properties) . '}';
default:
return ($this->use & SERVICES_JSON_SUPPRESS_ERRORS)
? 'null'
: new Services_JSON_Error(gettype($var)." can not be encoded as JSON string");
}
}
/**
* array-walking function for use in generating JSON-formatted name-value pairs
*
* @param string $name name of key to use
* @param mixed $value reference to an array element to be encoded
*
* @return string JSON-formatted name-value pair, like '"name":value'
* @access private
*/
function name_value($name, $value)
{
$encoded_value = $this->encode($value);
if(Services_JSON::isError($encoded_value)) {
return $encoded_value;
}
return $this->encode(strval($name)) . ':' . $encoded_value;
}
/**
* reduce a string by removing leading and trailing comments and whitespace
*
* @param $str string string value to strip of comments and whitespace
*
* @return string string value stripped of comments and whitespace
* @access private
*/
function reduce_string($str){
$str = preg_replace(array(
// eliminate single line comments in '// ...' form
'#^\s*//(.+)$#m',
// eliminate multi-line comments in '/* ... */' form, at start of string
'#^\s*/\*(.+)\*/#Us',
// eliminate multi-line comments in '/* ... */' form, at end of string
'#/\*(.+)\*/\s*$#Us'
), '', $str);
// eliminate extraneous space
return trim($str);
}
/**
* decodes a JSON string into appropriate variable
*
* @param string $str JSON-formatted string
*
* @return mixed number, boolean, string, array, or object
* corresponding to given JSON input string.
* See argument 1 to Services_JSON() above for object-output behavior.
* Note that decode() always returns strings
* in ASCII or UTF-8 format!
* @access public
*/
function decode($str)
{
$str = $this->reduce_string($str);
switch (strtolower($str)) {
case 'true':
return true;
case 'false':
return false;
case 'null':
return null;
default:
$m = array();
if (is_numeric($str)) {
// Lookie-loo, it's a number
// This would work on its own, but I'm trying to be
// good about returning integers where appropriate:
// return (float)$str;
// Return float or int, as appropriate
return ((float)$str == (integer)$str)
? (integer)$str
: (float)$str;
} elseif (preg_match('/^("|\').*(\1)$/s', $str, $m) && $m[1] == $m[2]) {
// STRINGS RETURNED IN UTF-8 FORMAT
$delim = substr($str, 0, 1);
$chrs = substr($str, 1, -1);
$utf8 = '';
$strlen_chrs = strlen($chrs);
for ($c = 0; $c < $strlen_chrs; ++$c) {
$substr_chrs_c_2 = substr($chrs, $c, 2);
$ord_chrs_c = ord($chrs{$c});
switch (true) {
case $substr_chrs_c_2 == '\b':
$utf8 .= chr(0x08);
++$c;
break;
case $substr_chrs_c_2 == '\t':
$utf8 .= chr(0x09);
++$c;
break;
case $substr_chrs_c_2 == '\n':
$utf8 .= chr(0x0A);
++$c;
break;
case $substr_chrs_c_2 == '\f':
$utf8 .= chr(0x0C);
++$c;
break;
case $substr_chrs_c_2 == '\r':
$utf8 .= chr(0x0D);
++$c;
break;
case $substr_chrs_c_2 == '\\"':
case $substr_chrs_c_2 == '\\\'':
case $substr_chrs_c_2 == '\\\\':
case $substr_chrs_c_2 == '\\/':
if (($delim == '"' && $substr_chrs_c_2 != '\\\'') ||
($delim == "'" && $substr_chrs_c_2 != '\\"')) {
$utf8 .= $chrs{++$c};
}
break;
case preg_match('/\\\u[0-9A-F]{4}/i', substr($chrs, $c, 6)):
// single, escaped unicode character
$utf16 = chr(hexdec(substr($chrs, ($c + 2), 2)))
. chr(hexdec(substr($chrs, ($c + 4), 2)));
$utf8 .= $this->utf162utf8($utf16);
$c += 5;
break;
case ($ord_chrs_c >= 0x20) && ($ord_chrs_c <= 0x7F):
$utf8 .= $chrs{$c};
break;
case ($ord_chrs_c & 0xE0) == 0xC0:
// characters U-00000080 - U-000007FF, mask 110XXXXX
//see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
$utf8 .= substr($chrs, $c, 2);
++$c;
break;
case ($ord_chrs_c & 0xF0) == 0xE0:
// characters U-00000800 - U-0000FFFF, mask 1110XXXX
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
$utf8 .= substr($chrs, $c, 3);
$c += 2;
break;
case ($ord_chrs_c & 0xF8) == 0xF0:
// characters U-00010000 - U-001FFFFF, mask 11110XXX
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
$utf8 .= substr($chrs, $c, 4);
$c += 3;
break;
case ($ord_chrs_c & 0xFC) == 0xF8:
// characters U-00200000 - U-03FFFFFF, mask 111110XX
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
$utf8 .= substr($chrs, $c, 5);
$c += 4;
break;
case ($ord_chrs_c & 0xFE) == 0xFC:
// characters U-04000000 - U-7FFFFFFF, mask 1111110X
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
$utf8 .= substr($chrs, $c, 6);
$c += 5;
break;
}
}
return $utf8;
} elseif (preg_match('/^\[.*\]$/s', $str) || preg_match('/^\{.*\}$/s', $str)) {
// array, or object notation
if ($str[0]== '[') {
$stk = array(SERVICES_JSON_IN_ARR);
$arr = array();
} else {
if ($this->use & SERVICES_JSON_LOOSE_TYPE) {
$stk = array(SERVICES_JSON_IN_OBJ);
$obj = array();
} else {
$stk = array(SERVICES_JSON_IN_OBJ);
$obj = new stdClass();
}
}
array_push($stk, array('what' => SERVICES_JSON_SLICE,
'where' => 0,
'delim' => false));
$chrs = substr($str, 1, -1);
$chrs = $this->reduce_string($chrs);
if ($chrs == '') {
if (reset($stk) == SERVICES_JSON_IN_ARR) {
return $arr;
} else {
return $obj;
}
}
//print("\nparsing {$chrs}\n");
$strlen_chrs = strlen($chrs);
for ($c = 0; $c <= $strlen_chrs; ++$c) {
$top = end($stk);
$substr_chrs_c_2 = substr($chrs, $c, 2);
if (($c == $strlen_chrs) || (($chrs{$c} == ',') && ($top['what'] == SERVICES_JSON_SLICE))) {
// found a comma that is not inside a string, array, etc.,
// OR we've reached the end of the character list
$slice = substr($chrs, $top['where'], ($c - $top['where']));
array_push($stk, array('what' => SERVICES_JSON_SLICE, 'where' => ($c + 1), 'delim' => false));
//print("Found split at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n");
if (reset($stk) == SERVICES_JSON_IN_ARR) {
// we are in an array, so just push an element onto the stack
array_push($arr, $this->decode($slice));
} elseif (reset($stk) == SERVICES_JSON_IN_OBJ) {
// we are in an object, so figure
// out the property name and set an
// element in an associative array,
// for now
$parts = array();
if (preg_match('/^\s*(["\'].*[^\\\]["\'])\s*:\s*(\S.*),?$/Uis', $slice, $parts)) {
// "name":value pair
$key = $this->decode($parts[1]);
$val = $this->decode($parts[2]);
if ($this->use & SERVICES_JSON_LOOSE_TYPE) {
$obj[$key] = $val;
} else {
$obj->$key = $val;
}
} elseif (preg_match('/^\s*(\w+)\s*:\s*(\S.*),?$/Uis', $slice, $parts)) {
// name:value pair, where name is unquoted
$key = $parts[1];
$val = $this->decode($parts[2]);
if ($this->use & SERVICES_JSON_LOOSE_TYPE) {
$obj[$key] = $val;
} else {
$obj->$key = $val;
}
}
}
} elseif ((($chrs{$c} == '"') || ($chrs{$c} == "'")) && ($top['what'] != SERVICES_JSON_IN_STR)) {
// found a quote, and we are not inside a string
array_push($stk, array('what' => SERVICES_JSON_IN_STR, 'where' => $c, 'delim' => $chrs{$c}));
//print("Found start of string at {$c}\n");
} elseif (($chrs{$c} == $top['delim']) &&
($top['what'] == SERVICES_JSON_IN_STR) &&
((strlen(substr($chrs, 0, $c)) - strlen(rtrim(substr($chrs, 0, $c), '\\'))) % 2 != 1)) {
// found a quote, we're in a string, and it's not escaped
// we know that it's not escaped becase there is _not_ an
// odd number of backslashes at the end of the string so far
array_pop($stk);
//print("Found end of string at {$c}: ".substr($chrs, $top['where'], (1 + 1 + $c - $top['where']))."\n");
} elseif (($chrs{$c} == '[') &&
in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) {
// found a left-bracket, and we are in an array, object, or slice
array_push($stk, array('what' => SERVICES_JSON_IN_ARR, 'where' => $c, 'delim' => false));
//print("Found start of array at {$c}\n");
} elseif (($chrs{$c} == ']') && ($top['what'] == SERVICES_JSON_IN_ARR)) {
// found a right-bracket, and we're in an array
array_pop($stk);
//print("Found end of array at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n");
} elseif (($chrs{$c} == '{') &&
in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) {
// found a left-brace, and we are in an array, object, or slice
array_push($stk, array('what' => SERVICES_JSON_IN_OBJ, 'where' => $c, 'delim' => false));
//print("Found start of object at {$c}\n");
} elseif (($chrs{$c} == '}') && ($top['what'] == SERVICES_JSON_IN_OBJ)) {
// found a right-brace, and we're in an object
array_pop($stk);
//print("Found end of object at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n");
} elseif (($substr_chrs_c_2 == '/*') &&
in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) {
// found a comment start, and we are in an array, object, or slice
array_push($stk, array('what' => SERVICES_JSON_IN_CMT, 'where' => $c, 'delim' => false));
$c++;
//print("Found start of comment at {$c}\n");
} elseif (($substr_chrs_c_2 == '*/') && ($top['what'] == SERVICES_JSON_IN_CMT)) {
// found a comment end, and we're in one now
array_pop($stk);
$c++;
for ($i = $top['where']; $i <= $c; ++$i)
$chrs = substr_replace($chrs, ' ', $i, 1);
//print("Found end of comment at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n");
}
}
if (reset($stk) == SERVICES_JSON_IN_ARR) {
return $arr;
} elseif (reset($stk) == SERVICES_JSON_IN_OBJ) {
return $obj;
}
}
}
}
/**
* @todo Ultimately, this should just call PEAR::isError()
*/
function isError($data, $code = null){
if (class_exists('pear')) {
return PEAR::isError($data, $code);
} elseif (is_object($data) && (get_class($data) == 'services_json_error' ||
is_subclass_of($data, 'services_json_error'))) {
return true;
}
return false;
}
}
if (class_exists('PEAR_Error')) {
class Services_JSON_Error extends PEAR_Error{
function __construct($message = 'unknown error', $code = null,
$mode = null, $options = null, $userinfo = null){
parent::PEAR_Error($message, $code, $mode, $options, $userinfo);
}
}
} else {
class Services_JSON_Error{
function __construct($message = 'unknown error', $code = null,
$mode = null, $options = null, $userinfo = null){
}
}
}

File diff suppressed because it is too large Load Diff

@ -0,0 +1,170 @@
<?php
/*
* @link http://kodcloud.com/
* @author warlee | e-mail:kodcloud@qq.com
* @copyright warlee 2014.(Shanghai)Co.,Ltd
* @license http://kodcloud.com/tools/license/license.txt
*/
class Downloader {
static function start($url,$saveFile,$timeout = 10) {
$dataFile = $saveFile . '.download.cfg';
$saveTemp = $saveFile . '.downloading';
//header:{'url','length','name','supportRange'}
if(is_array($url)){
$fileHeader = $url;
}else{
$fileHeader = url_header($url);
}
$url = $fileHeader['url'];
if(!$url){
return array('code'=>false,'data'=>'url error!');
}
//默认下载方式if not support range
if(!$fileHeader['supportRange'] ||
$fileHeader['length'] == 0 ){
@unlink($saveTemp);@unlink($saveFile);
$result = self::fileDownloadFopen($url,$saveFile,$fileHeader['length']);
if($result['code']) {
return $result;
}else{
@unlink($saveTemp);@unlink($saveFile);
$result = self::fileDownloadCurl($url,$saveFile,false,0,$fileHeader['length']);
@unlink($saveTemp);@unlink($saveFile);
return $result;
}
}
$existsLength = is_file($saveTemp) ? filesize($saveTemp) : 0;
$contentLength = intval($fileHeader['length']);
if( file_exists($saveTemp) &&
time() - filemtime($saveTemp) < 3) {//has Changed in 3s,is downloading
return array('code'=>false,'data'=>'downloading');
}
$existsData = array();
if(is_file($dataFile)){
$tempData = file_get_contents($dataFile);
$existsData = json_decode($tempData, 1);
}
// exist and is the same file;
if( file_exists($saveFile) && $contentLength == filesize($saveFile)){
@unlink($saveTemp);
@unlink($dataFile);
return array('code'=>true,'data'=>'exist');
}
// check file is expire
if ($existsData['length'] != $contentLength) {
$existsData = array('length' => $contentLength);
}
if($existsLength > $contentLength){
@unlink($saveTemp);
}
// write exists data
file_put_contents($dataFile, json_encode($existsData));
$result = self::fileDownloadCurl($url,$saveFile,true,$existsLength,$contentLength);
if($result['code']){
@unlink($dataFile);
}
return $result;
}
// fopen then download
static function fileDownloadFopen($url, $fileName,$headerSize=0){
@ini_set('user_agent','Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36');
$fileTemp = $fileName.'.downloading';
@set_time_limit(0);
@unlink($fileTemp);
if ($fp = @fopen ($url, "rb")){
if(!$downloadFp = @fopen($fileTemp, "wb")){
return array('code'=>false,'data'=>'open_downloading_error');
}
while(!feof($fp)){
if(!file_exists($fileTemp)){//删除目标文件;则终止下载
fclose($downloadFp);
return array('code'=>false,'data'=>'stoped');
}
//对于部分fp不结束的通过文件大小判断
clearstatcache();
if( $headerSize>0 &&
$headerSize==get_filesize(iconv_system($fileTemp))
){
break;
}
fwrite($downloadFp, fread($fp, 1024 * 8 ), 1024 * 8);
}
//下载完成,重命名临时文件到目标文件
fclose($downloadFp);
fclose($fp);
self::checkGzip($fileTemp);
if(!@rename($fileTemp,$fileName)){
usleep(round(rand(0,1000)*50));//0.01~10ms
@unlink($fileName);
$res = @rename($fileTemp,$fileName);
if(!$res){
return array('code'=>false,'data'=>'rename error![open]');
}
}
return array('code'=>true,'data'=>'success');
}else{
return array('code'=>false,'data'=>'url_open_error');
}
}
// curl 方式下载
// 断点续传 http://www.linuxidc.com/Linux/2014-10/107508.htm
static function fileDownloadCurl($url, $fileName,$supportRange=false,$existsLength=0,$length=0){
$fileTemp = $fileName.'.downloading';
@set_time_limit(0);
if ($fp = @fopen ($fileTemp, "a")){
$ch = curl_init($url);
//断点续传
if($supportRange){
curl_setopt($ch, CURLOPT_RANGE, $existsLength."-");
}
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_REFERER,get_url_link($url));
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_USERAGENT,'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36');
$res = curl_exec($ch);
curl_close($ch);
fclose($fp);
$filesize = get_filesize(iconv_system($fileTemp));
if($filesize < $length && $length!=0){
return array('code'=>false,'data'=>'downloading');
}
if($res && filesize($fileTemp) != 0){
self::checkGzip($fileTemp);
if(!@rename($fileTemp,$fileName)){
@unlink($fileName);
$res = @rename($fileTemp,$fileName);
if(!$res){
return array('code'=>false,'data'=>'rename error![curl]');
}
}
return array('code'=>true,'data'=>'success');
}
return array('code'=>false,'data'=>'curl exec error!');
}else{
return array('code'=>false,'data'=>'file create error');
}
}
static function checkGzip($file){
$char = "\x1f\x8b";
$str = file_sub_str($file,0,2);
if($char != $str) return;
ob_start();
readgzfile($file);
$out = ob_get_clean();
file_put_contents($file,$out);
}
}

@ -0,0 +1,220 @@
<?php
/*
* @link http://kodcloud.com/
* @author warlee | e-mail:kodcloud@qq.com
* @copyright warlee 2014.(Shanghai)Co.,Ltd
* @license http://kodcloud.com/tools/license/license.txt
*/
/**
* 数据的缓存存储类key=>value 模式value可以是任意类型数据。
* 完整流程测试读取最低5000次/s 含有写的1000次/s
* get($find=null)
* 1.get(); //返回所有
* 2.get(key); //直接通过key获取
* 3.get(data_key,value); //搜索key为value的数据 直接返回数据不含key
* 4.get(array('key','value')); //搜索数据符合key为指定value的所有数据;key value形式
*
* set($find=null,$change=null)
* 1.set(string,val) //添加或更新;
* 2.set(array('key','value_find'),array('key','change_to')) //查找方式更新 多条数据
*
* remove($find,$value)
* 1.remove(); //清空
* 2.remove(string); //删除 eg:set('37'),删除key为37的数据 存在且删除成功则返回true
* 3.remove(array('key','value_find')); //查找方式删除;多条数据
* reset($arr);//初始化数据
*/
define('CONFIG_EXIT', '<?php exit;?>');
class FileCache{
private $data;
private $file;
private $fileHash;//最后一次修改;保存时判断,如果有新修改则先读取再保存
function __construct($file) {
$this->file = $file;
$this->data= self::load($file);
$this->fileChangeCheck();
}
public function get($find=null,$value=null){
if (is_null($find)){
return $this->data;
}else if(is_array($find)){//查找内容数据方式获取;返回多条
$result = array();
foreach ($this->data as $key => $val) {
if ($val[$find[0]] == $find[1]) {
$result[$key] = $this->data[$key];
}
}
if(count($result)!=0){
return $result;
}
}else{//单条数据获取
$find .= '';//字符串
if(!is_null($value)){//通过某个key寻找单条数据
foreach ($this->data as $key => $val) {
if ($val[$find] == $value) {
return $val;
}
}
}
if(isset($this->data[$find])){
return $this->data[$find];
}
}
return false;
}
//添加或更新
public function set($find,$value){
$this->fileChangeCheck();
//最后有修改则先更新本地。
if(is_string($find)){//单条数据更新
$this->data[$find] = $value;
}else if(is_array($find)){//查找方式更新;更新多条
foreach ($this->data as $key => $val) {
if ($val[$find[0]] == $find[1]) {
$this->data[$key][$value[0]] = $value[1];
}
}
}else{
return false;
}
self::save($this->file,$this->data);
return true;
}
//删除,查找删除
public function remove($find){
$this->fileChangeCheck();
if(is_string($find)){//单条数据删除
unset($this->data[$find]);
}else if(is_array($find)){//查找删除
foreach ($this->data as $key => $val) {
if ($val[$find[0]] == $find[1]){
unset($this->data[$key]);
}
}
}else{
return false;
}
self::save($this->file,$this->data);
return true;
}
private function fileChangeCheck(){
if(is_null($this->fileHash)){
$this->fileHash = @md5_file($this->file);
return;
}
//是否发生改变
$lastHash = @md5_file($this->file);
if($lastHash != $this->fileHash){
$this->fileHash = $lastHash;
$this->data= self::load($this->file);
}
}
public function reset($data,$save = true){
$this->data = $data;
if($save){
self::save($this->file,$this->data);
}
}
//=====================================================
public static function arrSort(&$arr,$key, $type = 'asc'){
$keysValue = $newArray = array();
foreach ($arr as $k => $v) {
$keysValue[$k] = $v[$key];
}
if ($type == 'asc') {
asort($keysValue);
} else {
arsort($keysValue);
}
reset($keysValue);
foreach ($keysValue as $k => $v) {
$newArray[$k] = $arr[$k];
}
return $newArray;
}
public function getMaxId(){
$minId = 100;
if(count($this->data)==0){
return $minId;//一切从100开始
}
$idArr = array_keys($this->data);
rsort($idArr,SORT_NUMERIC);//id从高到底
$the_id = intval($idArr[0])+1;
if($the_id<=$minId){
return $minId;
}
return $the_id;
}
/**
* 加载数据;并解析成程序数据
*/
public static function load($file){//10000次需要4s 数据量差异不大。
if (!$file) return false;
$file = iconv_system($file);
if ( !file_exists($file) ){
@file_put_contents($file,CONFIG_EXIT.'[]');
chmod_path($file,0777);
return array();
}
$str = file_read_safe($file,10.5);
if( $str === false || $str === 0 || $str === -1){
show_tips('[Error Code:1010] FileCache data read error!<br/>'.get_path_this($file));
}
if (strlen($str) == 0 ||
strlen($str) == strlen(CONFIG_EXIT) ){
@file_put_contents($file,CONFIG_EXIT.'[]');
chmod_path($file,0777);
return array();
}
if($str === false || strlen($str) < strlen(CONFIG_EXIT) ){
show_tips('[Error Code:1011] FileCache data error!<br/>'.get_path_this($file));
}
$data= json_decode(substr($str, strlen(CONFIG_EXIT)),true);
if (is_null($data)) $data = array();
return $data;
}
/**
* 保存数据;
*/
public static function save($file,$data){//10000次需要6s
if (!$file) return false;
$file = iconv_system($file);
if ( !file_exists($file) ){
@file_put_contents($file,CONFIG_EXIT.'[]');
chmod_path($file,0777);
}
if (!path_writeable($file)) {
show_tips(BASIC_PATH."<br/>".LNG('path_can_not_write_data'));
}
if(defined('JSON_PRETTY_PRINT')){
$jsonStr = json_encode($data,JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT);
}else{
$jsonStr = json_encode($data);
}
if(is_null($jsonStr) || strlen($jsonStr) == 0){//含有二进制或非utf8字符串对应检测
show_tips('[Error Code:1013] json_encode error!<br/>'.get_path_this($file));
}
$result = file_wirte_safe($file,CONFIG_EXIT.$jsonStr,10.5);
if($result === false){
show_tips('[Error Code:1012] FileCache save error!<br/>'.get_path_this($file));
}
return $result;
}
}

@ -0,0 +1,118 @@
<?php
/*
* @link http://kodcloud.com/
* @author warlee | e-mail:kodcloud@qq.com
* @copyright warlee 2014.(Shanghai)Co.,Ltd
* @license http://kodcloud.com/tools/license/license.txt
*/
/**
* hook::add('function','function')
* hook::add('class:function','class.function')
*
* hook::run('class.function',param)
* hook::run('function',param)
*
*/
class Hook{
static private $events = array();
static public function get($event=false){
if(!$event){
return self::$events;
}else{
return self::$events[$event];
}
}
static public function apply($action,$args=array()) {
if(!is_string($action)){
return;
}
if(strstr($action,'.')){
$arr = explode('.',$action);
if(count($arr) !== 2){
return;
}
$className = $arr[0];
$functionName = $arr[1];
if(class_exists($className)){
$class = new $className();
if( method_exists($class,$functionName) ){
//return $class -> $functionName($args);
return @call_user_func_array(array($class,$functionName), $args);
}
}
}else{
if(function_exists($action)){
return @call_user_func_array($action, $args);
}
}
}
static public function bind($event,$action,$once=false) {
if(!isset(self::$events[$event])){
self::$events[$event] = array();
}
if(!is_array($action)){
$action = array($action);
}
for ($i=0; $i < count($action); $i++) {
self::$events[$event][] = array(
'action' => $action[$i],
'once' => $once,
'times' => 0
);
}
}
static public function once($event,$action) {
self::bind($event,$action,true);
}
static public function unbind($event) {
self::$events[$event] = false;
}
//数据处理;只支持传入一个参数
static public function filter($event,&$param) {
$result = self::trigger($event,$param);
if($result){
$param = $result;
}
}
static public function trigger($event) {
$events = self::$events;
if( !isset($events[$event]) ){
return;
}
$actions = $events[$event];
$result = false;
if(is_array($actions) && count($actions) >= 1) {
$args = func_get_args();
array_shift($args);
for ($i=0; $i < count($actions); $i++) {
$action = $actions[$i];
if( $action['once'] && $action['times'] > 1){
continue;
}
if(defined("GLOBAL_DEBUG_HOOK") && GLOBAL_DEBUG_HOOK){
write_log($event.'==>start: '.$action['action'],'hook-trigger');
}
self::$events[$event][$i]['times'] = $action['times'] + 1;
$res = self::apply($action['action'],$args);
if(defined("GLOBAL_DEBUG_HOOK") && GLOBAL_DEBUG_HOOK){
write_log($event.'==>end['.$action['times'].']: '.$action['action'],'hook-trigger');
}
//避免循环调用
if( $action['times'] >= 5000){
show_json("ERROR,Too many trigger on:".$event.'==>'.$action['action'],fasle);
}
if(!is_null($res)){
$result = $res;
}
}
}
return $result;
}
}

@ -0,0 +1,121 @@
<?php
function LNG($key){
if (func_num_args() == 1) {
return I18n::get($key);
} else {
$args = func_get_args();
array_shift($args);
return vsprintf(I18n::get($key), $args);
}
}
class I18n{
private static $loaded = false;
private static $lang = NULL;
public static $langType = NULL;
public static function defaultLang(){
if(isset($GLOBALS['config']['settings']['language'])){
return $GLOBALS['config']['settings']['language'];
}
$lang = "en";
$arr = $GLOBALS['config']['settingAll']['language'];
$langs = array();
if(!$arr) return 'zh-CN';
foreach ($arr as $key => $value) {
$langs[$key] = $key;
}
$langs['zh'] = 'zh-CN'; //增加大小写对应关系
$langs['zh-tw'] = 'zh-TW';
$acceptLanguage = array();
if(!isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])){
$httpLang = 'en';
}else{
$httpLang = str_replace("_","-",strtolower($_SERVER['HTTP_ACCEPT_LANGUAGE']));
}
preg_match_all('~([-a-z]+)(;q=([0-9.]+))?~',$httpLang,$matches,PREG_SET_ORDER);
foreach ($matches as $match) {
$acceptLanguage[$match[1]] = (isset($match[3]) ? $match[3] : 1);
}
arsort($acceptLanguage);
foreach ($acceptLanguage as $key => $q) {
if (isset($langs[$key])) {
$lang = $langs[$key];break;
}
$key = preg_replace('~-.*~','', $key);
if (!isset($acceptLanguage[$key]) && isset($langs[$key])) {
$lang = $langs[$key];break;
}
}
return $lang;
}
public static function getAll(){
self::init();
return self::$lang;
}
public static function getType(){
self::init();
return self::$langType;
}
public static function init(){
if(self::$loaded !== false){
return;
}
$cookieLang = 'kodUserLanguage';
if (isset($_COOKIE[$cookieLang])) {
$lang = $_COOKIE[$cookieLang];
}else{
$lang = self::defaultLang();
//setcookie_header($cookieLang,$lang, time()+3600*24*100);
}
$lang = str_replace(array('/','\\','..','.'),'',$lang);
//兼容旧版本
if($lang == 'zh_CN') $lang = 'zh-CN';
if($lang == 'zh_TW') $lang = 'zh-TW';
if(isset($GLOBALS['config']['settings']['language'])){
$lang = $GLOBALS['config']['settings']['language'];
}
$langFile = LANGUAGE_PATH.$lang.'/main.php';
if(!file_exists($langFile)){//allow remove some I18n folder
$lang = 'en';
$langFile = LANGUAGE_PATH.$lang.'/main.php';
}
self::$langType = $lang;
self::$lang = include($langFile);
self::$loaded = true;
$GLOBALS['L'] = self::$lang;
}
public static function get($key){
self::init();
if(!isset(self::$lang[$key])){
return $key;
}
if (func_num_args() == 1) {
return self::$lang[$key];
} else {
$args = func_get_args();
array_shift($args);
return vsprintf(self::$lang[$key], $args);
}
}
/**
* 添加多语言;
* @param [type] $args [description]
*/
public static function set($array){
self::init();
if(!is_array($array)) return;
foreach ($array as $key => $value) {
self::$lang[$key] = $value;
}
}
}

@ -0,0 +1,290 @@
<?php
/**
* 功能:图片处理
* 基本参数:$srcFile,$echoType
*
* eg
* $cm=new ImageThumb('1.jpg','file');
*
* $cm->Distortion('dis_bei.jpg',150,200); //生成固定宽高缩略图;
* $cm->Prorate('pro_bei.jpg',150,200); //等比缩略图;附带切割
* $cm->Cut('cut_bei.jpg',150,200); //等比缩略图;多出部分切割
* $cm->BackFill('fill_bei.jpg',150,200); //等比缩略图;多出部分填充
*
* $cm->imgRotate('out.jpg',90); //旋转图片
*/
class ImageThumb {
var $srcFile = ''; //原图
var $imgData = ''; //图片信息
var $echoType; //输出图片类型link--不保存为文件file--保存为文件
var $im = ''; //临时变量
var $srcW = ''; //原图宽
var $srcH = ''; //原图高
function __construct($srcFile, $echoType){
$this->srcFile = $srcFile;
$this->echoType = $echoType;
$this->im = self::image($srcFile);
if(!$this->im){
return false;
}
$info = '';
$this->imgData = GetImageSize($srcFile, $info);
$this->srcW = imageSX($this->im);
$this->srcH = imageSY($this->im);
return $this;
}
public static function image($file){
$info = '';
$data = GetImageSize($file, $info);
$img = false;
//var_dump($data,$file,memory_get_usage()-$GLOBALS['config']['appMemoryStart']);
switch ($data[2]) {
case IMAGETYPE_GIF:
if (!function_exists('imagecreatefromgif')) {
break;
}
$img = imagecreatefromgif($file);
break;
case IMAGETYPE_JPEG:
if (!function_exists('imagecreatefromjpeg')) {
break;
}
$img = imagecreatefromjpeg($file);
break;
case IMAGETYPE_PNG:
if (!function_exists('imagecreatefrompng')) {
break;
}
$img = @imagecreatefrompng($file);
imagesavealpha($img,true);
break;
case IMAGETYPE_XBM:
$img = imagecreatefromxbm($file);
break;
case IMAGETYPE_WBMP:
$img = imagecreatefromwbmp($file);
break;
case IMAGETYPE_BMP:
$img = imagecreatefrombmp($file);
break;
default:break;
}
return $img;
}
public static function imageSize($file){
$size = GetImageSize($file);
if(!$size){
return false;
}
return array('width'=>$size[0],"height"=>$size[1]);
}
// 生成扭曲型缩图
function distortion($toFile, $toW, $toH){
$cImg = $this->creatImage($this->im, $toW, $toH, 0, 0, 0, 0, $this->srcW, $this->srcH);
return $this->echoImage($cImg, $toFile);
}
// 生成按比例缩放的缩图
function prorate($toFile, $toW, $toH){
$toWH = $toW / $toH;
$srcWH = $this->srcW / $this->srcH;
if ($toWH<=$srcWH) {
$ftoW = $toW;
$ftoH = $ftoW * ($this->srcH / $this->srcW);
} else {
$ftoH = $toH;
$ftoW = $ftoH * ($this->srcW / $this->srcH);
}
if ($this->srcW > $toW || $this->srcH > $toH) {
$cImg = $this->creatImage($this->im, $ftoW, $ftoH, 0, 0, 0, 0, $this->srcW, $this->srcH);
return $this->echoImage($cImg, $toFile);
} else {
$cImg = $this->creatImage($this->im, $this->srcW, $this->srcH, 0, 0, 0, 0, $this->srcW, $this->srcH);
return $this->echoImage($cImg, $toFile);
}
}
// 生成最小裁剪后的缩图
function cut($toFile, $toW, $toH){
$toWH = $toW / $toH;
$srcWH = $this->srcW / $this->srcH;
if ($toWH<=$srcWH) {
$ctoH = $toH;
$ctoW = $ctoH * ($this->srcW / $this->srcH);
} else {
$ctoW = $toW;
$ctoH = $ctoW * ($this->srcH / $this->srcW);
}
$allImg = $this->creatImage($this->im, $ctoW, $ctoH, 0, 0, 0, 0, $this->srcW, $this->srcH);
$cImg = $this->creatImage($allImg, $toW, $toH, 0, 0, ($ctoW - $toW) / 2, ($ctoH - $toH) / 2, $toW, $toH);
imageDestroy($allImg);
return $this->echoImage($cImg, $toFile);
}
// 生成背景填充的缩图,默认用白色填充剩余空间,传入$isAlpha为真时用透明色填充
function backFill($toFile, $toW, $toH,$isAlpha=false,$red=255, $green=255, $blue=255){
$toWH = $toW / $toH;
$srcWH = $this->srcW / $this->srcH;
if ($toWH<=$srcWH) {
$ftoW = $toW;
$ftoH = $ftoW * ($this->srcH / $this->srcW);
} else {
$ftoH = $toH;
$ftoW = $ftoH * ($this->srcW / $this->srcH);
}
if (function_exists('imagecreatetruecolor')) {
@$cImg = imageCreateTrueColor($toW, $toH);
if (!$cImg) {
$cImg = imageCreate($toW, $toH);
}
} else {
$cImg = imageCreate($toW, $toH);
}
$fromTop = ($toH - $ftoH)/2;//从正中间填充
$backcolor = imagecolorallocate($cImg,$red,$green, $blue); //填充的背景颜色
if ($isAlpha){//填充透明色
$backcolor=imageColorTransparent($cImg,$backcolor);
$fromTop = $toH - $ftoH;//从底部填充
}
imageFilledRectangle($cImg, 0, 0, $toW, $toH, $backcolor);
if ($this->srcW > $toW || $this->srcH > $toH) {
$proImg = $this->creatImage($this->im, $ftoW, $ftoH, 0, 0, 0, 0, $this->srcW, $this->srcH);
if ($ftoW < $toW) {
imageCopy($cImg, $proImg, ($toW - $ftoW) / 2, 0, 0, 0, $ftoW, $ftoH);
} else if ($ftoH < $toH) {
imageCopy($cImg, $proImg, 0, $fromTop, 0, 0, $ftoW, $ftoH);
} else {
imageCopy($cImg, $proImg, 0, 0, 0, 0, $ftoW, $ftoH);
}
} else {
imageCopyMerge($cImg, $this->im, ($toW - $ftoW) / 2,$fromTop, 0, 0, $ftoW, $ftoH, 100);
}
return $this->echoImage($cImg, $toFile);
}
function creatImage($img, $creatW, $creatH, $dstX, $dstY, $srcX, $srcY, $srcImgW, $srcImgH){
if (function_exists('imagecreatetruecolor')) {
@$creatImg = ImageCreateTrueColor($creatW, $creatH);
@imagealphablending($creatImg,false);//是不合并颜色,直接用$img图像颜色替换,包括透明色;
@imagesavealpha($creatImg,true);//不要丢了$thumb图像的透明色;
if ($creatImg){
imageCopyResampled($creatImg, $img, $dstX, $dstY, $srcX, $srcY, $creatW, $creatH, $srcImgW, $srcImgH);
}else {
$creatImg = ImageCreate($creatW, $creatH);
imageCopyResized($creatImg, $img, $dstX, $dstY, $srcX, $srcY, $creatW, $creatH, $srcImgW, $srcImgH);
}
} else {
$creatImg = ImageCreate($creatW, $creatH);
imageCopyResized($creatImg, $img, $dstX, $dstY, $srcX, $srcY, $creatW, $creatH, $srcImgW, $srcImgH);
}
return $creatImg;
}
// Rotate($toFile, 90);
public function imgRotate($toFile,$degree) {
if (!$this->im ||
$degree % 360 === 0 ||
!function_exists('imageRotate')) {
return false;
}
$rotate = imageRotate($this->im,360-$degree,0);
$result = false;
switch ($this->imgData[2]) {
case IMAGETYPE_GIF:
$result = imagegif($rotate, $toFile);
break;
case IMAGETYPE_JPEG:
$result = imagejpeg($rotate, $toFile,100);//压缩质量
break;
case IMAGETYPE_PNG:
$result = imagePNG($rotate, $toFile);
break;
default:break;
}
imageDestroy($rotate);
imageDestroy($this->im);
return $result;
}
// 输出图片link---只输出不保存文件。file--保存为文件
function echoImage($img, $toFile){
if(!$img) return false;
ob_get_clean();
$result = false;
switch ($this->echoType) {
case 'link':$result = imagePNG($img);break;
case 'file':$result = imagePNG($img, $toFile);break;
//return ImageJpeg($img, $to_File);
}
imageDestroy($img);
imageDestroy($this->im);
return $result;
}
}
if(!function_exists('imageflip')){
/**
* Flip (mirror) an image left to right.
*
* @param image resource
* @param x int
* @param y int
* @param width int
* @param height int
* @return bool
* @require PHP 3.0.7 (function_exists), GD1
*/
define('IMG_FLIP_HORIZONTAL', 0);
define('IMG_FLIP_VERTICAL', 1);
define('IMG_FLIP_BOTH', 2);
function imageflip($image, $mode) {
switch ($mode) {
case IMG_FLIP_HORIZONTAL: {
$max_x = imagesx($image) - 1;
$half_x = $max_x / 2;
$sy = imagesy($image);
$temp_image = imageistruecolor($image)? imagecreatetruecolor(1, $sy): imagecreate(1, $sy);
for ($x = 0; $x < $half_x; ++$x) {
imagecopy($temp_image, $image, 0, 0, $x, 0, 1, $sy);
imagecopy($image, $image, $x, 0, $max_x - $x, 0, 1, $sy);
imagecopy($image, $temp_image, $max_x - $x, 0, 0, 0, 1, $sy);
}
break;
}
case IMG_FLIP_VERTICAL: {
$sx = imagesx($image);
$max_y = imagesy($image) - 1;
$half_y = $max_y / 2;
$temp_image = imageistruecolor($image)? imagecreatetruecolor($sx, 1): imagecreate($sx, 1);
for ($y = 0; $y < $half_y; ++$y) {
imagecopy($temp_image, $image, 0, 0, 0, $y, $sx, 1);
imagecopy($image, $image, 0, $y, 0, $max_y - $y, $sx, 1);
imagecopy($image, $temp_image, 0, $max_y - $y, 0, 0, $sx, 1);
}
break;
}
case IMG_FLIP_BOTH: {
$sx = imagesx($image);
$sy = imagesy($image);
$temp_image = imagerotate($image, 180, 0);
imagecopy($image, $temp_image, 0, 0, 0, 0, $sx, $sy);
break;
}
default: {
return;
}
}
imagedestroy($temp_image);
}
}
if(!function_exists('imagecreatefrombmp')){
function imagecreatefrombmp( $filename ){
return imageGdBMP::load($filename);
}
}

@ -0,0 +1,332 @@
<?php
/*
* @link http://kodcloud.com/
* @author warlee | e-mail:kodcloud@qq.com
* @copyright warlee 2014.(Shanghai)Co.,Ltd
* @license http://kodcloud.com/tools/license/license.txt
*/
define('ARCHIVE_LIB',dirname(__FILE__).'/archiveLib/');
define('PCLZIP_TEMPORARY_DIR',TEMP_PATH);
define('PCLTAR_TEMPORARY_DIR',TEMP_PATH);
define('PCLZIP_SEPARATOR',';@@@,');//压缩多个文件,组成字符串分割
mk_dir(TEMP_PATH);
require_once ARCHIVE_LIB.'pclerror.lib.php';
require_once ARCHIVE_LIB.'pcltrace.lib.php';
require_once ARCHIVE_LIB.'pcltar.lib.php';
require_once ARCHIVE_LIB.'pclzip.class.php';
require_once ARCHIVE_LIB.'kodRarArchive.class.php';
require_once ARCHIVE_LIB.'kodZipArchive.class.php';
class KodArchive {
/**
* [checkIfType get the app by ext]
* @param [type] $guess [check]
* @param [type] $ext [file ext]
* @return [type] [description]
*/
static function checkIfType($ext,$appType){
$extArray = array(
'zip' => array('zip','ipa','apk','epub'),
'tar' => array('tar','tar.gz','tgz','gz'),
'rar' => array('rar','7z','xz','bz2','arj','cab','iso')
);
$result = in_array($ext,$extArray[$appType]);
if( $result &&
($appType == 'zip' || $appType == 'tar') &&
(!function_exists('gzopen') || !function_exists('gzinflate'))
){
show_tips("[Error] Can't Open; Missing zlib extensions");
}
if( $result && $appType == 'rar' &&
(!function_exists('shell_exec') || !strstr(shell_exec('echo "kodcloud"'),'kodcloud'))
){
show_tips("[Error] Can't Open; shell_exec Can't use");
}
return $result;
}
/**
* [listContent description]
* @param [type] $file [archive file]
* @return [type] [array or false]
*/
static function listContent($file,$output=true) {
$ext = get_path_ext($file);
$result = false;
if( self::checkIfType($ext,'tar') ){
//TrOn(10);
$resultOld = PclTarList($file);
//TrDisplay();exit;
$result = array();
for ($i=0; $i < count($resultOld); $i++) {
$item = $resultOld[$i];
//http://rpm5.org/docs/api/tar_8c-source.html
if( $item['typeflag'] == 'x' || $item['typeflag'] == 'g'){
continue;
}
if($output){
$item['filename'] = ltrim($item['filename'],'./');
}
if($item['typeflag'] == '5'){
$item['folder'] = true;
}else{
$item['folder'] = false;
}
$item['index'] = $i;
$result[] = $item;
}
}else if( self::checkIfType($ext,'rar') ){
$appResult = kodRarArchive::listContent($file);
if(!$appResult['code']){
return $appResult;
}else{
$result = $appResult['data'];
}
}else{//默认zip
if(kodZipArchive::support('list')){
$result = kodZipArchive::listContent($file);
}else{
$zip = new PclZip($file);
$result = $zip->listContent();
}
}
if($result){
//编码转换
$charset = unzip_charset_get($result);
$output = $output && function_exists('iconv');
for ($i=0; $i < count($result); $i++) {
//不允许相对路径
$result[$i]['filename'] = str_replace(array('../','..\\'),"_",$result[$i]['filename']);
// $charset = get_charset($result[$i]['filename']);
if($output){
$result[$i]['filename'] = iconv_to($result[$i]['filename'],$charset,'utf-8');
unset($result[$i]['stored_filename']);
}
}
return array('code'=>true,'data'=>$result);
}else{
return array('code'=>false,'data'=>$result);
}
}
/**
* [extract description]
* @param [type] $file [archive file]
* @param [type] $dest [extract to folder]
* @param string $part [archive file content]
* @return [type] [array]
*/
static function extract($file, $dest, $part = '-1',&$partName=false) {
$ext = get_path_ext($file);
$listContent = self::listContent($file,false);//不转码
if(!$listContent['code']){
return $listContent;
}
if($part != '-1'){//解压部分.则构造 $pathRemove $indexPath
$indexInfo = self::fileIndex($listContent['data'],$part);
$partName = str_replace(array('../','..\\'),'_',$indexInfo['filename']);
$indexPath = $partName;
if($GLOBALS['config']['systemCharset'] != 'utf-8'){
$indexPath = unzip_pre_name($partName);//系统编码
}
//$pathRemove = get_path_father($indexPath);
$pathRemove = get_path_father($partName);//中文情况文件情况兼容
if($indexInfo['folder']){
$indexPath = rtrim($indexPath,'/').'/';//tar 解压文件夹需要/结尾
$partName = array($partName);
}
$tempCheck = str_replace('\\','/',$indexPath);
if(substr($tempCheck,-1) == '/'){
//跟目录;需要追加一层文件夹;window a\b\c\ linux a/b/c/
if( !strstr(trim($tempCheck,'/'),'/') ){
$dest = $dest.unzip_pre_name(get_path_this($tempCheck)).'/';
}
}else{
if($pathRemove == $indexPath){//根目录文件;
$pathRemove = '';
}
}
//debug_out($indexInfo,$indexPath,$partName,$pathRemove,$tempCheck);
}
if( self::checkIfType($ext,'tar') ){
//TrOn(10);
if($part != '-1'){
//tar 默认都进行转码;
$indexPath = unzip_pre_name($indexPath);
$pathRemove = unzip_pre_name($pathRemove);
$result = PclTarExtractList($file,array($indexPath),$dest,$pathRemove);
}else{
$result = PclTarExtract($file,$dest);
}
//TrDisplay();exit;
return array('code'=>$result,'data'=>PclErrorString(true));
}else if( self::checkIfType($ext,'rar')){ // || $ext == 'zip'
return kodRarArchive::extract($file,$dest,$ext,$partName);
}else if(kodZipArchive::support('extract')){
return kodZipArchive::extract($file,$dest,$partName);
}else{
$zip = new PclZip($file);
//解压内部的一部分,按文件名或文件夹来
if($part != '-1'){
$result = $zip->extract(PCLZIP_OPT_PATH,$dest,
PCLZIP_OPT_SET_CHMOD,DEFAULT_PERRMISSIONS,
PCLZIP_CB_PRE_FILE_NAME,'unzip_pre_name',
PCLZIP_OPT_BY_NAME,$indexInfo['filename'],
PCLZIP_OPT_REMOVE_PATH,$pathRemove,
PCLZIP_OPT_REPLACE_NEWER);
}else{
$result = $zip->extract(PCLZIP_OPT_PATH,$dest,
PCLZIP_OPT_SET_CHMOD,DEFAULT_PERRMISSIONS,
PCLZIP_CB_PRE_FILE_NAME,'unzip_pre_name',
PCLZIP_OPT_REPLACE_NEWER);//解压到某个地方,覆盖方式
}
return array('code'=>$result,'data'=>$zip->errorName(true));
}
return array('code'=>false,'data'=>'File Type Not Support');
}
static function fileIndex($list,$index,$key=false){
if(!is_array($list)) return false;
$len = count($list);
for ($i=0; $i < $len; $i++) {
if($index == $list[$i]['index']){
$item = $list[$i];
break;
}
}
if(!$item){
show_tips('KodArchive:fileIndex; index error;file not exists!');
}
$result = $item;
if($key){
$result = $item[$key];
if($item['folder']){
$result = rtrim($result,'/').'/';//tar 解压文件夹需要结尾/
}
}
return $result;
}
static function extractZipFile($file,$byName,$cacheName = false){
$temp = TEMP_PATH.'archivePreview/'.hash_path($file).'/';
mk_dir($temp);
touch(TEMP_PATH.'archivePreview/index.html');
$newFile = $temp.md5($file.$byName);
if($cacheName){
$newFile = $temp.$cacheName;
}
if(file_exists($newFile)){
return $newFile;
}
$zip = new PclZip($file);
$outFile = unzip_filter_ext($temp.get_path_this($byName));
$parent = get_path_father($byName);
if($parent == $byName){
$parent = '';
}
$result = $zip->extract(
PCLZIP_OPT_PATH,$temp,
PCLZIP_CB_PRE_FILE_NAME,'unzip_pre_name',
PCLZIP_OPT_REMOVE_PATH,$parent,
PCLZIP_OPT_BY_NAME,$byName);
if(!file_exists($outFile)){
return false;
}
@rename($outFile,$newFile);
return $newFile;
}
/**
* [filePreview file preview or download a file;]
* 解压后自动缓存;
* @param [type] $file [archive file name]
* @param [type] $index [file index]
* @return [type] [echo to client;]
*/
static function filePreview($file,$index,$download=false,$byName = false){
$temp = TEMP_PATH.'archivePreview/'.hash_path($file).'/';
mk_dir($temp);
touch(TEMP_PATH.'archivePreview/index.html');
$newFile = $temp.md5($file.$index.$byName);
$partName = '';//引用传值,传入处理
$result = self::extract($file, $temp,$index,$partName);
if(is_array($partName)){//不能是数组——文件夹
show_json('unzip preview folder error!',false);
}
if(file_exists($newFile)){
file_put_out($newFile,$download,get_path_this($partName));
return;
}
//$partName 压缩文件原名;初始编码;转为当前文件系统编码
$partName = unzip_pre_name($partName);
$filenameOutput = get_path_this($partName);
$outFile = unzip_filter_ext($temp.$filenameOutput);
if(!$result['code']){
show_json($result['data'],false);
}
//debug_out($partName,$file,$outFile,$byName);
if(!file_exists($outFile)){
show_json('unzip error!',false);
}
@rename($outFile,$newFile);
if(!file_exists($newFile)){
del_dir($temp);
show_json('unzip:rename error!');
}
file_put_out($newFile,$download,$filenameOutput);
}
/**
* [create description]
* @param [type] $file [archive file name]
* @param [type] $files [files add;file or folders]
* @return [type] [bool]
*/
static function create($file,$files) {
$ext = get_path_ext($file);
$result = false;
if( self::checkIfType($ext,'zip') ){
if(kodZipArchive::support('add')){
return kodZipArchive::create($file,$files);
}
$archive = new PclZip($file);
foreach ($files as $key =>$val) {
$val = str_replace('//','/',$val);
$removePathPre = _DIR_CLEAR(get_path_father($val));
if($key == 0){
$result = $archive->create($val,
PCLZIP_OPT_REMOVE_PATH,$removePathPre,
PCLZIP_CB_PRE_FILE_NAME,'zip_pre_name'
);
continue;
}
$result = $archive->add($val,
PCLZIP_OPT_REMOVE_PATH,$removePathPre,
PCLZIP_CB_PRE_FILE_NAME,'zip_pre_name'
);
}
}else if( self::checkIfType($ext,'tar') ){
//TrOn(10);
foreach ($files as $key =>$val) {
$val = str_replace('//','/',$val);
$removePathPre = _DIR_CLEAR(get_path_father($val));
if($key == 0){
$result = PclTarCreate($file,array($val), $ext,null, $removePathPre);
continue;
}
$result = PclTarAddList($file,array($val),'',$removePathPre,$ext);
}
//TrDisplay();exit;
}
return $result;
}
}

@ -0,0 +1,122 @@
<?php
/*
* @link http://kodcloud.com/
* @author warlee | e-mail:kodcloud@qq.com
* @copyright warlee 2014.(Shanghai)Co.,Ltd
* @license http://kodcloud.com/tools/license/license.txt
*------
* 字符串加解密类;
* 一次一密;且定时解密有效
* 可用于加密&动态key生成
* demo
* 加密echo Mcrypt::encode('abc','123');
* 解密echo Mcrypt::decode('9f843I0crjv5y0dWE_-uwzL_mZRyRb1ynjGK4I_IACQ','123');
*/
class Mcrypt{
public static $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 static function encode($string,$key = '', $expiry = 0){
$ckeyLength = 4;
$key = md5($key ? $key : self::$default_key); //解密密匙
$keya = md5(substr($key, 0, 16)); //做数据完整性验证
$keyb = md5(substr($key, 16, 16)); //用于变化生成的密文 (初始化向量IV)
$keyc = substr(md5(microtime()), - $ckeyLength);
$cryptkey = $keya . md5($keya . $keyc);
$keyLength = strlen($cryptkey);
$string = sprintf('%010d', $expiry ? $expiry + time() : 0).substr(md5($string . $keyb), 0, 16) . $string;
$stringLength = strlen($string);
$rndkey = array();
for($i = 0; $i <= 255; $i++) {
$rndkey[$i] = ord($cryptkey[$i % $keyLength]);
}
$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 < $stringLength; $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 static function decode($string,$key = '')
{
$string = str_replace(array('-', '_', '.'),array('+', '/', '='), $string);
$ckeyLength = 4;
$key = md5($key ? $key : self::$default_key); //解密密匙
$keya = md5(substr($key, 0, 16)); //做数据完整性验证
$keyb = md5(substr($key, 16, 16)); //用于变化生成的密文 (初始化向量IV)
$keyc = substr($string, 0, $ckeyLength);
$cryptkey = $keya . md5($keya . $keyc);
$keyLength = strlen($cryptkey);
$string = base64_decode(substr($string, $ckeyLength));
$stringLength = strlen($string);
$rndkey = array();
for($i = 0; $i <= 255; $i++) {
$rndkey[$i] = ord($cryptkey[$i % $keyLength]);
}
$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 < $stringLength; $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]));
}
$theTime = intval(substr($result, 0, 10));
if (($theTime == 0 || $theTime - time() > 0)
&& substr($result, 10, 16) == substr(md5(substr($result, 26) . $keyb), 0, 16)
) {
return substr($result, 26);
} else {
return '';
}
}
}

@ -0,0 +1,303 @@
<?php
/*
* @link http://kodcloud.com/
* @author warlee | e-mail:kodcloud@qq.com
* @copyright warlee 2014.(Shanghai)Co.,Ltd
* @license http://kodcloud.com/tools/license/license.txt
*/
class PluginBase{
public $in;
public $pluginName;
public $pluginPath;
public $pluginHost;
public $pluginHostDefault;
public $pluginApi;
public $packageData;
private $pluginLangArr;
private $pluginConfig;
function __construct(){
global $in,$config;
$this->config = &$config;
$this->in = &$in;
$this->pluginName = str_replace('Plugin','',get_class($this));
$this->pluginPath = PLUGIN_DIR.$this->pluginName.'/';
$this->pluginApi = rtrim(APP_HOST,'/').'/index.php?pluginApp/to/'.$this->pluginName.'/';
$this->pluginHost = $this->config['settings']['pluginHost'].$this->pluginName.'/';
$this->pluginHostDefault = PLUGIN_HOST.$this->pluginName.'/';
$this->pluginLangArr = $this->initLang();
return $this;
}
public function regiest(){
$this->hookRegiest(array());
$this->setConfig(array());
}
public function install(){}
public function update(){}
public function unInstall(){}
/**
* 注册hook到当前插件配置
* @param [type] $array [description]
* @return [type] [description]
*/
final function hookRegiest($array){
$id = $this->pluginName;
$systemConfig = &$this->config['settingSystem'];
if(!is_array($systemConfig['pluginList'])){
$systemConfig['pluginList'] = array();
}
if(is_array($systemConfig['pluginList'][$id])){
$systemConfig['pluginList'][$id]['regiest'] = $array;
}else{
$systemConfig['pluginList'][$id] = array(
'id' => $id,
'regiest' => $array,
'status' => 0,
'config' => $this->getConfig()
);
}
}
final function appIcon(){
$package = $this->appPackage();
$icon = '';
if(isset($package['source'])){
if($package['source']['icon']){
$icon = '<img class="icon" src="'.$package['source']['icon'].'"/>';
}else if($package['source']['className']){
$icon = "<i class='icon font-icon ".$package['source']['className']."'></i>";
}
}
return $icon;
}
final function filePath($path){
if(substr($path,0,4) == 'http'){
if(!request_url_safe($path)){
show_json(LNG('url error!'),false);
}
$cacheName = md5($path.'kodcloud').'.'.get_path_ext($path);
$cacheFile = $this->filePathName($cacheName);
mk_dir(get_path_father($cacheFile));
if(!file_exists($cacheFile)){
$result = url_request($path,'DOWNLOAD',$cacheFile);
}
$path = $cacheFile;
}else{
$path = _DIR($path);
//php7.1,含有中文文件,windows下 curl上传会有问题
if( strtoupper(substr(PHP_OS, 0,3)) === 'WIN' &&
version_compare(phpversion(), '7.1.0', '>=') &&
preg_match("/([\x81-\xfe][\x40-\xfe])/", $path, $match)){
$cacheName = hash_path($path).'.'.get_path_ext($path);
$cacheFile = $this->filePathName($cacheName);
mk_dir(get_path_father($cacheFile));
if(!file_exists($cacheFile)){
@copy($path,$cacheFile);
}
$path = $cacheFile;
}
}
if (!file_exists($path)) {
show_tips(LNG('file').' '.LNG('not_exists'));
}
return $path;
}
private function filePathName($fileName){
if(! checkExtSafe($fileName)){$fileName = $fileName.'.txt';}
return TEMP_PATH.$this->pluginName.'/files/'.$fileName;
}
/**
* 插件配置数据加载
* @return [type] [description]
*/
final function appPackage(){
if($this->packageData){
return $this->packageData;
}
$content = $this->parseFile($this->pluginPath.'package.json');
$this->parseLang($content);
$result = json_decode_force($content);
if(!$result){
return $content;
}
$this->packageData = $result;
return $result;
}
/**
* 获取package.json中的数据;通过key获取支持auther.copyright 多级获取
* @param [type] $key [description]
* @return [type] [description]
*/
public function packageInfoGet($key){
$data = $this->appPackage();
$result = null;
$keyArr = explode('.',$key);
for ($i = 0; $i < count($keyArr); $i++) {
if($i == 0){
$result = $data[$keyArr[$i]];
continue;
}
if(is_array($result)){
$result = $result[$keyArr[$i]];
}else{
return null;
}
}
return $result;
}
public function packageVersion(){return $this->packageInfoGet('version');}
public function packageTitle(){return $this->packageInfoGet('title');}
public function packageCopyright(){return $this->packageInfoGet('auther.copyright');}
private function parseFile($file){
$content = file_get_contents($file);
$replaceFrom = array(
'{{pluginHost}}',
'{{pluginHostDefault}}',
'{{pluginApi}}',
'{{pluginName}}',
'{{pluginPath}}',
'{{appHost}}',
'{{staticPath}}',
//"\r","\n"
);
$replaceTo = array(
$this->pluginHost,
$this->pluginHostDefault,
$this->pluginApi,
$this->pluginName,
$this->pluginPath,
APP_HOST,
$this->config['settings']['staticPath'],
//" "," "
);
$content = str_replace($replaceFrom,$replaceTo,$content);
return $content;
}
private function parseLang(&$content){
$pre = '{{LNG.';
if(!strstr($content,$pre)){
return;
}
preg_match_all('/{{LNG\..*}}/isU',$content,$match);
if( !is_array($match) || count($match) == 0 ||
!is_array($match[0]) || count($match[0]) == 0 ){
return;
}
$replaceFrom = array();
$replaceTo = array();
foreach ($match[0] as $key) {
$langKey = substr($key,strlen($pre),-2); //{{LNG.file}}
$langVal = LNG($langKey);
$replaceFrom[] = $key;
$replaceTo[] = str_replace(
array("\n","\r","\t",'"'),
array(' ',' ','','\\"'),
$langVal
);
}
$content = str_replace($replaceFrom,$replaceTo,$content);
}
private function parseConfig(&$content){
$config = $this->getConfig();
$pre = '{{config.';
if(!strstr($content,$pre)){
return;
}
preg_match_all('/{{config\..*}}/isU',$content,$match);
if( !is_array($match) || count($match) == 0 ||
!is_array($match[0]) || count($match[0]) == 0 ){
return;
}
$replaceFrom = array();
$replaceTo = array();
foreach ($match[0] as $key) {
$langKey = substr($key,strlen($pre),-2); //{{config.file}}
$replaceFrom[] = $key;
$replaceTo[] = $config[$langKey];
}
$content = str_replace($replaceFrom,$replaceTo,$content);
}
/**
* 输出文件
* @param [type] $file [description]
* @return [type] [description]
*/
final function echoFile($file,$replace=false){
$filePath = $this->pluginPath.$file;
if(ACT == 'commonJs'){
echo "\n/* [".$this->pluginName.'/'.$file."] */";
if(!file_exists($filePath)){
echo " /* ==>[not exist]*/";
return;
}
}
$content = $this->parseFile($filePath);
$this->parseLang($content);
$this->parseConfig($content);
if(is_array($replace) && count($replace) == 2){
$content = str_replace($replace[0],$replace[1],$content);
}
echo "\n".$content;
}
/**
* 初始化多语言
* @return [type] [description]
*/
final function initLang(){
$default = 'en';
$path = $this->pluginPath.'i18n/';
$lang = I18n::getType();
$array = array();
if(file_exists($path.$lang.'.php')){
$array = include($path.$lang.'.php');
}else if(file_exists($path.$default.'.php')){
$array = include($path.$default.'.php');
}
if(!is_array($array)) return array();
if(count($array) > 0){
I18n::set($array);
}
return $array;
}
final function isFileExtence($st,$act){
if(in_array($st,array('desktop','editor','explorer','share','api'))){
return true;
}
return false;
}
/**
* 获取插件配置
* @return [type] [description]
*/
final function getConfig(){
if(!$this->pluginConfig){
$model = new PluginModel();
$this->pluginConfig = $model->getConfig($this->pluginName);
}
return $this->pluginConfig;
}
/**
* 修改插件配置
* @return [type] [description]
*/
final function setConfig($value){
$model = new PluginModel();
return $model->setConfig($this->pluginName,$value);
}
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

@ -0,0 +1,254 @@
<?php
/*
* @link http://kodcloud.com/
* @author warlee | e-mail:kodcloud@qq.com
* @copyright warlee 2014.(Shanghai)Co.,Ltd
* @license http://kodcloud.com/tools/license/license.txt
*/
/**
* 7zip 解压缩: 7z,xz,bz2(bzip2),gz(gzip),tar,zip
* 7zip 仅解压: 7z,xz,,bz2(bzip2),gz(gzip),tar,zip,arj,cab,chm,cpio,deb,dmg,
* fat,hfs,iso,lzh,lzma,mbr,msi,nsis,ntfs,,rpm,udf,vhd,wim,xar,z
*
* rar 仅支持rar文件解压缩
* 目前使用解压功能7z,bz2,zx,z,ios,arj;压缩功能暂停
* ------------
* 7zip命令行:http://blog.csdn.net/earbao/article/details/51382534
* rar命令行 :http://www.cnblogs.com/fetty/p/4769279.html
* 7za命令行 :https://www.mankier.com/1/7za //当rar解压失败时尝试调用系统内置7za解压; 支持大于60G文件
*/
class kodRarArchive {
static function bin($type){
$file = dirname(__FILE__).'/bin/'.$type;
$file = str_replace('\\','/',$file);
if(PHP_OS == "Darwin"){//mac
$file = PLUGIN_DIR.'/zipView/lib/bin/'.$type.'_mac';
}
if(!file_exists($file)){
show_json('bin file not exists!',false);
}
if(PATH_SEPARATOR == ':') {
@chmod($file,0777);
}
return $file;
}
static function run($cmd){
if (strtoupper(substr(PHP_OS, 0,3)) != 'WIN') {//linux
$cmd = "export LANG='en_US.UTF-8' && ".$cmd;
@setlocale(LC_ALL,'en_US.UTF-8');
@putenv('LC_ALL=en_US.UTF-8');
}
$result = shell_exec($cmd);
//debug_out($cmd,$result);
if(!strstr($result,'Copyright')){
return array('code'=>false,'data'=>'[shell_exec error!] No Result!');
}
return array('code'=>true,'data'=>$result);
}
/**
* 防止通过构造文件名进行shell注入
*/
static function extract($file,$dest,$ext,$partName=false,$passwd=false) {
$dest_before = $dest;
$dest = TEMP_PATH.'archivePreview/'.md5(rand_string(40).time()).'/';
mk_dir($dest);touch(TEMP_PATH.'archivePreview/index.html');
$passwd = $passwd ?" -p".escapeShell($passwd).' ':'';
if($ext == 'rar'){
$param = ' -y '.$passwd.escapeShell($file).' '.escapeShell($dest).' ';
if($partName === false){
$command = self::bin('rar').' x'.$param;
}else if(is_array($partName)){
$command = self::bin('rar').' x'.$param.escapeShell($partName[0]);
}else{
$command = self::bin('rar').' e'.$param.escapeShell($partName);
}
}else{
if($ext == 'bz2'){
$ext = 'bzip2';
}
$param = ' -y -t'.escapeShell($ext).$passwd.' -o'.escapeShell($dest).' '.escapeShell($file).' ';
if($partName === false){
$command = self::bin('7z').' x'.$param;
}else if(is_array($partName)){
$command = self::bin('7z').' x'.$param.escapeShell($partName[0]);
}else{
$command = self::bin('7z').' e'.$param.escapeShell($partName);
}
}
$result = self::run($command);
//7za 兼容 rar解压大文件
if(strstr($result['data'],'is not RAR archive') && shell_exec('7za')){
$param = ' -y -o'.escapeShell($dest).' '.escapeShell($file).' ';
if($partName === false){
$command = '7za x'.$param;
}else if(is_array($partName)){
$command = '7za x'.$param.escapeShell($partName[0]);
}else{
$command = '7za e'.$param.escapeShell($partName);
}
$result = self::run($command);
}
//echo "<pre>";var_dump($result,$command);exit;
if(!$result['code']){
return $result;
}
//子目录解压移除多余层级目录
if( is_array($partName) ){
$thePath = trim(str_replace("\\",'/',$partName[0]),'/');
$pathGroup = explode('/',$thePath);
//一级目录解压不用移动
if(count($pathGroup) > 1){
move_path($dest.$partName[0],$dest.get_path_this($thePath));
del_dir($dest.$pathGroup[0]);
}else{
$dest_before = get_path_father($dest_before);
}
}
//扩展名处理;文件名重命名处理
$arr = dir_list($dest);
foreach($arr as $f){
$itemPath = str_replace(array($dest,"\\"),array('','/'),$f);
$itemPath = unzip_pre_name($itemPath);
$from = $dest.get_path_father($itemPath).get_path_this($f);
if(strstr($itemPath,'/') == false){
$from = $dest.get_path_this($f);
}
if($dest.$itemPath != $from){
@rename($from,$dest.$itemPath);
}
}
move_path($dest,$dest_before);
del_dir(rtrim($dest,'/'));
return $result;
}
static function listContent($file) {
if(get_path_ext($file) == 'rar'){
return self::listContentRar($file);
}else{
return self::listContent7z($file);
}
}
static function listContentRar($file) {
$command = self::bin('rar').' v '.escapeShell($file);
$result = self::run($command);
//7za 兼容 rar解压大文件
if(strstr($result['data'],'is not RAR archive') && shell_exec('7za')){
return self::listContent7z($file,'7za l ');
}
if(!$result['code']){
return $result;
}
preg_match('/-------- ----\n([\d\D]*)\n-----------/i', $result['data'], $match);
if(!is_array($match) || strlen($match[1]) < 10){
return array('code'=>false,'data'=>'Match Nothing Content!');
}
//windows :...D... 93691 82633 88% 2016-12-09 02:20 396CC62C 000/a/32486963.png
//linux: :-rwxr-xr-x 93691 82643 88% 2016-12-09 02:20 396CC62C 000/a/32486963.png
$reg = '/\s*([-\.\w]+)\s+(\d+)\s+(\d+)\s+\d+%|-+>\s+(\d{2,4}-\d{2}-\d{2} \d{2}:\d{2})\s+\w+\s+(.*)\n/i';
preg_match_all($reg,$match[1]."\n",$matchItem);
if( !is_array($matchItem) ||
count($matchItem) != 6 ||
count($matchItem[0]) == 0
){
return array('code'=>false,'data'=>'Match Nothing Item!');
}
$itemArr = array();
for ($i = 0; $i < count($matchItem[0]); $i++) {
$mode = strtoupper($matchItem[1][$i]);
$isFolder = substr($mode,0,1) == 'D' || substr($mode,3,1) == 'D';
$itemArr[] = array(
'mtime' => strtotime($matchItem[4][$i]),
'size' => $matchItem[2][$i],
'z_size' => $matchItem[3][$i],
'filename' => trim($matchItem[5][$i]),
'index' => $i,
'folder' => intval($isFolder)
);
}
//debug_out($result,$match,$matchItem,$itemArr);
return array('code'=>true,'data'=>$itemArr);
}
static function listContent7z($file,$bin=false) {
$command = self::bin('7z').' l '.escapeShell($file);
if($bin){
$command = $bin.escapeShell($file);
}
$result = self::run($command);
if(!$result['code']){
return $result;
}
preg_match('/-----------\n([\d\D]*)\n--------------/i', $result['data'], $match);
if(!is_array($match) || strlen($match[1]) < 10){
return array('code'=>false,'data'=>'Match Nothing Content!');
}
//2017-03-08 11:22:16 ..... 10727 9385 000\test11.docx
//2017-03-09 13:43:10 ....A 6254 000\111.md
$reg = '/(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}) (D?\.+A?)\s+(\d+)\s+(\d*)\s+(.*)/i';
preg_match_all($reg,$match[1],$matchItem);
if( !is_array($matchItem) ||
count($matchItem) != 6 ||
count($matchItem[0]) == 0
){
return array('code'=>false,'data'=>'Match Nothing Item!');
}
$itemArr = array();
for ($i = 0; $i < count($matchItem[0]); $i++) {
$itemArr[] = array(
'mtime' => strtotime($matchItem[1][$i]),
'size' => $matchItem[3][$i],
'z_size' => $matchItem[4][$i],
'filename' => trim($matchItem[5][$i]),
'index' => $i,
'folder' => substr($matchItem[2][$i],0,1) == 'D'
);
}
//debug_out($result,$match,$matchItem,$itemArr);
return array('code'=>true,'data'=>$itemArr);;
}
/**
* [create description]
* @param [type] $file [creat file to]
* @param [type] $ext [ext:7z,xz,bz2,gzip,tar,zip]
* @param [type] $files [array from]
* @param boolean $passwd [password]
* @return [type] [description]
*/
// static function create($file,$files,$ext,$passwd=false) {
// $passwd = $passwd? " -p".$passwd.' ':"";
// $spearat = (PATH_SEPARATOR != ':')?("&& ".substr($files,0,2)." "):"";//win=>; linux=>:
// $command = 'cd "'.$files.'" '.$spearat.' &&';//cd到所在文件夹
// $command = $command.self::bin().' a -r -y -t'.$ext.' '.$passwd.' "'.$file.'" *';
// return self::run($command);
// }
}
// 不允许双引号
function escapeShell($param){
return escapeshellarg($param);
//$param = escapeshellarg($param);
$os = strtoupper(substr(PHP_OS, 0,3));
if ( $os != 'WIN' && $os != 'DAR') {//linux
$param = str_replace('!','\!',$param);
}
$param = rtrim($param,"\\");
return '"'.str_replace(array('"',"\0",'`'),'_',$param).'"';
}

@ -0,0 +1,147 @@
<?php
/*
* @link http://kodcloud.com/
* @author warlee | e-mail:kodcloud@qq.com
* @copyright warlee 2014.(Shanghai)Co.,Ltd
* @license http://kodcloud.com/tools/license/license.txt
*/
// ZipArchive 解压缩
class kodZipArchive{
static $listCache = array();
static function support($type=''){
$result = false;
if($type == 'extract' && defined("ZIP_ARCHIVE_LOCAL")){// 只允许创建压缩文件用系统调用
$result = true;
}
if(!class_exists('ZipArchive')){
$result = false;
}
return $result;
}
static function listContent($file){
$file_hash = hash_path($file);
if(isset(self::$listCache[$file_hash])){
return self::$listCache[$file_hash];
}
$zip = new ZipArchive();
$zip->open($file);
$count = $zip->numFiles;
for ($i = 0; $i < $count; $i++) {
$entry = $zip->statIndex($i);
$filename = str_replace('\\', '/', $entry['name']);
$result[] = array(
'filename' => $entry['name'],
'stored_filename' => $entry['name'],
'size' => $entry['size'],
'compressed_size' => $entry['comp_size'],
'mtime' => $entry['mtime'],
'index' => $i,
'folder' => (substr($entry['name'], -1, 1) == '/'),
'crc' => $entry['crc']
);
}
self::$listCache[$file_hash] = $result;
return $result;
}
/**
* [extract description]
* @param [type] $file [archive file]
* @param [type] $dest [extract to folder]
* @param string $part [archive file content]
* @return [type] [array]
*/
static function extract($file,$dest,$partName=false) {
$dest_before = $dest;
$dest = TEMP_PATH.'archivePreview/'.md5(rand_string(40).time()).'/';
mk_dir($dest);touch(TEMP_PATH.'archivePreview/index.html');
$zip = new ZipArchive();
if(!$zip->open($file)){
return array('code'=>false,'data'=>'Can not open zip file!');
}
if($partName === false){
$result = $zip->extractTo($dest);
}else{
if(!is_array($partName)){
$partName = array($partName);
}
$matchFiles = $partName;
//解压文件夹
if(substr($partName[0], -1, 1) == '/'){
$matchFiles = array();
$list = self::listContent($file);
foreach ($list as $item) {
if ( strpos($item['filename'],$partName[0]) === 0 ) {
$matchFiles[] = $item['filename'];
}
}
}
$result = $zip->extractTo($dest,$matchFiles);
}
$zip->close();
//子目录解压移除多余层级目录
if( is_array($partName) ){
$thePath = trim(str_replace("\\",'/',$partName[0]),'/');
$pathGroup = explode('/',$thePath);
//一级目录解压不用移动
if(count($pathGroup) > 1){
move_path($dest.$partName[0],$dest.get_path_this($thePath));
del_dir($dest.$pathGroup[0]);
}else{
$dest_before = get_path_father($dest_before);
}
}
//扩展名处理;文件名重命名处理
$arr = dir_list($dest);
foreach($arr as $f){
$itemPath = str_replace(array($dest,"\\"),array('','/'),$f);
$itemPath = unzip_pre_name($itemPath);
$from = $dest.get_path_father($itemPath).get_path_this($f);
if(strstr($itemPath,'/') == false){
$from = $dest.get_path_this($f);
}
if($dest.$itemPath != $from){
@rename($from,$dest.$itemPath);
}
}
move_path($dest,$dest_before);
del_dir(rtrim($dest,'/'));
return array('code'=>$result,'data'=>$result);
}
/**
* [create description]
* @param [type] $file [creat file to]
* @param [type] $files [array from]
* @return [type] [description]
*/
static function create($file,$files) {
$zip = new ZipArchive();
if(!$zip->open($file, ZipArchive::CREATE)){
return false;//Can not open(create) zip file!'
}
foreach ($files as $key =>$val) {
$val = str_replace(array('//','\\'),'/',$val);
$removePathPre = _DIR_CLEAR(get_path_father($val));
$list = array($val);
if(is_dir($val)){
$list = dir_list($val);
$list[] = $val;
}
foreach ($list as $item) {
$addName = zip_pre_name(str_replace($removePathPre,'',$item));
if(is_dir($item)){
$result = $zip->addEmptyDir($addName);
}else{
$result = $zip->addFile($item,$addName);
}
}
}
$zip->close();
return $result;
}
}

@ -0,0 +1,132 @@
<?php
// --------------------------------------------------------------------------------
// PhpConcept Library (PCL) Error 1.0
// --------------------------------------------------------------------------------
// License GNU/GPL - Vincent Blavet - Mars 2001
// http://www.phpconcept.net & http://phpconcept.free.fr
// --------------------------------------------------------------------------------
// Français :
// La description de l'usage de la librairie PCL Error 1.0 n'est pas encore
// disponible. Celle-ci n'est pour le moment distribuée qu'avec les
// développements applicatifs de PhpConcept.
// Une version indépendante sera bientot disponible sur http://www.phpconcept.net
//
// English :
// The PCL Error 1.0 library description is not available yet. This library is
// released only with PhpConcept application and libraries.
// An independant release will be soon available on http://www.phpconcept.net
//
// --------------------------------------------------------------------------------
//
// * Avertissement :
//
// Cette librairie a été créée de façon non professionnelle.
// Son usage est au risque et péril de celui qui l'utilise, en aucun cas l'auteur
// de ce code ne pourra être tenu pour responsable des éventuels dégats qu'il pourrait
// engendrer.
// Il est entendu cependant que l'auteur a réalisé ce code par plaisir et n'y a
// caché aucun virus, ni malveillance.
// Cette libairie est distribuée sous la license GNU/GPL (http://www.gnu.org)
//
// * Auteur :
//
// Ce code a été écrit par Vincent Blavet (vincent@blavet.net) sur son temps
// de loisir.
//
// --------------------------------------------------------------------------------
// ----- Look for double include
if (!defined("PCLERROR_LIB"))
{
define( "PCLERROR_LIB", 1 );
// ----- Version
$g_pcl_error_version = "1.0";
// ----- Internal variables
// These values must only be change by PclError library functions
$g_pcl_error_string = "";
$g_pcl_error_code = 1;
// --------------------------------------------------------------------------------
// Function : PclErrorLog()
// Description :
// Parameters :
// --------------------------------------------------------------------------------
function PclErrorLog($p_error_code=0, $p_error_string="")
{
global $g_pcl_error_string;
global $g_pcl_error_code;
$g_pcl_error_code = $p_error_code;
$g_pcl_error_string = $p_error_string;
}
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// Function : PclErrorFatal()
// Description :
// Parameters :
// --------------------------------------------------------------------------------
function PclErrorFatal($p_file, $p_line, $p_error_string="")
{
global $g_pcl_error_string;
global $g_pcl_error_code;
$v_message = "<html><body>";
$v_message .= "<p align=center><font color=red bgcolor=white><b>PclError Library has detected a fatal error on file '$p_file', line $p_line</b></font></p>";
$v_message .= "<p align=center><font color=red bgcolor=white><b>$p_error_string</b></font></p>";
$v_message .= "</body></html>";
die($v_message);
}
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// Function : PclErrorReset()
// Description :
// Parameters :
// --------------------------------------------------------------------------------
function PclErrorReset()
{
global $g_pcl_error_string;
global $g_pcl_error_code;
$g_pcl_error_code = 1;
$g_pcl_error_string = "";
}
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// Function : PclErrorCode()
// Description :
// Parameters :
// --------------------------------------------------------------------------------
function PclErrorCode()
{
global $g_pcl_error_string;
global $g_pcl_error_code;
return($g_pcl_error_code);
}
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// Function : PclErrorString()
// Description :
// Parameters :
// --------------------------------------------------------------------------------
function PclErrorString()
{
global $g_pcl_error_string;
global $g_pcl_error_code;
return($g_pcl_error_string." [code $g_pcl_error_code]");
}
// --------------------------------------------------------------------------------
// ----- End of double include look
}
?>

File diff suppressed because it is too large Load Diff

@ -0,0 +1,453 @@
<?php
// --------------------------------------------------------------------------------
// PhpConcept Library (PCL) Trace 1.0
// --------------------------------------------------------------------------------
// License GNU/GPL - Vincent Blavet - Janvier 2001
// http://www.phpconcept.net & http://phpconcept.free.fr
// --------------------------------------------------------------------------------
// Français :
// La description de l'usage de la librairie PCL Trace 1.0 n'est pas encore
// disponible. Celle-ci n'est pour le moment distribuée qu'avec l'application
// et la librairie PhpZip.
// Une version indépendante sera bientot disponible sur http://www.phpconcept.net
//
// English :
// The PCL Trace 1.0 library description is not available yet. This library is
// released only with PhpZip application and library.
// An independant release will be soon available on http://www.phpconcept.net
//
// --------------------------------------------------------------------------------
//
// * Avertissement :
//
// Cette librairie a été créée de façon non professionnelle.
// Son usage est au risque et péril de celui qui l'utilise, en aucun cas l'auteur
// de ce code ne pourra être tenu pour responsable des éventuels dégats qu'il pourrait
// engendrer.
// Il est entendu cependant que l'auteur a réalisé ce code par plaisir et n'y a
// caché aucun virus, ni malveillance.
// Cette libairie est distribuée sous la license GNU/GPL (http://www.gnu.org)
//
// * Auteur :
//
// Ce code a été écrit par Vincent Blavet (vincent@blavet.net) sur son temps
// de loisir.
//
// --------------------------------------------------------------------------------
// ----- Look for double include
if (!defined("PCLTRACE_LIB"))
{
define( "PCLTRACE_LIB", 1 );
// ----- Version
$g_pcl_trace_version = "1.0";
// ----- Internal variables
// These values must be change by PclTrace library functions
$g_pcl_trace_mode = "memory";
$g_pcl_trace_filename = "trace.txt";
$g_pcl_trace_name = array();
$g_pcl_trace_index = 0;
$g_pcl_trace_level = 10;
$g_pcl_trace_entries = array();
// --------------------------------------------------------------------------------
// Function : TrOn($p_level, $p_mode, $p_filename)
// Description :
// Parameters :
// $p_level : Trace level
// $p_mode : Mode of trace displaying :
// 'normal' : messages are displayed at function call
// 'memory' : messages are memorized in a table and can be display by
// TrDisplay() function. (default)
// 'log' : messages are writed in the file $p_filename
// --------------------------------------------------------------------------------
function TrOn($p_level=1, $p_mode="memory", $p_filename="trace.txt")
{
global $g_pcl_trace_level;
global $g_pcl_trace_mode;
global $g_pcl_trace_filename;
global $g_pcl_trace_name;
global $g_pcl_trace_index;
global $g_pcl_trace_entries;
// ----- Enable trace mode
$g_pcl_trace_level = $p_level;
// ----- Memorize mode and filename
switch ($p_mode) {
case "normal" :
case "memory" :
case "log" :
$g_pcl_trace_mode = $p_mode;
break;
default :
$g_pcl_trace_mode = "logged";
}
// ----- Memorize filename
$g_pcl_trace_filename = $p_filename;
}
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// Function : IsTrOn()
// Description :
// Return value :
// The trace level (0 for disable).
// --------------------------------------------------------------------------------
function IsTrOn()
{
global $g_pcl_trace_level;
return($g_pcl_trace_level);
}
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// Function : TrOff()
// Description :
// Parameters :
// --------------------------------------------------------------------------------
function TrOff()
{
global $g_pcl_trace_level;
global $g_pcl_trace_mode;
global $g_pcl_trace_filename;
global $g_pcl_trace_name;
global $g_pcl_trace_index;
// ----- Clean
$g_pcl_trace_mode = "memory";
unset($g_pcl_trace_entries);
unset($g_pcl_trace_name);
unset($g_pcl_trace_index);
// ----- Switch off trace
$g_pcl_trace_level = 0;
}
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// Function : TrFctStart()
// Description :
// Just a trace function for debbugging purpose before I use a better tool !!!!
// Start and stop of this function is by $g_pcl_trace_level global variable.
// Parameters :
// $p_level : Level of trace required.
// --------------------------------------------------------------------------------
function TrFctStart($p_file, $p_line, $p_name, $p_param="", $p_message="")
{
global $g_pcl_trace_level;
global $g_pcl_trace_mode;
global $g_pcl_trace_filename;
global $g_pcl_trace_name;
global $g_pcl_trace_index;
global $g_pcl_trace_entries;
// ----- Look for disabled trace
if ($g_pcl_trace_level < 1)
return;
// ----- Add the function name in the list
if (!isset($g_pcl_trace_name))
$g_pcl_trace_name = $p_name;
else
$g_pcl_trace_name .= ",".$p_name;
// ----- Update the function entry
$i = sizeof($g_pcl_trace_entries);
$g_pcl_trace_entries[$i][name] = $p_name;
$g_pcl_trace_entries[$i][param] = $p_param;
$g_pcl_trace_entries[$i][message] = "";
$g_pcl_trace_entries[$i][file] = $p_file;
$g_pcl_trace_entries[$i][line] = $p_line;
$g_pcl_trace_entries[$i][index] = $g_pcl_trace_index;
$g_pcl_trace_entries[$i][type] = "1"; // means start of function
// ----- Update the message entry
if ($p_message != "")
{
$i = sizeof($g_pcl_trace_entries);
$g_pcl_trace_entries[$i][name] = "";
$g_pcl_trace_entries[$i][param] = "";
$g_pcl_trace_entries[$i][message] = $p_message;
$g_pcl_trace_entries[$i][file] = $p_file;
$g_pcl_trace_entries[$i][line] = $p_line;
$g_pcl_trace_entries[$i][index] = $g_pcl_trace_index;
$g_pcl_trace_entries[$i][type] = "3"; // means message
}
// ----- Action depending on mode
PclTraceAction($g_pcl_trace_entries[$i]);
// ----- Increment the index
$g_pcl_trace_index++;
}
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// Function : TrFctEnd()
// Description :
// Just a trace function for debbugging purpose before I use a better tool !!!!
// Start and stop of this function is by $g_pcl_trace_level global variable.
// Parameters :
// $p_level : Level of trace required.
// --------------------------------------------------------------------------------
function TrFctEnd($p_file, $p_line, $p_return=1, $p_message="")
{
global $g_pcl_trace_level;
global $g_pcl_trace_mode;
global $g_pcl_trace_filename;
global $g_pcl_trace_name;
global $g_pcl_trace_index;
global $g_pcl_trace_entries;
// ----- Look for disabled trace
if ($g_pcl_trace_level < 1)
return;
// ----- Extract the function name in the list
// ----- Remove the function name in the list
if (!($v_name = strrchr($g_pcl_trace_name, ",")))
{
$v_name = $g_pcl_trace_name;
$g_pcl_trace_name = "";
}
else
{
$g_pcl_trace_name = substr($g_pcl_trace_name, 0, strlen($g_pcl_trace_name)-strlen($v_name));
$v_name = substr($v_name, -strlen($v_name)+1);
}
// ----- Decrement the index
$g_pcl_trace_index--;
// ----- Update the message entry
if ($p_message != "")
{
$i = sizeof($g_pcl_trace_entries);
$g_pcl_trace_entries[$i][name] = "";
$g_pcl_trace_entries[$i][param] = "";
$g_pcl_trace_entries[$i][message] = $p_message;
$g_pcl_trace_entries[$i][file] = $p_file;
$g_pcl_trace_entries[$i][line] = $p_line;
$g_pcl_trace_entries[$i][index] = $g_pcl_trace_index;
$g_pcl_trace_entries[$i][type] = "3"; // means message
}
// ----- Update the function entry
$i = sizeof($g_pcl_trace_entries);
$g_pcl_trace_entries[$i][name] = $v_name;
$g_pcl_trace_entries[$i][param] = $p_return;
$g_pcl_trace_entries[$i][message] = "";
$g_pcl_trace_entries[$i][file] = $p_file;
$g_pcl_trace_entries[$i][line] = $p_line;
$g_pcl_trace_entries[$i][index] = $g_pcl_trace_index;
$g_pcl_trace_entries[$i][type] = "2"; // means end of function
// ----- Action depending on mode
PclTraceAction($g_pcl_trace_entries[$i]);
}
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// Function : TrFctMessage()
// Description :
// Parameters :
// --------------------------------------------------------------------------------
function TrFctMessage($p_file, $p_line, $p_level, $p_message="")
{
global $g_pcl_trace_level;
global $g_pcl_trace_mode;
global $g_pcl_trace_filename;
global $g_pcl_trace_name;
global $g_pcl_trace_index;
global $g_pcl_trace_entries;
// ----- Look for disabled trace
if ($g_pcl_trace_level < $p_level)
return;
// ----- Update the entry
$i = sizeof($g_pcl_trace_entries);
$g_pcl_trace_entries[$i][name] = "";
$g_pcl_trace_entries[$i][param] = "";
$g_pcl_trace_entries[$i][message] = $p_message;
$g_pcl_trace_entries[$i][file] = $p_file;
$g_pcl_trace_entries[$i][line] = $p_line;
$g_pcl_trace_entries[$i][index] = $g_pcl_trace_index;
$g_pcl_trace_entries[$i][type] = "3"; // means message of function
// ----- Action depending on mode
PclTraceAction($g_pcl_trace_entries[$i]);
}
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// Function : TrMessage()
// Description :
// Parameters :
// --------------------------------------------------------------------------------
function TrMessage($p_file, $p_line, $p_level, $p_message="")
{
global $g_pcl_trace_level;
global $g_pcl_trace_mode;
global $g_pcl_trace_filename;
global $g_pcl_trace_name;
global $g_pcl_trace_index;
global $g_pcl_trace_entries;
// ----- Look for disabled trace
if ($g_pcl_trace_level < $p_level)
return;
// ----- Update the entry
$i = sizeof($g_pcl_trace_entries);
$g_pcl_trace_entries[$i][name] = "";
$g_pcl_trace_entries[$i][param] = "";
$g_pcl_trace_entries[$i][message] = $p_message;
$g_pcl_trace_entries[$i][file] = $p_file;
$g_pcl_trace_entries[$i][line] = $p_line;
$g_pcl_trace_entries[$i][index] = $g_pcl_trace_index;
$g_pcl_trace_entries[$i][type] = "4"; // means simple message
// ----- Action depending on mode
PclTraceAction($g_pcl_trace_entries[$i]);
}
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// Function : TrDisplay()
// Description :
// Parameters :
// --------------------------------------------------------------------------------
function TrDisplay()
{
global $g_pcl_trace_level;
global $g_pcl_trace_mode;
global $g_pcl_trace_filename;
global $g_pcl_trace_name;
global $g_pcl_trace_index;
global $g_pcl_trace_entries;
// ----- Look for disabled trace
if (($g_pcl_trace_level <= 0) || ($g_pcl_trace_mode != "memory"))
return;
$v_font = "\"Verdana, Arial, Helvetica, sans-serif\"";
// ----- Trace Header
echo "<table width=100% border=0 cellspacing=0 cellpadding=0>";
echo "<tr bgcolor=#0000CC>";
echo "<td bgcolor=#0000CC width=1>";
echo "</td>";
echo "<td><div align=center><font size=3 color=#FFFFFF face=$v_font>Trace</font></div></td>";
echo "</tr>";
echo "<tr>";
echo "<td bgcolor=#0000CC width=1>";
echo "</td>";
echo "<td>";
// ----- Content header
echo "<table width=100% border=0 cellspacing=0 cellpadding=0>";
// ----- Display
$v_again=0;
for ($i=0; $i<sizeof($g_pcl_trace_entries); $i++)
{
// ---- Row header
echo "<tr>";
echo "<td><table width=100% border=0 cellspacing=0 cellpadding=0><tr>";
$n = ($g_pcl_trace_entries[$i][index]+1)*10;
echo "<td width=".$n."><table width=100% border=0 cellspacing=0 cellpadding=0><tr>";
for ($j=0; $j<=$g_pcl_trace_entries[$i][index]; $j++)
{
if ($j==$g_pcl_trace_entries[$i][index])
{
if (($g_pcl_trace_entries[$i][type] == 1) || ($g_pcl_trace_entries[$i][type] == 2))
echo "<td width=10><div align=center><font size=2 face=$v_font>+</font></div></td>";
}
else
echo "<td width=10><div align=center><font size=2 face=$v_font>|</font></div></td>";
}
//echo "<td>&nbsp</td>";
echo "</tr></table></td>";
echo "<td width=2></td>";
switch ($g_pcl_trace_entries[$i][type]) {
case 1:
echo "<td><font size=2 face=$v_font>".$g_pcl_trace_entries[$i][name]."(".$g_pcl_trace_entries[$i][param].")</font></td>";
break;
case 2:
echo "<td><font size=2 face=$v_font>".$g_pcl_trace_entries[$i][name]."()=".$g_pcl_trace_entries[$i][param]."</font></td>";
break;
case 3:
case 4:
echo "<td><table width=100% border=0 cellspacing=0 cellpadding=0><td width=20></td><td>";
echo "<font size=2 face=$v_font>".$g_pcl_trace_entries[$i][message]."</font>";
echo "</td></table></td>";
break;
default:
echo "<td><font size=2 face=$v_font>".$g_pcl_trace_entries[$i][name]."(".$g_pcl_trace_entries[$i][param].")</font></td>";
}
echo "</tr></table></td>";
echo "<td width=5></td>";
echo "<td><font size=1 face=$v_font>".basename($g_pcl_trace_entries[$i][file])."</font></td>";
echo "<td width=5></td>";
echo "<td><font size=1 face=$v_font>".$g_pcl_trace_entries[$i][line]."</font></td>";
echo "</tr>";
}
// ----- Content footer
echo "</table>";
// ----- Trace footer
echo "</td>";
echo "<td bgcolor=#0000CC width=1>";
echo "</td>";
echo "</tr>";
echo "<tr bgcolor=#0000CC>";
echo "<td bgcolor=#0000CC width=1>";
echo "</td>";
echo "<td><div align=center><font color=#FFFFFF face=$v_font>&nbsp</font></div></td>";
echo "</tr>";
echo "</table>";
}
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// Function : PclTraceAction()
// Description :
// Parameters :
// --------------------------------------------------------------------------------
function PclTraceAction($p_entry)
{
global $g_pcl_trace_level;
global $g_pcl_trace_mode;
global $g_pcl_trace_filename;
global $g_pcl_trace_name;
global $g_pcl_trace_index;
global $g_pcl_trace_entries;
if ($g_pcl_trace_mode == "normal")
{
for ($i=0; $i<$p_entry[index]; $i++)
echo "---";
if ($p_entry[type] == 1)
echo "<b>".$p_entry[name]."</b>(".$p_entry[param].") : ".$p_entry[message]." [".$p_entry[file].", ".$p_entry[line]."]<br>";
else if ($p_entry[type] == 2)
echo "<b>".$p_entry[name]."</b>()=".$p_entry[param]." : ".$p_entry[message]." [".$p_entry[file].", ".$p_entry[line]."]<br>";
else
echo $p_entry[message]." [".$p_entry[file].", ".$p_entry[line]."]<br>";
}
}
// --------------------------------------------------------------------------------
// ----- End of double include look
}

File diff suppressed because it is too large Load Diff

@ -0,0 +1,286 @@
<?php
// from elfinder;
class imageGdBMP{
public static function load($filename){
$fp = fopen($filename, "rb");
if ($fp === false){
return false;
}
$bmp = self::loadFromStream($fp);
fclose($fp);
return $bmp;
}
public static function loadFromStream($stream){
$buf = fread($stream, 14); //2+4+2+2+4
if ($buf === false){
return false;
}
if ($buf[0] != 'B' || $buf[1] != 'M'){
return false;
}
$bitmapHeader = unpack(
"vtype/".
"Vsize/".
"vreserved1/".
"vreserved2/".
"Voffbits", $buf
);
return self::loadFromStreamAndFileHeader($stream, $bitmapHeader);
}
public static function loadFromStreamAndFileHeader($stream, array $bitmapHeader){
if ($bitmapHeader["type"] != 0x4d42){
return false;
}
$buf = fread($stream, 4);
if ($buf === false){
return false;
}
list(,$header_size) = unpack("V", $buf);
if ($header_size == 12){
$buf = fread($stream, $header_size - 4);
if ($buf === false){
return false;
}
extract(unpack(
"vwidth/".
"vheight/".
"vplanes/".
"vbit_count", $buf
));
$clr_used = $clr_important = $alpha_mask = $compression = 0;
$red_mask = 0x00ff0000;
$green_mask = 0x0000ff00;
$blue_mask = 0x000000ff;
} else if (124 < $header_size || $header_size < 40) {
return false;
} else {
$buf = fread($stream, 36);
if ($buf === false){
return false;
}
extract(unpack(
"Vwidth/".
"Vheight/".
"vplanes/".
"vbit_count/".
"Vcompression/".
"Vsize_image/".
"Vx_pels_per_meter/".
"Vy_pels_per_meter/".
"Vclr_used/".
"Vclr_important", $buf
));
if ($width & 0x80000000){ $width = -(~$width & 0xffffffff) - 1; }
if ($height & 0x80000000){ $height = -(~$height & 0xffffffff) - 1; }
if ($x_pels_per_meter & 0x80000000){ $x_pels_per_meter = -(~$x_pels_per_meter & 0xffffffff) - 1; }
if ($y_pels_per_meter & 0x80000000){ $y_pels_per_meter = -(~$y_pels_per_meter & 0xffffffff) - 1; }
if ($bitmapHeader["size"] != 0){
$colorsize = $bit_count == 1 || $bit_count == 4 || $bit_count == 8 ? ($clr_used ? $clr_used : pow(2, $bit_count))<<2 : 0;
$bodysize = $size_image ? $size_image : ((($width * $bit_count + 31) >> 3) & ~3) * abs($height);
$calcsize = $bitmapHeader["size"] - $bodysize - $colorsize - 14;
if ($header_size < $calcsize && 40 <= $header_size && $header_size <= 124){
$header_size = $calcsize;
}
}
if ($header_size - 40 > 0){
$buf = fread($stream, $header_size - 40);
if ($buf === false){
return false;
}
extract(unpack(
"Vred_mask/".
"Vgreen_mask/".
"Vblue_mask/".
"Valpha_mask", $buf . str_repeat("\x00", 120)
));
} else {
$alpha_mask = $red_mask = $green_mask = $blue_mask = 0;
}
if (
($bit_count == 16 || $bit_count == 24 || $bit_count == 32)&&
$compression == 0 &&
$red_mask == 0 && $green_mask == 0 && $blue_mask == 0
){
switch($bit_count){
case 16:
$red_mask = 0x7c00;
$green_mask = 0x03e0;
$blue_mask = 0x001f;
break;
case 24:
case 32:
$red_mask = 0x00ff0000;
$green_mask = 0x0000ff00;
$blue_mask = 0x000000ff;
break;
}
}
}
if (
($width == 0)||
($height == 0)||
($planes != 1)||
(($alpha_mask & $red_mask ) != 0)||
(($alpha_mask & $green_mask) != 0)||
(($alpha_mask & $blue_mask ) != 0)||
(($red_mask & $green_mask) != 0)||
(($red_mask & $blue_mask ) != 0)||
(($green_mask & $blue_mask ) != 0)
){
return false;
}
if ($compression == 4 || $compression == 5){
$buf = stream_get_contents($stream, $size_image);
if ($buf === false){
return false;
}
return imagecreatefromstring($buf);
}
$line_bytes = (($width * $bit_count + 31) >> 3) & ~3;
$lines = abs($height);
$y = $height > 0 ? $lines-1 : 0;
$line_step = $height > 0 ? -1 : 1;
if ($bit_count == 1 || $bit_count == 4 || $bit_count == 8){
$img = imagecreate($width, $lines);
$palette_size = $header_size == 12 ? 3 : 4;
$colors = $clr_used ? $clr_used : pow(2, $bit_count);
$palette = array();
for($i = 0; $i < $colors; ++$i){
$buf = fread($stream, $palette_size);
if ($buf === false){
imagedestroy($img);
return false;
}
extract(unpack("Cb/Cg/Cr/Cx", $buf . "\x00"));
$palette[] = imagecolorallocate($img, $r, $g, $b);
}
$shift_base = 8 - $bit_count;
$mask = ((1 << $bit_count) - 1) << $shift_base;
if ($compression == 1 || $compression == 2){
$x = 0;
$qrt_mod2 = $bit_count >> 2 & 1;
for(;;){
if ($x < -1 || $x > $width || $y < -1 || $y > $height){
imagedestroy($img);
return false;
}
$buf = fread($stream, 1);
if ($buf === false){
imagedestroy($img);
return false;
}
switch($buf){
case "\x00":
$buf = fread($stream, 1);
if ($buf === false){
imagedestroy($img);
return false;
}
switch($buf){
case "\x00": //EOL
$y += $line_step;
$x = 0;
break;
case "\x01": //EOB
$y = 0;
$x = 0;
break 3;
case "\x02": //MOV
$buf = fread($stream, 2);
if ($buf === false){
imagedestroy($img);
return false;
}
list(,$xx, $yy) = unpack("C2", $buf);
$x += $xx;
$y += $yy * $line_step;
break;
default:
list(,$pixels) = unpack("C", $buf);
$bytes = ($pixels >> $qrt_mod2) + ($pixels & $qrt_mod2);
$buf = fread($stream, ($bytes + 1) & ~1);
if ($buf === false){
imagedestroy($img);
return false;
}
for ($i = 0, $pos = 0; $i < $pixels; ++$i, ++$x, $pos += $bit_count){
list(,$c) = unpack("C", $buf[$pos >> 3]);
$b = $pos & 0x07;
imagesetpixel($img, $x, $y, $palette[($c & ($mask >> $b)) >> ($shift_base - $b)]);
}
break;
}
break;
default:
$buf2 = fread($stream, 1);
if ($buf2 === false){
imagedestroy($img);
return false;
}
list(,$size, $c) = unpack("C2", $buf . $buf2);
for($i = 0, $pos = 0; $i < $size; ++$i, ++$x, $pos += $bit_count){
$b = $pos & 0x07;
imagesetpixel($img, $x, $y, $palette[($c & ($mask >> $b)) >> ($shift_base - $b)]);
}
break;
}
}
} else {
for ($line = 0; $line < $lines; ++$line, $y += $line_step){
$buf = fread($stream, $line_bytes);
if ($buf === false){
imagedestroy($img);
return false;
}
$pos = 0;
for ($x = 0; $x < $width; ++$x, $pos += $bit_count){
list(,$c) = unpack("C", $buf[$pos >> 3]);
$b = $pos & 0x7;
imagesetpixel($img, $x, $y, $palette[($c & ($mask >> $b)) >> ($shift_base - $b)]);
}
}
}
} else {
$img = imagecreatetruecolor($width, $lines);
imagealphablending($img, false);
if ($alpha_mask){
imagesavealpha($img, true);
}
//x軸進行量
$pixel_step = $bit_count >> 3;
$alpha_max = $alpha_mask ? 0x7f : 0x00;
$alpha_mask_r = $alpha_mask ? 1/$alpha_mask : 1;
$red_mask_r = $red_mask ? 1/$red_mask : 1;
$green_mask_r = $green_mask ? 1/$green_mask : 1;
$blue_mask_r = $blue_mask ? 1/$blue_mask : 1;
for ($line = 0; $line < $lines; ++$line, $y += $line_step){
$buf = fread($stream, $line_bytes);
if ($buf === false){
imagedestroy($img);
return false;
}
$pos = 0;
for ($x = 0; $x < $width; ++$x, $pos += $pixel_step){
list(,$c) = unpack("V", substr($buf, $pos, $pixel_step). "\x00\x00");
$a_masked = $c & $alpha_mask;
$r_masked = $c & $red_mask;
$g_masked = $c & $green_mask;
$b_masked = $c & $blue_mask;
$a = $alpha_max - ((($a_masked<<7) - $a_masked) * $alpha_mask_r);
$r = (($r_masked<<8) - $r_masked) * $red_mask_r;
$g = (($g_masked<<8) - $g_masked) * $green_mask_r;
$b = (($b_masked<<8) - $b_masked) * $blue_mask_r;
imagesetpixel($img, $x, $y, ($a<<24)|($r<<16)|($g<<8)|$b);
}
}
imagealphablending($img, true);
}
return $img;
}
}

@ -0,0 +1,4 @@
<?php
class ConfigModel extends Model{
}

@ -0,0 +1,191 @@
<?php
class pluginModel{
var $in;
var $config;
function __construct(){
global $config, $in;
//parent::__construct();
$this -> in = &$in;
$this -> config = &$config;
}
public function loadData(){
if(!isset($this->config['settingSystem']['pluginList'])){
$this->config['settingSystem']['pluginList'] = array();
$this->initDefaultPlugin();//首次,加载并开启默认插件
}
return $this->config['settingSystem']['pluginList'];
}
public function saveData(){
$settingFile = USER_SYSTEM.'system_setting.php';
FileCache::save($settingFile,$this->config['settingSystem']);
}
private function initDefaultPlugin(){
$this->pluginScan();
$list = $this->loadData();
foreach ($list as $app => $val) {
$this->changeStatus($app,1);
}
}
/**
* 加载所有插件hook;
*/
public function init(){
$pluginList = $this->loadData();
foreach ($pluginList as $key=>$item) {
if(!is_array($item) && isset($item['id'])){
continue;
}
$file = PLUGIN_DIR.$item['id'].'/app.php';
if( !$item['status'] || !is_file($file)) {
continue;
}
if(!$this->checkAuth($item['id'])){
continue;
}
foreach ($item['regiest'] as $tag => $action) {
Hook::bind($tag,$action);
}
}
//执行全局插件绑定
Hook::trigger("globalRequest");
Hook::trigger(ST.'.'.ACT);
}
public function checkAuth($app){
$pluginList = $this->loadData();
if( !isset($pluginList[$app]) ||
!$pluginList[$app]['status']){
show_tips("Not exist or disabled!");
}
if( !isset($pluginList[$app]['config']['pluginAuth']) ){
return true;
}
$auth = $pluginList[$app]['config']['pluginAuth'];
if(plugin_check_auth($app,$auth)){
return true;
}else{
return false;
}
}
public function add($app){
if( !file_exists(PLUGIN_DIR.$app.'/package.json') ||
!file_exists(PLUGIN_DIR.$app.'/app.php')){
return;
}
Hook::apply($app.'Plugin.regiest');
$this->saveData();
}
public function remove($app){
$pluginList = &$this->config['settingSystem']['pluginList'];
unset($pluginList[$app]);
if( file_exists(PLUGIN_DIR.$app)){
Hook::apply($app.'Plugin.unInstall');
}
$this->saveData();
return true;
}
/**
* 切换插件启用关闭状态
* @param [type] $app 插件名
* @param [type] $open 开关状态 0-禁用1-启用
* @return
*/
public function changeStatus($app,$open){
$pluginList = &$this->config['settingSystem']['pluginList'];
if(is_array($pluginList[$app])){
if($open){
$config = $this->getConfig($app);
$default = $this->getConfigDefault($app);
$config = array_merge($default,$config);//保存初始配置;兼容新增默认配置
Hook::apply($app.'Plugin.regiest');
$this->setConfig($app,$config);
}
$pluginList[$app]['status'] = $open;
}
$this->saveData();
}
public function getConfigDefault($app){
$result = array();
$json = $this->getPackageJson($app);
if(!$json && is_array($json['configItem'])){
return $result;
}
foreach($json['configItem'] as $key=>$item) {
if(!isset($item['value']) ||
isset($result[$key]) ){
continue;
}
$result[$key] = $item['value'];
}
return $result;
}
public function getPackageJson($app){
return Hook::apply($app.'Plugin.appPackage');
}
public function getConfig($app){
$result = array();
$pluginList = &$this->config['settingSystem']['pluginList'];
if( isset($pluginList[$app]) &&
is_array($pluginList[$app]['config']) ){
$result = $pluginList[$app]['config'];
}
if(!$result){
$result = $this->getConfigDefault($app);
}
return $result;
}
public function setConfig($app,$value){
$pluginList = &$this->config['settingSystem']['pluginList'];
if(isset($pluginList[$app])){
foreach ($value as $key => $val) {
$pluginList[$app]['config'][$key] = $val;
}
}
$this->saveData();
}
/**
* 遍历查检目录;自动加载插件;
* @return [type] [description]
*/
public function pluginScan(){
$pluginList = &$this->config['settingSystem']['pluginList'];
recursion_dir(PLUGIN_DIR,$dirs,$files,0);
foreach ($dirs as $path) {
$app = get_path_this($path);
if(isset($pluginList[$app])){
continue;
}
if( !file_exists($path.'/package.json') ||
!file_exists($path.'/app.php')){
continue;
}
Hook::apply($app.'Plugin.regiest');
}
$this->saveData();
}
public function viewList(){
$this->pluginScan();
$list = $this->loadData();
$result = array();
foreach ($list as $key => $item) {
if(!plugin_check_allow($key)){
continue;
}
unset($item['regiest']);
$package = Hook::apply($item['id'].'Plugin.appPackage');
if(is_array($package)){
$result[$key] = array_merge($item,$package);
}
}
return $result;
}
}

@ -0,0 +1,224 @@
<?php
class MyCaptcha{
var $keystring;
function __construct($length){
$alphabet = "0123456789abcdefghijklmnopqrstuvwxyz"; # do not change without changing font files!
$width = 140;
$height = 60;
$fluctuation_amplitude = $height/10;//上下起伏
$white_noise_density=1/10;//$white_noise_density=0; // no white noise
$black_noise_density=1/100;//$black_noise_density=0; // no black noise
$foreground_color = array(mt_rand(0,120), mt_rand(0,120), mt_rand(0,120));
$background_color = array(mt_rand(220,255), mt_rand(220,255), mt_rand(220,255));
$font_path = dirname(__FILE__).'/MyCaptcha_fonts/';
$fonts=array($font_path.'font_1.png',$font_path.'font_2.png',$font_path.'font_3.png');
$alphabet_length=strlen($alphabet);
do{
$this->keystring = $this->randString($length);
$font_file=$fonts[mt_rand(0, count($fonts)-1)];
$font=imagecreatefrompng($font_file);
imagealphablending($font, true);
$fontfile_width=imagesx($font);
$fontfile_height=imagesy($font)-1;
$font_metrics=array();
$symbol=0;
$reading_symbol=false;
// loading font
for($i=0;$i<$fontfile_width && $symbol<$alphabet_length;$i++){
$transparent = (imagecolorat($font, $i, 0) >> 24) == 127;
if(!$reading_symbol && !$transparent){
$font_metrics[$alphabet{$symbol}]=array('start'=>$i);
$reading_symbol=true;
continue;
}
if($reading_symbol && $transparent){
$font_metrics[$alphabet{$symbol}]['end']=$i;
$reading_symbol=false;
$symbol++;
continue;
}
}
$img=imagecreatetruecolor($width, $height);
imagealphablending($img, true);
$white=imagecolorallocate($img, 255, 255, 255);
$black=imagecolorallocate($img, 0, 0, 0);
imagefilledrectangle($img, 0, 0, $width-1, $height-1, $white);
$x=1;
$odd=mt_rand(0,1);
if($odd==0) $odd=-1;
for($i=0;$i<$length;$i++){
$m=$font_metrics[$this->keystring{$i}];
$y=(($i%2)*$fluctuation_amplitude - $fluctuation_amplitude/2)*$odd
+ mt_rand(-round($fluctuation_amplitude/3), round($fluctuation_amplitude/3))
+ ($height-$fontfile_height)/2;
$shift=1;
imagecopy($img, $font, $x-$shift, $y, $m['start'], 1, $m['end']-$m['start'], $fontfile_height);
$x+=$m['end']-$m['start']-$shift;
}
}while($x>=$width-10); // while not fit in canvas
//noise
$white=imagecolorallocate($font, 255, 255, 255);
$black=imagecolorallocate($font, 0, 0, 0);
for($i=0;$i<(($height-30)*$x)*$white_noise_density;$i++){
imagesetpixel($img, mt_rand(0, $x-1), mt_rand(10, $height-15), $white);
}
for($i=0;$i<(($height-30)*$x)*$black_noise_density;$i++){
imagesetpixel($img, mt_rand(0, $x-1), mt_rand(10, $height-15), $black);
}
$center=$x/2;
// credits. To remove, see configuration file
$img2=imagecreatetruecolor($width, $height);
$foreground=imagecolorallocate($img2, $foreground_color[0], $foreground_color[1], $foreground_color[2]);
$background=imagecolorallocate($img2, $background_color[0], $background_color[1], $background_color[2]);
imagefilledrectangle($img2, 0, 0, $width-1, $height-1, $background);
imagefilledrectangle($img2, 0, $height, $width-1, $height+12, $foreground);
$this->drawLine($img2,$width,$height);
// periods
$rand1=mt_rand(750000,1200000)/10000000;
$rand2=mt_rand(750000,1200000)/10000000;
$rand3=mt_rand(750000,1200000)/10000000;
$rand4=mt_rand(750000,1200000)/10000000;
// phases
$rand5=mt_rand(0,31415926)/10000000;
$rand6=mt_rand(0,31415926)/10000000;
$rand7=mt_rand(0,31415926)/10000000;
$rand8=mt_rand(0,31415926)/10000000;
// amplitudes
$rand9=mt_rand(330,420)/110;
$rand10=mt_rand(330,450)/100;
//wave distortion
for($x=0;$x<$width;$x++){
for($y=0;$y<$height;$y++){
$sx=$x+(sin($x*$rand1+$rand5)+sin($y*$rand3+$rand6))*$rand9-$width/2+$center+1;
$sy=$y+(sin($x*$rand2+$rand7)+sin($y*$rand4+$rand8))*$rand10;
if($sx<0 || $sy<0 || $sx>=$width-1 || $sy>=$height-1){
continue;
}else{
$color=imagecolorat($img, $sx, $sy) & 0xFF;
$color_x=imagecolorat($img, $sx+1, $sy) & 0xFF;
$color_y=imagecolorat($img, $sx, $sy+1) & 0xFF;
$color_xy=imagecolorat($img, $sx+1, $sy+1) & 0xFF;
}
if($color==255 && $color_x==255 && $color_y==255 && $color_xy==255){
continue;
}else if($color==0 && $color_x==0 && $color_y==0 && $color_xy==0){
$newred=$foreground_color[0];
$newgreen=$foreground_color[1];
$newblue=$foreground_color[2];
}else{
$frsx=$sx-floor($sx);
$frsy=$sy-floor($sy);
$frsx1=1-$frsx;
$frsy1=1-$frsy;
$newcolor=(
$color*$frsx1*$frsy1+
$color_x*$frsx*$frsy1+
$color_y*$frsx1*$frsy+
$color_xy*$frsx*$frsy
);
if($newcolor>255) $newcolor=255;
$newcolor=$newcolor/255;
$newcolor0=1-$newcolor;
$newred=$newcolor0*$foreground_color[0]+$newcolor*$background_color[0];
$newgreen=$newcolor0*$foreground_color[1]+$newcolor*$background_color[1];
$newblue=$newcolor0*$foreground_color[2]+$newcolor*$background_color[2];
}
imagesetpixel($img2, $x, $y, imagecolorallocate($img2, $newred, $newgreen, $newblue));
}
}
$this->showImage($img2);
}
public function getString(){
return $this->keystring;
}
private function randString($length){
$str = '';
$allowed_symbols = "23456789abcdegikpqsvxyz"; //without symbols (o=0, 1=l, i=j, t=f)
while(true){
$str = '';
for($i=0;$i<$length;$i++){
$str .= $allowed_symbols{mt_rand(0,strlen($allowed_symbols)-1)};
}
if(!preg_match('/cp|cb|ck|c6|c9|rn|rm|mm|co|do|cl|db|qp|qb|dp|ww/',$str)) break;
}
return $str;
}
private function frand(){
return mt_rand(0,9999)/10000;
}
private function drawLine(&$img,$width,$height){
$line_number = 5;
$color_from = 100;
for ($line = 0; $line < $line_number; ++ $line) {
$line_color = imagecolorallocate($img, mt_rand($color_from,255),
mt_rand($color_from, 255),mt_rand($color_from, 255));
$x = $width * (1 + $line) / ($line_number + 1);
$x += (0.5 - $this->frand()) * $width / $line_number;
$y = mt_rand($height * 0.1, $height * 0.9);
$theta = ($this->frand() - 0.5) * M_PI * 0.7;
$w = $width;
$len = mt_rand($w * 0.4, $w * 0.7);
$lwid = mt_rand(0, 2);
$k = $this->frand() * 0.6 + 0.2;
$k = $k * $k * 0.5;
$phi = $this->frand() * 6.28;
$step = 0.5;
$dx = $step * cos($theta);
$dy = $step * sin($theta);
$n = $len / $step;
$amp = 1.5 * $this->frand() / ($k + 5.0 / $len);
$x0 = $x - 0.5 * $len * cos($theta);
$y0 = $y - 0.5 * $len * sin($theta);
$ldx = round(- $dy * $lwid);
$ldy = round($dx * $lwid);
for ($i = 0; $i < $n; ++ $i) {
$x = $x0 + $i * $dx + $amp * $dy * sin($k * $i * $step + $phi);
$y = $y0 + $i * $dy - $amp * $dx * sin($k * $i * $step + $phi);
imagefilledrectangle($img, $x, $y, $x + $lwid, $y + $lwid,$line_color);
}
}
$allowed_symbols = "0123456789abcdefghijklmnopqrstuvwxyz";
for ($i = 0; $i < 20; $i++) {//
$char = $allowed_symbols[mt_rand(0,strlen($allowed_symbols)-1)];
$line_color = imagecolorallocate($img,
mt_rand($color_from,255),mt_rand($color_from, 255),mt_rand($color_from, 255));
imagechar($img,mt_rand(0,4),mt_rand(0,$width),rand(0,$height),$char,$line_color);
}
}
private function showImage(&$img){
ob_get_clean();
$out = ob_get_clean();//清除之前所有输出缓冲 TODO
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', FALSE);
header('Pragma: no-cache');
if(function_exists("imagejpeg")){
header("Content-Type: image/jpeg");
imagejpeg($img, null,90);//图片质量
}else if(function_exists("imagegif")){
header("Content-Type: image/gif");
imagegif($img);
}else if(function_exists("imagepng")){
header("Content-Type: image/x-png");
imagepng($img);
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -0,0 +1,91 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta http-equiv="Content-Script-Type" content="text/javascript">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0">
<meta name="renderer" content="webkit">
<link href="<?php echo STATIC_PATH;?>images/common/favicon.ico" rel="Shortcut Icon">
<link href="<?php echo STATIC_PATH;?>style/common.css?ver=<?php echo KOD_VERSION;?>" rel="stylesheet"/>
<link href="./static/style/font-awesome/css/font-awesome.css?ver=<?php echo KOD_VERSION;?>" rel="stylesheet">
<link rel="stylesheet" href="<?php echo STATIC_PATH;?>style/skin/base/app_explorer.css?ver=<?php echo KOD_VERSION;?>"/>
<link rel="stylesheet" href="<?php echo STATIC_PATH;?>style/skin/win10.css?ver=<?php echo KOD_VERSION;?>"/>
<title>File View</title>
<!--[if IE 7]>
<link rel="stylesheet" href="./static/style/font-awesome/css/font-awesome-ie7.css">
<![endif]-->
</head>
<style type="text/css">
body{background: transparent;}
.frame-main {top: 0;bottom: 0;}
.show-code{width: 100%;left: 0;margin: 0;border: none;padding: 0;}
.content-box{position: absolute;bottom: 0;top: 0;width: 100%;}
.content-box iframe{width: 100%;height: 100%;}
.content-box.markdown-preview {padding: 0;height: 100%;}
.show-code,.show-code .ace_editor{height: 100%;}
.eidior-box{width:100%;height:100%;overflow: hidden;position: relative;}
.eidior-content{position: absolute;top: 0;left: 0;bottom: 0;right: 0;}
.eidior-content .ace_editor{height:100%;}
.content-markdown {overflow: auto;height: 100%;padding: 0 20px;}
.context-menu-list.menu-zip-list-folder{display:none !important;}
.menu-zip-list-file .context-menu-item.unzip-to,
.menu-zip-list-file .context-menu-item.unzip-this,
.menu-zip-list-file .context-menu-item.info,
.menu-zip-list-file .context-menu-item.open-with,
.menu-zip-list-file .context-menu-item.context-menu-separator{display:none !important;}
.ztree li a,.ztree li a:hover,
.ztree li a.curSelectedNode, .ztree li span.name,
.ztree li a.curDropTreeNode{height:30px;line-height:30px;}
.ztree li span.tree_icon {height: 28px;width: 26px;}
.ztree li span.tree_icon .x-item-file{width: 24px;height: 24px;}
.zip-view-dialog .zip-view-content .ztree li a .menu-item-parent{width:30px;height:30px;line-height: 30px;}
</style>
<body>
<div class="full-background"></div>
<div class="init-loading"><div><img src="<?php echo STATIC_PATH;?>images/common/loading_simple.gif?v=<?php echo KOD_VERSION;?>"/></div></div>
<div class="frame-main">
<div class="bindary-box hidden">
<div class="title"><div class="ico"></div></div>
<div class="content-info">
<div class="name"></div>
<div class="size"><span></span><i class="share-time"></i></div>
<div class="btn-group">
<a type="button" class="btn btn-primary btn-download" href=""><?php echo LNG('download');?></a>
</div>
<div class="error-tips"><?php echo LNG('share_error_show_tips');?></div>
</div>
</div>
<div class="content-box"></div>
</div><!-- / frame-main end-->
<script type="text/javascript" src="<?php echo STATIC_PATH;?>js/lib/seajs/sea.js?ver=<?php echo KOD_VERSION;?>"></script>
<script type="text/javascript" src="./index.php?share/commonJs&st=api&act=view#id=<?php echo rand_string(4);?>"></script>
<?php
$path = rawurldecode($_GET['path']);
$name = get_path_this($path);
if(isset($_GET['name'])){$name = rawurldecode($_GET['name']);}
?>
<script type="text/javascript">
G.shareInfo = {
path:"<?php echo clear_html($path);?>",
name:"<?php echo clear_html($name);?>",
mtime:0,size:0
}
<?php if(ST.'.'.ACT == 'explorer.fileView'){echo "G.shareInfo.view = true;G.sharePage=undefined;";}?>
G['accessToken'] = "<?php echo access_token_get();?>";
seajs.config({
base: "<?php echo STATIC_PATH;?>js/",
preload: ["lib/jquery-1.8.0.min",'lib/ace/src-min-noconflict/ace'],
map:[[/^(.*\.(?:css|js|html|htm|json|text))([\?|#].*)$/i,'$1$2?ver='+G.version]]
});
seajs.use("<?php echo STATIC_JS;?>/src/api/view/main");
</script>
</body>
</html>

@ -0,0 +1,33 @@
<?php include(TEMPLATE.'common/header.html');?>
<title><?php echo strip_tags(LNG('kod_name')).LNG('kod_power_by');?></title>
<link rel="stylesheet" href="<?php echo STATIC_PATH;?>style/skin/base/app_setting.css?ver=<?php echo KOD_VERSION;?>"/>
<link rel="stylesheet" href="<?php echo STATIC_PATH;?>style/skin/<?php echo $config['user']['theme'];?>.css?ver=<?php echo KOD_VERSION;?>" id='link-theme-style'/>
</head>
<body>
<div id="body">
<div class="app-menu-left menu-left">
<h1><?php echo LNG('app');?></h1>
<ul class='setting'>
<a data-type="all"><i class="font-icon icon-reorder"></i><?php echo LNG('app_group_all');?></a>
<?php foreach($config['settings']['appType'] as $item){?>
<a data-type="<?php echo $item['type'];?>">
<i class="font-icon <?php echo $item['class']?>"></i><?php echo LNG($item['name']);?></a>
<?php } ?>
</ul>
</div>
<div class='app-content main'>
<div class="app-model">
<?php if($GLOBALS['isRoot']){ ?><button class="btn btn-default create-app" action='createApp'><?php echo LNG('app_create');?></button><?php } ?>
<div class='h1'><i class="font-icon icon-user"></i><?php echo LNG('app_group_all');?></div>
<ul class="app-list"></ul>
</div>
</div>
</div>
<?php include(TEMPLATE.'common/footerCommon.html');?>
<script type="text/javascript">
seajs.use('app/src/app/main');
</script>
</body>
</html>

@ -0,0 +1,26 @@
<div class="common-footer aero">
<?php
$settings = $GLOBALS['config']['settings'];
$settingSystem = $GLOBALS['config']['settingSystem'];
$copyrightInfo = LNG('copyright_info',APP_HOST);
if(is_wap()){
echo '<span class="pr-10"><a href="javascript:void(0);" forceWap="1">'.LNG('wap_page_phone').'</a> | '.
'<a href="javascript:void(0);" forceWap="0">'.LNG('wap_page_pc').'</a></span> ';
echo $copyrightInfo.' v'.KOD_VERSION;
}else{
echo '<span class="copyright-content">';
if(isset($settings['copyright'])){
echo $settings['copyright'];
}else{
echo LNG('copyright_pre').' v'.KOD_VERSION.' | '.$copyrightInfo;
}
echo '<a href="javascript:core.copyright();" class="icon-info-sign copyright-bottom pl-5"></a>';
if(isset($settingSystem['globalIcp'])){
echo "&nbsp;&nbsp; ".$settingSystem['globalIcp'];
}
echo '</span>';
}
?>
</div>
<!-- https://getfirebug.com/firebuglite -->
<?php include(TEMPLATE.'common/footerCommon.html');?>

@ -0,0 +1,44 @@
<script type="text/javascript" src="<?php echo STATIC_PATH;?>js/lib/seajs/sea.js?ver=<?php echo KOD_VERSION;?>"></script>
<?php
//commonjs
if(ST == 'share' || isset($GLOBALS['loadCommonJs'])){
if(isset($_GET['user'])){
$userInfo = '&user='.clear_html($_GET['user']).'&sid='.clear_html($_GET['sid']);
}else{//login...
$userInfo = "";
}
echo '<script type="text/javascript" src="./index.php?share/commonJs&st='.ST.'&act='.ACT.$userInfo.'#id='.rand_string(4).'"></script>';
}else{
echo '<script type="text/javascript" src="./index.php?user/commonJs&st='.ST.'&act='.ACT.'#id='.rand_string(4).'"></script>';
}
$settings = $GLOBALS['config']['settings'];
$settingSystem = $GLOBALS['config']['settingSystem'];
if(isset($settings['globalJs'])){
echo "\n ".'<script type="text/javascript" id="settings-global-js">'.$settings['globalJs'].'</script>';
}
if(isset($settings['globalCss'])){
echo "\n ".'<style type="text/css" id="settings-global-css">'.$settings['globalCss'].'</style>';
}
if(isset($settingSystem['globalCss'])){
echo "\n ".'<style type="text/css" id="setting-system-global-css">'.$settingSystem['globalCss'].'</style>';
}
if(isset($settingSystem['globalHtml'])){
echo "\n ".$settingSystem['globalHtml']."\n";
}
?>
<script type="text/javascript">
<?php
if(defined('INSTALL_CHANNEL')){
echo "var installChannel='".INSTALL_CHANNEL."';\n";
}
?>
seajs.config({
base: "<?php echo STATIC_PATH;?>js/",
preload: ["lib/jquery-1.8.0.min"],
map:[[/^(.*\.(?:css|js|html|htm|json|text))([\?|#].*)$/i,'$1$2?ver='+G.version]]
});
if(navigator.serviceWorker){navigator.serviceWorker.register('./?share/manifestJS');}
</script>
<?php Hook::trigger('templateCommonFooter');?>

@ -0,0 +1,39 @@
<?php Hook::trigger('templateCommonHeaderStart'); ?>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta http-equiv="Content-Script-Type" content="text/javascript">
<meta http-equiv="Cache-Control" content="no-transform">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0">
<meta name="renderer" content="webkit">
<meta name="description" itemprop="description" content="<?php echo LNG('kod_meta_description');?>">
<meta name="keywords" content="<?php echo LNG('kod_meta_keywords');?>" />
<meta name="generator" content="<?php echo LNG('kod_meta_name').' '.KOD_VERSION;?>"/>
<meta name="author" content="<?php echo LNG('kod_meta_name');?>" />
<meta name="copyright" content="<?php echo LNG('kod_meta_copyright');?>" />
<meta itemprop="image" content="<?php echo STATIC_PATH;?>images/common/ico.png?ver=<?php echo KOD_VERSION;?>" />
<link href="<?php echo STATIC_PATH;?>images/common/ico.png?ver=<?php echo KOD_VERSION;?>" rel="Shortcut Icon" type="image/x-icon">
<link href="<?php echo STATIC_PATH;?>images/common/ico.png?ver=<?php echo KOD_VERSION;?>" rel="icon" type="image/x-icon">
<link href="<?php echo STATIC_PATH;?>style/common.css?ver=<?php echo KOD_VERSION;?>" rel="stylesheet"/>
<link href="./static/style/font-awesome/css/font-awesome.css?ver=<?php echo KOD_VERSION;?>" rel="stylesheet">
<link href="./?share/manifest" rel="manifest" />
<!--[if IE 7]>
<link rel="stylesheet" href="./static/style/font-awesome/css/font-awesome-ie7.css">
<![endif]-->
<?php
Hook::trigger('templateCommonHeader');
function pageBackground(){
$arr = explode(',',$GLOBALS['config']['settingSystem']['wallpageLogin']);
$background = $arr[mt_rand(0,count($arr)-1)];
if(!$background){
$background = 'linear-gradient(160deg, #5648c1, #6fe3e7)';
}else if(!strstr($background,'/')){
$background = "url('./static/images/wall_page/{$background}.jpg')";
}else{
$background = "url('{$background}')";
}
return "<style type='text/css'>.aero:before,.aero:after,.background{background-color:#bbb;background-image:{$background};}</style>\n";
}
?>

@ -0,0 +1,118 @@
<div class="full-background"></div>
<div class="init-loading">
<div><img src="<?php echo STATIC_PATH;?>images/common/loading_simple.gif?v=<?php echo KOD_VERSION;?>"/></div>
</div>
<div class="topbar aero">
<div class="content">
<button class="btn btn-wap-menu hidden"
data-toggle="collapse" data-target="#top-menu-left"
><i class="font-icon icon-reorder"></i></button>
<div class="top-left collapse" id="top-menu-left">
<?php
$config = $GLOBALS['config'];
$html = '<a href="./" class="topbar-menu title">';
$subMenu = '';
$isWap = is_wap();
if(substr(LNG('kod_name'),0,4) == '<img'){
$html .= LNG('kod_name').'</a>';
}else{
$html .= '<i class="icon-cloud"></i>'.LNG('kod_name').'</a>';
}
foreach ($config['settingSystem']['menu'] as $key=>$value) {
if ($value['use']!='1') continue;
$has = ST==$value['name']?'this':'';
$target = " target='_self'" ;
if($value['target']=='1' || $value['target'] == '_blank'){
$target = " target='_blank'" ;
}
$name = rawurldecode($value['name']);
if(LNG('ui_'.$name) != 'ui_'.$name){
$name = "<i class='font-icon menu-".$name."'></i><span>".LNG('ui_'.$name).'</span>';
}else if($value['icon']){
$name = $value['icon'].'<span>'.LNG($name).'</span>';
}else if(!strstr($name,'<') && $value['subMenu']){
$name = "<i class='font-icon words'><em>".$name."</em></i><span>".LNG($name).'</span>';
}
if($value['subMenu'] && !$isWap){
$subMenu .= "<li><a class='topbar-menu-sub ".$has."' href='".urldecode($value['url'])."'"
.$target.">".urldecode($name)."</a></li>";
}else{
$html .= "<a class='topbar-menu ".$has."' href='".urldecode($value['url'])."'"
.$target.">".urldecode($name)."</a>";
}
}
echo $html;
?>
<?php if($subMenu){?>
<div class="menu-group fl">
<a class="topbar-menu" id="topbar-submenu"
data-toggle="dropdown" href="#" title="<?php echo LNG('menu_sub_menu');?>">
<i class="icon-th-large"></i>
</a>
<ul class="dropdown-menu topbar-submenu pull-left animated menuShow" role="menu" aria-labelledby="topbar-submenu">
<?php echo $subMenu;?>
</ul>
</div>
<?php } ?>
</div>
<div class="top-right">
<?php if(!isset($config['settings']['language'])){ ?>
<div class="menu-group">
<a id='topbar-language' data-toggle="dropdown" href="#" class="topbar-menu">
<i class='font-icon icon-flag'></i>&nbsp;<b class="caret"></b>
</a>
<ul class="dropdown-menu topbar-language pull-right animated menuShow" role="menu" aria-labelledby="topbar-language">
<?php
$tpl = "";
foreach ($config['settingAll']['language'] as $key => $value) {
$name = $value[0];
$select = I18n::getType() == $key ? "this":"";
$tpl .= "<li><a href='javascript:core.language(\"{$key}\");' title=\"{$key}/{$value[1]}/{$value[2]}\" class='{$select}'><i class='lang-flag flag-{$key}'></i>{$name}</a></li>";
}
echo $tpl;
?>
</ul>
</div>
<?php } ?>
<!-- 全局设置语言则不再显示 -->
<div class="menu-group">
<a href="#" id='topbar-user' data-toggle="dropdown" class="topbar-menu">
<i class="font-icon icon-user"></i>
<?php
$user = $_SESSION['kodUser'];
$name = $user['nickName']?$user['nickName']:$user['name'];
echo clear_html($name);
?>&nbsp;
<b class="caret"></b>
</a>
<ul class="dropdown-menu menu-topbar-user pull-right animated menuShow" role="menu" aria-labelledby="topbar-user">
<?php if($GLOBALS['isRoot']){ ?>
<li class="menu-system-setting"><a href="#" onclick="core.setting('system');"><i class="font-icon icon-cog"></i><?php echo LNG('system_setting');?></a></li>
<?php } ?>
<?php if($GLOBALS['isRoot'] || $GLOBALS['auth']['systemMember.get']){ ?>
<li class="menu-system-group"><a href="#" onclick="core.setting('member');"><i class="font-icon icon-group"></i><?php echo LNG('setting_member');?></a></li>
<?php } ?>
<?php if($GLOBALS['isRoot'] || $GLOBALS['auth']['pluginApp.index']){ ?>
<li class="menu-system-plugin">
<a href="#" onclick="core.openWindowBig('./index.php?pluginApp/index','<?php echo LNG('PluginCenter');?>');"><i class="font-icon icon-puzzle-piece"></i><?php echo LNG('PluginCenter');?></a></li>
<li role="presentation" class="divider"></li>
<?php } ?>
<li class="menu-system-user"><a href="#" onclick="core.setting('user');"><i class="font-icon icon-user"></i><?php echo LNG('setting_user');?></a></li>
<li class="menu-system-theme"><a href="#" onclick="core.setting('theme');"><i class="font-icon icon-dashboard"></i><?php echo LNG('setting_theme');?></a></li>
<li class="menu-system-full"><a href="#" onclick="core.fullScreen();"><i class="font-icon icon-fullscreen"></i><?php echo LNG('full_screen');?></a></li>
<li class="menu-system-help"><a href="#" onclick="core.setting('help');"><i class="font-icon icon-question"></i><?php echo LNG('setting_help');?></a></li>
<li class="menu-system-about"><a href="#" onclick="core.setting('about');"><i class="font-icon icon-info-sign"></i><?php echo LNG('setting_about');?></a></li>
<li role="presentation" class="divider"></li>
<li class="menu-system-logout"><a href="./index.php?user/logout"><i class="font-icon icon-signout"></i><?php echo LNG('ui_logout');?></a></li>
</ul>
</div>
</div>
<div style="clear:both"></div>
</div>
</div>

@ -0,0 +1,67 @@
<div class="full-background"></div>
<div class="init-loading"><div>
<img src="<?php echo STATIC_PATH;?>images/common/loading_simple.gif?v=<?php echo KOD_VERSION;?>"/></div>
</div>
<div class="topbar share-page-topbar">
<div class="content">
<div class="top-left">
<a href="./" class="topbar-menu title">
<?php
if(substr(LNG('kod_name'),0,4) == '<img'){
echo LNG('kod_name');
}else{
echo '<i class="icon-cloud"></i>'.LNG('kod_name');
}
?>
</a>
<div class="share-info">
<span class="share-title">
<b class="share-title-info">
<?php clear_html($shareInfo['showName']);?>
</b>
</span>
<span class="size"></span>
<span class="time"></span>
</div>
<div style="clear:both;"></div>
</div>
<div class="top-right">
<div class="share-info-user hidden menu-group" style="z-index:9999;">
<span class="info"></span>
<div class="btn-group">
<a type="button" class="btn btn-primary btn-download" target="_blank" href=""><?php echo LNG('download');?></a>
</div>
</div>
<?php if(!isset($config['settings']['language'])){ ?>
<div class="menu-group">
<a id='topbar-language' data-toggle="dropdown" href="#" class="topbar-menu">
<i class='font-icon icon-flag'></i>&nbsp;<b class="caret"></b>
</a>
<a href="#" onclick="core.qrcode(window.location.href);" title="<?php echo LNG('qrcode');?>" class="topbar-menu" style="padding: 0 15px;margin-left: -2px;">
<i class="font-icon icon-qrcode"></i>
</a>
<ul class="dropdown-menu topbar-language pull-right animated menuShow" role="menu" aria-labelledby="topbar-language">
<?php
$tpl = "";
foreach ($config['settingAll']['language'] as $key => $value) {
$name = $value[0];
$select = I18n::getType() == $key ? "this":"";
$tpl .= "<li><a href='javascript:core.language(\"{$key}\");' title=\"{$key}/{$value[1]}/{$value[2]}\" class='{$select}'><i class='lang-flag flag-{$key}'></i>{$name}</a></li>";
}
echo $tpl;
?>
</ul>
</div>
<?php } ?>
<div class="menu-group">
<a href="#" id='topbar-user' class="topbar-menu" data-toggle="dropdown"><i class="font-icon icon-user"></i><?php echo $_SESSION['kodUser']['name'];?>&nbsp;<b class="caret"></b></a>
<ul class="dropdown-menu menu-topbar-user pull-right animated menuShow" role="menu" aria-labelledby="topbar-user">
<li><a href="#" onclick="core.fullScreen();"><i class="font-icon icon-fullscreen"></i><?php echo LNG('full_screen');?></a></li>
<li class="version_vip_free"><a href="http://kodcloud.com" target="_blank"><i class="font-icon icon-code-fork"></i><?php echo LNG('ui_project_home');?></a></li>
</ul>
</div>
</div>
<div style="clear:both"></div>
</div>
</div>

@ -0,0 +1,103 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<link href="<?php echo STATIC_PATH;?>style/common.css?ver=<?php echo KOD_VERSION;?>" rel="stylesheet"/>
<link href="./static/style/font-awesome/css/font-awesome.css?ver=<?php echo KOD_VERSION;?>" rel="stylesheet">
<title><?php echo $title;?></title>
<script type="text/javascript" src="<?php echo STATIC_PATH;?>js/lib/jquery-1.8.0.min.js?ver=<?php echo KOD_VERSION;?>"></script>
<style type="text/css">
body{
background-color:#f0f2f5;
font-family: Verdana,"Lantinghei SC","Hiragino Sans GB","Microsoft Yahei",Helvetica,arial,sans-serif;
line-height: 1.5em;
}
body a,body a:hover{color: #1890ff;}
.body-panel{
width:70%;margin:10% auto 5% auto;
font-size: 13px;
color:#666;
background:#fff;border-radius:4px;
padding-top:50px;padding-bottom:100px;
box-shadow: 0 5px 20px rgba(0,0,0,0.05);
}
.body-panel .check-result{text-align: center;color:#000;}
.body-panel .check-result .icon{width:70px;height:70px;line-height:70px;font-size:30px;}
.check-result-title{font-size: 24px;line-height: 32px;margin:20px 0;}
.check-result-desc{
color: #333;
margin: 0 0 20px 0;
background: #fafafa;
font-size: 16px;
width: 80%;
margin: 0 auto;
border-radius: 2px;
padding: 24px 40px;
text-align: left;
}
.error-info{
border-left: 5px solid #1890ff;
display: block;
padding: 5px 10px;
background: #fcfcfc;
color: #666;
word-break: break-all;
font-family: monospace;
}
.location-to{padding: 10px 0;color: #888;font-size: 13px;font-style: italic;}
.icon{
font-family: FontAwesome;
display: inline-block;
width: 20px;
height: 20px;
background: rgba(0, 0, 0, 0.02);
text-align: center;
color: #666;
border-radius: 50%;
line-height: 20px;
font-size: 12px;
}
.icon.icon-loading{
-webkit-animation: moveCircleLoopRight 1.4s infinite linear;
animation: moveCircleLoopRight 1.4s infinite linear;
}
.icon.icon-loading:before{content:"\f110";}
.icon.icon-success{background:#52c41a;color:#fff;}
.icon.icon-success:before{content:"\f00c";}
.icon.icon-error{background:#f5222d;color:#fff;}
.icon.icon-error:before{content:"\f00d";}
</style>
</head>
<body>
<div class="body-panel">
<div class="check-result">
<!-- <div class="icon icon-error"></div> -->
<div class="check-result-title"><?php echo $title;?></div>
<div class="check-result-desc">
<span class="error-info"><?php echo $message;?></span>
<div class="location-to"><?php echo $info;?></div>
</div>
</div>
</div>
<?php if($url){ ?>
<script>
var timeout = parseInt("<?php echo $time;?>");
var link = "<?php echo $url;?>";
var loop = setInterval(function(){
timeout --;
var info = timeout + "s 后自动跳转, <a href='"+link+"'>立即跳转</a>";
$('.location-to').html(info);
if(timeout<=0){
clearInterval(loop);
window.location.href = link;
}
},1000);
</script>
<?php } ?>
</body>
</html>

@ -0,0 +1,55 @@
<?php include(TEMPLATE.'common/header.html');?>
<title><?php echo LNG('ui_desktop').' - '.strip_tags(LNG('kod_name')).LNG('kod_power_by');?></title>
<link rel="stylesheet" href="<?php echo STATIC_PATH;?>style/skin/base/app_desktop.css?ver=<?php echo KOD_VERSION;?>"/>
<link rel="stylesheet" href="<?php echo STATIC_PATH;?>style/skin/<?php echo $config['user']['theme'];?>.css?ver=<?php echo KOD_VERSION;?>" id='link-theme-style'/>
</head>
<body style="overflow: hidden;" oncontextmenu="return core.contextmenu();" id="page-desktop">
<?php echo '<style >.aero:before,.aero:after,.full-background-wall{background-image:url('.$wall.')}</style>';?>
<div class="full-background-wall desktop"><img class="background" /></div>
<?php include(TEMPLATE.'common/navbar.html');?>
<div class='bodymain drag-upload-box desktop'>
<div class="file-continer file-list-icon hidden"></div>
</div><!-- html5拖拽上传list -->
<a href="#" class="start"></a>
<div id="taskbar" style="display:block;" class="">
<div class="taskbar-background aero"></div>
<div id="desktop"></div>
</div>
<div class="taskbar-right">
<div class="copyright dropdown-toggle"><i class="icon-info-sign"></i></div>
<div class="tab-hide-all"></div>
</div>
<div id="menuwin" class="aero">
<div id="startmenu"></div>
<ul id="programs">
<li class='setting_help'><a href="#" onclick="core.setting('help');"><?php echo LNG('setting_help');?></a></li>
<li><div id="leftspliter"></div></li>
<li class='setting_about'><a href="#" onclick="core.setting('about');"><?php echo LNG('setting_about');?></a></li>
<li class='setting_user'><a href="#" onclick="core.setting('user');"><?php echo LNG('setting_user');?></a></li>
<li class='setting_homepage'><a href="#" onclick="core.openWindow('http://kodcloud.com','<?php echo $L['my_document'];?>');">kodCloud 主页</a></li>
</ul>
<ul id="links">
<li class="icon"></li>
<li><a href="#" onclick="core.explorer('<?php echo KOD_USER_SHARE.':'.$_SESSION['kodUser']['userID'].'/';?>','<?php echo LNG('my_share');?>');"><span><?php echo LNG('my_share');?></span></a></li>
<li><a href="#" onclick="core.explorer('<?php echo MYHOME;?>/pictures','<?php echo LNG('my_picture');?>');"><span><?php echo LNG('my_picture');?></span></a></li>
<li><a href="#" onclick="core.explorer('<?php echo MYHOME;?>/music','<?php echo LNG('my_music');?>');"><span><?php echo LNG('my_music');?></span></a></li>
<li><a href="#" onclick="core.explorer('<?php echo MYHOME;?>/download','<?php echo LNG('download');?>');"><span><?php echo LNG('download');?></span></a></li>
<li><div id="rightspliter"></div></li>
<li><a href="#" onclick="core.setting('wall');"><span><?php echo LNG('setting_wall');?></span></a></li>
<li><a href="#" onclick="core.setting('fav');"><span><?php echo LNG('setting_fav');?></span></a></li>
<li><a href="#" onclick="core.setting('theme');"><span><?php echo LNG('setting_theme');?></span></a></li>
<li><a href="./index.php?user/logout" style="margin-top:70px;"><span><?php echo LNG('ui_logout');?>></span></a></li>
</ul>
</div>
<?php include(TEMPLATE.'common/footerCommon.html');?>
<script type="text/javascript">
var desktopApps = <?php echo json_encode($desktopApps);?>;
G.thisPath = G.myDesktop;
seajs.use("app/src/desktop/main");
</script>
</body>
</html>

@ -0,0 +1,90 @@
<?php include(TEMPLATE.'common/header.html');?>
<title><?php echo strip_tags(LNG('kod_name')).LNG('kod_power_by');?></title>
<link rel="stylesheet" href="<?php echo STATIC_PATH;?>style/skin/base/app_code_edit.css?ver=<?php echo KOD_VERSION;?>"/>
<link rel="stylesheet" href="<?php echo STATIC_PATH;?>style/skin/<?php echo $config['user']['theme'];?>.css?ver=<?php echo KOD_VERSION;?>" id='link-theme-style'/>
</head>
<body <?php echo $codeThemeBlack;?>>
<div class="init-loading">
<div><img src="<?php echo STATIC_PATH;?>images/common/loading_simple.gif?v=<?php echo KOD_VERSION;?>"/></div>
</div>
<div class="edit-main" style="height: 100%;" oncontextmenu="return core.contextmenu();">
<div class="tools">
<div class="left top-toolbar">
<div class="disable-mask"></div>
<a action="save" href="javascript:;" title="<?php echo LNG('button_save');?>(Ctrl-S)"><i class="font-icon icon-save"></i></a>
<a action="saveall" href="javascript:;" title="<?php echo LNG('button_save_all');?>"><i class="font-icon icon-paste"></i></a>
<span class="line"></span>
<a href="javascript:;" id="editor-history-back" title="<?php echo LNG('history_back');?>(Ctrl -)"><i class="font-icon icon-chevron-left"></i></a>
<a href="javascript:;" id="editor-history-next" title="<?php echo LNG('history_next');?>(Ctrl Shift -)"><i class="font-icon icon-chevron-right"></i></a>
<span class="line"></span>
<a action="undo" href="javascript:;" title="<?php echo LNG('undo');?>(Ctrl-Z)"><i class="font-icon icon-undo"></i></a>
<a action="redo" href="javascript:;" title="<?php echo LNG('redo');?>(Ctrl-Y)"><i class="font-icon icon-repeat"></i></a>
<a action="refresh" href="javascript:;" title="<?php echo LNG('refresh');?>(F5)"><i class="font-icon icon-refresh"></i></a>
<span class="line"></span>
<a href="javascript:;" class="toolbar-menu menu-view-goto-line" title="<?php echo LNG('gotoline');?>(Ctrl-L)"><i class="font-icon icon-pushpin"></i></a>
<a action="search" href="javascript:;" title="<?php echo LNG('search');?>(Ctrl-F)"><i class="font-icon icon-search"></i></a>
<a action="searchReplace" href="javascript:;" title="<?php echo LNG('replace');?>(Ctrl-F-F)"><i class="font-icon icon-random"></i></a>
<span class="line"></span>
<a action="font" class="toolbar-menu menu-view-font" href="javascript:;" title="<?php echo LNG('font_size');?>">
<i class="font-icon icon-font"></i><i class="font-icon icon-caret-down"></i>
</a>
<span class="line"></span>
<a class="toolbar-menu menu-view-theme" href="javascript:;" title="<?php echo LNG('code_theme');?>">
<i class="font-icon icon-magic"></i><i class="font-icon icon-caret-down"></i>
</a>
<a class="toolbar-menu menu-view-setting" href="javascript:;">
<i class="font-icon icon-cog"></i><i class="font-icon icon-caret-down"></i>
</a>
<a action="preview" href="javascript:;" title="<?php echo LNG('preview');?>(Ctrl-Shift-S)"><i class="font-icon icon-eye-open"></i></a>
</div>
<div class="right">
<button class="btn btn-xs btn-default btn-right" action="close" title="<?php echo LNG('close');?>"><i class="font-icon icon-remove"></i></button>
<button class="btn btn-xs btn-default btn-left" action="fullscreen" title="<?php echo LNG('full_screen');?>"><i class="font-icon icon-resize-full"></i></button>
</div>
<div style="clear:both"></div>
</div><!-- end tools -->
<!-- 主体部分 -->
<div class="frame-left">
<div class="edit-tab">
<div class="tabs">
<a href="javascript:Editor.add()" class="add icon-plus"></a>
<div style="clear:both"></div>
</div>
</div>
<div class="edit-body">
<div class="introduction hidden">
<button class="btn btn-default font-icon icon-remove close-item"></button>
<?php include(LANGUAGE_PATH.I18n::getType().'/edit.html');?>
<div style="clear:both"></div>
</div>
<div class="tabs"></div>
<div class="bottom-toolbar hidden">
<a class="toolbar-menu menu-view-goto-line editor_position" href="javascript:;">0:0</a>
<a class="file-mode" href="javascript:;">text</a>
<a class="toolbar-menu menu-view-file-charset " href="javascript:;">UTF-8</a>
<a class="toolbar-menu menuViewTab config-tab" href="javascript:;">Tabs:4</a>
<a class="toolbar-menu menu-view-setting config" href="javascript:;"><i class="font-icon icon-cog"></i></a>
<div style="clear:both"></div>
</div>
</div>
<div class="search-content hidden"></div>
</div>
</div>
<?php include(TEMPLATE.'common/footerCommon.html');?>
<script type="text/javascript">
G.codeConfig = <?php echo $editorConfig;?>;
G.codeThemeAll = "<?php echo $config['settingAll']['codethemeall']?>";
G.codeFontAll = "<?php echo $config['settingAll']['codefontall']?>";
seajs.config({
preload: [
"lib/jquery-1.8.0.min",
'lib/ace/src-min-noconflict/ace'
]
});
seajs.use("app/src/edit/main");
</script>
</body>
</html>

@ -0,0 +1,45 @@
<?php include(TEMPLATE.'common/header.html');?>
<title><?php echo LNG('ui_editor').' - '.strip_tags(LNG('kod_name')).LNG('kod_power_by');?></title>
<link rel="stylesheet" href="<?php echo STATIC_PATH;?>style/skin/base/app_editor.css?ver=<?php echo KOD_VERSION;?>"/>
<link rel="stylesheet" href="<?php echo STATIC_PATH;?>style/skin/<?php echo $config['user']['theme'];?>.css?ver=<?php echo KOD_VERSION;?>" id='link-theme-style'/>
</head>
<?php if(isset($_GET['project'])){?>
<style>.topbar{display: none;}.frame-header{top:0;}.frame-main{top:0px;}</style>
<?php } ?>
<body style="overflow:hidden;" oncontextmenu="return core.contextmenu();" id="page-editor">
<?php include(TEMPLATE.'common/navbar.html');?>
<div class="frame-main">
<div class="tools-left">
<a class="home" href="#" title='<?php echo LNG('root_path');?>'><i class="icon-home"></i></a>
<a class="view" href="#" title='<?php echo LNG('manage_folder');?>'><i class="icon-laptop"></i></a>
<a class="folder" href="#" title='<?php echo LNG('newfolder');?>'><i class="icon-folder-close-alt"></i></a>
<a class="file" href="#" title='<?php echo LNG('newfile');?>'><i class="icon-file-alt"></i></a>
<a class="refresh" href="#" title='<?php echo LNG('refresh');?>'><i class="icon-refresh"></i></a>
</div>
<div class='frame-left'>
<ul id="folder-list-tree" class="ztree"></ul>
</div><!-- / frame-left end-->
<div class='frame-resize'></div>
<div class='frame-right'>
<div class="frame-right-main" style="height:100%;padding:0;margin:0;">
<div class="resize-mask"></div>
<div class="message-box"><div class="content"></div></div>
<div class="menu-tree-root"></div>
<div class="menu-tree-folder"></div>
<div class="menu-tree-file"></div>
<div class ='frame'>
<iframe name="OpenopenEditor" src="./index.php?editor/edit" style="width:100%;height:100%;border:0;" frameborder=0></iframe>
</div>
</div>
</div><!-- / frame-right end-->
</div><!-- / frame-main end-->
<?php include(TEMPLATE.'common/footerCommon.html');?>
<script type="text/javascript">
G.project = "<?php echo clear_html($_GET['project']) ;?>";
seajs.use("app/src/editor/main");
</script>
</body>
</html>

@ -0,0 +1,234 @@
<div class="frame-main">
<div class='frame-left'>
<ul id="folder-list-tree" class="ztree"></ul>
<div class="bottom-box">
<div class="user-space-info"></div>
<div class="box-content">
<div class="cell menu-recycle-button"><i class="font-icon icon-trash"></i><span><?php echo LNG('recycle');?></span></div>
<div class="cell menuShareButton"><i class="font-icon icon-share-sign"></i><span><?php echo LNG('my_share');?></span></div>
<div style="clear:both"></div>
</div>
</div>
</div><!-- / frame-left end-->
<div class='frame-resize'></div>
<div class='frame-right'>
<div class="frame-header">
<div class="header-content">
<div class="header-left">
<div class="btn-group btn-group-sm">
<button class="btn btn-default" id='btn-history-back' title='<?php echo LNG('history_back');?>' type="button">
<i class="font-icon icon-angle-left"></i>
</button>
<button class="btn btn-default" id='btn-history-next' title='<?php echo LNG('history_next');?>' type="button">
<i class="font-icon icon-angle-right"></i>
</button>
</div>
</div><!-- /header left -->
<div class='header-middle'>
<button class="btn btn-default btn-left-radius ml-10" id='home' title='<?php echo LNG('root_path');?>'>
<i class="font-icon icon-home"></i>
</button>
<div id='yarnball' title="<?php echo LNG('address_in_edit');?>"></div>
<div id='yarnball-input'><input type="text" name="path" value="" class="path" id="path"/></div>
<button class="btn btn-default" id='fav' title='<?php echo LNG('add_to_fav');?>' type="button">
<i class="font-icon icon-star"></i>
</button>
<!-- <button class="btn btn-default" id='refresh' title='<?php echo LNG('refresh_all');?>' type="button">
<i class="font-icon icon-refresh"></i>
</button> -->
<button class="btn btn-default btn-right-radius" id='goto-father' title='<?php echo LNG('go_up');?>' type="button">
<i class="font-icon icon-circle-arrow-up"></i>
</button>
<div class="path-tips" title="<?php echo LNG('only_read_desc');?>" title-timeout="0">
<i class="icon-warning-sign"></i><span></span>
</div>
<div class="role-label-box"></div>
</div><!-- /header-middle end-->
<div class='header-right'>
<input type="text" name="seach" class="btn-left-radius"/>
<button class="btn btn-default btn-right-radius" id='search' title='<?php echo LNG('search');?>' type="button">
<i class="font-icon icon-search"></i>
</button>
</div>
</div>
</div><!-- / header end -->
<div class="frame-right-main">
<div class="tools">
<div class="tools-left tools-left-share <?php if(ST!='share'){echo 'hidden';}?>">
<!-- 文件功能 -->
<div class="kod-toolbar kod-toolbar-path btn-group btn-group-sm">
<button data-action='select-all' class="btn btn-default" type="button">
<i class="font-icon icon-check"></i><?php echo LNG('selectAll');?>
</button>
<button data-action='upload' class="btn btn-default" type="button">
<i class="font-icon icon-cloud-upload"></i><?php echo LNG('upload');?>
</button>
<button data-action='download' class="btn btn-default" type="button">
<i class="font-icon icon-download"></i><?php echo LNG('download');?>
</button>
</div>
<span class='msg'><?php echo LNG('path_loading');?></span>
<div class="clear"></div>
</div>
<div class="tools-left tools-left-explorer <?php if(ST=='share'){echo 'hidden';}?>">
<!-- 回收站tool -->
<div class="kod-toolbar kod-toolbar-recycle btn-group btn-group-sm hidden fl-left">
<button data-action='recycle-clear' class="btn btn-default" type="button">
<i class="font-icon icon-folder-close-alt"></i><?php echo LNG('recycle_clear');?>
</button>
</div>
<!-- 分享 tool -->
<div class="kod-toolbar kod-toolbar-share hidden fl-left">
<button data-action='refresh' class="btn btn-sm btn-default fl-left" type="button">
<i class="font-icon icon-refresh"></i><?php echo LNG('refresh');?>
</button>
<div class="select-button-show-share btn-group btn-group-sm fl-left ml-10 mr-10 hidden">
<button data-action='remove' class="btn btn-default" type="button">
<i class="font-icon icon-remove"></i><?php echo LNG('share_remove');?>
</button>
<button data-action='shareEdit' class="btn btn-default" type="button">
<i class="font-icon icon-edit"></i><?php echo LNG('share_edit');?>
</button>
<button data-action='shareOpenWindow' class="btn btn-default" type="button">
<i class="font-icon icon-link"></i><?php echo LNG('share_open_page');?>
</button>
</div>
</div>
<!-- 文件功能 -->
<div class="kod-toolbar kod-toolbar-path fl-left">
<div class="select-button-default btn-group btn-group-sm fl-left mr-10">
<button data-action='newfolder' class="btn btn-default" type="button">
<i class="font-icon icon-folder-close-alt"></i><?php echo LNG('newfolder');?>
</button>
<button data-action='newfile' class="btn btn-default tool-path-newfile" type="button">
<i class="font-icon icon-caret-down"></i>
</button>
</div>
<div class="select-button-default btn-group btn-group-sm fl-left mr-10">
<button data-action='upload' class="btn btn-default" type="button">
<i class="font-icon icon-cloud-upload"></i><?php echo LNG('upload');?>
</button>
<button data-action='upload-more' class="btn btn-default tool-path-upload" type="button">
<i class="font-icon icon-caret-down"></i>
</button>
</div>
<div class="select-button-show btn-group btn-group-sm fl-left ml-10 mr-10 hidden">
<button data-action='share' class="btn btn-default" type="button">
<i class="font-icon icon-share"></i><?php echo LNG('share');?>
</button>
<button data-action='download' class="btn btn-default" type="button">
<i class="font-icon icon-download"></i><?php echo LNG('download');?>
</button>
<button data-action='remove' class="btn btn-default" type="button">
<i class="font-icon icon-remove"></i><?php echo LNG('remove');?>
</button>
<button data-action='rname' class="btn btn-default" type="button">
<i class="font-icon icon-rename"></i><?php echo LNG('rename');?>
</button>
<button data-action='copy' class="btn btn-default" type="button">
<i class="font-icon icon-copy"></i><?php echo LNG('copy');?>
</button>
<button data-action='cute' class="btn btn-default" type="button">
<i class="font-icon icon-cute"></i><?php echo LNG('cute');?>
</button>
<button type="button" class="btn btn-default btn-sm toolbar-path-more fl-left mr-10">
<i class="font-icon icon-ellipsis-horizontal"></i>
<?php echo LNG('button_more');?>&nbsp;<span class="caret"></span>
</button>
</div>
<div class="group-space-use fl-left hidden"></div>
<div class="admin-real-path hidden fl-left">
<button type="button" class="btn btn-default btn-sm dialog-goto-path ml-10" title="<?php echo LNG('open_the_path');?>">
<i class="font-icon icon-folder-open"></i>
</button>
</div>
<span class='msg fl-left'><?php echo LNG('path_loading');?></span>
<div class="clear"></div>
</div>
</div>
<div class="tools-right">
<div class="btn-group btn-group-sm">
<button data-action='set-icon' title="<?php echo LNG('list_icon');?>" type="button" class="btn btn-default">
<i class="font-icon icon-th"></i>
</button>
<button data-action='set-list' title="<?php echo LNG('list_list');?>" type="button" class="btn btn-default">
<i class="font-icon icon-list"></i>
</button>
<button data-action='set-split' title="<?php echo LNG('list_list_split');?>" type="button" class="btn btn-default">
<i class="font-icon icon-columns"></i>
</button>
<div class="btn-group btn-group-sm menu-theme-list">
<button data-action="set-theme" title="<?php echo LNG('setting_theme');?>" type="button" class="btn btn-default btn-sm dropdown-toggle" data-toggle="dropdown">
<i class="font-icon icon-dashboard"></i>&nbsp;&nbsp;<span class="caret"></span>
</button>
<ul class="dropdown-menu pull-right dropdown-menu-theme animated menuShow">
<?php
$arr = explode(',',$config['settingAll']['themeall']);
foreach ($arr as $value) {
echo "<li class='list' theme='{$value}'><a href='javascript:void(0);'>".LNG('theme_'.$value)."</a></li>\n";
}
?>
</ul>
</div>
</div>
<div class="set-icon-size">
<span class="dropdown-toggle" data-toggle="dropdown">
<i class="font-icon icon-zoom-in"></i>
</span>
<ul class="dropdown-menu set-icon-size-slider animated menuShow">
<div class="slider-bg"></div>
<div class="slider-handle"></div>
</ul>
</div>
</div>
<div style="clear:both"></div>
</div><!-- end tools -->
<div id='list-type-header' class="hidden">
<div id="main-title">
<div class="filename" field="name"><?php echo LNG('name');?><span></span></div><div class="resize filename-resize"></div>
<div class="filetype" field="ext"><?php echo LNG('type');?><span></span></div><div class="resize filetype-resize"></div>
<div class="filesize" field="size"><?php echo LNG('size');?><span></span></div><div class="resize filesize-resize"></div>
<div class="filetime" field="mtime"><?php echo LNG('modify_time');?><span></span></div><div class="resize filetime-resize"></div>
<div style="clear:both"></div>
</div>
</div>
</div><!-- list type 列表排序方式 -->
<div class='bodymain drag-upload-box menu-body-main'>
<div class="line-split-box hidden">
<div class="split-line"></div>
<div class="split-line"></div>
<div class="split-line"></div>
<div class="split-line"></div>
<div class="split-line"></div>
<div class="split-line"></div>
<div class="split-line"></div>
<div class="split-line"></div>
<div class="split-line"></div>
<div class="split-line"></div>
</div>
<div class="file-continer"></div>
<div class="file-continer-more"></div>
</div><!-- html5拖拽上传list -->
<div class="file-select-info">
<span class="item-num"></span>
<span class="item-select"></span>
</div>
</div>
</div><!-- / frame-right end-->
</div><!-- / frame-main end-->

@ -0,0 +1,147 @@
<?php include(TEMPLATE.'common/header.html');?>
<title><?php echo LNG('ui_explorer').' - '.strip_tags(LNG('kod_name')).LNG('kod_power_by');?></title>
<link href="<?php echo STATIC_PATH;?>style/wap/app_explorer.css?ver=<?php echo KOD_VERSION;?>" rel="stylesheet"/>
</head>
<body>
<div class="init-loading"><div><img src="<?php echo STATIC_PATH;?>images/common/loading_simple.gif?v=<?php echo KOD_VERSION;?>"/></div></div>
<div class="panel-menu">
<div class="panel-hd">
<span class="my-avator">
<?php
$avatar = STATIC_PATH.'images/common/pic.jpg';
$name = $_SESSION['kodUser']['name'];
if($_SESSION['kodUser']['avatar']){
$avatar = $_SESSION['kodUser']['avatar'];
}
if($_SESSION['kodUser']['nickName']){
$name = $_SESSION['kodUser']['nickName'];
}
echo '<img src="'.$avatar.'"/>';
?>
</span>
<div><h3 class="name"><?php echo clear_html($name);?></h3></div>
</div>
<ul class="left-menu-path"></ul>
</div>
<div class="frame-main">
<div class="panel-mask"></div>
<div class="frame-header">
<div class="tool tool-menu-left">
<div class="menu"><i class="font-icon icon-reorder"></i></div>
</div>
<?php
$config = $GLOBALS['config'];
$subMenu = '';
foreach ($config['settingSystem']['menu'] as $key=>$value) {
if ($value['use']!='1') continue;
$has = ST==$value['name']?'this':'';
$target = " target='_self'" ;
if($value['target']=='1' || $value['target'] == '_blank'){
$target = " target='_blank'" ;
}
$name = $value['name'];
if(LNG('ui_'.$name) != 'ui_'.$name){
$name = "<i class='font-icon menu-".$value['name']."'></i><span>".LNG('ui_'.$name).'</span>';
}
if($value['icon']){
$name = $value['icon'].'<span>'.LNG($value['name']).'</span>';
}
$subMenu .= "<li><a class='topbar-menu-sub ".$has."' href='".urldecode($value['url'])."'"
.$target.">".urldecode($name)."</a></li>";
}
?>
<?php if($subMenu){?>
<div class="menu-group fl tool tool-submenu">
<button class="topbar-menu" id="topbar-submenu" data-toggle="dropdown">
<i class="icon-home"></i>
</button>
<ul class="dropdown-menu topbar-submenu pull-left animated menuShow" role="menu" aria-labelledby="topbar-submenu">
<?php echo $subMenu;?>
</ul>
</div>
<?php } ?>
<div class="title"><?php echo LNG('kod_name');?></div>
<div class="menu-group">
<div class="btn-list-icon"><i class="font-icon icon-home"></i></div>
</div>
</div>
<div class="address">
<ul class="yarnball"></ul>
<div style="clear: both"></div>
</div>
<div class='bodymain'>
<div class="file-continer file-list-list"></div>
</div>
<div class="file-menu">
<div class="file-action-menu hidden">
<div class="action-menu" data-action="action-copy">
<span class="content">
<i class="font-icon icon-copy"></i><?php echo LNG('copy');?>
</span>
</div>
<div class="action-menu" data-action="action-cute">
<span class="content">
<i class="font-icon icon-cut"></i><?php echo LNG('cute');?>
</span>
</div>
<div class='action-menu' data-action="action-share">
<span class="content">
<i class="font-icon icon-share"></i><?php echo LNG('share');?>
</span>
</div>
<div class='action-menu' data-action="action-rname">
<span class="content">
<i class="font-icon icon-pencil"></i><?php echo LNG('rename');?>
</span>
</div>
<div class='action-menu' data-action="action-download">
<span class="content">
<i class="font-icon icon-cloud-download"></i><?php echo LNG('download');?>
</span>
</div>
<div class='action-menu' data-action="action-info">
<span class="content">
<i class="font-icon icon-info"></i><?php echo LNG('info');?>
</span>
</div>
<div class="action-menu" data-action="action-remove">
<span class="content">
<i class="font-icon icon-trash"></i><?php echo LNG('remove');?>
</span>
</div>
<div class="menu-close">
<span class="content">
<i class="font-icon icon-ellipsis-horizontal"></i>
</span>
</div>
<div style="clear:both"></div>
</div>
</div>
<?php include(TEMPLATE.'common/footer.html');?>
</div><!-- / frame-main end-->
<div class="toolbar-menu">
<button class="menu-plus tool tool-menu-right-btn" data-toggle="dropdown"></button>
<ul class="dropdown-menu tool-menu-right pull-right animated menuShow" role="menu" >
<li data-action="upload"><a href="javascript:void();">
<i class="font-icon icon-cloud-upload"></i><?php echo LNG('upload');?></a></li>
<li data-action="newfolder"><a href="javascript:void();">
<i class="font-icon icon-folder-close-alt"></i><?php echo LNG('newfolder');?></a></li>
<li data-action="newfile"><a href="javascript:void();">
<i class="font-icon icon-file-text"></i><?php echo LNG('newfile');?></a></li>
<li data-action="past"><a href="javascript:void();">
<i class="font-icon icon-paste"></i><?php echo LNG('past');?></a></li>
<li data-action="search"><a href="javascript:void();">
<i class="font-icon icon-search"></i><?php echo LNG('search');?></a></li>
</ul>
</div>
<script type="text/javascript" >
G.thisPath = "<?php echo clear_html($dir);?>";
seajs.use("<?php echo STATIC_JS;?>/src/explorerWap/main");
</script>
</body>
</html>

@ -0,0 +1,47 @@
<?php include(TEMPLATE.'common/header.html');?>
<title><?php echo LNG('ui_explorer').' - '.strip_tags(LNG('kod_name')).LNG('kod_power_by');?></title>
<link rel="stylesheet" href="<?php echo STATIC_PATH;?>style/skin/base/app_explorer.css?ver=<?php echo KOD_VERSION;?>"/>
<link rel="stylesheet" href="<?php echo STATIC_PATH;?>style/skin/<?php echo $config['user']['theme'];?>.css?ver=<?php echo KOD_VERSION;?>" id='link-theme-style'/>
</head>
<style>
<?php if(isset($_GET['type'])){?>
.topbar,.common-footer,.bottom-box{display:none;}
.frame-header{top:0;}
.frame-main{top:0px;bottom:0px;}
.frame-main .frame-left #folder-list-tree{bottom:0px !important;}
<?php if($_GET['type']=="explorer"){?>
.frame-header .header-content .header-left{display:none;}
.frame-header .header-content .header-middle{left:12px;}
.frame-main .frame-left,.frame-main .frame-resize{display:none;}
.frame-main .frame-right{left:0px;}
.task-tab{display:none;}
<?php } ?>
<?php if($_GET['type']=="fileList"){?>
.frame-header{display:none;}
.frame-main .frame-left,.frame-main .frame-resize{display:none;}
.frame-main .frame-right{left:0px;}
.frame-main{top:0px;}
.task-tab,#set_theme,#fav,#home{display:none !important;}
.header-middle{top:3px;left:5px;right:140px;}
#list-type-header{top:35px;}
<?php } ?>
<?php } ?>
</style>
<body style="overflow:hidden;" oncontextmenu="return core.contextmenu();" id="page-explorer">
<?php include(TEMPLATE.'common/navbar.html');?>
<?php include(TEMPLATE.'explorer/content.html');?>
<?php include(TEMPLATE.'common/footer.html');?>
<script type="text/javascript">
G.thisPath = "<?php echo clear_html($dir);?>";
seajs.use("app/src/explorer/main");
</script>
</body>
</html>

@ -0,0 +1,45 @@
<?php include(TEMPLATE.'common/header.html');?>
<title><?php echo LNG('PluginCenter').' - '.strip_tags(LNG('kod_name')).LNG('kod_power_by');?></title>
<link rel="stylesheet" href="<?php echo STATIC_PATH;?>style/skin/base/app_setting.css?ver=<?php echo KOD_VERSION;?>"/>
<link rel="stylesheet" href="<?php echo STATIC_PATH;?>style/skin/<?php echo $config['user']['theme'];?>.css?ver=<?php echo KOD_VERSION;?>" id='link-theme-style'/>
</head>
<body oncontextmenu="return core.contextmenu();">
<div id="body" class="plugin-page">
<div class="app-menu-left menu-left">
<div class="search">
<div class="search-btn btn-search font-icon icon-search"></div>
<div class="search-btn btn-close font-icon icon-remove hidden"></div>
<input type="text" placeholder="<?php echo LNG('search');?>" />
</div>
<ul class='setting'>
<a data-type="install"><i class="font-icon icon-download-alt"></i><?php echo LNG('PluginInstalled');?></a>
<a data-type="update"><i class="font-icon icon-refresh"></i><?php echo LNG('PluginUpdate');?></a>
</ul>
<div class="line"><?php echo LNG("PluginType");?></div>
<ul class='setting'>
<a data-type="all"><i class="font-icon icon-reorder"></i><?php echo LNG("PluginTypeAll");?></a>
<a data-type="file"><i class="font-icon icon-folder-open-alt"></i><?php echo LNG("PluginTypeFile");?></la>
<a data-type="safe"><i class="font-icon icon-book"></i><?php echo LNG("PluginTypeSafe");?></a>
<a data-type="tools"><i class="font-icon icon-suitcase"></i><?php echo LNG("PluginTypeTools");?></a>
<a data-type="media"><i class="font-icon icon-film"></i><?php echo LNG("PluginTypeMedia");?></a>
<a data-type="others"><i class="font-icon icon-ellipsis-horizontal"></i><?php echo LNG("PluginTypeOthers");?></a>
</ul>
</div>
<div class='app-content main app-plugins'>
<div class="app-model app-content-box">
<div class='h1'></div>
<ul class="app-list"></ul>
</div>
<div class="app-model app-descript can-select can-right-menu hidden"></div>
</div>
</div>
<?php include(TEMPLATE.'common/footerCommon.html');?>
<script type="text/javascript">
seajs.use('app/src/plugins/main');
</script>
</body>
</html>

@ -0,0 +1,32 @@
<?php include(TEMPLATE.'common/header.html');?>
<title><?php echo strip_tags(LNG('kod_name')).LNG('kod_power_by');?></title>
<link rel="stylesheet" href="<?php echo STATIC_PATH;?>style/skin/base/app_setting.css?ver=<?php echo KOD_VERSION;?>"/>
<link rel="stylesheet" href="<?php echo STATIC_PATH;?>style/skin/<?php echo $config['user']['theme'];?>.css?ver=<?php echo KOD_VERSION;?>" id='link-theme-style'/>
</head>
<body class="setting-page" oncontextmenu="return core.contextmenu();">
<div class="init-loading">
<div><img src="<?php echo STATIC_PATH;?>images/common/loading_simple.gif?v=<?php echo KOD_VERSION;?>"/></div>
</div>
<div id="body">
<div class="menu-left">
<h1><?php echo LNG('setting_title');?></h1>
<ul class='setting'>
<a href="javascript:void(0);" id="system"><i class="font-icon icon-cog"></i><?php echo LNG('system_setting');?></a>
<a href="javascript:void(0);" id="member"><i class="font-icon icon-group"></i><?php echo LNG('system_group');?></a>
<a href="javascript:void(0);" id="user"><i class="font-icon icon-user"></i><?php echo LNG('setting_user');?></li>
<a href="javascript:void(0);" id="theme"><i class="font-icon icon-dashboard"></i><?php echo LNG('setting_theme');?></a>
<a href="javascript:void(0);" id="wall"><i class="font-icon icon-picture"></i><?php echo LNG('setting_wall');?></a>
<a href="javascript:void(0);" id="fav"><i class="font-icon icon-star"></i><?php echo LNG('setting_fav');?></a>
<a href="javascript:void(0);" id="help"><i class="font-icon icon-question"></i><?php echo LNG('setting_help');?></a>
<a href="javascript:void(0);" id="about"><i class="font-icon icon-info-sign"></i><?php echo LNG('setting_about');?></a>
</ul>
</div>
<div class='main'></div>
</div>
<?php include(TEMPLATE.'common/footerCommon.html');?>
<script type="text/javascript">
seajs.use('app/src/setting/main');
</script>
</body>
</html>

@ -0,0 +1,87 @@
<?php include(TEMPLATE.'common/header.html');?>
<title><?php echo clear_html($shareInfo['name']).' - '.LNG('share_title').' - '.strip_tags(LNG('kod_name')).LNG('kod_power_by');?></title>
<link rel="stylesheet" href="<?php echo STATIC_PATH;?>style/skin/base/app_code_edit.css?ver=<?php echo KOD_VERSION;?>"/>
<link rel="stylesheet" href="<?php echo STATIC_PATH;?>style/skin/<?php echo $configTheme;?>.css?ver=<?php echo KOD_VERSION;?>" id='link-theme-style'/>
</head>
<body <?php echo $codeThemeBlack;?>>
<div class="edit-main" style="height: 100%;" oncontextmenu="return core.contextmenu();">
<div class="tools">
<div class="left top-toolbar">
<div class="disable-mask"></div>
<a action="save" href="javascript:;" title="<?php echo LNG('button_save');?>(Ctrl-S)"><i class="font-icon icon-save"></i></a>
<a action="saveall" href="javascript:;" title="<?php echo LNG('button_save_all');?>"><i class="font-icon icon-paste"></i></a>
<span class="line"></span>
<a action="undo" href="javascript:;" title="<?php echo LNG('undo');?>(Ctrl-Z)"><i class="font-icon icon-undo"></i></a>
<a action="redo" href="javascript:;" title="<?php echo LNG('redo');?>(Ctrl-Y)"><i class="font-icon icon-repeat"></i></a>
<a action="refresh" href="javascript:;" title="<?php echo LNG('refresh');?>(F5)"><i class="font-icon icon-refresh"></i></a>
<span class="line"></span>
<a href="javascript:;" class="toolbar-menu menu-view-goto-line" title="<?php echo LNG('gotoline');?>(Ctrl-L)"><i class="font-icon icon-pushpin"></i></a>
<a action="search" href="javascript:;" title="<?php echo LNG('search');?>(Ctrl-F)"><i class="font-icon icon-search"></i></a>
<a action="searchReplace" href="javascript:;" title="<?php echo LNG('replace');?>(Ctrl-F-F)"><i class="font-icon icon-random"></i></a>
<span class="line"></span>
<a action="font" class="toolbar-menu menu-view-font" href="javascript:;" title="<?php echo LNG('font_size');?>">
<i class="font-icon icon-font"></i><i class="font-icon icon-caret-down"></i>
</a>
<span class="line"></span>
<a class="toolbar-menu menu-view-theme" href="javascript:;" title="<?php echo LNG('code_theme');?>">
<i class="font-icon icon-magic"></i><i class="font-icon icon-caret-down"></i>
</a>
<a class="toolbar-menu menu-view-setting" href="javascript:;" title="<?php echo LNG('setting');?>">
<i class="font-icon icon-cog"></i><i class="font-icon icon-caret-down"></i>
</a>
<a action="preview" href="javascript:;" title="<?php echo LNG('preview');?>(Ctrl-Shift-S)"><i class="font-icon icon-eye-open"></i></a>
</div>
<div class="right">
<a action="fullscreen" href="javascript:;" title="<?php echo LNG('full_screen');?>"><i class="font-icon icon-resize-full"></i></a>
<a action="close" href="javascript:;" title="<?php echo LNG('close');?>"><i class="font-icon icon-remove"></i></a>
</div>
<div style="clear:both"></div>
</div><!-- end tools -->
<!-- 主体部分 -->
<div class="frame-left">
<div class="edit-tab">
<div class="tabs">
<a href="javascript:Editor.add()" class="add icon-plus"></a>
<div style="clear:both"></div>
</div>
</div>
<div class="edit-body">
<div class="introduction hidden">
<?php include(LANGUAGE_PATH.I18n::getType().'/edit.html');?>
<div style="clear:both"></div>
</div>
<div class="tabs"></div>
<div class="bottom-toolbar hidden">
<a class="toolbar-menu menu-view-goto-line editor_position" href="javascript:;">0:0</a>
<a class="file-mode" href="javascript:;">text</a>
<a class="toolbar-menu menuViewTab config-tab" href="javascript:;">Tabs:4</a>
<a class="toolbar-menu menu-view-setting config" href="javascript:;"><i class="font-icon icon-cog"></i></a>
<div style="clear:both"></div>
</div>
</div>
<div class="search-content hidden"></div>
</div>
</div>
<?php include(TEMPLATE.'common/footerCommon.html');?>
<script type="text/javascript">
AUTH = {'explorer.fileDownload':<?php echo $canDownload;?>};
G.fristFile = "<?php echo (isset($_GET['filename']) ? clear_html($_GET['filename']) :'') ;?>";
G.codeConfig = <?php echo $editorConfig;?>;
G.codeThemeAll = "<?php echo $config['settingAll']['codethemeall']?>";
G.codeFontAll = "<?php echo $config['settingAll']['codefontall']?>";
G.user = "<?php echo clear_html($_GET['user']);?>";
G.sid = "<?php echo clear_html($_GET['sid']);?>";
G.theme = "<?php echo $configTheme;?>";
seajs.config({
preload: [
"lib/jquery-1.8.0.min",
'lib/ace/src-min-noconflict/ace'
]
});
seajs.use("app/src/edit/main");
</script>
</body>
</html>

@ -0,0 +1,58 @@
<?php include(TEMPLATE.'common/header.html');?>
<title><?php echo clear_html($shareInfo['name']).' - '.LNG('share_title').' - '.strip_tags(LNG('kod_name')).LNG('kod_power_by');?></title>
<link rel="stylesheet" href="<?php echo STATIC_PATH;?>style/skin/base/app_editor.css?ver=<?php echo KOD_VERSION;?>"/>
<link rel="stylesheet" href="<?php echo STATIC_PATH;?>style/skin/<?php echo $configTheme;?>.css?ver=<?php echo KOD_VERSION;?>" id='link-theme-style'/>
</head>
<?php if(isset($_GET['project'])){?>
<style>
.topbar{display: none;}
.frame-header,.frame-main,.frame-main .frame-left{top:0;}
.edit-content.markdown-full-page .edit-right-frame .markdown-preview {padding-top: 50px;}
.edit-body {bottom: 30px;}
</style>
<?php } ?>
<?php if(isset($_GET['user'])){?>
<style>
.frame-main .frame-left{top:0;}
.frame-main{bottom:0px;}
</style>
<?php } ?>
<body style="overflow:hidden;" oncontextmenu="return core.contextmenu();" id="page-editor">
<?php include(TEMPLATE.'common/navbarShare.html');?>
<div class="frame-main">
<div class='frame-left'>
<ul id="folder-list-tree" style="margin-top:10px;" class="ztree"></ul>
</div><!-- / frame-left end-->
<div class='frame-resize'></div>
<div class='frame-right'>
<div class="frame-right-main" style="height:100%;padding:0;margin:0;">
<div class="resize-mask"></div>
<div class="message-box"><div class="content"></div></div>
<div class="menu-tree-root"></div>
<div class="menu-tree-folder"></div>
<div class="menu-tree-file"></div>
<div class ='frame'>
<iframe name="OpenopenEditor"
src="./index.php?share/edit&user=<?php echo clear_html($_GET['user']);?>&sid=<?php echo clear_html($_GET['sid']);?>"
style="width:100%;height:100%;border:0;" frameborder=0></iframe>
</div>
</div>
</div><!-- / frame-right end-->
</div><!-- / frame-main end-->
<?php include(TEMPLATE.'common/footerCommon.html');?>
<script type="text/javascript">
AUTH = {'explorer.fileDownload':<?php echo $canDownload;?>};
G.project = "<?php echo (isset($_GET['project'])?clear_html($_GET['project']):'') ;?>";
G.user = "<?php echo clear_html($_GET['user']);?>";
G.sid = "<?php echo clear_html($_GET['sid']);?>";
G.shareInfo = <?php echo json_encode($shareInfo);?>;
G.theme = "<?php echo $configTheme;?>";
seajs.use("app/src/shareEditor/main");
</script>
</body>
</html>

@ -0,0 +1,54 @@
<?php include(TEMPLATE.'common/header.html');?>
<title><?php echo clear_html($shareInfo['name']).' - '.LNG('share_title').' - '.strip_tags(LNG('kod_name')).LNG('kod_power_by');?></title>
<link rel="stylesheet" href="<?php echo STATIC_PATH;?>style/skin/base/app_explorer.css?ver=<?php echo KOD_VERSION;?>"/>
<link rel="stylesheet" href="<?php echo STATIC_PATH;?>style/skin/<?php echo $configTheme;?>.css?ver=<?php echo KOD_VERSION;?>" id='link-theme-style'/>
</head>
<style>
.frame-main .frame-left {bottom: 0px;}
.frame-main .bottom-box{display:none !important;}
.tools-right #set_theme{display:none !important;}
#PV_rotate_Left,#PV_rotate_Right,#PV_Btn_Remove{display:none !important;}
<?php if(isset($_GET['type'])){?>
.topbar,.common-footer,.bottom-box{display:none;}
.frame-header{top:0;}
.frame-main{top:0px;bottom:0px;}
.frame-main .frame-left #folder-list-tree{bottom:5px;}
<?php if($_GET['type']=="explorer"){?>
.frame-header .header-content .header-left{display:none;}
.frame-header .header-content .header-middle{left:12px;}
.frame-main .frame-left,.frame-main .frame-resize{display:none;}
.frame-main .frame-right{left:0px;}
.task-tab{display:none;}
<?php } ?>
<?php if($_GET['type']=="fileList"){?>
.frame-header{display:none;}
.frame-main .frame-left,.frame-main .frame-resize{display:none;}
.frame-main .frame-right{left:0px;}
.frame-main{top:0px;}
.task-tab,#set_theme,#fav,#home{display:none !important;}
.header-middle{top:3px;left:5px;right:140px;}
#list-type-header{top:35px;}
<?php } ?>
<?php } ?>
</style>
<body style="overflow:hidden;" oncontextmenu="return core.contextmenu();" id="page-explorer">
<?php include(TEMPLATE.'common/navbarShare.html');?>
<?php include(TEMPLATE.'explorer/content.html');?>
<?php include(TEMPLATE.'common/footer.html');?>
<script type="text/javascript" >
AUTH = {'explorer.fileDownload':<?php echo clear_html($canDownload);?>};
G.thisPath = "<?php echo clear_html($dir);?>";
G.user = "<?php echo clear_html($_GET['user']);?>";
G.sid = "<?php echo clear_html($_GET['sid']);?>";
G.shareInfo = <?php echo json_encode($shareInfo);?>;
G.theme = "<?php echo $configTheme;?>";
seajs.use("app/src/shareExplorer/main");
</script>
</body>
</html>

@ -0,0 +1,59 @@
<?php include(TEMPLATE.'common/header.html');?>
<title><?php echo LNG('ui_explorer').' - '.strip_tags(LNG('kod_name')).LNG('kod_power_by');?></title>
<link href="<?php echo STATIC_PATH;?>style/wap/app_explorer.css?ver=<?php echo KOD_VERSION;?>" rel="stylesheet"/>
</head>
<body>
<div class="frame-main">
<div class="frame-header">
<div class="title"><?php echo clear_html($shareInfo['name']);?></div>
<div class="menu-group">
<div class="btn-list-icon"><i class="font-icon icon-home"></i></div>
</div>
</div>
<div class="address">
<ul class="yarnball"></ul>
<div style="clear: both"></div>
</div>
<div class='bodymain'>
<div class="file-continer file-list-list"></div>
</div>
<div class="file-menu">
<div class="file-action-menu hidden">
<div class='action-menu' data-action="action-download"><i class="font-icon icon-info"></i><?php echo LNG('download');?></div>
<div class='action-menu' data-action="action-share-open">
<span class="content">
<i class="font-icon icon-share"></i><?php echo LNG('open');?>
</span>
</div>
<div class="menu-close"><i class="font-icon icon-ellipsis-horizontal"></i></div>
<div style="clear:both"></div>
</div>
</div>
<?php include(TEMPLATE.'common/footer.html');?>
</div><!-- / frame-main end-->
<div class="toolbar-menu">
<button class="menu-plus tool tool-menu-right-btn" data-toggle="dropdown"></button>
<ul class="dropdown-menu tool-menu-right pull-right animated menuShow" role="menu" >
<li data-action="upload"><a href="javascript:void();">
<i class="font-icon icon-cloud-upload"></i><?php echo LNG('upload');?></a></li>
<li data-action="newfolder"><a href="javascript:void();">
<i class="font-icon icon-folder-close-alt"></i><?php echo LNG('newfolder');?></a></li>
<li data-action="newfile"><a href="javascript:void();">
<i class="font-icon icon-file-text"></i><?php echo LNG('newfile');?></a></li>
<li data-action="past"><a href="javascript:void();">
<i class="font-icon icon-paste"></i><?php echo LNG('past');?></a></li>
<li data-action="search"><a href="javascript:void();">
<i class="font-icon icon-search"></i><?php echo LNG('search');?></a></li>
</ul>
</div>
<script type="text/javascript">
G.thisPath = "<?php echo clear_html($dir);?>";
G.user = "<?php echo clear_html($_GET['user']);?>";
G.sid = "<?php echo clear_html($_GET['sid']);?>";
G.shareInfo = <?php echo json_encode($shareInfo);?>;
seajs.use("<?php echo STATIC_JS;?>/src/explorerWap/main");
</script>
</body>
</html>

@ -0,0 +1,45 @@
<?php include(TEMPLATE.'common/header.html');?>
<title><?php echo clear_html($shareInfo['name']).' - '.LNG('share_title').' - '.strip_tags(LNG('kod_name')).LNG('kod_power_by');?></title>
<link rel="stylesheet" href="<?php echo STATIC_PATH;?>style/skin/base/app_code_edit.css?ver=<?php echo KOD_VERSION;?>"/>
<link rel="stylesheet" href="<?php echo STATIC_PATH;?>style/skin/<?php echo $configTheme;?>.css?ver=<?php echo KOD_VERSION;?>" id='link-theme-style'/>
</head>
<style type="text/css">
.frame-main{bottom: 32px;}
</style>
<body>
<?php include(TEMPLATE.'common/navbarShare.html');?>
<div class="frame-main share-page-main">
<!-- bindary-box -->
<div class="bindary-box hidden">
<div class="title"><div class="ico"></div></div>
<div class="content-info">
<div class="name"></div>
<div class="size"><span></span><i class="share-time"></i></div>
<div class="btn-group">
<a type="button" class="btn btn-primary btn-download" href=""><?php echo LNG('download');?></a>
</div>
<div class="error-tips"><?php echo LNG('share_error_show_tips');?></div>
</div>
</div>
<div class="content-box"></div>
</div><!-- / frame-main end-->
<?php include(TEMPLATE.'common/footer.html');?>
<script type="text/javascript">
AUTH = {'explorer.fileDownload':<?php echo $canDownload;?>};
G.user = "<?php echo clear_html($_GET['user']);?>";
G.path = "<?php echo clear_html($_GET['path']);?>";
G.sid = "<?php echo clear_html($_GET['sid']);?>";
G.shareInfo = <?php echo json_encode($shareInfo);?>;
G.theme = "<?php echo $configTheme;?>";
seajs.config({
preload: [
"lib/jquery-1.8.0.min",
'lib/ace/src-min-noconflict/ace'
]
});
seajs.use("app/src/shareIndex/main");
</script>
</body>
</html>

@ -0,0 +1,26 @@
<?php include(TEMPLATE.'common/header.html');?>
<title>tips - <?php echo LNG('share_title').' - '.strip_tags(LNG('kod_name')).LNG('kod_power_by');?></title>
<link rel="stylesheet" href="<?php echo STATIC_PATH;?>style/skin/base/app_code_edit.css?ver=<?php echo KOD_VERSION;?>"/>
<link rel="stylesheet" href="<?php echo STATIC_PATH;?>style/skin/<?php echo $configTheme;?>.css?ver=<?php echo KOD_VERSION;?>" id='link-theme-style'/>
</head>
<body style="overflow:hidden;">
<?php include(TEMPLATE.'common/navbarShare.html');?>
<div class="frame-main">
<?php if($msg=='password'){?>
<div class="share-page-passowrd">
<div class="title"><?php echo LNG('share_password');?></div>
<input type="password" class="form-control"/>
<a href="javascript:void(0);" class="btn btn-primary share-login"><?php echo LNG('button_ok');?></a>
</div>
<?php }else{?>
<div class="share-page-error"><b>tips:</b><?php echo $msg;?></div>
<?php }?>
</div><!-- / frame-main end-->
<?php include(TEMPLATE.'common/footer.html');?>
<script type="text/javascript">
seajs.use("app/src/shareIndex/main");
</script>
</body>
</html>

@ -0,0 +1,63 @@
<?php include(TEMPLATE.'common/header.html');?>
<link href="<?php echo STATIC_PATH;?>style/login.css?ver=<?php echo KOD_VERSION;?>" rel="stylesheet">
<title><?php echo LNG('php_env_check').' - '.strip_tags(LNG('kod_name')).LNG('kod_power_by');?></title>
</head>
<body>
<?php echo pageBackground();?>
<div class="background"></div>
<div class="loginbox box-install aero" >
<div class="title">
<div class="logo"><i class="icon-cloud"></i><?php echo strip_tags(LNG('kod_name'));?></div>
<div class='info'><?php echo LNG('kod_name_desc');?></div>
<div class="menu-group">
<a id='footer-language' data-toggle="dropdown" href="javascript:void(0);" class="topbar-menu">
<i class='font-icon icon-flag'></i>Language<b class="caret"></b>
</a>
<ul class="dropdown-menu footer-language pull-left animated menuShow" role="menu" aria-labelledby="footer-language">
<?php
$tpl = "";
foreach ($config['settingAll']['language'] as $key => $value) {
$name = $value[0];
$select = I18n::getType() == $key ? "this":"";
$tpl .= "<li><a href='javascript:core.language(\"{$key}\");' title=\"{$key}/{$value[1]}/{$value[2]}\" class='{$select}'><i class='lang-flag flag-{$key}'></i>{$name}</a></li>";
}
echo $tpl;
?>
</ul>
</div>
</div>
<div class="form" style="padding: 10px 20px 40px 20px;">
<h3><?php echo LNG('php_env_check');?></h3>
<?php
$error = php_env_check();
$login = LNG('login');
if ($error=='') {
echo '<div class="success">';
}else{
echo '<div class="error"><h4>error:</h4>'.$error."<br/>";
$login = LNG('php_env_error_ignore');
}
$login_info = str_replace(array("{0}","{1}","{2}"),array('admin','demo/demo','guest/guest'),LNG('install_user_default'));
echo LNG('install_login'),'<br/>'.$login_info.'</div>';
echo '<div class="inputs admin-password"><input type="password" placeholder="'.LNG('login_root_password').'"/></div><div class="inputs admin-password-repeat"><input type="password" placeholder="'.LNG('login_root_password_repeat').'"/></div>';
echo '<div class="guest"><a href="javascript:void(0);" class="start">'.$login.'</a></div>';
?>
</div>
</div>
<?php $GLOBALS['loadCommonJs'] = true;?>
<?php include(TEMPLATE.'common/footer.html');?>
<script type="text/javascript" >
setTimeout(function(){
if( typeof(seajs) == 'undefined' ||
typeof(LNG) == 'undefined'
){
alert('js文件不完整,请查看浏览器控制台和服务器配置是否正常。或检查文件是否被修改(或咨询主机商压缩js导致文件损坏);[js load error!]');
}
},1000);
seajs.use("<?php echo STATIC_JS;?>/src/user/main");
</script>
</body>
</html>

@ -0,0 +1,30 @@
<?php include(TEMPLATE.'common/header.html');?>
<title><?php echo 'License Register - '.strip_tags(LNG('kod_name')).LNG('kod_power_by');?></title>
<link href="<?php echo STATIC_PATH;?>style/login.css?ver=<?php echo KOD_VERSION;?>" rel="stylesheet">
</head>
<body class="license-page">
<?php echo pageBackground();?>
<div class="background"></div>
<div class="loginbox aero" >
<div class="title">
<div class="logo">升级为商业版</div>
<div class='info'><?php echo LNG('copyright_contact');?></div>
</div>
<div class="form" style="padding: 10px 20px;">
<div class="inputs admin-password"><input type="text" placeholder="LICENSE KEY"/></div>
<a href="javascript:void(0);" class="LICENSE_SUBMIT btn btn-primary">注册授权</a>
<div class="links">
<a href="./index.php?user/versionInstall&reset=1" class="btn btn-link license-use-free"><?php echo LNG('use_free');?></a>
<a href="http://kodcloud.com/buy.html#<?php echo I18n::getType();?>" target="_blank" class="btn btn-link license-learn-more"><?php echo LNG('learn_more');?></a>
</div>
<br/>
</div>
</div>
<?php $GLOBALS['loadCommonJs'] = true;?>
<?php include(TEMPLATE.'common/footer.html');?>
<script type="text/javascript" >
seajs.use("<?php echo STATIC_JS;?>/src/user/main");
</script>
</body>
</html>

@ -0,0 +1,91 @@
<!--user login-->
<?php include(TEMPLATE.'common/header.html');?>
<title><?php echo strip_tags(LNG('kod_name')).LNG('kod_power_by');?></title>
<link href="<?php echo STATIC_PATH;?>style/login.css?ver=<?php echo KOD_VERSION;?>" rel="stylesheet">
</head>
<body>
<?php echo pageBackground();?>
<div class="background"></div>
<div class="init-loading"><div><img src="<?php echo STATIC_PATH;?>images/common/loading_simple.gif?v=<?php echo KOD_VERSION;?>"/></div></div>
<div class="loginbox animated-500 fadeInDown aero" >
<div class="title">
<div class="logo"><i class="icon-cloud"></i><?php echo strip_tags(LNG('kod_name'));?></div>
<div class='info'><?php echo LNG('kod_name_desc');?></div>
<?php if(!isset($config['settings']['language'])){ ?>
<div class="menu-group">
<a id='footer-language' data-toggle="dropdown" href="javascript:void(0);" class="topbar-menu">
<i class='font-icon icon-flag'></i>Language<b class="caret"></b>
</a>
<ul class="dropdown-menu footer-language pull-left animated menuShow" role="menu" aria-labelledby="footer-language">
<?php
$tpl = "";
foreach ($config['settingAll']['language'] as $key => $value) {
$name = $value[0];
$select = I18n::getType() == $key ? "this":"";
$tpl .= "<li><a href='javascript:core.language(\"{$key}\");' title=\"{$key}/{$value[1]}/{$value[2]}\" class='{$select}'><i class='lang-flag flag-{$key}'></i>{$name}</a></li>";
}
echo $tpl;
?>
</ul>
</div>
<?php } ?>
</div>
<div class="form">
<form action="#">
<div class="inputs">
<div>
<i class="font-icon icon-user"></i>
<input id="username" name='name' type="text" placeholder="<?php echo LNG('username');?>"
required autocomplete="on" disabled/>
</div>
<div>
<i class="font-icon icon-key"></i>
<input id="password" name='password' type="password" placeholder="<?php echo LNG('password');?>"
required autocomplete="on" disabled/>
<input type='hidden' name='csrfLogin' value="<?php echo $_SESSION['csrfLogin'];?>"/>
</div>
<?php if(need_check_code()){?>
<div class='check-code'>
<i class="font-icon icon-unlock-alt"></i>
<input name='checkCode' class="check-code" type="text" placeholder="<?php echo LNG('login_code');?>" required/>
<img src='./index.php?user/checkCode' onclick="this.src='./index.php?user/checkCode'" />
</div>
<?php }?>
</div>
<div class="actions">
<label for='rm'>
<input type="checkbox" class="checkbox" name="rememberPassword" id='rm'/>
<?php echo LNG('login_rember_password');?>
</label>
<a href="javascript:void(0);" class="forget-password"><?php echo LNG('forget_password');?></a>
<br/>
<input type="submit" id="submit" value="<?php echo LNG('login');?>" />
</div>
<div class="msg"><?php echo $msg;?></div>
<?php if ($this->config['settingSystem']['autoLogin'] == '1') {?>
<div class='guest'>
<a href="./index.php?user/loginSubmit&name=guest&password=guest"><?php echo LNG('guest_login');?><i class=' icon-arrow-right'></i></a>
</div>
<?php } ?>
</form>
</div>
</div>
<?php $GLOBALS['loadCommonJs'] = true;?>
<?php include(TEMPLATE.'common/footer.html');?>
<script type="text/javascript" >
setTimeout(function(){
if( typeof(seajs) == 'undefined' ||
typeof(LNG) == 'undefined'
){
alert('js文件不完整,请查看浏览器控制台和服务器配置是否正常。或检查文件是否被修改(或咨询主机商压缩js导致文件损坏);[js load error!]');
}
},1000);
seajs.use("<?php echo STATIC_JS;?>/src/user/main");
</script>
</body>
</html>

@ -0,0 +1,65 @@
<!--user login-->
<?php include(TEMPLATE.'common/header.html');?>
<link href="<?php echo STATIC_PATH;?>style/wap/login.css?ver=<?php echo KOD_VERSION;?>" rel="stylesheet">
<title><?php echo strip_tags(LNG('kod_name')).LNG('kod_power_by');?></title>
</head>
<body>
<?php echo pageBackground();?>
<div class="background"></div>
<div class="loginbox login-wap aero" >
<div class="title">
<div class="logo">
<i class="icon-cloud"></i><?php echo strip_tags(LNG('kod_name'));?>
</div>
<div class='info'><?php echo LNG('kod_name_desc');?></div>
</div>
<div class="form">
<form action="#">
<div class="inputs">
<div>
<i class="font-icon icon-user"></i>
<input id="username" name='name' type="text" placeholder="<?php echo LNG('username');?>"
required disabled/>
</div>
<div>
<i class="font-icon icon-key"></i>
<input id="password" name='password' type="password" placeholder="<?php echo LNG('password');?>"
required disabled/>
<input type='hidden' name='csrfLogin' value="<?php echo $_SESSION['csrfLogin'];?>"/>
</div>
<?php if(need_check_code()){?>
<div class='check-code'>
<i class="font-icon icon-unlock-alt"></i>
<input name='checkCode' class="check-code" type="text" placeholder="<?php echo LNG('login_code');?>" required/>
<img src='./index.php?user/checkCode' onclick="this.src='./index.php?user/checkCode'" />
</div>
<?php }?>
</div>
<div class="actions">
<label for='rm'>
<input type="checkbox" class="checkbox" name="rememberPassword" id='rm'/>
<?php echo LNG('login_rember_password');?>
</label>
<a href="javascript:void(0);" class="forget-password"><?php echo LNG('forget_password');?></a>
<input type="submit" id="submit" value="<?php echo LNG('login');?>" />
</div>
<div class="msg"><?php echo $msg;?></div>
<?php if ($this->config['settingSystem']['autoLogin'] == '1') {?>
<div class='guest'>
<a href="./index.php?user/loginSubmit&name=guest&password=guest"><?php echo LNG('guest_login');?><i class=' icon-arrow-right'></i></a>
</div>
<?php } ?>
</form>
</div>
</div>
<?php $GLOBALS['loadCommonJs'] = true;?>
<?php include(TEMPLATE.'common/footer.html');?>
<script type="text/javascript" >
seajs.use("<?php echo STATIC_JS;?>/src/user/main");
</script>
</body>
</html>

File diff suppressed because one or more lines are too long

@ -0,0 +1,116 @@
<?php
/*
* @link http://kodcloud.com/
* @author warlee | e-mail:kodcloud@qq.com
* @copyright warlee 2014.(Shanghai)Co.,Ltd
* @license http://kodcloud.com/tools/license/license.txt
*/
define('GLOBAL_DEBUG',0);//0 or 1
define('GLOBAL_DEBUG_HOOK',0);//0 or 1
@date_default_timezone_set(@date_default_timezone_get());
@set_time_limit(1200);//20min pathInfoMuti,search,upload,download...
@ini_set("max_execution_time",1200);
@ini_set('memory_limit','500M');//
@ini_set('session.cache_expire',1800);
if(GLOBAL_DEBUG){
define('STATIC_JS','_dev'); //_dev||app
define('STATIC_LESS','less');//less||css
@ini_set("display_errors","on");
@error_reporting(E_ALL^E_NOTICE^E_WARNING^E_DEPRECATED);//
}else{
define('STATIC_JS','app'); //app
define('STATIC_LESS','css');//css
@ini_set("display_errors","on");//on off
@error_reporting(E_ALL^E_NOTICE^E_WARNING^E_DEPRECATED);// 0
}
//header('HTTP/1.1 200 Ok');//兼容部分lightHttp服务器环境; php5.1以下会输出异常;暂屏蔽
header("Content-type: text/html; charset=utf-8");
define('BASIC_PATH',str_replace('\\','/',dirname(dirname(__FILE__))).'/');
define('LIB_DIR', BASIC_PATH .'app/'); //系统库目录
define('PLUGIN_DIR', BASIC_PATH .'plugins/'); //插件目录
define('CONTROLLER_DIR',LIB_DIR .'controller/'); //控制器目录
define('MODEL_DIR', LIB_DIR .'model/'); //模型目录
define('TEMPLATE', LIB_DIR .'template/'); //模版文件路径
define('FUNCTION_DIR', LIB_DIR .'function/'); //函数库目录
define('CLASS_DIR', LIB_DIR .'kod/'); //工具类目录
define('CORER_DIR', LIB_DIR .'core/'); //核心目录
define('SDK_DIR', LIB_DIR .'sdks/'); //
define('DEFAULT_PERRMISSIONS',0755); //新建文件、解压文件默认权限777 部分虚拟主机限制了777;
/*
* 可以数据目录;移到web目录之外可以使程序更安全, 就不用限制用户的扩展名权限了;
* 1. 需要先将data文件夹移到别的地方 例如将data文件夹拷贝到D:/
* 2. 在config文件夹下新建define.php 新增一行 <?php define('DATA_PATH','D:/data/');
* 注意:路径不能写错;其次php需要有权限访问移动后的目录(设置了防跨站需要关闭) 路径结尾/斜杠绝对不能缺少
*/
if(file_exists(BASIC_PATH.'config/define.php')){
include(BASIC_PATH.'config/define.php');
}
if(!defined('DATA_PATH')){
define('DATA_PATH',BASIC_PATH .'data/'); //用户数据目录
}
define('USER_PATH', DATA_PATH .'User/'); //用户目录
define('GROUP_PATH', DATA_PATH .'Group/'); //群组目录
define('USER_SYSTEM', DATA_PATH .'system/'); //用户数据存储目录
define('TEMP_PATH', DATA_PATH .'temp/'); //临时目录
define('LOG_PATH', TEMP_PATH .'log/'); //日志
define('DATA_THUMB', TEMP_PATH .'thumb/'); //缩略图生成存放
define('LANGUAGE_PATH', BASIC_PATH .'config/i18n/');//多语言目录
define('SESSION_ID','KOD_SESSION_ID_'.substr(md5(BASIC_PATH),0,5));
define('KOD_SESSION', DATA_PATH .'session/'); //session目录
include(FUNCTION_DIR.'common.function.php');
include(FUNCTION_DIR.'web.function.php');
include(FUNCTION_DIR.'file.function.php');
include(FUNCTION_DIR.'helper.function.php');
include(CLASS_DIR.'I18n.class.php');
include(BASIC_PATH.'config/version.php');
check_cache();
$config['appStartTime'] = mtime();
$config['appCharset'] = 'utf-8';//该程序整体统一编码
$config['checkCharset'] = 'ASCII,UTF-8,GB2312,GBK,BIG5,UTF-16,UCS-2,'.
'Unicode,EUC-KR,EUC-JP,SHIFT-JIS,EUCJP-WIN,SJIS-WIN,JIS,LATIN1';//文件打开自动检测编码
$config['checkCharsetDefault'] = '';//if set,not check;
//when edit a file ;check charset and auto converto utf-8;
if (strtoupper(substr(PHP_OS, 0,3)) === 'WIN') {
$config['systemOS']='windows';
$config['systemCharset']='gbk';// EUC-JP/Shift-JIS/BIG5 //user set your server system charset
if(version_compare(phpversion(), '7.1.0', '>=')){//7.1 has auto apply the charset
$config['systemCharset']='utf-8';
}
} else {
$config['systemOS']='linux';
$config['systemCharset']='utf-8';
}
// 部分反向代理导致获取不到url的问题优化;忽略同域名http和https的情况
if(isset($_COOKIE['APP_HOST'])){
if( get_url_domain($_COOKIE['HOST']) != get_url_domain($_COOKIE['APP_HOST']) ||
get_url_scheme($_COOKIE['HOST']) == get_url_scheme($_COOKIE['APP_HOST']) ){
define('HOST',$_COOKIE['HOST']);
define('APP_HOST',$_COOKIE['APP_HOST']);
}
}
if(!defined('HOST')){ define('HOST',rtrim(get_host(),'/').'/');}
if(!defined('WEB_ROOT')){ define('WEB_ROOT',webroot_path(BASIC_PATH) );}
if(!defined('APP_HOST')){ define('APP_HOST',HOST.str_replace(WEB_ROOT,'',BASIC_PATH));} //程序根目录
define('PLUGIN_HOST',APP_HOST.str_replace(BASIC_PATH,'',PLUGIN_DIR));//插件目录
include(CONTROLLER_DIR.'utils.php');
include(BASIC_PATH.'config/setting.php');
if (file_exists(BASIC_PATH.'config/setting_user.php')) {
include_once(BASIC_PATH.'config/setting_user.php');
}
if(file_exists(CONTROLLER_DIR.'debug.class.php')){
include_once(CONTROLLER_DIR.'debug.class.php');
}
init_common();
$config['autorun'] = array(
array('controller'=>'user','function'=>'loginCheck'),
array('controller'=>'user','function'=>'authCheck'),
array('controller'=>'user','function'=>'bindHook'),
);

@ -0,0 +1,33 @@
<div class="box">
<div class="title"><span>KODExplorer غير ماذا؟</span></div>
<p>KODExplorer هو إدارة الوثائق على الانترنت على شبكة الإنترنت مفتوح المصدر، محرر التعليمات البرمجية. ويوفر نوعا من النوافذ الكلاسيكية واجهة المستخدم، ومجموعة من إدارة الوثائق على الانترنت، ومعاينة ملف، تحرير، تحميل وتنزيل، بفك الانترنت تشغيل الموسيقى. يسمح لك لتحقيق التنمية على شبكة الإنترنت مباشرة في المتصفح، وشفرة المصدر معاينة الملف، ونشر صاحب الموقع والعملية المحلية وسهلة وسريعة وتجربة آمنة.</p>
<p><b>- تصميم -</b></p>
<p>التقاليد الكلاسيكية، والسعي للابتكار، لتزويد المستخدمين مع مريحة، آمنة وسهلة لاستخدام نظام إدارة سحابة على الانترنت.</p>
<p>كلما (متى)، حيث (حيث)، لديه شبكة الإنترنت كلما تريد (تريد) هو أداة لإدارة الخاص بك (4W السياسة).</p>
<p><b>- المستخدم المنحى -</b></p>
<p>حاليا نظام إدارة KODExplorer تقع أساسا في سحابة استضافة شخصية، صغير إدارة المشاريع سحابة الموارد وإدارة القرص الشبكة، وإدارة المواقع الصغيرة والمتوسطة. مطور ويب و الماجستير (قدامى المحاربين): محرر على الانترنت، والنسخ الاحتياطي مضغوط، نشر، الكلاسيكية تشغيل ويندوز واجهة، من السهل أن تبدأ وتخلص من SSH المضيف، الأمر FTP عمليات الحفر معقدة.</p>
<p>سحابة شخصية خاصة (الصاعد): موارد القرص شبكة الإدارية، ونفس العملية النوافذ الكلاسيكية واجهة، يمكنك وضع محرك الأقراص الموسيقى تصفح الشبكة، وملفات الشاشة، تحميل وتنزيل بسرعة وسهولة.</p>
</div>
<div class="box">
<div class="title"><span>ميزات</span></div>
<p>إدارة ثيقة شاملة وقوية محرر الملفات على الإنترنت</p>
<p>أينما كنت، يمكنك إدارة الملفات الخاصة بك، والترفيه عبر الإنترنت، على شبكة الإنترنت كتابة رمز! تماما كما مناسبة للاستخدام في نظام التشغيل.</p>
<p>واسعة النطاق بحق عملية تجربة زرع المحلي، السحب، مربع التحديد، اختصارات، البحث عن الملفات (المحتوى البحث) ......</p>
<p>مربع الاختيار، السحب الحركة، وسحب وإسقاط تحميل، محرر على الانترنت، ومشغل فيديو، ضغط. كامل الأداء ضمان اياكس والخبرة!</p>
<p>كل وظيفة الربط السلس المباشر، في شكل حوار، وظائف إدارة متعددة المهام</p>
<p>محرر يدعم-متعددة وثيقة، ودعم ZendCoding أتش تي أم أل، المغلق، شبيبة أعلى الترميز الكفاءة!</p>
<p>الدعم الصيني الكمال، مشوه حل حالات مختلفة؛</p>
</div>
<div class="box">
<div class="title"><span>المصدر المفتوح اعتماد التكنولوجيا</span></div>
<p><b>1.Jquery:</b>jpuery (المساعد: Hotkeys.ztree.contentmenu) شبيبة إطار التنمية السائد. تشغيل عملية دوم، BOM، عملية المغلق، وحزمة اياكس</p>
<p><b>2.ArtDialog:</b>تصميم جميل، والتوافق متصفح قوي القطعة الحوار. لذا المنبثقة مقبض، والأحداث، ونقل البيانات للحصول على إدارة أفضل موحدة</p>
<p><b>3.Ztree:</b>شجرة التحكم القائمة، والتدرجية هو جدا قوية شجرة معالجة البيانات القطعة</p>
<p><b>4.codemirror:</b>محرر كود شبيبة الإضافات، ويدعم مجموعة متنوعة من لغات البرمجة لتسليط الضوء على</p>
<p><b>5.zendcoding:</b>على رموز الدعم أتش تي أم أل الكتابة بسرعة المكونات الإضافية. يبسط يتم كتابة تعريف من التعليمات البرمجية. تجميع بسيط</p>
<p><b>6.less:</b>نموذج تنمية المغلق كفاءة وظيفية لتحسين الواجهة الأمامية المغلق إعادة استخدام . تجميع بسيط</p>
<p><b>7.SWFUpload:</b>ملف فلاش تحميل</p>
<p><b>8 .CMP4:</b>لاعب فلاش جيد جدا المساعد ملفات الوسائط، ودعم تدفق وسائل الاعلام، شعبية أداة تشغيل الموسيقى والفيديو. دعم للبشرة، وإعدادات شكلي للغاية. قائمة ديناميكية أكس تحميل. رسائل الوسائط المتعددة تدفق وسائل الاعلام، RSTP رخصة مفتوحة المصدر دعم تشغيل الوسائط</p>
</div>

@ -0,0 +1,72 @@
<div class="intro-left" style=";text-align:right;direction:rtl">
<div class="tips blue" style=";text-align:right;direction:rtl">
<h1 style=";text-align:right;direction:rtl"> <span>الوظائف الغنية</span> </h1>
<p style=";text-align:right;direction:rtl"> كود يطالب تلقائيا </p>
<p style=";text-align:right;direction:rtl"> متعددة موضوع: اختيار أسلوب البرمجة المفضلة لديك </p>
<p style=";text-align:right;direction:rtl"> الخط مخصص: للاستخدام في المشهد </p>
<p style=";text-align:right;direction:rtl"> تحرير المؤشر متعددة، كتلة التحرير على الانترنت خبرة في البرمجة مماثلة للسامية </p>
<p style=";text-align:right;direction:rtl"> كتلة قابلة للطي، التوسع؛ التفاف </p>
<p style=";text-align:right;direction:rtl"> دعم العديد من علامات التبويب، اسحب تسلسل التبديل. </p>
<p style=";text-align:right;direction:rtl"> الحفاظ على وثائق متعددة، والعثور على واستبدال، التاريخ؛ </p>
<p style=";text-align:right;direction:rtl"> الإكمال التلقائي []، {}، ()، &#39;&#39; &#39;&#39; </p>
<p style=";text-align:right;direction:rtl"> على الانترنت المعاينة في الوقت الحقيقي الذي يسمح لك أن تقع في الحب مع البرمجة على الانترنت! </p>
<p style=";text-align:right;direction:rtl"> zendcodeing الدعم، كتابة التعليمات البرمجية ثمانين </p>
<p style=";text-align:right;direction:rtl"> المزيد من الميزات انتظار اكتشاف الخاص بك ...... </p>
</div>
<div class="tips orange" style=";text-align:right;direction:rtl">
<h1 style=";text-align:right;direction:rtl"> <span>150 نوعا من تسليط الضوء على كود</span> </h1>
<p style=";text-align:right;direction:rtl"> نصيحة: أتش تي أم أل، وجافا سكريبت، المغلق، أقل، ساس، SCSS </p>
<p style=";text-align:right;direction:rtl"> تطوير الشبكة: PHP، بيرل، بيثون، روبي، elang، انتقل ... </p>
<p style=";text-align:right;direction:rtl"> اللغات التقليدية: جافا، C و C ++، C #، أكشن، فبسكريبت ... </p>
<p style=";text-align:right;direction:rtl"> البعض: تخفيض السعر، قذيفة، مزود، لوا، أكس، YAML ... </p>
</div>
</div>
<div class="intro-right" style=";text-align:right;direction:rtl">
<div class="tips green" style=";text-align:right;direction:rtl">
<h1 style=";text-align:right;direction:rtl"> <span>عمل اختصار</span> </h1>
<pre style=";text-align:right;direction:rtl"> الاختصارات المستخدمة شيوعا:
CTRL + S لحفظ
+ السيطرة على اختيار كل CTRL + X قص
CTRL + C CTRL + V لصق نسخة
CTRL + Z التراجع عن التراجع عن مكافحة CTRL + Y
CTRL + F للبحث عن استبدال CTRL + و + و
فوز + ALT + 0 انهيار كل فوز + Alt + العالي + 0 توسيع جميع
ESC [بحث الخروج تلقائيا إلغاء يطالب ...]
السيطرة التحول ليالي معاينة
السيطرة التحول الإلكتروني تظهر وإغلاق وظيفة
</pre>
<pre style=";text-align:right;direction:rtl"> اختيار:
سرادق الماوس - السحب
تحول + الوطن / نهاية / أعلى / يسار / أسفل / الحق
تحول + PAGEUP / بين pagedown الوجه صعودا وهبوطا لتحديد
السيطرة تحول + + الوطن / نهاية المؤشر الحالي إلى بداية ونهاية
ALT + الماوس لسحب اختيار كتلة
CTRL + ALT + ز دفعة حدد وأدخل محرر متعدد التبويب الحالي
</pre>
<pre style=";text-align:right;direction:rtl"> المؤشر:
الوطن / نهاية / أعلى / يسار / أسفل / الحق
CTRL + الوطن / نهاية تحريك المؤشر إلى الوثيقة رأس / ذيل
CTRL + ص الانتقال إلى العلامة مطابقة
PAGEUP / بين pagedown المؤشر صعودا وهبوطا
ALT + المؤشر الأيسر / الأيمن للانتقال إلى أعلى من خط
تحول + المؤشر الأيسر / الأيمن إلى نهاية السطر و
السيطرة + لتر إلى القفز إلى صف معين
CTRL + ALT + لأعلى / أسفل (أدناه) زيادة المؤشر
</pre>
<pre style=";text-align:right;direction:rtl"> تحرير:
CTRL + / تعليق والسيطرة غير تعليق + ALT + وبرر
علامة التبويب جدول محاذاة التحول + طاولة التقدم الشامل
حذف حذف حذف السيطرة خط كامل + د
السيطرة + حذف لحذف الصف والكلمة الصحيحة
السيطرة / التحول + BACKSPACE لحذف كلمة على اليسار
SHIFT + ALT + أعلى / أسفل، وأضاف إلى خط النسخ (أدناه) طائرة
ALT + DELETE لحذف محتويات يمين المؤشر
بديل + أعلى / أسفل على السطر الحالي والخط (تبادل السطر التالي)
CTRL + SHIFT + د صفوف نسخ وإضافة إلى ما يلي
السيطرة + حذف لحذف يمين الكلمة
السيطرة تحول + + يو تحويلها إلى أحرف صغيرة
CTRL + ش النص المحدد إلى أحرف كبيرة
</pre>
</div>
</div>

@ -0,0 +1,36 @@
<div class="box" style=";text-align:right;direction:rtl">
<div class="title" style=";text-align:right;direction:rtl"> <span>إدارة ملف</span> </div>
<p style=";text-align:right;direction:rtl"><i class="icon-tags"></i> اختيار ملف: راديو، سرادق الماوس، وتحول الانتخابات، السيطرة اختيارهم عشوائيا، لوحة المفاتيح صعودا وهبوطا، المنزل، واختيار نهاية. </p>
<p style=";text-align:right;direction:rtl"><i class="icon-folder-open"></i> تشغيل ملف: بعد اختيار الملف، يمكنك نسخ، قص، حذف، عرض خصائص ضغط، إعادة تسمية، ومعاينة المفتوحة وغيرها من العمليات ...... </p>
<p style=";text-align:right;direction:rtl"><i class="icon-cloud-upload"></i> تحميل الملف: تحميل ملفات متعددة دفعة، HTML5 تحميل السحب (سحب للتحميل بسهولة النافذة، سحب وإسقاط الدعم للمجلدات) </p>
<p style=";text-align:right;direction:rtl"><i class="icon-cogs"></i> وظيفة الصحيحة: بزر الماوس الأيمن ملف أو مجلد، الحق، الحق أكثر بعد العملية الانتخابية، سطح المكتب، والحق، والحق شجرة الدليل، اختصارات القائمة ملزمة اليمين <br/>
(حدد الكل - نسخ - قص - لصق - حذف - إعادة تسمية، تعيين ......) </p>
<p style=";text-align:right;direction:rtl"><i class="icon-sitemap"></i> متصفح ملف: وضع قائمة، وضع رمز، انقر نقرا مزدوجا فوق في مجلدات فرعية، عملية شريط العنوان؛ فتح سجل سجل مجلد مناقضة (إلى الأمام والخلف) </p>
<p style=";text-align:right;direction:rtl"><i class="icon-move"></i> دعم السحب والإسقاط: تحقق من السحب، وقطع لتحقيق وظيفة المجلد المحدد </p>
<p style=";text-align:right;direction:rtl"><i class="icon-reply"></i> مفاتيح الاختصار: حذف حذف، CTRL + A تحديد الكل، CTRL + C لنسخ، + X قص، بحث ملف (محتوى البحث) السيطرة </p>
</div>
<div class="box" style=";text-align:right;direction:rtl">
<div class="title" style=";text-align:right;direction:rtl"> <span>معاينة ملف</span> </div>
<p style=";text-align:right;direction:rtl"><i class="icon-edit"></i> معاينة الملف: عرض محتويات ملف تحرير النص والادخار، أتش تي أم أل، معاينة ملف فرنك سويسري، </p>
<p style=";text-align:right;direction:rtl"><i class="icon-picture"></i> معاينة الصورة: الجيل التلقائي للصور المصغرة، صورة عرض الشرائح. </p>
<p style=";text-align:right;direction:rtl"><i class="icon-music"></i> تشغيل الصوت: تشغيل الموسيقى على الانترنت وملفات الفيديو؛ دعم MP3، WMA، منتصف، AAC، WAV، MP4، </p>
<p style=";text-align:right;direction:rtl"><i class="icon-play"></i> فيديو: تشغيل الفيديو عبر الإنترنت، الصيغ المدعومة: FLV، F4V، 3GP </p>
<p style=";text-align:right;direction:rtl"><i class="icon-play"></i> المكتب: مكتب معاينة الانترنت، الصيغ المدعومة: وثيقة، docx، باور بوينت، PPTX، XLS، XLSX </p>
</div>
<div class="box" style=";text-align:right;direction:rtl">
<div class="title" style=";text-align:right;direction:rtl"> <span>الاختصارات</span> </div>
<p style=";text-align:right;direction:rtl"><i class="icon-tags"></i> إدخال المفتوحة </p>
<p style=";text-align:right;direction:rtl"><i class="icon-tags"></i> + السيطرة مختارة جميع </p>
<p style=";text-align:right;direction:rtl"><i class="icon-tags"></i> CTRL + C لنسخ المحدد </p>
<p style=";text-align:right;direction:rtl"><i class="icon-tags"></i> CTRL + V للصق </p>
<p style=";text-align:right;direction:rtl"><i class="icon-tags"></i> CTRL + X قص </p>
<p style=";text-align:right;direction:rtl"><i class="icon-tags"></i> CTRL + F للبحث في الدليل الحالي </p>
<p style=";text-align:right;direction:rtl"><i class="icon-tags"></i> بديل + ن ملف جديد </p>
<p style=";text-align:right;direction:rtl"><i class="icon-tags"></i> ALT + م مجلد جديد </p>
<p style=";text-align:right;direction:rtl"><i class="icon-tags"></i> حذف حذف المحدد </p>
<p style=";text-align:right;direction:rtl"><i class="icon-tags"></i> مسافة للخلف العودة </p>
<p style=";text-align:right;direction:rtl"><i class="icon-tags"></i> CTRL + مسافة للخلف إلى الأمام </p>
<p style=";text-align:right;direction:rtl"><i class="icon-tags"></i> F2 إعادة تسمية مختارة (مجلد) </p>
<p style=";text-align:right;direction:rtl"><i class="icon-tags"></i> الوطن / نهاية / أعلى / أسفل / يسار / يمين لتحديد الملف </p>
<p style=";text-align:right;direction:rtl"><i class="icon-tags"></i> لرد ضغط تحقق للضغط على الحرف الأول من الملفات الشخصية والمجلدات المحددة دورة التلقائي </p>
</div>

@ -0,0 +1,804 @@
<?php
return array(
"path_api_select_file" => "يرجى اختيار ملف ...",
"path_api_select_folder" => "الرجاء تحديد مجلد ...",
"path_api_select_image" => "يرجى اختيار صورة ...",
"share_can_upload" => "السماح بالتحميل",
"move_error" => "فشل نقل",
"setting_basic" => "الإعدادات الأساسية",
"setting_user_sound_open" => "فتح الصوت",
"setting_user_animate_open" => "فتح الرسوم المتحركة",
"recycle_open_if" => "فتح سلة المحذوفات",
"recycle_open" => "فتح",
"setting_user_recycle_desc" => "بعد حذف سيتم حذف الحذف المادي مباشرة",
"setting_user_animate_desc" => "نافذة مفتوحة والرسوم المتحركة الأخرى",
"setting_user_sound_desc" => "تشغيل الصوت",
"setting_user_imageThumb" => "الصور المصغرة",
"setting_user_imageThumb_desc" => "تجربة تصفح أفضل بعد الفتح",
"setting_user_fileSelect" => "فتح الاختيار رمز الملف",
"setting_user_fileSelect_desc" => "رمز الملف الاختيار مفتاح اليسار، انقر بزر الماوس الأيمن فوق القائمة اختصار الإدخال",
"qrcode" => "URL رمز الاستجابة السريعة",
"theme_mac" => "ماك الأبيض الحد الأدنى",
"theme_win7" => "Windows 7",
"theme_win10" => "Windows 10",
"theme_metro" => "المترو الأزرق كلاسيك",
"theme_metro_green" => "مترو الضوء الأخضر",
"theme_metro_purple" => "مترو أنيقة الأرجواني",
"theme_metro_pink" => "مترو روز",
"theme_metro_orange" => "مترو برتقالية زاهية",
"theme_alpha_image" => "مشرق - الطيران",
"theme_alpha_image_sun" => "مشرق - الغروب",
"theme_alpha_image_sky" => "سمفونية - السماء الزرقاء",
"theme_diy" => "<b>مخصص</b>",
"theme_diy_title" => "إعدادات مخصصة لقضاء وقت الفراغ",
"theme_diy_background" => "خلفية",
"theme_diy_image" => "صور",
"theme_diy_color_blur" => "التدرج اللوني",
"theme_diy_image_blur" => "الصورة ضبابية",
"theme_diy_image_url" => "عنوان صور",
"theme_diy_color_start" => "اللون ابتداء من",
"theme_diy_color_end" => "نهاية اللون",
"theme_diy_color_radius" => "زاوية الانحدار",
"system_role_admin_set" => "الإداريين من جميع الحقوق، دون أن يحدد!",
"login_error_user_not_use" => "تم تعطيل المستخدم! الرجاء الاتصال بمسؤول",
"login_error_kod_version" => "الصراع نسخة",
"login_error_role" => "لا وجود مجموعة عرض أذونات، يرجى الاتصال بمسؤول",
"no_permission_group" => "أنت لست في هذه المجموعة!",
"no_permission_write" => "الدليل لايوجد إذن الكتابة",
"user" => "المستخدم",
"save_as" => "حفظ ك",
"check_update" => "تحديث",
"keyboard_type" => "وضع لوحة المفاتيح",
"font_family" => "الخطوط",
"code_mode" => "تسليط الضوء على تركيب",
"path_can_not_share" => "يدعم فقط مشاركة المستندات الخاصة بك!",
"path_can_not_action" => "هذا الدليل لا يدعم هذه العملية!",
"wap_page_pc" => "نسخة الكمبيوتر",
"wap_page_phone" => "متحرك",
"image_size" => "أبعاد الصورة",
"no_permission_action" => "لم يكن لديك هذا الإذن، يرجى الاتصال بمسؤول!",
"path_is_root_tips" => "قد حان إلى الدليل الجذر!",
"kod_group" => "منظمة",
"my_kod_group" => "أنا في القسم",
"space_tips_default" => "(GB) 0 لا حدود",
"space_tips_full" => "دون الحد",
"space_size" => "الفضاء",
"space_size_use" => "استخدام الفضاء",
"space_is_full" => "لا توجد مساحة كافية متبقية ، يرجى الاتصال بالمسؤول!",
"system_open_true_path" => "افتتح بنجاح في إدارة ملف!",
"group_role_error" => "خطأ أذونات دور (أي إعدادات إذن)",
"group_role_error_admin" => "أذونات غير كافية",
"markdown_content" => "جدول المحتويات",
"system_group" => "المستخدمين والإدارات",
"system_group_edit" => "إدارة القسم",
"system_group_role" => "هوية دور",
"system_group_create" => "إدارة جديدة",
"system_group_name" => "اسم القسم",
"system_group_father" => "الإدارة العليا",
"system_group_add" => "إضافة إدارة فرعية",
"system_group_remove" => "إزالة القسم",
"system_group_remove_tips" => "هل تريد بالتأكيد حذف القسم؟<br/>بعد حذف جزء من المستخدم سيتم إزالة، انتقل القطاع الفرعي إلى قطاع الجذر",
"system_group_select" => "اختر قسم",
"system_group_select_result" => "سوف الأعضاء تنتمي إلى القطاعات التالية",
"system_role_admin_tips" => "ملاحظات: غير مصرح لمسؤولي النظام للتحكم",
"system_member_action" => "إدارة المستخدم",
"system_member_add" => "العضو الجديد",
"system_member_role" => "أدوار إذن",
"system_member_role_select" => "اختر",
"system_member_password_tips" => "لا تملأ لا تعديل",
"system_set_home_path" => "كتالوج مخصص",
"system_set_home_path_tips" => "الدليل الافتراضي فارغ",
"system_member_group" => "حيث الإدارة",
"system_member_group_edit" => "قسم التحرير",
"system_member_remove" => "حذف العضو",
"system_member_remove_tips" => "تأكيد المستخدم حذف؟<br/>بعد إزالة دليل المستخدم سوف تمحى تماما",
"system_member_set_role" => "لتأكيد التغيير من الأذونات مجموعة مختارة من المستخدمين؟",
"system_member_remove_group" => "تحديد ستتم إزالة المستخدم المحدد من هذه المجموعة؟",
"system_member_import" => "إضافة السائبة",
"system_member_import_desc" => "مستخدم واحد في كل سطر،<br/>بالفعل موجودة يتم تجاهل بصمت",
"system_member_use" => "تمكين",
"system_member_unuse" => "تعطيل",
"system_member_space" => "تعيين حجم مساحة المستخدم ",
"system_member_space_tips" => " تعيين حجم مساحة المستخدم ",
"system_member_space_number" => " يجب ان يكون رقم!",
"system_member_group_config" => "دفعة إدارة الإعداد",
"system_member_group_remove" => "تمت إزالتها من القسم",
"system_member_group_insert" => "أضف إلى القسم",
"system_member_group_reset" => "إعادة تعيين القسم",
"system_member_group_error" => "خطأ في الإدارة",
"system_group_action" => "إدارة القسم",
"system_role_add" => "إضافة الهوية دور",
"system_role_read" => "قراءة فقط",
"system_role_write" => "يمكن القراءة والكتابة",
"system_setting_root_path" => "وصول الجذر",
"system_setting_root_path_desc" => "مسؤول النظام فقط يمكن الوصول إلى كافة الدلائل، يمكن للجماعات حقوقية أخرى من المستخدمين ترى سوى دليل المستخدم الخاص بهم. إذا كنت ترغب في تشغيل أو إيقاف وصول المسؤول<br/>إلى الدلائل الأخرى، يمكنك تعديل فب open_basedir المعلمات مكافحة المواقع المشتركة،<a href=\"https://www.google.com.hk/search?&q=php+open_basedir\" target=\"_lank\">وضع</a>",
"system_group_role_title" => "إدارة دور إدارة السلطة",
"system_group_role_remove" => "انقر فوق موافق لحذف دور القسم",
"system_group_role_style" => "أسلوب",
"system_group_role_display" => "سواء",
"system_group_role_display_desc" => "تعيين ما إذا كان سيتم عرض حقوق المستخدم قسم أم لا",
"role_type_name_read" => "قرأ",
"role_type_name_read:list" => "قائمة ملف",
"role_type_name_read:info" => "ملف (مجلد) خاصية عرض، بحث مجلد",
"role_type_name_read:copy" => "نسخ ملف",
"role_type_name_read:preview" => "معاينة الصورة (الصور والوثائق والفيديو والصوت)",
"role_type_name_read:download" => "ملف (مجلد) تحميل",
"role_type_name_write" => "إرسال",
"role_type_name_write:add" => "إنشاء ملف (مجلد)، استخراج ملف مضغوط",
"role_type_name_write:edit" => "حفظ الملف إلى تعديل",
"role_type_name_write:change" => "إعادة تسمية، وضبط بنية الدليل",
"role_type_name_write:upload" => "ملف (مجلد) تحميل وتنزيل عن بعد",
"role_type_name_write:remove" => "ملف (مجلد) حذف، وقطع",
"group_guest" => "آخر",
"group_guest_desc" => "أنت لست عضوا في القسم،<br/>يمكن الوصول فقط إلى [قسم المشتركة الدليل] المحتوى التالي، أذونات للقراءة فقط.",
"group_role_lebel_desc" => "أنت عضو في هذا القسم،<br/>جميع الوثائق داخل القسم جميع الحقوق محفوظة من قبل المشرف",
"button_save_and_add" => "حفظ والاستمرار في إضافة",
"path_cannot_search" => "الدليل لا يدعم البحث!",
"not_support" => "غير معتمدة!",
"group_not_exist" => "مجموعة العضو غير موجود!",
"upload_clear_all" => "مسح جميع",
"upload_clear" => "واضح المنجزة",
"upload_setting" => "نصب",
"upload_tips" => "يستخدم تحميل شريحة، لم تعد تخضع لحدود PHP.INI، وأوصت سحب مجلد الكروم وتجربة تحميل قطرة",
"upload_exist" => "ملف بنفس الاسم",
"upload_exist_rename" => "إعادة تسمية",
"upload_exist_replace" => "غطاء",
"upload_exist_skip" => "تخطى",
"upload_add_more" => "إضافة السائبة",
"more" => "أكثر",
"system_setting" => "إعدادات النظام",
"openProject" => "فتح محرر المشروع",
"url_download" => "تحميل",
"url_link" => "URL",
"app_type_link" => "الاختصارات",
"createLink" => "إنشاء اختصار",
"createLinkHome" => "إرسالها إلى اختصار سطح المكتب",
"createProject" => "إضافة إلى مشروع محرر",
"only_read" => "قراءة فقط",
"only_read_desc" => "الدليل لايوجد إذن الكتابة<br/>يمكنك تعيين الأذونات لهذا الدليل على الملقم",
"not_read" => "غير قابل للقراءة",
"explorerNew" => "رابط KOD",
"zip_download_ready" => "بعد ضغط تلقائيا التحميل، يرجى الانتظار ...",
"set_background" => "تعيين كخلفية سطح المكتب",
"share" => "سهم",
"my_share" => "نصيبي",
"group_share" => "مشاركة المجموعة الخارجية",
"share_edit" => "تعديل المشاركة",
"share_remove" => "إلغاء المشاركة",
"share_remove_tips" => "هل تريد بالتأكيد إلغاء المشاركة؟ سيتم إبطال الاتصال العام.",
"share_path" => "مشاركة المسار",
"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" => "التنزيلات:",
"share_open_page" => "فتح صفحة مشتركة",
"open_the_path" => "أدخل الدليل",
"recycle_clear" => "تفريغ سلة المهملات",
"recycle_clear_success" => "إفراغ سلة المهملات النجاح!",
"recycle_clear_info" => "هل أنت متأكد أنك تريد فارغة تماما سلة المهملات؟",
"fav_remove" => "إلغاء مجموعة",
"remove_item" => "البنود",
"uploading" => "تحميل",
"upload_tips_more" => "العديد من الملفات، على توصية تحميل مضغوط، ثم بفك على الانترنت!",
"uploading_move" => "في نقل الدمج ...",
"show_file" => "معاينة صفحة جديدة",
"unknow_file_title" => "فتح ملف تلميح!",
"unknow_file_tips" => "لم تدعم تطبيق هذا الملف، يمكنك:",
"unknow_file_try" => "محاولة",
"unknow_file_download" => "تحميل الملف",
"unknow_plugin_search" => "البحث ذات الصلة التطبيقات المثبتة",
"config_save_error_auth" => "فشل في حفظ التكوين، حظرت الإدارة هذا الامتياز!",
"config_save_error_file" => "خطأ، ملف قابل للكتابة!",
"beautify_code" => "كود المنسق",
"convert_case" => "تحويل القضية",
"convert_upper_case" => "تحويلها إلى أحرف كبيرة",
"convert_lower_case" => "تحويلها إلى أحرف صغيرة",
"editor_insert_time" => "الوقت الحالي ",
"editor_md5" => " تشفير Md5 ",
"editor_qrcode" => " سلسلة رمز ثنائي الأبعاد ",
"editor_regx" => " اختبار التعبير العادي ",
"editor_chinese" => " تحويل مبسط ",
"editor_chinese_simple" => " تحويل إلى الصينية المبسطة ",
"editor_chinese_traditional" => " تحويل إلى الصينية التقليدية ",
"editor_base64" => "Base64 الترميز ",
"editor_base64_encode" => " ترميز Base64 ",
"editor_base64_decode" => " فك Base64 ",
"editor_url" => " برنامج ترميز URL ",
"editor_url_encode" => " ترميز URL ",
"editor_url_decode" => " فك تشفير عنوان URL ",
"editor_unicode" => " برنامج ترميز يونيكود ",
"editor_unicode_encode" => " ترميز يونيكود ",
"editor_unicode_decode" => " فك Unicode",
"editor_tools_select_tips" => " يرجى تحديد المحتوى الذي تريد تحويله!",
"editor_calc" => "آلة حاسبة مجانية",
"shortcut" => "الاختصارات",
"use_free" => "الاستمرار في استخدام نسخة مجانية",
"learn_more" => "تعرف على المزيد",
"replace" => "استبدل",
"selectAll" => "اختر",
"reload" => "تحديث",
"about" => "في",
"complete_current" => "الإكمال التلقائي للتيار",
"view" => "رأي",
"tools" => "أداة",
"help" => "مساعدة",
"not_exists" => "غير موجود",
"group_role_fileDownload" => "التنزيلات",
"group_role_share" => "سهم",
"users_share" => "مشاركة",
"system_setting_save" => "إعدادات الأمان",
"system_setting_menu" => "إدارة القائمة",
"system_name" => "اسم البرنامج",
"system_name_desc" => "عنوان شعار البرنامج",
"system_desc" => "وصف البرنامج",
"path_hidden" => "الاستثناءات دليل",
"version_not_support" => "الإصدار الخاص بك لا يدعم هذا، يرجى الدخول إلى الموقع الرسمي لشراء نسخة مطورة!",
"version_not_support_number" => "ولما كان عدد من التقييد لا يدعم هذه العملية، يرجى شراء نسخة مطورة من الموقع الرسمي!",
"path_hidden_desc" => "الدلائل والملفات افتراضيا لا يتم عرض، مفصولة بفواصل",
"new_user_folder" => "يتم إنشاء مستخدم جديد الدليل الافتراضي",
"new_user_folder_desc" => "مفصولة بفواصل",
"new_user_app" => "يتم إنشاء مستخدم جديد التطبيق الافتراضي",
"new_user_app_desc" => "تطبيقات مركز التطبيق، تعددية مفصولة بفواصل",
"auto_login" => "آخر تسجيل الدخول التلقائي",
"auto_login_desc" => "تسجيل الدخول الافتراضي المستخدم<code>guest/guest</code>المستخدمين، وبعد الافتتاح لضمان وجود المستخدم",
"first_in" => "بعد تسجيل الدخول إلى الافتراضي",
"version_price_free" => "حر",
"version_name_1" => "VIP 1",
"version_name_2" => "VIP 2",
"version_name_3" => "VIP 3",
"version_name_4" => "VIP 4",
"version_name_5" => "VIP 5",
"version_name_6" => "VIP 6",
"version_vip_free" => "Free",
"version_vip_1" => "VIP 1",
"version_vip_2" => "VIP 2",
"version_vip_3" => "VIP 3",
"version_vip_4" => "VIP 4",
"version_vip_5" => "VIP 5",
"version_vip_6" => "VIP 6",
"path_can_not_write_data" => "الدليل غير قابل للكتابة، تعيين الدليل وكافة الدلائل إلى محاولة مرة أخرى بعد قراءة والكتابة!",
"menu_name" => "اسم القائمة",
"menu_hidden" => "إخفاء",
"menu_show" => "عرض",
"menu_move_down" => "إلى",
"menu_move_up" => "فوق",
"menu_move_del" => "حذف",
"menu_open_window" => "فتح نافذة جديدة",
"menu_sub_menu" => "القائمة الفرعية",
"url_path" => "الموقع الالكترونى",
"url_path_desc" => "الموقع الالكترونى أو رمز شبيبة",
"no_permission_read" => "لم يكن لديك إذن لقراءة!",
"no_permission_download" => "لم يكن لديك إذن لتحميل!",
"php_env_check" => "تعمل مراقبة البيئة:",
"php_env_error" => "مكتبة فب مفقودة",
"php_env_error_ignore" => "تجاهل وأدخل",
"php_env_error_version" => "PHP النسخة لا يمكن أن يكون أقل من 5.0",
"php_env_error_path" => "غير قابل للكتابة",
"php_env_error_list_dir" => "خادم الويب الخاص بك يفتح الدليل ميزة قائمة لأسباب أمنية، تعطيل هذه الميزة!<a href=\"https://www.google.com.hk/#newwindow=1&safe=strict&q=web+server+turn+off+directory+listing\" target=\"blank\">كيف؟</a>",
"php_env_error_gd" => "وينبغي أن تكون مكتبة GD بى مفتوحة، وإلا رمز، استخدم الصورة المصغرة لن تعمل بشكل صحيح",
"install_login" => "يمكنك استخدام تسجيل الدخول حساب التالية",
"install_enter" => "النظام",
"install_user_default" => "المسؤول: {0} / (دون تعيين كلمة مرور)<br/>مستخدم العادي: {1}<br/>مستخدم ضيف: {2}",
"login_root_password" => "تعيين كلمة مرور المسؤول",
"login_root_password_repeat" => "تأكيد كلمة المرور مرة أخرى",
"login_root_password_equal" => "كلمات السر اثنين لا تتطابق!",
"login_root_password_tips" => "تعيين كلمة مرور المسؤول!",
"forget_password" => "نسيت كلمة المرور",
"forget_password_tips" => "نسيت كلمة مرور المسؤول: <br/> الرجاء تسجيل الخادم حذف <b>./data/system/install.lock</b> إعادة تعيين. <br/><br/> غير مسؤول نسيت كلمة المرور: <br/> الرجاء الاتصال بمسؤول لإعادة تعيين!",
"copyright_desc" => "Kodexplorer هو نظام إدارة الوثائق على شبكة الإنترنت نالت استحسانا كبيرا، ويمكن استخدامه لإدارة وثيقة داخلية أو مشتركة، ويمكن أيضا أن تستخدم على خادم إدارة المواقع استبدال بروتوكول نقل الملفات، وحتى webIDE تطوير الإنترنت مباشرة. يمكنك أيضا برمجة التطور الثاني لدمج هذا في النظم الموجودة لديك.",
"copyright_contact" => "Contact us:kodcloud@qq.com <a>.</a> <a href=\"javascript:core.openWindow('http://bbs.kodcloud.com/');\">Feedback</a>",
"copyright_info" => "Copyright © <a href=\"https://kodcloud.com/?kodref=%s\" target=\"_blank\">kodcloud.com</a>.",
"copyright_pre" => "Powered by KodExplorer",
"kod_name" => "KodExplorer",
"kod_name_desc" => "المانجو سحابة • مستكشف",
"kod_power_by" => " - Powered by KodExplorer",
"kod_name_copyright" => "المانجو سحابة • مستكشف",
"kod_meta_name" => "KodExplorer",
"kod_meta_keywords" => "KodExplorer، KOD، kodCloud، ويب أو إس، webIDE، فب filemanage، filemanage، داو سحابة، سحابة المانجو، وأنظمة إدارة الوثائق، والقرص السحابية المشاريع، المستكشف ،، وثائق على شبكة الإنترنت، مكتب على الانترنت، المكتب على الانترنت، على الانترنت CAD المعاينة، والتحرير على الانترنت ، محرر على الانترنت",
"kod_meta_description" => "KodExplorer يمكن أن تلقي بظلالها الطريق (المانجو سابقا سحابة) هي الشركة الرائدة في مجال الحكومة / الغيوم الشركات الخاصة على الانترنت ونظام إدارة الوثائق عن المواقع الشخصية، نشر السحابية المشاريع الخاصة، وشبكة التخزين، وإدارة الوثائق على الانترنت، والمكتب على الانترنت لتوفير آمنة وخاضعة للرقابة، بسيطة وسهلة استخدام، وتطويعه للغاية المنتجات السحابية الخاصة. باستخدام ويندوز واجهة أسلوب وممارسات التشغيل، دون الحاجة إلى التكيف مع البدء بسرعة، ودعم المئات من تنسيق ملف المعاينة على الانترنت شعبية، وعرض وتحرير وقوية صديقة للبيئة، هو محاكمة مرة واحدة، لم يعد جزء لا يتجزأ من القطاع الخاص عروض السحابية.",
"kod_meta_copyright" => "kodcloud.com",
"login" => "تسجيل الدخول",
"guest_login" => "تسجيل يهمنا",
"username" => "تسجيل الدخول",
"userNickName" => "لقب المستخدم",
"password" => "كلمة المرور",
"login_code" => "رموز",
"need_check_code" => "رمز التوثيق الدخول المفتوح",
"need_check_code_desc" => "بعد تسجيل الدخول ، يجب عليك إدخال رمز التحقق.",
"setting_csrf_protect" => "حماية CSRF المفتوحة",
"setting_csrf_protect_desc" => "بعد نوع افتتاح هجوم يمكن أن تحمي بشكل فعال CSRF",
"login_rember_password" => "تذكر كلمة المرور",
"setting_show_root_group" => "قائمة بجميع الإدارات",
"setting_show_root_group_desc" => "قسم شجرة الجذر دليل ما إذا كان سيتم سرد جميع الإدارات",
"setting_show_share_user" => "قائمة جميع المستخدمين",
"setting_show_share_user_desc" => "يتم سرد قسم الجذر دليل شجرة لجميع مشاركة المستخدم",
"setting_clear_user_recycle" => "إفراغ سلة المحذوفات لجميع المستخدمين",
"setting_clear_cache" => "إفراغ ذاكرة التخزين المؤقت",
"setting_icp" => "حقوق الطبع والنشر أو سجل رقم",
"setting_global_css" => "المغلق العالمي مخصص",
"setting_global_css_desc" => "وكل الصفحات إدراج المغلق مخصص",
"setting_global_html" => "إحصائية HTML كود",
"setting_global_html_desc" => "سيتم إدراج جميع صفحات هذا أتش تي أم أل كود الفقرة، رمز يمكن وضعها إحصاءات طرف ثالث",
"us" => "kodcloud.com",
"login_not_null" => "اسم المستخدم وكلمة المرور لا يمكن أن يكون فارغا!",
"code_error" => "رموز الخطأ",
"password_error" => "اسم المستخدم أو كلمة المرور غير صحيحة!",
"password_not_null" => "كلمة السر لا يمكن أن يكون فارغا!",
"old_password_error" => "القديمة كلمة السر غير صحيحة!",
"permission" => "إذن!",
"permission_edit" => "تعديل ضوابط",
"file_info_owner" => "مالك",
"file_info_group" => "مجموعة",
"no_permission" => "عطل المشرف هذا الامتياز!",
"no_permission_ext" => "المسؤول حظر هذا النوع من أذونات الملف",
"dialog_max" => "تعظيم",
"dialog_min" => "خفض",
"dialog_min_all" => "تصغير كافة",
"dialog_display_all" => "عرض كل النوافذ",
"dialog_close_all" => "إغلاق جميع",
"open" => "فتح",
"others" => "آخر",
"open_with" => "فتح ل ...",
"close" => "قريب",
"close_all" => "إغلاق جميع",
"close_left" => "إغلاق علامة التبويب اليسار",
"close_right" => "إغلاق علامات التبويب إلى اليمين",
"close_others" => "وثيقة أخرى",
"loading" => "عملية ...",
"warning" => "تحذير",
"getting" => "الحصول على ...",
"sending" => "نقل البيانات ...",
"data_error" => "خطأ البيانات!",
"get_success" => "الحصول على النجاح!",
"save_success" => "حفظ بنجاح!",
"success" => "عملية ناجحة",
"error" => "فشلت العملية",
"error_repeat" => "العملية الفاشلة، والاسم موجود بالفعل!",
"word_error" => "فشل ",
"word_success" => " نجاح",
"system_error" => "خطأ في النظام",
"name" => "اسم",
"type" => "نوع",
"contain" => "احتواء",
"address" => "موقع",
"size" => "حجم",
"byte" => "بايت",
"path" => "مسار",
"action" => "التشغيل",
"create_time" => "خلق",
"modify_time" => "تعديل",
"last_time" => "آخر زيارة",
"sort_type" => "الترتيب حسب",
"time_type" => "Y/m/d H:i:s",
"time_type_info" => "Y/m/d H:i:s",
"public_path" => "الدليل العام",
"system_path_not_change" => "دليل النظام، لا يمكن تعديلها",
"file" => "ملف",
"folder" => "ملف",
"copy" => "نسخة",
"past" => "عصا",
"clone" => "إنشاء نسخة",
"cute" => "جز",
"cute_to" => "الانتقال إلى ...",
"copy_to" => "نسخة ...",
"remove" => "حذف",
"remove_force" => "إزالة",
"info" => "ممتلكات",
"list_type" => "رأي",
"list_icon" => "رمز مجموعة",
"list_list" => "ترتيب قائمة",
"list_list_split" => "وضع العمود",
"sort_up" => "زيادة",
"sort_down" => "تقليل",
"order_type" => "الترتيب حسب",
"order_desc" => "تنازلي",
"order_asc" => "تصاعدي",
"rename" => "إعادة تسمية",
"add_to_fav" => "أضف إلى المفضلة",
"search_in_path" => "البحث في المجلد",
"add_to_play" => "إضافة إلى قائمة تشغيل",
"manage_fav" => "إدارة المفضلة",
"refresh_tree" => "شجرة الدليل على تحديث",
"manage_folder" => "إدارة الدليل",
"close_menu" => "إغلاق القائمة",
"zip" => "إنشاء حزمة مضغوط",
"unzip" => "لاستخراج ...",
"unzip_folder" => "فك الضغط إلى مجلد",
"unzip_this" => "استخراج للتيار",
"unzip_to" => "لاستخراج ...",
"zipview_file_big" => "الملف كبير جدا، ومن ثم استخراج عملية المعاينة!",
"clipboard" => "عرض الحافظة",
"clipboard_clear" => "الحافظة فارغة",
"full_screen" => "شاشة كاملة",
"folder_info_item" => "البنود",
"folder_info_item_select" => "واختيار",
"file_load_all" => "انقر نقرا مزدوجا فوق لتحميل جميع ......",
"tips" => "موجه",
"ziping" => "فتح سوستة ...",
"unziping" => "استخراج ...",
"moving" => "تشغيل خدمات الهاتف النقال ...",
"remove_title" => "تأكيد حذف",
"remove_info" => "تأكيد لحذف العنصر المحدد؟",
"remove_title_force" => "حذفه نهائيا",
"remove_info_force" => "أنت متأكد أنك تريد حذف هذه الوثيقة بشكل دائم؟",
"name_isexists" => "خطأ، والاسم موجود بالفعل!",
"install" => "تثبيت",
"width" => "عرض",
"height" => "ارتفاع",
"app" => "تطبيقات الخفيفة",
"app_store" => "تطبيقات الخفيفة",
"app_create" => "إنشاء تطبيق",
"app_edit" => "تعديل التطبيق",
"app_group_all" => "كامل",
"app_group_game" => "لعبة",
"app_group_tools" => "أداة",
"app_group_reader" => "قرأ",
"app_group_movie" => "تلفزيون",
"app_group_music" => "موسيقى",
"app_group_life" => "حياة",
"app_group_others" => "آخر",
"app_desc" => "وصف",
"app_icon" => "تطبيقات رمز",
"app_icon_show" => "عنوان الموقع أو الدليل",
"app_group" => "حزم التطبيق",
"app_type" => "نوع",
"app_type_url" => "صلة",
"app_type_code" => "تمديد شبيبة",
"app_display" => "الخارج",
"app_display_border" => "بلا حدود (أي تحديد بلا حدود)",
"app_display_size" => "تغيير حجم (راجع للتعديل)",
"app_size" => "حجم",
"app_url" => "عنوان الرابط",
"app_code" => "كود شبيبة",
"edit" => "تحرير",
"edit_can_not" => "لا ملف نصي",
"edit_too_big" => "الملف كبير جدا، لا يمكن أن يكون أكبر من 40M",
"open_default" => "افتراضي المفتوحة",
"open_ie" => "فتح المتصفح",
"refresh" => "تحديث",
"refresh_all" => "فرض تحديث",
"newfile" => "ملف جديد",
"newfile_save_as" => "حفظ ل",
"newfolder" => "مجلد جديد",
"newothers" => "جديد أخرى",
"path_loading" => "تحميل ...",
"go" => "المشي!",
"go_up" => "الطبقة العليا",
"history_next" => "إلى الأمام",
"history_back" => "تراجع",
"address_in_edit" => "اضغط للدخول في وضع التحرير",
"double_click_rename" => "انقر نقرا مزدوجا فوق إعادة تسمية",
"double_click_open" => "انقر نقرا مزدوجا لفتح",
"path_null" => "مجلد فارغ!",
"file_size_title" => "رمز الحجم",
"file_size_small_super" => "الصغيرة جدا",
"file_size_small" => "أيقونات صغيرة",
"file_size_default" => "الرموز",
"file_size_big" => "رموز كبيرة",
"file_size_big_super" => "دلالات كبيرة",
"upload" => "تحميل",
"upload_ready" => "انتظار للتحميل",
"upload_success" => "تحميل ناجحة",
"upload_path_current" => "التبديل إلى الدليل الحالي",
"upload_select" => "حدد ملف",
"upload_max_size" => "الحد الأقصى المسموح به",
"upload_size_info" => "إذا كنت ترغب في تكوين المزيد، يرجى تعديل الحد الأقصى المسموح PHP.INI تحميل. عند تحديد ملف أكبر من هذا التكوين يتم تصفيتها تلقائيا.",
"upload_error" => "فشل تحميل",
"upload_error_http" => "شبكة أو جدار حماية أخطاء",
"upload_muti" => "تحميل متعددة ملف",
"upload_drag" => "سحب وإسقاط تحميل",
"upload_drag_tips" => "تخفيف لتحميل!",
"path_not_allow" => "اسم الملف غير مسموح",
"download" => "تحميل",
"downloading" => "تحميل ...",
"download_address" => "تحميل",
"download_ready" => "سيتم تحميل",
"download_success" => "تحميل النجاح!",
"download_error" => "تحميل فشل!",
"download_error_create" => "خطأ الكتابة!",
"download_error_exists" => "رابط إلى ملف فشل!",
"upload_error_null" => "أي ملف!",
"upload_error_big" => "يتجاوز حجم الملف حدود الخادم",
"upload_error_move" => "فشل نقل الملف!",
"upload_error_exists" => "الملف موجود مسبقا",
"upload_local" => "تحميل المحلي",
"download_from_server" => "بعد تحميل",
"save_path" => "حفظ مسار",
"upload_select_muti" => "إن تعددية تحميل ملف اختيار",
"search" => "بحث",
"searching" => "البحث ...",
"search_result" => "نتائج البحث",
"seach_result_too_more" => "نتائج البحث كثيرة جدا، فمن المستحسن لدليل أو الكلمات",
"search_null" => "لا النتائج!",
"search_uplow" => "حالة الأحرف",
"search_content" => "محتويات ملف البحث",
"search_info" => "الرجاء إدخال مصطلح البحث ومسارات البحث!",
"search_ext_tips" => "بواسطة | فصلها، على سبيل المثال فب | شبيبة | المغلق<br/>لا تملأ بحث ملف النص الافتراضي",
"file_type" => "نوع الملف",
"goto" => "انتقال إلى",
"server_dwonload_desc" => "تم إضافة مهمة إلى قائمة التحميل",
"parent_permission" => "أذونات الدليل الأم",
"root_path" => "المستندات",
"lib" => "مخزن",
"fav" => "المرجعية",
"desktop" => "سطح المكتب",
"browser" => "المتصفح",
"my_computer" => "جهاز الكمبيوتر الخاص بي",
"recycle" => "قمامة",
"my_document" => "المستندات",
"my_picture" => "صوري",
"my_music" => "الموسيقى",
"my_movie" => "بلدي فيديو",
"my_download" => "بلدي التنزيلات",
"ui_desktop" => "سطح المكتب",
"ui_explorer" => "إدارة ملف",
"ui_editor" => "محرر",
"adminer" => "adminer",
"ui_project_home" => "مشروع الرئيسية",
"ui_login" => "تسجيل الدخول",
"ui_logout" => "استقال",
"setting" => "إعدادات النظام",
"setting_title" => "خيارات",
"setting_user" => "مركز الشخصية",
"setting_password" => "تغيير كلمة المرور",
"setting_password_old" => "كلمة السر القديمة",
"setting_password_new" => "المنقحة ل",
"setting_language" => "إعدادات اللغة",
"setting_member" => "إدارة المستخدم",
"setting_group" => "إدارة مجموعة المستخدم",
"setting_group_add" => "إضافة مجموعة العضو",
"setting_group_edit" => "تحرير المجموعات العضو",
"setting_theme" => "إعدادات موضوع",
"setting_wall" => "إعدادات خلفية",
"setting_wall_desktop" => "خلفية سطح المكتب",
"setting_wall_desktop_list" => "إدارة خلفية سطح المكتب",
"setting_wall_login_list" => "تسجيل الدخول إدارة خلفيات",
"setting_wall_login_tips" => "نصيحة: عندما يكون هناك أكثر من قطعة واحدة ، سيتم تدوير خلفية واجهة تسجيل الدخول بشكل عشوائي",
"setting_wall_diy" => "خلفية مخصصة:",
"setting_wall_info" => "الصورة عنوان URL، يمكن أن الصور المحلية يكون الحق في الحصول على المتصفح لفتح صورة",
"setting_fav" => "مدير المرجعية",
"setting_help" => "استخدام التعليمات",
"setting_about" => "حول أعمال",
"setting_success" => "وقد اتخذت تعديل أثر!",
"can_not_repeat" => "لا يسمح للتكرار",
"absolute_path" => "عنوان مطلق",
"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" => "إضافة مستخدم",
"password_null_not_update" => "وقالوا انهم لم يتغير لا شغل في كلمة السر",
"if_save_file_tips" => "لا يتم حفظ بعض الملفات ، هل أنت متأكد من إغلاق النافذة؟",
"if_save_file" => "لم يتم حفظ الملف، تريد حفظ؟",
"if_remove" => "تأكيد حذف",
"member_remove_tips" => "بعد إزالة دليل المستخدم سيتم مسح",
"group_remove_tips" => "بعد إزالة مجموعة المستخدم من المستخدمين لا يمكن تسجيل الدخول<br/>(تحتاج إلى إعادة تعيين مجموعة المستخدم)",
"group_name" => "اسم مجموعة المستخدم",
"group_name_tips" => "توصية الاسم باللغة الانكليزية، لا يمكن تكرارها",
"group_desc" => "اسم العرض",
"group_desc_tips" => "اسم المجموعة الوصف",
"group_role_ext" => "القيود تمديد",
"group_role_ext_tips" => "مع متعددة | فصل",
"group_role_file" => "إدارة ملف",
"group_role_upload" => "السماح بالتحميل",
"group_role_user" => "بيانات المستخدم",
"group_role_group" => "إدارة مجموعة المستخدم",
"group_role_member" => "إدارة المستخدم",
"group_role_mkfile" => "ملف جديد",
"group_role_mkdir" => "مجلد جديد",
"group_role_pathrname" => "إعادة تسمية",
"group_role_pathdelete" => "حذف ملف",
"group_role_pathinfo" => "خصائص ملف",
"group_role_pathmove" => "الخطوة (نسخ / قص / لصق / جر العملية)",
"group_role_zip" => "ضغط",
"group_role_unzip" => "بفك",
"group_role_search" => "بحث",
"group_role_filesave" => "حفظ الملف إلى تعديل",
"group_role_can_upload" => "تحميل وتنزيل",
"group_role_download" => "بعد تحميل",
"group_role_passowrd" => "تغيير كلمة المرور",
"group_role_config" => "بيانات التكوين",
"group_role_fav" => "عمليات المرجعية (إضافة / تحرير / حذف)",
"action_list" => "عرض قائمة",
"action_add" => "إضافة",
"action_edit" => "تحرير",
"action_del" => "حذف",
"group_role_ext_warning" => "تحميل لا تسمح بمثل هذه الملفات،<br/>إعادة تسمية (التي أعيدت تسميتها لتمديد معين)،<br/>تعديل إنقاذ، بعد التحميل، استخراج",
"group_tips" => "<li> 1. لا يمكن تكرار اسم مجموعة المستخدم ، بعد تعديل اسم المجموعة ، فإنها تنتمي إلى المستخدم المعاد تنظيمها وترتبط تلقائيًا. </li><li> 2. الحد من العلاقة بين أمن النظام ، يرجى توخي الحذر <i>(إذا قمت بإنشاء php جديد في دليل الويب ؛ فهذا يعني أن تغيير أذونات البرنامج لهذا المستخدم يكاد يكون مستحيلاً)</i> </li><li> 3. إدارة الأسرة ، وإدارة مجموعة الحقوق ، ومشاهدة الحقوق وإضافة وحذف وحذف الحقوق مرتبطة ، وترتبط البرامج تلقائيا </li><li> 4. بعد تعيين مجموعة الإذن لإضافة مجموعة الإذن ، لا يتم الحصول على الإذن التالي <i>(هذا الإذن يعادل أعلى إذن).</i> </li>",
"not_null" => "الحقول المطلوبة لا يمكن أن يكون فارغا!",
"picture_can_not_null" => "صور لا يمكن أن يكون فارغا!",
"rname_success" => "إعادة تسمية النجاح!",
"please_inpute_search_words" => "الرجاء إدخال سلسلة للبحث عن",
"remove_success" => "حذف بنجاح!",
"remove_fali" => "حذف فشل!",
"clipboard_null" => "الحافظة فارغة!",
"create_success" => "نجاح جديد!",
"create_error" => "فشل جديد، والتحقق من أذونات الدليل!",
"copy_success" => "[نسخ] - تغطية نجاح الحافظة!",
"cute_success" => "[قطع] - تغطية نجاح الحافظة!",
"clipboard_state" => "وضع الحافظة:",
"no_permission_write_all" => "الملف أو الدليل غير قابل للكتابة",
"no_permission_write_file" => "لايوجد ملف إذن الكتابة",
"no_permission_read_all" => "الملف أو الدليل لا يوجد لديه إذن القراءة",
"copy_not_exists" => "لا وجود مصدر",
"current_has_parent" => "المجلد الهدف هو مجلد فرعي من المجلد المصدر!",
"past_success" => "<b>اكتمال عملية اللصق</b>",
"cute_past_success" => "اكتمال<b>عملية قطع</b>(تم حذف الملف المصدر، الحافظة فارغة)",
"zip_success" => "ضغط الانتهاء",
"not_zip" => "لا أرشيف",
"zip_null" => "لم يتم تحديد ملف أو دليل",
"unzip_success" => "بفك كاملة",
"gotoline" => "القفز إلى خط",
"path_is_current" => "المسار والمسار الحالي لفتح نفسها!",
"path_exists" => "الاسم موجود بالفعل!",
"undo" => "إلغاء",
"redo" => "مكافحة إلغاء",
"preview" => "المعاينة",
"wordwrap" => "التفاف",
"show_gutter" => "تظهر أرقام الأسطر",
"char_all_display" => "تظهر الأحرف غير مرئية",
"auto_complete" => "يطالب تلقائيا",
"auto_save" => "حفظ تلقائيا",
"function_list" => "قائمة وظيفة",
"code_theme" => "الترميز ستايل",
"font_size" => "حجم الخط",
"confirm" => "هل تريد بالتأكيد القيام بذلك؟",
"button_ok" => "حدد",
"button_submit" => "عرض",
"button_set" => "نصب",
"button_cancel" => "ألغيت",
"button_edit" => "تحرير",
"button_save" => "حفظ",
"button_apply" => "تطبق",
"button_save_all" => "حفظ الكل",
"button_not_save" => "لا تقم بحفظ",
"button_add" => "إضافة",
"button_back_add" => "العودة إلى إضافة",
"button_del" => "حذف",
"button_save_edit" => "حفظ التغييرات",
"button_save_submit" => "حفظ إرسال",
"button_more" => "أكثر",
"button_select_all" => "تحديد الكل / عكس التحديد",
"charset_AUTO" => "تحديد تلقائي",
"charset_UTF_8" => "Unicode",
"charset_UTF_16" => "Unicode",
"charset_CP1256" => "العربية",
"charset_ISO_8859_6" => "العربية",
"charset_ISO_8859_10" => "اللغات الاسكندنافية",
"charset_CP1257" => "لغات البلطيق",
"charset_ISO_8859_13" => "لغات البلطيق",
"charset_ISO_8859_4" => "لغات البلطيق",
"charset_BIG5_HKSCS" => "繁体-香港",
"charset_BIG5" => "繁体-台湾",
"charset_Georgian_Academy" => "الجورجية",
"charset_PT154" => "الكازاخية",
"charset_CP949" => "الكورية",
"charset_EUC_KR" => "الكورية",
"charset_GB18030" => "الصينية المبسطة",
"charset_GBK" => "الصينية المبسطة",
"charset_ISO_8859_14" => "سلتيك",
"charset_CP1133" => "لاو",
"charset_ISO_8859_16" => "الرومانية",
"charset_ISO_8859_3" => "جنوب أوروبا",
"charset_EUC_JP" => "اليابانية",
"charset_ISO_2022_JP" => "اليابانية",
"charset_SHIFT_JIS" => "اليابانية",
"charset_KOI8_T" => "اللغة الطاجيكية",
"charset_ISO_8859_11" => "التايلاندية",
"charset_TIS_620" => "التايلاندية",
"charset_CP1254" => "اللغة التركية",
"charset_CP1251" => "السيريلية",
"charset_ISO_8859_5" => "السيريلية",
"charset_KOI8_R" => "السيريلية",
"charset_KOI8_U" => "السيريلية",
"charset_CP1252" => "اللغات الأوروبية الغربية",
"charset_ISO_8859_1" => "اللغات الأوروبية الغربية",
"charset_ISO_8859_15" => "اللغات الأوروبية الغربية",
"charset_Macintosh" => "اللغات الأوروبية الغربية",
"charset_CP1255" => "العبرية",
"charset_ISO_8859_8" => "العبرية",
"charset_CP1253" => "اللغة اليونانية",
"charset_ISO_8859_7" => "اللغة اليونانية",
"charset_ARMSCII_8" => "الأرميني",
"charset_CP1258" => "الفيتنامية",
"charset_VISCII" => "الفيتنامية",
"charset_CP1250" => "اللغات الأوروبية المركزية",
"charset_ISO_8859_2" => "اللغات الأوروبية المركزية",
"charset_default_set" => "ترميز ملف",
"charset_convert_save" => "حفظ الملف المشفرة كما",
"PluginCenter" => "مركز التوصيل",
"PluginBuy" => "إذن الشراء",
"PluginInstalled" => "تم تثبيت",
"PluginUpdate" => "تحديث",
"PluginListNull" => "لا يوجد أي محتوى!",
"PluginType" => "تصنيف",
"PluginTypeAll" => "كامل",
"PluginTypeFile" => "ملف المحسن",
"PluginTypeSafe" => "أدوات الأمن",
"PluginTypeTools" => "فائدة",
"PluginTypeMedia" => "الوسائط المتعددة",
"PluginTypeOthers" => "آخر",
"PluginInstall" => "تثبيت المكونات",
"PluginEnable" => "تمكين المكونات الإضافية",
"PluginDisable" => "تعطيل",
"PluginRemove" => "إلغاء تثبيت المكونات",
"PluginConfig" => "تكوين المساعد",
"PluginStatus" => "دولة",
"PluginStatusEnabled" => "تمكين",
"PluginStatusDisabled" => "لم يتم تمكين",
"PluginStatusNotInstall" => "لا المثبتة",
"PluginInstalling" => "تركيب ...",
"PluginHasUpdate" => "التحديثات",
"PluginUpdateStart" => "تحديث المكونات في",
"PluginNeedConfig" => "الحاجة إلى تمكين التكوين الأولي",
"PluginConfigNotNull" => "الحقول المطلوبة لا يمكن أن يكون فارغا!",
"PluginOpen" => "فتح",
"PluginAuther" => "مؤلف",
"PluginVersion" => "طبعة",
"PluginDownloadNumber" => "التثبيت",
"PluginBack" => "عودة",
"PluginReadme" => "وصف",
"PluginResetConfig" => "استعادة الإعدادات الافتراضية",
"PluginInstallSelf" => "التثبيت اليدوي",
"Plugin.config.auth" => "أذونات",
"Plugin.config.authDesc" => "كافة الإعدادات المتاحة، أو تحديد المستخدمين، ومجموعات المستخدمين وجماعات حقوق يمكن استخدام",
"Plugin.config.authOpen" => "الدخول المفتوح",
"Plugin.config.authOpenDesc" => "لا حاجة لزيارة يمكن الوصول إليها، ويمكن استخدامها للاتصال الخارجي واجهة",
"Plugin.config.authAll" => "حائز",
"Plugin.config.authUser" => "المستخدم",
"Plugin.config.authGroup" => "قسم مخصص",
"Plugin.config.authRole" => "جماعة حقوقية",
"Plugin.Config.openWith" => "أسلوب مفتوح",
"Plugin.Config.openWithDilog" => "الحوار الداخلي",
"Plugin.Config.openWithWindow" => "فتح صفحة جديدة",
"Plugin.Config.fileSort" => "الأولوية جمعية الإرشاد",
"Plugin.Config.fileSortDesc" => "أكبر التمديد لفتح أولوية أعلى",
"Plugin.Config.fileExt" => "تنسيقات الملفات المدعومة",
"Plugin.Config.fileExtDesc" => "تمديد المرتبطة في المكونات",
"Plugin.tab.basic" => "الإعدادات الأساسية",
"Plugin.tab.auth" => "أذونات",
"Plugin.tab.others" => "الإعدادات الأخرى",
"Plugin.default.aceEditor" => "محرر الآس",
"Plugin.default.htmlView" => "معاينة صفحة ويب",
"Plugin.default.picasa" => "بيكاسا صورة التصفح",
"Plugin.default.zipView" => "Archive Preview",
"Plugin.default.jPlayer" => "لاعب jPlayer",
"Plugin.auth.viewList" => "قائمة المكونات الإضافية",
"Plugin.auth.setting" => "إعدادات البرنامج المساعد",
"Plugin.auth.status" => "إيقاف",
"Plugin.auth.install" => "تثبيت / إلغاء",
"Explorer.UI.openWith" => "حدد فتح",
"Explorer.UI.openWithText" => "المفكرة لفتح",
"Explorer.UI.appSetDefault" => "تعيين مفتوحة الافتراضي",
"Explorer.UI.appAwaysOpen" => "دائما استخدام البرنامج المحدد لفتح هذا الملف",
"Explorer.UI.selectAppDesc" => "حدد البرنامج الذي تريد فتح هذا الملف",
"Explorer.UI.selectAppWarning" => "يرجى اختيار التطبيق!",
"Explorer.UI.appTypeSupport" => "أيد",
"Explorer.UI.appTypeAll" => "جميع التطبيقات",
"kodApp.oexe.edit" => "تحرير تطبيق الضوء",
"kodApp.oexe.open" => "فتح التطبيق من الضوء"
);

@ -0,0 +1,33 @@
<div class="box">
<div class="title"><span>KODExplorer т.е. Какво?</span></div>
<p>KODExplorer е с отворен код, уеб-базирани управление на онлайн документ, редактор на код. Тя осигурява един вид класически Windows потребителски интерфейс, набор от онлайн управление на документи, файл преглед, редактиране, качване, изтегляне, разархивирайте онлайн възпроизвеждане на музика. Позволява да се постигне уеб програмиране директно в браузъра, изходния код файл преглед, и разположи собственика на сайта и местната операцията толкова лесно, бързо и безопасно опит.</p>
<p><b>- дизайн -</b></p>
<p>класическата традиция, стремежът към иновации, за да предоставят на потребителите с удобен, сигурен и лесен за използване онлайн система за управление на облак.</p>
<p>когато (когато), където (където), има в интернет всеки път, когато искате (искате) е вашият инструмент за управление (4W политика).</p>
<p><b>- потребителски ориентирани -</b></p>
<p>в момента система за управление на KODExplorer разположени главно в личния Cloud Hosting, малък предприятието облак ресурси, управление на мрежата диск, управление на малки и средни обекти. Web Developer & Мастер (ветерани): онлайн редактор, компресиран бекъп, разгръщане, класически експлоатация прозорци интерфейс, Лесно е да започнете и да се отървете от SSH домакин, FTP команда сложни сондажни работи.</p>
<p>личен частен облак (новобранец): Управление на мрежови дискови ресурси, на същата операция класически Windows интерфейс, можете да поставите музика Преглед на мрежовото устройство на, телевизори файлове, качване и сваляне на бързо и лесно.</p>
</div>
<div class="box">
<div class="title"><span>Удобства</span></div>
<p>цялостна управление на документи, мощен онлайн файл редактор</p>
<p>където и да сте, можете да управлявате вашите файлове и онлайн забавление, онлайн код писане! Само като подходящи за използване като операционната система.</p>
<p>обширна полето местен опит трансплантация операция, плъзгане, избор кутия, бързи клавиши, търсене на файлове (съдържание търсене) ......</p>
<p>подбор кутия, плъзгане движение, влачене и пускане качването, онлайн редактор, видео плейър, декомпресиране. Пълен Аякс изпълнение гаранция и опит!</p>
<p>всяка функция директна непрекъсната връзка; в диалоговия форма, функции за управление на много задачи</p>
<p>Editor поддържа мулти-документ; подкрепа ZendCoding HTML, CSS, JS-висока ефективността на кодирането!</p>
<p>перфектен китайски подкрепа, чете решават различни ситуации;</p>
</div>
<div class="box">
<div class="title"><span>отворен код технология приемане</span></div>
<p><b>1.Jquery:</b>jpuery (плъгин: Hotkeys.ztree.contentmenu) .js мейнстрийм рамка за развитие. Операция на операцията по Dom, BOM, операцията CSS, и Аякс пакет</p>
<p><b>2.ArtDialog:</b>красив дизайн, силно браузър съвместимост диалоговия джаджа. Така че поп-нагоре дръжка, събития, и предаване на данни, за да получите по-добра единно управление</p>
<p><b>3.Ztree:</b>контрол списък дърво, мащабируемост е много силен дърво манипулация на данни джаджа</p>
<p><b>4.codemirror:</b>редактор код JS плъгини, поддържа множество програмни езици за подчертаване</p>
<p><b>5.zendcoding:</b>опора HTML кодове бърз запис на плъгини. Опростява определението на код е написан. Обикновено компилация</p>
<p><b>6.less:</b>ефективност, функционален модел на развитие CSS, за да се подобри предния край на CSS стилове повторна употреба на , Обикновено компилация</p>
<p><b>7.SWFUpload:</b>флаш качване на файлове</p>
<p><b>8 .CMP4:</b>много добър играч флаш плъгин мултимедийни файлове, поддръжка на поточна медия, популярен инструмент за възпроизвеждане на музика видео. Подкрепа за кожата, силно конфигурируеми настройки. Dynamic списък XML зареден. MMS поточна медия, RSTP отворен лиценз източник подкрепа за възпроизвеждане на носители</p>
</div>

@ -0,0 +1,72 @@
<div class="intro-left">
<div class="tips blue">
<h1> <span>Богата функционалност</span> </h1>
<p> Код автоматично подсказва </p>
<p> Multi-тема: Изберете вашия любим програмиране стил </p>
<p> По поръчка на шрифта: за употреба на сцена </p>
<p> Multi редактиране на курсора, за редактиране на блок онлайн опит в програмирането, сравнима с възвишеното </p>
<p> Блок сгъване, разширяване; увийте </p>
<p> Поддръжка на множество табове, плъзнете превключване последователност; </p>
<p> Поддържането на множество документи, търсене и заместване; История; </p>
<p> Auto-пълна [], {}, (), &#39;&#39; &#39;&#39; </p>
<p> Онлайн преглед в реално време, която ви позволява да се влюби в програми онлайн! </p>
<p> zendcodeing подкрепа, пишат код осемдесет </p>
<p> Допълнителни функции чакат за вашето откритие ...... </p>
</div>
<div class="tips orange">
<h1> <span>150 вида код Отбелязването</span> </h1>
<p> Съвет: HTML, JavaScript, CSS, по-малко, дързък, SCSS </p>
<p> Web Design: PHP, Perl, Python, рубин, elang, отиде ... </p>
<p> Традиционните езици: Java, C, C ++, C #, ActionScript, VBScript ... </p>
<p> Други: евтино, черупки, SQL, Lua, XML, YAML ... </p>
</div>
</div>
<div class="intro-right">
<div class="tips green">
<h1> <span>Shortcut действие</span> </h1>
<pre> Обикновено използваните комбинации:
Ctrl + S за да запаметите
Ctrl + A изберете всички Ctrl + х Cut
Ctrl + C Ctrl + V паста копие
Ctrl + Z Undo Undo Anti Ctrl + Y
Ctrl + F, за да се намери замяна Ctrl + F + F
Win + ALT + 0 колапс всички победа + Alt + Shift + 0 Отваряне на всички
ESC [търсене Exit отменя автоматично подсказва ...]
Ctrl-Shift-ите Preview
Ctrl-Shift-д шоу &amp; Close функция
</pre>
<pre> Изберете:
Mouse палатка - драг
SHIFT + начало / край / нагоре / ляво / надолу / надясно
SHIFT + PageUp / PageDown флип нагоре и надолу, за да изберете
Ctrl + Shift + начало / край на текущата курсора в началото и края
ALT + мишката, за да плъзнете селекцията на блок
Ctrl + Alt + г партида изберете и въведете текущата редактор мулти-таб
</pre>
<pre> Курсор:
начало / край / нагоре / ляво / надолу / надясно
Ctrl + начало / край преместите курсора на документ главата / опашката
Ctrl + P Идете на съвпадение тагове
PageUp / PageDown курсора нагоре и надолу
ALT + лява / дясна стрелка, за да се премести в горната част на линията
Shift + ляво / дясно на курсора до края на реда и
Ctrl + L, за да скочи до специфичен ред
Ctrl + Alt + нагоре / надолу (по-долу) се увеличи на курсора
</pre>
<pre> Edit:
Ctrl + / Коментар &amp; разкоментирайте Ctrl + Alt + обосновано
раздела маса смяна подравняване + маса общата маса напредък
изтриване изтриване изтриване на цялата линия Ctrl + D
Ctrl + Delete, за да изтриете ред на правилната дума
Ctrl / Shift + Backspace, за да изтриете думата в ляво
ALT + SHIFT + нагоре / надолу и се добавя към линията на копие (по-долу) самолет
Alt + Delete, за да изтриете съдържанието на правото на курсора
ALT + нагоре / надолу на текущия ред и ред (следващия обмен линия) на
Ctrl + Shift + D редове копирани и добавени към следното
Ctrl + Delete, за да изтриете правото на думата
Ctrl + Shift + U превърнати в малки букви
Ctrl + U избран текст в главни букви
</pre>
</div>
</div>

@ -0,0 +1,36 @@
<div class="box">
<div class="title"> <span>Управление на файлове</span> </div>
<p><i class="icon-tags"></i> File Selection: радио, мишка палатка, смени изборите, Ctrl случайно избран, клавиатурата нагоре и надолу, у дома, край селекция. </p>
<p><i class="icon-folder-open"></i> операция на файла: След като изберете даден файл, можете да копирате, нарязани, изтриване, разглеждане на свойствата на компресия, преименувате, отворен за визуализация и други операции ...... </p>
<p><i class="icon-cloud-upload"></i> Качване на файлове: Качване на множество файлове партида; HTML5 плъзгане качване (плъзнете, за да безпроблемно качване прозорец, влачене и пускане подкрепа за папки) </p>
<p><i class="icon-cogs"></i> Право функция: десния файл, папка, нали, по-точно след операция на изборите, десктоп, надясно, надясно директория дърво, прав-обвързани бързи команди от менюто <br/>
(Select All - Copy - Cut - Paste - Изтриване - Преименуване, определен ......) </p>
<p><i class="icon-sitemap"></i> File Browser: Режим Списък, режим икона; двукратно върху в подпапки; адресната лента операция; отворите запис папка противоречащи запис (напред и назад) </p>
<p><i class="icon-move"></i> Подкрепа влачене и пускане: Проверете плъзгане, нарязани да се постигне определен функцията папка </p>
<p><i class="icon-reply"></i> Бързи клавиши: изтриване изтриване, Ctrl + A Select All, Ctrl + C за копиране, + X Cut, търсене на файлове (търсене на съдържание) Ctrl </p>
</div>
<div class="box">
<div class="title"> <span>Преглед на файла</span> </div>
<p><i class="icon-edit"></i> Преглед на файла: видите съдържанието на редактиране на текстов файл и спестяване; HTML, SWF файл преглед, </p>
<p><i class="icon-picture"></i> Преглед на снимката: автоматично генериране на миниатюри, графични слайд шоу; </p>
<p><i class="icon-music"></i> Аудио възпроизвеждане: играят онлайн музика и видео файлове; поддръжка MP3, WMA, средата, AAC, WAV, mp4, </p>
<p><i class="icon-play"></i> Видео: онлайн видео възпроизвеждане, поддържаните формати: Flv, F4V, 3gp </p>
<p><i class="icon-play"></i> офис: преслушване, поддържаните формати: док, DOCX, PPT, PPTX, XLS, XLSX </p>
</div>
<div class="box">
<div class="title"> <span>Shortcuts</span> </div>
<p><i class="icon-tags"></i> въведете Open </p>
<p><i class="icon-tags"></i> Ctrl + A изберете всички </p>
<p><i class="icon-tags"></i> Ctrl + C, за да копирате избрания </p>
<p><i class="icon-tags"></i> Ctrl + V, за да поставите </p>
<p><i class="icon-tags"></i> Ctrl + х Cut </p>
<p><i class="icon-tags"></i> Ctrl + F за да търсите в текущата директория </p>
<p><i class="icon-tags"></i> ALT + N New File </p>
<p><i class="icon-tags"></i> ALT + m New Folder </p>
<p><i class="icon-tags"></i> изтриване Изтриване на избрания </p>
<p><i class="icon-tags"></i> Backspace Back </p>
<p><i class="icon-tags"></i> Ctrl + Backspace напред </p>
<p><i class="icon-tags"></i> f2 Rename избран (папка) </p>
<p><i class="icon-tags"></i> начало / край / нагоре / надолу / наляво / надясно, за да изберете файла </p>
<p><i class="icon-tags"></i> Anykey Проверете, за да натиснете първата буква на символни файлове и папки, избран автоматичен цикъл </p>
</div>

@ -0,0 +1,804 @@
<?php
return array(
"path_api_select_file" => "Моля, изберете файла, ...",
"path_api_select_folder" => "Моля изберете папка ...",
"path_api_select_image" => "Моля изберете изображение ...",
"share_can_upload" => "Оставя качване",
"move_error" => "Движете се провали",
"setting_basic" => "Основни настройки",
"setting_user_sound_open" => "Open Sound",
"setting_user_animate_open" => "Open Анимация",
"recycle_open_if" => "Отворете кошчето",
"recycle_open" => "отворено",
"setting_user_recycle_desc" => "След изтриването ще бъде изтрито директно физическо изтриване",
"setting_user_animate_desc" => "Прозорец отворен и друга анимация",
"setting_user_sound_desc" => "Работен звук",
"setting_user_imageThumb" => "Миниатюри на картини",
"setting_user_imageThumb_desc" => "По-добро преживяване при сърфиране след отваряне",
"setting_user_fileSelect" => "Отворете иконата на файла за проверка",
"setting_user_fileSelect_desc" => "Икона на файла за проверка на левия бутон, щракнете с десния бутон на мишката върху менюто",
"qrcode" => "URL QR код",
"theme_mac" => "Mac минималистичен бял",
"theme_win7" => "Windows 7",
"theme_win10" => "Windows 10",
"theme_metro" => "Metro Blue Classic",
"theme_metro_green" => "Metro светло зелено",
"theme_metro_purple" => "Metro елегантна лилава",
"theme_metro_pink" => "Metro Rose",
"theme_metro_orange" => "Metro ярко оранжево",
"theme_alpha_image" => "Bright - летене",
"theme_alpha_image_sun" => "Bright - Sunset",
"theme_alpha_image_sky" => "Symphony - Blue Sky",
"theme_diy" => "<b>персонализирана</b>",
"theme_diy_title" => "Настройки обичай тема",
"theme_diy_background" => "фон",
"theme_diy_image" => "снимка",
"theme_diy_color_blur" => "Gradient цвят",
"theme_diy_image_blur" => "Снимка на размазването",
"theme_diy_image_url" => "Снимки адрес",
"theme_diy_color_start" => "Започвайки цвят",
"theme_diy_color_end" => "Край Color",
"theme_diy_color_radius" => "Gradient ъгъл",
"system_role_admin_set" => "Администраторите имат всички права, без да се определят!",
"login_error_user_not_use" => "Потребителят е деактивиран! Моля, свържете се с администратора",
"login_error_kod_version" => "Версия конфликт",
"login_error_role" => "Преглед на разрешенията група не съществува, моля свържете се с администратора",
"no_permission_group" => "Вие не сте в тази група!",
"no_permission_write" => "Директорията не разполага с права за запис",
"user" => "потребител",
"save_as" => "Запази като",
"check_update" => "Актуализация",
"keyboard_type" => "клавиатура Mode",
"font_family" => "Fonts",
"code_mode" => "Оцветяване на синтаксиса",
"path_can_not_share" => "Поддържа споделяне само на собствените си документи!",
"path_can_not_action" => "Тази директория не поддържа тази операция!",
"wap_page_pc" => "PC версия",
"wap_page_phone" => "подвижен",
"image_size" => "размери на изображението",
"no_permission_action" => "Не е нужно това разрешение, моля, свържете се с администратора!",
"path_is_root_tips" => "Той е дошъл в главната директория!",
"kod_group" => "организация",
"my_kod_group" => "Аз съм в отдела",
"space_tips_default" => "(GB) 0 Няма ограничение",
"space_tips_full" => "Без да се ограничава",
"space_size" => "пространство",
"space_size_use" => "Използване на пространството",
"space_is_full" => "Няма останало достатъчно място, моля свържете се с администратора!",
"system_open_true_path" => "Успешно открит през файловия мениджър!",
"group_role_error" => "Роля разрешения грешка (няма настройки разрешение)",
"group_role_error_admin" => "Недостатъчни разрешения",
"markdown_content" => "Съдържание",
"system_group" => "Потребители и отдели",
"system_group_edit" => "Управление на отдела",
"system_group_role" => "Роля идентичност",
"system_group_create" => "Нов отдел",
"system_group_name" => "Име на отдел",
"system_group_father" => "Отличен отдел",
"system_group_add" => "Добавете подразделение",
"system_group_remove" => "Премахнете отдела",
"system_group_remove_tips" => "Наистина ли искате да изтриете отдела?<br/>След премахването на частта от потребителя ще бъде премахнат, подсектор се премества в корен сектор",
"system_group_select" => "Изберете отдел",
"system_group_select_result" => "Членовете ще принадлежат към следните сектори",
"system_role_admin_tips" => "Забележки: Системните администратори не са упълномощени да контролират",
"system_member_action" => "Управление на потребители",
"system_member_add" => "New User",
"system_member_role" => "Разрешение роли",
"system_member_role_select" => "Изберете",
"system_member_password_tips" => "Не пълнете не модифициран",
"system_set_home_path" => "по поръчка Каталог",
"system_set_home_path_tips" => "директория по подразбиране е празна",
"system_member_group" => "Къде е отдела",
"system_member_group_edit" => "Редакционен отдел",
"system_member_remove" => "Изтриване на потребителя",
"system_member_remove_tips" => "Потвърдете изтриване на потребителя?<br/>, след като се премахне потребителската директория ще бъде напълно изтрит",
"system_member_set_role" => "За да потвърдите промяната на избраните разрешенията за употреба на групата?",
"system_member_remove_group" => "Определяне на избрания потребител ще бъде напълно премахнато от тази група?",
"system_member_import" => "Bulk добавка",
"system_member_import_desc" => "Един потребител на ред,<br/>, вече съществуват, са тихо игнорирани",
"system_member_use" => "Активиране",
"system_member_unuse" => "правя неспособен",
"system_member_space" => "Задайте размера на потребителското пространство ",
"system_member_space_tips" => " Задайте размера на потребителското пространство ",
"system_member_space_number" => " Трябва да е число!",
"system_member_group_config" => "Отдел за определяне на партиди",
"system_member_group_remove" => "Премахнат от отдела",
"system_member_group_insert" => "Добавете към отдела",
"system_member_group_reset" => "Нулирайте отдела",
"system_member_group_error" => "Грешка в отдела",
"system_group_action" => "Управление на отдела",
"system_role_add" => "Добави Роля Identity",
"system_role_read" => "Само за четене",
"system_role_write" => "Може да чете и да пише",
"system_setting_root_path" => "достъп Root",
"system_setting_root_path_desc" => "Само системен администратор може да получите достъп до всички директории, групи други права на потребители могат да виждат само собствените си потребителски директории. Ако искате да включите или изключите<br/>администраторски достъп до други директории, можете да промените РНР open_basedir параметри анти-между сайтове,<a href=\"https://www.google.com.hk/search?&q=php+open_basedir\" target=\"_lank\">настроен</a>",
"system_group_role_title" => "Управление на ролята на отдела",
"system_group_role_remove" => "OK, за да изтриете ролята на отдел",
"system_group_role_style" => "стил",
"system_group_role_display" => "дали",
"system_group_role_display_desc" => "Задайте дали да се показват потребителски права на отдел",
"role_type_name_read" => "чета",
"role_type_name_read:list" => "Списък на файловете",
"role_type_name_read:info" => "File (папка) имот View, търсене Папка",
"role_type_name_read:copy" => "архивен екземпляр",
"role_type_name_read:preview" => "Визуализацията на файла (снимки, документи, аудио и видео)",
"role_type_name_read:download" => "File (папка) Изтегли",
"role_type_name_write" => "пиша",
"role_type_name_write:add" => "Създаване на файл (папка), извличане на компресиран файл",
"role_type_name_write:edit" => "Запазете файла за редактиране",
"role_type_name_write:change" => "Преименуване, коригира структурата на директория",
"role_type_name_write:upload" => "File (папка) да качвате, дистанционно изтегляне",
"role_type_name_write:remove" => "File (папка) изтриване, нарязани",
"group_guest" => "посетители",
"group_guest_desc" => "Вие не сте член на отдела,<br/>има достъп само до [разделена директория на отдела] следното съдържание, разрешения само за четене.",
"group_role_lebel_desc" => "Вие сте член на този отдел,<br/>Всички документи в катедрата Всички права запазени от администратора",
"button_save_and_add" => "Запазване и продължаване, за да добавите",
"path_cannot_search" => "Директорията не поддържа търсенето!",
"not_support" => "Не се поддържа!",
"group_not_exist" => "Потребителят група не съществува!",
"upload_clear_all" => "Изчистване на всички",
"upload_clear" => "Clear Завършен",
"upload_setting" => "Настройте",
"upload_tips" => "Използва парче качване, вече не подлежи на php.ini лимит; препоръчва плъзгане хром папка и капка качването опит",
"upload_exist" => "Файл със същото име",
"upload_exist_rename" => "преименувам",
"upload_exist_replace" => "капак",
"upload_exist_skip" => "подскачам",
"upload_add_more" => "Bulk добавка",
"more" => "още",
"system_setting" => "Настройки на системата",
"openProject" => "Отворете редактора на проект",
"url_download" => "Изтегляне",
"url_link" => "URL",
"app_type_link" => "Shortcuts",
"createLink" => "Създаване на пряк път",
"createLinkHome" => "Изпратено до прекия път на работния плот",
"createProject" => "Като прибавим към проекта на редактора",
"only_read" => "Само за четене",
"only_read_desc" => "Директорията не разполага с права за запис<br/>Можете да зададете разрешения за тази директория на сървъра,",
"not_read" => "нечетлив",
"explorerNew" => "код връзка",
"zip_download_ready" => "След компресия автоматично ще изтеглите, моля изчакайте ...",
"set_background" => "Задай като Desktop Wallpaper",
"share" => "дял",
"my_share" => "Моят дял",
"group_share" => "Групово външно споделяне",
"share_edit" => "Редактирайте споделянето",
"share_remove" => "Отмяна на споделянето",
"share_remove_tips" => "Наистина ли искате да анулирате споделянето? Обществената връзка ще бъде деактивирана.",
"share_path" => "Споделете пътя",
"share_title" => "Споделяне на ресурси",
"share_name" => "Споделете заглавието",
"share_time" => "изтичане",
"share_time_desc" => "Null не е настроено",
"share_password" => "Екстракт парола",
"share_password_desc" => "Празно няма зададена парола",
"share_cancle" => "премахване на споделянето",
"share_create" => "Създаване на обществена връзка",
"share_url" => "Споделено Адрес",
"share_not_download" => "Изтегляне забрана",
"share_not_download_tips" => "Шарер забранен за сваляне!",
"share_code_read" => "Код четец",
"share_save" => "Save Configuration",
"share_error_param" => "Параметър грешка!",
"share_error_user" => "Информация за потребител Грешка!",
"share_error_sid" => "Share не съществува!",
"share_error_time" => "Вие идват твърде късно, делът е изтекъл!",
"share_error_path" => "Споделено файл не съществува, той ще бъде изтрит или го отстранява!",
"share_error_password" => "Грешна парола!",
"share_error_show_tips" => "Този тип не поддържа файл преглед!",
"share_view_num" => "Прегледи:",
"share_download_num" => "Downloads:",
"share_open_page" => "Отворете споделена страница",
"open_the_path" => "Въведете директория",
"recycle_clear" => "Изпразване на кошчето",
"recycle_clear_success" => "Изпразване на кошчето успех!",
"recycle_clear_info" => "Сигурни ли сте, че искате да се изпразни напълно боклука?",
"fav_remove" => "Отмени колекцията",
"remove_item" => "Предмети",
"uploading" => "Качване",
"upload_tips_more" => "Твърде много файлове, препоръката на сгъстен качването, след това разархивирайте онлайн!",
"uploading_move" => "В прехвърлянето на сливането ...",
"show_file" => "Нова страница преглед",
"unknow_file_title" => "File Open Съвет!",
"unknow_file_tips" => "Не подкрепя прилагането на този файл, можете да:",
"unknow_file_try" => "опитвам",
"unknow_file_download" => "Изтеглете файла",
"unknow_plugin_search" => "инсталирани Търсене приложения, свързани с",
"config_save_error_auth" => "Неуспешно запазване на конфигурацията, администраторът забрани тази привилегия!",
"config_save_error_file" => "Грешка, файлът не е достъпна за писане!",
"beautify_code" => "Код Formatter",
"convert_case" => "дело преобразуване",
"convert_upper_case" => "Реализирано в главни букви",
"convert_lower_case" => "Реализирано в малки букви",
"editor_insert_time" => "Текущо време ",
"editor_md5" => " Md5 криптиране ",
"editor_qrcode" => " Кодиран двуизмерен код ",
"editor_regx" => " Изпитване на регулярен израз ",
"editor_chinese" => " Опростена реализация ",
"editor_chinese_simple" => " Преобразуване в опростен китайски ",
"editor_chinese_traditional" => " Преобразуване в традиционен китайски ",
"editor_base64" => "Base64 кодек ",
"editor_base64_encode" => " Кодиране на Base64 ",
"editor_base64_decode" => " Base64 декодиране ",
"editor_url" => " URL кодек ",
"editor_url_encode" => " Кодиране на URL адресите ",
"editor_url_decode" => " URL декодиране ",
"editor_unicode" => " Unicode кодек ",
"editor_unicode_encode" => " Кодиране с Unicode ",
"editor_unicode_decode" => " Unicode декодиране",
"editor_tools_select_tips" => " Моля, изберете съдържанието, което искате да конвертирате!",
"editor_calc" => "Безплатен Калкулатор",
"shortcut" => "Shortcuts",
"use_free" => "Продължете да използвате безплатната версия",
"learn_more" => "Научете повече",
"replace" => "Замяна",
"selectAll" => "Изберете",
"reload" => "Презареди",
"about" => "за",
"complete_current" => "Авто-завършване на тока",
"view" => "изглед",
"tools" => "инструмент",
"help" => "Помощ",
"not_exists" => "Не съществува",
"group_role_fileDownload" => "Downloads",
"group_role_share" => "дял",
"users_share" => "подялба",
"system_setting_save" => "Настройки за сигурност",
"system_setting_menu" => "управление Меню",
"system_name" => "програма Наименование",
"system_name_desc" => "Програма лого заглавие",
"system_desc" => "Описание на програмата",
"path_hidden" => "Directory изключвания",
"version_not_support" => "Вашата версия не поддържа този, моля посетете официалния сайт за закупуване на новата версия!",
"version_not_support_number" => "Тъй като броят на ограничение не поддържа тази операция, моля купя новата версия на официалния сайт!",
"path_hidden_desc" => "Директории и файлове по подразбиране не показват, разделени със запетаи",
"new_user_folder" => "Най-новият потребител е създадена от директорията по подразбиране",
"new_user_folder_desc" => "Разделени със запетаи",
"new_user_app" => "Най-новият потребител е създадена от приложението по подразбиране",
"new_user_app_desc" => "Заявленията за кандидатстване център, множество разделени със запетаи",
"auto_login" => "Посетителите автоматично влизане",
"auto_login_desc" => "Стандартната вход потребителското<code>guest/guest</code>потребители; след отваряне за да се гарантира, че съществува на потребителя",
"first_in" => "След като влезете в по подразбиране",
"version_price_free" => "безплатно",
"version_name_1" => "VIP 1",
"version_name_2" => "VIP 2",
"version_name_3" => "VIP 3",
"version_name_4" => "VIP 4",
"version_name_5" => "VIP 5",
"version_name_6" => "VIP 6",
"version_vip_free" => "Free",
"version_vip_1" => "VIP 1",
"version_vip_2" => "VIP 2",
"version_vip_3" => "VIP 3",
"version_vip_4" => "VIP 4",
"version_vip_5" => "VIP 5",
"version_vip_6" => "VIP 6",
"path_can_not_write_data" => "Directory не е достъпна за писане, задаване на директория и всички поддиректории за да се опита отново след четене и запис!",
"menu_name" => "име Menu",
"menu_hidden" => "крия",
"menu_show" => "показ",
"menu_move_down" => "надолу",
"menu_move_up" => "нагоре",
"menu_move_del" => "изтривам",
"menu_open_window" => "Отваряне на нов прозорец",
"menu_sub_menu" => "Подменю",
"url_path" => "URL адрес",
"url_path_desc" => "URL адрес или JS код",
"no_permission_read" => "Вие нямате разрешение да чете!",
"no_permission_download" => "Не е нужно разрешение за сваляне!",
"php_env_check" => "Работна среда мониторинг:",
"php_env_error" => "Липсва PHP библиотеката",
"php_env_error_ignore" => "Игнорирай и въведете",
"php_env_error_version" => "PHP версия не може да бъде по-малко от 5.0",
"php_env_error_path" => "Не е достъпна за писане",
"php_env_error_list_dir" => "Вашият уеб сървър отваря директорията листинг функция от съображения за сигурност, деактивирате тази функция!<a href=\"https://www.google.com.hk/#newwindow=1&safe=strict&q=web+server+turn+off+directory+listing\" target=\"blank\">как?</a>",
"php_env_error_gd" => "Php GD библиотека трябва да бъде отворена, в противен случай кода, използвайте миниатюрата няма да функционира правилно",
"install_login" => "Можете да използвате следната вход сметка",
"install_enter" => "системата",
"install_user_default" => "Администратор: {0} / (долу зададете парола) <br/> Средна потребител: {1} <br/> Гости: {2}",
"login_root_password" => "Определете администраторската парола",
"login_root_password_repeat" => "Потвърди паролата отново",
"login_root_password_equal" => "Двете пароли не съвпадат!",
"login_root_password_tips" => "Задайте парола на администратор!",
"forget_password" => "Забравена парола",
"forget_password_tips" => "Забравена Administrator Password: <br/> Моля, влезте сървъра изтриване <b>./data/system/install.lock</b> нулиране; <br/><br/> Non-администратор Забравена парола: <br/> Моля, свържете се с администратора, за да изчисти!",
"copyright_desc" => "Kodexplorer е силно аплодирана система за управление на уеб документ, можете да го използвате за вътрешно управление на документи или споделена, може да се използва и върху сървъра за управление на сайта, на мястото на Ftp, дори като webIDE директно онлайн развитие. Можете също така да програмирате втория развитие да включи този в съществуващите си системи.",
"copyright_contact" => "Contact us:kodcloud@qq.com <a>.</a> <a href=\"javascript:core.openWindow('http://bbs.kodcloud.com/');\">Feedback</a>",
"copyright_info" => "Copyright © <a href=\"https://kodcloud.com/?kodref=%s\" target=\"_blank\">kodcloud.com</a>.",
"copyright_pre" => "Powered by KodExplorer",
"kod_name" => "KodExplorer",
"kod_name_desc" => "Mango облак • Explorer",
"kod_power_by" => " - Powered by KodExplorer",
"kod_name_copyright" => "Mango облак • Explorer",
"kod_meta_name" => "KodExplorer",
"kod_meta_keywords" => "KodExplorer, код, kodCloud, WebOS, webIDE, PHP filemanage, filemanage, Dao в облак, манго, системи за управление на документи, предприятието облак диск, изследовател ,, онлайн документация, онлайн офис, онлайн офис, онлайн CAD преглед, онлайн редактиране , онлайн редактор",
"kod_meta_description" => "KodExplorer може да замъгли Road (по-рано манго облак) е водещ доставчик на държавни / корпоративни частни облаци и онлайн система за лични сайтове за управление на документи, предприятието частен облак внедрявания, съхранение мрежа, онлайн управление на документи, онлайн офис за предоставяне на безопасен и контролиран, просто и лесно употреба, силно персонализирани частни облачни продукти. С помощта на Windows интерфейс стил, експлоатационни практики, без да се налага да се адаптират към бързо да започнете, подкрепят стотици популярен преслушване файлов формат, възпроизвеждане и редактиране на щадящи околната среда, мощен е, след като пробен период, вече не е неразделна част от частния облак предложения.",
"kod_meta_copyright" => "kodcloud.com",
"login" => "Влезте,",
"guest_login" => "Гост Вход",
"username" => "Вход в профила",
"userNickName" => "Потребителски псевдоним",
"password" => "парола",
"login_code" => "кодове",
"need_check_code" => "код Вход удостоверяване отворен",
"need_check_code_desc" => "След като влезете, трябва да въведете кода за потвърждение.",
"setting_csrf_protect" => "Open защита CSRF",
"setting_csrf_protect_desc" => "След тип отваряне на атака може ефективно да защити CSRF",
"login_rember_password" => "Запомни паролата",
"setting_show_root_group" => "Посочете всички отдели",
"setting_show_root_group_desc" => "Коренът на директорията на дърводелетата трябва да посочи дали всички отдели са изброени",
"setting_show_share_user" => "Списък на всички потребители",
"setting_show_share_user_desc" => "Коренният отдел на директорията на дърветата е изброен за споделяне на всички потребители",
"setting_clear_user_recycle" => "Изпразните кошчето за всички потребители",
"setting_clear_cache" => "Изчистване на кеш паметта",
"setting_icp" => "Copyright или запис номер",
"setting_global_css" => "Персонализирана глобалната CSS",
"setting_global_css_desc" => "Всички страници ще въведе потребителски CSS",
"setting_global_html" => "Статистически код HTML",
"setting_global_html_desc" => "Всички страници ще бъде включен в този параграф HTML код, кодът може да се постави статистика на трети страни",
"us" => "kodcloud.com",
"login_not_null" => "Потребителско име и парола не може да бъде празно!",
"code_error" => "кодове на грешки",
"password_error" => "Потребителско име или парола е неправилна!",
"password_not_null" => "Паролата не може да бъде празно!",
"old_password_error" => "Old парола е грешна!",
"permission" => "Разрешение!",
"permission_edit" => "Промяна на разрешенията",
"file_info_owner" => "собственик",
"file_info_group" => "група",
"no_permission" => "Администраторът е забранил тази привилегия!",
"no_permission_ext" => "Administrator забрани този вид файловите права",
"dialog_max" => "Увеличете",
"dialog_min" => "Минимизиране",
"dialog_min_all" => "Минимизиране на всички",
"dialog_display_all" => "Показване на всички прозорци",
"dialog_close_all" => "Затваряне на всички",
"open" => "отворено",
"others" => "друг",
"open_with" => "Отворете за ...",
"close" => "близо",
"close_all" => "Затваряне на всички",
"close_left" => "Затваряне на ляво раздела",
"close_right" => "Затваряне на разделите отдясно",
"close_others" => "Close Other",
"loading" => "Операция ...",
"warning" => "предупреждение",
"getting" => "Получите ...",
"sending" => "Предаване на данни ...",
"data_error" => "Грешка на данни!",
"get_success" => "Вземи успех!",
"save_success" => "Успешно запазена!",
"success" => "успешна операция",
"error" => "операцията е неуспешна",
"error_repeat" => "Операцията се провали, името вече съществува!",
"word_error" => "неуспех ",
"word_success" => " успех",
"system_error" => "Системна грешка",
"name" => "име",
"type" => "тип",
"contain" => "съдържат",
"address" => "местоположение",
"size" => "размер",
"byte" => "байт",
"path" => "път",
"action" => "експлоатационен",
"create_time" => "Създаден",
"modify_time" => "Модифициран",
"last_time" => "Последно посещение",
"sort_type" => "Сортиране по",
"time_type" => "Y/m/d H:i:s",
"time_type_info" => "Y/m/d H:i:s",
"public_path" => "Public директория",
"system_path_not_change" => "Система директория, не може да бъде променен",
"file" => "досие",
"folder" => "папка",
"copy" => "копие",
"past" => "пръчка",
"clone" => "Създаване на копие",
"cute" => "срязване",
"cute_to" => "Преместване на ...",
"copy_to" => "Копие до ...",
"remove" => "изтривам",
"remove_force" => "премахнете напълно",
"info" => "имот",
"list_type" => "изглед",
"list_icon" => "Икона масив",
"list_list" => "договореност Списък",
"list_list_split" => "режим Колона",
"sort_up" => "увеличение",
"sort_down" => "Намаляване",
"order_type" => "Сортиране по",
"order_desc" => "Низходящо",
"order_asc" => "възходящ",
"rename" => "преименувам",
"add_to_fav" => "Добави в Любими",
"search_in_path" => "Търсене на папки",
"add_to_play" => "Добавяне към плейлист",
"manage_fav" => "Управление на любимите",
"refresh_tree" => "Обновяване директория дърво",
"manage_folder" => "Управление Directory",
"close_menu" => "Затваряне на менюто",
"zip" => "Създайте компресиран пакет",
"unzip" => "За да се извлече ...",
"unzip_folder" => "Разархивирайте в папка",
"unzip_this" => "Екстракт на тока",
"unzip_to" => "За да се извлече ...",
"zipview_file_big" => "Файлът е твърде голям, и след това се извлича операцията за преглед!",
"clipboard" => "Вижте Clipboard",
"clipboard_clear" => "Празен клипборда",
"full_screen" => "Full Screen",
"folder_info_item" => "Предмети",
"folder_info_item_select" => "А избрано",
"file_load_all" => "Кликнете два пъти върху, за да се зареди всички ......",
"tips" => "бърз",
"ziping" => "Компресирането ...",
"unziping" => "Извличане ...",
"moving" => "Mobile операция ...",
"remove_title" => "Изтриване Потвърждение",
"remove_info" => "Потвърди, за да изтриете избрания елемент?",
"remove_title_force" => "постоянно изтрит",
"remove_info_force" => "Сигурни ли сте, вие искате да изтриете завинаги този документ?",
"name_isexists" => "Грешен, на име вече съществува!",
"install" => "инсталирам",
"width" => "широчина",
"height" => "високо",
"app" => "леки Приложения",
"app_store" => "леки Приложения",
"app_create" => "Създаване на приложения",
"app_edit" => "Промяна на заявлението",
"app_group_all" => "пълен",
"app_group_game" => "игра",
"app_group_tools" => "инструмент",
"app_group_reader" => "чета",
"app_group_movie" => "телевизия",
"app_group_music" => "музика",
"app_group_life" => "живот",
"app_group_others" => "друг",
"app_desc" => "описание",
"app_icon" => "икона Applications",
"app_icon_show" => "URL адрес или директорията",
"app_group" => "Packet Application",
"app_type" => "тип",
"app_type_url" => "връзка",
"app_type_code" => "разширение JS",
"app_display" => "външност",
"app_display_border" => "Без граници (т.е. изберете полета)",
"app_display_size" => "Resize (Проверете за настройка)",
"app_size" => "размер",
"app_url" => "Link адрес",
"app_code" => "JS код",
"edit" => "редактирам",
"edit_can_not" => "Не е текстов файл",
"edit_too_big" => "Файлът е твърде голям, той не може да бъде по-голяма от 40M",
"open_default" => "Default Open",
"open_ie" => "Отворете браузъра",
"refresh" => "Обновяване",
"refresh_all" => "Сили на опресняване",
"newfile" => "New File",
"newfile_save_as" => "Запази в",
"newfolder" => "New Folder",
"newothers" => "New Други",
"path_loading" => "Зарежда се ...",
"go" => "Разходка!",
"go_up" => "Горен слой",
"history_next" => "напред",
"history_back" => "отстъпление",
"address_in_edit" => "Кликнете, за да въведете режим на редактиране",
"double_click_rename" => "Кликнете два пъти върху преименуването",
"double_click_open" => "Кликнете два пъти върху, за да отворите",
"path_null" => "Folder е празен!",
"file_size_title" => "Икона Размер",
"file_size_small_super" => "Ultra-малък",
"file_size_small" => "Малки икони",
"file_size_default" => "Икони",
"file_size_big" => "Големи икони",
"file_size_big_super" => "Голям Икона",
"upload" => "Качи",
"upload_ready" => "В очакване на качване",
"upload_success" => "Качване успешно",
"upload_path_current" => "Превключване към текущата директория",
"upload_select" => "Изберете File",
"upload_max_size" => "Максимално допустимото",
"upload_size_info" => "Ако искате да изберете повече, моля, променете php.ini максимално разрешено качване. Когато изберете даден файл по-голям от тази конфигурация автоматично ще филтрира.",
"upload_error" => "неуспешно качване",
"upload_error_http" => "Мрежовите защитни стени и грешки",
"upload_muti" => "Multi-качване на файлове",
"upload_drag" => "Плъзгане и пускане на качване",
"upload_drag_tips" => "Разхлабете за качване!",
"path_not_allow" => "име на файла не е позволено",
"download" => "Изтегляне",
"downloading" => "Зарежда се ...",
"download_address" => "Изтегляне",
"download_ready" => "Ще бъдат изтеглени",
"download_success" => "Свали успех!",
"download_error" => "Download Failed!",
"download_error_create" => "Напиши грешка!",
"download_error_exists" => "Линк към файла не бе успешно!",
"upload_error_null" => "Не файл!",
"upload_error_big" => "Размерът на файла е над допустимите граници за сървъри",
"upload_error_move" => "Неуспешно преместване на файл!",
"upload_error_exists" => "Файлът вече съществува",
"upload_local" => "Местно Качи",
"download_from_server" => "дистанционно за изтегляне",
"save_path" => "Save Path",
"upload_select_muti" => "Множество избираем за качване на файлове",
"search" => "търсене",
"searching" => "Търсене ...",
"search_result" => "Резултати от търсенето",
"seach_result_too_more" => "Прекалено много резултати, се препоръчва за директория или думи",
"search_null" => "Няма резултати!",
"search_uplow" => "дело чувствителна",
"search_content" => "Съдържание на търсачка",
"search_info" => "Моля въведете дума за търсене и търсене пътеки!",
"search_ext_tips" => "Чрез | разделени; например PHP | JS | CSS<br/>не пълнете търсене по подразбиране текстов файл",
"file_type" => "Тип на файла",
"goto" => "Направо към",
"server_dwonload_desc" => "Задача беше добавен в списъка за изтегляне",
"parent_permission" => "Родител правата на директориите",
"root_path" => "Моите документи",
"lib" => "склад",
"fav" => "Bookmark",
"desktop" => "Desktop",
"browser" => "Browser",
"my_computer" => "My Computer",
"recycle" => "боклук",
"my_document" => "Моите документи",
"my_picture" => "Моите снимки",
"my_music" => "Моята музика",
"my_movie" => "Моите видеоклипове",
"my_download" => "Моите Downloads",
"ui_desktop" => "Desktop",
"ui_explorer" => "Управление на файлове",
"ui_editor" => "редактор",
"adminer" => "adminer",
"ui_project_home" => "Проект Начало",
"ui_login" => "Влезте,",
"ui_logout" => "Quit",
"setting" => "Настройки на системата",
"setting_title" => "Опции",
"setting_user" => "Лична Center",
"setting_password" => "Смяна на паролата",
"setting_password_old" => "Old Password",
"setting_password_new" => "Ревизираната да",
"setting_language" => "Езикови настройки",
"setting_member" => "Управление на потребители",
"setting_group" => "Управление на потребителите група",
"setting_group_add" => "Добави User Group",
"setting_group_edit" => "Edit Потребителски групи",
"setting_theme" => "Настройки тема",
"setting_wall" => "Настройки на тапета",
"setting_wall_desktop" => "Тапет за настолни компютри",
"setting_wall_desktop_list" => "Управление на тапети на работния плот",
"setting_wall_login_list" => "Вход за управление на тапети",
"setting_wall_login_tips" => "Съвет: Когато има повече от едно парче, фона на интерфейса за влизане ще се върти произволно",
"setting_wall_diy" => "По поръчка тапети:",
"setting_wall_info" => "Снимка URL адрес, местните снимки могат да бъдат правилни, за да получите на браузъра, за да отворите изображението",
"setting_fav" => "диспечер на отметките",
"setting_help" => "Използване на Помощ",
"setting_about" => "За произведения",
"setting_success" => "Промяна е влязло в сила!",
"can_not_repeat" => "Не е позволено да се повтаря",
"absolute_path" => "Абсолютен адрес",
"group" => "Потребителски групи",
"data_not_full" => "Данни, подадени непълна!",
"default_user_can_not_do" => "потребителя по подразбиране не може да работи",
"default_group_can_not_do" => "Default потребителски групи не могат да работят",
"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_tips" => "Някои файлове не са запазени. Сигурни ли сте, че сте затворили прозореца?",
"if_save_file" => "Файлът не е бил спасен, който искате да запишете?",
"if_remove" => "Потвърдете Изтриване",
"member_remove_tips" => "След като премахнете потребителската директория ще бъде изчистена",
"group_remove_tips" => "След като премахнете потребителската група на потребителите, не мога да вляза<br/>(трябва отново да зададете потребителска група)",
"group_name" => "Прякор група",
"group_name_tips" => "Препоръка английски име, не може да се повтаря",
"group_desc" => "Име за показване",
"group_desc_tips" => "Наименование Група Описание",
"group_role_ext" => "ограничения Удължители",
"group_role_ext_tips" => "С множествена | разделени",
"group_role_file" => "Управление на файлове",
"group_role_upload" => "Оставя качване",
"group_role_user" => "данни за потребителя",
"group_role_group" => "Управление на потребителите група",
"group_role_member" => "Управление на потребители",
"group_role_mkfile" => "New File",
"group_role_mkdir" => "New Folder",
"group_role_pathrname" => "преименувам",
"group_role_pathdelete" => "заличаване на файлове",
"group_role_pathinfo" => "File Properties",
"group_role_pathmove" => "Move (копие / изрязване / паста / влачене операция)",
"group_role_zip" => "компресия",
"group_role_unzip" => "отварям се",
"group_role_search" => "търсене",
"group_role_filesave" => "Запазете файла за редактиране",
"group_role_can_upload" => "Качване и сваляне",
"group_role_download" => "дистанционно за изтегляне",
"group_role_passowrd" => "Смяна на паролата",
"group_role_config" => "данни за конфигуриране",
"group_role_fav" => "операции Bookmark (Добавяне / редактиране / изтриване)",
"action_list" => "Списък View",
"action_add" => "Добави",
"action_edit" => "редактирам",
"action_del" => "изтривам",
"group_role_ext_warning" => "Качването не позволи на такива файлове,<br/>Преименуване (преименуван на посочения разширение),<br/>Редактиране спаси, дистанционно изтегляне, екстракт",
"group_tips" => "<li> 1. Името на групата потребители не може да бъде дублирано. След като името на групата бъде променено, то принадлежи на реорганизирания потребител и автоматично се асоциира. </li><li> 2. Разширенията ограничават връзката между сигурността на системата, бъдете внимателни <i>(ако създадете нов php в уеб директорията, това означава, че промяната на разрешенията на програмата на този потребител е практически невъзможна)</i> </li><li> 3. Управление на домакинствата, управление на права, права за гледане и добавяне, изтриване и изтриване на права, програми автоматично се свързват </li><li> 4. След като разрешителната група е настроена да добави групата разрешения, последващото разрешение не е наследено <i>(това разрешение е еквивалентно на най-високото разрешение).</i> </li>",
"not_null" => "Задължителните полета не могат да бъдат празни!",
"picture_can_not_null" => "Снимките не могат да бъдат празни!",
"rname_success" => "Преименуване на успех!",
"please_inpute_search_words" => "Моля, въведете низ за търсене",
"remove_success" => "Изтрит успешно!",
"remove_fali" => "Изтриване неуспешно!",
"clipboard_null" => "Clipboard е празна!",
"create_success" => "Нов успех!",
"create_error" => "New неуспешна, проверете правата за достъп до директорията!",
"copy_success" => "[Copy] - покриваща клипборд успех!",
"cute_success" => "[Cut] - покриваща клипборд успех!",
"clipboard_state" => "Clipboard статус:",
"no_permission_write_all" => "Файлът или директорията не е достъпна за писане",
"no_permission_write_file" => "Файлът не разполага с права за запис",
"no_permission_read_all" => "Файлът или директорията не разполага с разрешение за четене",
"copy_not_exists" => "Източник не съществува",
"current_has_parent" => "Целева папка е подпапка на папката източник!",
"past_success" => "<b>операция паста е завършена</b>",
"cute_past_success" => "<b>операция нарязани приключи</b>(източник файл се изтрива, клипборда празна)",
"zip_success" => "Compression завършена",
"not_zip" => "Не архив",
"zip_null" => "Не е избран файл или директория",
"unzip_success" => "Разархивирайте пълна",
"gotoline" => "Направо към линията",
"path_is_current" => "Пътят и текущия път да отвори едно и също!",
"path_exists" => "Името вече съществува!",
"undo" => "отменяне",
"redo" => "Anti отмяна",
"preview" => "предварителен преглед",
"wordwrap" => "Wrap",
"show_gutter" => "Покажи Line Numbers",
"char_all_display" => "Покажи невидими знаци",
"auto_complete" => "Автоматично подканва",
"auto_save" => "Автоматично запазване",
"function_list" => "Списък Function",
"code_theme" => "Coding Style",
"font_size" => "Размер на шрифта",
"confirm" => "Наистина ли искате да направите това?",
"button_ok" => "Определя",
"button_submit" => "Подайте",
"button_set" => "Настройте",
"button_cancel" => "отменен",
"button_edit" => "редактирам",
"button_save" => "Save",
"button_apply" => "Нанесете",
"button_save_all" => "Save All",
"button_not_save" => "Не спести",
"button_add" => "Добави",
"button_back_add" => "Обратно, за да добавите",
"button_del" => "изтривам",
"button_save_edit" => "Запазване на промените",
"button_save_submit" => "Запазване Подайте",
"button_more" => "още",
"button_select_all" => "Избиране на всички / Invert Selection",
"charset_AUTO" => "Автоматична идентификация",
"charset_UTF_8" => "Unicode",
"charset_UTF_16" => "Unicode",
"charset_CP1256" => "арабски",
"charset_ISO_8859_6" => "арабски",
"charset_ISO_8859_10" => "скандинавските езици",
"charset_CP1257" => "балтийските езици",
"charset_ISO_8859_13" => "балтийските езици",
"charset_ISO_8859_4" => "балтийските езици",
"charset_BIG5_HKSCS" => "繁体-香港",
"charset_BIG5" => "繁体-台湾",
"charset_Georgian_Academy" => "грузински",
"charset_PT154" => "казахски",
"charset_CP949" => "корейски",
"charset_EUC_KR" => "корейски",
"charset_GB18030" => "опростен китайски",
"charset_GBK" => "опростен китайски",
"charset_ISO_8859_14" => "келтски",
"charset_CP1133" => "Лао",
"charset_ISO_8859_16" => "румънски",
"charset_ISO_8859_3" => "Южна Европа",
"charset_EUC_JP" => "японски",
"charset_ISO_2022_JP" => "японски",
"charset_SHIFT_JIS" => "японски",
"charset_KOI8_T" => "таджикски език",
"charset_ISO_8859_11" => "Thai",
"charset_TIS_620" => "Thai",
"charset_CP1254" => "турски",
"charset_CP1251" => "кирилица",
"charset_ISO_8859_5" => "кирилица",
"charset_KOI8_R" => "кирилица",
"charset_KOI8_U" => "кирилица",
"charset_CP1252" => "Западноевропейски езици",
"charset_ISO_8859_1" => "Западноевропейски езици",
"charset_ISO_8859_15" => "Западноевропейски езици",
"charset_Macintosh" => "Западноевропейски езици",
"charset_CP1255" => "иврит",
"charset_ISO_8859_8" => "иврит",
"charset_CP1253" => "гръцки",
"charset_ISO_8859_7" => "гръцки",
"charset_ARMSCII_8" => "арменски",
"charset_CP1258" => "виетнамски",
"charset_VISCII" => "виетнамски",
"charset_CP1250" => "Централни европейски езици",
"charset_ISO_8859_2" => "Централни европейски езици",
"charset_default_set" => "File Encoding",
"charset_convert_save" => "Спасете кодиран като файл",
"PluginCenter" => "Plug център",
"PluginBuy" => "Разрешение за закупуване",
"PluginInstalled" => "Е инсталиран",
"PluginUpdate" => "Актуализация",
"PluginListNull" => "Няма съдържание!",
"PluginType" => "класификация",
"PluginTypeAll" => "пълен",
"PluginTypeFile" => "Засилено файл",
"PluginTypeSafe" => "Инструменти за сигурност",
"PluginTypeTools" => "полезност",
"PluginTypeMedia" => "мултимедия",
"PluginTypeOthers" => "друг",
"PluginInstall" => "Инсталиране на приставката",
"PluginEnable" => "Активиране на приставки",
"PluginDisable" => "правя неспособен",
"PluginRemove" => "Деинсталиране на щепсела",
"PluginConfig" => "Конфигуриране на приставката",
"PluginStatus" => "състояние",
"PluginStatusEnabled" => "Enabled",
"PluginStatusDisabled" => "Не е активирано",
"PluginStatusNotInstall" => "не е инсталирано",
"PluginInstalling" => "Инсталация ...",
"PluginHasUpdate" => "Актуализациите",
"PluginUpdateStart" => "Актуализиране на приставката",
"PluginNeedConfig" => "Необходимостта да се даде възможност на първоначалната конфигурация",
"PluginConfigNotNull" => "Задължителните полета трябва да се попълнят!",
"PluginOpen" => "отворено",
"PluginAuther" => "автор",
"PluginVersion" => "издание",
"PluginDownloadNumber" => "Инсталира",
"PluginBack" => "връщане",
"PluginReadme" => "описание",
"PluginResetConfig" => "Възстановете настройките по подразбиране",
"PluginInstallSelf" => "Ръчна инсталация",
"Plugin.config.auth" => "Разрешения",
"Plugin.config.authDesc" => "Всички на наличните настройки, свързани с определяне на потребителите, потребителски групи, правозащитни организации могат да използват",
"Plugin.config.authOpen" => "Отворен достъп",
"Plugin.config.authOpenDesc" => "Няма нужда да посещавате, може да се използва за външно разговор",
"Plugin.config.authAll" => "притежател",
"Plugin.config.authUser" => "потребител",
"Plugin.config.authGroup" => "Определен отдел",
"Plugin.config.authRole" => "група права",
"Plugin.Config.openWith" => "Open стил",
"Plugin.Config.openWithDilog" => "Вътрешен диалоговия",
"Plugin.Config.openWithWindow" => "Новата страница се отваря",
"Plugin.Config.fileSort" => "приоритет Extension асоциация",
"Plugin.Config.fileSortDesc" => "Колкото по-голям разширението, за да отворите по-висок приоритет",
"Plugin.Config.fileExt" => "Поддържани файлови формати",
"Plugin.Config.fileExtDesc" => "Свързани Удължаване на приставката",
"Plugin.tab.basic" => "Основни настройки",
"Plugin.tab.auth" => "Разрешения",
"Plugin.tab.others" => "Други настройки",
"Plugin.default.aceEditor" => "Ace Редактор",
"Plugin.default.htmlView" => "Web Page Preview",
"Plugin.default.picasa" => "сърфиране в Picasa картина",
"Plugin.default.zipView" => "Archive Preview",
"Plugin.default.jPlayer" => "jPlayer играч",
"Plugin.auth.viewList" => "Списък с добавки",
"Plugin.auth.setting" => "Настройки на приставките",
"Plugin.auth.status" => "Изключете",
"Plugin.auth.install" => "Инсталиране / Деинсталиране",
"Explorer.UI.openWith" => "Изберете Open",
"Explorer.UI.openWithText" => "Notepad за да отворите",
"Explorer.UI.appSetDefault" => "Задайте открито по подразбиране",
"Explorer.UI.appAwaysOpen" => "Винаги използвайте избраната програма да отвори този файл",
"Explorer.UI.selectAppDesc" => "Изберете програмата, която искате да отворите този файл",
"Explorer.UI.selectAppWarning" => "Моля, изберете приложението!",
"Explorer.UI.appTypeSupport" => "Поддържани",
"Explorer.UI.appTypeAll" => "Всички приложения",
"kodApp.oexe.edit" => "Редактиране на светлинното приложение",
"kodApp.oexe.open" => "Отворете приложението на светлината"
);

Binary file not shown.

@ -0,0 +1,72 @@
<div class="intro-left">
<div class="tips blue">
<h1> <span>রিচ কার্যকারিতা</span> </h1>
<p> কোড স্বয়ংক্রিয়ভাবে অনুরোধ জানানো হবে </p>
<p> মাল্টি থিম: আপনার প্রিয় প্রোগ্রামিং শৈলী চয়ন করুন </p>
<p> কাস্টম ফন্ট: দৃশ্য এ ব্যবহারের জন্য </p>
<p> মাল্টি কার্সার এডিটিং, ব্লক সম্পাদনা অনলাইন প্রোগ্রামিং অভিজ্ঞতা মহিমান্বিত তুলনীয় </p>
<p> ব্লক ভাঁজ, প্রসারিত; মোড়ানো </p>
<p> একাধিক ট্যাব জন্য সমর্থন, সুইচিং ক্রম টেনে আনুন; </p>
<p> একাধিক নথি নিয়ন্ত্রণের, অনুসন্ধান ও প্রতিস্থাপন; ইতিহাস; </p>
<p> অটো-সম্পূর্ণ [], {}, (), &#39;&#39; &#39;&#39; </p>
<p> অনলাইন রিয়েল টাইম প্রিভিউ যে আপনি অনলাইন প্রোগ্রামিং সঙ্গে প্রেমে পড়া করতে সক্ষম হবেন! </p>
<p> সমর্থন zendcodeing, কোড আশি লিখতে </p>
<p> আরও বৈশিষ্ট্য আপনার আবিষ্কারের জন্য অপেক্ষা ...... </p>
</div>
<div class="tips orange">
<h1> <span>কোড হাইলাইটিং 150 ধরণের</span> </h1>
<p> টিপ: এইচটিএমএল, জাভাস্ক্রিপ্ট, সিএসএস, কম, Sass, এসসিএসএস </p>
<p> ওয়েব ডেভেলপমেন্ট: পিএইচপি, পার্ল, পাইথন, রুবি, elang, যেতে ... </p>
<p> পরম্পরাগত ভাষায়: জাভা, সি, সি ++, সি #, ActionScript, VB স্ক্রিপ্ট ... </p>
<p> অন্য: markdown, শেল, এসকিউএল, Lua, এক্সএমএল, yaml ... </p>
</div>
</div>
<div class="intro-right">
<div class="tips green">
<h1> <span>শর্টকাট অ্যাকশন</span> </h1>
<pre> সাধারণভাবে ব্যবহৃত শর্টকাট:
Ctrl + s সংরক্ষণ করতে
Ctrl + A নির্বাচন সব Ctrl + X কাটা
Ctrl + C Ctrl + V পেস্ট কপি
Ctrl + Z ফেরান এন্টি Ctrl + Y
Ctrl + F প্রতিস্থাপন Ctrl + F + F এটি
জয় + Alt + 0 ধসের সব জয় + Alt + Shift + 0 সম্প্রসারণ
Esc [প্রস্থান অনুসন্ধান স্বয়ংক্রিয়ভাবে বাতিল করার অনুরোধ জানানো হবে ...]
Ctrl-Shift-এর প্রি
Ctrl-Shift-ই শো &amp; বন্ধ ফাংশন
</pre>
<pre> চয়ন করুন:
মাউস তাবু - ড্র্যাগ
Shift + হোম / শেষ / আপ / বাম / নিচে / ডান
Shift + PageUp / PageDown নির্বাচন করতে নিচে আপ টুসকি
Ctrl + Shift + Home / আদ্যন্ত বর্তমান কার্সার শেষে
Alt + মাউস ব্লক নির্বাচন টানুন
Ctrl + Alt + ছ ব্যাচ নির্বাচন এবং বর্তমান মাল্টি ট্যাব সম্পাদক লিখুন
</pre>
<pre> কার্সার:
হোম / শেষ / আপ / বাম / নিচে / ডান
Ctrl + Home / শেষ ডকুমেন্ট মাথা / লেঙ্গুড় কার্সরটিকে
মিলে ট্যাগে Ctrl + P ঝাঁপ দাও
PageUp / PageDown আপ এবং ডাউন কার্সার
Alt + বাম / ডান কার্সার লাইনের শীর্ষে যাওয়ার জন্য
লাইনের শেষ shift + বাম / ডান কার্সার &amp;
Ctrl + L একটি নির্দিষ্ট সারি ঝাঁপ
Ctrl + Alt + আপ / ডাউন (নিচে) বৃদ্ধি কার্সার
</pre>
<pre> সম্পাদনা:
Ctrl + / মন্তব্য &amp; uncomment Ctrl + Alt + একটি যথার্থ প্রতিপন্ন
টেবিল ট্যাব প্রান্তিককরণ Shift + টেবিল সামগ্রিক অগ্রগতি টেবিল
সমগ্র লাইন Ctrl মুছতে মুছতে মুছতে + D
Ctrl + ডান শব্দ উপর সারি করার, মোছার
Ctrl / Shift + Backspace বাম থেকে শব্দ মুছে দিতে
জন্য alt + shift + আপ / ডাউন এবং কপি লাইন যোগ করা (নিচে) সমতল
Alt + কার্সার ডান বিষয়বস্তু করার, মোছার
Alt + আপ / ডাউন বর্তমান লাইন এবং লাইন (পরের লাইন বিনিময়) উপর
Ctrl + Shift + d সারি কপি এবং নিম্নলিখিত যোগ করা
Ctrl + শব্দের অধিকার করার, মোছার
Ctrl + Shift + U ছোটহাতের অক্ষরে রুপান্তরিত
Ctrl U নির্বাচিত লেখা + বড়হাতের
</pre>
</div>
</div>

@ -0,0 +1,36 @@
<div class="box">
<div class="title"> <span>ফাইল ম্যানেজমেন্ট</span> </div>
<p><i class="icon-tags"></i> ফাইল নির্বাচন: রেডিও, মাউস তাবু, শিফট-নির্বাচন, Ctrl এলোমেলোভাবে নির্বাচিত, কীবোর্ড আপ এবং ডাউন, হোম, শেষ নির্বাচন. </p>
<p><i class="icon-folder-open"></i> ফাইল অপারেশন: একটি ফাইল নির্বাচন করা হলে, আপনি, কপি করা যাবে কাটা, মুছতে, কম্প্রেশন বৈশিষ্ট্য দেখতে, নামান্তর খোলা পূর্বরূপ দেখুন এবং অন্যান্য অপারেশন ...... </p>
<p><i class="icon-cloud-upload"></i> ফাইল আপলোড: আপলোড একাধিক ফাইল ব্যাচ; HTML5 ড্র্যাগ আপলোড (ড্র্যাগ অঙ্গীভূতভাবে উইন্ডোতে ড্র্যাগ আপলোড এবং ড্রপ ফোল্ডার জন্য সমর্থন) </p>
<p><i class="icon-cogs"></i> রাইট ফাংশন: রাইট-ফাইল, ফোল্ডার, ঠিক আছে, অধিকতর যোগ্য নির্বাচনের অপারেশনের পর, ডেস্কটপ, ডান, ডান ডিরেক্টরি ট্রি, ডান-আবদ্ধ মেনু শর্টকাট <br/>
(নির্বাচন করুন সকল - কপি - কাটা - পেস্ট - মুছে দিন - পুনঃনামকরণ, সেট ......) </p>
<p><i class="icon-sitemap"></i> ফাইল ব্রাউজার: তালিকা মোড, আইকন মোড; উপ-ফোল্ডার মধ্যে ডাবল ক্লিক করুন; ঠিকানা বার অপারেশন; একটি ফোল্ডার রেকর্ড contrarian রেকর্ড খুলুন (ফরোয়ার্ড এবং অনগ্রসর) </p>
<p><i class="icon-move"></i> সাপোর্ট ড্র্যাগ এবং ড্রপ: ড্র্যাগ চেক, উল্লিখিত ফোল্ডারটি ফাংশন অর্জন কাটা </p>
<p><i class="icon-reply"></i> শর্টকাট কী-সমূহ: মুছতে মুছতে, Ctrl + A নির্বাচন সকল, Ctrl + কপি সি + এক্স কাটা, ফাইল সার্চ (অনুসন্ধান বিষয়বস্তু) Ctrl </p>
</div>
<div class="box">
<div class="title"> <span>ফাইলের পূর্বরূপ</span> </div>
<p><i class="icon-edit"></i> ফাইল পূর্বরূপ: একটি টেক্সট ফাইল সম্পাদনা এবং সংরক্ষণ বিষয়বস্তু দেখতে; এইচটিএমএল, SWF ফাইল প্রিভিউ, </p>
<p><i class="icon-picture"></i> চিত্র পূর্বরূপ: থাম্বনেল, ইমেজ স্লাইড শো স্বয়ংক্রিয় প্রজন্ম; </p>
<p><i class="icon-music"></i> অডিও প্লেব্যাক: অনলাইন সঙ্গীত এবং ভিডিও ফাইল প্লে; সমর্থন MP3, WMA, মধ্য, AAC, WAV; MP4, </p>
<p><i class="icon-play"></i> ভিডিও: অনলাইন ভিডিও প্লেব্যাক, সমর্থিত বিন্যাসের: FLV, f4v, 3gp </p>
<p><i class="icon-play"></i> অফিস: অফিস অনলাইন প্রি, সমর্থিত বিন্যাসের: DOC, DOCX করা, ppt, pptx, xls, xlsx </p>
</div>
<div class="box">
<div class="title"> <span>শর্টকাট</span> </div>
<p><i class="icon-tags"></i> ওপেন প্রবেশ </p>
<p><i class="icon-tags"></i> Ctrl সব একটি নির্বাচন + </p>
<p><i class="icon-tags"></i> Ctrl + C কপি করার জন্য নির্বাচিত </p>
<p><i class="icon-tags"></i> Ctrl + V পেস্ট </p>
<p><i class="icon-tags"></i> Ctrl + X কাটা </p>
<p><i class="icon-tags"></i> Ctrl + বর্তমান ডিরেক্টরি অনুসন্ধান করতে চ </p>
<p><i class="icon-tags"></i> Alt + N নতুন ফাইল </p>
<p><i class="icon-tags"></i> Alt + M নতুন ফোল্ডার </p>
<p><i class="icon-tags"></i> মুছুন নির্বাচিত </p>
<p><i class="icon-tags"></i> ব্যাকস্পেস পিছনে </p>
<p><i class="icon-tags"></i> Ctrl + Backspace এগিয়ে </p>
<p><i class="icon-tags"></i> F2 নামকরণ নির্বাচিত (ফোল্ডার) </p>
<p><i class="icon-tags"></i> হোম / শেষ / আপ / ডাউন / বাম / ফাইল নির্বাচন করতে ডান </p>
<p><i class="icon-tags"></i> anykey স্বয়ংক্রিয় চক্র নির্বাচিত চরিত্র ফাইল এবং ফোল্ডারগুলি প্রথম অক্ষর টিপুন চেক </p>
</div>

@ -0,0 +1,804 @@
<?php
return array(
"path_api_select_file" => "অনুগ্রহ করে ফাইলটি সিলেক্ট ...",
"path_api_select_folder" => "দয়া করে একটি ফোল্ডার নির্বাচন করুন ...",
"path_api_select_image" => "অনুগ্রহ করে একটি ছবি নির্বাচন করুন ...",
"share_can_upload" => "আপলোড করার অনুমতি দিন",
"move_error" => "সরান ব্যর্থ",
"setting_basic" => "বেসিক সেটিংস",
"setting_user_sound_open" => "ওপেন সাউন্ড",
"setting_user_animate_open" => "অ্যানিমেশন খুলুন",
"recycle_open_if" => "রিসাইকেল বিন খুলুন",
"recycle_open" => "খোলা",
"setting_user_recycle_desc" => "মুছে ফেলার পরে সরাসরি শারীরিক অপসারণ মুছে ফেলা হবে",
"setting_user_animate_desc" => "উইন্ডো খোলা এবং অন্যান্য অ্যানিমেশন",
"setting_user_sound_desc" => "অপারেশন শব্দ",
"setting_user_imageThumb" => "ছবি থাম্বনেইল",
"setting_user_imageThumb_desc" => "খোলার পরে ভাল ব্রাউজিং অভিজ্ঞতা",
"setting_user_fileSelect" => "ফাইল আইকন চেক খুলুন",
"setting_user_fileSelect_desc" => "ফাইল আইকন বাম কী চেক, ডান-ক্লিক করুন মেনু শর্টকাট এন্ট্রি",
"qrcode" => "URL টি QR কোড",
"theme_mac" => "ম্যাক অল্পস্বল্প সাদা",
"theme_win7" => "Windows 7",
"theme_win10" => "Windows 10",
"theme_metro" => "মেট্রো ব্লু ক্লাসিক",
"theme_metro_green" => "মেট্রো হালকা সবুজ",
"theme_metro_purple" => "মেট্রো মার্জিত রক্তবর্ণ",
"theme_metro_pink" => "মেট্রো রোজ",
"theme_metro_orange" => "মেট্রো উজ্জ্বল কমলা",
"theme_alpha_image" => "উজ্জ্বল - উড়ন্ত",
"theme_alpha_image_sun" => "উজ্জ্বল - সূর্যাস্ত",
"theme_alpha_image_sky" => "সিম্ফনি - ব্লু স্কাই",
"theme_diy" => "<b>কাস্টম</b>",
"theme_diy_title" => "কাস্টম থিম সেটিংস",
"theme_diy_background" => "পটভূমি",
"theme_diy_image" => "ছবি",
"theme_diy_color_blur" => "গ্রেডিয়েন্ট রঙ",
"theme_diy_image_blur" => "ছবি ব্লার",
"theme_diy_image_url" => "ফটো ঠিকানা",
"theme_diy_color_start" => "আরম্ভের রঙ",
"theme_diy_color_end" => "শেষ রঙ",
"theme_diy_color_radius" => "গ্রেডিয়েন্ট কোণ",
"system_role_admin_set" => "প্রশাসকগণ সেটিং ছাড়া, সব অধিকার আছে!",
"login_error_user_not_use" => "ব্যবহারকারীর অ্যাকাউন্ট নিষ্ক্রিয় করা হয়েছে! প্রশাসকের সাথে যোগাযোগ করুন",
"login_error_kod_version" => "সংস্করণ দ্বন্দ্ব",
"login_error_role" => "দেখুন অনুমতির গ্রুপ অস্তিত্ব নেই, প্রশাসকের সাথে যোগাযোগ করুন",
"no_permission_group" => "আপনি এই দলের না হয়!",
"no_permission_write" => "ডিরেক্টরি লেখার অনুমতি নেই",
"user" => "ব্যবহারকারী",
"save_as" => "যেমন সংরক্ষণ",
"check_update" => "আপডেট",
"keyboard_type" => "কীবোর্ড মোড",
"font_family" => "ফন্ট",
"code_mode" => "সিনট্যাক্স হাইলাইটিং",
"path_can_not_share" => "শুধুমাত্র আপনার নিজের নথি ভাগ সমর্থন!",
"path_can_not_action" => "এই ডিরেক্টরিটি এই অপারেশন সমর্থন করে না!",
"wap_page_pc" => "পিসি সংস্করণ",
"wap_page_phone" => "মোবাইল",
"image_size" => "চিত্র মাত্রা",
"no_permission_action" => "আপনি এই অনুমতি নেই, প্রশাসকের সাথে যোগাযোগ করুন দয়া করে!",
"path_is_root_tips" => "এটা রুট ডিরেক্টরিতে এসেছে!",
"kod_group" => "সংগঠন",
"my_kod_group" => "আমি ডিপার্টমেন্টে আছি",
"space_tips_default" => "(গিগাবাইট) 0 কোন সীমা",
"space_tips_full" => "সীমাবদ্ধ না করে",
"space_size" => "স্থান",
"space_size_use" => "স্থান ব্যবহার",
"space_is_full" => "পর্যাপ্ত স্থান নেই, প্রশাসকের সাথে যোগাযোগ করুন!",
"system_open_true_path" => "সফলভাবে ফাইল ম্যানেজার খোলা!",
"group_role_error" => "ভূমিকা অনুমতি ত্রুটি (কোন অনুমতি সেটিংস)",
"group_role_error_admin" => "পর্যাপ্ত অনুমতি উপস্থিত নেই",
"markdown_content" => "সূচীপত্র",
"system_group" => "ব্যবহারকারী এবং বিভাগ",
"system_group_edit" => "ডিপার্টমেন্ট ম্যানেজমেন্ট",
"system_group_role" => "ভূমিকা পরিচয়",
"system_group_create" => "নতুন বিভাগ",
"system_group_name" => "বিভাগের নাম",
"system_group_father" => "সুপেরিয়র বিভাগ",
"system_group_add" => "উপ-বিভাগ যোগ করুন",
"system_group_remove" => "বিভাগটি সরান",
"system_group_remove_tips" => "আপনি বিভাগটি মুছে ফেলার ব্যাপারে নিশ্চিত?<br/>the ব্যবহারকারীর অংশ মুছে ফেলার পরে, সাব-সেক্টর রুট সেক্টরে স্থানান্তরিত হবে",
"system_group_select" => "বিভাগ নির্বাচন করুন",
"system_group_select_result" => "সদস্য নিম্নলিখিত খাতে অধিকারে",
"system_role_admin_tips" => "মন্তব্য: সিস্টেম প্রশাসক নিয়ন্ত্রণ করতে অনুমোদিত নয়",
"system_member_action" => "ইউজার ম্যানেজমেন্ট",
"system_member_add" => "নতুন ইউজার",
"system_member_role" => "অনুমতি ভূমিকা",
"system_member_role_select" => "নির্বাচন করা",
"system_member_password_tips" => "পূরণ না পরিবর্তন করা",
"system_set_home_path" => "কাস্টম জায়",
"system_set_home_path_tips" => "ডিফল্ট ডিরেক্টরি খালি",
"system_member_group" => "কোথায় বিভাগ",
"system_member_group_edit" => "সম্পাদকীয় বিভাগ",
"system_member_remove" => "ব্যবহারকারী অপসারণ",
"system_member_remove_tips" => "ব্যবহারকারী অপসারণ নিশ্চিত করতে চান?<br/>আপনি ব্যবহারকারী ডিরেক্টরি সরানোর পর সম্পূর্ণরূপে মুছে ফেলা হবে",
"system_member_set_role" => "নির্বাচিত ব্যবহারকারীর গ্রুপ অনুমতি পরিবর্তন নিশ্চিত করার জন্য?",
"system_member_remove_group" => "নির্বাচিত ব্যবহারকারীর এই গ্রুপ থেকে সরানো হবে নির্ধারণ?",
"system_member_import" => "বাল্ক অ্যাড",
"system_member_import_desc" => "প্রতি লাইনে একটি ব্যবহারকারী,<br/>ইতিমধ্যে অস্তিত্ব চুপটি উপেক্ষা করা হয়",
"system_member_use" => "সক্ষম করা",
"system_member_unuse" => "অক্ষম",
"system_member_space" => "ব্যবহারকারীর স্থান আকার সেট করুন ",
"system_member_space_tips" => " ব্যবহারকারীর স্থান আকার সেট করুন ",
"system_member_space_number" => " একটি সংখ্যা হতে হবে!",
"system_member_group_config" => "ব্যাচ সেটিং ডিপার্টমেন্ট",
"system_member_group_remove" => "বিভাগ থেকে অপসারণ",
"system_member_group_insert" => "বিভাগ যোগ করুন",
"system_member_group_reset" => "বিভাগ পুনঃস্থাপন",
"system_member_group_error" => "বিভাগ ত্রুটি",
"system_group_action" => "ডিপার্টমেন্ট ম্যানেজমেন্ট",
"system_role_add" => "ভূমিকা পরিচয় যোগ",
"system_role_read" => "Read-only",
"system_role_write" => "পড়তে ও লিখতে পারে",
"system_setting_root_path" => "রুট অ্যাক্সেস",
"system_setting_root_path_desc" => "শুধু একজন সিস্টেম প্রশাসকের সব ডিরেক্টরি অ্যাক্সেস করতে পারেন, ব্যবহারকারীরা অন্য অধিকার সংগঠনগুলো শুধুমাত্র তাদের নিজস্ব ব্যবহারকারী ডাইরেক্টরি দেখতে পারেন। আপনার উপর বা অন্যান্য ডিরেক্টরি থেকে<br/>প্রশাসক অ্যাক্সেস বন্ধ করতে চান, আপনি, বিরোধী ক্রস সাইট পরামিতি open_basedir পিএইচপি পরিবর্তন করতে পারেন<a href=\"https://www.google.com.hk/search?&q=php+open_basedir\" target=\"_lank\"></a>",
"system_group_role_title" => "বিভাগীয় কর্তৃপক্ষ ভূমিকা ব্যবস্থাপনা",
"system_group_role_remove" => "বিভাগের ভূমিকা মুছে ফেলার জন্য ঠিক আছে",
"system_group_role_style" => "শৈলী",
"system_group_role_display" => "কিনা",
"system_group_role_display_desc" => "ডিফল্ট ব্যবহারকারীর অধিকার প্রদর্শন করা হবে কি না সেট করুন",
"role_type_name_read" => "পড়া",
"role_type_name_read:list" => "ফাইল তালিকা",
"role_type_name_read:info" => "ফাইল (ফোল্ডার) সম্পত্তি ভিউ, ফোল্ডার অনুসন্ধান",
"role_type_name_read:copy" => "ফাইল কপি",
"role_type_name_read:preview" => "ফাইলের পূর্বরূপ (ছবিগুলির, দস্তাবেজ, অডিও এবং ভিডিও)",
"role_type_name_read:download" => "ফাইল (ফোল্ডার) ডাউনলোড",
"role_type_name_write" => "লেখা",
"role_type_name_write:add" => "একটি ফাইল (ফোল্ডার) তৈরি করুন, কম্প্রেস ফাইল নিষ্কর্ষ",
"role_type_name_write:edit" => "ফাইল সংরক্ষণ করুন সম্পাদনা করতে",
"role_type_name_write:change" => ", পুনঃনামকরণ ডিরেক্টরি গঠন সমন্বয়",
"role_type_name_write:upload" => "ফাইল (ফোল্ডার) আপলোড, দূরবর্তী ডাউনলোড",
"role_type_name_write:remove" => "ফাইল (ফোল্ডার) মুছে দিন, কেটে",
"group_guest" => "দর্শকরা",
"group_guest_desc" => "আপনি বিভাগের সদস্য নন,<br/>শুধুমাত্র [বিভাগ ভাগ করা ডিরেক্টরীতে] নিম্নলিখিত সামগ্রীটি অ্যাক্সেস করতে পারেন, শুধুমাত্র-পঠনযোগ্য অনুমতিগুলি।",
"group_role_lebel_desc" => "আপনি এই বিভাগের সদস্য,<br/> বিভাগের মধ্যে সমস্ত নথি প্রশাসক দ্বারা সংরক্ষিত সমস্ত অধিকার",
"button_save_and_add" => "সংরক্ষণ করুন এবং যোগ করার জন্য অবিরত",
"path_cannot_search" => "ডিরেক্টরি অনুসন্ধান সমর্থন করে না!",
"not_support" => "সমর্থিত নয়!",
"group_not_exist" => "ব্যবহারকারী গ্রুপ অস্তিত্ব নেই!",
"upload_clear_all" => "সব পরিষ্কার",
"upload_clear" => "সমাপ্ত সাফ",
"upload_setting" => "সেট আপ করুন",
"upload_tips" => "ফালি আপলোড, আর php.ini সীমা সাপেক্ষে ব্যবহার করে; সুপারিশ ক্রোম ফোল্ডার ড্র্যাগ এবং ড্রপ আপলোড অভিজ্ঞতা",
"upload_exist" => "একই নামের ফাইল",
"upload_exist_rename" => "পুনঃনামকরণ",
"upload_exist_replace" => "আচ্ছাদন",
"upload_exist_skip" => "লাফালাফি করা",
"upload_add_more" => "বাল্ক অ্যাড",
"more" => "অধিক",
"system_setting" => "সিস্টেম সেটিংস",
"openProject" => "প্রকল্পের সম্পাদক খুলুন",
"url_download" => "ডাউনলোড",
"url_link" => "URL",
"app_type_link" => "শর্টকাট",
"createLink" => "শর্টকাট তৈরি করুন",
"createLinkHome" => "ডেস্কটপ শর্টকাট পাঠানো",
"createProject" => "সম্পাদক প্রকল্প যোগ করার পদ্ধতি",
"only_read" => "Read-only",
"only_read_desc" => "ডিরেক্টরি লেখার অনুমতি নেই<br/>আপনি সার্ভারে এই ডিরেক্টরির জন্য অনুমতি সেট করতে পারেন",
"not_read" => "অপাঠ্য",
"explorerNew" => "Kod লিংক",
"zip_download_ready" => "কম্প্রেশন স্বয়ংক্রিয়ভাবে ডাউনলোড হবে পরে, অনুগ্রহ করে অপেক্ষা করুন ...",
"set_background" => "যেমন ডেস্কটপ ওয়ালপেপার সেট করুন",
"share" => "ভাগ",
"my_share" => "আমার শেয়ার",
"group_share" => "বাহ্যিক অংশীদারী গ্রুপ",
"share_edit" => "শেয়ার সম্পাদনা করুন",
"share_remove" => "ভাগ করা বাতিল করুন",
"share_remove_tips" => "আপনি কি ভাগ করা বাতিল করার বিষয়ে নিশ্চিত? পাবলিক সংযোগ অবৈধ হবে।",
"share_path" => "পথ ভাগ করুন",
"share_title" => "সম্পদ শেয়ারিং",
"share_name" => "শিরোনাম শেয়ার করুন",
"share_time" => "শ্বাসত্যাগ",
"share_time_desc" => "নাল সেট না করা হয়",
"share_password" => "এক্সট্র্যাক্ট পাসওয়ার্ড",
"share_password_desc" => "খালি পাসওয়ার্ড সেট করা নেই",
"share_cancle" => "Unsharing",
"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" => "বিবরন",
"share_open_page" => "ভাগ পৃষ্ঠাটি খুলুন",
"open_the_path" => "ডিরেক্টরি লিখুন",
"recycle_clear" => "ট্র্যাশ খালি",
"recycle_clear_success" => "ট্র্যাশ খালি সাফল্য!",
"recycle_clear_info" => "আপনি কি নিশ্চিত যে আপনি সম্পূর্ণ খালি বাজে ইচ্ছুক?",
"fav_remove" => "বাতিল সংগ্রহ",
"remove_item" => "আইটেম",
"uploading" => "আপলোড",
"upload_tips_more" => "অনেকগুলি ফাইল, সংকুচিত আপলোড সুপারিশক্রমে, তারপর অনলাইন আনজিপ!",
"uploading_move" => "মার্জ স্থানান্তরে ...",
"show_file" => "নতুন পৃষ্ঠা পূর্বরূপ",
"unknow_file_title" => "ফাইল খোলা টিপ!",
"unknow_file_tips" => "এই ফাইলটি, আপনি পারবেন প্রয়োগের সমর্থন করে না চাইছেন:",
"unknow_file_try" => "চেষ্টা",
"unknow_file_download" => "ফাইল ডাউনলোড করুন",
"unknow_plugin_search" => "অনুসন্ধান-সম্পর্কিত অ্যাপ্লিকেশন ইনস্টল",
"config_save_error_auth" => "কনফিগারেশন সংরক্ষণ করতে ব্যর্থ, প্রশাসক এই বিশেষ সুযোগ নিষিদ্ধ!",
"config_save_error_file" => "ত্রুটি, ফাইল লেখা যাচ্ছে না!",
"beautify_code" => "কোড ফরম্যাটার",
"convert_case" => "কেস রূপান্তর",
"convert_upper_case" => "বড় হাতের অক্ষরে রূপান্তরিত",
"convert_lower_case" => "ছোট হাতের অক্ষরে রূপান্তরিত",
"editor_insert_time" => "বর্তমান সময় ",
"editor_md5" => " এমডি 5 এনক্রিপশন ",
"editor_qrcode" => " স্ট্রিং দ্বিমাত্রিক কোড ",
"editor_regx" => " নিয়মিত এক্সপ্রেশন টেস্টিং ",
"editor_chinese" => " সরলীকৃত রূপান্তর ",
"editor_chinese_simple" => " সরলীকৃত চীনা রূপান্তর ",
"editor_chinese_traditional" => " প্রথাগত চীনা রূপান্তর ",
"editor_base64" => "Base64 কোডেক ",
"editor_base64_encode" => " Base64 এনকোডিং ",
"editor_base64_decode" => " বেস64 ডিকোডিং ",
"editor_url" => " URL কোডেক ",
"editor_url_encode" => " URL এনকোডিং ",
"editor_url_decode" => " URL ডিকোডিং ",
"editor_unicode" => " ইউনিকোড কোডেক ",
"editor_unicode_encode" => " ইউনিকোড এনকোডিং ",
"editor_unicode_decode" => " ইউনিকোড ডিকোডিং",
"editor_tools_select_tips" => " আপনি রূপান্তর করতে চান কন্টেন্ট নির্বাচন করুন!",
"editor_calc" => "বিনামূল্যে ক্যালকুলেটর",
"shortcut" => "শর্টকাট",
"use_free" => "মুক্ত সংস্করণ ব্যবহার চালিয়ে যান",
"learn_more" => "আরও জানুন",
"replace" => "প্রতিস্থাপন করা",
"selectAll" => "নির্বাচন করা",
"reload" => "পুনরায় বোঝাই করা",
"about" => "উপর",
"complete_current" => "বর্তমান অটো-সমাপ্তি",
"view" => "দৃশ্য",
"tools" => "টুল",
"help" => "সাহায্য",
"not_exists" => "বর্তমানে নেই",
"group_role_fileDownload" => "ডাউনলোডগুলি",
"group_role_share" => "ভাগ",
"users_share" => "ভাগ করা",
"system_setting_save" => "নিরাপত্তা সেটিংস",
"system_setting_menu" => "মেনু ব্যবস্থাপনা",
"system_name" => "প্রোগ্রাম নাম",
"system_name_desc" => "প্রোগ্রাম লোগো শিরোনাম",
"system_desc" => "প্রোগ্রাম বর্ণনা",
"path_hidden" => "নির্দেশিকা বহিষ্কার",
"version_not_support" => "আপনার সংস্করণ এই সমর্থন করে না, দয়া করে উন্নত সংস্করণ কিনতে অফিসিয়াল ওয়েবসাইট থেকে যান!",
"version_not_support_number" => "সীমাবদ্ধতা সংখ্যা এই অপারেশন সমর্থন করে না যেমন, অফিসিয়াল ওয়েবসাইট এর উন্নত সংস্করণ কিনতে দয়া করে!",
"path_hidden_desc" => "ডিরেক্টরি এবং ফাইল ডিফল্টরূপে প্রদর্শিত না, কমা দ্বারা পৃথক",
"new_user_folder" => "নতুন ব্যবহারকারী ডিফল্ট ডিরেক্টরি করে নির্মিত হয়",
"new_user_folder_desc" => "কমা দ্বারা পৃথকীকৃত",
"new_user_app" => "নতুন ব্যবহারকারী ডিফল্ট অ্যাপ্লিকেশন দ্বারা নির্মিত হয়",
"new_user_app_desc" => "অ্যাপ্লিকেশন অ্যাপ্লিকেশন সেন্টার, কমা দ্বারা পৃথক একটি বহুবচন",
"auto_login" => "দর্শকরা স্বয়ংক্রিয় লগইন",
"auto_login_desc" => "ডিফল্ট লগইন ব্যবহারকারী<code>guest/guest</code>ব্যবহারকারীদের; খোলার পর তা নিশ্চিত করার জন্য ব্যবহারকারী বিদ্যমান",
"first_in" => "ডিফল্ট লগ-ইন করার পর",
"version_price_free" => "বিনামূল্যে",
"version_name_1" => "VIP 1",
"version_name_2" => "VIP 2",
"version_name_3" => "VIP 3",
"version_name_4" => "VIP 4",
"version_name_5" => "VIP 5",
"version_name_6" => "VIP 6",
"version_vip_free" => "Free",
"version_vip_1" => "VIP 1",
"version_vip_2" => "VIP 2",
"version_vip_3" => "VIP 3",
"version_vip_4" => "VIP 4",
"version_vip_5" => "VIP 5",
"version_vip_6" => "VIP 6",
"path_can_not_write_data" => "ডিরেক্টরি লিখনযোগ্য নয়, ডিরেক্টরি সেট এবং সমস্ত সাব-read-write পর আবার চেষ্টা করুন!",
"menu_name" => "মেনু নাম",
"menu_hidden" => "লুকান",
"menu_show" => "প্রদর্শন",
"menu_move_down" => "নিচে",
"menu_move_up" => "আপ",
"menu_move_del" => "মুছুন",
"menu_open_window" => "একটি নতুন উইন্ডোতে খুলুন",
"menu_sub_menu" => "সাবমেনু",
"url_path" => "URL ঠিকানা",
"url_path_desc" => "URL ঠিকানা বা JS কোড",
"no_permission_read" => "আপনি পড়ার অনুমতি আছে না!",
"no_permission_download" => "আপনি ডাউনলোড করার অনুমতি নেই!",
"php_env_check" => "অপারেটিং পরিবেশ পর্যবেক্ষণ:",
"php_env_error" => "Php লাইব্রেরি অনুপস্থিত",
"php_env_error_ignore" => "উপেক্ষা করুন এবং লিখুন",
"php_env_error_version" => "পিএইচপি সংস্করণ 5.0 কম হতে পারে না",
"php_env_error_path" => "লেখা যাচ্ছে না",
"php_env_error_list_dir" => "আপনার ওয়েব সার্ভারের মধ্যে নিরাপত্তার কারণে বৈশিষ্ট্য তালিকা প্রর্দশিত হবে, এই বৈশিষ্ট্যটি নিষ্ক্রিয়!<a href=\"https://www.google.com.hk/#newwindow=1&safe=strict&q=web+server+turn+off+directory+listing\" target=\"blank\">কিভাবে?</a>",
"php_env_error_gd" => "Php জিডি লাইব্রেরি খোলা, অন্যথায় কোড হতে হবে থাম্বনেইল ব্যবহার সঠিকভাবে কাজ করবে না",
"install_login" => "আপনি নিম্নলিখিত অ্যাকাউন্ট লগইন ব্যবহার করতে পারেন",
"install_enter" => "পদ্ধতি",
"install_user_default" => "অ্যাডমিনিস্ট্রেটর: {0} / (একটি পাসওয়ার্ড সেট নিচে) <br/> গড় ব্যবহারকারী: {1} <br/> অতিথি ব্যবহারকারী: {2}",
"login_root_password" => "অ্যাডমিনিস্ট্রেটর পাসওয়ার্ড সেট করুন",
"login_root_password_repeat" => "আবার পাসওয়ার্ড নিশ্চিত করুন",
"login_root_password_equal" => "পাসওয়ার্ড দুটি মিলছে না!",
"login_root_password_tips" => "একজন প্রশাসক পাসওয়ার্ড সেট করুন!",
"forget_password" => "আপনার পাসওয়ার্ড ভুলে গেছেন",
"forget_password_tips" => "অ্যাডমিনিস্ট্রেটরের পাসওয়ার্ড ভুলে গেছেন: <br/> সার্ভার লগ ইন করুন রিসেট <b>./data/system/install.lock</b> মুছে ফেলা; <br/><br/> অ প্রশাসক পাসওয়ার্ড ভুলে গেছেন: <br/> রিসেট করতে প্রশাসকের সাথে যোগাযোগ করুন!",
"copyright_desc" => "Kodexplorer একটি অত্যন্ত প্রশংসিত ওয়েব ডকুমেন্ট ম্যানেজমেন্ট সিস্টেম, আপনি এমনকি webIDE সরাসরি অনলাইনে উন্নয়ন, অভ্যন্তরীণ নথি ব্যবস্থাপনা বা ভাগ, এছাড়াও সাইট ম্যানেজমেন্ট সার্ভার ব্যবহার করা যায় জন্য এটি ব্যবহার, FTP প্রতিস্থাপন করতে পারেন. এছাড়াও আপনি দ্বিতীয় উন্নয়ন প্রোগ্রাম আপনার বিদ্যমান সিস্টেমের মধ্যে এই সংহত করতে পারেন.",
"copyright_contact" => "Contact us:kodcloud@qq.com <a>.</a> <a href=\"javascript:core.openWindow('http://bbs.kodcloud.com/');\">Feedback</a>",
"copyright_info" => "Copyright © <a href=\"https://kodcloud.com/?kodref=%s\" target=\"_blank\">kodcloud.com</a>.",
"copyright_pre" => "Powered by KodExplorer",
"kod_name" => "KodExplorer",
"kod_name_desc" => "আম মেঘ • এক্সপ্লোরার",
"kod_power_by" => " - Powered by KodExplorer",
"kod_name_copyright" => "আম মেঘ • এক্সপ্লোরার",
"kod_meta_name" => "KodExplorer",
"kod_meta_keywords" => "KodExplorer, Kod, kodCloud, webOS, webIDE, পিএইচপি filemanage, filemanage, দাও মেঘ, মেঘ আম, ডকুমেন্ট ম্যানেজমেন্ট সিস্টেম, এন্টারপ্রাইজ মেঘ ডিস্ক, অনুসন্ধানকারী ,, অনলাইন ডকুমেন্টেশন, অনলাইন কার্যালয়, অনলাইন অফিস, অনলাইন কানাডিয়ান প্রিভিউ, অনলাইন সম্পাদনা , অনলাইন সম্পাদক",
"kod_meta_description" => "KodExplorer রোড মেঘ পারেন (পূর্বে আম মেঘ) নিরাপদ এবং নিয়ন্ত্রণ সহজ এবং সহজ প্রদান সরকার / কর্পোরেট ব্যক্তিগত মেঘ এবং ব্যক্তিগত ওয়েবসাইটের জন্য অনলাইন দস্তাবেজে ম্যানেজমেন্ট সিস্টেম, এন্টারপ্রাইজ বেসরকারী মেঘ স্থাপনার, নেটওয়ার্ক স্টোরেজ, অনলাইন দস্তাবেজে ব্যবস্থাপনা একটি নেতৃস্থানীয় প্রদানকারী, অনলাইন অফিস ব্যবহার, অত্যন্ত ব্যক্তিগত মেঘ পণ্য কাস্টমাইজড। Cai ইয়ং জানালা শৈলী ইন্টারফেস, অপারেটিং চর্চা, দ্রুত শুরু করতে খাপ খাওয়ানো না করেও, অনলাইন প্রিভিউ, প্লেব্যাক এবং সম্পাদনা পরিবেশ বান্ধব, শক্তিশালী সাধারণ ফাইল ফরম্যাট প্রজাতির শত শত সমর্থন একটি ট্রায়াল, তারা আর ব্যক্তিগত ছাড়া কি হয় মেঘ অর্ঘ।",
"kod_meta_copyright" => "kodcloud.com",
"login" => "লগইন করুন",
"guest_login" => "অতিথি সাইন ইন",
"username" => "লগইন অ্যাকাউন্ট",
"userNickName" => "ব্যবহারকারীর ডাক নাম",
"password" => "পাসওয়ার্ড",
"login_code" => "সঙ্কেত",
"need_check_code" => "লগইন প্রমাণীকরণ কোডটি উন্মুক্ত",
"need_check_code_desc" => "লগ ইন করার পরে, আপনাকে যাচাইকরণ কোডটি অবশ্যই প্রবেশ করতে হবে।",
"setting_csrf_protect" => "ওপেন csrf সুরক্ষা",
"setting_csrf_protect_desc" => "হামলা কার্যকরভাবে csrf রক্ষা করতে পারে খোলার টাইপ করার পর",
"login_rember_password" => "পাসওয়ার্ড মনে রেখো",
"setting_show_root_group" => "সব বিভাগ তালিকা",
"setting_show_root_group_desc" => "সব বিভাগ তালিকাভুক্ত কিনা ট্রি নির্দেশক মূল বিভাগ",
"setting_show_share_user" => "সকল ব্যবহারকারীর একটি তালিকা",
"setting_show_share_user_desc" => "বৃক্ষ ডিরেক্টরি রুট বিভাগ সমস্ত ব্যবহারকারী ভাগ জন্য তালিকাভুক্ত করা হয়",
"setting_clear_user_recycle" => "সকল ব্যবহারকারীর জন্য রিসাইকেল বিন খালি",
"setting_clear_cache" => "ক্যাশে খালি করুন",
"setting_icp" => "কপিরাইট বা রেকর্ড সংখ্যা",
"setting_global_css" => "কাস্টম বিশ্বব্যাপী CSS",
"setting_global_css_desc" => "সমস্ত পৃষ্ঠা কাস্টম CSS ঢোকাব",
"setting_global_html" => "পরিসংখ্যানগত কোড এইচটিএমএল",
"setting_global_html_desc" => "সমস্ত পৃষ্ঠা এই অনুচ্ছেদ HTML কোড সন্নিবেশ করানো হবে, কোড তৃতীয় পক্ষের পরিসংখ্যান স্থাপন করা যেতে পারে",
"us" => "kodcloud.com",
"login_not_null" => "ব্যবহারকারী নাম এবং পাসওয়ার্ড খালি হতে পারে না!",
"code_error" => "ত্রুটি কোডের",
"password_error" => "ব্যবহারকারীর নাম বা পাসওয়ার্ড ভুল!",
"password_not_null" => "পাসওয়ার্ড খালি হতে পারে না!",
"old_password_error" => "পুরানো পাসওয়ার্ড ভুল!",
"permission" => "অনুমতি!",
"permission_edit" => "অনুমতি সংশোধন",
"file_info_owner" => "মালিক",
"file_info_group" => "গ্রুপ",
"no_permission" => "অ্যাডমিনিস্ট্রেটর এই বিশেষ সুযোগ অক্ষম করেছে!",
"no_permission_ext" => "অ্যাডমিনিস্ট্রেটর ফাইল অনুমতি এই ধরনের নিষিদ্ধ",
"dialog_max" => "চরমে তোলা",
"dialog_min" => "কমান",
"dialog_min_all" => "সমস্ত মিনিমাইজ",
"dialog_display_all" => "সব উইন্ডোসমূহ দেখাবে",
"dialog_close_all" => "সব বন্ধ",
"open" => "খোলা",
"others" => "অন্যান্য",
"open_with" => "এর জন্য খুলুন ...",
"close" => "ঘনিষ্ঠ",
"close_all" => "সব বন্ধ",
"close_left" => "বাম ট্যাবটি বন্ধ",
"close_right" => "ডানদিকের ট্যাবস বন্ধ করুন",
"close_others" => "বন্ধ অন্যান্য",
"loading" => "অপারেশন ...",
"warning" => "সতর্কতা",
"getting" => "পান ...",
"sending" => "ডেটা ট্রান্সমিশন ...",
"data_error" => "ডেটা ত্রুটি!",
"get_success" => "সাফল্য পান!",
"save_success" => "সফলভাবে সংরক্ষিত!",
"success" => "সফল অপারেশন",
"error" => "অপারেশন ব্যর্থ",
"error_repeat" => "অপারেশন ব্যর্থ, নাম আগে থেকেই আছে!",
"word_error" => "ব্যর্থতা ",
"word_success" => " সাফল্য",
"system_error" => "সিস্টেম ত্রুটি",
"name" => "নাম",
"type" => "আদর্শ",
"contain" => "ধারণ করা",
"address" => "অবস্থান",
"size" => "আয়তন",
"byte" => "সংবাদের একক",
"path" => "পথ",
"action" => "অপারেটিং",
"create_time" => "নির্মিত",
"modify_time" => "পরিমিত",
"last_time" => "সর্বশেষ ভিজিট",
"sort_type" => "সাজানোর ক্রম",
"time_type" => "Y/m/d H:i:s",
"time_type_info" => "Y/m/d H:i:s",
"public_path" => "জন ডিরেক্টরি",
"system_path_not_change" => "সিস্টেম তালিকা, পরিবর্তন করা যাবে না",
"file" => "ফাইল",
"folder" => "ফোল্ডার",
"copy" => "কপি",
"past" => "লাঠি",
"clone" => "একটি অনুলিপি তৈরি করুন",
"cute" => "কাটা",
"cute_to" => "যান ...",
"copy_to" => "অনুলিপি করুন ...",
"remove" => "মুছুন",
"remove_force" => "কমপ্লিটলি অপসারণ",
"info" => "সম্পত্তি",
"list_type" => "দৃশ্য",
"list_icon" => "আইকন অ্যারে",
"list_list" => "তালিকা বিন্যাস",
"list_list_split" => "কলাম মোড",
"sort_up" => "বৃদ্ধি",
"sort_down" => "কমছে",
"order_type" => "সাজানোর ক্রম",
"order_desc" => "নিম্নক্রম",
"order_asc" => "ঊর্ধ্বগামী",
"rename" => "পুনঃনামকরণ",
"add_to_fav" => "পছন্দসই যোগ করুন",
"search_in_path" => "ফোল্ডার খোঁজা",
"add_to_play" => "প্লেতালিকায় জুড়ুন",
"manage_fav" => "প্রিয়গুলি পরিচালনা করুন",
"refresh_tree" => "সুদ্ধ করুন ডিরেক্টরি ট্রি",
"manage_folder" => "নির্দেশিকা ম্যানেজমেন্ট",
"close_menu" => "মেন্যু",
"zip" => "একটি সংকুচিত প্যাকেজ তৈরি করুন",
"unzip" => "বের করে আনতে ...",
"unzip_folder" => "একটি ফোল্ডারে আনজিপ করুন",
"unzip_this" => "বর্তমান এক্সট্র্যাক্ট",
"unzip_to" => "বের করে আনতে ...",
"zipview_file_big" => "ফাইল অত্যন্ত বড়, এবং তারপর পূর্বরূপ অপারেশন নিষ্কর্ষ!",
"clipboard" => "দেখুন ক্লিপবোর্ড",
"clipboard_clear" => "খালি ক্লিপবোর্ড",
"full_screen" => "ফুল স্ক্রীণ মোড থেকে",
"folder_info_item" => "আইটেম",
"folder_info_item_select" => "নির্বাচিত",
"file_load_all" => "সব লোড করতে ডাবল ক্লিক করুন ......",
"tips" => "প্রম্পট",
"ziping" => "জিপ করা হচ্ছে ...",
"unziping" => "বের করা হচ্ছে ...",
"moving" => "মোবাইল অপারেশন ...",
"remove_title" => "নিশ্চিতকরণ মুছুন",
"remove_info" => "নির্বাচিত আইটেমের মুছে ফেলার জন্য Confirm?",
"remove_title_force" => "স্থায়ীভাবে মুছে ফেলা",
"remove_info_force" => "আপনি কি নিশ্চিত যে আপনি স্থায়ীভাবে এই ডকুমেন্ট মুছে ফেলতে চান?",
"name_isexists" => "ভুল, নাম আগে থেকেই আছে!",
"install" => "ইনস্টল করুন",
"width" => "প্রস্থ",
"height" => "উচ্চ",
"app" => "হাল্কা অ্যাপ্লিকেশন",
"app_store" => "হাল্কা অ্যাপ্লিকেশন",
"app_create" => "অ্যাপ্লিকেশন তৈরি করুন",
"app_edit" => "আবেদন পরিবর্তন করুন",
"app_group_all" => "সম্পূর্ণ",
"app_group_game" => "খেলা",
"app_group_tools" => "টুল",
"app_group_reader" => "পড়া",
"app_group_movie" => "টিভি",
"app_group_music" => "সঙ্গীত",
"app_group_life" => "জীবন",
"app_group_others" => "অন্যান্য",
"app_desc" => "বিবরণ",
"app_icon" => "অ্যাপ্লিকেশন আইকন",
"app_icon_show" => "URL ঠিকানা অথবা ডাইরেক্টরি",
"app_group" => "আবেদন প্যাকেট",
"app_type" => "আদর্শ",
"app_type_url" => "লিংক",
"app_type_code" => "JS এক্সটেনশন",
"app_display" => "বহি",
"app_display_border" => "সীমানা না থাকলে (অর্থাৎ বর্ডারলেস নির্বাচন করুন)",
"app_display_size" => "(সমন্বয় পরীক্ষা করুন) মাপ পরিবর্তন",
"app_size" => "আয়তন",
"app_url" => "লিংক ঠিকানা",
"app_code" => "JS কোড",
"edit" => "সম্পাদন করা",
"edit_can_not" => "না একটি টেক্সট ফাইল",
"edit_too_big" => "ফাইলটি অতি দীর্ঘ, এটা 40M তার চেয়ে অনেক বেশী হতে পারে না",
"open_default" => "ডিফল্ট ওপেন",
"open_ie" => "ব্রাউজার ওপেন",
"refresh" => "সতেজ করা",
"refresh_all" => "নবায়ন",
"newfile" => "নতুন ফাইল",
"newfile_save_as" => "সংরক্ষণ করুন",
"newfolder" => "নতুন ফোল্ডার",
"newothers" => "নিউ অন্যান্য",
"path_loading" => "লোড হচ্ছে ...",
"go" => "হাঁটুন!",
"go_up" => "উচ্চ স্তর",
"history_next" => "অগ্রবর্তী",
"history_back" => "পশ্চাদপসরণ",
"address_in_edit" => "সম্পাদনা মোডে প্রবেশ করার জন্য ক্লিক করুন",
"double_click_rename" => "পুনঃনামকরনের ডাবল ক্লিক করুন",
"double_click_open" => "খোলার জন্য ডাবল ক্লিক করুন",
"path_null" => "ফোল্ডার খালি!",
"file_size_title" => "আইকন সাইজ",
"file_size_small_super" => "আল্ট্রা-ছোট",
"file_size_small" => "ছোট আইকন",
"file_size_default" => "আইকন",
"file_size_big" => "বড় আইকন",
"file_size_big_super" => "বড় আইকন",
"upload" => "আপলোড",
"upload_ready" => "আপলোড করার জন্য অপেক্ষা করা হচ্ছে",
"upload_success" => "আপলোড সফল",
"upload_path_current" => "বর্তমান ডিরেক্টরির পাল্টান",
"upload_select" => "ফাইল নির্বাচন করুন",
"upload_max_size" => "সর্বোচ্চ অনুমোদিত",
"upload_size_info" => "আপনি আরো কনফিগার করতে চান তাহলে, php.ini সর্বোচ্চ অনুমোদিত আপলোড সংশোধন দয়া করে. যখন আপনি নির্বাচন একটি ফাইল এই কনফিগারেশন চেয়ে বড় স্বয়ংক্রিয়ভাবে ফিল্টার আউট হবে.",
"upload_error" => "আপলোড ব্যর্থ",
"upload_error_http" => "নেটওয়ার্ক বা ফায়ারওয়াল ত্রুটি",
"upload_muti" => "মাল্টি ফাইল আপলোড",
"upload_drag" => "টেনে আনুন এবং ড্রপ আপলোড",
"upload_drag_tips" => "আপলোড করার জন্য আলগা!",
"path_not_allow" => "ফাইল নাম দেওয়া যাবে না",
"download" => "ডাউনলোড",
"downloading" => "লোড হচ্ছে ...",
"download_address" => "ডাউনলোড",
"download_ready" => "ডাউনলোড করা হবে",
"download_success" => "ডাউনলোড সাফল্য!",
"download_error" => "ডাউনলোড ব্যর্থ হয়েছে!",
"download_error_create" => "লেখার ত্রুটি!",
"download_error_exists" => "লিংক ব্যর্থ দায়ের করা!",
"upload_error_null" => "কোন ফাইল!",
"upload_error_big" => "ফাইলের আকার সার্ভার সীমা ছাড়িয়ে গেছে",
"upload_error_move" => "ফাইল স্থানান্তর করতে ব্যর্থ হয়েছে!",
"upload_error_exists" => "ফাইল আগে থেকেই আছে",
"upload_local" => "স্থানীয় আপলোড",
"download_from_server" => "রিমোট ডাউনলোড",
"save_path" => "পাথ সংরক্ষণ",
"upload_select_muti" => "নির্বাচনযোগ্য ফাইল আপলোড একটি বহুবচন",
"search" => "অনুসন্ধান",
"searching" => "অনুসন্ধান করা হচ্ছে ...",
"search_result" => "অনুসন্ধান ফলাফল",
"seach_result_too_more" => "অনেকগুলি অনুসন্ধান ফলাফল, এটি একটি ডিরেক্টরি বা শব্দের জন্য সুপারিশ করা হয়",
"search_null" => "কোন ফলাফল নেই!",
"search_uplow" => "কেস সংবেদনশীল",
"search_content" => "অনুসন্ধান ফাইলের বিষয়বস্তু",
"search_info" => "একটি অনুসন্ধান শব্দ লিখুন এবং অনুসন্ধান পাথ দয়া করে!",
"search_ext_tips" => "দ্বারা | আলাদা; উদাহরণ পিএইচপি জন্য | JS | CSS<br/>ডিফল্ট টেক্সট ফাইল সার্চ না কি পূর্ণ হয়ে গেছ",
"file_type" => "ফাইল টাইপ",
"goto" => "ঝাঁপ দাও",
"server_dwonload_desc" => "টাস্ক ডাউনলোড লিস্টে যোগ করা হয়েছিল",
"parent_permission" => "পেরেন্ট ডাইরেক্টরি অনুমতি",
"root_path" => "আমার নথি",
"lib" => "আড়ত",
"fav" => "বুকমার্ক করুন",
"desktop" => "ডেস্কটপ",
"browser" => "ব্রাউজার",
"my_computer" => "আমার কম্পিউটার",
"recycle" => "আবর্জনা",
"my_document" => "আমার নথি",
"my_picture" => "আমার ফটো",
"my_music" => "আমার গান",
"my_movie" => "আমার ভিডিওসমূহ",
"my_download" => "আমার ডাউনলোডগুলি",
"ui_desktop" => "ডেস্কটপ",
"ui_explorer" => "ফাইল ম্যানেজমেন্ট",
"ui_editor" => "সম্পাদক",
"adminer" => "adminer",
"ui_project_home" => "প্রকল্প হোম",
"ui_login" => "লগইন করুন",
"ui_logout" => "অব্যাহতিপ্রাপ্ত",
"setting" => "সিস্টেম সেটিংস",
"setting_title" => "বিকল্প",
"setting_user" => "ব্যক্তিগত কেন্দ্র",
"setting_password" => "পাসওয়ার্ড পরিবর্তন করুন",
"setting_password_old" => "পুরনো পাসওয়ার্ড",
"setting_password_new" => "সংশোধিত",
"setting_language" => "ভাষা সেটিংস",
"setting_member" => "ইউজার ম্যানেজমেন্ট",
"setting_group" => "ব্যবহারকারী গ্রুপ ব্যবস্থাপনা",
"setting_group_add" => "ব্যবহারকারী গোষ্ঠী যোগ",
"setting_group_edit" => "সম্পাদনা ইউজার গ্রুপ",
"setting_theme" => "থিম সেটিংস",
"setting_wall" => "ওয়ালপেপার সেটিংস",
"setting_wall_desktop" => "ডেস্কটপ ওয়ালপেপার",
"setting_wall_desktop_list" => "ডেস্কটপ ওয়ালপেপার ম্যানেজমেন্ট",
"setting_wall_login_list" => "লগইন ওয়ালপেপার ম্যানেজমেন্ট",
"setting_wall_login_tips" => "টিপ: যখন একাধিক অংশ থাকে, তখন লগইন ইন্টারফেসের পটভূমি এলোমেলোভাবে ঘোরানো হবে",
"setting_wall_diy" => "কাস্টম ওয়ালপেপার:",
"setting_wall_info" => "চিত্র URL ঠিকানা, স্থানীয় ছবি ইমেজ খুলতে ব্রাউজার পেতে অধিকার হতে পারে",
"setting_fav" => "বুকমার্ক পরিচালক",
"setting_help" => "সাহায্য ব্যবহার",
"setting_about" => "কাজ সম্পর্কে",
"setting_success" => "সংশোধন প্রভাব গ্রহণ করেছে!",
"can_not_repeat" => "পুনরাবৃত্তি করার অনুমতি দেওয়া হয়নি",
"absolute_path" => "পরম ঠিকানা",
"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" => "ব্যবহারকারী যুক্ত করুন",
"password_null_not_update" => "তারা বলেন, তারা পরিবর্তন করা হয়নি পাসওয়ার্ড পূরণ না হয়",
"if_save_file_tips" => "কিছু ফাইল সংরক্ষিত হয় না। আপনি উইন্ডোটি বন্ধ করার ব্যাপারে নিশ্চিত?",
"if_save_file" => "ফাইল সংরক্ষণ করা হয়নি, আপনি সংরক্ষণ করতে চান?",
"if_remove" => "মুছুন নিশ্চিত",
"member_remove_tips" => "আপনি ব্যবহারকারী ডিরেক্টরি সাফ করা যাবে সরানোর পরে",
"group_remove_tips" => "আপনি ব্যবহারকারীদের ব্যবহারকারী গ্রুপ লগইন করতে পারবেন না সরানোর পরে<br/>(প্রয়োজন পুনরায় সেট ব্যবহারকারী গ্রুপ)",
"group_name" => "ব্যবহারকারী গ্রুপের নাম",
"group_name_tips" => "সুপারিশ ইংরেজি নাম, পুনরাবৃত্তি করা যাবে না",
"group_desc" => "প্রদর্শন নাম",
"group_desc_tips" => "গ্রুপের নাম বর্ণনা",
"group_role_ext" => "এক্সটেনশন বিধিনিষেধ",
"group_role_ext_tips" => "একাধিক সঙ্গে | বিচ্ছিন্ন",
"group_role_file" => "ফাইল ম্যানেজমেন্ট",
"group_role_upload" => "আপলোড করার অনুমতি দিন",
"group_role_user" => "ব্যবহারকারী তথ্য",
"group_role_group" => "ব্যবহারকারী গ্রুপ ব্যবস্থাপনা",
"group_role_member" => "ইউজার ম্যানেজমেন্ট",
"group_role_mkfile" => "নতুন ফাইল",
"group_role_mkdir" => "নতুন ফোল্ডার",
"group_role_pathrname" => "পুনঃনামকরণ",
"group_role_pathdelete" => "ফাইল মুছে ফেলার",
"group_role_pathinfo" => "ফাইল বৈশিষ্ট্যাবলী",
"group_role_pathmove" => "সরান (কপি / কাট / পেস্ট / ড্র্যাগ অপারেশন)",
"group_role_zip" => "সংকোচন",
"group_role_unzip" => "আনজিপ",
"group_role_search" => "অনুসন্ধান",
"group_role_filesave" => "ফাইল সংরক্ষণ সম্পাদনা করতে",
"group_role_can_upload" => "আপলোড ও ডাউনলোডের",
"group_role_download" => "রিমোট ডাউনলোড",
"group_role_passowrd" => "পাসওয়ার্ড পরিবর্তন করুন",
"group_role_config" => "কনফিগারেশন তথ্য",
"group_role_fav" => "বুকমার্ক কার্যকলাপ (যোগ / সম্পাদনা / মোছা)",
"action_list" => "তালিকা দেখুন",
"action_add" => "যোগ",
"action_edit" => "সম্পাদন করা",
"action_del" => "মুছুন",
"group_role_ext_warning" => "<br/>পুনঃনামকরণ (নির্দিষ্ট এক্সটেনশন পালটে),<br/>রক্ষা পরিবর্তনপারবেন, দূরবর্তী ডাউনলোড, নির্যাস এই ধরনের ফাইলের অনুমতি না আপলোড",
"group_tips" => "<li> 1. ইউজার গ্রুপের নামটি অনুলিপি করা যাবে না। গোষ্ঠীর নাম পরিবর্তন করার পরে, এটি পুনর্বিন্যাসিত ব্যবহারকারীর অন্তর্গত এবং স্বয়ংক্রিয়ভাবে যুক্ত করা হবে। </li><li> 2. এক্সটেনশানগুলি সিস্টেমের নিরাপত্তার মধ্যে সম্পর্ক সীমাবদ্ধ করুন, সাবধানে থাকুন <i>(যদি আপনি ওয়েব ডাইরেক্টরিতে একটি নতুন পিএইচপি তৈরি করেন তবে এর অর্থ হল এই ব্যবহারকারীর প্রোগ্রামের অনুমতিগুলি পরিবর্তন করা অসম্ভব)</i> </li><li> 3. পারিবারিক ব্যবস্থাপনা, অধিকার গোষ্ঠী ব্যবস্থাপনা; অধিকার দেখুন এবং যোগ, মুছে ফেলা, এবং অধিকার সংশোধন করা; প্রোগ্রাম স্বয়ংক্রিয়ভাবে যুক্ত করা হয় </li><li> 4. অনুমতি গোষ্ঠী অনুমতি গ্রুপ যোগ করার জন্য সেট করা হয় পর, পরবর্তী অনুমতি উত্তরাধিকারসূত্রে প্রাপ্ত হয় না <i>(এই অনুমতি সর্বোচ্চ অনুমতি সমতুল্য)।</i> </li>",
"not_null" => "প্রয়োজনীয় ক্ষেত্রগুলি খালি হতে পারে না!",
"picture_can_not_null" => "ফটো খালি হতে পারে না!",
"rname_success" => "সাফল্য পুনঃনামকরণ!",
"please_inpute_search_words" => "অনুসন্ধান করার জন্য একটি পংক্তি লিখুন দয়া করে",
"remove_success" => "সফলভাবে মোছা হয়েছে!",
"remove_fali" => "মুছুন ব্যর্থ হয়েছে!",
"clipboard_null" => "ক্লিপবোর্ড খালি!",
"create_success" => "নতুন সাফল্য!",
"create_error" => "নিউ ব্যর্থ, চেক ডিরেক্টরি ব্যবহারের অনুমতি!",
"copy_success" => "[কপি] - ক্লিপবোর্ড সাফল্য আচ্ছাদন!",
"cute_success" => "[কেটে] - ক্লিপবোর্ড সাফল্য আচ্ছাদন!",
"clipboard_state" => "ক্লিপবোর্ড অবস্থা:",
"no_permission_write_all" => "ফাইল বা ডিরেক্টরির লিখনযোগ্য নয়",
"no_permission_write_file" => "ফাইল লেখার অনুমতি নেই",
"no_permission_read_all" => "ফাইল বা ডিরেক্টরির কোন পঠিত অনুমতি রয়েছে",
"copy_not_exists" => "উত্স অস্তিত্ব নেই",
"current_has_parent" => "লক্ষ্য ফোল্ডারের উৎস ফোল্ডার এর একটি খোলা হয়!",
"past_success" => "<b>পেস্ট অপারেশন সম্পন্ন হয়</b>",
"cute_past_success" => "<b>কাটা অপারেশন সম্পন্ন হয়</b>(সোর্স ফাইল মুছে ফেলা হয়, ক্লিপবোর্ড খালি)",
"zip_success" => "কম্প্রেশন সম্পন্ন",
"not_zip" => "সংরক্ষণাগার না",
"zip_null" => "নির্বাচিত ফাইল বা ডিরেক্টরির",
"unzip_success" => "আনজিপ সম্পূর্ণ",
"gotoline" => "লাইন ঝাঁপ দাও",
"path_is_current" => "পাথ এবং বর্তমান পাথ একই খুলতে!",
"path_exists" => "নাম আগে থেকেই আছে!",
"undo" => "প্রত্যাহার",
"redo" => "এন্টি প্রত্যাহার",
"preview" => "প্রি",
"wordwrap" => "মোড়ানো",
"show_gutter" => "রেখার নম্বর দেখান",
"char_all_display" => "অদৃশ্য অক্ষর প্রদর্শন করা হবে",
"auto_complete" => "স্বয়ংক্রিয়ভাবে অনুরোধ জানানো হবে",
"auto_save" => "স্বয়ংক্রিয়ভাবে সংরক্ষণ করুন",
"function_list" => "ফাংশন তালিকা",
"code_theme" => "কোডিং স্টাইল",
"font_size" => "ফন্ট সাইজ",
"confirm" => "আপনি কি নিশ্চিত যে আপনি এটি করতে চান?",
"button_ok" => "নির্ধারণ",
"button_submit" => "জমা দিন",
"button_set" => "সেট আপ করুন",
"button_cancel" => "বাতিল করা হয়েছে",
"button_edit" => "সম্পাদন করা",
"button_save" => "সংরক্ষণ করুন",
"button_apply" => "প্রয়োগ করা",
"button_save_all" => "সকল সংরক্ষণ",
"button_not_save" => "সংরক্ষণ করা হবে না",
"button_add" => "যোগ",
"button_back_add" => "যোগ ফিরুন",
"button_del" => "মুছুন",
"button_save_edit" => "পরিবর্তনগুলি সংরক্ষণ",
"button_save_submit" => "সংরক্ষণ করুন",
"button_more" => "অধিক",
"button_select_all" => "নির্বাচন সকল / নিষ্ক্রিয় করো",
"charset_AUTO" => "স্বয়ংক্রিয় সনাক্তকরণ",
"charset_UTF_8" => "Unicode",
"charset_UTF_16" => "Unicode",
"charset_CP1256" => "আরবি",
"charset_ISO_8859_6" => "আরবি",
"charset_ISO_8859_10" => "নরডিক ভাষায়",
"charset_CP1257" => "বাল্টিক ভাষা",
"charset_ISO_8859_13" => "বাল্টিক ভাষা",
"charset_ISO_8859_4" => "বাল্টিক ভাষা",
"charset_BIG5_HKSCS" => "繁体-香港",
"charset_BIG5" => "繁体-台湾",
"charset_Georgian_Academy" => "জর্জিয়ান",
"charset_PT154" => "কাজাখ",
"charset_CP949" => "কোরিয়ান",
"charset_EUC_KR" => "কোরিয়ান",
"charset_GB18030" => "সরলীকৃত চীনা",
"charset_GBK" => "সরলীকৃত চীনা",
"charset_ISO_8859_14" => "কেল্ট্ জাতির ভাষা",
"charset_CP1133" => "লাও",
"charset_ISO_8859_16" => "রোমানিয়ন",
"charset_ISO_8859_3" => "দক্ষিণ ইউরোপীয়",
"charset_EUC_JP" => "জাপানি",
"charset_ISO_2022_JP" => "জাপানি",
"charset_SHIFT_JIS" => "জাপানি",
"charset_KOI8_T" => "তাজিক ভাষা",
"charset_ISO_8859_11" => "থাই",
"charset_TIS_620" => "থাই",
"charset_CP1254" => "তুর্কী",
"charset_CP1251" => "সিরিলিক",
"charset_ISO_8859_5" => "সিরিলিক",
"charset_KOI8_R" => "সিরিলিক",
"charset_KOI8_U" => "সিরিলিক",
"charset_CP1252" => "পশ্চিম ইউরোপীয় ভাষা",
"charset_ISO_8859_1" => "পশ্চিম ইউরোপীয় ভাষা",
"charset_ISO_8859_15" => "পশ্চিম ইউরোপীয় ভাষা",
"charset_Macintosh" => "পশ্চিম ইউরোপীয় ভাষা",
"charset_CP1255" => "হিব্রু",
"charset_ISO_8859_8" => "হিব্রু",
"charset_CP1253" => "গ্রিক",
"charset_ISO_8859_7" => "গ্রিক",
"charset_ARMSCII_8" => "আর্মেনিয়",
"charset_CP1258" => "ভিয়েতনামী",
"charset_VISCII" => "ভিয়েতনামী",
"charset_CP1250" => "মধ্য ইউরোপীয় ভাষাসমূহ",
"charset_ISO_8859_2" => "মধ্য ইউরোপীয় ভাষাসমূহ",
"charset_default_set" => "ফাইল এনকোডিং",
"charset_convert_save" => "যেমন এনকোড ফাইল সংরক্ষণ করুন",
"PluginCenter" => "প্লাগ কেন্দ্র",
"PluginBuy" => "ক্রয় অনুমোদন",
"PluginInstalled" => "ইনস্টল করা হয়েছে",
"PluginUpdate" => "আপডেট",
"PluginListNull" => "সেখানে কোনো বিষয়বস্তু নেই!",
"PluginType" => "শ্রেণীবিন্যাস",
"PluginTypeAll" => "সম্পূর্ণ",
"PluginTypeFile" => "বর্ধিত ফাইল",
"PluginTypeSafe" => "সিকিউরিটি টুলস",
"PluginTypeTools" => "উপযোগ",
"PluginTypeMedia" => "মাল্টিমিডিয়া",
"PluginTypeOthers" => "অন্যান্য",
"PluginInstall" => "প্লাগ ইনস্টল করুন",
"PluginEnable" => "প্লাগ-ইন সক্ষম করুন",
"PluginDisable" => "অক্ষম",
"PluginRemove" => "প্লাগ আনইনস্টল",
"PluginConfig" => "প্লাগ-ইন কনফিগার করুন",
"PluginStatus" => "রাষ্ট্র",
"PluginStatusEnabled" => "সক্ষম করা",
"PluginStatusDisabled" => "সক্ষম করা",
"PluginStatusNotInstall" => "ইনস্টল করা নেই",
"PluginInstalling" => "ইনস্টলেশনের ...",
"PluginHasUpdate" => "আপডেট",
"PluginUpdateStart" => "প্ল্যাগ-ইন আপডেট",
"PluginNeedConfig" => "প্রারম্ভিক কনফিগারেশন সক্রিয় করতে হবে",
"PluginConfigNotNull" => "প্রয়োজনীয় ক্ষেত্রগুলি খালি রাখা যাবে না!",
"PluginOpen" => "খোলা",
"PluginAuther" => "লেখক",
"PluginVersion" => "সংস্করণ",
"PluginDownloadNumber" => "ইনস্টল",
"PluginBack" => "প্রত্যাবর্তন",
"PluginReadme" => "বিবরণ",
"PluginResetConfig" => "ডিফল্ট সেটিংস পুনরুদ্ধার করুন",
"PluginInstallSelf" => "ম্যানুয়াল ইনস্টলেশন",
"Plugin.config.auth" => "অনুমতিসমূহ",
"Plugin.config.authDesc" => "প্রাপ্তিসাধ্য সকল সেটিংস, অথবা নির্দিষ্ট ব্যবহারকারীদের ব্যবহারকারী গোষ্ঠী, অধিকার সংগঠনগুলো ব্যবহার করতে পারেন",
"Plugin.config.authOpen" => "অ্যাক্সেস খুলুন",
"Plugin.config.authOpenDesc" => "দেখার কোন প্রয়োজন অ্যাক্সেস করা যাবে না, বহিরাগত ইন্টারফেস কল জন্য ব্যবহার করা যেতে পারে",
"Plugin.config.authAll" => "ধারক",
"Plugin.config.authUser" => "ব্যবহারকারী",
"Plugin.config.authGroup" => "মনোনীত বিভাগ",
"Plugin.config.authRole" => "রাইটস গ্রুপ",
"Plugin.Config.openWith" => "ওপেন শৈলী",
"Plugin.Config.openWithDilog" => "অভ্যন্তরীণ ডায়ালগ",
"Plugin.Config.openWithWindow" => "নতুন পৃষ্ঠা খোলে",
"Plugin.Config.fileSort" => "এক্সটেনশন সমিতি অগ্রাধিকার",
"Plugin.Config.fileSortDesc" => "বৃহত্তর উচ্চ অগ্রাধিকার খুলতে এক্সটেনশন",
"Plugin.Config.fileExt" => "সমর্থিত ফাইল ফরম্যাট",
"Plugin.Config.fileExtDesc" => "প্লাগ-ইন যুক্ত এক্সটেনশন",
"Plugin.tab.basic" => "বেসিক সেটিং",
"Plugin.tab.auth" => "অনুমতিসমূহ",
"Plugin.tab.others" => "অন্যান্য সেটিংস",
"Plugin.default.aceEditor" => "টেক্কা সম্পাদক",
"Plugin.default.htmlView" => "ওয়েব পৃষ্ঠা পূর্বরূপ",
"Plugin.default.picasa" => "পিকাসা ছবি ব্রাউজিং",
"Plugin.default.zipView" => "Archive Preview",
"Plugin.default.jPlayer" => "jPlayer খেলোয়াড়",
"Plugin.auth.viewList" => "প্লাগইন তালিকা",
"Plugin.auth.setting" => "প্লাগইন সেটিংস",
"Plugin.auth.status" => "বন্ধ করুন",
"Plugin.auth.install" => "Install / Uninstall",
"Explorer.UI.openWith" => "ওপেন নির্বাচন করুন",
"Explorer.UI.openWithText" => "নোটপ্যাড খুলতে",
"Explorer.UI.appSetDefault" => "ডিফল্ট খোলা সেট",
"Explorer.UI.appAwaysOpen" => "সর্বদা এই ফাইল খোলার জন্য নির্বাচিত প্রোগ্রাম ব্যবহার",
"Explorer.UI.selectAppDesc" => "প্রোগ্রাম নির্বাচন করুন আপনি এই ফাইলটি খুলতে চান",
"Explorer.UI.selectAppWarning" => "দয়া করে আবেদন নির্বাচন করুন!",
"Explorer.UI.appTypeSupport" => "সমর্থিত",
"Explorer.UI.appTypeAll" => "সমস্ত অ্যাপ্লিকেশন",
"kodApp.oexe.edit" => "হালকা আবেদন সম্পাদনা করুন",
"kodApp.oexe.open" => "আলোর আবেদন খুলুন"
);

@ -0,0 +1,33 @@
<div class="box">
<div class="title"><span>KODExplorer és Què?</span></div>
<p>KODExplorer és una gestió de documents en línia basat en la web de codi obert, editor de codi. Proporciona una mena d'interfície d'usuari de Windows clàssic, un joc de gestió de documents en línia, vista prèvia d'arxius, editar, carregar, descarregar, descomprimir la reproducció de música en línia. Li permet assolir el desenvolupament web directament al navegador, el codi font d'arxius de vista prèvia, i desplega el propietari del lloc i l'operació local tan fàcil, ràpida i segura experiència.</p>
<p><b>- disseny -</b></p>
<p>tradició clàssica, la recerca de la innovació, per proporcionar als usuaris convenient, segur i fàcil d'usar sistema de gestió del núvol en línia.</p>
<p>sempre que (quan), on (on), té la web sempre que ho desitgi (vol) és la seva eina de gestió (4W política).</p>
<p><b>-</b></p>
<p>Actualment sistema de gestió KODExplorer situada principalment en l'allotjament del núvol personal, petita - orientada als usuaris la gestió del núvol empresarial de recursos, gestió de discos de xarxa, gestió de llocs petits i mitjans. Web Developer i Màster (veterans): editor en línia, còpia de seguretat comprimida, desplegament, operació clàssica interfície de Windows, fàcil de començar i desfer-se de la SSH amfitrió, comanda ftp operacions de trepat complexes.</p>
<p>núvol personal privada, (novell): Gestió de recursos de disc de xarxa, el mateix funcionament de la interfície clàssica de Windows, es pot posar la unitat d'exploració de xarxa de música, arxius de pantalla, la càrrega i descàrrega ràpida i fàcil.</p>
</div>
<div class="box">
<div class="title"><span>característiques</span></div>
<p>gestió integral de documents, potent editor d'arxius en línia</p>
<p>allà on estigui, pot administrar els seus arxius, i d'entreteniment en línia, l'escriptura de codi en línia! Així com adequats per a ús com el sistema operatiu.</p>
<p>extensa experiència del trasplantament local d'operació de la dreta, arrossegament, caixa de selecció, accessos directes, cerca d'arxius (contingut de recerca) ......</p>
<p>quadre de selecció, moviment d'arrossegament, arrossegar i deixar anar la càrrega, editor en línia, reproductor de vídeo, descomprimir. Plena garantia d'execució ajax i l'experiència!</p>
<p>cada funció perfecta connexió directa, en forma de diàleg, les funcions de gestió multi-tasca</p>
<p>Editor suporta multi-document, el suport ZendCoding html, CSS, JS major eficiència de codificació!</p>
<p>suport xinès perfecte, il·legible resoldre diverses situacions;</p>
</div>
<div class="box">
<div class="title"><span>de codi obert adopció de tecnologia</span></div>
<p><b>1.Jquery:</b>jpuery (connector: Hotkeys.ztree.contentmenu) Js marc de desenvolupament del corrent principal. El funcionament de l'operació Dom, llista de materials, operació CSS, Ajax i el paquet</p>
<p><b>2.ArtDialog:</b>un disseny bonic, fort compatibilitat del navegador reproductor de diàleg. Així emergent mànec, esdeveniments i transmissió de dades per obtenir una millor gestió unificada</p>
<p><b>3.Ztree:</b>control de llista d'arbre, l'escalabilitat és molt giny de forta manipulació de dades d'arbre</p>
<p><b>4.codemirror:</b>un editor de codi js connectors, és compatible amb una varietat de llenguatges de programació per a posar en relleu</p>
<p><b>5.zendcoding:</b>uns codis html suport d'escriptura ràpida plug-ins. Simplifica la definició de codi està escrit. simple recopilació</p>
<p><b>6.less:</b>un model de desenvolupament css funcional eficient de millorar l'extrem frontal fulls d'estil CSS reutilització . simple recopilació</p>
<p><b>7.SWFUpload:</b>arxiu flash càrrega</p>
<p><b>8 .CMP4:</b>un molt bon flash player connector arxius multimèdia, suport per a streaming mitjana, molt popular eina de reproducció de vídeo de música. El suport a la pell, la configuració altament configurables. Llista dinàmics en XML carregat. mms mitjans de transmissió, llicència de codi obert compatible amb la reproducció de mitjans rstp</p>
</div>

@ -0,0 +1,72 @@
<div class="intro-left">
<div class="tips blue">
<h1> <span>funcionalitat rica</span> </h1>
<p> Codi sol·licita automàticament </p>
<p> Multi-tema: Trii la seva estil de programació preferida </p>
<p> Font personalitzat: per al seu ús en l&#39;escena </p>
<p> cursor d&#39;edició de múltiples, edició de blocs experiència en programació en línia comparable al sublim </p>
<p> Bloc de plegat, s&#39;expandeixi; embolicar </p>
<p> Suport per a múltiples finestres, arrossegueu la seqüència de commutació; </p>
<p> El manteniment de múltiples documents, buscar i reemplaçar; Història; </p>
<p> Acte-complet [], {}, (), &#39;&#39; &#39;&#39; </p>
<p> Vista prèvia en línia en temps real que li permet caure en l&#39;amor amb la programació en línia! </p>
<p> zendcodeing suport, escriure codi vuitanta </p>
<p> Més característiques tot esperant el seu descobriment ...... </p>
</div>
<div class="tips orange">
<h1> <span>150 tipus de codi de relleu</span> </h1>
<p> Consell: HTML, JavaScript, CSS, almenys, Sass, SCSS </p>
<p> desenvolupament web: PHP, Perl, Python, Ruby, Elang, vaja ... </p>
<p> llenguatges tradicionals: Java, C, C ++, C #, ACTIONSCRIPT, VBScript ... </p>
<p> Altres: reducció del preu, closca, sql, lua, xml, YAML ... </p>
</div>
</div>
<div class="intro-right">
<div class="tips green">
<h1> <span>acció Drecera</span> </h1>
<pre> dreceres d&#39;ús comú:
ctrl + s per estalviar
Ctrl + A Selecciona-ho tot Ctrl + X Tallar
Ctrl + C Ctrl + v copiar i enganxar
Control + Z Desfer Desfer anti Ctrl + I
Ctrl + F per trobar el reemplaçament ctrl + f + f
Win + alt + 0 Reduir tot Win + Alt + Shift + 0 Ampliar Tot
esc [Recerca Sortir cancel·la automàticament li demana ...]
Ctrl-Maj-s Vista prèvia
Ctrl-Maj-I mostren i tancar la funció
</pre>
<pre> Trieu:
Ratolí carpa - arrossegament
shift + Inici / Fi / dalt / esquerra / baix / dreta
shift + Re Pàg / Av Pàg voltejar cap amunt i cap avall per seleccionar
Ctrl + Maj + inici / final de l&#39;actual del cursor fins al principi i la fi
alt + del ratolí per arrossegar la selecció de blocs
ctrl + alt + g lots seleccioneu i introduïu l&#39;actual editor de multi-tab
</pre>
<pre> cursor:
Inici / Fi / dalt / esquerra / baix / dreta
casa ctrl + / final moure el cursor al document cap / cua
Control + P Anar a l&#39;etiqueta a joc
PAGEUP / Av Pàg cursor amunt i avall
alt + fletxa esquerra / dreta per passar a la part superior de la línia de
shift + cursor esquerra / dreta fins al final de la línia i
Ctrl + L per saltar a una fila específica
ctrl + alt + amunt / avall (a baix) augmentar el cursor
</pre>
<pre> Edita:
ctrl + / Comentari i ctrl + alt + elimini el comentari d&#39;un justificat
l&#39;alineació de canvi pestanya taula + taula d&#39;avanç global
eliminar eliminar eliminar tota la línia de ctrl + d
Ctrl + Suprimir per suprimir la fila a la paraula correcta
ctrl / shift + tecla de retrocés per esborrar la paraula de l&#39;esquerra
alt + shift + amunt / avall i s&#39;afegeixen a la línia de còpia d&#39;avió (continuació)
Alt + Supr per esborrar el contingut de la dreta del cursor
alt + amunt / avall a la línia actual i la línia (al costat de canvi de línia)
SHIFT + D + ctrl files copien i s&#39;afegeixen a la següent
Ctrl + Suprimir per suprimir la dreta de la paraula
+ Maj + ctrl o convertits a minúscules
Control + U text seleccionat a majúscules
</pre>
</div>
</div>

@ -0,0 +1,36 @@
<div class="box">
<div class="title"> <span>gestió d&#39;arxius</span> </div>
<p><i class="icon-tags"></i> Selecció d&#39;arxius: la ràdio, la carpa del ratolí ,, ctrl escollida a l&#39;atzar, el teclat cap amunt i cap avall, la llar, la selecció final de les eleccions canviar. </p>
<p><i class="icon-folder-open"></i> operació d&#39;arxiu: Després de seleccionar un arxiu, pot copiar, tallar, esborrar, veure les propietats de compressió, canviar el nom, presentació preliminar oberta i altres operacions ...... </p>
<p><i class="icon-cloud-upload"></i> Càrrega d&#39;arxius: Pujar diversos arxius per lots; html5 càrrega d&#39;arrossegament (arrossegament per pujar a la perfecció finestra, arrossegar i deixar anar el suport a les carpetes) </p>
<p><i class="icon-cogs"></i> Funció: de dreta-arxiu, carpeta, feu, més just després de l&#39;operació d&#39;elecció, escriptori, dreta, dreta la vista de directori, accessos directes del menú enquadernats a la dreta <br/>
(Selecciona-ho tot - Còpia - Cut - Enganxar - Eliminar - Canviar el nom, ......) </p>
<p><i class="icon-sitemap"></i> Explorador d&#39;arxius: la manera de llista, la manera d&#39;icona, feu doble clic a sub-carpetes, l&#39;operació barra d&#39;adreces, obrir un registre contrària registre de carpetes (cap endavant i cap enrere) </p>
<p><i class="icon-move"></i> Suport d&#39;arrossegar i deixar anar: Comprovar arrossegament, tall per aconseguir la funció carpeta especificada </p>
<p><i class="icon-reply"></i> Tecles d&#39;accés directe: eliminar eliminar, Ctrl + A Selecciona-ho tot, Ctrl + C per copiar, + X Tallar, cerca d&#39;arxius (contingut de recerca) ctrl </p>
</div>
<div class="box">
<div class="title"> <span>Vista prèvia d&#39;arxius</span> </div>
<p><i class="icon-edit"></i> Previsualització d&#39;arxius: veure el contingut d&#39;un arxiu de text d&#39;edició i l&#39;estalvi; html, previsualització d&#39;arxius SWF, </p>
<p><i class="icon-picture"></i> Imatge Preview: generació automàtica d&#39;imatges en miniatura, presentació de diapositives d&#39;imatges; </p>
<p><i class="icon-music"></i> La reproducció d&#39;àudio: reproduir música en línia i els arxius de vídeo, el suport MP3, WMA, mitjans, AAC, WAV, MP4, </p>
<p><i class="icon-play"></i> Vídeo: reproducció de vídeo en línia, amb el suport formats: FLV, F4V, 3gp </p>
<p><i class="icon-play"></i> Oficina: Vista prèvia en línia, amb el suport formats: doc, docx, ppt, pptx, xls, xlsx </p>
</div>
<div class="box">
<div class="title"> <span>Els accessos directes</span> </div>
<p><i class="icon-tags"></i> introduir obert </p>
<p><i class="icon-tags"></i> Ctrl + A Selecciona-ho tot </p>
<p><i class="icon-tags"></i> Ctrl + C per copiar el seleccionat </p>
<p><i class="icon-tags"></i> Control + V per enganxar </p>
<p><i class="icon-tags"></i> Ctrl + X Tallar </p>
<p><i class="icon-tags"></i> Ctrl + F per buscar el directori actual </p>
<p><i class="icon-tags"></i> alt + n nou arxiu </p>
<p><i class="icon-tags"></i> alt + m Nova carpeta </p>
<p><i class="icon-tags"></i> Eliminar Esborrar seleccionat </p>
<p><i class="icon-tags"></i> tornar retrocés </p>
<p><i class="icon-tags"></i> Control + tecla de retrocés cap endavant </p>
<p><i class="icon-tags"></i> F2 Canviar nom seleccionat (carpeta) </p>
<p><i class="icon-tags"></i> Inici / Fi / dalt / baix / esquerra / dreta per seleccionar el fitxer </p>
<p><i class="icon-tags"></i> Comproveu amb qualsevol tecla per pressionar la primera lletra dels arxius i carpetes de caràcters seleccionada cicle automàtic </p>
</div>

@ -0,0 +1,804 @@
<?php
return array(
"path_api_select_file" => "Si us plau, seleccioneu el fitxer ...",
"path_api_select_folder" => "Si us plau, seleccioneu una carpeta ...",
"path_api_select_image" => "Seleccioneu una imatge ...",
"share_can_upload" => "permetre càrregues",
"move_error" => "no es van poder moure",
"setting_basic" => "configuració bàsica",
"setting_user_sound_open" => "Open Sound",
"setting_user_animate_open" => "obrir Animació",
"recycle_open_if" => "Obriu la Paperera de reciclatge",
"recycle_open" => "obert",
"setting_user_recycle_desc" => "Després de la supressió, se suprimirà l'eliminació física directament",
"setting_user_animate_desc" => "Finestra oberta i altra animació",
"setting_user_sound_desc" => "So de l'operació",
"setting_user_imageThumb" => "Miniatures de la imatge",
"setting_user_imageThumb_desc" => "Millor experiència de navegació després de l'obertura",
"setting_user_fileSelect" => "Obriu la comprovació de la icona de fitxer",
"setting_user_fileSelect_desc" => "Feu clic a la icona de la icona d'arxiu, feu clic amb el botó secundari a l'entrada de menú contextual",
"qrcode" => "URL del codi QR",
"theme_mac" => "blanc minimalista Mac",
"theme_win7" => "Windows 7",
"theme_win10" => "Windows 10",
"theme_metro" => "Blau del Metro Classic",
"theme_metro_green" => "Metro llum verda",
"theme_metro_purple" => "Metro elegant porpra",
"theme_metro_pink" => "metre Rose",
"theme_metro_orange" => "taronja brillant Metro",
"theme_alpha_image" => "Brillant - vol",
"theme_alpha_image_sun" => "Brillant - posta de sol",
"theme_alpha_image_sky" => "Symphony - Blue Sky",
"theme_diy" => "<b>personalitzada</b>",
"theme_diy_title" => "De la configuració del tema",
"theme_diy_background" => "fons",
"theme_diy_image" => "imatge",
"theme_diy_color_blur" => "degradat de color",
"theme_diy_image_blur" => "les preses borroses",
"theme_diy_image_url" => "direcció fotos",
"theme_diy_color_start" => "color de partida",
"theme_diy_color_end" => "color final",
"theme_diy_color_radius" => "angle de gradient",
"system_role_admin_set" => "Els administradors tenen tots els drets, sense establir!",
"login_error_user_not_use" => "L'usuari ha estat desactivat! Si us plau, poseu-vos en contacte amb l'administrador",
"login_error_kod_version" => "conflicte de versions",
"login_error_role" => "grup de permisos de vista no existeix, si us plau, poseu-vos en contacte amb l'administrador",
"no_permission_group" => "No està en aquest grup!",
"no_permission_write" => "El directori no té permís d'escriptura",
"user" => "usuari",
"save_as" => "guardar com",
"check_update" => "actualització",
"keyboard_type" => "La manera de teclat",
"font_family" => "fonts",
"code_mode" => "El ressaltat de sintaxi",
"path_can_not_share" => "Només admet compartir els seus propis documents!",
"path_can_not_action" => "Aquest directori no és compatible amb aquesta operació!",
"wap_page_pc" => "versió PC",
"wap_page_phone" => "mòbil",
"image_size" => "dimensions de la imatge",
"no_permission_action" => "Vostè no té aquest permís, si us plau, poseu-vos en contacte amb l'administrador!",
"path_is_root_tips" => "S'ha arribat al directori arrel!",
"kod_group" => "organització",
"my_kod_group" => "Estic al departament",
"space_tips_default" => "(GB) 0 sense límit",
"space_tips_full" => "sense limitar",
"space_size" => "espai",
"space_size_use" => "L'ús d'espai",
"space_is_full" => "No hi ha prou espai disponible, contacteu amb l&#39;administrador.",
"system_open_true_path" => "Èxit obert al gestor de fitxers!",
"group_role_error" => "error de permisos de funció (no hi ha configuració de permisos)",
"group_role_error_admin" => "permisos insuficients",
"markdown_content" => "Taula de Continguts",
"system_group" => "Usuaris i departaments",
"system_group_edit" => "Direcció del departament",
"system_group_role" => "identitat de rol",
"system_group_create" => "Nou departament",
"system_group_name" => "Nom del departament",
"system_group_father" => "Departament superior",
"system_group_add" => "Afegeix un subdistrito",
"system_group_remove" => "Elimina el departament",
"system_group_remove_tips" => "Esteu segur d'eliminar el departament?<br/>Després de la supressió de la part de l'usuari s'eliminarà, el subsector es desplaçarà al sector de l'arrel",
"system_group_select" => "Tria un departament",
"system_group_select_result" => "Els membres pertanyen als següents sectors",
"system_role_admin_tips" => "Comentaris: els administradors del sistema no estan autoritzats a controlar",
"system_member_action" => "Gestió d'usuaris",
"system_member_add" => "nou usuari",
"system_member_role" => "tasques dels permisos",
"system_member_role_select" => "seleccionar",
"system_member_password_tips" => "No ompli sense modificar",
"system_set_home_path" => "catàleg personalitzat",
"system_set_home_path_tips" => "El directori per defecte està buida",
"system_member_group" => "On el departament",
"system_member_group_edit" => "Departament editorial",
"system_member_remove" => "eliminar usuari",
"system_member_remove_tips" => "Confirma la supressió d'usuaris?<br/>després de treure el directori de l'usuari s'esborren completament",
"system_member_set_role" => "Per confirmar el canvi dels permisos de grups d'usuaris seleccionats?",
"system_member_remove_group" => "Determinar l'usuari seleccionat serà eliminat d'aquest grup?",
"system_member_import" => "afegir a granel",
"system_member_import_desc" => "Un usuari per línia,<br/>ja existeixen són ignorats en silenci",
"system_member_use" => "permetre",
"system_member_unuse" => "desactivar",
"system_member_space" => "Estableix la mida de l&#39;espai d&#39;usuari ",
"system_member_space_tips" => " Estableix la mida de l&#39;espai d&#39;usuari ",
"system_member_space_number" => " Ha de ser un número!",
"system_member_group_config" => "Departament de muntatge per lots",
"system_member_group_remove" => "S'ha eliminat del departament",
"system_member_group_insert" => "Afegeix al departament",
"system_member_group_reset" => "Reinicia el departament",
"system_member_group_error" => "Error del departament",
"system_group_action" => "Direcció del departament",
"system_role_add" => "Afegir identitat de rol",
"system_role_read" => "només lectura",
"system_role_write" => "Podeu llegir i escriure",
"system_setting_root_path" => "accés root",
"system_setting_root_path_desc" => "Només un administrador del sistema pot accedir a tots els directoris, altres grups de drets dels usuaris només poden veure el seu propi directori d'usuari. Si voleu activar o desactivar l'accés d'administrador<br/>a altres directoris, pot modificar el php open_basedir paràmetres anti-cross-site,<a href=\"https://www.google.com.hk/search?&q=php+open_basedir\" target=\"_blank\">com configurar</a>",
"system_group_role_title" => "Direcció del paper de les autoritats departamentals",
"system_group_role_remove" => "Accepta per eliminar el paper del departament",
"system_group_role_style" => "estil",
"system_group_role_display" => "si",
"system_group_role_display_desc" => "Estableixi si voleu o no mostrar els drets d'usuari del departament",
"role_type_name_read" => "llegir",
"role_type_name_read:list" => "Llista de fitxers",
"role_type_name_read:info" => "Arxiu (carpeta) Propietat Vista, recerca de carpetes",
"role_type_name_read:copy" => "Còpia d'arxius",
"role_type_name_read:preview" => "vista prèvia d'arxius (imatges, documents, àudio i vídeo)",
"role_type_name_read:download" => "Arxiu (carpeta) Descarregar",
"role_type_name_write" => "escriure",
"role_type_name_write:add" => "Crear un arxiu (carpeta), extreure el fitxer comprimit",
"role_type_name_write:edit" => "Deseu el fitxer per editar",
"role_type_name_write:change" => "Canviar el nom, ajustar l'estructura de directoris",
"role_type_name_write:upload" => "Arxiu (carpeta) de càrrega, descàrrega remota",
"role_type_name_write:remove" => "Arxiu (carpeta) eliminar, tallar",
"group_guest" => "visitants",
"group_guest_desc" => "No sou membre del departament,<br/>només pot accedir al [departament de directoris compartits] el següent contingut, permisos de només lectura.",
"group_role_lebel_desc" => "Sou membre d'aquest departament,<br/>Tots els documents del departament Tots els drets reservats per l'administrador",
"button_save_and_add" => "Desa i continua afegint",
"path_cannot_search" => "El directori no és compatible amb la recerca!",
"not_support" => "No és compatible!",
"group_not_exist" => "Grup usuari no existeix!",
"upload_clear_all" => "esborrar tots",
"upload_clear" => "esborrar",
"upload_setting" => "establir",
"upload_tips" => "Utilitza càrrega llesca, ja no està subjecta a límit de php.ini; recomanada d'arrossegar la carpeta de crom i l'experiència de pujar gota",
"upload_exist" => "Arxiu del mateix nom",
"upload_exist_rename" => "rebatejar",
"upload_exist_replace" => "coberta",
"upload_exist_skip" => "ometre",
"upload_add_more" => "afegir a granel",
"more" => "més",
"system_setting" => "Configuració del sistema",
"openProject" => "Obriu l'editor de projectes",
"url_download" => "descarregar",
"url_link" => "URL",
"app_type_link" => "Els accessos directes",
"createLink" => "crear accés directe",
"createLinkHome" => "Publicada l'accés directe de l'escriptori",
"createProject" => "Afegint al projecte editor",
"only_read" => "només lectura",
"only_read_desc" => "El directori no té permís d'escriptura<br/>Podeu establir permisos per aquest directori al servidor",
"not_read" => "il·legible",
"explorerNew" => "kod enllaç",
"zip_download_ready" => "Després de la compressió es descarrega automàticament, si us plau esperi ...",
"set_background" => "Establir com a Fons d'Escriptori",
"share" => "Comparteix",
"my_share" => "La meva participació",
"group_share" => "Compartició externa de grup",
"share_edit" => "Edita compartir",
"share_remove" => "Cancel·lació d'ús compartit",
"share_remove_tips" => "Estàs segur que vols cancel·lar la compartició? La connexió pública quedarà invalidada.",
"share_path" => "Comparteix el camí",
"share_title" => "Compartir recursos",
"share_name" => "Compartiu el títol",
"share_time" => "expiració",
"share_time_desc" => "Null no s'estableix",
"share_password" => "extracte de la contrasenya",
"share_password_desc" => "contrasenya buida, no s'ha establert",
"share_cancle" => "unsharing",
"share_create" => "Crear un enllaç públic",
"share_url" => "direcció compartida",
"share_not_download" => "descarregar prohibició",
"share_not_download_tips" => "Partícip prohibir descàrrega!",
"share_code_read" => "lector de codis",
"share_save" => "Desa la configuració",
"share_error_param" => "Error de paràmetre!",
"share_error_user" => "Usuari Informació d'error!",
"share_error_sid" => "Compartir no existeix!",
"share_error_time" => "Vostè ve massa tard, la proporció ha expirat!",
"share_error_path" => "arxiu compartit no existeix, s'elimina o es retira!",
"share_error_password" => "contrasenya incorrecta!",
"share_error_show_tips" => "Aquest tipus no és compatible amb vista prèvia de fitxers!",
"share_view_num" => "vistes:",
"share_download_num" => "descàrregues:",
"share_open_page" => "Obriu la pàgina compartida",
"open_the_path" => "Entra al directori",
"recycle_clear" => "Buidar la paperera",
"recycle_clear_success" => "l'èxit d'escombraries buit!",
"recycle_clear_info" => "Esteu segur que voleu buidar completament les escombraries?",
"fav_remove" => "Cancel·lar la col·lecció",
"remove_item" => "articles",
"uploading" => "pujant",
"upload_tips_more" => "Hi ha massa arxius, la recomanació de la càrrega comprimit, després descomprimir en línia!",
"uploading_move" => "En la transferència de fusió ...",
"show_file" => "Nova pàgina de vista prèvia",
"unknow_file_title" => "Obrir l'arxiu Tip!",
"unknow_file_tips" => "No va donar suport l'aplicació d'aquest arxiu, es pot:",
"unknow_file_try" => "intentar",
"unknow_file_download" => "Descarregar l'arxiu",
"unknow_plugin_search" => "aplicacions relacionades amb la recerca instal·lats",
"config_save_error_auth" => "No s'ha pogut desar la configuració, l'administrador va prohibir aquest privilegi!",
"config_save_error_file" => "Error, l'arxiu no es pot escriure!",
"beautify_code" => "codi formatador",
"convert_case" => "cas de conversió",
"convert_upper_case" => "Converteix a majúscules",
"convert_lower_case" => "Convertits en minúscules",
"editor_insert_time" => "Hora actual ",
"editor_md5" => " Encriptació de Md5 ",
"editor_qrcode" => " Codi bidimensional de cadena ",
"editor_regx" => " Prova d&#39;expressió regular ",
"editor_chinese" => " Conversió simplificada ",
"editor_chinese_simple" => " Convertiu-vos a xinès simplificat ",
"editor_chinese_traditional" => " Converteix als xinesos tradicionals ",
"editor_base64" => "Còdec Base64 ",
"editor_base64_encode" => " Codificació Base64 ",
"editor_base64_decode" => " Descodificació Base64 ",
"editor_url" => " Còdec d&#39;URL ",
"editor_url_encode" => " Codificació d&#39;URL ",
"editor_url_decode" => " Descodificació d&#39;URL ",
"editor_unicode" => " Còdec Unicode ",
"editor_unicode_encode" => " Codificació Unicode ",
"editor_unicode_decode" => " Descodificació unicode",
"editor_tools_select_tips" => " Seleccioneu el contingut que voleu convertir.",
"editor_calc" => "Calculadora gratuïta",
"shortcut" => "Els accessos directes",
"use_free" => "Seguir utilitzant la versió gratuïta",
"learn_more" => "més informació",
"replace" => "reemplaçar",
"selectAll" => "seleccionar",
"reload" => "recarregar",
"about" => "a",
"complete_current" => "Finalització automàtica del corrent",
"view" => "vista",
"tools" => "eina",
"help" => "ajudar",
"not_exists" => "no hi ha",
"group_role_fileDownload" => "descàrregues",
"group_role_share" => "quota",
"users_share" => "compartir",
"system_setting_save" => "Configuració de seguretat",
"system_setting_menu" => "menú de gestió",
"system_name" => "Nom del programa",
"system_name_desc" => "logotip del programa del títol",
"system_desc" => "Descripció del programa",
"path_hidden" => "exclusions de directori",
"version_not_support" => "La seva versió no suporta això, si us plau aneu a la pàgina web oficial per comprar la versió avançada!",
"version_not_support_number" => "A mesura que el nombre de restricció no s'admet aquesta operació, si us plau, comprar la versió avançada de la pàgina web oficial!",
"path_hidden_desc" => "Directoris i arxius per defecte no es mostren, separats per comes",
"new_user_folder" => "El nou usuari és creat per directori predeterminat",
"new_user_folder_desc" => "Separats per comes",
"new_user_app" => "El nou usuari es crea mitjançant l'aplicació per defecte",
"new_user_app_desc" => "Aplicacions Application Center, una pluralitat d'separats per comes",
"auto_login" => "Els visitants d'inici de sessió automàtic",
"auto_login_desc" => "L'inici de sessió d'usuari per defecte<code>guest/guest</code>usuaris, després d'obrir-lo, per assegurar-se que l'usuari existeix",
"first_in" => "Després d'entrar en el valor per defecte",
"version_price_free" => "gratis",
"version_name_1" => "VIP 1",
"version_name_2" => "VIP 2",
"version_name_3" => "VIP 3",
"version_name_4" => "VIP 4",
"version_name_5" => "VIP 5",
"version_name_6" => "VIP 6",
"version_vip_free" => "Free",
"version_vip_1" => "VIP 1",
"version_vip_2" => "VIP 2",
"version_vip_3" => "VIP 3",
"version_vip_4" => "VIP 4",
"version_vip_5" => "VIP 5",
"version_vip_6" => "VIP 6",
"path_can_not_write_data" => "Directori no es pot escriure, establir el directori i tots els subdirectoris per intentar-ho de nou després de la lectura-escriptura!",
"menu_name" => "nom del menú",
"menu_hidden" => "amagar",
"menu_show" => "visualització",
"menu_move_down" => "baix",
"menu_move_up" => "fins",
"menu_move_del" => "esborrar",
"menu_open_window" => "Obrir una nova finestra",
"menu_sub_menu" => "Submenú",
"url_path" => "l'adreça URL",
"url_path_desc" => "l'adreça URL o el codi js",
"no_permission_read" => "Vostè no té permís per llegir!",
"no_permission_download" => "Vostè no té permís per descarregar!",
"php_env_check" => "Operant vigilància del medi ambient:",
"php_env_error" => "Falta la biblioteca php",
"php_env_error_ignore" => "Ignorar i introdueixi",
"php_env_error_version" => "versió de PHP no pot ser inferior a 5.0",
"php_env_error_path" => "no es pot escriure",
"php_env_error_list_dir" => "El seu servidor web obre la característica de llistar directoris per raons de seguretat, desactivar aquesta característica!<a href=\"https://www.google.com.hk/#newwindow=1&safe=strict&q=web+server+turn+off+directory+listing\" target=\"blank\">com?</a>",
"php_env_error_gd" => "php biblioteca GD ha de ser obert, en cas contrari el codi, utilitzeu la miniatura no funcionarà correctament",
"install_login" => "Podeu utilitzar el següent accés al compte",
"install_enter" => "El sistema de",
"install_user_default" => "Administrador: {0} / (per sota d&#39;establir una contrasenya) <br/> L&#39;usuari mitjà: {1} <br/> Els usuaris convidats: {2}",
"login_root_password" => "Establir la contrasenya d'administrador",
"login_root_password_repeat" => "Confirmar contrasenya de nou",
"login_root_password_equal" => "Les dues contrasenyes no coincideixen!",
"login_root_password_tips" => "Establir una contrasenya d'administrador!",
"forget_password" => "¿Ha oblidat la seva contrasenya",
"forget_password_tips" => "Heu oblidat la contrasenya de l&#39;administrador: <br/> Si us plau, ingressi servidor eliminar <b>./data/system/install.lock</b> restablir; <br/><br/> No oblidat la contrasenya d&#39;administrador: <br/> Si us plau, poseu-vos en contacte amb l&#39;administrador per restablir!",
"copyright_desc" => "Kodexplorer és un sistema de gestió de documents web altament aclamat, es pot utilitzar per a la gestió de documents interns o compartit, també es pot utilitzar al servidor de gestió del lloc, reemplaci ftp, així com el desenvolupament webIDE directament en línia. També pot programar el segon desenvolupament per integrar aquest principi en els seus sistemes existents.",
"copyright_contact" => "Contact us:kodcloud@qq.com <a>.</a> <a href=\"javascript:core.openWindow('http://bbs.kodcloud.com/');\">Feedback</a>",
"copyright_info" => "Copyright © <a href=\"https://kodcloud.com/?kodref=%s\" target=\"_blank\">kodcloud.com</a>.",
"copyright_pre" => "Powered by KodExplorer",
"kod_name" => "KodExplorer",
"kod_name_desc" => "Mango núvol • Explorador",
"kod_power_by" => " - Powered by KodExplorer",
"kod_name_copyright" => "Mango núvol • Explorador",
"kod_meta_name" => "KodExplorer",
"kod_meta_keywords" => "KodExplorer, kod, kodCloud, webos, webIDE, php filemanage, filemanage, Dao núvol, núvol de mango, els sistemes de gestió de documents, el disc de núvol empresarial, explorador ,, documentació en línia, en línia d'oficina, oficina en línia, vista prèvia de CAD en línia, edició en línia , editor en línia",
"kod_meta_description" => "KodExplorer pot ennuvolar carretera (abans de mango núvol) és un proveïdor líder de govern / núvols corporatives privades i sistema de gestió de documents en línia per als llocs web personals, les implementacions empresarials en el núvol privada, emmagatzematge en xarxa, gestió de documents en línia, oficina en línia per proporcionar segur i controlat, simple i fàcil ús, altament personalitzat productes de núvol privat. L'ús de finestres interfície d'estil, les pràctiques d'operació, sense haver de adaptar-se a començar a treballar ràpidament, suportar centenars de populars format d'arxiu de vista prèvia en línia, reproducció i favorable al medi ambient d'edició, de gran abast, és un assaig d'una vegada, ja no és inseparable de la privada ofertes de núvol.",
"kod_meta_copyright" => "kodcloud.com",
"login" => "iniciar la sessió",
"guest_login" => "visites Ferma",
"username" => "Compte d'inici de sessió",
"userNickName" => "Sobrenom de l'usuari",
"password" => "contrasenya",
"login_code" => "codis",
"need_check_code" => "codi d'autenticació d'inici de sessió oberta",
"need_check_code_desc" => "Després d&#39;iniciar sessió, heu d&#39;introduir el codi de verificació.",
"setting_csrf_protect" => "protecció CSRF obert",
"setting_csrf_protect_desc" => "Després de tipus d'obertura d'atac pot protegir eficaçment CSRF",
"login_rember_password" => "recordar contrasenya",
"setting_show_root_group" => "Llista tots els departaments",
"setting_show_root_group_desc" => "El departament d'arrel del directori arbre ja ha d'incloure tots els departaments",
"setting_show_share_user" => "Una llista de tots els usuaris",
"setting_show_share_user_desc" => "El departament d'arrel del directori arbre apareix per a tots els usuaris",
"setting_clear_user_recycle" => "Buidar la paperera de reciclatge per a tots els usuaris",
"setting_clear_cache" => "Buidar la memòria cau",
"setting_icp" => "Els drets d'autor o número de registre",
"setting_global_css" => "CSS personalitzat mundial",
"setting_global_css_desc" => "Totes les pàgines s'insereixi CSS personalitzat",
"setting_global_html" => "HTML codi estadístic",
"setting_global_html_desc" => "s'inseriran totes les pàgines en aquest codi HTML paràgraf, el codi es pot col·locar estadístiques de tercers",
"us" => "kodcloud.com",
"login_not_null" => "Nom d'usuari i la contrasenya no pot estar buida!",
"code_error" => "Els codis d'error",
"password_error" => "nom d'usuari o contrasenya són incorrectes!",
"password_not_null" => "La contrasenya no pot estar buida!",
"old_password_error" => "antiga contrasenya és incorrecta!",
"permission" => "Permís!",
"permission_edit" => "modificar permisos",
"file_info_owner" => "propietari",
"file_info_group" => "grup",
"no_permission" => "Administrador ha desactivat aquest privilegi!",
"no_permission_ext" => "Administrador prohibir aquest tipus de permisos d'arxiu",
"dialog_max" => "maximitzar",
"dialog_min" => "minimitzar",
"dialog_min_all" => "minimitzar tot",
"dialog_display_all" => "Mostra totes les finestres",
"dialog_close_all" => "Tancar tot",
"open" => "obert",
"others" => "un altre",
"open_with" => "Obert per a ...",
"close" => "a prop",
"close_all" => "Tancar tot",
"close_left" => "Tanqueu la pestanya de l'esquerra",
"close_right" => "Tanca les pestanyes de la dreta",
"close_others" => "Tanca Altres",
"loading" => "Operació ...",
"warning" => "advertència",
"getting" => "Obtenir el ...",
"sending" => "La transmissió de dades ...",
"data_error" => "Error de dades!",
"get_success" => "Obtenir l'èxit!",
"save_success" => "S'ha guardat correctament!",
"success" => "L'èxit de l'operació",
"error" => "Error en l'operació",
"error_repeat" => "L'operació fallida, el nom ja existeix!",
"word_error" => "Error ",
"word_success" => " Èxit",
"system_error" => "error del sistema",
"name" => "nom",
"type" => "tipus",
"contain" => "contenir",
"address" => "ubicació",
"size" => "mida",
"byte" => "byte",
"path" => "camí",
"action" => "operatiu",
"create_time" => "creat",
"modify_time" => "modificat",
"last_time" => "última visita",
"sort_type" => "ordenar per",
"time_type" => "Y/m/d H:i:s",
"time_type_info" => "Y/m/d H:i:s",
"public_path" => "directori públic",
"system_path_not_change" => "directori del sistema, no pot ser modificada",
"file" => "expedient",
"folder" => "carpeta",
"copy" => "còpia",
"past" => "pal",
"clone" => "Crear una còpia",
"cute" => "cisalla",
"cute_to" => "Mou a ...",
"copy_to" => "Copiar a ...",
"remove" => "esborrar",
"remove_force" => "eliminar completament",
"info" => "propietat",
"list_type" => "vista",
"list_icon" => "icona de conjunt",
"list_list" => "arranjament de la llista",
"list_list_split" => "manera de columna",
"sort_up" => "increment",
"sort_down" => "decreixent",
"order_type" => "ordenar per",
"order_desc" => "descendent",
"order_asc" => "ascendent",
"rename" => "rebatejar",
"add_to_fav" => "Afegeix als preferits",
"search_in_path" => "Cerca de carpeta",
"add_to_play" => "Afegir a la llista",
"manage_fav" => "Gestiona els preferits",
"refresh_tree" => "vista de directori d'actualització",
"manage_folder" => "administració de directoris",
"close_menu" => "Tancar menú",
"zip" => "Crea un paquet comprimit",
"unzip" => "Per extreure ...",
"unzip_folder" => "Descomprimir en una carpeta",
"unzip_this" => "Extreure en el corrent",
"unzip_to" => "Per extreure ...",
"zipview_file_big" => "L'arxiu és massa gran, i després extreure l'operació d'impressió!",
"clipboard" => "veure portapapers",
"clipboard_clear" => "Porta-retalls buida",
"full_screen" => "pantalla completa",
"folder_info_item" => "articles",
"folder_info_item_select" => "A seleccionat",
"file_load_all" => "Feu doble clic per carregar tots ......",
"tips" => "ràpid",
"ziping" => "Comprimir ...",
"unziping" => "Extraient ...",
"moving" => "operació mòbil ...",
"remove_title" => "Confirmació d'eliminació",
"remove_info" => "Confirma per eliminar l'element seleccionat?",
"remove_title_force" => "definitivament exclòs",
"remove_info_force" => "Està segur que vol eliminar aquest document?",
"name_isexists" => "Malament, el nom ja existeix!",
"install" => "instal·lar",
"width" => "ample",
"height" => "alt",
"app" => "Aplicacions de llum",
"app_store" => "Aplicacions de llum",
"app_create" => "crear aplicació",
"app_edit" => "Modificar l'aplicació",
"app_group_all" => "complet",
"app_group_game" => "joc",
"app_group_tools" => "eina",
"app_group_reader" => "llegir",
"app_group_movie" => "televisió",
"app_group_music" => "música",
"app_group_life" => "vida",
"app_group_others" => "un altre",
"app_desc" => "descripció",
"app_icon" => "icona d'aplicacions",
"app_icon_show" => "l'adreça URL o directori",
"app_group" => "Paquet de Sol·licitud",
"app_type" => "tipus",
"app_type_url" => "enllaç",
"app_type_code" => "extensió js",
"app_display" => "exterior",
"app_display_border" => "Sense fronteres (és a dir, seleccionar vores)",
"app_display_size" => "Redimensionar (vos que el paràmetre)",
"app_size" => "mida",
"app_url" => "adreça de l'enllaç",
"app_code" => "codi js",
"edit" => "editar",
"edit_can_not" => "No és un fitxer de text",
"edit_too_big" => "L'arxiu és massa gran, no pot ser superior a 40M",
"open_default" => "Obrir per defecte",
"open_ie" => "Obriu el navegador",
"refresh" => "refrescar",
"refresh_all" => "Forçar una actualització",
"newfile" => "nou arxiu",
"newfile_save_as" => "guardar en",
"newfolder" => "nova carpeta",
"newothers" => "Un altre nou",
"path_loading" => "Carregant ...",
"go" => "Caminar!",
"go_up" => "La capa superior",
"history_next" => "endavant",
"history_back" => "retir",
"address_in_edit" => "Feu clic per entrar al mode d'edició",
"double_click_rename" => "Feu doble clic al canvi de nom",
"double_click_open" => "Feu doble clic per obrir",
"path_null" => "Carpeta està buida!",
"file_size_title" => "Mida de la icona",
"file_size_small_super" => "Ultra-petita",
"file_size_small" => "icones petites",
"file_size_default" => "icones",
"file_size_big" => "icones grans",
"file_size_big_super" => "icona gran",
"upload" => "Pujar",
"upload_ready" => "A l'espera de càrrega",
"upload_success" => "puja èxit",
"upload_path_current" => "Canvieu al directori actual",
"upload_select" => "Seleccioneu arxiu",
"upload_max_size" => "El màxim permès",
"upload_size_info" => "Si voleu configurar més, si us plau modificar php.ini màxim de pujada permès. Quan se selecciona un arxiu més gran que aquesta configuració filtrarà automàticament.",
"upload_error" => "Error de pujada",
"upload_error_http" => "errors de xarxa o tallafocs",
"upload_muti" => "càrrega d'arxius múltiples",
"upload_drag" => "Arrossegar i deixar anar Càrrega",
"upload_drag_tips" => "Afluixi per pujar!",
"path_not_allow" => "Nom de fitxer no permès",
"download" => "descarregar",
"downloading" => "Carregant ...",
"download_address" => "descarregar",
"download_ready" => "es descarregarà",
"download_success" => "Descarregar l'èxit!",
"download_error" => "Error en la descàrrega!",
"download_error_create" => "Error d'escriptura!",
"download_error_exists" => "Enllaç a fitxer no!",
"upload_error_null" => "Cap arxiu!",
"upload_error_big" => "Mida del fitxer excedeix els límits de servidor",
"upload_error_move" => "No s'ha pogut moure el fitxer!",
"upload_error_exists" => "El fitxer ja existeix",
"upload_local" => "Pujar local",
"download_from_server" => "descarregar remot",
"save_path" => "Guardar Ruta",
"upload_select_muti" => "Una pluralitat de càrrega d'arxius seleccionable",
"search" => "recerca",
"searching" => "Buscant ...",
"search_result" => "resultats de la recerca",
"seach_result_too_more" => "Massa resultats de cerca, es recomana per a un directori o paraules",
"search_null" => "No hi ha resultats!",
"search_uplow" => "entre majúscules i minúscules",
"search_content" => "continguts recerca d'arxius",
"search_info" => "Si us plau introdueixi un terme de cerca i rutes de recerca!",
"search_ext_tips" => "Per | separat, per exemple php | JS | css<br/>No escriviu en la recerca d'arxius de text predeterminat",
"file_type" => "Tipus d'arxiu",
"goto" => "saltar a",
"server_dwonload_desc" => "La tasca va ser afegit a la llista de descàrregues",
"parent_permission" => "permisos de directori de pares",
"root_path" => "Els meus documents",
"lib" => "magatzem",
"fav" => "marcador",
"desktop" => "escriptori",
"browser" => "navegador",
"my_computer" => "meu PC",
"recycle" => "escombraries",
"my_document" => "Els meus documents",
"my_picture" => "fotos",
"my_music" => "la meva música",
"my_movie" => "Els meus vídeos",
"my_download" => "Els meus descàrregues",
"ui_desktop" => "escriptori",
"ui_explorer" => "gestió d'arxius",
"ui_editor" => "editor",
"adminer" => "adminer",
"ui_project_home" => "Inici del projecte",
"ui_login" => "iniciar la sessió",
"ui_logout" => "deixar",
"setting" => "Configuració del sistema",
"setting_title" => "opcions",
"setting_user" => "Centre de personal",
"setting_password" => "canviar contrasenya",
"setting_password_old" => "Contrsñ",
"setting_password_new" => "S'ha revisat per",
"setting_language" => "Configuració d'idioma",
"setting_member" => "Gestió d'usuaris",
"setting_group" => "administració d'usuaris",
"setting_group_add" => "Afegir grup d'usuaris",
"setting_group_edit" => "Grups d'edició d'usuari",
"setting_theme" => "Ajustaments de tema",
"setting_wall" => "Configuració del paper pintat",
"setting_wall_desktop" => "Fons de pantalla d'escriptori",
"setting_wall_desktop_list" => "Gestió de fons d'escriptori",
"setting_wall_login_list" => "Iniciar sessió de gestió de fons de pantalla",
"setting_wall_login_tips" => "Consell: quan hi ha més d'una sola peça, el fons de la interfície d'inici de sessió girarà a l'atzar",
"setting_wall_diy" => "fons de pantalla personalitzat:",
"setting_wall_info" => "Imatge d'adreces URL, imatges locals pot ser adequat per obtenir el navegador per ampliar imatge",
"setting_fav" => "Administrador de marcadors",
"setting_help" => "Ús de l'Ajuda",
"setting_about" => "Sobre les obres",
"setting_success" => "La modificació ha entrat en vigor!",
"can_not_repeat" => "No es permet repetir",
"absolute_path" => "adreça absoluta",
"group" => "Grups d'usuaris",
"data_not_full" => "Les dades enviades incomplets!",
"default_user_can_not_do" => "L'usuari per defecte no pot funcionar",
"default_group_can_not_do" => "grups d'usuaris per defecte no poden operar",
"username_can_not_null" => "Nom d'usuari no pot estar buida!",
"groupname_can_not_null" => "Nom del grup d'usuaris no pot estar buida!",
"groupdesc_can_not_null" => "Grup d'Usuaris descripció no pot estar buida!",
"group_move_user_error" => "usuaris de grups d'usuaris van fallar mouen",
"group_already_remove" => "El grup d'usuaris ha estat esborrada",
"group_not_exists" => "Aquest grup d'usuari no existeix",
"member_add" => "afegir usuari",
"password_null_not_update" => "Ells van dir que no canvien la contrasenya està buit",
"if_save_file_tips" => "Alguns fitxers no es desen. Esteu segur de tancar la finestra?",
"if_save_file" => "L'arxiu no s'ha guardat, que voleu desar?",
"if_remove" => "confirmar eliminació",
"member_remove_tips" => "Després de treure s'esborrarà directori d'usuaris",
"group_remove_tips" => "Després de treure el grup d'usuaris dels usuaris no poden iniciar sessió<br/>(necessitat de re-establir grups d'usuaris)",
"group_name" => "Nom del grup d'usuaris",
"group_name_tips" => "Recomanació nom d'Anglès, no es pot repetir",
"group_desc" => "Nom per mostrar",
"group_desc_tips" => "Nom del grup Descripció",
"group_role_ext" => "restriccions d'extensió",
"group_role_ext_tips" => "Amb múltiples | separada",
"group_role_file" => "gestió d'arxius",
"group_role_upload" => "permetre càrregues",
"group_role_user" => "Les dades de l'usuari",
"group_role_group" => "administració d'usuaris",
"group_role_member" => "Gestió d'usuaris",
"group_role_mkfile" => "nou arxiu",
"group_role_mkdir" => "nova carpeta",
"group_role_pathrname" => "rebatejar",
"group_role_pathdelete" => "eliminació d'arxius",
"group_role_pathinfo" => "Propietats d'arxiu",
"group_role_pathmove" => "Moure (copiar / tallar / enganxar / operació d 'arrossegament)",
"group_role_zip" => "compressió",
"group_role_unzip" => "obrir la cremallera",
"group_role_search" => "recerca",
"group_role_filesave" => "Deseu el fitxer per editar",
"group_role_can_upload" => "Càrrega i descàrrega",
"group_role_download" => "descarregar remot",
"group_role_passowrd" => "canviar contrasenya",
"group_role_config" => "Les dades de configuració",
"group_role_fav" => "operacions de marcador (afegir / editar / esborrar)",
"action_list" => "veure llista",
"action_add" => "afegir",
"action_edit" => "editar",
"action_del" => "esborrar",
"group_role_ext_warning" => "Pujada no permetre que aquest tipus d'arxius,<br/>Canvia el nom (renombrado amb l'extensió especificada),<br/>editar Desar, descàrrega remota, extracte",
"group_tips" => "<li> 1. El nom del grup d&#39;usuaris no es pot duplicar. Després de modificar el nom del grup, pertany a l&#39;usuari reorganitzat i s&#39;associa automàticament. </li><li> 2. Les extensions limiten la relació entre la seguretat del sistema, si us plau, tingueu cura <i>(si creeu un nou php al directori web, significa que canviar els permisos del programa a aquest usuari és pràcticament impossible)</i> </li><li> 3. La gestió de la llar, la gestió del grup de drets, els drets de visualització i l&#39;addició, eliminació i supressió de drets estan vinculats, els programes s&#39;associen automàticament </li><li> 4. Després que el grup de permisos estigui configurat per afegir el grup de permisos, el permís posterior no s&#39;hereta <i>(aquest permís equival al màxim permís).</i> </li>",
"not_null" => "Els camps obligatoris no pot estar buida!",
"picture_can_not_null" => "Les fotos no pot estar buida!",
"rname_success" => "Canviar el nom d'èxit!",
"please_inpute_search_words" => "Si us plau, introdueixi una cadena per buscar",
"remove_success" => "Eliminat correctament!",
"remove_fali" => "Eliminar fallat!",
"clipboard_null" => "Porta-retalls està buit!",
"create_success" => "Nou èxit!",
"create_error" => "Nova falla, comproveu els permisos de directori!",
"copy_success" => "[Copiar] - que cobreix l'èxit porta-retalls!",
"cute_success" => "[Cort] - que cobreix l'èxit porta-retalls!",
"clipboard_state" => "estat porta-retalls:",
"no_permission_write_all" => "L'arxiu o directori no es pot escriure",
"no_permission_write_file" => "El fitxer no té permís d'escriptura",
"no_permission_read_all" => "L'arxiu o directori no té permís de lectura",
"copy_not_exists" => "D'origen no existeix",
"current_has_parent" => "carpeta de destí és una subcarpeta de la carpeta d'origen!",
"past_success" => "<b>operació d'enganxat es completa</b>",
"cute_past_success" => "<b>operació de tall es completa</b>(s'esborra l'arxiu d'origen, el porta-retalls buit)",
"zip_success" => "compressió completat",
"not_zip" => "no arxiu",
"zip_null" => "No arxiu o directori seleccionat",
"unzip_success" => "descomprimir completa",
"gotoline" => "Salta a la línia de",
"path_is_current" => "La ruta i la ruta actual per obrir el mateix!",
"path_exists" => "El nom ja existeix!",
"undo" => "revocació",
"redo" => "revocació contra",
"preview" => "preestrena",
"wordwrap" => "wrap",
"show_gutter" => "Mostra els números de línia",
"char_all_display" => "Mostra caràcters invisibles",
"auto_complete" => "demana automàticament",
"auto_save" => "Desa automàticament",
"function_list" => "Llista de funcions",
"code_theme" => "Estil de codificació",
"font_size" => "Mida de la font",
"confirm" => "Estàs segur que vols fer això?",
"button_ok" => "determinar",
"button_submit" => "presentar",
"button_set" => "establir",
"button_cancel" => "cancel·lat",
"button_edit" => "editar",
"button_save" => "Desar",
"button_apply" => "Sol·liciteu",
"button_save_all" => "Desar tot",
"button_not_save" => "no guardar",
"button_add" => "afegir",
"button_back_add" => "Tornar a afegir",
"button_del" => "esborrar",
"button_save_edit" => "guardar els canvis",
"button_save_submit" => "guardar Enviar",
"button_more" => "més",
"button_select_all" => "Selecciona-ho tot / Inverteix la selecció",
"charset_AUTO" => "Identificació automàtica",
"charset_UTF_8" => "Unicode",
"charset_UTF_16" => "Unicode",
"charset_CP1256" => "àrab",
"charset_ISO_8859_6" => "àrab",
"charset_ISO_8859_10" => "idiomes nòrdics",
"charset_CP1257" => "llengües bàltiques",
"charset_ISO_8859_13" => "llengües bàltiques",
"charset_ISO_8859_4" => "llengües bàltiques",
"charset_BIG5_HKSCS" => "繁体-香港",
"charset_BIG5" => "繁体-台湾",
"charset_Georgian_Academy" => "georgià",
"charset_PT154" => "kazakh",
"charset_CP949" => "coreà",
"charset_EUC_KR" => "coreà",
"charset_GB18030" => "xinès simplificat",
"charset_GBK" => "xinès simplificat",
"charset_ISO_8859_14" => "celta",
"charset_CP1133" => "Lao",
"charset_ISO_8859_16" => "romanès",
"charset_ISO_8859_3" => "Europa del Sud",
"charset_EUC_JP" => "japonès",
"charset_ISO_2022_JP" => "japonès",
"charset_SHIFT_JIS" => "japonès",
"charset_KOI8_T" => "tadjik",
"charset_ISO_8859_11" => "tailandès",
"charset_TIS_620" => "tailandès",
"charset_CP1254" => "turc",
"charset_CP1251" => "ciríl·lic",
"charset_ISO_8859_5" => "ciríl·lic",
"charset_KOI8_R" => "ciríl·lic",
"charset_KOI8_U" => "ciríl·lic",
"charset_CP1252" => "idiomes d'Europa Occidental",
"charset_ISO_8859_1" => "idiomes d'Europa Occidental",
"charset_ISO_8859_15" => "idiomes d'Europa Occidental",
"charset_Macintosh" => "idiomes d'Europa Occidental",
"charset_CP1255" => "hebreu",
"charset_ISO_8859_8" => "hebreu",
"charset_CP1253" => "grec",
"charset_ISO_8859_7" => "grec",
"charset_ARMSCII_8" => "armeni",
"charset_CP1258" => "vietnamita",
"charset_VISCII" => "vietnamita",
"charset_CP1250" => "idiomes d'Europa Central",
"charset_ISO_8859_2" => "idiomes d'Europa Central",
"charset_default_set" => "codificació d'arxius",
"charset_convert_save" => "Deseu el fitxer codificat com",
"PluginCenter" => "endoll el centre",
"PluginBuy" => "Autorització de compra",
"PluginInstalled" => "S'ha instal·lat",
"PluginUpdate" => "actualització",
"PluginListNull" => "No hi ha contingut!",
"PluginType" => "classificació",
"PluginTypeAll" => "complet",
"PluginTypeFile" => "arxius millorada",
"PluginTypeSafe" => "Eines de seguretat",
"PluginTypeTools" => "utilitat",
"PluginTypeMedia" => "multimèdia",
"PluginTypeOthers" => "un altre",
"PluginInstall" => "instal·lar el tap",
"PluginEnable" => "Activa complements",
"PluginDisable" => "desactivar",
"PluginRemove" => "Desinstal·lar el complement",
"PluginConfig" => "Configura el connector",
"PluginStatus" => "estat",
"PluginStatusEnabled" => "activat",
"PluginStatusDisabled" => "no habilitat",
"PluginStatusNotInstall" => "no instal·lat",
"PluginInstalling" => "Instal·lació ...",
"PluginHasUpdate" => "actualitzacions",
"PluginUpdateStart" => "Actualització de plug-in",
"PluginNeedConfig" => "La necessitat de permetre que la configuració inicial",
"PluginConfigNotNull" => "Els camps obligatoris no pot estar buida!",
"PluginOpen" => "obert",
"PluginAuther" => "autor",
"PluginVersion" => "edició",
"PluginDownloadNumber" => "s'instal·la",
"PluginBack" => "retorn",
"PluginReadme" => "descripció",
"PluginResetConfig" => "Restaura la configuració predeterminada",
"PluginInstallSelf" => "Instal·lació manual",
"Plugin.config.auth" => "permisos",
"Plugin.config.authDesc" => "Tots els paràmetres disponibles, o especificar els usuaris, grups d'usuaris, grups de drets poden utilitzar",
"Plugin.config.authOpen" => "Accés obert",
"Plugin.config.authOpenDesc" => "No es pot accedir a la necessitat de visitar, es pot utilitzar per trucar a la interfície externa",
"Plugin.config.authAll" => "titular",
"Plugin.config.authUser" => "usuari",
"Plugin.config.authGroup" => "Departament designat",
"Plugin.config.authRole" => "El grup de drets",
"Plugin.Config.openWith" => "estil obert",
"Plugin.Config.openWithDilog" => "diàleg intern",
"Plugin.Config.openWithWindow" => "La nova pàgina s'obre",
"Plugin.Config.fileSort" => "prioritat associació Extensió",
"Plugin.Config.fileSortDesc" => "Com més gran sigui l'extensió per obrir major prioritat",
"Plugin.Config.fileExt" => "Formats de fitxer compatibles",
"Plugin.Config.fileExtDesc" => "Extensió associada al plug-in",
"Plugin.tab.basic" => "configuració bàsica",
"Plugin.tab.auth" => "permisos",
"Plugin.tab.others" => "altres ajustaments",
"Plugin.default.aceEditor" => "editor Ace",
"Plugin.default.htmlView" => "Prèvia de pàgines web",
"Plugin.default.picasa" => "Picasa ullada del quadre",
"Plugin.default.zipView" => "Archive Preview",
"Plugin.default.jPlayer" => "El jugador jPlayer",
"Plugin.auth.viewList" => "Llista de complements",
"Plugin.auth.setting" => "Configuració del complement",
"Plugin.auth.status" => "Apagueu",
"Plugin.auth.install" => "Instal·lar / desinstal·lar",
"Explorer.UI.openWith" => "seleccioneu Obre",
"Explorer.UI.openWithText" => "Bloc de notes per obrir",
"Explorer.UI.appSetDefault" => "Establir l'oberta per defecte",
"Explorer.UI.appAwaysOpen" => "Utilitzar sempre el programa seleccionat per obrir aquest arxiu",
"Explorer.UI.selectAppDesc" => "Seleccioneu el programa que voleu obrir aquest fitxer",
"Explorer.UI.selectAppWarning" => "Si us plau seleccioni l'aplicació!",
"Explorer.UI.appTypeSupport" => "Compatible",
"Explorer.UI.appTypeAll" => "Totes les aplicacions",
"kodApp.oexe.edit" => "Edita l'aplicació de llum",
"kodApp.oexe.open" => "Obriu l'aplicació de llum"
);

@ -0,0 +1,33 @@
<div class="box">
<div class="title"><span>KODExplorer znamená Co?</span></div>
<p>KODExplorer je open source webový správa online dokumentů, editor kódu. Poskytuje druh klasických oken uživatelského rozhraní, sadu on-line správu dokumentů, souborů náhled, upravovat, nahrávat, stahovat, rozbalte on-line přehrávání hudby. Umožňuje dosáhnout vývoj webových aplikací přímo v prohlížeči, zdrojový kód souboru náhled a nasadit vlastník webu a lokální provoz jako jednoduchý, rychlý a bezpečný zážitek.</p>
<p><b>- design -</b></p>
<p>klasická tradice, snaha o inovaci, která nabízí uživatelům pohodlný, bezpečné a snadno použitelný on-line systém pro správu cloud.</p>
<p>kdykoliv (když), kde (kde), má web, kdykoliv budete chtít (chcete), je váš nástroj pro správu (4W politika).</p>
<p><b>- zaměřené na uživatele -</b></p>
<p>v současné době systém řízení KODExplorer nachází především v osobní cloud hosting, malý vedení podniku cloud zdrojů, řízení síťový disk, řízení malých a středních webů. Web Developer a Master (veteráni): online editor, komprimované zálohování, nasazení, klasický operační systém Windows rozhraní, snadné začít a zbavit se hostitelské SSH příkazu ftp složité vrtací práce.</p>
<p>osobní privátní cloud (nováček): Network Management diskové prostředky, stejná operace klasické windows rozhraní, můžete umístit síťovou jednotku hudební soubory prohlížet, obrazovky, nahrávání a stahování rychlé a snadné.</p>
</div>
<div class="box">
<div class="title"><span>Funkce</span></div>
<p>komplexní správu dokumentů, výkonný on-line editor souboru</p>
<p>ať jste kdekoliv, můžete spravovat soubory a online zábavu, on-line psaní kódu! Stejně jako vhodné pro použití jako operační systém.</p>
<p>rozsáhlé operace hned místní transplantace zkušenosti, táhnout, výběr box, zkratky, vyhledávání souborů (vyhledávání obsahu) ......</p>
<p>Volba box, drag-pohyb, drag and drop nahrávání, online editor, video přehrávač, dekompresi. Plná záruka ajax výkon a zážitek!</p>
<p>každá funkce přímé bezproblémové připojení, v dialogovém formě, řídící funkce víceúčelové</p>
<p>Editor podporuje multi-dokumentu; podpory ZendCoding html, css JS vyšší efektivitu kódování!</p>
<p>dokonalá čínská podpora, zkomolený řešení různých situací;</p>
</div>
<div class="box">
<div class="title"><span>open source přijetí technologie</span></div>
<p><b>1.Jquery:</b>jpuery (plugin: Hotkeys.ztree.contentmenu) JS tradiční rámec rozvoje. Provoz provozu Dom, BOM, provoz CSS a Ajax balíček</p>
<p><b>2.ArtDialog:</b>krásný design, silné kompatibility prohlížečů dialog widgetu. Takže pop-up rukojeť, události a přenos dat, aby si lépe jednotnou správu</p>
<p><b>3.Ztree:</b>kontrolní seznam strom, škálovatelnost je velmi silný strom údaje manipulace widgetu</p>
<p><b>4.codemirror:</b>editor kódu js pluginy, podporuje celou řadu programovacích jazyků pro zvýraznění</p>
<p><b>5.zendcoding:</b>o podporu HTML kódu rychle psát plug-inů. Zjednodušuje definice kódu je napsán. Jednoduché kompilace</p>
<p><b>6.less:</b>efektivní, funkční model rozvoje css ke zlepšení front end CSS šablona stylů znovupoužitelnost , Jednoduché kompilace</p>
<p><b>7.SWFUpload:</b>blesk upload</p>
<p><b>8 .CMP4:</b>velmi dobrý flash player Earth mediálních souborů, podporu pro streaming médií, populární nástroj pro přehrávání hudby videa. Podpora pro kůži, vysoce konfigurovatelná nastavení. Dynamický seznam xml načten. mms streamování médií, RSTP open source licence Podpora přehrávání médií</p>
</div>

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save