From 9b05905dc13411ea9be75831e86c48363a2e3e7b Mon Sep 17 00:00:00 2001 From: Yagami Date: Thu, 20 Dec 2018 09:09:13 +0800 Subject: [PATCH 001/442] * Fix notice xuanxuan and add xuanxuan lang. --- xuanxuan/module/admin/ext/view/xuanxuan.html.php | 1 + xuanxuan/module/chat/ext/lang/en/xuanxuan.php | 9 +++++---- xuanxuan/module/chat/ext/lang/zh-cn/xuanxuan.php | 1 + xuanxuan/module/common/ext/view/footer.html.hook.php | 8 ++++++-- 4 files changed, 13 insertions(+), 6 deletions(-) diff --git a/xuanxuan/module/admin/ext/view/xuanxuan.html.php b/xuanxuan/module/admin/ext/view/xuanxuan.html.php index 10b97f2ca5..aa938f2bb3 100644 --- a/xuanxuan/module/admin/ext/view/xuanxuan.html.php +++ b/xuanxuan/module/admin/ext/view/xuanxuan.html.php @@ -102,6 +102,7 @@ +
chat->info;?>
diff --git a/xuanxuan/module/chat/ext/lang/en/xuanxuan.php b/xuanxuan/module/chat/ext/lang/en/xuanxuan.php index a1b03d8240..2b4a537721 100644 --- a/xuanxuan/module/chat/ext/lang/en/xuanxuan.php +++ b/xuanxuan/module/chat/ext/lang/en/xuanxuan.php @@ -30,12 +30,13 @@ $lang->chat->statusList[0] = 'Disable'; $lang->chat->httpsOptions[1] = 'Enable'; $lang->chat->httpsOptions[0] = 'Disable'; -$lang->chat->xxdServerTip = 'XXD server address contains protocol and host and port,such as https://127.0.0.1:11443'; -$lang->chat->xxdServerEmpty = 'XXD server address is empty.'; -$lang->chat->xxdSchemeError = 'Server address should started with http:// or https://.'; -$lang->chat->xxdPortError = 'Server address should contain valid port and the default is 11443.'; +$lang->chat->xxdServerTip = 'XXD server address contains protocol and host and port,such as https://127.0.0.1:11443'; +$lang->chat->xxdServerEmpty = 'XXD server address is empty.'; +$lang->chat->xxdSchemeError = 'Server address should started with http:// or https://.'; +$lang->chat->xxdPortError = 'Server address should contain valid port and the default is 11443.'; $lang->chat->xxClientConfirm = 'Click to download new zentao client!'; $lang->chat->xxServerConfirm = 'Click to download new zentao client server!'; +$lang->chat->info = "ZenTao client is powered by Xuan, a secure and open source Instant Messenger by Nature Easy Soft. It is a self-hosted and cross-platform tool with numerous plug-ins and robust features. In Xuan, you can code your own plug-ins. Click HERE for more."; $lang->chat->xxd = new stdclass(); $lang->chat->xxd->os = 'OS'; diff --git a/xuanxuan/module/chat/ext/lang/zh-cn/xuanxuan.php b/xuanxuan/module/chat/ext/lang/zh-cn/xuanxuan.php index 31187232bb..a44f1e19e2 100644 --- a/xuanxuan/module/chat/ext/lang/zh-cn/xuanxuan.php +++ b/xuanxuan/module/chat/ext/lang/zh-cn/xuanxuan.php @@ -33,6 +33,7 @@ $lang->chat->xxdSchemeError = '服务器地址应该以http:// $lang->chat->xxdPortError = '服务器地址应该包含有效的端口号,默认为11443。'; $lang->chat->xxClientConfirm = '禅道新增客户端,与禅道深度集成,支持成员沟通,小组讨论,文件传输,任务指派,更加方便的项目管理,更加流畅的团队协作!点击确认下载客户端。'; $lang->chat->xxServerConfirm = '禅道新增客户端,与禅道深度集成,支持成员沟通,小组讨论,文件传输,任务指派,更加方便的项目管理,更加流畅的团队协作!点击确认前往后台配置客户端服务器。'; +$lang->chat->info = "禅道客户端由易软天创旗下另外一款免费、开源、安全的IM产品喧喧驱动,支持私有部署,跨平台操作,内置大量插件,功能丰富,在喧喧里,您甚至还可以为自己编写个性化的插件,点击查看。"; $lang->chat->xxd = new stdclass(); $lang->chat->xxd->os = '操作系统'; diff --git a/xuanxuan/module/common/ext/view/footer.html.hook.php b/xuanxuan/module/common/ext/view/footer.html.hook.php index 47955e140b..41358296f7 100644 --- a/xuanxuan/module/common/ext/view/footer.html.hook.php +++ b/xuanxuan/module/common/ext/view/footer.html.hook.php @@ -1,9 +1,13 @@ +app->moduleName; +$methodName = $this->app->methodName; +?> From 19daa2b0b7e368d82bc6ab79e2ed872143fd90d0 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Thu, 20 Dec 2018 10:43:44 +0800 Subject: [PATCH 003/442] * adjust for message setting. --- xuanxuan/module/message/ext/config/xuanxuan.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/xuanxuan/module/message/ext/config/xuanxuan.php b/xuanxuan/module/message/ext/config/xuanxuan.php index ba81cc8e28..250bbf0518 100644 --- a/xuanxuan/module/message/ext/config/xuanxuan.php +++ b/xuanxuan/module/message/ext/config/xuanxuan.php @@ -1,3 +1,6 @@ message->available['xuanxuan'] = $config->message->objectTypes; +$config->message->available['xuanxuan']['story'] = array('opened', 'edited', 'commented', 'frombug', 'changed', 'reviewed', 'closed', 'activated'); +$config->message->available['xuanxuan']['task'] = array('opened', 'edited', 'commented', 'assigned', 'confirmed', 'started', 'finished', 'paused', 'canceled', 'restarted', 'closed', 'activated'); +$config->message->available['xuanxuan']['bug'] = array('opened', 'edited', 'commented', 'assigned', 'confirmed', 'bugconfirmed', 'resolved', 'closed', 'activated'); +$config->message->available['xuanxuan']['todo'] = array('opened', 'edited'); $config->message->setting['xuanxuan']['setting'] = $config->message->available['xuanxuan']; From c72430be59defff9cfd1a959e882e7b34227c55c Mon Sep 17 00:00:00 2001 From: Yagami Date: Thu, 20 Dec 2018 10:43:56 +0800 Subject: [PATCH 004/442] * Add setting xuanxuan help. --- xuanxuan/module/admin/ext/view/xuanxuan.html.php | 3 +++ xuanxuan/module/chat/ext/lang/en/xuanxuan.php | 1 + xuanxuan/module/chat/ext/lang/zh-cn/xuanxuan.php | 2 ++ 3 files changed, 6 insertions(+) diff --git a/xuanxuan/module/admin/ext/view/xuanxuan.html.php b/xuanxuan/module/admin/ext/view/xuanxuan.html.php index aa938f2bb3..9f4b7a29df 100644 --- a/xuanxuan/module/admin/ext/view/xuanxuan.html.php +++ b/xuanxuan/module/admin/ext/view/xuanxuan.html.php @@ -97,12 +97,15 @@ chat->downloadConfig, '', "class='btn btn-primary download'");?> chat->downloadXXD, '', "class='btn btn-primary download download-package' target='_blank'");?> chat->changeSetting, '', "class='btn'");?> + chat->help, '_blank', "class='btn'");?> +
chat->info;?>
+ diff --git a/xuanxuan/module/chat/ext/lang/en/xuanxuan.php b/xuanxuan/module/chat/ext/lang/en/xuanxuan.php index a1b03d8240..8f55035265 100644 --- a/xuanxuan/module/chat/ext/lang/en/xuanxuan.php +++ b/xuanxuan/module/chat/ext/lang/en/xuanxuan.php @@ -36,6 +36,7 @@ $lang->chat->xxdSchemeError = 'Server address should started with http:// or htt $lang->chat->xxdPortError = 'Server address should contain valid port and the default is 11443.'; $lang->chat->xxClientConfirm = 'Click to download new zentao client!'; $lang->chat->xxServerConfirm = 'Click to download new zentao client server!'; +$lang->chat->info = "ZenTao client is powered by Xuan, a secure and open source Instant Messenger by Nature Easy Soft. It is a self-hosted and cross-platform tool with numerous plug-ins and robust features. In Xuan, you can code your own plug-ins. Click HERE for more."; $lang->chat->xxd = new stdclass(); $lang->chat->xxd->os = 'OS'; diff --git a/xuanxuan/module/chat/ext/lang/zh-cn/xuanxuan.php b/xuanxuan/module/chat/ext/lang/zh-cn/xuanxuan.php index d2d99051e1..80e000ecfc 100644 --- a/xuanxuan/module/chat/ext/lang/zh-cn/xuanxuan.php +++ b/xuanxuan/module/chat/ext/lang/zh-cn/xuanxuan.php @@ -2,6 +2,7 @@ $lang->chat->common = '喧喧'; $lang->chat->turnon = '是否打开'; $lang->chat->downloadXXD = '下载喧喧服务端'; +$lang->chat->help = '使用说明'; $lang->chat->turnonList = array(); $lang->chat->turnonList[1] = '是'; @@ -34,6 +35,7 @@ $lang->chat->xxdPortError = '服务器地址应该包含有效的端口号, $lang->chat->zentaoClient = '新增禅道客户端!'; $lang->chat->xxClientConfirm = '与禅道深度集成,支持成员沟通,小组讨论,文件传输,任务指派,更加方便的项目管理,更加流畅的团队协作!点击界面右下角下载禅道客户端。'; $lang->chat->xxServerConfirm = '与禅道深度集成,支持成员沟通,小组讨论,文件传输,任务指派,更加方便的项目管理,更加流畅的团队协作!进入后台-集成-客户端集成进行下载配置。'; +$lang->chat->info = "禅道客户端由易软天创旗下另外一款免费、开源、安全的IM产品喧喧驱动,支持私有部署,跨平台操作,内置大量插件,功能丰富,在喧喧里,您甚至还可以为自己编写个性化的插件,点击查看。"; $lang->chat->xxd = new stdclass(); $lang->chat->xxd->os = '操作系统'; From e35503d49345b1ac5eabc34dc849c2dd2f06edfe Mon Sep 17 00:00:00 2001 From: wangyidong Date: Thu, 20 Dec 2018 11:01:27 +0800 Subject: [PATCH 005/442] * adjust message setting for xuanxuan --- xuanxuan/module/message/ext/config/xuanxuan.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/xuanxuan/module/message/ext/config/xuanxuan.php b/xuanxuan/module/message/ext/config/xuanxuan.php index 250bbf0518..2c118573b6 100644 --- a/xuanxuan/module/message/ext/config/xuanxuan.php +++ b/xuanxuan/module/message/ext/config/xuanxuan.php @@ -1,6 +1,6 @@ message->available['xuanxuan']['story'] = array('opened', 'edited', 'commented', 'frombug', 'changed', 'reviewed', 'closed', 'activated'); -$config->message->available['xuanxuan']['task'] = array('opened', 'edited', 'commented', 'assigned', 'confirmed', 'started', 'finished', 'paused', 'canceled', 'restarted', 'closed', 'activated'); -$config->message->available['xuanxuan']['bug'] = array('opened', 'edited', 'commented', 'assigned', 'confirmed', 'bugconfirmed', 'resolved', 'closed', 'activated'); -$config->message->available['xuanxuan']['todo'] = array('opened', 'edited'); +$config->message->available['xuanxuan']['story'] = $config->message->objectTypes['story']; +$config->message->available['xuanxuan']['task'] = $config->message->objectTypes['task']; +$config->message->available['xuanxuan']['bug'] = $config->message->objectTypes['bug']; +$config->message->available['xuanxuan']['todo'] = $config->message->objectTypes['todo']; $config->message->setting['xuanxuan']['setting'] = $config->message->available['xuanxuan']; From 096ea509f07ca3d5d23892df27ee681d48833d16 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Thu, 20 Dec 2018 11:10:28 +0800 Subject: [PATCH 006/442] * adjust for entry log page. --- module/entry/view/log.html.php | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/module/entry/view/log.html.php b/module/entry/view/log.html.php index 13f0446a5c..652a6b6f60 100644 --- a/module/entry/view/log.html.php +++ b/module/entry/view/log.html.php @@ -11,21 +11,16 @@ */ ?> -

name;?> entry->log;?> +
+ " . $lang->entry->setting, '', "class='btn btn-primary'");?> + +

From 4eb64d59e21981865356818968742b8037c23dde Mon Sep 17 00:00:00 2001 From: Yagami Date: Thu, 20 Dec 2018 11:18:25 +0800 Subject: [PATCH 007/442] * Fix uploadFile size. --- .../admin/ext/css/xuanxuan/xuanxuan.css | 3 ++- .../module/admin/ext/view/xuanxuan.html.php | 15 ++++++++++++++ .../chat/ext/model/class/xuanxuan.class.php | 1 - .../model/hook/loadConfigFromDB.xuanxuan.php | 20 ++++++++++--------- 4 files changed, 28 insertions(+), 11 deletions(-) diff --git a/xuanxuan/module/admin/ext/css/xuanxuan/xuanxuan.css b/xuanxuan/module/admin/ext/css/xuanxuan/xuanxuan.css index 69089acc43..f4720d1eb5 100644 --- a/xuanxuan/module/admin/ext/css/xuanxuan/xuanxuan.css +++ b/xuanxuan/module/admin/ext/css/xuanxuan/xuanxuan.css @@ -1 +1,2 @@ -.form-inline .form-control {min-width: 215px;} +.table-form textarea.form-control{height: 60px} +.sslTR td .form-control{width:300px} diff --git a/xuanxuan/module/admin/ext/view/xuanxuan.html.php b/xuanxuan/module/admin/ext/view/xuanxuan.html.php index 9f4b7a29df..a377af3998 100644 --- a/xuanxuan/module/admin/ext/view/xuanxuan.html.php +++ b/xuanxuan/module/admin/ext/view/xuanxuan.html.php @@ -54,6 +54,21 @@ xuanxuan, 'commonPort', 11443), "placeholder='{$lang->chat->placeholder->xxd->commonPort}' class='form-control'") : zget($config->xuanxuan, 'commonPort', 11443);?> + + chat->xxd->uploadFileSize;?> + + +
+ chat->xxd->max;?> + xuanxuan, 'uploadFileSize', 20), "class='form-control' placeholder='{$lang->chat->placeholder->xxd->uploadFileSize}' ");?> + M +
+ + chat->xxd->max . zget($config->xuanxuan, 'uploadFileSize', 20) . 'M';?> + + + + chat->xxd->isHttps;?> diff --git a/xuanxuan/module/chat/ext/model/class/xuanxuan.class.php b/xuanxuan/module/chat/ext/model/class/xuanxuan.class.php index f9e3c24f2b..af3c01aaac 100644 --- a/xuanxuan/module/chat/ext/model/class/xuanxuan.class.php +++ b/xuanxuan/module/chat/ext/model/class/xuanxuan.class.php @@ -6,7 +6,6 @@ class xuanxuanChat extends chatModel $data = new stdClass(); $data->server = $setting->server; $data->uploadFileSize = $setting->uploadFileSize; - $data->uploadFileSize = $setting->uploadFileSize; $data->isHttps = $setting->isHttps; $data->sslcrt = $setting->sslcrt; $data->sslkey = $setting->sslkey; diff --git a/xuanxuan/module/common/ext/model/hook/loadConfigFromDB.xuanxuan.php b/xuanxuan/module/common/ext/model/hook/loadConfigFromDB.xuanxuan.php index c66961a568..e66eb0c040 100644 --- a/xuanxuan/module/common/ext/model/hook/loadConfigFromDB.xuanxuan.php +++ b/xuanxuan/module/common/ext/model/hook/loadConfigFromDB.xuanxuan.php @@ -1,15 +1,17 @@ loadModel('setting')->getItem('owner=system&module=common§ion=xuanxuan&key=key'); -$chatPort = $this->loadModel('setting')->getItem('owner=system&module=common§ion=xuanxuan&key=chatPort'); -$commonPort = $this->loadModel('setting')->getItem('owner=system&module=common§ion=xuanxuan&key=commonPort'); -$ip = $this->loadModel('setting')->getItem('owner=system&module=common§ion=xuanxuan&key=ip'); -$isHttps = $this->loadModel('setting')->getItem('owner=system&module=common§ion=xuanxuan&key=isHttps'); +$sn = $this->loadModel('setting')->getItem('owner=system&module=common§ion=xuanxuan&key=key'); +$chatPort = $this->loadModel('setting')->getItem('owner=system&module=common§ion=xuanxuan&key=chatPort'); +$commonPort = $this->loadModel('setting')->getItem('owner=system&module=common§ion=xuanxuan&key=commonPort'); +$ip = $this->loadModel('setting')->getItem('owner=system&module=common§ion=xuanxuan&key=ip'); +$isHttps = $this->loadModel('setting')->getItem('owner=system&module=common§ion=xuanxuan&key=isHttps'); +$uploadFileSize = $this->loadModel('setting')->getItem('owner=system&module=common§ion=xuanxuan&key=uploadFileSize'); if(empty($sn)) { $this->setting->setItem('system.common.xuanxuan.turnon', 1); $this->setting->setItem('system.common.xuanxuan.key', $this->setting->computeSN()); } -if(empty($chatPort)) $this->setting->setItem('system.common.xuanxuan.chatPort', 11444); -if(empty($commonPort)) $this->setting->setItem('system.common.xuanxuan.commonPort', 11443); -if(empty($ip)) $this->setting->setItem('system.common.xuanxuan.ip', '0.0.0.0'); -if(empty($isHttps)) $this->setting->setItem('system.common.xuanxuan.isHttps', 0); +if(empty($chatPort)) $this->setting->setItem('system.common.xuanxuan.chatPort', 11444); +if(empty($commonPort)) $this->setting->setItem('system.common.xuanxuan.commonPort', 11443); +if(empty($ip)) $this->setting->setItem('system.common.xuanxuan.ip', '0.0.0.0'); +if(empty($isHttps)) $this->setting->setItem('system.common.xuanxuan.isHttps', 0); +if(empty($uploadFileSize)) $this->setting->setItem('system.common.xuanxuan.uploadFileSize', 20); From 501a5cbc4a8344182ae2d4ad48d36274f2e3e904 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Thu, 20 Dec 2018 13:12:11 +0800 Subject: [PATCH 008/442] * adjust for download xxd. --- xuanxuan/module/chat/ext/model/class/xuanxuan.class.php | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/xuanxuan/module/chat/ext/model/class/xuanxuan.class.php b/xuanxuan/module/chat/ext/model/class/xuanxuan.class.php index af3c01aaac..98c7f643bd 100644 --- a/xuanxuan/module/chat/ext/model/class/xuanxuan.class.php +++ b/xuanxuan/module/chat/ext/model/class/xuanxuan.class.php @@ -19,11 +19,8 @@ class xuanxuanChat extends chatModel $data->version = $this->config->xuanxuan->version; $data->downloadType = $type; - $url = "https://www.chanzhi.org/license-downloadxxd.html"; - $agent = $this->app->loadClass('snoopy'); - $agent->cookies['lang'] = $this->cookie->lang; - $agent->submit($url, $data); - $result = $agent->results; + $url = "https://www.chanzhi.org/license-downloadxxd.html"; + $result = common::http($url, $data); if($type == 'config') { From 563ece6990920be71edd1d2af791c5b80f6b05e6 Mon Sep 17 00:00:00 2001 From: Yagami Date: Thu, 20 Dec 2018 13:28:24 +0800 Subject: [PATCH 009/442] * Fix bugs. --- module/bug/js/x.view.js | 1 + module/doc/css/x.view.css | 1 + module/doc/js/x.view.js | 1 + module/story/js/x.view.js | 1 + module/task/js/x.view.js | 1 + module/testcase/js/x.view.js | 1 + www/theme/default/x.style.css | 1 + 7 files changed, 7 insertions(+) diff --git a/module/bug/js/x.view.js b/module/bug/js/x.view.js index 4f0756d4f4..d57019c9b3 100644 --- a/module/bug/js/x.view.js +++ b/module/bug/js/x.view.js @@ -1,5 +1,6 @@ $(function() { + $('.main-actions-holder').css('height', '0px'); var $xuanAction = "
"; $('.main-col div.main-actions .btn-toolbar a').each(function(){ var $that = $(this); diff --git a/module/doc/css/x.view.css b/module/doc/css/x.view.css index 68b94df015..70379046b6 100644 --- a/module/doc/css/x.view.css +++ b/module/doc/css/x.view.css @@ -3,3 +3,4 @@ #mainMenu .btn{display:none;} #mainMenu .divider{display:none;} .main-actions{display:none;} +#mainContent .cell{min-height: 420px} diff --git a/module/doc/js/x.view.js b/module/doc/js/x.view.js index 3fcee4774b..e5eda36b22 100644 --- a/module/doc/js/x.view.js +++ b/module/doc/js/x.view.js @@ -1,5 +1,6 @@ $(function() { + $('.main-actions-holder').css('height', '0px'); var $xuanAction = "
"; $('.main-col div.main-actions .btn-toolbar a').each(function(){ var $that = $(this); diff --git a/module/story/js/x.view.js b/module/story/js/x.view.js index de18f9ce66..9df20df06e 100644 --- a/module/story/js/x.view.js +++ b/module/story/js/x.view.js @@ -1,5 +1,6 @@ $(function() { + $('.main-actions-holder').css('height', '0px'); var $xuanAction = "
"; $('.main-col div.main-actions .btn-toolbar a').each(function(){ var $that = $(this); diff --git a/module/task/js/x.view.js b/module/task/js/x.view.js index 4dc9fc77b0..8ffbdb54e8 100644 --- a/module/task/js/x.view.js +++ b/module/task/js/x.view.js @@ -1,5 +1,6 @@ $(function() { + $('.main-actions-holder').css('height', '0px'); var $xuanAction = "
"; $('.main-col div.main-actions .btn-toolbar a').each(function(){ var $that = $(this); diff --git a/module/testcase/js/x.view.js b/module/testcase/js/x.view.js index 3c9d7d570f..567665ea92 100644 --- a/module/testcase/js/x.view.js +++ b/module/testcase/js/x.view.js @@ -1,5 +1,6 @@ $(function() { + $('.main-actions-holder').css('height', '0px'); var $xuanAction = "
"; $('.main-col div.main-actions .btn-toolbar a').each(function(){ var $that = $(this); diff --git a/www/theme/default/x.style.css b/www/theme/default/x.style.css index 6dbcc33e48..008679eb9a 100644 --- a/www/theme/default/x.style.css +++ b/www/theme/default/x.style.css @@ -5,3 +5,4 @@ body{padding:0px; margin: 0px} #main{padding: 0px;} #main .container{padding: 0px;} #mainMenu{margin-top:0px;} +.cell .histories{min-height:350px} From 422a87421a91089de50a9631cab17dfd31befc69 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Thu, 20 Dec 2018 13:52:06 +0800 Subject: [PATCH 010/442] * update zentao-integrated package. --- www/theme/default/style.css | 4 ---- www/theme/default/x.style.css | 4 ++++ .../chat/ext/model/class/xuanxuan.class.php | 4 ++-- xuanxuan/module/entry/ext/control/visit.php | 3 +++ .../www/data/xuanxuan/zentao-integrated.zip | Bin 75071 -> 97878 bytes 5 files changed, 9 insertions(+), 6 deletions(-) diff --git a/www/theme/default/style.css b/www/theme/default/style.css index 15f4dc5578..39d8931ad3 100644 --- a/www/theme/default/style.css +++ b/www/theme/default/style.css @@ -15,7 +15,3 @@ /* Finish task #5068*/ .main-table .table{cursor:pointer;} - -.xuanxuan-card{padding-bottom:55px;} -.xuancard-actions{width: 100%;text-align: center; padding: 10px 0;} -.xuancard-actions.fixed{position: fixed; background: #fff; border-top: 1px solid #ddd; bottom: 0; margin-bottom: 0; z-index: 999; box-shadow: 0 -2px 10px rgba(0,0,0,0.15);} diff --git a/www/theme/default/x.style.css b/www/theme/default/x.style.css index 6dbcc33e48..104673454b 100644 --- a/www/theme/default/x.style.css +++ b/www/theme/default/x.style.css @@ -5,3 +5,7 @@ body{padding:0px; margin: 0px} #main{padding: 0px;} #main .container{padding: 0px;} #mainMenu{margin-top:0px;} + +.xuanxuan-card{padding-bottom:55px;} +.xuancard-actions{width: 100%;text-align: center; padding: 10px 0;} +.xuancard-actions.fixed{position: fixed; background: #fff; border-top: 1px solid #ddd; bottom: 0; margin-bottom: 0; z-index: 999; box-shadow: 0 -2px 10px rgba(0,0,0,0.15);} diff --git a/xuanxuan/module/chat/ext/model/class/xuanxuan.class.php b/xuanxuan/module/chat/ext/model/class/xuanxuan.class.php index 98c7f643bd..1422d76ecb 100644 --- a/xuanxuan/module/chat/ext/model/class/xuanxuan.class.php +++ b/xuanxuan/module/chat/ext/model/class/xuanxuan.class.php @@ -80,11 +80,11 @@ class xuanxuanChat extends chatModel { if($this->config->requestType == 'GET') { - $url = "/index.php?m={$moduleName}&f={$methodName}"; + $url = $this->config->webRoot . "index.php?m={$moduleName}&f={$methodName}"; } else { - $url = "/{$moduleName}-{$methodName}-"; + $url = $this->config->webRoot . "{$moduleName}-{$methodName}-"; } $urls[$url] = $size; } diff --git a/xuanxuan/module/entry/ext/control/visit.php b/xuanxuan/module/entry/ext/control/visit.php index c764303b10..457d124e38 100644 --- a/xuanxuan/module/entry/ext/control/visit.php +++ b/xuanxuan/module/entry/ext/control/visit.php @@ -57,6 +57,9 @@ class entry extends control $user->lastTime = $last; $user->ip = $this->session->clientIP->IP; + $xxInstalled = $user->account . 'installed'; + if(!isset($this->config->xxclient->$xxInstalled)) $this->loadModel('setting')->setItem("system.common.xxclient.{$user->account}installed", '1'); + $this->session->set('user', $user); $this->app->user = $this->session->user; } diff --git a/xuanxuan/www/data/xuanxuan/zentao-integrated.zip b/xuanxuan/www/data/xuanxuan/zentao-integrated.zip index 18e5261af0b6fbc2af305bcf36ba820dd5e29c2e..1e354b71a23dce166fe5df451c381cf0bdb13474 100644 GIT binary patch delta 23851 zcmY(qWpLe0ur0dH%$%5+nVB8OF*8%l7&B{|Vy48*%*>9NVrHh8VrFLVm+zc+>(-S@ zGt&H+HJV;C)xFf}9)(?eg+o00R*Ux+dahI3^`P#q!bM7s>~NJ1AUGmYPT$4hQDh4U>`r(#poC@SW8P z`YmKppNsRaOZ0a7*;jjg4A^0?zbGX?$pt1NBV|du=kK^dUzw9DRPV5DH7&_&aU*Kq zcknsw#~ggEwNj?mL7RCux+R9?5cnIEJ0G1Je(ojNtE#wsYC81des#PL+zNx`auXD0 zpbPk8<`l6_s@w9>U%c;rA5?X-Es^0*q)b(uL}l!q?4O=p)I{xXSTyk8g(M`kz3mQ; zkxO&!jdB)A4jYkq&Mh$I`1m}hy=O5bcp(G_Qs=l#4YPM~6dNRK`UQ?YqH^y(#a zVtA=SFwKZAXS3QXiA{Es*<|hy+qYwlM2GGM>(oGSBSOky<}-x+>ohM;h%Y0gt$m`O zkkFHAD;Xdb>yNRMO5*BJ7pa_uqO!rv&yMF@2{GSemYI0Dxoa5%7KW578umQYc<8kx z9|ao$ZI|*d_y_e$;BC~sRO}1Yg$ylj`iRWJ?7KCNHJ(T9sz0MEAzh*4iH{H(>{x4% z&`7V}C4!0q0%D=$0DB7*2owkd0{zDYWYB-d53iq!|8w*I7YHCskg2Pyg_|pzrVc8I zi2k4bgU^Wm$NvA9K?466Q;toIAi49uj9I{b?EH^KQ`3wHO8?tdKNF?~{2#`JXny~H zPze7oimQd=R|^*wQx8)&Qx{feN2~u}|3iI4)=ENA0tBjyLwPlY`}a(44t!Gk2kS!%0)az7pyz*W;6o6| zogD-^HUWVIQ$ZjC=geQK!XS`1NM2e(!wc#x3#o%xrU^2&ZXYiW4JCOW6JHyW1r`U_ z!eYiN27&3LnEP;Y@&P{FUOGnQ^`0SgWaxVOTrg!6ETXS?Gl=3NQhW$CGm`0;%M0WU zaNkT{^W=P(Tojq(YMDBin==&I&@53}5O6=vR9_%c$a`nF%w1YoY;dn^zbocEajBe| z*-Wpjao=0Fr+RI)dgFKcntivk-p@%4JteyLpgv3HVl-YC{($cS#8&OB+h4diQ4IMK zlj$hyTh^?(tT8o2x*@xN3H(B``=?C>$T@ZozTyqx;A>9e#a$#p4t6xFaKJnWT!gda zJL#`OKWY;Abye9r4-XSHvPMe11QPiun*QlTq|W=h8rMCC_LuObTTZ#@Y~^D03+@o zGnJvO^GaW6Pjt0C$SJ421gwuDd2mEiH;2YFz?}(F>*6dKnD_Y5IDv@+a z7y7MqUI9XP*)Nt}A6MwuA6J`UsGeivO_*X$iTzbiU}TLZbWuqyU6y=eXU62UuUQYj zhDMJrQsm_pC@ARtjEWWuO&wc^0@iaPNw1=-Lcz=21xK>TJcZyBP9Etz9DI?nli+gU z@9A-2c|-l|`mUtN4W2h?pBP&RjmD1%6UTnR(h*W)a?_~#YvmGfa~N7T6YwiN^RAUxDm$7d_!0)?o{y9b| zy`Tow%7LKiaqhe*5oD3`-Die1N-jQvL2eQeI0IL?9M|-M6>cZoXi+FNV(GBWv=gX+ zk|o5Neh#9PtPk@jG^lQ{Zn|JhuOIUp)7JG4X=x+w$Q&xl~~Z zOE3ql6^Ju}RtvuPK9qQGm_Cc7)sRk6Avpi($!RHeeZHs1fAhav)yn73atCk@Y z9>A5@p$Mh?Z>lMgEFf2l{ht2x;{bNe>2K>zI8Ut#W1}a2+x^LmpP8%(eA>zjx)*X; zT3xJDl8+-9xjGR*(ic=tFDykh7crf_{qkUjo&u z?#b}Fwy8(X(;^iJZaii@f@xD{U*i@f>PU~PGPuBhYBrzsC5C~}xh#ut2MfU(@vDLKDT>rM7}VQ^kX#Q24x%F?sI zvOP%jl4-5%h6q_G1$5a#>pL0y{b)*Jk8C&YQ4ItL5#U9d#!X&DcVO3}eZs8#Drs_$ zL)^)yOG|Z@t1f)<@hRIYYS03~nS7Pt-wXfLkr;(R*!5XPHQ!fj6Q`JuLl=&f;hfb%}a%)xHY% z>7EMkI|(>mwCmn2fi$X#J4(S}dwYCr&c9eiPfPpP>!Ri^GT5qvjeW-$Jms0%o#J5L zq_3A@t0KPI!v=%D(08DRpJVe&v>Zb38KWUNtQ59YwK+VVZ$w z9a49$KFgdr?*AV68ylqFc}4gf5Hl*q>JFUod?Bmyml>d$g-<`TK@G7oCC^mzEzIxD zm4F4Om=+xUG<}80oEcA9y;~pt-2b7Ln*{Abz`OQBylD#aP~rTsb#Sz5YJNrY4FycM z99w}hW3X|Gx^JsU%ut9M9tLgZNrc!=4z0CHbKBH##&y@pqU(9 za4DIRWj~Z0jULW`Uv--p8C+E0`xZRPI*0yXzgUS@>aF16YLG#1aVQ&)bRzGI3Ey34 zPp=+TT&an#<5n_vWJw%0lkL`tw=bXOm!#dl0x2>iF_gO?W9n(a<)gx zMmL3o?&5(xQkU%N^SjH|e`CFrL>{AxeB}5$2FTIWi9-HNT0i zJ{_MOY_5r}x{K5jp}!^2BqIgr^d>tnHyA*1l4E8y>65zOz>LpN|gl zZtRnoG7o-XC9!1Qh+@jpH*#Ec=S#Y9w)QUmD5%9oVlUFfDyLix__`QHxng7=^)?xd zobw3qi&{#RD+`Ej>nK^@gb|PNyH!C}tuYygNLYU+*Egi$fBq?R>T15Nf*OFXy4 zLPJuW(XK@Tiw#}zn0jP;U$o4^HP)RHpTq8L7x!cTb)xi(p+gDt%@Sz^4~Gg&*oQWu zFY6erqyvr(RMw|hfKCvCE9#yPm4TH1lX7%-b81)URXe`KQ&J)YMeZ(D>_a?y)bgl3 zYes5UtaIidN5-z=EK1vjJU?QhC)U%;RI%7X9=HRh;*6mfPL6hjHa^pl(ysg7{KRtC zf1e;Yw64NJ&!Qa$9={>($fntlt-*o6c?a{x3DgkPTY)qSASRO&T5=uup-eAJIG04`$S3nq3w(!8)z?!BRD`O;7F(G%16ew^M{Gau?lJ@&WQlXQ~hrBm=7 z(bd)2=a?F~Y257u3qQEvPJ3D^Tzr00m6E%%AztfXS8`ZKxiyhk8ELYnr<&1-Rb((i zXSMXB;lMW^-r)0ER>vw(=-%c8D0Er=yuJC^G(YV(oU4UzAHtw0$>E;41G6)t{A5y*ZL0%{Rri36icnv8?Pp zr2gYd>&vI)soiV^KtVt9@f)mO?*aL45;ZcNlwShVvo}iwm}x_y>^WsxhN-TA6R@QMkv`m8{Cz`--b8?!MqVJap)ZKg zyTI55e8X3a*aIBGr}fSX4LbYmZ)cw@`6v;AKO=OAs)Pfn{No?hqpTr1%AAnWwqOJzDQ97xUZYV$W!rhEJ zN?=wddK4!xhCb4R_0xKtS-W32NW56Of)>ZyenD?ZIFaDK3-RAyvAicG8jT);lk2bm z$My!ot0}^-iys%nLi=zZ>3;X!93{u?e7;?vUNXw>%*~$tx6lkfZ!#Qscd8>Jl6k{x zt-@Fjgqh+}|0obt5z*pLVY_iOBQU!a`el1Aij|CY+JiRn-s)|#Qsa@Us7dO zoeAwK+OO5oU0@#9N+mAQzh|Su*Q}{7Z@jYIJXaC>=!_8F@jEtB^Jby*PTYJT4{Q*Y z(rw}Khd4T9(t%KM(S|h^dUm9}wrsh?qxS5l_xMKa32`^5HOJ}Bz5j4&q4}ZZCbEK- z)i@PG|N7J&`h<}Cs~A%RF8iyXGi`BsiN(kGK=yYdTz{G$=>@pJsiyVll*_5r%kLMK zKCiQO(wx)d-%4d>0fUbfF5gIi(pSUbm-haNYO)MYvBX$3583u#R{9OHyIWFJCf z`{i_e6QN*)tmRXh*mJe2U+fE(ruTz~We!DoJ)`WO9o32px+Ym!VQM36d82YPl-`Zbc(Q0oHY9i}&zn z@xm4B-8nnVaVu1sHU18mr28DkZZ`O}G@V4=6Q$342vZ~ zt{y7tO-s2IOP>FHl1=N~{xWw$ttzgXLO_w*EkImpU=@el`}svVY124HmOCNT3TIh! zbSZp{#kgAHD%pz}kPKG>2_N2Jye8)oCBI58xTKf}#TBFHT&+Q<^i7u&wDRgAh zzpgKmkKLs;Bn54LyGj+rNl<7;79@jzygs8R)TK)>qqNa1T%Vq7WEUR>SD9gG1nK5p{*(m|UY1!5!ssf&a%Wd_^M3a#~^b7;3A&nf=BK@m*g zz4?^)PM@oE&*Udng1Xli1KztwdoaSDI^&*rVXq1SKVKxM{UJeH_3r9l^U?m-Tl@M! zCpsD1t<@g%7KspIgj>ARqj~{iUyQmq*Smz9(cRLH;%2x3C1vk}#JF^6Bg=&7Kw~U|rQY|Wof?PzSGT^(@i=68RmFxbV z?Qf1Izt6Z8&&U@OBJ2k`7L!AckqLYk(E;iwTy|zYv`=4uh8`k3FDfhvrQ;Vw6Ce5J z)qt)s+&Bk4x`#ERBusC_j5A6AVhUG0x6QDidhbKqt~MO}tf*dxc1V4&Bl%eq!l}=@ zT@zzw>v_g&`Ehnqmmu$iu5ZIIWi9Nw^Wr*Yw^A7HX>`x%-ql_>f92Fh3h5l@p$WL@ z0CKv8UX8JW47Yk0F3r+ZvO%pG;vuv`RAaB(eVTdfi9cmQeh#fG$#@fveV+=KmvX$YJ`7J0II0bBzW}+px7&;R|{+AN#M|j$nUv2U|jAjUsN^x z<>#HB1V`s76<1cJW+1;MQAk&_o(Cvc9tGCjSn(iAh@BK8m zvo`l%S!3>O6s%6ahZ~S}pNR`&^{>zY)M&ioH;cHGMLleYSJ{fgryD3ETIV^=n`-iH zHX91qe|J)TzJ~|ULggX?qzG?^a$yCn5FdC?4XYs`AM%4Y^f_$M#`eghcNn*iBNXepu>kR>K8qIlr8bpwBi ze=jr*TFyy$PL1r4k#a^)5u#96nei(Hr#1FkY1DoozSxFIkrQ^{4M3KVsYw@!8hFz= z?zFA$cjsJ?n^x@%qN~5KUA=U@UPnNxc2O(Mgxm;RLE{!r8B>UVcTp9x>* zgg=07^QM8rJDMwMSVkxt#U0fv+XR&kkckL-nrD;@qg1MSSnXf!n^a^|R*Dp>4ik@_ zUBX2CM#5x6mV)^Dr)zQmDU~am>&2=ZNn<&v_e5+t5h_r0=J#4+-2I(%oGo|o0poT$ zf~={|JL(+xlb3=pqY(=>v7OuNul1%8}cpTedB zt6L95BPKog0^dhRe6L%z^RbH9+nAO1lXY0vJnFASo}Nc+Q2LL3n6otU0++!LU`~t< zSA|Eot97ACTW$2r!$-Cq(XZ8P+G@#H1p^JK9oEB3 zspx>gyH6XB{3eRJcn(dstv>T1Ap#WRkVTtM~)3BSQe@<}J}zO6e~H4g7?Vb#zZ+>4FA_@wLjJ`l^XBz<9EP=UQ`H+K|wQ-be1II zdI*b2nLRp##+N{cD^$ZED-)I#{Q*LE09n#l&NtVlXK{Xk0CXmzar%~fK@y5j{^tx6 zxj_NG+w6C9v<2&TTRwcgVb&ko7Cl@Sd4eLg9yKVWs-#Jurs)3^C0T7*`UTh!;e9q9 zQ3#}hPk(dfdM|f#i_Z5S8<&b+oay8BhPj_l@8Z01y2*wW#}Q`w!vYG010Tq}15J*P zs^tAY-izzQwjPX2P?t8TV6TY-LxFU{s&v;kO2*QvT;tDh;#i4{?+F)Mc#rwqgFf?> zhX<=z@?ZX7eKGkkUDU%x(wXz7ELn&`Dc+$E5@bD}`h&@tmWuWgBPkeqJq;fbMzNs~ zI@0s2D~>hzA`kK9o?L%i3>>>H#V(Qv&%EDTBn^E*c)TL z>w)I6>?3$9<8MB3XY~;B&kXdFh!4?MS-gfo#x9E|;tn;;60 z>jVLPZ?SbwFJ?*VBt(AY(VzQqOS1B6{sdmynaP?R{p3*lJbrP3xGq7&33$ZDjH2fr z{qWKjUWaO&lFVKjAl`A_bioR9gO$*Q?42{<8<{)4$)rLiVE<_;(x0@s@Yl+VL`sTw zv>oCG4dz7Mulb)XQN61b#f(dOG&Cz~sS@H77Lcm?4@|FIgr?8QJSt-TW*M4ay-Asz zMewS2O;JjmlqvU3@Zs?313%;fH0h+IDhi4*G2m#i1s?3ygRj${#<7(-X7)Yr?dm}b5VO52P>vn@}q%c`lp5oksY4)4KtRO!tOtj~6x>ftHS z2jn0nLJ1=I2h{1!Ci{-mK!4B_+J1QS12rP&j)j*X#$T)6?iCZvWr5@wvXFFocjzx_ zsOwXu5V1M0**r2}&zeNaNF;SNQ@A5Fy=Y3~GnDQknfX@>*g!h; zWg7U-z{txuA*%=W(iP4^xJCgdRnpt;`2Llow9QR`f8d^5g-GVc2zEsrcN@48(SeXV zHO3%EAvs~=?F_k8q2(&#ws)GlxdI<7%$87lEHVfLHt>KM-ULuMa*&NUVDFtXl4216 zWzw7@wiNprIh2MA(IKvAF79G7Om$48(`8ZtcD`dMv=;RsVZiQ~C;YpRlfqX`5yT37 zLB2luxvG<+KWp1su?luog^;SD%zzv0=)P5t>L1sOUfQp7u*wI4Ja9dCMozM8hP#Qy z?M$f!pjW^gYAtwTCy$4N`O*^YU6#Bm#(#%$UA^FM!9Rx?moQe#`=**Oxk%S`UICds zJho67mCaOxjPj#+BDs&(Wuuo6!s6E&)@Fez>)>83hQgG-0!O%`YWC4qXvXXI*4N2^ zJPY}nQEWGjfX8lI?kV^y8{z8fODE#on= zMeFm_*sL3EJ?hK8*Er}+1kKg27Jv=LTFxw+9gMRP1p|EJwD!8pUNGpt-V(X)Slx_8*+KpmZv>UkYlS9VKA#L4~$i zg8onwCwC|}CvOZo%_@-YZN3r6@loWy41}s7^J) zd=^!?7X#A#pTu?~r!@48h%cCwKX}x<+e3H)MGz2vC{cXFokrkuTqCI&S5cXB<23_GA9meo&B)f+zA4+Pbo@=2w-R9t3{J zfB1n1%Il_V3n^=vd95VzBFup}+&s=r0IS~BmMu1zWp2i6(InqnSXt{UEL)4=UV3$w zF0fm(*s{^ZBJ#NZwm}VZsNmY9q#Rbi(kmF{v7s%+%!(_7z4364s)t>VO>`$VMy7zQ zgIZunjq~-P6AJLs?S1!=H`Z_$p8+QeZSr-6b4-nVzg&l(z!S1Qoq~k|rFhT#GF$cF zMxg+}VVWghDQnd)|C_IA2~Vg=+A0!jK-d&Ml9GhB^12|ihAR`@B3*~kdKVKZkU8Yr z!i3t~ImuPCmoV(V$+i8M!gu2w_=}ZpLMXV_5#2V79HVPuQuJm-pD^iXH&CI`_UL{q zDrrOfv!MOKjAzIB!NjMU4%yEFr`X;Xr+8wXMTkZPuFsz(vhg~%`&3DwMBA1SeHXur zl|Xrqf)qod0@ON(V;6fDQGl?qOac;HA2ufZdKS$M<0)?PdUFtDqT@!)GbnQI= zuiKj1Ox_SiJ~q8Pri=IZws)S=w`W=tmxI+VP4R$}GPdOi#q=psGc+xS8|AJK(0-eE0XxK;ph6q(}A zMAYP8(f*u=178gShQ!Z`?u0MSdf)LqITVSz6MSns8bm3IYmlsZIXc@_ZC5+#79@q= zBc@IQ@-^jWI~l0N3@`(qd_Xgg8A^*r}FYosNkgu%ch)=SoVm5 zQ?+C0n;JRX#iml{oR0>hQAZ7TN>FemBwWJ$fAo7Px#5eg{-Ake1-!wSsUH@+%UP6_ zLc8<+&Sm)xY&ICPU%!yug@+?XF`P)z`Sl57b!q7q6_W()+~Fg__Usw)ajwm4``?Cf zIx4TWN^U>~3%zBxW7=N+PC%AVYibS{qV!j;`=8qF9)Luf>r;h6c{VZtv0mLZUQN`2@>nG*thjPB+UT-4 zfc`giG|RA)QU1nJ%PSoHfaJmBq&UTds)-9c4}Azh&gP z?7}y(E9!*$ej<#qoc*EhZfG|b0w6nx2Z@LV0FgIbI4Bh>3gD!dzj5udD63g5G1@NP zXp1$^Efb5RfiZ7ds$dQu8zX4*Q*#uAsR5!6CbCgr#XVmkYTv#_N5P0|m^PZKj6>)M z^@BRI`XL%uA8eKhIszKhpCmqN4)8junjL#uw-7~t;8Gze5*@X^!@n7R&~mxl9GX`@ z*SaGhSyfPGbZ{#EYD;i7$z7|xRW!4YC&mA@mgSZvqXV&sk14-Le|gYS9wvOOCl^2` zH+tCeCdUL#_`!(79Z#i-YpEk#^gnubN_>`5j<)!9y(-dAxH(9A>_oG0E;aIEj`Zb? z`9mVUvdCcG1r_TPHLe0hdb!9(LJe~4xnR3p_L3~_2{|FJ1fspv-}U=(T+ekd4{_^Q zexuug6hkM0eP9bL1tyad?3sw#tp@;Y63>QbW)DRKMIsz~EY@EpaBkT&RjRjJd!1dU z+l0beBivR@>b-XAWUYj;RTHo)rQvgQ7dt}p#hu;|^{;PiY@SX33u3AjCjAt-L3LUz zt++u*pS~wekHsdG-vrUG81iDN!6Hl+IMPCgwVfx7~z_SH5cZCUWv3jjD$hc_z) zl$=IkP4{jdsLDMF&;;x-&fzUi>LzboI3>Mm`d`a!3Wrry^A{`dNZVbd8IVYqXTr$I zd3rpIi71FS{;k1i7zf1>U0_jNefUEh^2CZ592}N<7A#H};}Nf%ov80-<*(cY89^!Q z3@6eQ+NUahR^bxHxbSRZsRRh}0zdvff{L#jDT_lc^)eAf9AMkN))Z+S8g8SzzR2x8 z6H_|@NX>6M|Ala|ZI)!>TscNTKCwLo+L-lqH{W4FrUE-})$9NnwUU$Z&H#n`a03Fi;-)Ol7r^3NaE(Y{hn|hT zxZjxNlc4#R?TaSQRQWH!DA)Cgjb%&!BNO}1Q$g*=BRlDu4owFv#4${G&%laUs4qCU z((dE5z1$Q$l>0>n?R=1DK@YDc@AdS$=L9d(KNpdWx?!QHqcJ#ta)+=Jy+enOl=uiAaXx%Z7$&Zx5ze! z^OV#pW>AT{*eTOxKF;TxsrWrDu#dw{-K@BVh?~j1n%S;W0;pP7rv>8{?yu24{-%X1 z-w=bVt{4mBbD;UgIWy=cbYLuay!soO2457T-`^Ni?4Wj_t~F~TL=oN@zf+UcO?_Lf zKx(ZV%e<>KJrhyccyZYyamiUpQ#T2aRW`oE!Qp`}rJ}k$V6m!bInbf>Em=t+XvBQW&>E5pd1ESs~GsQ4MHnK|yveWJw)fxWDHn>GhCt+>-cUjI)V3SrOf#VCe;c zcXi>vtJ5~Tzh77qD0At%C+C-der;S|=rUI4!o+-#7EI^2`Y3x86{@HXOMGO*FbjwRNkyM~bV%Q_=CN~0FlXK*8jUj$q;I~pHr z{`BsqD#SE32CaZpqTfP*$XzQA#w`4Xd6)N^dcK-`GQBZ3;1ZXWou^U5Ffcq@(iFMT z8dh)7kJq+dn3gV@S191inFxPqf)fNls=8YOJ8$0z7YHKTuF!40MH?QmAVe5J@m{?O zR<$I%Cw;uW>Ys+@4KImpYs-E?brgja-VxZP>p?icm5i;96+piX=yL<4xT1`V`M2!eBin_{at;jH8Tx3Mk9Y< z8!wY={4?j48|ao@B1V>}kf$mz^?on&;YD?rc0^m@xlL(*mCaZWa)kNwXq;;mCs*6E z0nGF6^TgThy*-Se~94 zYx)D%Xo9cvnBiPWIH3C}Jc0}XUfG}3)Kfna=-)ztDU9d-n<#HSUHGkqbm+!VpU(tQ zOd^_DZ6C;PJ1ls8$El7)+(#uJBd$ZU%l<;{|19{E?3i5Qy2e@fG{T&>I_T2XAqA@S z>yS{UWG*^~Z%4tch-8XSm-0nDy`m6481>9T$WVKuT2nTLdXPS)v^gUKT&|9KQ@!HI zjKA*j?h`Wu4?r#F@)>oAHafNa31f^%2W`?4??DV(WJVSVaj>TKshe~O++Y)Aax*?g zcH2{)fzz(w-~^^>ThZVU$mvFOKs4Av(8T~Q`6pW=renY9bth8fD%r2o6WcUTiMjd%8E?8bN8EzS!=Rn(C@jU+J*AzuKg-&%;*W^di^B!jaei2Yj+Ch_iap_4 zSj+fD(!h|Bgj!v_=1Dsqushz<`S2mAnzC2RzH`iRKPMPQVhf{~BwMJZm|+VC~h!h=~a1 z`=z#Q7QV0y4gP%J>xDe`5QlY#FFPA&u%*+Lvf5q}yD^LY&TAQBX#AbAnjsFbCvK-i{CcpAx?LN9fnSEV zVo6!H?uBfl-Sgwp57j}LNsxf~KpBZ-k0!Pp0W(WjpV^Jz>9PEK4D!4~Rq6*zfvj6O zJN!%^5TX~0)EqZ0e)@Nqki}CU2WrbNvV&l4y^S`43sy>pLaz`ed0iIk!eqTGA zHNX#(9~;PatR@^KarhCSgb?7Xt=*D9HdvIaPda~qaG4KnaN8a@TtdU0HIQ|zIq*(o z_2^1Ni)M^KKv7>()#oEk=8#`_Wk*RN^OAxy7lqFi>htLV(XU~SeR4{_8xE1&Td;DO zP<@F#qBflG-VTwX?Q|9!ZcgYAHz+Yb7i;2Lq!?Hau)zk|H!ngn-yX1G9psdrTC+ds zR?=SqztU%b>V|vSv~LXFWnB5y0SNAp{kM-{PyN)>e2CR+1TCvZrRSwbbq+>2tc^1@ zJZwP^c!;;vY@iPkg z&t3hs4~yBFM;JF6K-8W|B=^>=B$Z|Hm+Pnj&Y3>;d^V1$B1K+cL4sf4HBjx_+-HBb zGt#U6pv%BHUlQT-mXE^@q-x~!@?OSCg}<8r`e_SoI-2OmLN?Y%OFOhIizY;un^1{` zQNDNaD_>9+gzWyd%fv#o5NU)6b`_I~e&WT_D4nb)>_CU&`{Jpjy`lYWz8vkiX+5_S z5W~OVG*{h%GbSNLEXpebE(V~!YL2>I#N6~*FE4|h)iZ6Ys)6Bk<_ zeW?a0R7-|1Ty_UZy*3 z|BD{)tX8CMv-+a4X;dr9beTSnbYb^$){1qIE!T40Yt?g96So&3f`~2{L+LKl9u;($ zCQ9cYh~C0((O=(+x>kv@m)y3XDaq-u_(PPLLM3snx1Y#!XBt-C4>x;0fX(j3{+7BS zo#Mb7)u=e8~C0rNlH`3}1qLN#)s zDx2G4&ea$4V+Ua`G@w_<-e|M{%?%^Tw%~vIYZ@FUgWDG6pt``B;)7-Aq>_K<5+taCo`BBZ<;LpR<#HG>SxA5XoM(<~ z-F5-j-s0xi^pkwuD2s)px_uwAa|b?XFi-1PjcQlAK!I#~beD^j)r+JAw$39_@EtR0jkw_t+hsJ}K;M=x&f@y%!M6cPBLmOOd5zn@+! zf@@(i!>q^&Z?WSX-7#^8qW%d2;^ZK=q&fokYdPK+$MfM%ZJ@@+C$JcF4V#E^0nbFM zXR~XKdq9+P?-)Ef$nSrF(hB!L21QcXhBU7g|==pP415ZQ2_0 z>6)T{2}xRa0;HB7cZ24&^i~BcjKnv&A1M-oFea!1U>rs-HrgC?Y)_zx+oN*S?qrxz5J8?0kk4O5$Rveqg+37@o@}IM%$y-0rMBlR; zACb4)QMDzBk<>j~^?**2yMOneOr_$A;HaT9CqzN_E$KrzAKb#LcOCnld_Wk|x zPv9FWFlkjUI;7o(}SUC`7;YG@Hsn3{it=Cw|2sC=@+P>*Rc!jRfW&J}(o7r9NDQ4)`ySD8B zk;IHekvsCkYeqK_xImZ3GnS~LTjL;c$=knGr7n(f%9yd5l0|57Ei`fsBEbnJp=^5< zA&R<#t+B^~g$nKCs|s^SmUZdM-+Nrd6~6gfvjHh(FWs|TPgMj7y^6-?BIio?SYAI$ zKW!H!W9+6x`Ia5wo4OF#-oLk`ittYX7V()kArzKt!?}zs;#Sj0q^7k%ek?cW*p#&}tzpF942o>CJYd})6I0(qW*|>8)h@30T|-_eD~Wsxl05feVtmL2 zjMd}JKV@YwaXJ?P)b{wt%FT}-DBO>1c$fhRst#h*Vd3MEDp1EyK*Kf?UG26$w zV#uo$hOgc|g3CS99AQ!%du>*lUl^uZgxg2UDh3Ny_D3>^?jXtyqA{;~JNd*4gCv41 zz4LCI=|lR~hVp?EFFS41+~R=}sUU%lf+5l-QBvRP!tnYzLa#!ZC32Hk#3dlg9{G5yQ zC2Udb>nDb#%MVzzEB3ha+@|y+w)0~8wlQplP1QjqgKGk{#UPy_qrfMtYEx>LEZQ5jYit@s>Qn&L zihRi6S=ErcdXzh#Yv6fyNlzQYt&w^nnS7s&yc({alXedWt^m5nsEgg&GExuiTD8Rx zT&hEv2B#L(53q0aM!5I;=tk#$^$p6pchdAKz@$xDz&GM_?gD` zJol;%G@7UVNCJ2o+8RYS|2#++c~6d$nE-gDqtc5oz8{6Q z>x~H@lk#hH^<=dznf1)MzsDLUzhlhno`T0Z8=heCg2<8BWj}y(bzV>I+QdP^Hakbc z@y4L9oaL-W>x8`=D$z2H89dQNdsTZq)>?fIbrep>kX9(+rpNsvnj*YHO@Ah&cX?cu z6oF+LTp%(FmQY6MId58CoHl^?ydGS#M9M)`Dz)eL-#w!*w+{e`SwUX0>% z>+o>+jnWqnGtMbeDrgfAU;ZXG(ByCq)dV@$+b^va=X=jY{~Vb9YHT73{|CIv>2oNaHEmQ@6c=9&Y~kh)D@v%`naxci zMkwxxrm3hf7^6vryMH7mHFm)0NkuUuQY3%XoT`uY3twURIsW}Fufuj+zwBx|L(_72 zDgTGm(Bmxia ze^N5sm_Y%l-oc(1QG@BxKG&B9e*Md|58{ZgXV&*!C(1VU*h4f)L?kVLQuoTKgmOP6 z0E(-b7%|lo{j)!J`j++-u=u(S49H^^JI5yQgp|-*%%*awGeu>G=_r_Wpv3{x-hW1^ zyJf!3Jf{7F=C!Q+_vJ_j1naaeP3IKb|G-i(%@e5w(;UcgA-s4hE^B3sqXJg|fBibi zYHzDsj6fb8n?G_-G?`@^-ORmje#8F<(L5fam*oSqpd7>?KRuf*ZxWCo!^wG^m5eRr zsOi|W3FF8ZqHYQ`y-*y#&^>|5qmr1`7&?bl4dEE2SIjN`=l7Q zDlRcVhSWEj`{nFi=K^J^_3)K0mi=X1h14^s{E%Z`S0adk$oA^+^un`Wwzn zKFqQO`!P#vlCX<(jBEDmb6uezQtgkf+XybfgI=zPMkZvst5UB!od3-Ld!_GRHh&nv z#sR@MM4-1@tfnuc4{HtsqqitcX!_%1HE zG)PE?bb~ZVN+aD!gM_q{f{?|ko_ zI%n?8d_Qr&clTZFJkUX;bhSE$-@*QnhVFpv6NmO~A|_C<11x9@B|(;hr{`|lMn7kC z;AhJYltmO$JN3^)K@&-x?7}sMSRm;iyK|d zK7zG_!L5FTQMxY~eCoDrShesDH~FRV4xPDQGT%~|>K^(`zH1=*Hn|_r&AOiXD60o( zYZm0zq^{OkN+sMAI6%-Wt7PAdpb+rnXx}bH`(f~&*B^3b=+LV{vsaM4d@I6Li7Af+ zCCk8}8h!Rv-`j4(?4*WZdbRAWEUn2WHpE@Vw)6*mqs31k0ufKX_Z~Mmr%VL^PvYo@ zimFO$TFdPgUi*fEkddCQa?9m3gcSf7LTZvpxt3I05G%_1qEF0yYP7$vVE!@4zeowK zqebpehYa%Lv*=gwTAg(^xnrFUeETU}ok)CRH&Qpx4y`|}@I!vgKyb-O&2(^~wLEX% z=(+Wkq&uFm-yZY!abHgyOFE?bAopjuOY(u8@1+1)LT_BDf5(;f&h%2;Q)7VrWG8tU zH82bLb3Z2pp5%ePo%LXXrB{VFSVCZ87dgclaxLPlYSb2Y4zWQ8Nfn+lpNgM;YMk8t zNFG{gnUXDiC6ADBpYktBn+;S9oS+AFcwm`gwkwT}!3u;LN#_aU zQb2|1ftXK~&5>*~B`Qy}KLYwh1$sQ!rl&%l;@vU~+VtpgSpoyQpy=S%TurEsBqm%u zY(6}#W@90DVnu1}lD;rb#$BKwBq2mTMwM)Say!itp|)t(yzVBS!Vd` zRBfHGACyKtbbc?d95`}6Mscc3Ct0&D&qZw*SjFIC`bDwcZqUi~<~KlR8`R^BV^z51 zV@93ToAewLjP>|rvt=bG{{kOnI^d>rM*ZsU2k~s*ta7{e!Uw2MXkbw|&ZDML5QupA zk4RuZ8=szybh|KW)F{Fif1Xy=BbEkvi~C?Pn!)T5x5~`7@Ev2WiDio;dg~I+t(V_G zLV_XQJ+PmuR1_bKdH|xLLe$%Ho+21ogJY8V0r2^K#06vJ}o}@Wnk|eWDeje(?!!{W`5aOLNnLzQq*!2H~)TMWd~NM%|bf3|Gs_4LoV&{JSh9P z#K=VUH?0tHb6k472k|xiq=PMs;Aa;R&lxkuLsp**YV?iio=jtToZ`7!Zq`~yQp5$d z&bG~wfYR6)VR)5{}JIvCe(wchdHE;5%h^xTuMqvlosMi zMhI!2y(*nbbcP8}%D-dmFZvqMq{f{t#9C#<)@#ct?LEuj@JaesfgHOo&&dAt{w;pB z-Y{SH%pfoma8jWkeV-%uhs6NBw%d~N(pOS)G zaz*^SZ42mNy#;9-9fLurk#cgnE)_?Iq_+nXvyEee)^IAaRA}wsc)VJpAPt35WPG>c zh1fR*UPaJtklnB%0LCvi_$H#Kv|!j=A;LGKM+zXgxKeA9`IQsrKqzWgrAg2&9Pcq66RHvI?-hz||?sueli%(^E9`E~(|GA9Y=QJr?_2 z{A362GOtm9FCd2hbYYH8xS#9n&a+6y{!~S8fg9UBbJacPT0%B`p60YKtQXSOn6^f9 z=mtQE`rgrQmrOkC>P3sm^1w0#dl5)4MmUy)MyoBw>h$?EYOvu@kRagScwz8dS1S{f ztSY1gU$|G-voow9&mu>kfY>$D#I&mWl$0EcjhQ+3&8CSVlnhAu>Wg#3Y6QYJxMj5$ z_6o)1H%g`i<*V};v0)ggzkib=Lyh8b698>=d^qal%Mf@-OX%bSo(Z>1r5~-pb84Tx zb9xC`(19jn2C_Y6`yeB+q+j>r*%)mxMp$kVU$Vbb))W_GIB&_Iy(8l_xdjAf_9`DD zJ+4Ah6mIXQ*Y&!{*Z?P6bF_nW436t@gUDqc(4-_l!9ZSB=P`_}7$ZW{%kp8UfTEiH zsVR0v;{=crVzLG>&F zNA8ZzFDojrCYB=ErnVy>%*uxYNVy`?R1@EEMrOWhd%yS^G>K1iH9#=rfMdP#$N>^r zg`M==lm|~MJ)0^p*|-dk0Ak1)utk6_U1Fr&dArPWpJA25o*&c=#hFITGAN7o!d)>Miz52aj`EesTj06AmuvWz*K1_HY@Uue22=L6A zx?rsFVaJ5)XEMR$&)~Njz0!$a+~PlqC8A1vh^*e^18LMXAyC)v$_`#@8g9PJ9pS@% zJ983ajtfnE#kcbi*1>sLk$7d>GcF^c1hVx^RjxQx-ZS24)nYF9!w?%CzFYhpBVLh_ z^kN;L*4uEVDvDJtDdk)Ot~)bfNv-?-=v;r&(WG6hB02l0eJs_r7@r>^HPPuFlD)us zGgs+wgk8-?Rw5zJC;HWUmN%1wgxln5wA5DCW6dgYF8G{MFuF@E9M$|svJII(&QmJj zj`O&DV_3rWChRl>y=(tWkDVd^{wBY=*^_}1N9p8lY`#T|o3{gabn7@F7-B~7J2ig- zDf!h;So$ZC8y8ZP!dbfZEIDn8(Q)>5f~R-WFu(8SxX;KSq73+}7YmtR7i8Zc7*qmN zq`7MwpCAKF0y<57yShe`2hP3`oO$xfNU-m0zs3!Db1;hDjl+F&qv(KJMC62xbuzz^ z4r1SJq?9^bHR=GoH0=Fpb5xDXW9K?9TU_=i+nuwCID9MTxu2k3&D)2KJa-gubh_1}AUQmF ze8pa^%GL6u ze$~m(;x#aGq^0LGsj4#BRBkbaacoEj0vm0#Wlu0I&2^EI%dT}pCHPWsB=TDwPqT~x zL1*D*^PJi{wSG&rHeqWmd^9%&_zgZG-st-v;|)Ew`iT)A)tqV^ z9ou#p--t)2KDTkH?-)>v$Tkj~8GNexLVliv2NQHS)(S4$Goe2^SE#-O(Yl<* zHsr@{H%rq{yPlC&zIywJ5bFe=?@@>?YL2)~k%}~77W=Qyg0N<}p`3xHiQQR18l7}t zn+V`LFm)U>R6DOinN>lGXsmwep0`L1SkW`~cWx0vV@IzaI_jf{T* z-rDxi5GFt4%Bm`+%lEOaC0y6{D?;Q%e^#d?7NpM6x|bPD>>`XpvogrPQc5bl7+;=- zLtzYT+Z)kuVO@zM(CTv7c4pU@oE(BhKLLAuP2A5Nm&3Qy6vmgL7=HEJE$jYL&qk`& zEEY)AkpwLln;S~Uu+UhRup^^Vf)vht+)rzXog?Hs*>r-p?LehNr1K)aTLq9Rx%1UJ5Kv27GlY7>XeLh&xK{9W%93{W)`e;0&XqWs2%6Ze(U-L6wTQ5-lL* zff~py+D9G(YDkT2<6bbKV%+=#0k@70Na$KfJc@Ar7 z;&XqU0fwrhn%GJ zzud5iF@>O9H&0*O4WyW8`K1{z1O$BGGeh2d^{4!W0oVWT7iHIO1qGR3KXA6ZfeuPO zZgoSm)J4_ycNG)4@>~H#%$}3 zs@C@m=yMBVUkXDGa^jmY8m7k`@{)7AY`upG#W?*SrU3$hH8%v|sAN z^K=~*wAuk5SV^w3ZPZ1l1Cli+HS=iFP$cOw_=3n0TY(NJuCc%^E0-y~$Wx(0c_u&`b_~MvZ+A{;B0f24Qb;8*6mMoln|e#GLcFvn)Jn znA{w8pzx>!feX;}$I=Zk@wf$qXNfZDJ#ZmG3eJNEkr3LK#-ZEnDB=FKBcI6B$A1Rw z3W*Nvl6cZgTLi`_UTe{#)_6=Im^(Dj4t&F=QbNl}7HVI8xT4?ZIg`>0Z<_|Fx40O( zrWdGMD0=r0+0i$qw5n!~P48nhGtF|PYg1?z^{F|`o&e<5RP_W-ohqYSQu0=#byjy7 za*~5|ewS8^tD`kAd=iQJ5euXaiQSCt8ORJNj>FeY#Jp#*c-R2y`grmZX-63%?IkLCKr|70af zx61f!C~$H9^{%_O71x7pOZ`6aBq?LnqcUdC7aBzUeA6kw=1&?9baS?4(%7pQ-}>Pr z>t^cd_H_i0ZFr2KV!NQ+Gpph3r+vFAHtHv78(fA;=G%4_w{j5l8!Q~F!GY@fy~m#R zav~PSlJ@|R{0Ogs(r)FPkfB#zXy9R@^%L_pz}vX)_k2LfRBL*rnppTQY7CiP&H?^2 z(Ks%WmI&7ahH5>c4MqXHQNbz!!szQhJdlmW7Cd%(oalEk2rqK*@H}KQb+}RP5-U}v zN|_`AeF*DY)!Dgiba+#=70WTRc&YHL!zG$6mV>TlTn=txKV1Ui^Tbrr1IzjE{X50q zfzzz@bBp%_IcEwD-U8w02-ac$i-c0q5>qgZX7)g8MAPH}KIDc`7uvu{Yo2pe0YRZ# z{`P`MK$gZqG*rzom%;X~1E2hpW2ZHP@gpG%m}FU69P8aNip7Zys_&tSr6Y1i^FW7- zr}+?eKqZU%J~Z&^pjZrUooZe5_)2#fpenmt7a84Aq03O)5Dkf)T=n|V`9T<0ns!g} z1s%4zi*t1@H0ak?^39!RmO{7&3l0xLgIn8Pa=h#qi3=gQZHzwTYU#Rw3Y!E^*>FC6 zc?LFt^4J4&fCen5j7{4{ZuX z>1=;H*Iis8aCQMAP4#k}i6I&kAg2&p_3XzA`6a)!Sq5+Cn8yy(n+ea|Gkm{n&8(Nx zy|-4lfbw+l{Cg|BKhU9$JL1%MjpsLOis;m zMt}ln0AE&`-NQnOpzwq}PlzsplL+l5%@kHE6h!qnu%YgYqo=UD8)aB zL3u;;6-{Tgi47tT6~)_tdTbe~M!vWo1(Mv`E4ww>lTDu38vbl#)p=6oWTv2oanT?Z zIiJhAAiBme?bIw3z0^|*G1OoUIH}4J*B9ZdN(7I0x|fXUR$B^%d}~ktiBUz*dNr>y znj?*+r5|nlG+M%x?pTM?^PFYUXXyh+1mr(ewKuFqepywX*n*Y-9FKPs)LsMicqqkr zn5U}6sOHP=c{`GGrf4gsLFos2B-g~AdDAyKdl@KgwZ|;;LXfs8_rO6{woGE7Z+zDV z(Ff)W7rUykfqFJxH9?=`nKILj`<;BBLQ>H!I2FS`OFEOLiVyj*2`40rLMb0dFxhRG zJ{t9s7vq?V$>#wy!HXq63H6+A?OY=~t+AY68@ZqnDSg4rM0Jk~wytx-NlfLdTcpWN zJ5LYLni%tSursOdMadad)iZ&D{0wL{kUa1-VMm+pXQ4(*0p&_X-IT4Dp$PI}$J?oV zW>oomgHT9mHA}5ceX=WdR-8wQ9p+>gNaBTV)smT3ImjN%Ah z0IfA&u6-(|tdD#d=CkZwcRWNMWGiSvJ61VP9X4+7tUMW<>MToc6`{f9eosP+(J~WR zd%o0?m<~B`9s6SMo!K<8k}fQs94RfTv4Y+^CJ{8BZK^*d&iYwNJ}vcl!GBXuMZU*J zRdiOCU<@dx8tKrAUf7lQc-A{c-Ow6>Z`$Xn#ViS)aKwC;g3K%ol#cS9%7TWhn8!cZ z^fUDTIE`KfDIJmBxkXZjj)~Q@*PiE!{oc%N($Eql0wt@T($~@VP0~YxV$1O{f@oam zibX|PnfN)#pz=$ptJN-Ud;^o1i#}{Z3-4v&PC)%?o*X~w1i$@znYqVE**b=MIBP3j zUL*C7@92?Wz4)v z3k~!)+(m72Y59ZSKJRjwf#j$?j3YZ*BJ@7QP&T=ZgCkQmbc-WM{ z$;KOs8+^VgNNAhXv#-1xU;`rEerjUSmD?tT*BGXU(AhjMN4HMR{2VvZs;Sj=VrAl6 zkQP|IoLFd_{Kq=IsK%^J?A+#T`q0u8CP_RERPC`*nGhKN)%4n0?^t8LZwKwgoze)a z8jZEr6<;+-aOGzARTn%?MJTI^oYxIF)5kc{Y~z<|E-YxQFKqj4LVXju_ETjN`;+ix z22Hp6GmL4UDjgCb@Z!Rk73#C6lomeiudNRqB>Rt0E{Y^WSn7!TTq}NVvOQqY{($ls zRPv;9hGSbs%`;dfl5G8STZOxkG)QFw}-0zhg??P{=TN% zv+5uoCWFQCE*Pr<{vE?A!+pv@=q7sPPCIRZEosKep!*@`ML3V(;^fCu07_CPAuj>* zI9-khKjoIT=I-#OkYmr3JB$WwkNPS0;lGY>yx9;`7HbcVP5uD3=^4W|vYI897`Fhr zKbM!mH1qR&wHKr)t11JNHVgja7%${ib{Xk`K$`c{e~HBZB@9FFg<(g)il6hfo3qm& zQurTK@n58{O1}zD2MwO&QcJg4`E4?IOSrl1H<+PP@)HkPw3nV2=lp)3Z)CD$e=yVy zy2}5ed)Luuh%wmjhuNI;KvYZ4c}e}d(=okuakjB~#)o|)gtYlS^OZ;{P+v4yyKRORel4(9$+n0?B0YCZ4w=>7eqt_(&Ydhkz^J2jCG%>Fp{ zFO{3r=s(NuwdK_D`$F1(0Nwvpc<*$p{EK!@rK1NkJpQNI{dbH%X7XRobE+vln4Ho7 z5$NB*GxRTM`H%1XzwPDR*X6AGcU?P6XQ#h)X6U~T<^OK8b-&Gni6Kzp!Vn1n1^okp z{;$w~An5-*fg~WTzq)rnlPn1OLfuv z-`-`VPdm*zmt~?*;2fnTi#tj}Ra&NS1*$rAeo8(xbMYhn4gVsVr-}q_n>F|Qv$K2V z+P+zP^D*bNX7iZO_Zk({e#Z!?%o03u@AE8y;tw?&dGAKVHl(*Wjk-%9-iVOvPOteA=^keCu4 z-+APqCCBEk>PzkYEDr`Nbt~0t+fABzMYX(EVDF8V3kz4O%vQ}^;Hja-cy5gCK}O|e|DP>=>bpAQ)gHsRpO3bkjQ-ENEsSUB z)NXa(yZd*Z-j@O+sg#P>&V{|uZ=uOGLRm~9K z&CbE1WM{sJk%1wMnE}XWX5nH00ZU*scL~WzvR;t{MKd@`5s3mMyI)9!ea0!U?B-WO zKlXwW#*+(La52$~?Lj<@Orp%NbTnP8hEYcxl9D820=yA&K;x!I0woopi3&v$n6`Z3 zZk)cXhEWxs&LC#M9qbEsIh0^$;DK=+-a2LoF)$<+7pImK>xV{gFu;6;<_O>SrZdHF z>}6nhvY&y0AIX3vjdKwOWKQ?0W#krz`W?lsAdlqKGDZ0Jhyb>i_@% From 8c2ea9f91a0779a829dc6cd8bb84287e541fd62c Mon Sep 17 00:00:00 2001 From: Yagami Date: Thu, 20 Dec 2018 14:05:42 +0800 Subject: [PATCH 011/442] * Fix lang file. --- .../module/admin/ext/view/xuanxuan.html.php | 2 +- xuanxuan/module/chat/ext/lang/en/xuanxuan.php | 1 + .../module/chat/ext/lang/zh-cn/xuanxuan.php | 5 +++-- .../module/common/ext/lang/zh-cn/xuanxuan.php | 2 +- .../www/data/xuanxuan/zentao-integrated.zip | Bin 75071 -> 97878 bytes 5 files changed, 6 insertions(+), 4 deletions(-) diff --git a/xuanxuan/module/admin/ext/view/xuanxuan.html.php b/xuanxuan/module/admin/ext/view/xuanxuan.html.php index a377af3998..b33188963c 100644 --- a/xuanxuan/module/admin/ext/view/xuanxuan.html.php +++ b/xuanxuan/module/admin/ext/view/xuanxuan.html.php @@ -109,8 +109,8 @@ goback, '', 'class="btn" style="min-width: 120px"');?> - chat->downloadConfig, '', "class='btn btn-primary download'");?> chat->downloadXXD, '', "class='btn btn-primary download download-package' target='_blank'");?> + chat->downloadConfig, '', "class='btn btn-primary download'");?> chat->changeSetting, '', "class='btn'");?> chat->help, '_blank', "class='btn'");?> diff --git a/xuanxuan/module/chat/ext/lang/en/xuanxuan.php b/xuanxuan/module/chat/ext/lang/en/xuanxuan.php index 8f55035265..3b6d432358 100644 --- a/xuanxuan/module/chat/ext/lang/en/xuanxuan.php +++ b/xuanxuan/module/chat/ext/lang/en/xuanxuan.php @@ -2,6 +2,7 @@ $lang->chat->common = 'Xuanxuan'; $lang->chat->turnon = 'On'; $lang->chat->downloadXXD = 'Download XXD'; +$lang->chat->settings = 'Settings'; $lang->chat->turnonList = array(); $lang->chat->turnonList[1] = 'On'; diff --git a/xuanxuan/module/chat/ext/lang/zh-cn/xuanxuan.php b/xuanxuan/module/chat/ext/lang/zh-cn/xuanxuan.php index 80e000ecfc..ca7edea3ff 100644 --- a/xuanxuan/module/chat/ext/lang/zh-cn/xuanxuan.php +++ b/xuanxuan/module/chat/ext/lang/zh-cn/xuanxuan.php @@ -1,8 +1,9 @@ chat->common = '喧喧'; +$lang->chat->common = '客户端'; $lang->chat->turnon = '是否打开'; -$lang->chat->downloadXXD = '下载喧喧服务端'; +$lang->chat->downloadXXD = '下载XXD服务端'; $lang->chat->help = '使用说明'; +$lang->chat->settings = '服务器设置'; $lang->chat->turnonList = array(); $lang->chat->turnonList[1] = '是'; diff --git a/xuanxuan/module/common/ext/lang/zh-cn/xuanxuan.php b/xuanxuan/module/common/ext/lang/zh-cn/xuanxuan.php index 9d70f7cf5c..6a4481e6a6 100644 --- a/xuanxuan/module/common/ext/lang/zh-cn/xuanxuan.php +++ b/xuanxuan/module/common/ext/lang/zh-cn/xuanxuan.php @@ -5,5 +5,5 @@ $lang->admin->menu->sso['link'] = '集成|admin|xuanxuan'; if(!isset($lang->admin->menu->sso['alias'])) $lang->admin->menu->sso['alias'] = ''; $lang->admin->menu->sso['alias'] .= ',sso'; -$lang->admin->subMenu->sso->xuanxuan = '喧喧集成|admin|xuanxuan'; +$lang->admin->subMenu->sso->xuanxuan = '客户端集成|admin|xuanxuan'; $lang->admin->subMenuOrder->sso[4] = 'xuanxuan'; diff --git a/xuanxuan/www/data/xuanxuan/zentao-integrated.zip b/xuanxuan/www/data/xuanxuan/zentao-integrated.zip index 18e5261af0b6fbc2af305bcf36ba820dd5e29c2e..1e354b71a23dce166fe5df451c381cf0bdb13474 100644 GIT binary patch delta 23851 zcmY(qWpLe0ur0dH%$%5+nVB8OF*8%l7&B{|Vy48*%*>9NVrHh8VrFLVm+zc+>(-S@ zGt&H+HJV;C)xFf}9)(?eg+o00R*Ux+dahI3^`P#q!bM7s>~NJ1AUGmYPT$4hQDh4U>`r(#poC@SW8P z`YmKppNsRaOZ0a7*;jjg4A^0?zbGX?$pt1NBV|du=kK^dUzw9DRPV5DH7&_&aU*Kq zcknsw#~ggEwNj?mL7RCux+R9?5cnIEJ0G1Je(ojNtE#wsYC81des#PL+zNx`auXD0 zpbPk8<`l6_s@w9>U%c;rA5?X-Es^0*q)b(uL}l!q?4O=p)I{xXSTyk8g(M`kz3mQ; zkxO&!jdB)A4jYkq&Mh$I`1m}hy=O5bcp(G_Qs=l#4YPM~6dNRK`UQ?YqH^y(#a zVtA=SFwKZAXS3QXiA{Es*<|hy+qYwlM2GGM>(oGSBSOky<}-x+>ohM;h%Y0gt$m`O zkkFHAD;Xdb>yNRMO5*BJ7pa_uqO!rv&yMF@2{GSemYI0Dxoa5%7KW578umQYc<8kx z9|ao$ZI|*d_y_e$;BC~sRO}1Yg$ylj`iRWJ?7KCNHJ(T9sz0MEAzh*4iH{H(>{x4% z&`7V}C4!0q0%D=$0DB7*2owkd0{zDYWYB-d53iq!|8w*I7YHCskg2Pyg_|pzrVc8I zi2k4bgU^Wm$NvA9K?466Q;toIAi49uj9I{b?EH^KQ`3wHO8?tdKNF?~{2#`JXny~H zPze7oimQd=R|^*wQx8)&Qx{feN2~u}|3iI4)=ENA0tBjyLwPlY`}a(44t!Gk2kS!%0)az7pyz*W;6o6| zogD-^HUWVIQ$ZjC=geQK!XS`1NM2e(!wc#x3#o%xrU^2&ZXYiW4JCOW6JHyW1r`U_ z!eYiN27&3LnEP;Y@&P{FUOGnQ^`0SgWaxVOTrg!6ETXS?Gl=3NQhW$CGm`0;%M0WU zaNkT{^W=P(Tojq(YMDBin==&I&@53}5O6=vR9_%c$a`nF%w1YoY;dn^zbocEajBe| z*-Wpjao=0Fr+RI)dgFKcntivk-p@%4JteyLpgv3HVl-YC{($cS#8&OB+h4diQ4IMK zlj$hyTh^?(tT8o2x*@xN3H(B``=?C>$T@ZozTyqx;A>9e#a$#p4t6xFaKJnWT!gda zJL#`OKWY;Abye9r4-XSHvPMe11QPiun*QlTq|W=h8rMCC_LuObTTZ#@Y~^D03+@o zGnJvO^GaW6Pjt0C$SJ421gwuDd2mEiH;2YFz?}(F>*6dKnD_Y5IDv@+a z7y7MqUI9XP*)Nt}A6MwuA6J`UsGeivO_*X$iTzbiU}TLZbWuqyU6y=eXU62UuUQYj zhDMJrQsm_pC@ARtjEWWuO&wc^0@iaPNw1=-Lcz=21xK>TJcZyBP9Etz9DI?nli+gU z@9A-2c|-l|`mUtN4W2h?pBP&RjmD1%6UTnR(h*W)a?_~#YvmGfa~N7T6YwiN^RAUxDm$7d_!0)?o{y9b| zy`Tow%7LKiaqhe*5oD3`-Die1N-jQvL2eQeI0IL?9M|-M6>cZoXi+FNV(GBWv=gX+ zk|o5Neh#9PtPk@jG^lQ{Zn|JhuOIUp)7JG4X=x+w$Q&xl~~Z zOE3ql6^Ju}RtvuPK9qQGm_Cc7)sRk6Avpi($!RHeeZHs1fAhav)yn73atCk@Y z9>A5@p$Mh?Z>lMgEFf2l{ht2x;{bNe>2K>zI8Ut#W1}a2+x^LmpP8%(eA>zjx)*X; zT3xJDl8+-9xjGR*(ic=tFDykh7crf_{qkUjo&u z?#b}Fwy8(X(;^iJZaii@f@xD{U*i@f>PU~PGPuBhYBrzsC5C~}xh#ut2MfU(@vDLKDT>rM7}VQ^kX#Q24x%F?sI zvOP%jl4-5%h6q_G1$5a#>pL0y{b)*Jk8C&YQ4ItL5#U9d#!X&DcVO3}eZs8#Drs_$ zL)^)yOG|Z@t1f)<@hRIYYS03~nS7Pt-wXfLkr;(R*!5XPHQ!fj6Q`JuLl=&f;hfb%}a%)xHY% z>7EMkI|(>mwCmn2fi$X#J4(S}dwYCr&c9eiPfPpP>!Ri^GT5qvjeW-$Jms0%o#J5L zq_3A@t0KPI!v=%D(08DRpJVe&v>Zb38KWUNtQ59YwK+VVZ$w z9a49$KFgdr?*AV68ylqFc}4gf5Hl*q>JFUod?Bmyml>d$g-<`TK@G7oCC^mzEzIxD zm4F4Om=+xUG<}80oEcA9y;~pt-2b7Ln*{Abz`OQBylD#aP~rTsb#Sz5YJNrY4FycM z99w}hW3X|Gx^JsU%ut9M9tLgZNrc!=4z0CHbKBH##&y@pqU(9 za4DIRWj~Z0jULW`Uv--p8C+E0`xZRPI*0yXzgUS@>aF16YLG#1aVQ&)bRzGI3Ey34 zPp=+TT&an#<5n_vWJw%0lkL`tw=bXOm!#dl0x2>iF_gO?W9n(a<)gx zMmL3o?&5(xQkU%N^SjH|e`CFrL>{AxeB}5$2FTIWi9-HNT0i zJ{_MOY_5r}x{K5jp}!^2BqIgr^d>tnHyA*1l4E8y>65zOz>LpN|gl zZtRnoG7o-XC9!1Qh+@jpH*#Ec=S#Y9w)QUmD5%9oVlUFfDyLix__`QHxng7=^)?xd zobw3qi&{#RD+`Ej>nK^@gb|PNyH!C}tuYygNLYU+*Egi$fBq?R>T15Nf*OFXy4 zLPJuW(XK@Tiw#}zn0jP;U$o4^HP)RHpTq8L7x!cTb)xi(p+gDt%@Sz^4~Gg&*oQWu zFY6erqyvr(RMw|hfKCvCE9#yPm4TH1lX7%-b81)URXe`KQ&J)YMeZ(D>_a?y)bgl3 zYes5UtaIidN5-z=EK1vjJU?QhC)U%;RI%7X9=HRh;*6mfPL6hjHa^pl(ysg7{KRtC zf1e;Yw64NJ&!Qa$9={>($fntlt-*o6c?a{x3DgkPTY)qSASRO&T5=uup-eAJIG04`$S3nq3w(!8)z?!BRD`O;7F(G%16ew^M{Gau?lJ@&WQlXQ~hrBm=7 z(bd)2=a?F~Y257u3qQEvPJ3D^Tzr00m6E%%AztfXS8`ZKxiyhk8ELYnr<&1-Rb((i zXSMXB;lMW^-r)0ER>vw(=-%c8D0Er=yuJC^G(YV(oU4UzAHtw0$>E;41G6)t{A5y*ZL0%{Rri36icnv8?Pp zr2gYd>&vI)soiV^KtVt9@f)mO?*aL45;ZcNlwShVvo}iwm}x_y>^WsxhN-TA6R@QMkv`m8{Cz`--b8?!MqVJap)ZKg zyTI55e8X3a*aIBGr}fSX4LbYmZ)cw@`6v;AKO=OAs)Pfn{No?hqpTr1%AAnWwqOJzDQ97xUZYV$W!rhEJ zN?=wddK4!xhCb4R_0xKtS-W32NW56Of)>ZyenD?ZIFaDK3-RAyvAicG8jT);lk2bm z$My!ot0}^-iys%nLi=zZ>3;X!93{u?e7;?vUNXw>%*~$tx6lkfZ!#Qscd8>Jl6k{x zt-@Fjgqh+}|0obt5z*pLVY_iOBQU!a`el1Aij|CY+JiRn-s)|#Qsa@Us7dO zoeAwK+OO5oU0@#9N+mAQzh|Su*Q}{7Z@jYIJXaC>=!_8F@jEtB^Jby*PTYJT4{Q*Y z(rw}Khd4T9(t%KM(S|h^dUm9}wrsh?qxS5l_xMKa32`^5HOJ}Bz5j4&q4}ZZCbEK- z)i@PG|N7J&`h<}Cs~A%RF8iyXGi`BsiN(kGK=yYdTz{G$=>@pJsiyVll*_5r%kLMK zKCiQO(wx)d-%4d>0fUbfF5gIi(pSUbm-haNYO)MYvBX$3583u#R{9OHyIWFJCf z`{i_e6QN*)tmRXh*mJe2U+fE(ruTz~We!DoJ)`WO9o32px+Ym!VQM36d82YPl-`Zbc(Q0oHY9i}&zn z@xm4B-8nnVaVu1sHU18mr28DkZZ`O}G@V4=6Q$342vZ~ zt{y7tO-s2IOP>FHl1=N~{xWw$ttzgXLO_w*EkImpU=@el`}svVY124HmOCNT3TIh! zbSZp{#kgAHD%pz}kPKG>2_N2Jye8)oCBI58xTKf}#TBFHT&+Q<^i7u&wDRgAh zzpgKmkKLs;Bn54LyGj+rNl<7;79@jzygs8R)TK)>qqNa1T%Vq7WEUR>SD9gG1nK5p{*(m|UY1!5!ssf&a%Wd_^M3a#~^b7;3A&nf=BK@m*g zz4?^)PM@oE&*Udng1Xli1KztwdoaSDI^&*rVXq1SKVKxM{UJeH_3r9l^U?m-Tl@M! zCpsD1t<@g%7KspIgj>ARqj~{iUyQmq*Smz9(cRLH;%2x3C1vk}#JF^6Bg=&7Kw~U|rQY|Wof?PzSGT^(@i=68RmFxbV z?Qf1Izt6Z8&&U@OBJ2k`7L!AckqLYk(E;iwTy|zYv`=4uh8`k3FDfhvrQ;Vw6Ce5J z)qt)s+&Bk4x`#ERBusC_j5A6AVhUG0x6QDidhbKqt~MO}tf*dxc1V4&Bl%eq!l}=@ zT@zzw>v_g&`Ehnqmmu$iu5ZIIWi9Nw^Wr*Yw^A7HX>`x%-ql_>f92Fh3h5l@p$WL@ z0CKv8UX8JW47Yk0F3r+ZvO%pG;vuv`RAaB(eVTdfi9cmQeh#fG$#@fveV+=KmvX$YJ`7J0II0bBzW}+px7&;R|{+AN#M|j$nUv2U|jAjUsN^x z<>#HB1V`s76<1cJW+1;MQAk&_o(Cvc9tGCjSn(iAh@BK8m zvo`l%S!3>O6s%6ahZ~S}pNR`&^{>zY)M&ioH;cHGMLleYSJ{fgryD3ETIV^=n`-iH zHX91qe|J)TzJ~|ULggX?qzG?^a$yCn5FdC?4XYs`AM%4Y^f_$M#`eghcNn*iBNXepu>kR>K8qIlr8bpwBi ze=jr*TFyy$PL1r4k#a^)5u#96nei(Hr#1FkY1DoozSxFIkrQ^{4M3KVsYw@!8hFz= z?zFA$cjsJ?n^x@%qN~5KUA=U@UPnNxc2O(Mgxm;RLE{!r8B>UVcTp9x>* zgg=07^QM8rJDMwMSVkxt#U0fv+XR&kkckL-nrD;@qg1MSSnXf!n^a^|R*Dp>4ik@_ zUBX2CM#5x6mV)^Dr)zQmDU~am>&2=ZNn<&v_e5+t5h_r0=J#4+-2I(%oGo|o0poT$ zf~={|JL(+xlb3=pqY(=>v7OuNul1%8}cpTedB zt6L95BPKog0^dhRe6L%z^RbH9+nAO1lXY0vJnFASo}Nc+Q2LL3n6otU0++!LU`~t< zSA|Eot97ACTW$2r!$-Cq(XZ8P+G@#H1p^JK9oEB3 zspx>gyH6XB{3eRJcn(dstv>T1Ap#WRkVTtM~)3BSQe@<}J}zO6e~H4g7?Vb#zZ+>4FA_@wLjJ`l^XBz<9EP=UQ`H+K|wQ-be1II zdI*b2nLRp##+N{cD^$ZED-)I#{Q*LE09n#l&NtVlXK{Xk0CXmzar%~fK@y5j{^tx6 zxj_NG+w6C9v<2&TTRwcgVb&ko7Cl@Sd4eLg9yKVWs-#Jurs)3^C0T7*`UTh!;e9q9 zQ3#}hPk(dfdM|f#i_Z5S8<&b+oay8BhPj_l@8Z01y2*wW#}Q`w!vYG010Tq}15J*P zs^tAY-izzQwjPX2P?t8TV6TY-LxFU{s&v;kO2*QvT;tDh;#i4{?+F)Mc#rwqgFf?> zhX<=z@?ZX7eKGkkUDU%x(wXz7ELn&`Dc+$E5@bD}`h&@tmWuWgBPkeqJq;fbMzNs~ zI@0s2D~>hzA`kK9o?L%i3>>>H#V(Qv&%EDTBn^E*c)TL z>w)I6>?3$9<8MB3XY~;B&kXdFh!4?MS-gfo#x9E|;tn;;60 z>jVLPZ?SbwFJ?*VBt(AY(VzQqOS1B6{sdmynaP?R{p3*lJbrP3xGq7&33$ZDjH2fr z{qWKjUWaO&lFVKjAl`A_bioR9gO$*Q?42{<8<{)4$)rLiVE<_;(x0@s@Yl+VL`sTw zv>oCG4dz7Mulb)XQN61b#f(dOG&Cz~sS@H77Lcm?4@|FIgr?8QJSt-TW*M4ay-Asz zMewS2O;JjmlqvU3@Zs?313%;fH0h+IDhi4*G2m#i1s?3ygRj${#<7(-X7)Yr?dm}b5VO52P>vn@}q%c`lp5oksY4)4KtRO!tOtj~6x>ftHS z2jn0nLJ1=I2h{1!Ci{-mK!4B_+J1QS12rP&j)j*X#$T)6?iCZvWr5@wvXFFocjzx_ zsOwXu5V1M0**r2}&zeNaNF;SNQ@A5Fy=Y3~GnDQknfX@>*g!h; zWg7U-z{txuA*%=W(iP4^xJCgdRnpt;`2Llow9QR`f8d^5g-GVc2zEsrcN@48(SeXV zHO3%EAvs~=?F_k8q2(&#ws)GlxdI<7%$87lEHVfLHt>KM-ULuMa*&NUVDFtXl4216 zWzw7@wiNprIh2MA(IKvAF79G7Om$48(`8ZtcD`dMv=;RsVZiQ~C;YpRlfqX`5yT37 zLB2luxvG<+KWp1su?luog^;SD%zzv0=)P5t>L1sOUfQp7u*wI4Ja9dCMozM8hP#Qy z?M$f!pjW^gYAtwTCy$4N`O*^YU6#Bm#(#%$UA^FM!9Rx?moQe#`=**Oxk%S`UICds zJho67mCaOxjPj#+BDs&(Wuuo6!s6E&)@Fez>)>83hQgG-0!O%`YWC4qXvXXI*4N2^ zJPY}nQEWGjfX8lI?kV^y8{z8fODE#on= zMeFm_*sL3EJ?hK8*Er}+1kKg27Jv=LTFxw+9gMRP1p|EJwD!8pUNGpt-V(X)Slx_8*+KpmZv>UkYlS9VKA#L4~$i zg8onwCwC|}CvOZo%_@-YZN3r6@loWy41}s7^J) zd=^!?7X#A#pTu?~r!@48h%cCwKX}x<+e3H)MGz2vC{cXFokrkuTqCI&S5cXB<23_GA9meo&B)f+zA4+Pbo@=2w-R9t3{J zfB1n1%Il_V3n^=vd95VzBFup}+&s=r0IS~BmMu1zWp2i6(InqnSXt{UEL)4=UV3$w zF0fm(*s{^ZBJ#NZwm}VZsNmY9q#Rbi(kmF{v7s%+%!(_7z4364s)t>VO>`$VMy7zQ zgIZunjq~-P6AJLs?S1!=H`Z_$p8+QeZSr-6b4-nVzg&l(z!S1Qoq~k|rFhT#GF$cF zMxg+}VVWghDQnd)|C_IA2~Vg=+A0!jK-d&Ml9GhB^12|ihAR`@B3*~kdKVKZkU8Yr z!i3t~ImuPCmoV(V$+i8M!gu2w_=}ZpLMXV_5#2V79HVPuQuJm-pD^iXH&CI`_UL{q zDrrOfv!MOKjAzIB!NjMU4%yEFr`X;Xr+8wXMTkZPuFsz(vhg~%`&3DwMBA1SeHXur zl|Xrqf)qod0@ON(V;6fDQGl?qOac;HA2ufZdKS$M<0)?PdUFtDqT@!)GbnQI= zuiKj1Ox_SiJ~q8Pri=IZws)S=w`W=tmxI+VP4R$}GPdOi#q=psGc+xS8|AJK(0-eE0XxK;ph6q(}A zMAYP8(f*u=178gShQ!Z`?u0MSdf)LqITVSz6MSns8bm3IYmlsZIXc@_ZC5+#79@q= zBc@IQ@-^jWI~l0N3@`(qd_Xgg8A^*r}FYosNkgu%ch)=SoVm5 zQ?+C0n;JRX#iml{oR0>hQAZ7TN>FemBwWJ$fAo7Px#5eg{-Ake1-!wSsUH@+%UP6_ zLc8<+&Sm)xY&ICPU%!yug@+?XF`P)z`Sl57b!q7q6_W()+~Fg__Usw)ajwm4``?Cf zIx4TWN^U>~3%zBxW7=N+PC%AVYibS{qV!j;`=8qF9)Luf>r;h6c{VZtv0mLZUQN`2@>nG*thjPB+UT-4 zfc`giG|RA)QU1nJ%PSoHfaJmBq&UTds)-9c4}Azh&gP z?7}y(E9!*$ej<#qoc*EhZfG|b0w6nx2Z@LV0FgIbI4Bh>3gD!dzj5udD63g5G1@NP zXp1$^Efb5RfiZ7ds$dQu8zX4*Q*#uAsR5!6CbCgr#XVmkYTv#_N5P0|m^PZKj6>)M z^@BRI`XL%uA8eKhIszKhpCmqN4)8junjL#uw-7~t;8Gze5*@X^!@n7R&~mxl9GX`@ z*SaGhSyfPGbZ{#EYD;i7$z7|xRW!4YC&mA@mgSZvqXV&sk14-Le|gYS9wvOOCl^2` zH+tCeCdUL#_`!(79Z#i-YpEk#^gnubN_>`5j<)!9y(-dAxH(9A>_oG0E;aIEj`Zb? z`9mVUvdCcG1r_TPHLe0hdb!9(LJe~4xnR3p_L3~_2{|FJ1fspv-}U=(T+ekd4{_^Q zexuug6hkM0eP9bL1tyad?3sw#tp@;Y63>QbW)DRKMIsz~EY@EpaBkT&RjRjJd!1dU z+l0beBivR@>b-XAWUYj;RTHo)rQvgQ7dt}p#hu;|^{;PiY@SX33u3AjCjAt-L3LUz zt++u*pS~wekHsdG-vrUG81iDN!6Hl+IMPCgwVfx7~z_SH5cZCUWv3jjD$hc_z) zl$=IkP4{jdsLDMF&;;x-&fzUi>LzboI3>Mm`d`a!3Wrry^A{`dNZVbd8IVYqXTr$I zd3rpIi71FS{;k1i7zf1>U0_jNefUEh^2CZ592}N<7A#H};}Nf%ov80-<*(cY89^!Q z3@6eQ+NUahR^bxHxbSRZsRRh}0zdvff{L#jDT_lc^)eAf9AMkN))Z+S8g8SzzR2x8 z6H_|@NX>6M|Ala|ZI)!>TscNTKCwLo+L-lqH{W4FrUE-})$9NnwUU$Z&H#n`a03Fi;-)Ol7r^3NaE(Y{hn|hT zxZjxNlc4#R?TaSQRQWH!DA)Cgjb%&!BNO}1Q$g*=BRlDu4owFv#4${G&%laUs4qCU z((dE5z1$Q$l>0>n?R=1DK@YDc@AdS$=L9d(KNpdWx?!QHqcJ#ta)+=Jy+enOl=uiAaXx%Z7$&Zx5ze! z^OV#pW>AT{*eTOxKF;TxsrWrDu#dw{-K@BVh?~j1n%S;W0;pP7rv>8{?yu24{-%X1 z-w=bVt{4mBbD;UgIWy=cbYLuay!soO2457T-`^Ni?4Wj_t~F~TL=oN@zf+UcO?_Lf zKx(ZV%e<>KJrhyccyZYyamiUpQ#T2aRW`oE!Qp`}rJ}k$V6m!bInbf>Em=t+XvBQW&>E5pd1ESs~GsQ4MHnK|yveWJw)fxWDHn>GhCt+>-cUjI)V3SrOf#VCe;c zcXi>vtJ5~Tzh77qD0At%C+C-der;S|=rUI4!o+-#7EI^2`Y3x86{@HXOMGO*FbjwRNkyM~bV%Q_=CN~0FlXK*8jUj$q;I~pHr z{`BsqD#SE32CaZpqTfP*$XzQA#w`4Xd6)N^dcK-`GQBZ3;1ZXWou^U5Ffcq@(iFMT z8dh)7kJq+dn3gV@S191inFxPqf)fNls=8YOJ8$0z7YHKTuF!40MH?QmAVe5J@m{?O zR<$I%Cw;uW>Ys+@4KImpYs-E?brgja-VxZP>p?icm5i;96+piX=yL<4xT1`V`M2!eBin_{at;jH8Tx3Mk9Y< z8!wY={4?j48|ao@B1V>}kf$mz^?on&;YD?rc0^m@xlL(*mCaZWa)kNwXq;;mCs*6E z0nGF6^TgThy*-Se~94 zYx)D%Xo9cvnBiPWIH3C}Jc0}XUfG}3)Kfna=-)ztDU9d-n<#HSUHGkqbm+!VpU(tQ zOd^_DZ6C;PJ1ls8$El7)+(#uJBd$ZU%l<;{|19{E?3i5Qy2e@fG{T&>I_T2XAqA@S z>yS{UWG*^~Z%4tch-8XSm-0nDy`m6481>9T$WVKuT2nTLdXPS)v^gUKT&|9KQ@!HI zjKA*j?h`Wu4?r#F@)>oAHafNa31f^%2W`?4??DV(WJVSVaj>TKshe~O++Y)Aax*?g zcH2{)fzz(w-~^^>ThZVU$mvFOKs4Av(8T~Q`6pW=renY9bth8fD%r2o6WcUTiMjd%8E?8bN8EzS!=Rn(C@jU+J*AzuKg-&%;*W^di^B!jaei2Yj+Ch_iap_4 zSj+fD(!h|Bgj!v_=1Dsqushz<`S2mAnzC2RzH`iRKPMPQVhf{~BwMJZm|+VC~h!h=~a1 z`=z#Q7QV0y4gP%J>xDe`5QlY#FFPA&u%*+Lvf5q}yD^LY&TAQBX#AbAnjsFbCvK-i{CcpAx?LN9fnSEV zVo6!H?uBfl-Sgwp57j}LNsxf~KpBZ-k0!Pp0W(WjpV^Jz>9PEK4D!4~Rq6*zfvj6O zJN!%^5TX~0)EqZ0e)@Nqki}CU2WrbNvV&l4y^S`43sy>pLaz`ed0iIk!eqTGA zHNX#(9~;PatR@^KarhCSgb?7Xt=*D9HdvIaPda~qaG4KnaN8a@TtdU0HIQ|zIq*(o z_2^1Ni)M^KKv7>()#oEk=8#`_Wk*RN^OAxy7lqFi>htLV(XU~SeR4{_8xE1&Td;DO zP<@F#qBflG-VTwX?Q|9!ZcgYAHz+Yb7i;2Lq!?Hau)zk|H!ngn-yX1G9psdrTC+ds zR?=SqztU%b>V|vSv~LXFWnB5y0SNAp{kM-{PyN)>e2CR+1TCvZrRSwbbq+>2tc^1@ zJZwP^c!;;vY@iPkg z&t3hs4~yBFM;JF6K-8W|B=^>=B$Z|Hm+Pnj&Y3>;d^V1$B1K+cL4sf4HBjx_+-HBb zGt#U6pv%BHUlQT-mXE^@q-x~!@?OSCg}<8r`e_SoI-2OmLN?Y%OFOhIizY;un^1{` zQNDNaD_>9+gzWyd%fv#o5NU)6b`_I~e&WT_D4nb)>_CU&`{Jpjy`lYWz8vkiX+5_S z5W~OVG*{h%GbSNLEXpebE(V~!YL2>I#N6~*FE4|h)iZ6Ys)6Bk<_ zeW?a0R7-|1Ty_UZy*3 z|BD{)tX8CMv-+a4X;dr9beTSnbYb^$){1qIE!T40Yt?g96So&3f`~2{L+LKl9u;($ zCQ9cYh~C0((O=(+x>kv@m)y3XDaq-u_(PPLLM3snx1Y#!XBt-C4>x;0fX(j3{+7BS zo#Mb7)u=e8~C0rNlH`3}1qLN#)s zDx2G4&ea$4V+Ua`G@w_<-e|M{%?%^Tw%~vIYZ@FUgWDG6pt``B;)7-Aq>_K<5+taCo`BBZ<;LpR<#HG>SxA5XoM(<~ z-F5-j-s0xi^pkwuD2s)px_uwAa|b?XFi-1PjcQlAK!I#~beD^j)r+JAw$39_@EtR0jkw_t+hsJ}K;M=x&f@y%!M6cPBLmOOd5zn@+! zf@@(i!>q^&Z?WSX-7#^8qW%d2;^ZK=q&fokYdPK+$MfM%ZJ@@+C$JcF4V#E^0nbFM zXR~XKdq9+P?-)Ef$nSrF(hB!L21QcXhBU7g|==pP415ZQ2_0 z>6)T{2}xRa0;HB7cZ24&^i~BcjKnv&A1M-oFea!1U>rs-HrgC?Y)_zx+oN*S?qrxz5J8?0kk4O5$Rveqg+37@o@}IM%$y-0rMBlR; zACb4)QMDzBk<>j~^?**2yMOneOr_$A;HaT9CqzN_E$KrzAKb#LcOCnld_Wk|x zPv9FWFlkjUI;7o(}SUC`7;YG@Hsn3{it=Cw|2sC=@+P>*Rc!jRfW&J}(o7r9NDQ4)`ySD8B zk;IHekvsCkYeqK_xImZ3GnS~LTjL;c$=knGr7n(f%9yd5l0|57Ei`fsBEbnJp=^5< zA&R<#t+B^~g$nKCs|s^SmUZdM-+Nrd6~6gfvjHh(FWs|TPgMj7y^6-?BIio?SYAI$ zKW!H!W9+6x`Ia5wo4OF#-oLk`ittYX7V()kArzKt!?}zs;#Sj0q^7k%ek?cW*p#&}tzpF942o>CJYd})6I0(qW*|>8)h@30T|-_eD~Wsxl05feVtmL2 zjMd}JKV@YwaXJ?P)b{wt%FT}-DBO>1c$fhRst#h*Vd3MEDp1EyK*Kf?UG26$w zV#uo$hOgc|g3CS99AQ!%du>*lUl^uZgxg2UDh3Ny_D3>^?jXtyqA{;~JNd*4gCv41 zz4LCI=|lR~hVp?EFFS41+~R=}sUU%lf+5l-QBvRP!tnYzLa#!ZC32Hk#3dlg9{G5yQ zC2Udb>nDb#%MVzzEB3ha+@|y+w)0~8wlQplP1QjqgKGk{#UPy_qrfMtYEx>LEZQ5jYit@s>Qn&L zihRi6S=ErcdXzh#Yv6fyNlzQYt&w^nnS7s&yc({alXedWt^m5nsEgg&GExuiTD8Rx zT&hEv2B#L(53q0aM!5I;=tk#$^$p6pchdAKz@$xDz&GM_?gD` zJol;%G@7UVNCJ2o+8RYS|2#++c~6d$nE-gDqtc5oz8{6Q z>x~H@lk#hH^<=dznf1)MzsDLUzhlhno`T0Z8=heCg2<8BWj}y(bzV>I+QdP^Hakbc z@y4L9oaL-W>x8`=D$z2H89dQNdsTZq)>?fIbrep>kX9(+rpNsvnj*YHO@Ah&cX?cu z6oF+LTp%(FmQY6MId58CoHl^?ydGS#M9M)`Dz)eL-#w!*w+{e`SwUX0>% z>+o>+jnWqnGtMbeDrgfAU;ZXG(ByCq)dV@$+b^va=X=jY{~Vb9YHT73{|CIv>2oNaHEmQ@6c=9&Y~kh)D@v%`naxci zMkwxxrm3hf7^6vryMH7mHFm)0NkuUuQY3%XoT`uY3twURIsW}Fufuj+zwBx|L(_72 zDgTGm(Bmxia ze^N5sm_Y%l-oc(1QG@BxKG&B9e*Md|58{ZgXV&*!C(1VU*h4f)L?kVLQuoTKgmOP6 z0E(-b7%|lo{j)!J`j++-u=u(S49H^^JI5yQgp|-*%%*awGeu>G=_r_Wpv3{x-hW1^ zyJf!3Jf{7F=C!Q+_vJ_j1naaeP3IKb|G-i(%@e5w(;UcgA-s4hE^B3sqXJg|fBibi zYHzDsj6fb8n?G_-G?`@^-ORmje#8F<(L5fam*oSqpd7>?KRuf*ZxWCo!^wG^m5eRr zsOi|W3FF8ZqHYQ`y-*y#&^>|5qmr1`7&?bl4dEE2SIjN`=l7Q zDlRcVhSWEj`{nFi=K^J^_3)K0mi=X1h14^s{E%Z`S0adk$oA^+^un`Wwzn zKFqQO`!P#vlCX<(jBEDmb6uezQtgkf+XybfgI=zPMkZvst5UB!od3-Ld!_GRHh&nv z#sR@MM4-1@tfnuc4{HtsqqitcX!_%1HE zG)PE?bb~ZVN+aD!gM_q{f{?|ko_ zI%n?8d_Qr&clTZFJkUX;bhSE$-@*QnhVFpv6NmO~A|_C<11x9@B|(;hr{`|lMn7kC z;AhJYltmO$JN3^)K@&-x?7}sMSRm;iyK|d zK7zG_!L5FTQMxY~eCoDrShesDH~FRV4xPDQGT%~|>K^(`zH1=*Hn|_r&AOiXD60o( zYZm0zq^{OkN+sMAI6%-Wt7PAdpb+rnXx}bH`(f~&*B^3b=+LV{vsaM4d@I6Li7Af+ zCCk8}8h!Rv-`j4(?4*WZdbRAWEUn2WHpE@Vw)6*mqs31k0ufKX_Z~Mmr%VL^PvYo@ zimFO$TFdPgUi*fEkddCQa?9m3gcSf7LTZvpxt3I05G%_1qEF0yYP7$vVE!@4zeowK zqebpehYa%Lv*=gwTAg(^xnrFUeETU}ok)CRH&Qpx4y`|}@I!vgKyb-O&2(^~wLEX% z=(+Wkq&uFm-yZY!abHgyOFE?bAopjuOY(u8@1+1)LT_BDf5(;f&h%2;Q)7VrWG8tU zH82bLb3Z2pp5%ePo%LXXrB{VFSVCZ87dgclaxLPlYSb2Y4zWQ8Nfn+lpNgM;YMk8t zNFG{gnUXDiC6ADBpYktBn+;S9oS+AFcwm`gwkwT}!3u;LN#_aU zQb2|1ftXK~&5>*~B`Qy}KLYwh1$sQ!rl&%l;@vU~+VtpgSpoyQpy=S%TurEsBqm%u zY(6}#W@90DVnu1}lD;rb#$BKwBq2mTMwM)Say!itp|)t(yzVBS!Vd` zRBfHGACyKtbbc?d95`}6Mscc3Ct0&D&qZw*SjFIC`bDwcZqUi~<~KlR8`R^BV^z51 zV@93ToAewLjP>|rvt=bG{{kOnI^d>rM*ZsU2k~s*ta7{e!Uw2MXkbw|&ZDML5QupA zk4RuZ8=szybh|KW)F{Fif1Xy=BbEkvi~C?Pn!)T5x5~`7@Ev2WiDio;dg~I+t(V_G zLV_XQJ+PmuR1_bKdH|xLLe$%Ho+21ogJY8V0r2^K#06vJ}o}@Wnk|eWDeje(?!!{W`5aOLNnLzQq*!2H~)TMWd~NM%|bf3|Gs_4LoV&{JSh9P z#K=VUH?0tHb6k472k|xiq=PMs;Aa;R&lxkuLsp**YV?iio=jtToZ`7!Zq`~yQp5$d z&bG~wfYR6)VR)5{}JIvCe(wchdHE;5%h^xTuMqvlosMi zMhI!2y(*nbbcP8}%D-dmFZvqMq{f{t#9C#<)@#ct?LEuj@JaesfgHOo&&dAt{w;pB z-Y{SH%pfoma8jWkeV-%uhs6NBw%d~N(pOS)G zaz*^SZ42mNy#;9-9fLurk#cgnE)_?Iq_+nXvyEee)^IAaRA}wsc)VJpAPt35WPG>c zh1fR*UPaJtklnB%0LCvi_$H#Kv|!j=A;LGKM+zXgxKeA9`IQsrKqzWgrAg2&9Pcq66RHvI?-hz||?sueli%(^E9`E~(|GA9Y=QJr?_2 z{A362GOtm9FCd2hbYYH8xS#9n&a+6y{!~S8fg9UBbJacPT0%B`p60YKtQXSOn6^f9 z=mtQE`rgrQmrOkC>P3sm^1w0#dl5)4MmUy)MyoBw>h$?EYOvu@kRagScwz8dS1S{f ztSY1gU$|G-voow9&mu>kfY>$D#I&mWl$0EcjhQ+3&8CSVlnhAu>Wg#3Y6QYJxMj5$ z_6o)1H%g`i<*V};v0)ggzkib=Lyh8b698>=d^qal%Mf@-OX%bSo(Z>1r5~-pb84Tx zb9xC`(19jn2C_Y6`yeB+q+j>r*%)mxMp$kVU$Vbb))W_GIB&_Iy(8l_xdjAf_9`DD zJ+4Ah6mIXQ*Y&!{*Z?P6bF_nW436t@gUDqc(4-_l!9ZSB=P`_}7$ZW{%kp8UfTEiH zsVR0v;{=crVzLG>&F zNA8ZzFDojrCYB=ErnVy>%*uxYNVy`?R1@EEMrOWhd%yS^G>K1iH9#=rfMdP#$N>^r zg`M==lm|~MJ)0^p*|-dk0Ak1)utk6_U1Fr&dArPWpJA25o*&c=#hFITGAN7o!d)>Miz52aj`EesTj06AmuvWz*K1_HY@Uue22=L6A zx?rsFVaJ5)XEMR$&)~Njz0!$a+~PlqC8A1vh^*e^18LMXAyC)v$_`#@8g9PJ9pS@% zJ983ajtfnE#kcbi*1>sLk$7d>GcF^c1hVx^RjxQx-ZS24)nYF9!w?%CzFYhpBVLh_ z^kN;L*4uEVDvDJtDdk)Ot~)bfNv-?-=v;r&(WG6hB02l0eJs_r7@r>^HPPuFlD)us zGgs+wgk8-?Rw5zJC;HWUmN%1wgxln5wA5DCW6dgYF8G{MFuF@E9M$|svJII(&QmJj zj`O&DV_3rWChRl>y=(tWkDVd^{wBY=*^_}1N9p8lY`#T|o3{gabn7@F7-B~7J2ig- zDf!h;So$ZC8y8ZP!dbfZEIDn8(Q)>5f~R-WFu(8SxX;KSq73+}7YmtR7i8Zc7*qmN zq`7MwpCAKF0y<57yShe`2hP3`oO$xfNU-m0zs3!Db1;hDjl+F&qv(KJMC62xbuzz^ z4r1SJq?9^bHR=GoH0=Fpb5xDXW9K?9TU_=i+nuwCID9MTxu2k3&D)2KJa-gubh_1}AUQmF ze8pa^%GL6u ze$~m(;x#aGq^0LGsj4#BRBkbaacoEj0vm0#Wlu0I&2^EI%dT}pCHPWsB=TDwPqT~x zL1*D*^PJi{wSG&rHeqWmd^9%&_zgZG-st-v;|)Ew`iT)A)tqV^ z9ou#p--t)2KDTkH?-)>v$Tkj~8GNexLVliv2NQHS)(S4$Goe2^SE#-O(Yl<* zHsr@{H%rq{yPlC&zIywJ5bFe=?@@>?YL2)~k%}~77W=Qyg0N<}p`3xHiQQR18l7}t zn+V`LFm)U>R6DOinN>lGXsmwep0`L1SkW`~cWx0vV@IzaI_jf{T* z-rDxi5GFt4%Bm`+%lEOaC0y6{D?;Q%e^#d?7NpM6x|bPD>>`XpvogrPQc5bl7+;=- zLtzYT+Z)kuVO@zM(CTv7c4pU@oE(BhKLLAuP2A5Nm&3Qy6vmgL7=HEJE$jYL&qk`& zEEY)AkpwLln;S~Uu+UhRup^^Vf)vht+)rzXog?Hs*>r-p?LehNr1K)aTLq9Rx%1UJ5Kv27GlY7>XeLh&xK{9W%93{W)`e;0&XqWs2%6Ze(U-L6wTQ5-lL* zff~py+D9G(YDkT2<6bbKV%+=#0k@70Na$KfJc@Ar7 z;&XqU0fwrhn%GJ zzud5iF@>O9H&0*O4WyW8`K1{z1O$BGGeh2d^{4!W0oVWT7iHIO1qGR3KXA6ZfeuPO zZgoSm)J4_ycNG)4@>~H#%$}3 zs@C@m=yMBVUkXDGa^jmY8m7k`@{)7AY`upG#W?*SrU3$hH8%v|sAN z^K=~*wAuk5SV^w3ZPZ1l1Cli+HS=iFP$cOw_=3n0TY(NJuCc%^E0-y~$Wx(0c_u&`b_~MvZ+A{;B0f24Qb;8*6mMoln|e#GLcFvn)Jn znA{w8pzx>!feX;}$I=Zk@wf$qXNfZDJ#ZmG3eJNEkr3LK#-ZEnDB=FKBcI6B$A1Rw z3W*Nvl6cZgTLi`_UTe{#)_6=Im^(Dj4t&F=QbNl}7HVI8xT4?ZIg`>0Z<_|Fx40O( zrWdGMD0=r0+0i$qw5n!~P48nhGtF|PYg1?z^{F|`o&e<5RP_W-ohqYSQu0=#byjy7 za*~5|ewS8^tD`kAd=iQJ5euXaiQSCt8ORJNj>FeY#Jp#*c-R2y`grmZX-63%?IkLCKr|70af zx61f!C~$H9^{%_O71x7pOZ`6aBq?LnqcUdC7aBzUeA6kw=1&?9baS?4(%7pQ-}>Pr z>t^cd_H_i0ZFr2KV!NQ+Gpph3r+vFAHtHv78(fA;=G%4_w{j5l8!Q~F!GY@fy~m#R zav~PSlJ@|R{0Ogs(r)FPkfB#zXy9R@^%L_pz}vX)_k2LfRBL*rnppTQY7CiP&H?^2 z(Ks%WmI&7ahH5>c4MqXHQNbz!!szQhJdlmW7Cd%(oalEk2rqK*@H}KQb+}RP5-U}v zN|_`AeF*DY)!Dgiba+#=70WTRc&YHL!zG$6mV>TlTn=txKV1Ui^Tbrr1IzjE{X50q zfzzz@bBp%_IcEwD-U8w02-ac$i-c0q5>qgZX7)g8MAPH}KIDc`7uvu{Yo2pe0YRZ# z{`P`MK$gZqG*rzom%;X~1E2hpW2ZHP@gpG%m}FU69P8aNip7Zys_&tSr6Y1i^FW7- zr}+?eKqZU%J~Z&^pjZrUooZe5_)2#fpenmt7a84Aq03O)5Dkf)T=n|V`9T<0ns!g} z1s%4zi*t1@H0ak?^39!RmO{7&3l0xLgIn8Pa=h#qi3=gQZHzwTYU#Rw3Y!E^*>FC6 zc?LFt^4J4&fCen5j7{4{ZuX z>1=;H*Iis8aCQMAP4#k}i6I&kAg2&p_3XzA`6a)!Sq5+Cn8yy(n+ea|Gkm{n&8(Nx zy|-4lfbw+l{Cg|BKhU9$JL1%MjpsLOis;m zMt}ln0AE&`-NQnOpzwq}PlzsplL+l5%@kHE6h!qnu%YgYqo=UD8)aB zL3u;;6-{Tgi47tT6~)_tdTbe~M!vWo1(Mv`E4ww>lTDu38vbl#)p=6oWTv2oanT?Z zIiJhAAiBme?bIw3z0^|*G1OoUIH}4J*B9ZdN(7I0x|fXUR$B^%d}~ktiBUz*dNr>y znj?*+r5|nlG+M%x?pTM?^PFYUXXyh+1mr(ewKuFqepywX*n*Y-9FKPs)LsMicqqkr zn5U}6sOHP=c{`GGrf4gsLFos2B-g~AdDAyKdl@KgwZ|;;LXfs8_rO6{woGE7Z+zDV z(Ff)W7rUykfqFJxH9?=`nKILj`<;BBLQ>H!I2FS`OFEOLiVyj*2`40rLMb0dFxhRG zJ{t9s7vq?V$>#wy!HXq63H6+A?OY=~t+AY68@ZqnDSg4rM0Jk~wytx-NlfLdTcpWN zJ5LYLni%tSursOdMadad)iZ&D{0wL{kUa1-VMm+pXQ4(*0p&_X-IT4Dp$PI}$J?oV zW>oomgHT9mHA}5ceX=WdR-8wQ9p+>gNaBTV)smT3ImjN%Ah z0IfA&u6-(|tdD#d=CkZwcRWNMWGiSvJ61VP9X4+7tUMW<>MToc6`{f9eosP+(J~WR zd%o0?m<~B`9s6SMo!K<8k}fQs94RfTv4Y+^CJ{8BZK^*d&iYwNJ}vcl!GBXuMZU*J zRdiOCU<@dx8tKrAUf7lQc-A{c-Ow6>Z`$Xn#ViS)aKwC;g3K%ol#cS9%7TWhn8!cZ z^fUDTIE`KfDIJmBxkXZjj)~Q@*PiE!{oc%N($Eql0wt@T($~@VP0~YxV$1O{f@oam zibX|PnfN)#pz=$ptJN-Ud;^o1i#}{Z3-4v&PC)%?o*X~w1i$@znYqVE**b=MIBP3j zUL*C7@92?Wz4)v z3k~!)+(m72Y59ZSKJRjwf#j$?j3YZ*BJ@7QP&T=ZgCkQmbc-WM{ z$;KOs8+^VgNNAhXv#-1xU;`rEerjUSmD?tT*BGXU(AhjMN4HMR{2VvZs;Sj=VrAl6 zkQP|IoLFd_{Kq=IsK%^J?A+#T`q0u8CP_RERPC`*nGhKN)%4n0?^t8LZwKwgoze)a z8jZEr6<;+-aOGzARTn%?MJTI^oYxIF)5kc{Y~z<|E-YxQFKqj4LVXju_ETjN`;+ix z22Hp6GmL4UDjgCb@Z!Rk73#C6lomeiudNRqB>Rt0E{Y^WSn7!TTq}NVvOQqY{($ls zRPv;9hGSbs%`;dfl5G8STZOxkG)QFw}-0zhg??P{=TN% zv+5uoCWFQCE*Pr<{vE?A!+pv@=q7sPPCIRZEosKep!*@`ML3V(;^fCu07_CPAuj>* zI9-khKjoIT=I-#OkYmr3JB$WwkNPS0;lGY>yx9;`7HbcVP5uD3=^4W|vYI897`Fhr zKbM!mH1qR&wHKr)t11JNHVgja7%${ib{Xk`K$`c{e~HBZB@9FFg<(g)il6hfo3qm& zQurTK@n58{O1}zD2MwO&QcJg4`E4?IOSrl1H<+PP@)HkPw3nV2=lp)3Z)CD$e=yVy zy2}5ed)Luuh%wmjhuNI;KvYZ4c}e}d(=okuakjB~#)o|)gtYlS^OZ;{P+v4yyKRORel4(9$+n0?B0YCZ4w=>7eqt_(&Ydhkz^J2jCG%>Fp{ zFO{3r=s(NuwdK_D`$F1(0Nwvpc<*$p{EK!@rK1NkJpQNI{dbH%X7XRobE+vln4Ho7 z5$NB*GxRTM`H%1XzwPDR*X6AGcU?P6XQ#h)X6U~T<^OK8b-&Gni6Kzp!Vn1n1^okp z{;$w~An5-*fg~WTzq)rnlPn1OLfuv z-`-`VPdm*zmt~?*;2fnTi#tj}Ra&NS1*$rAeo8(xbMYhn4gVsVr-}q_n>F|Qv$K2V z+P+zP^D*bNX7iZO_Zk({e#Z!?%o03u@AE8y;tw?&dGAKVHl(*Wjk-%9-iVOvPOteA=^keCu4 z-+APqCCBEk>PzkYEDr`Nbt~0t+fABzMYX(EVDF8V3kz4O%vQ}^;Hja-cy5gCK}O|e|DP>=>bpAQ)gHsRpO3bkjQ-ENEsSUB z)NXa(yZd*Z-j@O+sg#P>&V{|uZ=uOGLRm~9K z&CbE1WM{sJk%1wMnE}XWX5nH00ZU*scL~WzvR;t{MKd@`5s3mMyI)9!ea0!U?B-WO zKlXwW#*+(La52$~?Lj<@Orp%NbTnP8hEYcxl9D820=yA&K;x!I0woopi3&v$n6`Z3 zZk)cXhEWxs&LC#M9qbEsIh0^$;DK=+-a2LoF)$<+7pImK>xV{gFu;6;<_O>SrZdHF z>}6nhvY&y0AIX3vjdKwOWKQ?0W#krz`W?lsAdlqKGDZ0Jhyb>i_@% From 557039cb078e95cc195533f85f74d62810df4fd3 Mon Sep 17 00:00:00 2001 From: chenfeiCF Date: Thu, 20 Dec 2018 14:13:50 +0800 Subject: [PATCH 012/442] * Perfect the notify api. --- .../module/message/ext/control/notify.php | 31 +++++++++++++------ .../module/message/ext/lang/en/xuanxuan.php | 4 +++ .../message/ext/lang/zh-cn/xuanxuan.php | 4 +++ 3 files changed, 30 insertions(+), 9 deletions(-) diff --git a/xuanxuan/module/message/ext/control/notify.php b/xuanxuan/module/message/ext/control/notify.php index ed56d88dcc..43b104d522 100644 --- a/xuanxuan/module/message/ext/control/notify.php +++ b/xuanxuan/module/message/ext/control/notify.php @@ -8,17 +8,30 @@ class myMessage extends message $response['result'] = true; $response['message'] = ''; - $userList = empty($this->post->userList) ? '' : $this->post->userList; - $title = empty($this->post->title) ? '' : $this->post->title; - $subtitle = empty($this->post->subtitle) ? '' : $this->post->subtitle; - $content = empty($this->post->content) ? '' : $this->post->content; - $contentType = empty($this->post->contentType) ? 'text' : $this->post->contentType; - $url = empty($this->post->url) ? '' : $this->post->url; - $actions = empty($this->post->actions) ? array() : $this->post->actions; - $sender = empty($this->post->sender) ? 0 : $this->post->sender; + if(empty($_POST['userList'])) + { + $response['result'] = false; + $response['message'] = $this->lang->message->error->noUserList; + die(json_encode($response)); + } + + if(empty($_POST['sender'])) + { + $response['result'] = false; + $response['message'] = $this->lang->message->error->noSender; + die(json_encode($response)); + } + + $userList = empty($_POST['userList']) ? '' : $this->post->userList; + $title = empty($_POST['title']) ? '' : $this->post->title; + $subtitle = empty($_POST['subtitle']) ? '' : $this->post->subtitle; + $content = empty($_POST['content']) ? '' : $this->post->content; + $contentType = empty($_POST['contentType']) ? 'text' : $this->post->contentType; + $url = empty($_POST['url']) ? '' : $this->post->url; + $actions = empty($_POST['actions']) ? array() : $this->post->actions; + $sender = empty($_POST['sender']) ? 0 : $this->post->sender; $result = $this->loadModel('chat')->createNotify($userList, $title, $subtitle, $content, $contentType, $url, $actions, $sender); - if(!$result) { $response['result'] = false; diff --git a/xuanxuan/module/message/ext/lang/en/xuanxuan.php b/xuanxuan/module/message/ext/lang/en/xuanxuan.php index 2cc831d314..5f17d9ff8d 100644 --- a/xuanxuan/module/message/ext/lang/en/xuanxuan.php +++ b/xuanxuan/module/message/ext/lang/en/xuanxuan.php @@ -2,3 +2,7 @@ $lang->message->typeList['xuanxuan'] = 'Xuanxuan'; $lang->message->sender = 'ZentaoPMS'; + +if(!isset($lang->message->error)) $lang->message->error = new stdclass(); +$lang->message->error->noUserList = 'Not set user id list.'; +$lang->message->error->noSender = 'Not set sender information.'; diff --git a/xuanxuan/module/message/ext/lang/zh-cn/xuanxuan.php b/xuanxuan/module/message/ext/lang/zh-cn/xuanxuan.php index abff61c208..4176c92aa4 100644 --- a/xuanxuan/module/message/ext/lang/zh-cn/xuanxuan.php +++ b/xuanxuan/module/message/ext/lang/zh-cn/xuanxuan.php @@ -2,3 +2,7 @@ $lang->message->typeList['xuanxuan'] = '喧喧'; $lang->message->sender = '禅道项目管理'; + +if(!isset($lang->message->error)) $lang->message->error = new stdclass(); +$lang->message->error->noUserList = '没有设置消息发送用户列表'; +$lang->message->error->noSender = '没有设置发送方信息'; From 7a8cc5c077f9689ef70855bb84a2b7262ea4934e Mon Sep 17 00:00:00 2001 From: wangyidong Date: Thu, 20 Dec 2018 14:35:11 +0800 Subject: [PATCH 013/442] * adjust for check priv. --- framework/base/router.class.php | 2 +- .../chat/ext/model/class/xuanxuan.class.php | 20 ++++++++++++++----- xuanxuan/module/entry/ext/control/visit.php | 2 +- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/framework/base/router.class.php b/framework/base/router.class.php index 6298796383..611531ac57 100644 --- a/framework/base/router.class.php +++ b/framework/base/router.class.php @@ -825,7 +825,7 @@ class baseRouter session_start(); $this->sessionID = session_id(); - if(isset($_GET[$this->config->sessionVar]) and $this->sessionID != $_GET[$this->config->sessionVar]) helper::restartSession($_GET[$this->config->sessionVar]); + if(isset($_GET[$this->config->sessionVar])) helper::restartSession($_GET[$this->config->sessionVar]); define('SESSION_STARTED', true); } diff --git a/xuanxuan/module/chat/ext/model/class/xuanxuan.class.php b/xuanxuan/module/chat/ext/model/class/xuanxuan.class.php index 1422d76ecb..6e4cdee8fd 100644 --- a/xuanxuan/module/chat/ext/model/class/xuanxuan.class.php +++ b/xuanxuan/module/chat/ext/model/class/xuanxuan.class.php @@ -66,12 +66,21 @@ class xuanxuanChat extends chatModel $entries = array(); $baseURL = commonModel::getSysURL(); + $this->loadModel('user'); + $user = $this->dao->select('*')->from(TABLE_USER)->where('id')->eq($userID)->fetch(); + $user->admin = strpos($this->app->company->admins, ",{$user->account},") !== false; + $user->rights = $this->user->authorize($user->account); + $user->groups = $this->user->getGroups($user->account); + + $this->session->set('user', $user); + $this->app->user = $this->session->user; + $actions = new stdclass(); - $actions->createBug = array('title' => $this->lang->chat->createBug, 'url' => $baseURL . str_replace('/xuanxuan.php', '/index.php', helper::createLink('bug', 'create', 'product=1', 'xhtml')), 'height' => "600px", 'width' => "800px"); - $actions->createDoc = array('title' => $this->lang->chat->createDoc, 'url' => $baseURL . str_replace('/xuanxuan.php', '/index.php', helper::createLink('doc', 'create', 'lib=1', 'xhtml')), 'height' => "600px", 'width' => "800px"); - $actions->createStory = array('title' => $this->lang->chat->createStory, 'url' => $baseURL . str_replace('/xuanxuan.php', '/index.php', helper::createLink('story', 'create', 'product=1', 'xhtml')), 'height' => "600px", 'width' => "800px"); - $actions->createTask = array('title' => $this->lang->chat->createTask, 'url' => $baseURL . str_replace('/xuanxuan.php', '/index.php', helper::createLink('task', 'create', 'project=1', 'xhtml')), 'height' => "600px", 'width' => "800px"); - $actions->createTodo = array('title' => $this->lang->chat->createTodo, 'url' => $baseURL . str_replace('/xuanxuan.php', '/index.php', helper::createLink('todo', 'create', '', 'xhtml')), 'height' => "600px", 'width' => "800px"); + if(common::hasPriv('bug', 'create')) $actions->createBug = array('title' => $this->lang->chat->createBug, 'url' => $baseURL . str_replace('/xuanxuan.php', '/index.php', helper::createLink('bug', 'create', 'product=1', 'xhtml')), 'height' => "600px", 'width' => "800px"); + if(common::hasPriv('doc', 'create')) $actions->createDoc = array('title' => $this->lang->chat->createDoc, 'url' => $baseURL . str_replace('/xuanxuan.php', '/index.php', helper::createLink('doc', 'create', 'lib=1', 'xhtml')), 'height' => "600px", 'width' => "800px"); + if(common::hasPriv('story', 'create')) $actions->createStory = array('title' => $this->lang->chat->createStory, 'url' => $baseURL . str_replace('/xuanxuan.php', '/index.php', helper::createLink('story', 'create', 'product=1', 'xhtml')), 'height' => "600px", 'width' => "800px"); + if(common::hasPriv('task', 'create')) $actions->createTask = array('title' => $this->lang->chat->createTask, 'url' => $baseURL . str_replace('/xuanxuan.php', '/index.php', helper::createLink('task', 'create', 'project=1', 'xhtml')), 'height' => "600px", 'width' => "800px"); + if(common::hasPriv('todo', 'create')) $actions->createTodo = array('title' => $this->lang->chat->createTodo, 'url' => $baseURL . str_replace('/xuanxuan.php', '/index.php', helper::createLink('todo', 'create', '', 'xhtml')), 'height' => "600px", 'width' => "800px"); $urls = array(); foreach($this->config->chat->cards as $moduleName => $methods) @@ -103,6 +112,7 @@ class xuanxuanChat extends chatModel $data->data['entryUrl'] = trim($baseURL . $this->config->webRoot, '/'); $entries[] = $data; + unset($_SESSION['user']); return $entries; } } diff --git a/xuanxuan/module/entry/ext/control/visit.php b/xuanxuan/module/entry/ext/control/visit.php index 457d124e38..16be2d2127 100644 --- a/xuanxuan/module/entry/ext/control/visit.php +++ b/xuanxuan/module/entry/ext/control/visit.php @@ -14,7 +14,7 @@ class entry extends control if(RUN_MODE != 'xuanxuan') die(); $referer = !empty($_GET['referer']) ? $this->get->referer : $referer; - if(empty($referer)) $referer = common::getSysURL() . str_replace('/xuanxuan.php', '/index.php', $this->createLink('index', 'index', '', 'xhtml')); + if(empty($referer)) $referer = common::getSysURL() . str_replace('/xuanxuan.php', '/index.php', $this->createLink('my', 'index', '', 'html')); $output = new stdclass(); $output->module = $this->moduleName; From 46f9eef6bfda5a96951b7a6265d319b4d7e9bcb6 Mon Sep 17 00:00:00 2001 From: reneeteng Date: Thu, 20 Dec 2018 16:03:55 +0800 Subject: [PATCH 014/442] * Lang change. --- module/common/lang/en.php | 26 +++++++++++++------------- module/task/lang/en.php | 2 +- module/tutorial/lang/en.php | 4 ++-- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/module/common/lang/en.php b/module/common/lang/en.php index 7340e83d7c..8070e348ba 100644 --- a/module/common/lang/en.php +++ b/module/common/lang/en.php @@ -270,38 +270,38 @@ $lang->qa->menu = new stdclass(); $lang->qa->menu->bug = array('link' => 'Bug|bug|browse|productID=%s'); $lang->qa->menu->testcase = array('link' => 'Case|testcase|browse|productID=%s'); -$lang->qa->menu->testtask = array('link' => 'Test Task|testtask|browse|productID=%s'); +$lang->qa->menu->testtask = array('link' => 'Test|testtask|browse|productID=%s'); $lang->qa->menu->testsuite = array('link' => 'Suite|testsuite|browse|productID=%s'); $lang->qa->menu->report = array('link' => 'Report|testreport|browse|productID=%s'); -$lang->qa->menu->caselib = array('link' => 'Library|testsuite|library'); +$lang->qa->menu->caselib = array('link' => 'Case Library|testsuite|library'); $lang->bug = new stdclass(); $lang->bug->menu = new stdclass(); $lang->bug->menu->bug = array('link' => 'Bug|bug|browse|productID=%s', 'alias' => 'view,create,batchcreate,edit,resolve,close,activate,report,batchedit,batchactivate,confirmbug,assignto', 'subModule' => 'tree'); $lang->bug->menu->testcase = array('link' => 'Case|testcase|browse|productID=%s'); -$lang->bug->menu->testtask = array('link' => 'Test Task|testtask|browse|productID=%s'); +$lang->bug->menu->testtask = array('link' => 'Test|testtask|browse|productID=%s'); $lang->bug->menu->testsuite = array('link' => 'Suite|testsuite|browse|productID=%s'); $lang->bug->menu->report = array('link' => 'Report|testreport|browse|productID=%s'); -$lang->bug->menu->caselib = array('link' => 'Library|testsuite|library'); +$lang->bug->menu->caselib = array('link' => 'Case Library|testsuite|library'); $lang->testcase = new stdclass(); $lang->testcase->menu = new stdclass(); $lang->testcase->menu->bug = array('link' => 'Bug|bug|browse|productID=%s'); $lang->testcase->menu->testcase = array('link' => 'Case|testcase|browse|productID=%s', 'alias' => 'view,create,batchcreate,edit,batchedit,showimport,groupcase,importfromlib', 'subModule' => 'tree'); -$lang->testcase->menu->testtask = array('link' => 'Test Task|testtask|browse|productID=%s'); +$lang->testcase->menu->testtask = array('link' => 'Test|testtask|browse|productID=%s'); $lang->testcase->menu->testsuite = array('link' => 'Suite|testsuite|browse|productID=%s'); $lang->testcase->menu->report = array('link' => 'Report|testreport|browse|productID=%s'); -$lang->testcase->menu->caselib = array('link' => 'Library|testsuite|library'); +$lang->testcase->menu->caselib = array('link' => 'Case Library|testsuite|library'); $lang->testtask = new stdclass(); $lang->testtask->menu = new stdclass(); $lang->testtask->menu->bug = array('link' => 'Bug|bug|browse|productID=%s'); $lang->testtask->menu->testcase = array('link' => 'Case|testcase|browse|productID=%s'); -$lang->testtask->menu->testtask = array('link' => 'Test Task|testtask|browse|productID=%s', 'alias' => 'view,create,edit,linkcase,cases,start,close,batchrun,groupcase,report'); +$lang->testtask->menu->testtask = array('link' => 'Test|testtask|browse|productID=%s', 'alias' => 'view,create,edit,linkcase,cases,start,close,batchrun,groupcase,report'); $lang->testtask->menu->testsuite = array('link' => 'Suite|testsuite|browse|productID=%s'); $lang->testtask->menu->report = array('link' => 'Report|testreport|browse|productID=%s'); -$lang->testtask->menu->caselib = array('link' => 'Library|testsuite|library'); +$lang->testtask->menu->caselib = array('link' => 'Case Library|testsuite|library'); $lang->testsuite = new stdclass(); $lang->testsuite->menu = new stdclass(); @@ -310,13 +310,13 @@ $lang->testsuite->menu->testcase = array('link' => 'Case|testcase|browse|produc $lang->testsuite->menu->testtask = array('link' => 'Test Task|testtask|browse|productID=%s'); $lang->testsuite->menu->testsuite = array('link' => 'Suite|testsuite|browse|productID=%s', 'alias' => 'view,create,edit,linkcase'); $lang->testsuite->menu->report = array('link' => 'Report|testreport|browse|productID=%s'); -$lang->testsuite->menu->caselib = array('link' => 'Library|testsuite|library'); +$lang->testsuite->menu->caselib = array('link' => 'Case Library|testsuite|library'); $lang->testreport = new stdclass(); $lang->testreport->menu = new stdclass(); $lang->testreport->menu->bug = array('link' => 'Bug|bug|browse|productID=%s'); $lang->testreport->menu->testcase = array('link' => 'Case|testcase|browse|productID=%s'); -$lang->testreport->menu->testtask = array('link' => 'Test Task|testtask|browse|productID=%s'); +$lang->testreport->menu->testtask = array('link' => 'Test|testtask|browse|productID=%s'); $lang->testreport->menu->testsuite = array('link' => 'Suite|testsuite|browse|productID=%s'); $lang->testreport->menu->report = array('link' => 'Report|testreport|browse|productID=%s', 'alias' => 'view,create,edit'); $lang->testreport->menu->caselib = array('link' => 'Library|testsuite|library'); @@ -325,10 +325,10 @@ $lang->caselib = new stdclass(); $lang->caselib->menu = new stdclass(); $lang->caselib->menu->bug = array('link' => 'Bug|bug|browse|'); $lang->caselib->menu->testcase = array('link' => 'Case|testcase|browse|'); -$lang->caselib->menu->testtask = array('link' => 'Test Task|testtask|browse|'); +$lang->caselib->menu->testtask = array('link' => 'Test|testtask|browse|'); $lang->caselib->menu->testsuite = array('link' => 'Suite|testsuite|browse|'); $lang->caselib->menu->report = array('link' => 'Report|testreport|browse|'); -$lang->caselib->menu->caselib = array('link' => 'Library|testsuite|library', 'alias' => 'createlib,createcase,libview,edit,batchcreatecase,showimport', 'subModule' => 'tree,testcase'); +$lang->caselib->menu->caselib = array('link' => 'Case Library|testsuite|library', 'alias' => 'createlib,createcase,libview,edit,batchcreatecase,showimport', 'subModule' => 'tree,testcase'); /* Doc menu settings. */ $lang->doc = new stdclass(); @@ -397,7 +397,7 @@ $lang->admin->subMenu->data->backup = array('link' => 'Backup|backup|index', 'su $lang->admin->subMenu->data->trash = 'Recycle|action|trash'; $lang->admin->subMenu->system = new stdclass(); -$lang->admin->subMenu->system->cron = array('link' => 'Timed task|cron|index', 'subModule' => 'cron'); +$lang->admin->subMenu->system->cron = array('link' => 'Cron|cron|index', 'subModule' => 'cron'); $lang->convert = new stdclass(); $lang->upgrade = new stdclass(); diff --git a/module/task/lang/en.php b/module/task/lang/en.php index f8a12037ee..8092c0df0c 100644 --- a/module/task/lang/en.php +++ b/module/task/lang/en.php @@ -120,7 +120,7 @@ $lang->task->noAssigned = 'Unassigned'; $lang->task->noFinished = 'Unfinished'; $lang->task->noClosed = 'Unclosed'; $lang->task->yesterdayFinished = 'Finished Yesterday'; -$lang->task->allTasks = 'All Tasks'; +$lang->task->allTasks = 'Task'; $lang->task->statusList[''] = ''; $lang->task->statusList['wait'] = 'Wait'; diff --git a/module/tutorial/lang/en.php b/module/tutorial/lang/en.php index 6ed32c64ef..3806ad875d 100644 --- a/module/tutorial/lang/en.php +++ b/module/tutorial/lang/en.php @@ -29,8 +29,8 @@ $lang->tutorial->requiredTip = '【%s】is required.'; $lang->tutorial->congratulateTask = 'Congratulations! You have finished【】!'; $lang->tutorial->serverErrorTip = 'Error!'; $lang->tutorial->ajaxSetError = 'Finished task must be defined. If you want to reset the Task, please set its value as null.'; -$lang->tutorial->novice = "For a quick start, let's go through a smart (2 min) Tutorial?"; -$lang->tutorial->dataNotSave = "Data generated in the Tutorial will not be saved!"; +$lang->tutorial->novice = "For a quick start, let's go through a two-minute Tutorial."; +$lang->tutorial->dataNotSave = "Data generated in this Tutorial will not be saved!"; $lang->tutorial->tasks = array(); From ae10b5ad4da37df8b5afd44736bbd4d1c15745e9 Mon Sep 17 00:00:00 2001 From: chenfeiCF Date: Thu, 20 Dec 2018 16:27:39 +0800 Subject: [PATCH 015/442] * Fix bugs. --- module/common/view/footer.html.php | 2 +- module/misc/control.php | 33 ++++++++++++++---------------- module/misc/lang/en.php | 12 +++++------ module/misc/lang/zh-cn.php | 12 +++++------ 4 files changed, 26 insertions(+), 33 deletions(-) diff --git a/module/common/view/footer.html.php b/module/common/view/footer.html.php index 410772b229..d26562a5fc 100755 --- a/module/common/view/footer.html.php +++ b/module/common/view/footer.html.php @@ -13,7 +13,7 @@ designedByAIUX;?>   zentaoPMS . $config->version;?>   proVersion;?> - + xxserver->installed) and $config->xuanxuan->turnon) commonModel::printClientLink();?>
diff --git a/module/misc/control.php b/module/misc/control.php index 987b76783c..62c608b968 100644 --- a/module/misc/control.php +++ b/module/misc/control.php @@ -131,9 +131,9 @@ class misc extends control if($action == 'selectPackage') { - $os = 'windows64'; + $os = 'win64'; $agentOS = helper::getOS(); - if(strpos($agentOS, 'Windows') !== false) $os = 'windows64'; + if(strpos($agentOS, 'Windows') !== false) $os = 'win64'; if(strpos($agentOS, 'Linux') !== false) $os = 'linux64'; if(strpos($agentOS, 'Mac') !== false) $os = 'mac'; @@ -199,23 +199,21 @@ class misc extends control $clientDir = $this->app->getBasePath() . 'tmp/cache/client/'; if(!is_dir($clientDir)) mkdir($clientDir, 0755, true); + $version = $this->config->xuanxuan->version; + $packageDir = $clientDir . "/$version/"; + if(!is_dir($packageDir)) mkdir($packageDir, 0755, true); + $account = $this->app->user->account; $tmpDir = $clientDir . "/$account/"; if(!is_dir($tmpDir)) mkdir($tmpDir, 0755, true); - if($os == 'windows64') $clientName = "zentaoclient.win64.zip"; - if($os == 'windows32') $clientName = "zentaoclient.win32.zip"; - if($os == 'linux64') $clientName = "zentaoclient.linux.x64.zip"; - if($os == 'linux32') $clientName = "zentaoclient.linux.ia32.zip"; - if($os == 'mac') $clientName = "zentaoclient.mac.zip"; - $needCache = false; - $version = $this->config->xuanxuan->version; - $packageFile = $clientDir . $clientName; + $clientName = "zentaoclient." . $os . ".zip"; + $packageFile = $packageDir . $clientName; if(!file_exists($packageFile)) { $url = "http://dl.cnezsoft.com/zentaoclient/$version/"; - $xxFile = $url . $clientName; + $xxFile = $url . $clientName . "?t=" . rand(); $needCache = true; } else @@ -276,12 +274,11 @@ class misc extends control if(!is_dir($clientDir)) mkdir($clientDir, 0755, true); /* write login info into config file. */ - $defaultUser = new stdclass(); - $defaultUser->server = common::getSysURL(); - $defaultUser->account = $this->app->user->account; - $loginInfo = new stdclass(); - $loginInfo->ui = $defaultUser; + $loginInfo->ui = new stdclass(); + $loginInfo->ui->defaultUser = new stdclass(); + $loginInfo->ui->defaultUser->server = common::getSysURL();; + $loginInfo->ui->defaultUser->account = $this->app->user->account; $loginInfo = json_encode($loginInfo); $loginFile = $clientDir . 'config.json'; @@ -294,11 +291,11 @@ class misc extends control if($os == 'mac') { - $result = $archive->add($loginFile, PCLZIP_OPT_REMOVE_ALL_PATH, PCLZIP_OPT_ADD_PATH, 'xuanxuan.app/Contents/Resouces'); + $result = $archive->add($loginFile, PCLZIP_OPT_REMOVE_ALL_PATH, PCLZIP_OPT_ADD_PATH, 'zentaoclient/xuanxuan.app/Contents/Resouces'); } else { - $result = $archive->add($loginFile, PCLZIP_OPT_REMOVE_ALL_PATH, PCLZIP_OPT_ADD_PATH, 'resources/build-in'); + $result = $archive->add($loginFile, PCLZIP_OPT_REMOVE_ALL_PATH, PCLZIP_OPT_ADD_PATH, 'zentaoclient/resources/build-in'); } if($result == 0) diff --git a/module/misc/lang/en.php b/module/misc/lang/en.php index 3124219929..db68829d98 100644 --- a/module/misc/lang/en.php +++ b/module/misc/lang/en.php @@ -24,13 +24,11 @@ $lang->misc->client->downloaded = 'Downloaded successful!'; $lang->misc->client->setting = 'Setting config info.'; $lang->misc->client->setted = 'Set config info successful!'; -$lang->misc->client->osList['windows64'] = 'Windows 64'; -$lang->misc->client->osList['windows32'] = 'Windows 32'; -$lang->misc->client->osList['linux64'] = 'Linux 64'; -$lang->misc->client->osList['linux32'] = 'Linux 32'; -$lang->misc->client->osList['mac'] = 'Mac'; - -$lang->misc->client->versionList['2.1.1'] = '2.1.1'; +$lang->misc->client->osList['win64'] = 'Windows 64'; +$lang->misc->client->osList['win32'] = 'Windows 32'; +$lang->misc->client->osList['linux64'] = 'Linux 64'; +$lang->misc->client->osList['linux32'] = 'Linux 32'; +$lang->misc->client->osList['mac'] = 'Mac'; $lang->misc->client->errorInfo = new stdclass(); $lang->misc->client->errorInfo->downloadError = 'Failed to download package!'; diff --git a/module/misc/lang/zh-cn.php b/module/misc/lang/zh-cn.php index 14100a02ec..a504bc9599 100644 --- a/module/misc/lang/zh-cn.php +++ b/module/misc/lang/zh-cn.php @@ -24,13 +24,11 @@ $lang->misc->client->downloaded = '成功获取安装包'; $lang->misc->client->setting = '正在设置配置信息'; $lang->misc->client->setted = '成功设置配置信息'; -$lang->misc->client->osList['windows64'] = 'Windows 64位'; -$lang->misc->client->osList['windows32'] = 'Windows 32位'; -$lang->misc->client->osList['linux64'] = 'Linux 64位'; -$lang->misc->client->osList['linux32'] = 'Linux 32位'; -$lang->misc->client->osList['mac'] = 'Mac版'; - -$lang->misc->client->versionList['2.1.1'] = '2.1.1'; +$lang->misc->client->osList['win64'] = 'Windows 64位'; +$lang->misc->client->osList['win32'] = 'Windows 32位'; +$lang->misc->client->osList['linux64'] = 'Linux 64位'; +$lang->misc->client->osList['linux32'] = 'Linux 32位'; +$lang->misc->client->osList['mac'] = 'Mac版'; $lang->misc->client->errorInfo = new stdclass(); $lang->misc->client->errorInfo->downloadError = '获取安装包失败'; From ac162d1c1555e5dd5a88c645b617c7ed3940ece0 Mon Sep 17 00:00:00 2001 From: Yagami Date: Thu, 20 Dec 2018 16:49:13 +0800 Subject: [PATCH 016/442] * Move xuanxuan notice file to my-index. --- .../module/admin/ext/css/xuanxuan/xuanxuan.css | 4 ++-- xuanxuan/module/my/ext/view/index.html.hook.php | 0 .../ext/view/index.html.php} | 14 ++++++++++++-- 3 files changed, 14 insertions(+), 4 deletions(-) create mode 100644 xuanxuan/module/my/ext/view/index.html.hook.php rename xuanxuan/module/{common/ext/view/footer.html.hook.php => my/ext/view/index.html.php} (62%) diff --git a/xuanxuan/module/admin/ext/css/xuanxuan/xuanxuan.css b/xuanxuan/module/admin/ext/css/xuanxuan/xuanxuan.css index f4720d1eb5..b73183eb97 100644 --- a/xuanxuan/module/admin/ext/css/xuanxuan/xuanxuan.css +++ b/xuanxuan/module/admin/ext/css/xuanxuan/xuanxuan.css @@ -1,2 +1,2 @@ -.table-form textarea.form-control{height: 60px} -.sslTR td .form-control{width:300px} +.table-form textarea.form-control{height: 400px} +.sslTR td .form-control{width:600px} diff --git a/xuanxuan/module/my/ext/view/index.html.hook.php b/xuanxuan/module/my/ext/view/index.html.hook.php new file mode 100644 index 0000000000..e69de29bb2 diff --git a/xuanxuan/module/common/ext/view/footer.html.hook.php b/xuanxuan/module/my/ext/view/index.html.php similarity index 62% rename from xuanxuan/module/common/ext/view/footer.html.hook.php rename to xuanxuan/module/my/ext/view/index.html.php index 3222a3e623..9eead73f03 100644 --- a/xuanxuan/module/common/ext/view/footer.html.hook.php +++ b/xuanxuan/module/my/ext/view/index.html.php @@ -1,7 +1,15 @@ app->moduleName; -$methodName = $this->app->methodName; +/** + * The html template file of index method of index module of ZenTaoPMS. + * + * @copyright Copyright 2009-2015 青岛易软天创网络科技有限公司(QingDao Nature Easy Soft Network Technology Co,LTD, www.cnezsoft.com) + * @license ZPL (http://zpl.pub/page/zplv12.html) + * @author Chunsheng Wang + * @package ZenTaoPMS + * @version $Id: index.html.php 1947 2011-06-29 11:58:03Z wwccss $ + */ ?> + +fetch('block', 'dashboard', 'module=my');?> + From 5ebceea09a114788d74667c1be5f3bb23edb26bf Mon Sep 17 00:00:00 2001 From: wangyidong Date: Thu, 20 Dec 2018 17:16:50 +0800 Subject: [PATCH 017/442] * add project field for create task. --- module/task/control.php | 2 + module/task/js/create.js | 68 ++++++++++++++++++++++++++++++++ module/task/model.php | 2 +- module/task/view/create.html.php | 4 ++ 4 files changed, 75 insertions(+), 1 deletion(-) diff --git a/module/task/control.php b/module/task/control.php index 46ecb8b6f2..a033b93da1 100644 --- a/module/task/control.php +++ b/module/task/control.php @@ -92,6 +92,7 @@ class task extends control $response['result'] = 'success'; $response['message'] = ''; + if($this->post->project) $projectID = $this->post->project; $tasksID = $this->task->create($projectID); if(dao::isError()) { @@ -191,6 +192,7 @@ class task extends control $this->view->title = $title; $this->view->position = $position; $this->view->project = $project; + $this->view->projects = $this->loadModel('project')->getPairs(); $this->view->task = $task; $this->view->users = $users; $this->view->stories = $stories; diff --git a/module/task/js/create.js b/module/task/js/create.js index 946a40201b..576d6d7545 100644 --- a/module/task/js/create.js +++ b/module/task/js/create.js @@ -1,3 +1,71 @@ +/** + * Load module, stories and members. + * + * @param int $projectID + * @access public + * @return void + */ +function loadAll(projectID) +{ + loadModuleMenu(projectID); + loadProjectStories(projectID); + loadProjectMembers(projectID); +} + +/** + * Load team members of the project. + * + * @param int $projectID + * @access public + * @return void + */ +function loadProjectMembers(projectID) +{ + $.get(createLink('project', 'ajaxGetMembers', 'projectID=' + projectID + '&assignedTo=' + $('#assignedTo').val()), function(data) + { + $('#assignedTo_chosen').remove(); + $('#assignedTo').replaceWith(data); + $('#assignedTo').attr('name', 'assignedTo[]').chosen(); + + $('.modal-dialog #taskTeamEditor tr').each(function() + { + $(this).find('#team_chosen').remove(); + $(this).find('#team').replaceWith(data); + $(this).find('#assignedTo').attr('id', 'team').attr('name', 'team[]').chosen(); + }); + }); +} + +/** + * Load stories of the project. + * + * @param int $projectID + * @access public + * @return void + */ +function loadProjectStories(projectID) +{ + $.get(createLink('story', 'ajaxGetProjectStories', 'projectID=' + projectID + '&productID=0&branch=0&moduleID=0&storyID=' + $('#story').val()), function(data) + { + $('#story_chosen').remove(); + $('#story').replaceWith(data); + $('#story').chosen(); + }); +} + +/** + * Load module of the project. + * + * @param int $projectID + * @access public + * @return void + */ +function loadModuleMenu(projectID) +{ + var link = createLink('tree', 'ajaxGetOptionMenu', 'rootID=' + projectID + '&viewtype=task'); + $('#moduleIdBox').load(link, function(){$('#module').chosen();}); +} + /* Copy story title as task title. */ function copyStoryTitle() { diff --git a/module/task/model.php b/module/task/model.php index 501ec23d8d..fe042c3a73 100644 --- a/module/task/model.php +++ b/module/task/model.php @@ -26,7 +26,7 @@ class taskModel extends model $taskFiles = array(); $this->loadModel('file'); $task = fixer::input('post') - ->add('project', (int)$projectID) + ->setDefault('project', (int)$projectID) ->setDefault('estimate, left, story', 0) ->setDefault('status', 'wait') ->setIF($this->post->estimate != false, 'left', $this->post->estimate) diff --git a/module/task/view/create.html.php b/module/task/view/create.html.php index 8814db76a2..cdcf1acdb6 100644 --- a/module/task/view/create.html.php +++ b/module/task/view/create.html.php @@ -26,6 +26,10 @@
+ + + + From 920490847ed7d5910b321fe409724ca50b3f6eca Mon Sep 17 00:00:00 2001 From: wangyidong Date: Thu, 20 Dec 2018 17:18:01 +0800 Subject: [PATCH 018/442] * adjust for xuanxuan. --- www/theme/default/x.style.css | 6 +++--- xuanxuan/module/entry/ext/control/visit.php | 1 + xuanxuan/module/message/ext/lang/en/xuanxuan.php | 2 +- xuanxuan/module/message/ext/lang/zh-cn/xuanxuan.php | 2 +- 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/www/theme/default/x.style.css b/www/theme/default/x.style.css index f9df141c7a..cc2bbff026 100644 --- a/www/theme/default/x.style.css +++ b/www/theme/default/x.style.css @@ -1,12 +1,12 @@ -body{padding:0px; margin: 0px} +body{padding:0px; margin: 0px;background-color: #fff;} #header{display: none} #footer{display: none} #header+#main{min-width:auto} #main{padding: 0px;} #main .container{padding: 0px;} -#mainMenu{margin-top:0px;} +#mainMenu{margin-top:0px;background-color: #efefef;} +#mainContent .cell{box-shadow:none; -webkit-box-shadow: none;} .xuanxuan-card{padding-bottom:55px;} .xuancard-actions{width: 100%;text-align: center; padding: 10px 0;} .xuancard-actions.fixed{position: fixed; background: #fff; border-top: 1px solid #ddd; bottom: 0; margin-bottom: 0; z-index: 999; box-shadow: 0 -2px 10px rgba(0,0,0,0.15);} -.cell .histories{min-height:350px} diff --git a/xuanxuan/module/entry/ext/control/visit.php b/xuanxuan/module/entry/ext/control/visit.php index 16be2d2127..f8a69b3a7b 100644 --- a/xuanxuan/module/entry/ext/control/visit.php +++ b/xuanxuan/module/entry/ext/control/visit.php @@ -59,6 +59,7 @@ class entry extends control $xxInstalled = $user->account . 'installed'; if(!isset($this->config->xxclient->$xxInstalled)) $this->loadModel('setting')->setItem("system.common.xxclient.{$user->account}installed", '1'); + if(!isset($this->config->xxserver->installed)) $this->loadModel('setting')->setItem("system.common.xxserver.installed", '1'); $this->session->set('user', $user); $this->app->user = $this->session->user; diff --git a/xuanxuan/module/message/ext/lang/en/xuanxuan.php b/xuanxuan/module/message/ext/lang/en/xuanxuan.php index 5f17d9ff8d..a75df906c9 100644 --- a/xuanxuan/module/message/ext/lang/en/xuanxuan.php +++ b/xuanxuan/module/message/ext/lang/en/xuanxuan.php @@ -1,5 +1,5 @@ message->typeList['xuanxuan'] = 'Xuanxuan'; +$lang->message->typeList['xuanxuan'] = 'Client'; $lang->message->sender = 'ZentaoPMS'; diff --git a/xuanxuan/module/message/ext/lang/zh-cn/xuanxuan.php b/xuanxuan/module/message/ext/lang/zh-cn/xuanxuan.php index 4176c92aa4..5044f0980d 100644 --- a/xuanxuan/module/message/ext/lang/zh-cn/xuanxuan.php +++ b/xuanxuan/module/message/ext/lang/zh-cn/xuanxuan.php @@ -1,5 +1,5 @@ message->typeList['xuanxuan'] = '喧喧'; +$lang->message->typeList['xuanxuan'] = '客户端'; $lang->message->sender = '禅道项目管理'; From b8647efe18273c8e28e00ac9b85f33805ce311ab Mon Sep 17 00:00:00 2001 From: chenfeiCF Date: Thu, 20 Dec 2018 17:18:25 +0800 Subject: [PATCH 019/442] * Add notify help manual link. --- module/entry/config.php | 3 ++- module/entry/lang/en.php | 1 + module/entry/lang/zh-cn.php | 1 + module/entry/view/create.html.php | 1 + module/entry/view/edit.html.php | 1 + 5 files changed, 6 insertions(+), 1 deletion(-) diff --git a/module/entry/config.php b/module/entry/config.php index 2d8908135d..850e01d109 100644 --- a/module/entry/config.php +++ b/module/entry/config.php @@ -5,7 +5,8 @@ $config->entry->create->requiredFields = 'name, code, account, key'; $config->entry->edit = new stdclass(); $config->entry->edit->requiredFields = 'name, code, account, key'; -$config->entry->help = 'https://www.zentao.net/book/zentaopmshelp/integration-287.html'; +$config->entry->help = 'https://www.zentao.net/book/zentaopmshelp/integration-287.html'; +$config->entry->notify = 'https://www.zentao.net/book/zentaopmshelp/301.html'; $config->entry->errcode['PARAM_CODE_MISSING'] = 401; $config->entry->errcode['PARAM_TOKEN_MISSING'] = 401; diff --git a/module/entry/lang/en.php b/module/entry/lang/en.php index a22d2d9ac7..083c9a2a92 100644 --- a/module/entry/lang/en.php +++ b/module/entry/lang/en.php @@ -28,6 +28,7 @@ $lang->entry->url = 'Request URL'; $lang->entry->confirmDelete = 'Are you sure delete this entry?'; $lang->entry->help = 'Help'; +$lang->entry->notify = 'Notify'; $lang->entry->note = new stdClass(); $lang->entry->note->name = 'Name'; diff --git a/module/entry/lang/zh-cn.php b/module/entry/lang/zh-cn.php index 39f6894608..d11bf4bd68 100644 --- a/module/entry/lang/zh-cn.php +++ b/module/entry/lang/zh-cn.php @@ -28,6 +28,7 @@ $lang->entry->url = '请求地址'; $lang->entry->confirmDelete = '您确认要删除该应用吗?'; $lang->entry->help = '使用说明'; +$lang->entry->notify = '消息通知'; $lang->entry->note = new stdClass(); $lang->entry->note->name = '授权应用名称'; diff --git a/module/entry/view/create.html.php b/module/entry/view/create.html.php index eabc48e1d9..cdf6fbe532 100644 --- a/module/entry/view/create.html.php +++ b/module/entry/view/create.html.php @@ -62,6 +62,7 @@ diff --git a/module/entry/view/edit.html.php b/module/entry/view/edit.html.php index daf4854b8b..4f31b337b4 100644 --- a/module/entry/view/edit.html.php +++ b/module/entry/view/edit.html.php @@ -60,6 +60,7 @@
task->project;?>id, "class='form-control chosen' onchange='loadAll(this.value)' required");?>
task->type;?> task->typeList, $task->type, "class='form-control chosen' onchange='setOwners(this.value)' required");?> entry->help, $lang->entry->help, '_blank', "class='help'");?> + entry->notify, $lang->entry->notify, '_blank', "class='help'");?>
entry->help, $lang->entry->help, '_blank', "class='help'");?> + entry->notify, $lang->entry->notify, '_blank', "class='help'");?>
From 1864c50468d547f0d91091103500dd0de5700835 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Thu, 20 Dec 2018 17:40:58 +0800 Subject: [PATCH 020/442] * adjust textarea height. --- xuanxuan/module/admin/ext/css/xuanxuan/xuanxuan.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xuanxuan/module/admin/ext/css/xuanxuan/xuanxuan.css b/xuanxuan/module/admin/ext/css/xuanxuan/xuanxuan.css index b73183eb97..d694ec8d6c 100644 --- a/xuanxuan/module/admin/ext/css/xuanxuan/xuanxuan.css +++ b/xuanxuan/module/admin/ext/css/xuanxuan/xuanxuan.css @@ -1,2 +1,2 @@ -.table-form textarea.form-control{height: 400px} +.table-form textarea.form-control{height: 100px} .sslTR td .form-control{width:600px} From 091301181af294121e23e3a033bbdbf7c478109d Mon Sep 17 00:00:00 2001 From: Yagami Date: Fri, 21 Dec 2018 09:10:31 +0800 Subject: [PATCH 021/442] * Fix download xxd file name. --- xuanxuan/module/chat/ext/model/class/xuanxuan.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xuanxuan/module/chat/ext/model/class/xuanxuan.class.php b/xuanxuan/module/chat/ext/model/class/xuanxuan.class.php index 6e4cdee8fd..ae424d6541 100644 --- a/xuanxuan/module/chat/ext/model/class/xuanxuan.class.php +++ b/xuanxuan/module/chat/ext/model/class/xuanxuan.class.php @@ -19,7 +19,7 @@ class xuanxuanChat extends chatModel $data->version = $this->config->xuanxuan->version; $data->downloadType = $type; - $url = "https://www.chanzhi.org/license-downloadxxd.html"; + $url = "https://www.chanzhi.org/license-downloadxxd-zentao.html"; $result = common::http($url, $data); if($type == 'config') From d7c6f3428861e35dd3927a6df1e0f5bfdb3ea72c Mon Sep 17 00:00:00 2001 From: Yagami Date: Fri, 21 Dec 2018 09:58:52 +0800 Subject: [PATCH 022/442] * Fix book link. --- xuanxuan/module/admin/ext/view/xuanxuan.html.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xuanxuan/module/admin/ext/view/xuanxuan.html.php b/xuanxuan/module/admin/ext/view/xuanxuan.html.php index b33188963c..0ea81fbd52 100644 --- a/xuanxuan/module/admin/ext/view/xuanxuan.html.php +++ b/xuanxuan/module/admin/ext/view/xuanxuan.html.php @@ -112,7 +112,7 @@ chat->downloadXXD, '', "class='btn btn-primary download download-package' target='_blank'");?> chat->downloadConfig, '', "class='btn btn-primary download'");?> chat->changeSetting, '', "class='btn'");?> - chat->help, '_blank', "class='btn'");?> + chat->help, '_blank', "class='btn'");?> From 92e61922e3b23513e594c55b1575da239a3422aa Mon Sep 17 00:00:00 2001 From: wangyidong Date: Fri, 21 Dec 2018 10:22:42 +0800 Subject: [PATCH 023/442] * adjust for locate page after create. --- module/bug/control.php | 3 ++- module/story/control.php | 10 ++++++++-- module/task/control.php | 4 ++-- module/testcase/control.php | 3 ++- 4 files changed, 14 insertions(+), 6 deletions(-) diff --git a/module/bug/control.php b/module/bug/control.php index 47491ef04b..a508f85378 100644 --- a/module/bug/control.php +++ b/module/bug/control.php @@ -296,7 +296,8 @@ class bug extends control if(defined('RUN_MODE') && RUN_MODE == 'api') $this->send(array('status' => 'success', 'data' => $bugID)); - $location = $this->createLink('bug', 'browse', "productID={$this->post->product}&branch=$branch&type=byModule¶m={$this->post->module}"); + setcookie('bugModule', 0, 0, $this->config->webRoot); + $location = $this->createLink('bug', 'browse', "productID={$this->post->product}&branch=$branch"); if($this->app->getViewType() == 'xhtml') $location = $this->createLink('bug', 'view', "bugID=$bugID"); $response['locate'] = $location; $this->send($response); diff --git a/module/story/control.php b/module/story/control.php index feeb48e404..ddeb2daaad 100644 --- a/module/story/control.php +++ b/module/story/control.php @@ -121,8 +121,14 @@ class story extends control } $moduleID = $this->post->module ? $this->post->module : 0; - $response['locate'] = $this->createLink('project', 'story', "projectID=$projectID&branch=&browseType=byModule&moduleID=$moduleID"); - if($projectID == 0) $response['locate'] = $this->createLink('story', 'view', "storyID=$storyID"); + $response['locate'] = $this->createLink('project', 'story', "projectID=$projectID&orderBy=&browseType=byModule&moduleID=$moduleID"); + if($projectID == 0) + { + setcookie('storyModule', 0, 0, $this->config->webRoot); + $productID = $this->post->product ? $this->post->product : $productID; + $branchID = $this->post->branch ? $this->post->branch : $branch; + $response['locate'] = $this->createLink('product', 'browse', "productID=$productID&branch=$branchID"); + } if($this->app->getViewType() == 'xhtml') $response['locate'] = $this->createLink('story', 'view', "storyID=$storyID"); $this->send($response); } diff --git a/module/task/control.php b/module/task/control.php index a033b93da1..df0b622021 100644 --- a/module/task/control.php +++ b/module/task/control.php @@ -154,8 +154,8 @@ class task extends control } elseif($this->post->after == 'toTaskList') { - $moduleID = $this->post->module ? $this->post->module : 0; - $taskLink = $this->createLink('project', 'task', "projectID=$projectID&browseType=byModule¶m=$moduleID"); + setcookie('moduleBrowseParam', 0, 0, $this->config->webRoot); + $taskLink = $this->createLink('project', 'task', "projectID=$projectID"); $response['locate'] = $taskLink; $this->send($response); } diff --git a/module/testcase/control.php b/module/testcase/control.php index 0adfbd2e6d..c5b1fd99d9 100644 --- a/module/testcase/control.php +++ b/module/testcase/control.php @@ -246,7 +246,8 @@ class testcase extends control $this->send($response); } - $response['locate'] = $this->createLink('testcase', 'browse', "productID={$_POST['product']}&branch=" . (isset($_POST['branch']) ? $_POST['branch'] : '') . "&browseType=byModule&args={$_POST['module']}"); + setcookie('caseModule', 0, 0, $this->config->webRoot); + $response['locate'] = $this->createLink('testcase', 'browse', "productID={$this->post->product}&branch={$this->post->branch}"); $this->send($response); } if(empty($this->products)) $this->locate($this->createLink('product', 'create')); From 627e93343804176599d75376804599f30a3fc378 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Fri, 21 Dec 2018 10:32:26 +0800 Subject: [PATCH 024/442] * add new version and upgrade. --- VERSION | 2 +- config/config.php | 2 +- doc/CHANGELOG | 18 +++++++++++++++ module/misc/lang/en.php | 3 +++ module/misc/lang/zh-cn.php | 3 +++ module/upgrade/config.php | 1 + module/upgrade/lang/version.php | 1 + module/upgrade/model.php | 22 +++++++++++++++++++ .../model/hook/loadConfigFromDB.xuanxuan.php | 22 +++++++++---------- 9 files changed, 60 insertions(+), 14 deletions(-) diff --git a/VERSION b/VERSION index e96b59f77e..b147b14d1a 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -10.6.stable +11.0.stable diff --git a/config/config.php b/config/config.php index ec8aa2bf6a..e395aac4ba 100644 --- a/config/config.php +++ b/config/config.php @@ -16,7 +16,7 @@ if(!class_exists('config')){class config{}} if(!function_exists('getWebRoot')){function getWebRoot(){}} /* 基本设置。Basic settings. */ -$config->version = '10.6'; // ZenTaoPHP的版本。 The version of ZenTaoPHP. Don't change it. +$config->version = '11.0'; // ZenTaoPHP的版本。 The version of ZenTaoPHP. Don't change it. $config->charset = 'UTF-8'; // ZenTaoPHP的编码。 The encoding of ZenTaoPHP. $config->cookieLife = time() + 2592000; // Cookie的生存时间。The cookie life time. $config->timezone = 'Asia/Shanghai'; // 时区设置。 The time zone setting, for more see http://www.php.net/manual/en/timezones.php. diff --git a/doc/CHANGELOG b/doc/CHANGELOG index 5ea9a9f536..0d141f282a 100644 --- a/doc/CHANGELOG +++ b/doc/CHANGELOG @@ -1,3 +1,21 @@ +2018-12-21 11.0.stable +完成的需求 +3482 集成喧喧的广播接口 +3481 精简喧喧的配置文件 +3480 一键安装包集成喧喧的服务 +3479 完善在卡片里面操作按钮的二次点击行为 +3478 完善集成之后喧喧消息转为需求、任务、待办、bug、文档的功能 +3477 确定在喧喧客户端可以渲染的页面 +3476 优化在喧喧里面打开的禅道的卡片样式 +3475 设计喧喧客户端的登录界面 +3474 消息通知设置里面增加喧喧客户端选项 +3473 提示用户是否下载喧喧客户端 +3472 增加是否启用喧喧聊天功能开关 +3470 在喧喧客户端直接加上禅道的应用导航 +3469 实现喧喧聊天客户端的在线下载功能 +3468 在后台应用集成中增加喧喧服务器配置下载的功能 +3467 在禅道代码里面直接内置喧喧聊天模块 + 2018-11-20 10.6.stable 完成的需求 3424 测试mysql8下面的兼容性 diff --git a/module/misc/lang/en.php b/module/misc/lang/en.php index db68829d98..bd11348a0c 100644 --- a/module/misc/lang/en.php +++ b/module/misc/lang/en.php @@ -98,6 +98,7 @@ $lang->misc->feature = new stdclass(); $lang->misc->feature->lastest = 'Latest Version'; $lang->misc->feature->detailed = 'Details'; +$lang->misc->releaseDate['11.0.stable'] = '2018-12-21'; $lang->misc->releaseDate['10.6.stable'] = '2018-11-20'; $lang->misc->releaseDate['10.5.stable'] = '2018-10-25'; $lang->misc->releaseDate['10.4.stable'] = '2018-09-28'; @@ -118,6 +119,8 @@ $lang->misc->releaseDate['7.2.stable'] = '2015-05-22'; $lang->misc->releaseDate['7.1.stable'] = '2015-03-07'; $lang->misc->releaseDate['6.3.stable'] = '2014-11-07'; +$lang->misc->feature->all['11.0.stable'][] = array('title'=>'Zentao integrate Xuanxuan'); + $lang->misc->feature->all['10.6.stable'][] = array('title'=>'Adjust backup mechanism', 'desc' => '

Increase backup settings and make backups more flexible

Show backup progress

Can change the backup directory

'); $lang->misc->feature->all['10.6.stable'][] = array('title'=>'Optimize and adjust menus', 'desc' => '

Adjust admin menus

Adjust the secondary menu of my and project

'); diff --git a/module/misc/lang/zh-cn.php b/module/misc/lang/zh-cn.php index a504bc9599..ea1dbd6738 100644 --- a/module/misc/lang/zh-cn.php +++ b/module/misc/lang/zh-cn.php @@ -98,6 +98,7 @@ $lang->misc->feature = new stdclass(); $lang->misc->feature->lastest = '最新版本'; $lang->misc->feature->detailed = '详情'; +$lang->misc->releaseDate['11.0.stable'] = '2018-12-21'; $lang->misc->releaseDate['10.6.stable'] = '2018-11-20'; $lang->misc->releaseDate['10.5.stable'] = '2018-10-25'; $lang->misc->releaseDate['10.4.stable'] = '2018-09-28'; @@ -118,6 +119,8 @@ $lang->misc->releaseDate['7.2.stable'] = '2015-05-22'; $lang->misc->releaseDate['7.1.stable'] = '2015-03-07'; $lang->misc->releaseDate['6.3.stable'] = '2014-11-07'; +$lang->misc->feature->all['11.0.stable'][] = array('title'=>'禅道集成喧喧'); + $lang->misc->feature->all['10.6.stable'][] = array('title'=>'调整备份机制', 'desc' => '

增加备份设置,备份更加灵活

显示备份进度

可以更改备份目录

'); $lang->misc->feature->all['10.6.stable'][] = array('title'=>'优化和调整菜单', 'desc' => '

调整后台菜单

调整我的地盘和项目的二级菜单

'); diff --git a/module/upgrade/config.php b/module/upgrade/config.php index 70f7bb6543..e9a9099945 100644 --- a/module/upgrade/config.php +++ b/module/upgrade/config.php @@ -18,3 +18,4 @@ $config->upgrade->lowerTables[$config->db->prefix . 'userQuery'] = $config- $config->upgrade->lowerTables[$config->db->prefix . 'userTPL'] = $config->db->prefix . 'usertpl'; $config->delete['10.6'][] = 'module/chat/ext/control/extensions.php'; +$config->delete['10.6'][] = 'module/common/ext/model/xuanxuan.php'; diff --git a/module/upgrade/lang/version.php b/module/upgrade/lang/version.php index fde3a38b45..106a3dbae4 100644 --- a/module/upgrade/lang/version.php +++ b/module/upgrade/lang/version.php @@ -99,3 +99,4 @@ $lang->upgrade->fromVersions['10_3_1'] = '10.3.1'; $lang->upgrade->fromVersions['10_4'] = '10.4'; $lang->upgrade->fromVersions['10_5'] = '10.5'; $lang->upgrade->fromVersions['10_5_1'] = '10.5.1'; +$lang->upgrade->fromVersions['10_6'] = '10.6'; diff --git a/module/upgrade/model.php b/module/upgrade/model.php index 17163a0240..741b95fdd0 100644 --- a/module/upgrade/model.php +++ b/module/upgrade/model.php @@ -249,6 +249,8 @@ class upgradeModel extends model case '10_5': case '10_5_1': $this->execSQL($this->getUpgradeFile('10.5.1')); + case '10_6': + $this->initXuanxuan(); } $this->deletePatch(); @@ -2567,4 +2569,24 @@ class upgradeModel extends model foreach($users as $user) $this->user->computeUserView($user->account, $force = true); return true; } + + /** + * Init Xuanxuan. + * + * @access public + * @return bool + */ + public function initXuanxuan() + { + $this->loadModel('setting'); + $keyID = $this->dao->select('id')->from(TABLE_CONFIG)->where('owner')->eq('system')->andWhere('module')->eq('xuanxuan')->andWhere('`key`')->eq('key')->fetch('id'); + if($keyID) + { + $this->dao->update(TABLE_CONFIG)->set('module')->eq('common')->set('section')->eq('xuanxuan')->where('id')->eq($keyID)->exec(); + $this->setting->setItem('system.common.xuanxuan.turnon', '1'); + $this->setting->setItem('system.common.xxserver.noticed', '1'); + } + + return true; + } } diff --git a/xuanxuan/module/common/ext/model/hook/loadConfigFromDB.xuanxuan.php b/xuanxuan/module/common/ext/model/hook/loadConfigFromDB.xuanxuan.php index e66eb0c040..e9af2f6c81 100644 --- a/xuanxuan/module/common/ext/model/hook/loadConfigFromDB.xuanxuan.php +++ b/xuanxuan/module/common/ext/model/hook/loadConfigFromDB.xuanxuan.php @@ -1,17 +1,15 @@ loadModel('setting')->getItem('owner=system&module=common§ion=xuanxuan&key=key'); -$chatPort = $this->loadModel('setting')->getItem('owner=system&module=common§ion=xuanxuan&key=chatPort'); -$commonPort = $this->loadModel('setting')->getItem('owner=system&module=common§ion=xuanxuan&key=commonPort'); -$ip = $this->loadModel('setting')->getItem('owner=system&module=common§ion=xuanxuan&key=ip'); -$isHttps = $this->loadModel('setting')->getItem('owner=system&module=common§ion=xuanxuan&key=isHttps'); -$uploadFileSize = $this->loadModel('setting')->getItem('owner=system&module=common§ion=xuanxuan&key=uploadFileSize'); -if(empty($sn)) +$this->loadModel('setting'); +$xxItems = $this->setting->getItems('owner=system&module=common§ion=xuanxuan'); +$xxConfig = array(); +foreach($xxItems as $xxItem) $xxConfig[$xxItem->key] = $xxItem->value; +if(empty($xxConfig['key'])) { $this->setting->setItem('system.common.xuanxuan.turnon', 1); $this->setting->setItem('system.common.xuanxuan.key', $this->setting->computeSN()); } -if(empty($chatPort)) $this->setting->setItem('system.common.xuanxuan.chatPort', 11444); -if(empty($commonPort)) $this->setting->setItem('system.common.xuanxuan.commonPort', 11443); -if(empty($ip)) $this->setting->setItem('system.common.xuanxuan.ip', '0.0.0.0'); -if(empty($isHttps)) $this->setting->setItem('system.common.xuanxuan.isHttps', 0); -if(empty($uploadFileSize)) $this->setting->setItem('system.common.xuanxuan.uploadFileSize', 20); +if(empty($xxConfig['chatPort'])) $this->setting->setItem('system.common.xuanxuan.chatPort', 11444); +if(empty($xxConfig['commonPort'])) $this->setting->setItem('system.common.xuanxuan.commonPort', 11443); +if(empty($xxConfig['ip'])) $this->setting->setItem('system.common.xuanxuan.ip', '0.0.0.0'); +if(empty($xxConfig['isHttps'])) $this->setting->setItem('system.common.xuanxuan.isHttps', 0); +if(empty($xxConfig['uploadFileSize'])) $this->setting->setItem('system.common.xuanxuan.uploadFileSize', 20); From 7e44c4b9c3fe4166cc02bf567c3399fb5e29adbe Mon Sep 17 00:00:00 2001 From: Yagami Date: Fri, 21 Dec 2018 11:17:59 +0800 Subject: [PATCH 025/442] * Fix my index notice. --- .../admin/ext/control/ajaxsavexxstatus.php | 16 ---------------- xuanxuan/module/my/ext/view/index.html.hook.php | 0 xuanxuan/module/my/ext/view/index.html.php | 5 +++-- 3 files changed, 3 insertions(+), 18 deletions(-) delete mode 100644 xuanxuan/module/admin/ext/control/ajaxsavexxstatus.php delete mode 100644 xuanxuan/module/my/ext/view/index.html.hook.php diff --git a/xuanxuan/module/admin/ext/control/ajaxsavexxstatus.php b/xuanxuan/module/admin/ext/control/ajaxsavexxstatus.php deleted file mode 100644 index 406bead9f3..0000000000 --- a/xuanxuan/module/admin/ext/control/ajaxsavexxstatus.php +++ /dev/null @@ -1,16 +0,0 @@ -app->user->account; - if($type == 'noticed') - { - $this->loadModel('setting')->setItem("system.common.xxserver.noticed", 1); - } - else - { - $this->loadModel('setting')->setItem("system.common.xxclient.{$account}installed", 1); - } - } -} diff --git a/xuanxuan/module/my/ext/view/index.html.hook.php b/xuanxuan/module/my/ext/view/index.html.hook.php deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/xuanxuan/module/my/ext/view/index.html.php b/xuanxuan/module/my/ext/view/index.html.php index 9eead73f03..beb3e29c04 100644 --- a/xuanxuan/module/my/ext/view/index.html.php +++ b/xuanxuan/module/my/ext/view/index.html.php @@ -13,18 +13,19 @@ fetch('block', 'dashboard', 'module=my');?> From 73ef25cd9cad4d83cb8992b65053640db771cf63 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Fri, 21 Dec 2018 12:03:36 +0800 Subject: [PATCH 026/442] * add for xuanxuan group. --- xuanxuan/module/admin/ext/lang/en/en.php | 3 ++- xuanxuan/module/admin/ext/lang/zh-cn/zh-cn.php | 3 ++- xuanxuan/module/group/ext/lang/en/xuanxuan.php | 4 +++- xuanxuan/module/group/ext/lang/zh-cn/xuanxuan.php | 4 +++- ...index.html.php => index.xuanxuan.html.hook.php} | 14 -------------- 5 files changed, 10 insertions(+), 18 deletions(-) rename xuanxuan/module/my/ext/view/{index.html.php => index.xuanxuan.html.hook.php} (64%) diff --git a/xuanxuan/module/admin/ext/lang/en/en.php b/xuanxuan/module/admin/ext/lang/en/en.php index 22f8d22268..6847b028d3 100644 --- a/xuanxuan/module/admin/ext/lang/en/en.php +++ b/xuanxuan/module/admin/ext/lang/en/en.php @@ -1,2 +1,3 @@ admin->xuanxuan = 'Xuanxuan'; +$lang->admin->xuanxuan = 'Client'; +$lang->admin->downloadXXD = 'Download XXD'; diff --git a/xuanxuan/module/admin/ext/lang/zh-cn/zh-cn.php b/xuanxuan/module/admin/ext/lang/zh-cn/zh-cn.php index ce20c83b69..32172290d3 100644 --- a/xuanxuan/module/admin/ext/lang/zh-cn/zh-cn.php +++ b/xuanxuan/module/admin/ext/lang/zh-cn/zh-cn.php @@ -1,2 +1,3 @@ admin->xuanxuan = '喧喧集成'; +$lang->admin->xuanxuan = '客户端集成'; +$lang->admin->downloadXXD = '下载喧喧服务端'; diff --git a/xuanxuan/module/group/ext/lang/en/xuanxuan.php b/xuanxuan/module/group/ext/lang/en/xuanxuan.php index 90f49399bc..c2bc24fe8e 100644 --- a/xuanxuan/module/group/ext/lang/en/xuanxuan.php +++ b/xuanxuan/module/group/ext/lang/en/xuanxuan.php @@ -1,4 +1,6 @@ resource->admin->xuanxuan = 'xuanxuan'; +$lang->resource->admin->xuanxuan = 'xuanxuan'; +$lang->resource->admin->downloadxxd = 'downloadXXD'; $lang->admin->methodOrder[25] = 'xuanxuan'; +$lang->admin->methodOrder[30] = 'downloadxxd'; diff --git a/xuanxuan/module/group/ext/lang/zh-cn/xuanxuan.php b/xuanxuan/module/group/ext/lang/zh-cn/xuanxuan.php index 90f49399bc..c2bc24fe8e 100644 --- a/xuanxuan/module/group/ext/lang/zh-cn/xuanxuan.php +++ b/xuanxuan/module/group/ext/lang/zh-cn/xuanxuan.php @@ -1,4 +1,6 @@ resource->admin->xuanxuan = 'xuanxuan'; +$lang->resource->admin->xuanxuan = 'xuanxuan'; +$lang->resource->admin->downloadxxd = 'downloadXXD'; $lang->admin->methodOrder[25] = 'xuanxuan'; +$lang->admin->methodOrder[30] = 'downloadxxd'; diff --git a/xuanxuan/module/my/ext/view/index.html.php b/xuanxuan/module/my/ext/view/index.xuanxuan.html.hook.php similarity index 64% rename from xuanxuan/module/my/ext/view/index.html.php rename to xuanxuan/module/my/ext/view/index.xuanxuan.html.hook.php index beb3e29c04..4436118c7e 100644 --- a/xuanxuan/module/my/ext/view/index.html.php +++ b/xuanxuan/module/my/ext/view/index.xuanxuan.html.hook.php @@ -1,15 +1,3 @@ - - * @package ZenTaoPMS - * @version $Id: index.html.php 1947 2011-06-29 11:58:03Z wwccss $ - */ -?> - -fetch('block', 'dashboard', 'module=my');?> - From 1586f7428c0bdd13b7454be90af38f4ce5419ae2 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Fri, 21 Dec 2018 13:06:14 +0800 Subject: [PATCH 027/442] * add zh-tw lang. --- Makefile | 1 + module/common/lang/zh-tw.php | 7 +- module/entry/lang/zh-tw.php | 1 + module/message/lang/zh-tw.php | 6 +- module/misc/lang/zh-tw.php | 25 +++++ module/tree/lang/zh-tw.php | 2 +- module/upgrade/lang/zh-tw.php | 1 + tools/check.php | 205 ++++++++++++++++++---------------- 8 files changed, 142 insertions(+), 106 deletions(-) diff --git a/Makefile b/Makefile index f1718a17f1..467a549faa 100644 --- a/Makefile +++ b/Makefile @@ -86,6 +86,7 @@ pms: if [ ! -d "zentaopms/config/ext" ]; then mkdir zentaopms/config/ext; fi for module in `ls zentaopms/module/`; do if [ ! -d "zentaopms/module/$$module/ext" ]; then mkdir zentaopms/module/$$module/ext; fi done find zentaopms/ -name ext |xargs chmod -R 777 + tools/cn2tw.php zip -rq -9 ZenTaoPMS.$(VERSION).zip zentaopms rm -fr zentaopms ranzhi buildxx zentaoxx xuanxuan.zentao.*.zip deb: diff --git a/module/common/lang/zh-tw.php b/module/common/lang/zh-tw.php index 48543cc9f4..2dc52e30ec 100644 --- a/module/common/lang/zh-tw.php +++ b/module/common/lang/zh-tw.php @@ -502,9 +502,10 @@ $lang->pager->previousPage = "上一頁"; $lang->pager->nextPage = "下一頁"; $lang->pager->summery = "第 %s-%s 項,共 %s 項"; -$lang->proVersion = "專業版   "; -$lang->downNotify = "下載桌面提醒"; -$lang->website = "https://www.zentao.net"; +$lang->proVersion = "專業版   "; +$lang->downNotify = "下載桌面提醒"; +$lang->downloadClient = "下載客戶端"; +$lang->website = "https://www.zentao.net"; $lang->suhosinInfo = "警告:數據太多,請在php.ini中修改sohusin.post.max_vars和sohusin.request.max_vars(大於%s的數)。 保存並重新啟動apache或php-fpm,否則會造成部分數據無法保存。"; $lang->maxVarsInfo = "警告:數據太多,請在php.ini中修改max_input_vars(大於%s的數)。 保存並重新啟動apache或php-fpm,否則會造成部分數據無法保存。"; diff --git a/module/entry/lang/zh-tw.php b/module/entry/lang/zh-tw.php index 1c0d5a62ef..7c5a5dd1a4 100644 --- a/module/entry/lang/zh-tw.php +++ b/module/entry/lang/zh-tw.php @@ -28,6 +28,7 @@ $lang->entry->url = '請求地址'; $lang->entry->confirmDelete = '您確認要刪除該應用嗎?'; $lang->entry->help = '使用說明'; +$lang->entry->notify = '消息通知'; $lang->entry->note = new stdClass(); $lang->entry->note->name = '授權應用名稱'; diff --git a/module/message/lang/zh-tw.php b/module/message/lang/zh-tw.php index 79cff47ef8..c2127657b8 100644 --- a/module/message/lang/zh-tw.php +++ b/module/message/lang/zh-tw.php @@ -3,6 +3,6 @@ $lang->message->common = '消息'; $lang->message->index = '首頁'; $lang->message->setting = '設置'; -$lang->message->typeList['mail'] = '郵件'; -$lang->message->typeList['message'] = '瀏覽器通知'; -$lang->message->typeList['webhook'] = 'Webhook'; +$lang->message->typeList['mail'] = '郵件'; +$lang->message->typeList['message'] = '瀏覽器通知'; +$lang->message->typeList['webhook'] = 'Webhook'; diff --git a/module/misc/lang/zh-tw.php b/module/misc/lang/zh-tw.php index e25ec47b27..c93c34c64b 100644 --- a/module/misc/lang/zh-tw.php +++ b/module/misc/lang/zh-tw.php @@ -15,6 +15,28 @@ $lang->misc->ping = '防超時'; $lang->misc->api = 'https://api.zentao.net'; $lang->misc->enApi = 'http://api.zentao.pm'; +$lang->misc->client = new stdclass(); +$lang->misc->client->version = '客戶端版本'; +$lang->misc->client->os = '操作系統'; +$lang->misc->client->download = '下載'; +$lang->misc->client->downloading = '正在獲取安裝包:'; +$lang->misc->client->downloaded = '成功獲取安裝包'; +$lang->misc->client->setting = '正在設置配置信息'; +$lang->misc->client->setted = '成功設置配置信息'; + +$lang->misc->client->osList['win64'] = 'Windows 64位'; +$lang->misc->client->osList['win32'] = 'Windows 32位'; +$lang->misc->client->osList['linux64'] = 'Linux 64位'; +$lang->misc->client->osList['linux32'] = 'Linux 32位'; +$lang->misc->client->osList['mac'] = 'Mac版'; + +$lang->misc->client->errorInfo = new stdclass(); +$lang->misc->client->errorInfo->downloadError = '獲取安裝包失敗'; +$lang->misc->client->errorInfo->configError = '配置用戶信息失敗'; +$lang->misc->client->errorInfo->manualOpt = '請從 %s 手動獲取安裝包。'; +$lang->misc->client->errorInfo->dirNotExist = '客戶端下載存儲路徑 %s 不存在,請創建該目錄。'; +$lang->misc->client->errorInfo->dirNotWritable = '客戶端下載存儲路徑 %s 不可寫
linux下面請執行命令:sudo chmod 777 %s來修正'; + $lang->misc->zentao = new stdclass(); $lang->misc->zentao->version = '版本%s'; $lang->misc->zentao->labels['about'] = '關於禪道'; @@ -76,6 +98,7 @@ $lang->misc->feature = new stdclass(); $lang->misc->feature->lastest = '最新版本'; $lang->misc->feature->detailed = '詳情'; +$lang->misc->releaseDate['11.0.stable'] = '2018-12-21'; $lang->misc->releaseDate['10.6.stable'] = '2018-11-20'; $lang->misc->releaseDate['10.5.stable'] = '2018-10-25'; $lang->misc->releaseDate['10.4.stable'] = '2018-09-28'; @@ -96,6 +119,8 @@ $lang->misc->releaseDate['7.2.stable'] = '2015-05-22'; $lang->misc->releaseDate['7.1.stable'] = '2015-03-07'; $lang->misc->releaseDate['6.3.stable'] = '2014-11-07'; +$lang->misc->feature->all['11.0.stable'][] = array('title'=>'禪道整合喧喧'); + $lang->misc->feature->all['10.6.stable'][] = array('title'=>'調整備份機制', 'desc' => '

增加備份設置,備份更加靈活

顯示備份進度

可以更改備份目錄

'); $lang->misc->feature->all['10.6.stable'][] = array('title'=>'優化和調整菜單', 'desc' => '

調整後台菜單

調整我的地盤和項目的二級菜單

'); diff --git a/module/tree/lang/zh-tw.php b/module/tree/lang/zh-tw.php index a6c04294e3..c5b3316ef2 100644 --- a/module/tree/lang/zh-tw.php +++ b/module/tree/lang/zh-tw.php @@ -12,7 +12,7 @@ $lang->tree = new stdclass(); $lang->tree->common = '模組維護'; $lang->tree->edit = '編輯'; -$lang->tree->delete = '刪除模組'; +$lang->tree->delete = '刪除'; $lang->tree->browse = '通用模組維護'; $lang->tree->browseTask = '任務模組維護'; $lang->tree->manage = '維護模組'; diff --git a/module/upgrade/lang/zh-tw.php b/module/upgrade/lang/zh-tw.php index b6d9fdd17a..0d667e9073 100644 --- a/module/upgrade/lang/zh-tw.php +++ b/module/upgrade/lang/zh-tw.php @@ -46,5 +46,6 @@ $lang->upgrade->sureExecute = '確認執行'; $lang->upgrade->forbiddenExt = '以下插件與新版本不兼容,已經自動禁用:'; $lang->upgrade->updateFile = '需要更新附件信息。'; $lang->upgrade->noticeSQL = '檢查到你的資料庫跟標準不一致,嘗試修復失敗。請執行以下SQL語句,再刷新頁面檢查。'; +$lang->upgrade->afterDeleted = '以上檔案未能刪除, 刪除後刷新!'; include dirname(__FILE__) . '/version.php'; diff --git a/tools/check.php b/tools/check.php index 843f16fd6b..3723ba30f9 100755 --- a/tools/check.php +++ b/tools/check.php @@ -11,10 +11,8 @@ $config->global->flow = 'full'; /* set module root path and included the resource of group module. */ $moduleRoot = '../module/'; include $moduleRoot . '/group/lang/resource.php'; -foreach(glob($moduleRoot . '/group/ext/lang/zh-cn/*.php') as $resourceFile) -{ - include $resourceFile; -} +foreach(glob($moduleRoot . '/group/ext/lang/zh-cn/*.php') as $resourceFile) include $resourceFile; +foreach(glob('../xuanxuan/module/group/ext/lang/zh-cn/*.php') as $resourceFile) include $resourceFile; $lang->productCommon = ''; $lang->projectCommon = ''; @@ -116,59 +114,62 @@ $whiteList[] = 'webhook-asyncsend'; /* checking actions of every module. */ echo '-------------action checking-----------------' . "\n"; -foreach(glob($moduleRoot . '*') as $modulePath) +foreach(array($moduleRoot, '../xuanxuan/module/') as $subModuleRoot) { - $moduleName = basename($modulePath); - if(strpos('install|upgrade|convert|common|misc|editor', $moduleName) !== false) continue; - $controlFile = $modulePath . '/control.php'; - if(file_exists($controlFile)) + foreach(glob($subModuleRoot . '*') as $modulePath) { - include $controlFile; - if(class_exists($moduleName)) + $moduleName = basename($modulePath); + if(strpos('install|upgrade|convert|common|misc|editor', $moduleName) !== false) continue; + $controlFile = $modulePath . '/control.php'; + if(file_exists($controlFile)) { - if($moduleName == 'block') continue; - $class = new ReflectionClass($moduleName); - $methods = $class->getMethods(); - foreach($methods as $method) + include $controlFile; + if(class_exists($moduleName)) { - $methodRef = new ReflectionMethod($method->class, $method->name); - if($methodRef->isPublic() and strpos($method->name, '__') === false) + if($moduleName == 'block') continue; + $class = new ReflectionClass($moduleName); + $methods = $class->getMethods(); + foreach($methods as $method) { - $methodName = $method->name; - if(in_array($moduleName . '-' . strtolower($method->name), $whiteList)) continue; - if(strpos($methodName, 'ajax') !== false) continue; - - $exits = false; - if(isset($lang->resource->$moduleName)) + $methodRef = new ReflectionMethod($method->class, $method->name); + if($methodRef->isPublic() and strpos($method->name, '__') === false) { - foreach($lang->resource->$moduleName as $key => $label) + $methodName = $method->name; + if(in_array($moduleName . '-' . strtolower($method->name), $whiteList)) continue; + if(strpos($methodName, 'ajax') !== false) continue; + + $exits = false; + if(isset($lang->resource->$moduleName)) { - if(strtolower($methodName) == strtolower($key)) $exits = true; + foreach($lang->resource->$moduleName as $key => $label) + { + if(strtolower($methodName) == strtolower($key)) $exits = true; + } } + if(!$exits) echo $moduleName . "\t" . $methodName . " not in the list. \n"; } - if(!$exits) echo $moduleName . "\t" . $methodName . " not in the list. \n"; } } } - } - /* Checking extension files. */ - $extControlFiles = glob($modulePath . '/ext/control/*.php'); - if($extControlFiles) - { - foreach($extControlFiles as $extControlFile) + /* Checking extension files. */ + $extControlFiles = glob($modulePath . '/ext/control/*.php'); + if($extControlFiles) { - $methodFile = substr($extControlFile, strrpos($extControlFile, '/') + 1); - $methodName = substr($methodFile, 0, strpos($methodFile, '.')); - if(in_array($moduleName . '-' . strtolower($methodName), $whiteList)) continue; - if(strpos($methodName, 'ajax') !== false) continue; - - $exits = false; - foreach($lang->resource->$moduleName as $key => $label) + foreach($extControlFiles as $extControlFile) { - if(strtolower($methodName) == strtolower($key)) $exits = true; + $methodFile = substr($extControlFile, strrpos($extControlFile, '/') + 1); + $methodName = substr($methodFile, 0, strpos($methodFile, '.')); + if(in_array($moduleName . '-' . strtolower($methodName), $whiteList)) continue; + if(strpos($methodName, 'ajax') !== false) continue; + + $exits = false; + foreach($lang->resource->$moduleName as $key => $label) + { + if(strtolower($methodName) == strtolower($key)) $exits = true; + } + if(!$exits) echo $moduleName . "\t" . $methodName . " not in the list. \n"; } - if(!$exits) echo $moduleName . "\t" . $methodName . " not in the list. \n"; } } } @@ -177,66 +178,69 @@ foreach(glob($moduleRoot . '*') as $modulePath) echo '-------------lang checking-----------------' . "\n"; include '../module/common/lang/zh-cn.php'; include '../config/config.php'; -foreach(glob($moduleRoot . '*') as $modulePath) +foreach(array($moduleRoot, '../xuanxuan/module/') as $subModuleRoot) { - unset($lang); - $moduleName = basename($modulePath); - $mainLangFile = $modulePath . '/lang/zh-cn.php'; - if(!file_exists($mainLangFile)) continue; - $mainLines = file($mainLangFile); - - foreach($config->langs as $langKey => $langName) + foreach(glob($subModuleRoot . '*') as $modulePath) { - if($langKey == 'zh-cn' or $langKey == 'zh-tw') continue; - $langFile = $modulePath . '/lang/' . $langKey . '.php'; - if(!file_exists($langFile)) continue; - $lines = file($langFile); - foreach($mainLines as $lineNO => $line) + unset($lang); + $moduleName = basename($modulePath); + $mainLangFile = $modulePath . '/lang/zh-cn.php'; + if(!file_exists($mainLangFile)) continue; + $mainLines = file($mainLangFile); + + foreach($config->langs as $langKey => $langName) { - if(!isset($lines[$lineNO]) OR empty(trim($lines[$lineNO]))) continue; - if(empty(trim($line))) continue; - if(strpos($line, '$lang') === 0) + if($langKey == 'zh-cn' or $langKey == 'zh-tw') continue; + $langFile = $modulePath . '/lang/' . $langKey . '.php'; + if(!file_exists($langFile)) continue; + $lines = file($langFile); + foreach($mainLines as $lineNO => $line) { - if(strpos($line, '=') !== false) + if(!isset($lines[$lineNO]) OR empty(trim($lines[$lineNO]))) continue; + if(empty(trim($line))) continue; + if(strpos($line, '$lang') === 0) { - list($mainKey, $mainValue) = explode('=', $line); - list($key, $value) = explode('=', $lines[$lineNO]); - } - if((strpos($line, '=') === false and $line != $lines[$lineNO]) or trim($mainKey) != trim($key)) - { - $key = trim($key); - $lineNO = $lineNO + 1; - echo "module $moduleName need checking, command is:"; - echo " vim -O +$lineNO ../module/$moduleName/lang/zh-cn.php +$lineNO ../module/$moduleName/lang/en.php \n"; - break; + if(strpos($line, '=') !== false) + { + list($mainKey, $mainValue) = explode('=', $line); + list($key, $value) = explode('=', $lines[$lineNO]); + } + if((strpos($line, '=') === false and $line != $lines[$lineNO]) or trim($mainKey) != trim($key)) + { + $key = trim($key); + $lineNO = $lineNO + 1; + echo "module $moduleName need checking, command is:"; + echo " vim -O +$lineNO ../module/$moduleName/lang/zh-cn.php +$lineNO ../module/$moduleName/lang/en.php \n"; + break; + } } } } - } - foreach(glob($modulePath . '/ext/lang/zh-cn/*.php') as $extMainLangFile) - { - $extMainLines = file($extMainLangFile); - $extLangFile = basename($extMainLangFile); - $extEnFile = $modulePath . '/ext/lang/en/' . $extLangFile; - $extLines = file($extEnFile); - foreach($extMainLines as $lineNO => $line) + foreach(glob($modulePath . '/ext/lang/zh-cn/*.php') as $extMainLangFile) { - if(strpos($line, '$lang') === false) + $extMainLines = file($extMainLangFile); + $extLangFile = basename($extMainLangFile); + $extEnFile = $modulePath . '/ext/lang/en/' . $extLangFile; + $extLines = file($extEnFile); + foreach($extMainLines as $lineNO => $line) { - //if($line != $lines[$lineNO]) echo $moduleName . ' ' . $langKey . ' ' . $lineNO . "\n"; - } - else - { - list($mainKey, $mainValue) = explode('=', $line); - list($key, $value) = explode('=', $extLines[$lineNO]); - if(trim($mainKey) != trim($key)) + if(strpos($line, '$lang') === false) { - $key = trim($key); - $lineNO = $lineNO + 1; - echo "module $moduleName need checking, command is:"; - echo " vim -O +$lineNO ../../module/$moduleName/ext/lang/zh-cn/$extLangFile +$lineNO ../../module/$moduleName/ext/lang/en/$extLangFile \n"; - break; + //if($line != $lines[$lineNO]) echo $moduleName . ' ' . $langKey . ' ' . $lineNO . "\n"; + } + else + { + list($mainKey, $mainValue) = explode('=', $line); + list($key, $value) = explode('=', $extLines[$lineNO]); + if(trim($mainKey) != trim($key)) + { + $key = trim($key); + $lineNO = $lineNO + 1; + echo "module $moduleName need checking, command is:"; + echo " vim -O +$lineNO ../../module/$moduleName/ext/lang/zh-cn/$extLangFile +$lineNO ../../module/$moduleName/ext/lang/en/$extLangFile \n"; + break; + } } } } @@ -249,18 +253,21 @@ $app = new app; $lang = new stdclass(); error_reporting(E_WARNING | E_STRICT ); -foreach(glob($moduleRoot . '*') as $modulePath) +foreach(array($moduleRoot, '../xuanxuan/module/') as $subModuleRoot) { - $moduleName = basename($modulePath); - $cnLangFile = $modulePath . '/lang/zh-cn.php'; - $enLangFile = $modulePath . '/lang/en.php'; - $configFile = $modulePath . '/config.php'; + foreach(glob($subModuleRoot . '*') as $modulePath) + { + $moduleName = basename($modulePath); + $cnLangFile = $modulePath . '/lang/zh-cn.php'; + $enLangFile = $modulePath . '/lang/en.php'; + $configFile = $modulePath . '/config.php'; - if(!isset($lang->$moduleName)) $lang->$moduleName = new stdclass(); - if(!isset($config->$moduleName)) $config->$moduleName = new stdclass(); - if(file_exists($cnLangFile)) include $cnLangFile; - if(file_exists($enLangFile)) include $enLangFile; - if(file_exists($configFile)) include $configFile; + if(!isset($lang->$moduleName)) $lang->$moduleName = new stdclass(); + if(!isset($config->$moduleName)) $config->$moduleName = new stdclass(); + if(file_exists($cnLangFile)) include $cnLangFile; + if(file_exists($enLangFile)) include $enLangFile; + if(file_exists($configFile)) include $configFile; + } } echo '-------------demo data checking. -----------------' . "\n"; From 0db5be7da12b7e7fd539b3ed8c972a868242eee5 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Fri, 21 Dec 2018 13:19:34 +0800 Subject: [PATCH 028/442] * fix for upgrade. --- module/upgrade/model.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/module/upgrade/model.php b/module/upgrade/model.php index 741b95fdd0..a0b9e13ddf 100644 --- a/module/upgrade/model.php +++ b/module/upgrade/model.php @@ -2582,6 +2582,9 @@ class upgradeModel extends model $keyID = $this->dao->select('id')->from(TABLE_CONFIG)->where('owner')->eq('system')->andWhere('module')->eq('xuanxuan')->andWhere('`key`')->eq('key')->fetch('id'); if($keyID) { + $existKey = $this->dao->select('id')->from(TABLE_CONFIG)->where('owner')->eq('system')->andWhere('module')->eq('common')->andWhere('section')->eq('xuanxuan')->andWhere('`key`')->eq('key')->fetch('id'); + if($existKey) $this->dao->delete()->from(TABLE_CONFIG)->where('id')->eq($existKey)->exec(); + $this->dao->update(TABLE_CONFIG)->set('module')->eq('common')->set('section')->eq('xuanxuan')->where('id')->eq($keyID)->exec(); $this->setting->setItem('system.common.xuanxuan.turnon', '1'); $this->setting->setItem('system.common.xxserver.noticed', '1'); From ba46426f03014dcdb4d6a5e0d3aaedee6aa31945 Mon Sep 17 00:00:00 2001 From: chenfeiCF Date: Fri, 21 Dec 2018 13:36:30 +0800 Subject: [PATCH 029/442] * Add client help manual link. --- module/common/lang/en.php | 2 ++ module/common/lang/zh-cn.php | 2 ++ module/common/model.php | 2 +- module/misc/control.php | 2 +- 4 files changed, 6 insertions(+), 2 deletions(-) diff --git a/module/common/lang/en.php b/module/common/lang/en.php index 8070e348ba..1caefc4b30 100644 --- a/module/common/lang/en.php +++ b/module/common/lang/en.php @@ -505,6 +505,8 @@ $lang->pager->summery = "%s-%s of %s."; $lang->proVersion = "ZenTao Pro   "; $lang->downNotify = "Download Desktop Notification"; $lang->downloadClient = "Download Desktop Client"; +$lang->clientHelp = "Client help manual"; +$lang->clientHelpLink = "http://www.zentao.net/book/zentaopmshelp/302.html#2"; $lang->website = "https://www.zentao.pm"; $lang->suhosinInfo = "Warning! Data is reaching the limit. Please change sohusin.post.max_vars and sohusin.request.max_vars (set larger %s value) in php.ini, then save and restart Apache or php-fpm, or some data will not be saved."; diff --git a/module/common/lang/zh-cn.php b/module/common/lang/zh-cn.php index e2de871633..9cec01efbd 100644 --- a/module/common/lang/zh-cn.php +++ b/module/common/lang/zh-cn.php @@ -505,6 +505,8 @@ $lang->pager->summery = "第 %s-%s 项,共 %sproVersion = "专业版   "; $lang->downNotify = "下载桌面提醒"; $lang->downloadClient = "下载客户端"; +$lang->clientHelp = "客户端使用说明"; +$lang->clientHelpLink = "http://www.zentao.net/book/zentaopmshelp/302.html#2"; $lang->website = "https://www.zentao.net"; $lang->suhosinInfo = "警告:数据太多,请在php.ini中修改sohusin.post.max_vars和sohusin.request.max_vars(大于%s的数)。 保存并重新启动apache或php-fpm,否则会造成部分数据无法保存。"; diff --git a/module/common/model.php b/module/common/model.php index 05f1a03a2d..39d6b1bb35 100644 --- a/module/common/model.php +++ b/module/common/model.php @@ -699,7 +699,7 @@ class commonModel extends model public static function printClientLink() { global $lang; - echo html::a(helper::createLink('misc', 'downloadClient', '', '', true), $lang->downloadClient, '', "title='$lang->downloadClient' class='text-primary iframe' data-width='600'") . '   '; + echo html::a(helper::createLink('misc', 'downloadClient', '', '', true), $lang->downloadClient, '', "title='$lang->downloadClient' class='text-primary iframe' data-width='600'") . html::a($lang->clientHelpLink, "", '', "title='$lang->clientHelp' target='_blank'") . '   '; } /** diff --git a/module/misc/control.php b/module/misc/control.php index 62c608b968..cb0a5ad12c 100644 --- a/module/misc/control.php +++ b/module/misc/control.php @@ -173,7 +173,7 @@ class misc extends control $zfile->removeDir($clientDir); } - $this->fetch('file', 'sendDownHeader', array('fileName' => "zentaoclient." . $os . '.zip', 'zip', $zipContent)); + $this->fetch('file', 'sendDownHeader', array('fileName' => "zentao_chat_client." . $os . '.zip', 'zip', $zipContent)); } $this->view->action = $action; From 4fd5c5f4ef31b74901ab4cf7dbf66ee3e1acdb53 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Fri, 21 Dec 2018 13:37:59 +0800 Subject: [PATCH 030/442] * change for zh-tw lang. --- module/common/lang/zh-tw.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/module/common/lang/zh-tw.php b/module/common/lang/zh-tw.php index 2dc52e30ec..fd664baecd 100644 --- a/module/common/lang/zh-tw.php +++ b/module/common/lang/zh-tw.php @@ -505,6 +505,8 @@ $lang->pager->summery = "第 %s-%s 項,共 %sproVersion = "專業版   "; $lang->downNotify = "下載桌面提醒"; $lang->downloadClient = "下載客戶端"; +$lang->clientHelp = "客戶端使用說明"; +$lang->clientHelpLink = "http://www.zentao.net/book/zentaopmshelp/302.html#2"; $lang->website = "https://www.zentao.net"; $lang->suhosinInfo = "警告:數據太多,請在php.ini中修改sohusin.post.max_vars和sohusin.request.max_vars(大於%s的數)。 保存並重新啟動apache或php-fpm,否則會造成部分數據無法保存。"; From 94af546018bd040ee69c919a24bcc97946989b36 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Fri, 21 Dec 2018 13:49:22 +0800 Subject: [PATCH 031/442] * hide back button in xuanxuan. --- module/story/css/x.change.css | 1 + module/story/css/x.review.css | 1 + 2 files changed, 2 insertions(+) diff --git a/module/story/css/x.change.css b/module/story/css/x.change.css index 1e887f0a54..f832ea242e 100644 --- a/module/story/css/x.change.css +++ b/module/story/css/x.change.css @@ -1 +1,2 @@ .main-header{display: none} +.form-actions button:last-child{display:none;} diff --git a/module/story/css/x.review.css b/module/story/css/x.review.css index 1e887f0a54..f832ea242e 100644 --- a/module/story/css/x.review.css +++ b/module/story/css/x.review.css @@ -1 +1,2 @@ .main-header{display: none} +.form-actions button:last-child{display:none;} From 391d407c9f2d482c7ef9826a7cbfd01a37a5098b Mon Sep 17 00:00:00 2001 From: chenfeiCF Date: Fri, 21 Dec 2018 14:27:12 +0800 Subject: [PATCH 032/442] * Adjust submit lable. --- module/misc/view/downloadclient.html.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/misc/view/downloadclient.html.php b/module/misc/view/downloadclient.html.php index 9ed512c6a3..31b934817e 100644 --- a/module/misc/view/downloadclient.html.php +++ b/module/misc/view/downloadclient.html.php @@ -24,7 +24,7 @@ misc->client->osList, $os, "class='form-control'");?> - select, '', 'btn btn-primary btn-wide');?> + From 89efeaca7f54f07a346b55d6558db1992ac28e30 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Fri, 21 Dec 2018 15:02:48 +0800 Subject: [PATCH 033/442] * adjust for with xuanxuan. --- Makefile | 10 +++++----- module/bug/control.php | 4 ++-- module/story/control.php | 4 ++-- module/task/control.php | 4 ++-- module/testcase/control.php | 4 ++-- module/upgrade/model.php | 7 +++++++ 6 files changed, 20 insertions(+), 13 deletions(-) diff --git a/Makefile b/Makefile index 467a549faa..9b8abc72be 100644 --- a/Makefile +++ b/Makefile @@ -51,7 +51,7 @@ pms: cp ranzhi/config/ext/xuanxuan.php buildxx/config/ext/ cp -r ranzhi/lib/phpaes buildxx/lib/ cp -r ranzhi/framework/xuanxuan.class.php buildxx/framework/ - cp -r ranzhi/db/xuanxuan.sql buildxx/db/ + cp -r ranzhi/db/*.sql buildxx/db/ cp -r ranzhi/app/sys/chat buildxx/module/ cp -r ranzhi/app/sys/common/ext/model/hook buildxx/module/common/ext/model/ cp -r ranzhi/app/sys/action buildxx/module/ @@ -67,10 +67,10 @@ pms: sed -i 's/&app=sys//' buildxx/module/chat/control.php sed -i 's/file->createdBy/file->addedBy/' buildxx/module/chat/control.php sed -i 's/file->createdDate/file->addedDate/' buildxx/module/chat/control.php - sed -i 's/im_/zt_im_/' buildxx/db/xuanxuan.sql - sed -i 's/sys_user/zt_user/' buildxx/db/xuanxuan.sql - sed -i 's/sys_file/zt_file/' buildxx/db/xuanxuan.sql - sed -i '/sys_entry/d' buildxx/db/xuanxuan.sql + sed -i 's/im_/zt_im_/' buildxx/db/*.sql + sed -i 's/sys_user/zt_user/' buildxx/db/*.sql + sed -i 's/sys_file/zt_file/' buildxx/db/*.sql + sed -i '/sys_entry/d' buildxx/db/*.sql zip -rqm -9 xuanxuan.zentao.$(VERSION).zip buildxx/* rm -rf buildxx/ unzip xuanxuan.zentao.*.zip -d zentaoxx diff --git a/module/bug/control.php b/module/bug/control.php index a508f85378..3cb4c63b8a 100644 --- a/module/bug/control.php +++ b/module/bug/control.php @@ -296,8 +296,8 @@ class bug extends control if(defined('RUN_MODE') && RUN_MODE == 'api') $this->send(array('status' => 'success', 'data' => $bugID)); - setcookie('bugModule', 0, 0, $this->config->webRoot); - $location = $this->createLink('bug', 'browse', "productID={$this->post->product}&branch=$branch"); + setcookie('bugModule', (int)$this->post->module, 0, $this->config->webRoot); + $location = $this->createLink('bug', 'browse', "productID={$this->post->product}&branch=$branch&browseType=unclosed¶m=0&orderBy=id_desc"); if($this->app->getViewType() == 'xhtml') $location = $this->createLink('bug', 'view', "bugID=$bugID"); $response['locate'] = $location; $this->send($response); diff --git a/module/story/control.php b/module/story/control.php index ddeb2daaad..5f98473209 100644 --- a/module/story/control.php +++ b/module/story/control.php @@ -124,10 +124,10 @@ class story extends control $response['locate'] = $this->createLink('project', 'story', "projectID=$projectID&orderBy=&browseType=byModule&moduleID=$moduleID"); if($projectID == 0) { - setcookie('storyModule', 0, 0, $this->config->webRoot); + setcookie('storyModule', (int)$moduleID, 0, $this->config->webRoot); $productID = $this->post->product ? $this->post->product : $productID; $branchID = $this->post->branch ? $this->post->branch : $branch; - $response['locate'] = $this->createLink('product', 'browse', "productID=$productID&branch=$branchID"); + $response['locate'] = $this->createLink('product', 'browse', "productID=$productID&branch=$branchID&browseType=unclosed¶m=0&orderBy=id_desc"); } if($this->app->getViewType() == 'xhtml') $response['locate'] = $this->createLink('story', 'view', "storyID=$storyID"); $this->send($response); diff --git a/module/task/control.php b/module/task/control.php index df0b622021..a366a6ee55 100644 --- a/module/task/control.php +++ b/module/task/control.php @@ -154,8 +154,8 @@ class task extends control } elseif($this->post->after == 'toTaskList') { - setcookie('moduleBrowseParam', 0, 0, $this->config->webRoot); - $taskLink = $this->createLink('project', 'task', "projectID=$projectID"); + setcookie('moduleBrowseParam', (int)$this->post->module, 0, $this->config->webRoot); + $taskLink = $this->createLink('project', 'task', "projectID=$projectID&status=unclosed¶m=0&orderBy=id_desc"); $response['locate'] = $taskLink; $this->send($response); } diff --git a/module/testcase/control.php b/module/testcase/control.php index c5b1fd99d9..ce98ec767a 100644 --- a/module/testcase/control.php +++ b/module/testcase/control.php @@ -246,8 +246,8 @@ class testcase extends control $this->send($response); } - setcookie('caseModule', 0, 0, $this->config->webRoot); - $response['locate'] = $this->createLink('testcase', 'browse', "productID={$this->post->product}&branch={$this->post->branch}"); + setcookie('caseModule', (int)$this->post->module, 0, $this->config->webRoot); + $response['locate'] = $this->createLink('testcase', 'browse', "productID={$this->post->product}&branch={$this->post->branch}&browseType=all¶m=0&orderBy=id_desc"); $this->send($response); } if(empty($this->products)) $this->locate($this->createLink('product', 'create')); diff --git a/module/upgrade/model.php b/module/upgrade/model.php index a0b9e13ddf..2377f1b0cc 100644 --- a/module/upgrade/model.php +++ b/module/upgrade/model.php @@ -250,6 +250,10 @@ class upgradeModel extends model case '10_5_1': $this->execSQL($this->getUpgradeFile('10.5.1')); case '10_6': + $xuanxuanSql = $this->app->getAppRoot() . 'db' . DS . 'upgradexuanxuan2.1.0.sql'; + $this->execSQL($xuanxuanSql); + $xuanxuanSql = $this->app->getAppRoot() . 'db' . DS . 'upgradexuanxuan2.2.0.sql'; + $this->execSQL($xuanxuanSql); $this->initXuanxuan(); } @@ -369,6 +373,9 @@ class upgradeModel extends model case '10_4': $confirmContent .= file_get_contents($this->getUpgradeFile('10.4')); case '10_5': case '10_5_1': $confirmContent .= file_get_contents($this->getUpgradeFile('10.5.1')); + case '10_6': + $confirmContent .= file_get_contents($this->app->getAppRoot() . 'db' . DS . 'upgradexuanxuan2.1.0.sql'); + $confirmContent .= file_get_contents($this->app->getAppRoot() . 'db' . DS . 'upgradexuanxuan2.2.0.sql'); } return str_replace('zt_', $this->config->db->prefix, $confirmContent); } From 60cbbfe8a1f7641b8005eaa939142d0e4332d36d Mon Sep 17 00:00:00 2001 From: wangyidong Date: Mon, 24 Dec 2018 10:32:06 +0800 Subject: [PATCH 034/442] * fix bug for onlybody. --- Makefile | 1 + xuanxuan/module/message/ext/model/class/xuanxuan.class.php | 2 ++ 2 files changed, 3 insertions(+) diff --git a/Makefile b/Makefile index 9b8abc72be..a2fe4b3397 100644 --- a/Makefile +++ b/Makefile @@ -55,6 +55,7 @@ pms: cp -r ranzhi/app/sys/chat buildxx/module/ cp -r ranzhi/app/sys/common/ext/model/hook buildxx/module/common/ext/model/ cp -r ranzhi/app/sys/action buildxx/module/ + cp -r xuanxuan/config/* buildxx/config/ cp -r xuanxuan/module/* buildxx/module/ cp -r xuanxuan/www/* buildxx/www/ sed -i 's/site,//' buildxx/module/chat/model.php diff --git a/xuanxuan/module/message/ext/model/class/xuanxuan.class.php b/xuanxuan/module/message/ext/model/class/xuanxuan.class.php index 3fecafbf76..4804d6e314 100644 --- a/xuanxuan/module/message/ext/model/class/xuanxuan.class.php +++ b/xuanxuan/module/message/ext/model/class/xuanxuan.class.php @@ -16,6 +16,7 @@ class xuanxuanMessage extends messageModel $title = $this->app->user->realname . $this->lang->action->label->$actionType . $this->lang->action->objectTypes[$objectType]; $text = $title . ' ' . "[#{$objectID}::{$object->$field}]"; + $onlybody = isset($_GET['onlybody']) ? $_GET['onlybody'] : ''; unset($_GET['onlybody']); $url = common::getSysURL() . helper::createLink($objectType, 'view', "id=$objectID", 'html'); @@ -27,6 +28,7 @@ class xuanxuanMessage extends messageModel $target = array_keys($target); if($target) $this->loadModel('chat')->createNotify($target, $text, '', '', 'text', $url, array(), array('id' => 'zentao', 'realname' => $this->lang->message->sender, 'name' => $this->lang->message->sender)); + if($onlybody) $_GET['onlybody'] = $onlybody; } } } From 3f7d659bcc8115ccdf8cc3145c2da02e7af03367 Mon Sep 17 00:00:00 2001 From: Yagami Date: Mon, 24 Dec 2018 10:45:02 +0800 Subject: [PATCH 035/442] * Move my/ext/view to block/ext/view. --- .../ext/view/dashboard.xuanxuan.html.hook.php} | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename xuanxuan/module/{my/ext/view/index.xuanxuan.html.hook.php => block/ext/view/dashboard.xuanxuan.html.hook.php} (83%) mode change 100644 => 100755 diff --git a/xuanxuan/module/my/ext/view/index.xuanxuan.html.hook.php b/xuanxuan/module/block/ext/view/dashboard.xuanxuan.html.hook.php old mode 100644 new mode 100755 similarity index 83% rename from xuanxuan/module/my/ext/view/index.xuanxuan.html.hook.php rename to xuanxuan/module/block/ext/view/dashboard.xuanxuan.html.hook.php index 4436118c7e..7d46845e74 --- a/xuanxuan/module/my/ext/view/index.xuanxuan.html.hook.php +++ b/xuanxuan/module/block/ext/view/dashboard.xuanxuan.html.hook.php @@ -4,13 +4,13 @@ $this->app->loadLang('chat'); $account = $this->app->user->account; $xxInstalled = $this->app->user->account . 'installed'; ?> -xxserver->installed) and $config->xuanxuan->turnon and !isset($config->xxclient->$xxInstalled) and $config->global->flow == 'full' and $moduleName == 'my' and $methodName == 'index'):?> +xxserver->installed) and $config->xuanxuan->turnon and !isset($config->xxclient->$xxInstalled) and $config->global->flow == 'full' ):?> var myModalTrigger = new $.zui.ModalTrigger({custom: 'chat->xxClientConfirm;?>', title: 'chat->zentaoClient;?>'}); var result = myModalTrigger.show(); loadModel('setting')->setItem("system.common.xxclient.{$account}installed", 1);?> -xxserver->noticed) and $this->app->user->admin and $config->global->flow == 'full' and $moduleName == 'my' and $methodName == 'index'):?> +xxserver->noticed) and $this->app->user->admin and $config->global->flow == 'full' and $config->$module->block->initVersion >= '2'):?> var myModalTrigger = new $.zui.ModalTrigger({custom: 'chat->xxServerConfirm;?>', title: 'chat->zentaoClient;?>'}); var result = myModalTrigger.show(); loadModel('setting')->setItem("system.common.xxserver.noticed", 1);?> From 9602746cab1c1655646633b67d38b2b1c03e690a Mon Sep 17 00:00:00 2001 From: wangyidong Date: Mon, 24 Dec 2018 14:48:00 +0800 Subject: [PATCH 036/442] * replace zentao-integrated. --- xuanxuan/module/entry/ext/control/visit.php | 6 ++++-- .../www/data/xuanxuan/zentao-integrated.zip | Bin 97878 -> 98290 bytes 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/xuanxuan/module/entry/ext/control/visit.php b/xuanxuan/module/entry/ext/control/visit.php index f8a69b3a7b..7b0470bb08 100644 --- a/xuanxuan/module/entry/ext/control/visit.php +++ b/xuanxuan/module/entry/ext/control/visit.php @@ -58,8 +58,10 @@ class entry extends control $user->ip = $this->session->clientIP->IP; $xxInstalled = $user->account . 'installed'; - if(!isset($this->config->xxclient->$xxInstalled)) $this->loadModel('setting')->setItem("system.common.xxclient.{$user->account}installed", '1'); - if(!isset($this->config->xxserver->installed)) $this->loadModel('setting')->setItem("system.common.xxserver.installed", '1'); + $this->loadModel('setting'); + if(!isset($this->config->xxclient->$xxInstalled)) $this->setting->setItem("system.common.xxclient.{$user->account}installed", '1'); + if(!isset($this->config->xxserver->installed)) $this->setting->setItem("system.common.xxserver.installed", '1'); + if(!isset($this->config->xxserver->noticed)) $this->setting->setItem("system.common.xxserver.noticed", '1'); $this->session->set('user', $user); $this->app->user = $this->session->user; diff --git a/xuanxuan/www/data/xuanxuan/zentao-integrated.zip b/xuanxuan/www/data/xuanxuan/zentao-integrated.zip index 1e354b71a23dce166fe5df451c381cf0bdb13474..8b5c269dc69699d43d6c4c4ea60f86bd9b75b262 100644 GIT binary patch delta 4532 zcmZvgcTf{b*Txe%NUx#yCP*)rUL~|hZ;Dju2+}*D6FNuo`|jWU#IhbZv`DL0c5jY;WVAuUPd0*HY@>DMb{;NIIDZxKHj2|TA1K@9wxWE`Qj*qAL z`749AEGxQeYa1Z)p3G1JQW}=JAgInXeUD#TqrztPvcj0hHp2--j*I*tQ%V88ncB<~ zVcy)VIf{1Ukj4J%*B{r?sComFc+cJ^G~SFUfH3 z_8ra%PSMX|t@-lue32l+K{rBI*={1gv+h^mp=}V~uHNR$-1U#sU#2kx+;P^UWZQY&mbHhlAek=^*&cbdbbVo&GAVT)c3JjmpwLkSDg=IR&HcUKb$k8kInIoM zLsPWne!5EhpJ-+1I5^FgFmnJ;f+*3sM;v(fjp80EV`gBOO-IiC6P0Aj5iR`dir(_e zlV7#t%5f9#BRYWV=^_1h_7Dlc%{%i84_?R%cgW5yL)oiW7V!B#6+m}LDFz3ktn9k_ zo(>-f{V9n-6k2omE;7A13}zRHRKa-wZ^f9DVIE50t>RVYj1HCb4u(8n*lJUta`FQ3 zTs}ioPKbLoEJ+YgL7*kcjUbQH3iwMkKe4nwSbi>zFO-8KdQ-$?h>QNZ!J+T1L=&F_XQ7tC74Pu<5 z6?JGo%yp_O5vVQHKRk4cRsDI~vr@E0aWp8-xL=uX#g$C$?X7!KD8P4_u5dy7wrSjxZvs7Hfv}zmF$r5U~a{&O6otL3UNpW4Ny(Ejm66GcKC01eB#i%MAY`CC! z-eVTF@+Pt?Nk%Sck(RUOas;AQ6(02ytzSMe|+CTa&TT4 zk`(XD7B>p33~tGnjJ#LVMlQcuDf#&P!AsH_o^G(i2~R06u5+;mCn9?BV)}`$+Xj@L;d?<` z!kt3Dkz_YS_rvg}PXiWxZlzdKi+fG!H)I7iL>#EVfVMdXi_#XnsD_--zA7E5Ng4z= zFqC8V#FO)Kf6M?}9JZ8Oemr{pkZAR$vrv#|e&z&kZZmO_$}IYTWe0aPvERh zp7AI=$1y&}G@-0w_{z-Wele7g_6K?by`uX-8Gokv`Q%vJU9je5T(lv1ejKTpzC1I3 z0x-Lm`H^H@sRF^BE;#7;Q+W0ABMJ`AyI$5#vvMiC+f^?{8+hr_@m!?Dnq4w5at~B+?|a-qVql;F{mmoYYIjy+}&Hsy#g)OpaaiY&H8AB<=+ig z?hDElfN<$=9b(rJ(ux9a(kxzeshj3#qj;!12Ee@IOUsIZ96_2$+65@ZlBrl<*y7KY z>l43g<4Jbu+@YaY(H`#8O;l78Dn>tw2{rVm(GFx}g9gPTTZ>ckvN7>bE>BJheL^NN zCm)tPo@1Xn!J%34nqQ|1j);5+DVE`xoarp_xv0{J7&l!A&CsY&-22bK?E?3z3RK=n zTS1yER>YBiNoB4VxY92#jWeshCCl|_dB9U|qCjHtQnqNGhb=%=UB>es+o+p55Mk9P zBRskjdXmTeP_)uax&`4nFtjV$sfX+!l8h1 zaEkM=@pSeYk#%e_+0IOO@L3#DSfexRM3%Cm%wcAkNXxNMJayRR&%VTh;N%m}ZQ6!J zML}QDE!SF2CF1ZId#xQeTG)Q7Vx}2{dxTg@98EPA{y{`S%x;};@;PIMxwOidAR>W9 ziC4Y~3OW;Zd^I&7D_Q>ey1$S)#wtMq6}FClrEDjLT1IOji)=02%vZ765t`Z}cgY=l{QvU8&qkH`4T-}K(}?zYhs)!PR#tsGY_%2Ts{W`J#4 zKd~|4`A)rNY;9$xfPEt$7hJ*1AS|RH`(mtK4Rs-T8#sJY?YhGx0itee(dpUNJUK7q zay>R&qrE=L&MMqGWt~0B*k7*X=$hZsAo&c>A#m(1Z%pRpPHDI= zU+EsgoZ<5Wrta8i7Tl=NnOQR-$TW*?>0VDSX=0_t`hK18QkYvocr9Iu#4=}$6bw_l<25A#zgSxsak&%cp}SObmA&r051Tc`hntxf;>*(2|Gv= ziyOnyyvUBzpPm31`uXAPxCn{Vd`e&}4=}vp7-ahU4BN4j>grH4#mFvQHr2--DQhNlle2@m zC8wV|)-A}$?p#KZI1Oqa7UF-?{+Y}6%|9WMm-nuE8!hhLNI8$p60Ld<^F{Gg8>sq4 zD%N9W90;F#=QTo+xPrC~nwbj#ZyS*!zi@>x3tye}ii)`xH^gaJm0x08hkH{7HZ9F0 zPwdz z3`E2l)D%MR?FUpns0(wZ+csI+;SE{WN9rh2Wy)4P&dq!2)5 z8Pzcp#F?G_HX&lpkpZ?Qn9v^XTDIm?QP?!89kL=d>tzW$T8xTG1J&PAfHr^_t+s|1 zsR}MJ`#5`e&J%v9nf7^&gGuu4B*)LYL1B5|UcWpH{oF{%T*Z4vGu?zoB3%?2x)T#q zY-HtE>O=GvGalyU&ZnTbH|qX|t>(icVZgDyo&#=k^GR4-eMb@NLHksSH}TbzYBr>v zn@e!Bzsul4p)<|CiNwJ-=zQNt+PApr* zQ63jMfrK6~37r@7*sybPsgvsN3pGPl<;&@R?GeO`4>E~N8USd+)gdYbo*`o%+JAth z&T1>16eTHhx||-4_C@kN@8j~{?J9OU03(60)}LZ@G2=-|+M!BNx*3_Sk~+DhL?ej+ zb?ru%9u7WVzclv93xMz^n{gfzb&}nSqVMcR%C_q+M! z&iQO@K{bv-l8{X+G-e>ZGnBn(DMZ6+YcK~bG3`%$=hs$+WS(6&-@GnXOH2Ah&Z$h} z<1Vr;P6b2D-Y#`e&HG|`1R)_Xg;|m(DGD>AtD2q8RbG49TzyHm0D0u%v|?q`@Z~d8 zpNP(D3T3vK_{@jhH!{^4No8b`62>2jEqB8!n!wxQ_G^$3=&F&92@HW0-emaM`rs9< zNf@dA$dOFios@XoXJP)WYz!3)X`D8GE~X8L{P?hgE#n3lrXdTVxu>7$#_BvwvxSxs z8jcIs6W+7z0I$u|&>+vyy@q;(M3IAQg+denz@Rh$@Y{8h0Dh0y1kYfC`9%9w0({nsANfY+kJriLkP|p4&?l&6Je+a#G%9e z|8WrmNdHSu^+wI-7Vp2<5&gsNZ;5~U9FTuK5kT`ViOT4je=w_o}9IYk6e z6sLya|0HBQk-q!ga DMxRsx delta 4144 zcmV-05YO-O{{`0k1r1P30|XQR2mlBGs&JE$4IO`>-x*w>-x*x>0Tcl3TX}CA#})ry zpJIg?AsI-k7R}L8P}RhC(*$vn`bZ2IM!6zKW_CHdJfuWIVW1%rf!v*U&TrnlH}l-_=9?|jo6>s{IcF2y zQVoAy>NQO1oTKRYzohCm$(o8yq_e7>lfELltr(I;%zk1bVd?R3<@~kE-4So>s(a%J z{O67T%Y8BZYGb0jw7|Z*YuDj>aph8R0OI1>mGbu8^87@3`J3|6G%)IDX-ONpWlO5{g{o(a zv(~#(7g&v7WnJl4vx;q)vIDlimjyS-s-D)I46))dK3@9dxb%)3OLVrhbaY4u9n*h= zVS;0go-aw-#&_=KHFtcHduM62{9?XEBjV65Nq01jGs=j_i)i(yh7 zKz=M|+xcWiN50RJ8SG@8*s*3B2@V!CDQ$iWnuu=Z!anW!GURBHDY66Adey9B(kGVG zr{t@w8B=fN-`>4z?&N%Fe6%t=S=wCO*-asLmo# zW&Kup@ewn~{pSQzUc^L8fg>x;AOsds9MxGn-nGf%=1k?KVIF=~$J4oPHqirl2po5qBJRkrySQ3kRg8{|o%K)%)$>M;n)R?T`(n*{QY z_nmB#Kfn*iXv`hE>#na!@D?0N@tHa>7~M?@bnP=f?Z1rj7O2Yk&p)q=*YU90hK12v9eNNTJ{WoF2GaiOUmEU4{Sk>f_jXsn03 zHSAuRYwizVuy-{M8R^DaAZF(uHq|0yq$5iBGI;bprt}kL9(c2=nt?D%Oa-ZLF zFEq>sXu83+v2dml*$iz)}Au8r4LhygKeC4G(b;Fw&bre6730g+A7 zzy6fUE=Wh&^IEl}^7eK2?p&=BJVnD)oCSp}u}@Iv9penTs8U^j@*{(vCh$y-oRv-- z{WuN}AeMht2Mp#FJEtpsuyyAQ%f@d7#tP`zK($wjw~Be;*Ix%?rPi)4F=v$h7YPA% z+zV`KD154X831-M8nc2p)7i2W)BX(fmW*DBxl}$w2CO(|CUQd|zKJp=v~V+u2RuTf z1^Jw>Vp(cdj}I2wI95*ul&85Pt2(m3Ap;6kFtUIBm+i{MmFH}$W|(dSF`Dl39ldsB zw+|;H&z4NUzWijwy}MNz8n4W+hJe^_sF{L*A|p?5<$S0gQWe;EVdl|^Z9d0D6;DC^ zB?Iyf^BJdbl41Gl@qX1(5s_62{A4wwN73YyKrJizyzHoQL}Wl%70RbQAw#{9&c%so z!rXuF#Ma6gXOF;A%n~ymn$MJX^FE|5#q}$!j%KUAytrMtxyWM4PeT_D404u-4!?im z1F0LMp(sRC^sG!3Vd^9b@dJZkd?AsNAfCnwskV^NK};XuMF!}I2_aT-Y~!zLhOj)j z5DX5C4MSz>hsyQE^3)8(xYG4|cz$sEDGz^nIGxB{8f4Rd>U4pD!c_YqP79Muvx;-} z5u!T>F@_r^M#xjAS)4t5E^nB;uBK%jWZRBLgqnG2!yR3#X4JDcTi6hpP*RI#Ayj>= z#1&2JQJ@&dg<37v728(QImtF8rCLGyG*FK-_T>l9Sh)=e9IGLryux67cdoqrjXQt3 z=}j+FB13W>X#DKkfWk z{`on6Y2=T(N@9xA#5Hwk*oX*Ou%&;_gCVBVbg_np;U`XGa{Xu=7{Nj^{rP#_xV&rk z`Q)8-N%^+2!^lD+^yqYWgt&oM-ItIdjvR)S&YyjP$wplh#2P7t$5U0x)3tv}MV&3@ z9V-`a=3T~4c7CpZt91M8)Cg1yk>7}HaSL;7RkLKY^=}SwNIdF*glsx`Je1Rf0#vJj zZCI48jpj`wdKS{Ex>;2;VdC=_-KE%Egc(2-W+&;a(&lBduuq0Y_hIG$`!6r|Wt0#L zZ_%u*N&51efoqVn!OWNsubqDoVb9g=!y4(s1MV&fDkulPQYf*f?+<*KiKjTvc23cL zz?ULtAxBFk8cE=z4l*)dqpHa6$OBo`bz&Yz6O%r%%!lkC0|ORr@+_J0X;tepO;L5^ z=qu4J#i)ld7xE83AnD;!YQz>A$tCAV+Of$;O22X}ZK`=RFBLjTI(dKcAZpchVDO`3 zpMD~Vpnu$~e!t^RTCiYG(S%r#^%By4Are9MXE?R7=a z;-RrA_~B<5b;;>Fs^Nbh*$GEePX6gfT~_QR<@N3^c(KWc6s9jJ4aR;$T@_147F(Ni zK-KdO9=Pxkh2~sq@Z4~8AyJ=GG^*2QyTctl3)?T`Y3R)!N9$=f^mfCsHB~3S5QY)|7Y@GpNvBPvt_Mt)wse_*6i z_JBo7zfVx4y!M7fJWXo~L^|Mg#^E6&yJ2+{(%sM>;Z#F zzE2QDR(nGr*wGY#`2KaqAKnk`TO7pj*Pd3*GyrjLdo!w414MpXwU5ydrR*gdBK>|v zL*(^;6byt=soF^iOle-C@yR75!6V&p&{isnDj~~C12T<4B;&)ZWbM>&2 zC;fD8_*FyGg1$s2K|4I*ax0*L6qbQ4F!xCixpI`}MysFzSDtt%O5aq4x5%Ex3!q<5*R< z@?aiBA^$1wAbj$$GJ46qjV-e76n1~Q%OmVGvAFU)xV~q1?|AV>ui{xt=ublzuz}~p zfOSfWG>>`H%cb>;z}j1y3Ldg9BX4FLJBBPfCA6eHf5`d^1XD?DvmOqyj6cCgOG3tBtW#&}>B;JlL8~q+V@|Gw$qW5wAa_pfQY_J9PnA zfVtFnA(NB1h6C4Qzedp0g|~cYV9*buTCmSZdBd{Q9$1L*+Ju6Qn5)Rr>786`T$GVU0He zN$EhHx@jt~lepqFD=6%!EBCMsowt5PK1`WoW|}Tx;U7nI#}cg91Y1eo$f#CcQwD#! zlzbk$O8Db$@o`(rPFm8*ZLTVV677?1ps=-DRZ&_!UFq{(Dr>18JFdK z0V@Jb50?^t0YMjh5C8yhVPk7yXJsyGb8l`{SO@?kEgP3=egQ8MeG&iwVRLh3baO9N zSO@?pEgP4segQ86vJ#ivegQ`V*U$ix(ioRMe*rWjnj--KVRLh3baO9rWo~3;axGzY uVRT_~E^uyVRagiBC@mY8m45**0!(|C#(x1G4hR4U05}2w00?{m00021Lg&Z; From 55a9c652796b4fac90653882cc5322e120d18aca Mon Sep 17 00:00:00 2001 From: Yagami Date: Mon, 24 Dec 2018 15:05:54 +0800 Subject: [PATCH 037/442] * Fix task create view. --- module/task/css/x.create.css | 1 + module/task/view/create.html.php | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/module/task/css/x.create.css b/module/task/css/x.create.css index e951182f9a..da5a5424c1 100644 --- a/module/task/css/x.create.css +++ b/module/task/css/x.create.css @@ -3,3 +3,4 @@ .modal-dialog {width: 700px;} a.btn-back {display:none;} .main-header{display: none} +#after-tr{display: none} diff --git a/module/task/view/create.html.php b/module/task/view/create.html.php index cdcf1acdb6..d7f4ff5b37 100644 --- a/module/task/view/create.html.php +++ b/module/task/view/create.html.php @@ -171,7 +171,7 @@ - global->flow == 'onlyTask' ? "class='hidden'" : '';?>> + global->flow == 'onlyTask' ? "class='hidden'" : '';?> id='after-tr'> task->afterSubmit;?> task->afterChoices, $config->global->flow == 'onlyTask' || !empty($task->id) ? 'toTaskList' : 'continueAdding');?> From 2e8e82f65ebba122cb3800b93a2e6bae994be31b Mon Sep 17 00:00:00 2001 From: Catouse Date: Mon, 24 Dec 2018 16:37:04 +0800 Subject: [PATCH 038/442] * update zui css file. --- www/theme/zui/css/min.css | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/www/theme/zui/css/min.css b/www/theme/zui/css/min.css index 55444242e4..99217365cd 100644 --- a/www/theme/zui/css/min.css +++ b/www/theme/zui/css/min.css @@ -1,5 +1,5 @@ /*! - * ZUI: Zentao template - v1.8.1 - 2018-11-20 + * ZUI: Zentao template - v1.8.1 - 2018-12-24 * http://zui.sexy * GitHub: https://github.com/easysoft/zui.git * Copyright (c) 2018 cnezsoft.com; Licensed MIT @@ -13,4 +13,4 @@ * * Copyright (c) 2011-2016 Harvest http://getharvest.com * MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md -*/.chosen-container{position:relative;display:inline-block;font-size:13px;vertical-align:middle;zoom:1;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;*display:inline}.chosen-container .chosen-drop{position:absolute;top:100%;z-index:1010;display:none;width:100%;background:#fff;border:1px solid #b6bdcc;border:1px solid rgba(0,0,0,.15);border-top:0;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.chosen-container .chosen-drop.chosen-drop-size-limited{border-top:1px solid rgba(0,0,0,.15)}.chosen-container.chosen-with-drop .chosen-drop{display:block}.chosen-container a{cursor:pointer}.chosen-container.chosen-up .chosen-drop{top:inherit;bottom:100%;margin-top:auto;margin-bottom:-1px;border-radius:2px 2px 0 0;-webkit-box-shadow:0 -3px 5px rgba(0,0,0,.175);box-shadow:0 -3px 5px rgba(0,0,0,.175)}.chosen-container-single .chosen-single{display:block;width:100%;height:32px;padding:5px 8px;overflow:hidden;line-height:1.42857143;color:#222;text-decoration:none;white-space:nowrap;vertical-align:middle;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #dcdcdc;border-radius:2px;-webkit-box-shadow:none;box-shadow:none;-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s,-webkit-box-shadow ease-in-out .15s}.chosen-container-single .chosen-default{color:#838a9d}.chosen-container-single .chosen-single>span{display:block;margin-right:26px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.chosen-container-single .chosen-single-with-deselect span{margin-right:38px}.chosen-container-single .chosen-single abbr{position:absolute;top:7px;right:24px;display:block;width:20px;height:20px;font-size:19.5px;font-weight:700;line-height:14px;color:#000;text-align:center;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.chosen-container-single .chosen-single abbr:before{content:'×'}.chosen-container-single .chosen-single abbr:focus,.chosen-container-single .chosen-single abbr:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}.chosen-container-single .chosen-single div{position:absolute;top:0;right:0;display:block;height:100%;padding:5px 8px}.chosen-container-single .chosen-single div b{display:inline-block;width:0;height:0;margin-bottom:2px;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.chosen-container-single .chosen-search{position:relative;z-index:1010;padding:3px 4px;margin:0;white-space:nowrap}.chosen-container-single .chosen-search input[type=text]{width:100%;height:27px;padding:2px 26px 2px 8px;margin:1px 0;font-size:12px;line-height:1.5;background-color:#fff;border:1px solid #dcdcdc;border-radius:2px;outline:0}.chosen-container-single .chosen-search input[type=text]:focus{border-color:#0c64eb}.chosen-container-single .chosen-search:before{position:absolute;top:10px;right:10px;display:block;font-family:ZentaoIcon;font-size:18px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;color:#838a9d;text-transform:none;content:"\e928";speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.chosen-container-single .chosen-drop{margin-top:-1px;-webkit-background-clip:padding-box;background-clip:padding-box;border-radius:0 0 4px 4px}.chosen-container-single.chosen-container-single-nosearch .chosen-search{position:absolute;left:-9999px}.chosen-container .chosen-results{position:relative;max-height:240px;padding:0;margin:0;overflow-x:hidden;overflow-y:auto;-webkit-overflow-scrolling:touch}.chosen-container .chosen-results li{display:none;padding:5px 10px;margin:0;line-height:15px;list-style:none;-webkit-transition:background-color .2s cubic-bezier(.175,.885,.32,1);-o-transition:background-color .2s cubic-bezier(.175,.885,.32,1);transition:background-color .2s cubic-bezier(.175,.885,.32,1);-webkit-touch-callout:none}.chosen-container .chosen-results li.active-result{display:list-item;cursor:pointer}.chosen-container .chosen-results li.disabled-result{display:list-item;color:#ccc;cursor:default}.chosen-container .chosen-results li.highlighted{color:#fff;background-color:#0c64eb}.chosen-container .chosen-results li.no-results{display:list-item;background:#f4f4f4}.chosen-container .chosen-results li.group-result{display:list-item;font-weight:700;cursor:default}.chosen-container .chosen-results li.group-option{padding-left:15px}.chosen-container .chosen-results li em{font-style:normal;text-decoration:underline}.chosen-container-multi .chosen-choices{position:relative;width:100%;min-height:32px;min-height:30px\9;padding:0;margin:0;overflow:hidden;cursor:text;background-color:#fff;border:1px solid #dcdcdc;border-radius:2px;-webkit-box-shadow:none;box-shadow:none;-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s,-webkit-box-shadow ease-in-out .15s}.chosen-container-multi .chosen-choices:after,.chosen-container-multi .chosen-choices:before{display:table;content:" "}.chosen-container-multi .chosen-choices:after{clear:both}.chosen-container-multi .chosen-choices li{display:block;float:left;padding:0 6px;margin:5px 0 0 6px;list-style:none}.chosen-container-multi .chosen-choices li.search-field{padding:0;margin-bottom:4px;white-space:nowrap}.chosen-container-multi .chosen-choices li.search-field input[type=text]{height:20px;font-size:100%;color:#838a9d;background:0 0!important;border:0!important;border-radius:0;outline:0;-webkit-box-shadow:none;box-shadow:none}.chosen-container-multi .chosen-choices li.search-field .default{color:#999}.chosen-container-multi .chosen-choices li.search-field:before{position:absolute;right:8px;bottom:8px;display:block;font-family:ZentaoIcon;font-size:18px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;color:#838a9d;text-transform:none;content:"\e928";opacity:0;-webkit-transition:opacity .2s cubic-bezier(.175,.885,.32,1);-o-transition:opacity .2s cubic-bezier(.175,.885,.32,1);transition:opacity .2s cubic-bezier(.175,.885,.32,1);speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.chosen-container-multi .chosen-choices li.search-choice{position:relative;padding:3px 20px 3px 5px;line-height:12px;cursor:default;background-color:#f1f1f1;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #cbd0db;border-radius:3px;-webkit-box-shadow:0 0 2px #fff inset,0 1px 0 rgba(0,0,0,.05);box-shadow:0 0 2px #fff inset,0 1px 0 rgba(0,0,0,.05);-webkit-transition:all .4s cubic-bezier(.175,.885,.32,1);-o-transition:all .4s cubic-bezier(.175,.885,.32,1);transition:all .4s cubic-bezier(.175,.885,.32,1)}.chosen-container-multi .chosen-choices li.search-choice:hover{background-color:#fff;border-color:#adb5c6;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 0 rgba(0,0,0,.1)}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close{position:absolute;top:0;right:0;display:block;width:20px;height:20px;font-size:15.6px;font-weight:700;line-height:14px;color:#000;text-align:center;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:before{content:'×'}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:focus,.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}.chosen-container-multi .chosen-choices li.search-choice-disabled{padding-right:5px;color:#666;background-color:#e4e4e4;border:1px solid #ccc}.chosen-container-multi .chosen-choices li.search-choice-focus{background:#d4d4d4}.chosen-container-multi .chosen-choices li.search-choice-focus .search-choice-close{background-position:-42px -10px}.chosen-container-multi .chosen-results{padding:5px 0;margin:0}.chosen-container-multi .chosen-drop .result-selected{display:list-item;color:#ccc;cursor:default}.chosen-container-active .chosen-single{border-color:#0c64eb;-webkit-box-shadow:none,0 0 8px rgba(12,100,235,.6);box-shadow:none,0 0 8px rgba(12,100,235,.6)}.chosen-container-active.chosen-with-drop .chosen-single{border:1px solid #b6bdcc;border:1px solid rgba(0,0,0,.15);border-bottom-right-radius:0;border-bottom-left-radius:0;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.chosen-container-active.chosen-with-drop .chosen-single div{background:0 0;border-left:none}.chosen-container-active.chosen-with-drop .chosen-single div b{content:"";border-top:0 dotted;border-bottom:4px solid}.chosen-container-active.chosen-with-drop.chosen-up .chosen-single{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:2px;border-bottom-left-radius:2px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.chosen-container-active .chosen-choices{border-color:#0c64eb;-webkit-box-shadow:none,0 0 8px rgba(12,100,235,.6);box-shadow:none,0 0 8px rgba(12,100,235,.6)}.chosen-container-active .chosen-choices li.search-field input[type=text]{color:#111!important}.chosen-container-active .chosen-choices li.search-field:before{opacity:1}.chosen-disabled{cursor:default;opacity:.5!important}.chosen-disabled .chosen-single{cursor:default}.chosen-disabled .chosen-choices .search-choice .search-choice-close{cursor:default}.chosen-container-single .chosen-single>.chosen-search{left:0;display:none;padding:3px 4px;opacity:0}.chosen-container-single .chosen-single>.chosen-search>input{height:25px;padding:2px 26px 2px 4px;font-size:inherit}.chosen-container-single .chosen-single>.chosen-search:before{top:9px}.chosen-with-search.chosen-with-drop .chosen-single>.chosen-search{display:block;opacity:1}.container,.container-fixed,.container-fluid{position:relative}.container{max-width:1800px!important}body{padding-bottom:40px;background-color:#efefef}body.article-content,body.body-modal{background:0 0}body.body-modal{padding:0}a:active,a:focus,button:active,button:focus{outline:0!important}em{font-style:normal}.strong{font-weight:700}.font-normal{font-weight:400!important}.text-middle{vertical-align:middle!important}.text-bottom{vertical-align:bottom!important}.text-top{vertical-align:top!important}.inline-block{display:inline-block!important}.layer{border-radius:4px;-webkit-box-shadow:0 0 20px 0 #bdc9d8;box-shadow:0 0 20px 0 #bdc9d8}.space{margin-bottom:20px}.space-lg{margin-bottom:30px}.space-sm{margin-bottom:10px}.muted{opacity:.5}.text-muted em{color:#3c4353}.no-animate{-webkit-transition:none!important;-o-transition:none!important;transition:none!important}.template{display:none!important}.text-left{text-align:left!important}.text-yellow.icon-folder{color:#ffe066}.table-row{display:table;width:100%;table-layout:fixed}.table-col,.table-row>.col,.table-row>[class*=col-],.table-row>[class*="-col"]{display:table-cell;float:none;vertical-align:top}.side-col{width:200px;padding-right:20px}.side-col.col-4{width:33.3333333%}.col-lg{width:260px}.col-xl{width:320px}.col-sm{width:150px}.col-xs{width:100px}.main-col+.side-col{padding-right:0;padding-left:20px}.row-grid>[class*=col-],.row-grid>[class*="-col"]{padding-top:6px;padding-bottom:6px}hr.space{margin:10px 0;border:none}hr.space-sm{margin:5px 0;border:none}.text-secondary{color:#16a8f8}a.text-primary{color:#0c64eb}.nav-primary>li>a{min-width:100px;padding:5px 8px;color:#838a9d;border-color:#e7f1fc}.nav-primary>li.active>a{color:#0c64eb;background-color:#e7f1fc;border-color:#e7f1fc}.nav-primary>li.active>a:hover{color:#0c64eb;background-color:#c3dcf7;border-color:#c3dcf7}.end-marker{margin-bottom:20px;color:#cbd0db;text-align:center}@-webkit-keyframes highlight{0%{background:#fff;outline:1px solid transparent}100%{background:#fff0d5;outline:2px solid #ffdcbc}}@-o-keyframes highlight{0%{background:#fff;outline:1px solid transparent}100%{background:#fff0d5;outline:2px solid #ffdcbc}}@keyframes highlight{0%{background:#fff;outline:1px solid transparent}100%{background:#fff0d5;outline:2px solid #ffdcbc}}.highlight{-webkit-animation:highlight .5s linear 0s 2 alternate;-o-animation:highlight .5s linear 0s 2 alternate;animation:highlight .5s linear 0s 2 alternate}.progress.inline-block{width:100px;margin:0}.w-p5{width:5%!important}.w-p10{width:10%!important}.w-p15{width:15%!important}.w-p20{width:20%!important}.w-p25{width:25%!important}.w-p30{width:30%!important}.w-p35{width:35%!important}.w-p40{width:40%!important}.w-p45{width:45%!important}.w-p50{width:50%!important}.w-p55{width:55%!important}.w-p60{width:60%!important}.w-p65{width:65%!important}.w-p70{width:70%!important}.w-p75{width:75%!important}.w-p80{width:80%!important}.w-p85{width:85%!important}.w-p90{width:90%!important}.w-p94{width:94%!important}.w-p95{width:95%!important}.w-p98{width:98%!important}.w-p99{width:99%!important}.w-p100{width:100%!important}.w-auto{width:auto!important}.w-10px{width:10px!important}.w-20px{width:20px!important}.w-30px{width:30px!important}.w-35px{width:35px!important}.w-40px{width:40px!important}.w-45px{width:45px!important}.w-50px{width:50px!important}.w-60px{width:60px!important}.w-70px{width:70px!important}.w-80px{width:80px!important}.w-90px{width:90px!important}.w-100px{width:100px!important}.w-110px{width:110px!important}.w-120px{width:120px!important}.w-130px{width:130px!important}.w-140px{width:140px!important}.w-150px{width:150px!important}.w-160px{width:160px!important}.w-180px{width:180px!important}.w-200px{width:200px!important}.w-230px{width:230px!important}.w-250px{width:250px!important}.w-300px{width:300px!important}.w-400px{width:400px!important}.w-500px{width:500px!important}.w-600px{width:600px!important}.w-700px{width:700px!important}.w-800px{width:800px!important}.w-900px{width:900px!important}.mw-200px{max-width:200px!important}.mw-300px{max-width:300px!important}.mw-400px{max-width:400px!important}.mw-500px{max-width:500px!important}.mw-600px{max-width:600px!important}.mw-700px{max-width:700px!important}.mw-800px{max-width:800px!important}.mw-900px{max-width:900px!important}.mw-1400px{max-width:1400px!important}.w-id{width:70px!important}.w-pri{width:40px!important}.w-severity{width:50px!important}.w-hour{width:57px!important}.w-date{width:90px!important}.w-status{width:60px!important}.w-resolution,.w-type,.w-user{width:80px!important}.w-p15-f{width:15%!important;min-width:120px!important}.w-p25-f{width:25%!important;min-width:200px!important}.w-p35-f{width:35%!important;min-width:300px!important}.w-p45-f{width:45%!important;min-width:400px!important}.h-5px{height:5px!important}.h-10px{height:10px!important}.h-20px{height:20px!important}.h-30px{height:30px!important}.h-35px{height:35px!important}.h-40px{height:40px!important}.h-45px{height:45px!important}.h-50px{height:50px!important}.h-60px{height:60px!important}.h-70px{height:70px!important}.h-80px{height:80px!important}.h-100px{height:100px!important}.h-120px{height:120px!important}.h-130px{height:130px!important}.h-140px{height:140px!important}.h-150px{height:150px!important}.h-200px{height:200px!important}.pd-0{padding:0!important}.mg-0{margin:0!important}.mgb-20{margin-bottom:20px!important}.mgb-10{margin-bottom:10px!important}.pdb-20{padding-bottom:20px!important}.pdt-20{padding-top:20px!important}.br-0{border-radius:0!important}.bd-0,.bd-none,.borderless{border:none!important}.bg-none{background:0 0!important}.red{color:#ff5d5d!important}.icon-pro-version{font-size:14px!important}.icon-pro-version:before{position:relative;top:-1px;font-size:14px;color:#ff5d5d;content:"\e92b"}.bg-primary{color:#fff;background:#1183fb -webkit-gradient(linear,right top,left top,from(#0a48d1),to(#1183fb));background:#1183fb -webkit-linear-gradient(right,#0a48d1 0,#1183fb 100%);background:#1183fb -o-linear-gradient(right,#0a48d1 0,#1183fb 100%);background:#1183fb linear-gradient(-90deg,#0a48d1 0,#1183fb 100%);background-color:#00b1fd}.bg-secondary{color:#fff;background:#16a8f8}.hl-tutorial{position:relative!important;z-index:1010!important;-webkit-box-shadow:0 0 0 0 #000!important;box-shadow:0 0 0 0 #000!important;-webkit-transition:-webkit-box-shadow 1s!important;-o-transition:box-shadow 1s!important;transition:-webkit-box-shadow 1s!important;transition:box-shadow 1s!important;transition:box-shadow 1s,-webkit-box-shadow 1s!important}.hl-tutorial.hl-in{-webkit-box-shadow:0 0 20px 0 #ffff8d,0 0 0 2px #ffd180,0 0 0 2000px rgba(0,0,0,.2)!important;box-shadow:0 0 20px 0 #ffff8d,0 0 0 2px #ffd180,0 0 0 2000px rgba(0,0,0,.2)!important}.btn.tooltip-tutorial,.hl-tutorial.hl-in:hover{-webkit-box-shadow:0 0 30px 0 #ffff8d,0 0 0 5px #ffd180,0 0 0 2000px rgba(0,0,0,.3)!important;box-shadow:0 0 30px 0 #ffff8d,0 0 0 5px #ffd180,0 0 0 2000px rgba(0,0,0,.3)!important}.tooltip-max .tooltip-inner{max-width:1000px;padding:8px 10px}.transition-all *{-webkit-transition:all .2s!important;-o-transition:all .2s!important;transition:all .2s!important}.scroll-x{overflow-x:auto!important}.scroll-y{overflow-y:auto!important}.divider+.divider{display:none}@font-face{font-family:ZentaoIcon;font-style:normal;font-weight:400;src:url(../fonts/ZentaoIcon.eot?v=1.1.0);src:url(../fonts/ZentaoIcon.eot?#iefix&v=1.1.0) format('embedded-opentype'),url(../fonts/ZentaoIcon.woff?v=1.1.0) format('woff'),url(../fonts/ZentaoIcon.ttf?v=1.1.0) format('truetype'),url(../fonts/ZentaoIcon.svg#regular?v=1.1.0) format('svg')}.icon,[class*=" icon-"],[class^=icon-]{font-family:ZentaoIcon;font-size:18px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;text-transform:none;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon:before{display:inline-block;min-width:18px;text-align:center}a .icon,a [class*=" icon-"],a [class^=icon-]{display:inline}.icon-lg:before{font-size:1.33333333em;vertical-align:-10%}.icon-2x{font-size:36px}.icon-3x{font-size:54px}.icon-4x{font-size:72px}.icon-5x{font-size:90px}.icon-spin{display:inline-block;-webkit-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;animation:spin 2s infinite linear}a .icon-spin{display:inline-block;text-decoration:none}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0);transform:rotate(0)}100%{-o-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes spin{0%{-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);-o-transform:rotate(359deg);transform:rotate(359deg)}}.icon-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.icon-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.icon-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.icon-flip-horizontal{-webkit-transform:scale(-1,1);-ms-transform:scale(-1,1);-o-transform:scale(-1,1);transform:scale(-1,1)}.icon-flip-vertical{-webkit-transform:scale(1,-1);-ms-transform:scale(1,-1);-o-transform:scale(1,-1);transform:scale(1,-1)}.icon.icon-flip-horizontal,.icon.icon-flip-vertical,.icon.icon-rotate-180,.icon.icon-rotate-270,.icon.icon-rotate-90{display:inline-block}.icon-book:before{content:"\f02d"}.icon-treemap-alt:before{content:"\e971"}.icon-collapse-alt:before{content:"\e6f2"}.icon-expand-alt:before{content:"\e6f1"}.icon-more:before{content:"\e744"}.icon-angle-double-right:before{content:"\f101"}.icon-certificate:before{content:"\f0a3"}.icon-bell:before{content:"\e7f5"}.icon-format-bold:before{content:"\e953"}.icon-format-header-pound:before{content:"\e954"}.icon-format-italic:before{content:"\e955"}.icon-format-list-bulleted:before{content:"\e956"}.icon-format-list-numbers:before{content:"\e969"}.icon-format-quote-close:before{content:"\e96a"}.icon-fullscreen:before{content:"\e96b"}.icon-fullscreen-exit:before{content:"\e972"}.icon-image:before{content:"\e96c"}.icon-table-large:before{content:"\e96d"}.icon-columns:before{content:"\f0db"}.icon-cancel:before{content:"\e951"}.icon-ban-circle:before{content:"\e951"}.icon-persons:before{content:"\e94d"}.icon-eye:before{content:"\e94e"}.icon-unlock:before{content:"\e94f"}.icon-eye-off:before{content:"\e96e"}.icon-lock:before{content:"\e950"}.icon-move:before{content:"\e94c"}.icon-help:before{content:"\e968"}.icon-folder-account:before{content:"\e942"}.icon-folder-move:before{content:"\e960"}.icon-folder-plus:before{content:"\e961"}.icon-folder-upload:before{content:"\e962"}.icon-folder-star:before{content:"\e963"}.icon-folder-edit:before{content:"\e964"}.icon-folder-download:before{content:"\e965"}.icon-folder-outline:before{content:"\e966"}.icon-restart:before{content:"\e95e"}.icon-history:before{content:"\e95f"}.icon-home:before{content:"\e958"}.icon-pencil:before{content:"\e254"}.icon-angle-down:before{content:"\e313"}.icon-angle-left:before{content:"\e314"}.icon-angle-right:before{content:"\e315"}.icon-angle-top:before{content:"\e316"}.icon-first-page:before{content:"\e5dc"}.icon-last-page:before{content:"\e5dd"}.icon-caret-down:before{content:"\f0d7"}.icon-caret-up:before{content:"\f0d8"}.icon-caret-left:before{content:"\f0d9"}.icon-caret-right:before{content:"\f0da"}.icon-sort:before{content:"\f0dc"}.icon-sort-down:before{content:"\f0dd"}.icon-sort-up:before{content:"\f0de"}.icon-zentao-alt:before{content:"\e900"}.icon-zentao:before{content:"\e901"}.icon-severity:before{content:"\e973"}.icon-severity-solid:before{content:"\e902"}.icon-bar-chart:before{content:"\e903"}.icon-import:before{content:"\e904"}.icon-export:before{content:"\e905"}.icon-printer:before{content:"\e906"}.icon-hand-right:before{content:"\e907"}.icon-hand-right-alt:before{content:"\e96f"}.icon-checked:before{content:"\e908"}.icon-off:before{content:"\e909"}.icon-start:before{content:"\e90a"}.icon-play:before{content:"\e90a"}.icon-time:before{content:"\e90b"}.icon-edit:before{content:"\e90c"}.icon-trash:before{content:"\e90d"}.icon-link:before{content:"\e90e"}.icon-unlink:before{content:"\e90f"}.icon-bullhorn:before{content:"\e910"}.icon-bug:before{content:"\e911"}.icon-list-alt:before{content:"\e912"}.icon-fork:before{content:"\e913"}.icon-change:before{content:"\e970"}.icon-glasses:before{content:"\e914"}.icon-sitemap:before{content:"\e915"}.icon-plus-sign:before{content:"\e916"}.icon-pluses:before{content:"\e917"}.icon-flag-alt:before{content:"\e918"}.icon-magic:before{content:"\e919"}.icon-treemap:before{content:"\e91a"}.icon-confirm:before{content:"\e91b"}.icon-lightbulb:before{content:"\e91c"}.icon-delay:before{content:"\e91d"}.icon-calendar:before{content:"\e91d"}.icon-pause:before{content:"\e91e"}.icon-ban:before{content:"\e91f"}.icon-plus-bold:before{content:"\e920"}.icon-copy:before{content:"\e921"}.icon-refresh:before{content:"\e922"}.icon-arrow-up:before{content:"\e923"}.icon-arrow-down:before{content:"\e924"}.icon-arrow-left:before{content:"\e952"}.icon-arrow-right:before{content:"\e93e"}.icon-plus:before{content:"\e925"}.icon-minus:before{content:"\e926"}.icon-exchange:before{content:"\e927"}.icon-search:before{content:"\e928"}.icon-envelope-o:before{content:"\e92a"}.icon-check:before{content:"\e5ca"}.icon-circle:before{content:"\e836"}.icon-up-circle:before{content:"\e92b"}.icon-right-circle:before{content:"\e92c"}.icon-down-circle:before{content:"\e92d"}.icon-left-circle:before{content:"\e92e"}.icon-check-circle:before{content:"\e92f"}.icon-exclamation-sign:before{content:"\e930"}.icon-unfold-all:before{content:"\e931"}.icon-fold-all:before{content:"\e932"}.icon-plus-sm:before{content:"\e933"}.icon-chevron-left:before{content:"\e934"}.icon-chevron-right:before{content:"\e935"}.icon-close:before{content:"\e936"}.icon-flag:before{content:"\e937"}.icon-check-sign:before{content:"\e938"}.icon-minus-sign:before{content:"\e939"}.icon-bars-sign:before{content:"\e93a"}.icon-cog:before{content:"\e93b"}.icon-color:before{content:"\e93c"}.icon-paper-clip:before{content:"\e93d"}.icon-back:before{content:"\e93f"}.icon-chat-line:before{content:"\e940"}.icon-person:before{content:"\e941"}.icon-stack:before{content:"\e943"}.icon-cube:before{content:"\e967"}.icon-folder:before{content:"\e944"}.icon-folder-o:before{content:"\e945"}.icon-folder-open-o:before{content:"\e946"}.icon-folder-open:before{content:"\e947"}.icon-bars:before{content:"\e948"}.icon-cards-view:before{content:"\e949"}.icon-star-empty:before{content:"\e94a"}.icon-star:before{content:"\e94b"}.icon-ellipsis-v:before{content:"\e5d4"}.icon-spinner-indicator:before{content:"\e982"}.icon-text:before{content:"\e929"}.icon-code:before{content:"\e957"}.icon-chevron-double-up:before{content:"\e959"}.icon-chevron-double-down:before{content:"\e95a"}.icon-chart-pie:before{content:"\e95b"}.icon-chart-line:before{content:"\e95c"}.icon-chart-bar:before{content:"\e95d"}.icon-globe:before{content:"\f0ac"}.icon-file:before{content:"\f016"}.icon-file-empty:before{content:"\f016"}.icon-file-text:before{content:"\f0f6"}.icon-file-alt:before{content:"\f15b"}.icon-file-text-alt:before{content:"\f15c"}.icon-file-pdf:before{content:"\f1c1"}.icon-file-word:before{content:"\f1c2"}.icon-file-excel:before{content:"\f1c3"}.icon-file-powerpoint:before{content:"\f1c4"}.icon-file-image:before{content:"\f1c5"}.icon-file-archive:before{content:"\f1c6"}.icon-file-audio:before{content:"\f1c7"}.icon-file-video:before{content:"\f1c8"}.icon-file-code:before{content:"\f1c9"}.icon-sm:before{font-size:14px;vertical-align:10%}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:13px;font-weight:400;line-height:18px;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;border-radius:4px;-webkit-transition:.4s cubic-bezier(.175,.885,.32,1);-o-transition:.4s cubic-bezier(.175,.885,.32,1);transition:.4s cubic-bezier(.175,.885,.32,1);-webkit-transition-property:background,border,outline,opacity,-webkit-box-shadow;-o-transition-property:background,border,box-shadow,outline,opacity;transition-property:background,border,outline,opacity,-webkit-box-shadow;transition-property:background,border,box-shadow,outline,opacity;transition-property:background,border,box-shadow,outline,opacity,-webkit-box-shadow}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:focus,.btn:hover{color:#3c4353;text-decoration:none}.btn:active{text-decoration:none;background-image:none;outline:0;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.1)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;filter:grayscale(1);-webkit-box-shadow:none;box-shadow:none;opacity:.5;-webkit-filter:grayscale(1)}.btn{color:#3c4353;background-color:#fff;border-color:#d6dae3}.btn.active,.btn.hover,.btn:active,.btn:focus,.btn:hover,.open .dropdown-toggle.btn{color:#3c4353;background-color:rgba(255,255,255,.8);border-color:#b8bfce}.btn.active,.btn:active,.open .dropdown-toggle.btn{background-color:#f2f2f2;background-image:none;border-color:#b8bfce}.btn.disabled,.btn.disabled.active,.btn.disabled:active,.btn.disabled:focus,.btn.disabled:hover,.btn[disabled],.btn[disabled].active,.btn[disabled]:active,.btn[disabled]:focus,.btn[disabled]:hover,fieldset[disabled] .btn,fieldset[disabled] .btn.active,fieldset[disabled] .btn:active,fieldset[disabled] .btn:focus,fieldset[disabled] .btn:hover{color:rgba(60,67,83,.3);background-color:#fff;border-color:#d6dae3}.btn-gray{color:#82899f;background-color:#f1f1f1;border-color:#f1f1f1}.btn-gray.active,.btn-gray.hover,.btn-gray:active,.btn-gray:focus,.btn-gray:hover,.open .dropdown-toggle.btn-gray{color:#82899f;background-color:rgba(241,241,241,.8);border-color:#d8d8d8}.btn-gray.active,.btn-gray:active,.open .dropdown-toggle.btn-gray{background-color:#e4e4e4;background-image:none;border-color:#d8d8d8}.btn-gray.disabled,.btn-gray.disabled.active,.btn-gray.disabled:active,.btn-gray.disabled:focus,.btn-gray.disabled:hover,.btn-gray[disabled],.btn-gray[disabled].active,.btn-gray[disabled]:active,.btn-gray[disabled]:focus,.btn-gray[disabled]:hover,fieldset[disabled] .btn-gray,fieldset[disabled] .btn-gray.active,fieldset[disabled] .btn-gray:active,fieldset[disabled] .btn-gray:focus,fieldset[disabled] .btn-gray:hover{color:rgba(130,137,159,.3);background-color:#f1f1f1;border-color:#f1f1f1}.btn-primary{color:#fff;background-color:#0c64eb;border-color:transparent}.btn-primary.active,.btn-primary.hover,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.open .dropdown-toggle.btn-primary{color:#fff;background-color:rgba(12,100,235,.8);border-color:rgba(0,0,0,0)}.btn-primary.active,.btn-primary:active,.open .dropdown-toggle.btn-primary{background-color:#0b5ad3;background-image:none;border-color:rgba(0,0,0,0)}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{color:rgba(255,255,255,.3);background-color:#0c64eb;border-color:transparent}.btn-secondary{color:#fff;background-color:#16a8f8;border-color:transparent}.btn-secondary.active,.btn-secondary.hover,.btn-secondary:active,.btn-secondary:focus,.btn-secondary:hover,.open .dropdown-toggle.btn-secondary{color:#fff;background-color:rgba(22,168,248,.8);border-color:rgba(0,0,0,0)}.btn-secondary.active,.btn-secondary:active,.open .dropdown-toggle.btn-secondary{background-color:#079ced;background-image:none;border-color:rgba(0,0,0,0)}.btn-secondary.disabled,.btn-secondary.disabled.active,.btn-secondary.disabled:active,.btn-secondary.disabled:focus,.btn-secondary.disabled:hover,.btn-secondary[disabled],.btn-secondary[disabled].active,.btn-secondary[disabled]:active,.btn-secondary[disabled]:focus,.btn-secondary[disabled]:hover,fieldset[disabled] .btn-secondary,fieldset[disabled] .btn-secondary.active,fieldset[disabled] .btn-secondary:active,fieldset[disabled] .btn-secondary:focus,fieldset[disabled] .btn-secondary:hover{color:rgba(255,255,255,.3);background-color:#16a8f8;border-color:transparent}.btn-warning{color:#fff;background-color:#ff9800;border-color:transparent}.btn-warning.active,.btn-warning.hover,.btn-warning:active,.btn-warning:focus,.btn-warning:hover,.open .dropdown-toggle.btn-warning{color:#fff;background-color:rgba(255,152,0,.8);border-color:rgba(0,0,0,0)}.btn-warning.active,.btn-warning:active,.open .dropdown-toggle.btn-warning{background-color:#e68900;background-image:none;border-color:rgba(0,0,0,0)}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{color:rgba(255,255,255,.3);background-color:#ff9800;border-color:transparent}.btn-danger{color:#fff;background-color:#ff5d5d;border-color:transparent}.btn-danger.active,.btn-danger.hover,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,.open .dropdown-toggle.btn-danger{color:#fff;background-color:rgba(255,93,93,.8);border-color:rgba(0,0,0,0)}.btn-danger.active,.btn-danger:active,.open .dropdown-toggle.btn-danger{background-color:#ff4343;background-image:none;border-color:rgba(0,0,0,0)}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{color:rgba(255,255,255,.3);background-color:#ff5d5d;border-color:transparent}.btn-success{color:#fff;background-color:#00da88;border-color:transparent}.btn-success.active,.btn-success.hover,.btn-success:active,.btn-success:focus,.btn-success:hover,.open .dropdown-toggle.btn-success{color:#fff;background-color:rgba(0,218,136,.8);border-color:rgba(0,0,0,0)}.btn-success.active,.btn-success:active,.open .dropdown-toggle.btn-success{background-color:#00c178;background-image:none;border-color:rgba(0,0,0,0)}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{color:rgba(255,255,255,.3);background-color:#00da88;border-color:transparent}.btn-info{color:#0c64eb;background-color:#e9f2fb;border-color:transparent}.btn-info.active,.btn-info.hover,.btn-info:active,.btn-info:focus,.btn-info:hover,.open .dropdown-toggle.btn-info{color:#0c64eb;background-color:rgba(233,242,251,.8);border-color:rgba(0,0,0,0)}.btn-info.active,.btn-info:active,.open .dropdown-toggle.btn-info{background-color:#d3e5f7;background-image:none;border-color:rgba(0,0,0,0)}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{color:rgba(12,100,235,.3);background-color:#e9f2fb;border-color:transparent}.btn-link{padding-right:6px;padding-left:6px;font-weight:400;color:#3c4353;text-shadow:none;cursor:pointer;background:0 0;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover,.btn-link[disabled],fieldset[disabled] .btn-link{border-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link:focus,.btn-link:hover{color:#222;background:#f1f1f1;background:rgba(0,0,0,.075)}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#cbd0db;text-decoration:none}.btn-lg{padding:11px 16px;font-size:14px;line-height:18px;border-radius:4px}.btn-mini,.btn-sm{padding:3px 8px;font-size:12px;line-height:18px;border-radius:4px}.btn-mini,.btn-xs{padding:0 5px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.btn-wide{min-width:120px}.btn-limit{max-width:180px;padding-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.btn-limit>.caret{position:absolute;top:14px;right:8px}.btn-circle{border-radius:17px}.btn>.label-icon{top:3px;padding:3px;margin:-2px;background-color:rgba(0,0,0,.2);border-radius:12px}.btn>.label-icon>.icon{font-size:16px;line-height:18px}.btn>.icon+.text{margin-left:5px}.btn.btn-sm.btn-circle{border-radius:12px}.btn.btn-sm>.label-icon{top:2px;width:20px;height:20px;padding:1px;line-height:20px}.btn.btn-sm>.label-icon>.icon{position:relative;top:-1px;display:inline-block;font-size:14px;line-height:18px}.btn-icon-left{position:relative;padding-left:35px;overflow:hidden;text-align:right}.btn-icon-left>.label-icon{position:absolute;left:5px;margin:0}.btn-icon-left>.icon{position:absolute;top:0;bottom:0;left:0;display:block;width:30px;line-height:30px;color:#16a8f8;text-align:center;background:#e9f2fb}.btn-icon-left.btn-sm{padding-left:28px}.btn-icon-left.btn-sm>.label-icon{left:2px}.btn-icon-left.btn-sm>.icon{width:24px;line-height:24px}.btn-icon-right{position:relative;padding-right:35px;text-align:left}.btn-icon-right>.label-icon{position:absolute;right:5px;margin:0}.btn-icon-right.btn-sm{padding-right:28px}.btn-icon-right.btn-sm>.label-icon{right:2px}.btn-icon{min-width:32px;padding-right:0;padding-left:0}.btn-icon.btn-sm{width:24px;min-width:24px;height:24px}.btn-group{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group>.btn-group{float:left}.btn-group>.btn{border-radius:0}.btn-group>.btn:first-child{border-top-left-radius:2px;border-bottom-left-radius:2px}.btn-group>.btn:last-child{border-top-right-radius:2px;border-bottom-right-radius:2px}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.dropdown{float:left;margin-right:10px}.btn-toolbar>.btn-group:last-child,.btn-toolbar>.btn:last-child,.btn-toolbar>.dropdown:last-child{margin-right:0}.btn-toolbar>.divider{float:left;height:20px;margin:7px 5px 4px 10px;border-left:1px solid rgba(0,0,0,.1)}.btn-toolbar .space{float:left;min-height:1px;margin:0 10px 0 10px}.btn-toolbar .input-control{float:left;width:120px}.btn-toolbar .page-title{float:left;line-height:34px}.btn-toolbar .page-title .text{font-size:14px;font-weight:700}.btn-toolbar .page-title .label{top:-2px;margin-right:10px}.btn-toolbar .divider+.page-title{margin-left:15px}.btn-active-line{position:relative;font-weight:700;color:#0c64eb}.btn-active-line:after{position:absolute;right:5px;bottom:1px;left:5px;display:block;content:' ';border-bottom:2px solid #0c64eb}.btn-active-line:hover{color:#0c64eb}.btn-active-text .text{position:relative;top:-1px;display:inline-block;font-weight:700;color:#0c64eb}.btn-active-text .text:after{position:absolute;bottom:-5px;display:block;width:100%;content:' ';border-bottom:2px solid #0c64eb}.angle-btn{position:relative;padding:1px;background:#fff;border:1px solid #cbd0db;border-right:none}.btn-toolbar>.angle-btn{margin-right:8px}.angle-btn:after,.angle-btn:before{position:absolute;top:-1px;right:-8px;display:block;width:0;height:0;content:' ';border-color:transparent transparent transparent #cbd0db;border-style:solid;border-width:17px 0 17px 8px}.angle-btn:after{right:-7px;border-color:transparent transparent transparent #fff;border-width:17px 0 17px 8px}.angle-btn .btn{padding:6px;font-weight:700;background:#fff;border:none;border-radius:4px!important}.angle-btn .btn.btn-limit{padding-right:16px}.angle-btn .btn.btn-limit>.caret{right:4px}.angle-btn+.angle-btn{border-left:none}.angle-btn+.angle-btn>.btn-group:first-child{padding-left:8px}.angle-btn+.angle-btn>.btn-group:first-child:after,.angle-btn+.angle-btn>.btn-group:first-child:before{position:absolute;top:-2px;left:0;display:block;width:0;height:0;content:' ';border-color:transparent transparent transparent #cbd0db;border-style:solid;border-width:17px 0 17px 8px}.angle-btn+.angle-btn>.btn-group:first-child:after{left:-1px;border-color:transparent transparent transparent #fff;border-width:17px 0 17px 8px}.btn-toolbar>.angle-btn.active,.btn-toolbar>.angle-btn:last-child{border-color:#0c64eb}.btn-toolbar>.angle-btn.active .btn,.btn-toolbar>.angle-btn:last-child .btn{color:#0c64eb}.btn-toolbar>.angle-btn.active:after,.btn-toolbar>.angle-btn.active:before,.btn-toolbar>.angle-btn:last-child:after,.btn-toolbar>.angle-btn:last-child:before{border-color:transparent transparent transparent #0c64eb}.btn-toolbar>.angle-btn.active:after,.btn-toolbar>.angle-btn:last-child:after{border-color:transparent transparent transparent #fff}.btn-toolbar>.angle-btn+.angle-btn:last-child>.btn-group:first-child:after,.btn-toolbar>.angle-btn+.angle-btn:last-child>.btn-group:first-child:before,.btn-toolbar>.angle-btn.active+.angle-btn>.btn-group:first-child:after,.btn-toolbar>.angle-btn.active+.angle-btn>.btn-group:first-child:before{border-color:transparent transparent transparent #0c64eb}.btn-toolbar>.angle-btn+.angle-btn:last-child>.btn-group:first-child:after,.btn-toolbar>.angle-btn.active+.angle-btn>.btn-group:first-child:after{border-color:transparent transparent transparent #fff}.btn-toolbar>.angle-btn.active+.angle-btn,.btn-toolbar>.angle-btn.normal{border-color:#cbd0db}.btn-toolbar>.angle-btn.active+.angle-btn .btn,.btn-toolbar>.angle-btn.normal .btn{color:#3c4353}.btn-toolbar>.angle-btn.active+.angle-btn:after,.btn-toolbar>.angle-btn.active+.angle-btn:before,.btn-toolbar>.angle-btn.normal:after,.btn-toolbar>.angle-btn.normal:before{border-color:transparent transparent transparent #cbd0db}.btn-toolbar>.angle-btn.active+.angle-btn:after,.btn-toolbar>.angle-btn.normal:after{border-color:transparent transparent transparent #fff}.btn-toolbar>.angle-btn.active+.angle-btn>.btn-group:first-child:before,.btn-toolbar>.angle-btn.normal>.btn-group:first-child:before{border-color:transparent transparent transparent #cbd0db!important}.nav>li>.btn.btn-primary{color:#fff}.nav>li>.btn.btn-primary:focus,.nav>li>.btn.btn-primary:hover{background:rgba(12,100,235,.8)}.label{position:relative;display:inline-block;padding:3px 5px;font-size:12px;font-weight:400;vertical-align:middle;border-radius:2px}.label+.label{margin-left:4px}.label-pale{background:#bed8f3!important}.label-badge{border-radius:9px}.label-light{color:#3c4353;background-color:#ddd}.label-primary{background:#0c64eb!important}.label-gray{color:#878da0;background:#e8ebef}.label-outline.label-danger{color:#ff5d5d;background:#ffebee;border-color:rgba(255,93,93,.25)}.label-outline.label-light{color:#838a9d;background:#f2f5fb;border-color:#e1e5ee}.label-primary.label-outline{background:#e9f2fb!important;border-color:rgba(12,100,235,.25)}.label-outline.label-success{background:#e8f5e9;border-color:rgba(0,218,136,.25)}.label-dot{position:relative;top:-1px;padding:0;border-radius:50%}.label-dot+.status-text{display:inline-block;margin-left:5px}.label-icon{min-width:18px;padding:0;line-height:18px;border-radius:10px}.label-id{display:inline-block;min-width:30px;padding:0 5px;font-size:12px;line-height:16px;color:#838a9d;text-align:center;vertical-align:middle;background-color:transparent;border:1px solid #838a9d;border-radius:2px}.pri-1,.todo-pri-1{color:#ff5d5d}[class*=" status-"],[class^=status-]{color:#3c4353}.status-changed,.status-delayed,.status-doing,.status-fail,.status-investigate{color:#ff5d5d}.status-changed>.label-dot,.status-delayed>.label-dot,.status-doing>.label-dot,.status-fail>.label-dot,.status-investigate>.label-dot{background-color:#ff5d5d}.status-wait{color:#838a9d}.status-wait>.label-dot{background-color:#7ec5ff}.status-unclosed{color:#838a9d}.status-unclosed>.label-dot{background-color:#0c64eb}.status-done,.status-normal,.status-pass,.status-resolved{color:#43a047}.status-done>.label-dot,.status-normal>.label-dot,.status-pass>.label-dot,.status-resolved>.label-dot{background-color:#00da88}.status-postpone{color:#838a9d}.status-postpone>.label-dot{background-color:#ff5d5d}.status-blocked{position:relative;left:-5px;display:inline-block;padding:0 5px;line-height:20px;color:#3c4353;background:#fff3e0;border-radius:10px}.status-blocked>.label-dot{background-color:#ff9800}.status-pause,.status-suspended{color:#ff9800}.status-pause>.label-dot,.status-suspended>.label-dot{background-color:#ff9800}.status-active.status-bug,.status-draft{color:#8666b8}.status-active.status-bug>.label-dot,.status-draft>.label-dot{background-color:#8666b8}.status-closed,.status-terminate{color:#838a9d}.status-closed>.label-dot,.status-terminate>.label-dot{background-color:#838a9d}.status-cancel{color:#838a9d}.status-cancel>.label-dot{background-color:#cbd0db}.label-pri{display:inline-block;min-width:20px;max-width:67px;height:20px;padding:0 4px;overflow:hidden;line-height:17px;color:#838a9d;text-align:center;text-overflow:ellipsis;white-space:nowrap;vertical-align:middle;border:2px solid #838a9d;border-radius:10px}.label-selector>.label-pri,[class*=label-pri-]{color:#158af1;border-color:#2098ee}.label-pri-1,.label-selector>.label-pri[data-value="1"]{color:#d50000;border-color:#d50000}.label-pri-2,.label-selector>.label-pri[data-value="2"]{color:#ff9800;border-color:#ff9800}.label-pri-3,.label-selector>.label-pri[data-value="3"]{color:#2098ee;border-color:#2098ee}.label-pri-4,.label-selector>.label-pri[data-value="4"]{color:#009688;border-color:#009688}.label-pri-5,.label-selector>.label-pri[data-value="5"]{color:#838a9d;border-color:#838a9d}.label-pri-0,.label-selector>.label-pri.active[data-value="0"]{color:#d5d9df;border-color:#d5d9df}.label-severity{position:relative;display:inline-block;width:24px;height:20px;text-align:center;vertical-align:middle}.label-severity:before{position:absolute;top:-3px;left:0;z-index:0;display:block;font-family:ZentaoIcon;font-size:18px;font-size:24px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;color:inherit;text-transform:none;content:"\e973";speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.label-severity:after{position:absolute;top:7px;left:0;z-index:1;display:block;width:24px;font-size:12px;line-height:12px;text-align:center;content:attr(data-severity)}.label-severity[data-severity],.label-severity[data-value]{color:#ccc}.label-severity[data-severity="0"],.label-severity[data-value="0"]{color:#ccc}.label-severity[data-severity="0"]:after,.label-severity[data-value="0"]:after{display:none}.label-severity[data-severity="1"],.label-severity[data-value="1"]{color:#c62828}.label-severity[data-severity="2"],.label-severity[data-value="2"]{color:#e65100}.label-severity[data-severity="3"],.label-severity[data-value="3"]{color:#ffa000}.label-severity[data-severity="4"],.label-severity[data-value="4"]{color:#fdd835}.label-severity[data-severity="5"],.label-severity[data-value="5"]{color:#8bc34a}.label-severity-custom[data-severity]{color:#d5d9df}.label-severity-custom[data-severity="1"]{color:#c62828}.label-severity-custom[data-severity="2"]{color:#e65100}.label-severity-custom[data-severity="3"]{color:#ffa000}.label-severity-custom[data-severity="4"]{color:#fdd835}.label-severity-custom[data-severity="5"]{color:#cddc39}.label-selector>.label{display:inline-block;min-width:24px;height:24px;padding:0 5px;font-size:14px;line-height:20px;text-align:center;cursor:pointer;background:0 0;border:2px solid #d5d9df;border-radius:15px}.label-selector>.label+.label{margin-left:10px}.label-selector>.label.empty{border-color:transparent}.label-selector>.label.label-severity{font-size:12px;line-height:28px;border-color:transparent}.label-selector>.label.label-severity:before{top:-2px;left:-2px}.label-selector>.label.label-severity:after{display:none}.label-selector>.label.label-severity.active{background:0 0;filter:none;-webkit-filter:none}.checkbox-primary,.radio-primary{position:relative;display:block;vertical-align:middle}.checkbox-primary.inline-block,.radio-primary.inline-block{display:inline-block}.checkbox-primary.inline-block+.inline-block,.radio-primary.inline-block+.inline-block{margin-left:15px}.checkbox-primary>input,.radio-primary>input{position:absolute;top:0;left:0;z-index:3;width:100%;height:100%;margin:0;opacity:0}.checkbox-primary>label,.radio-primary>label{display:block;height:20px;padding-left:30px;margin:0;font-weight:400;line-height:20px;cursor:pointer}.checkbox-primary>label:after,.checkbox-primary>label:before,.radio-primary>label:after,.radio-primary>label:before{position:absolute;top:1px;right:0;left:0;display:block;width:18px;height:18px;line-height:18px;text-align:center;content:' ';border-radius:3px}.checkbox-primary>label:after,.radio-primary>label:after{z-index:1;border:2px solid #eee;border-color:rgba(0,0,0,.15);-webkit-transition:.4s cubic-bezier(.175,.885,.32,1);-o-transition:.4s cubic-bezier(.175,.885,.32,1);transition:.4s cubic-bezier(.175,.885,.32,1);-webkit-transition-property:border,background-color;-o-transition-property:border,background-color;transition-property:border,background-color}.checkbox-primary>label:before,.radio-primary>label:before{top:3px;z-index:2;font-family:ZentaoIcon;font-size:18px;font-size:14px;font-style:normal;font-weight:400;font-weight:900;font-variant:normal;line-height:1;text-transform:none;content:"\e5ca";opacity:0;-webkit-transition:.2s cubic-bezier(.175,.885,.32,1);-o-transition:.2s cubic-bezier(.175,.885,.32,1);transition:.2s cubic-bezier(.175,.885,.32,1);-webkit-transition-property:opacity,-webkit-transform;-o-transition-property:opacity,-o-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform,-o-transform;-webkit-transform:scale(0);-ms-transform:scale(0);-o-transform:scale(0);transform:scale(0);speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.checkbox-primary.checked>label:after,.checkbox-primary>input:checked+label:after,.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{background-color:#00da88;border-color:#00da88;border-width:4px}.checkbox-primary.checked>label:before,.checkbox-primary>input:checked+label:before,.radio-primary.checked>label:before,.radio-primary>input:checked+label:before{color:#fff;opacity:1;-webkit-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}.checkbox-primary.focus>label:after,.checkbox-primary>input:focus+label:after,.radio-primary.focus>label:after,.radio-primary>input:focus+label:after{border-color:#00da88;-webkit-box-shadow:0 0 0 3px rgba(0,218,136,.2);box-shadow:0 0 0 3px rgba(0,218,136,.2)}.checkbox-primary:hover>label:after,.radio-primary:hover>label:after{border-color:#00da88}.checkbox-primary.checkbox-right>label,.radio-primary.checkbox-right>label{padding:0 30px 0 0}.checkbox-primary.checkbox-right>label:after,.checkbox-primary.checkbox-right>label:before,.radio-primary.checkbox-right>label:after,.radio-primary.checkbox-right>label:before{right:0;left:auto}.checkbox-primary input:disabled+label:after,.checkbox-primary.disabled>label:after,.radio-primary input:disabled+label:after,.radio-primary.disabled>label:after{background-color:#e5e5e5!important;border-color:#bbb!important}.checkbox-primary input:disabled:checked+label:after,.checkbox-primary.checked.disabled>label:after,.radio-primary input:disabled:checked+label:after,.radio-primary.checked.disabled>label:after{background-color:#bbb!important}.radio-primary>label:after{border-radius:50%}.radio-primary>label:before{top:7px;left:6px;width:6px;height:6px;content:' ';border:none;border-radius:50%}.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{background-color:transparent;border-color:#00da88;border-width:2px}.radio-primary.checked>label:before,.radio-primary>input:checked+label:before{background-color:#00da88}.radio-primary input:disabled:checked+label:after,.radio-primary.checked.disabled>label:after{background-color:transparent;border-color:#bbb}.radio-primary input:disabled:checked+label:before,.radio-primary.checked.disabled>label:before{background-color:#bbb}.panel{position:relative;margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045);box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045)}.panel-body{padding:20px}.panel-body.has-table{padding:10px}.panel-body.has-table .table{margin-bottom:0;table-layout:fixed}.panel-heading{padding:12px 48px 12px 20px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading+.panel-body{padding-top:0}.panel-title{font-size:14px;font-weight:700;line-height:20px}.panel-title .label{top:-1px}.panel-actions{position:absolute;top:0;right:0;padding:7px 8px}.panel:hover .panel-actions{z-index:10}.panel-actions>li>a{display:inline-block;min-width:30px;padding:0 5px;line-height:30px;color:#a6aab8}.panel-actions>li>a:hover{color:#3c4353;text-decoration:initial;background-color:#f1f1f1}.panel-actions .btn-icon{color:#a6aab8}.panel-actions .btn.text-primary{color:#0c64eb}.panel .empty-tip{padding:30px 10px 50px;font-size:14px;color:#838a9d;text-align:center}.progress-text-left{position:relative;margin:7px 0;margin-left:35px;overflow:visible}.progress-text-left .progress-text{position:absolute;top:-7px;left:-35px;display:block;width:35px;height:20px;padding-right:5px;line-height:20px;color:#838a9d;text-align:right}.chart-color{width:20px}.chart-color-dot{display:inline-block;width:10px;height:10px;border-radius:50%}.chart-row{margin-top:10px}.chart-row+.chart-row{padding-top:10px;border-top:1px solid #eee}.chart-wrapper{padding:10px 5px;background:#eee}.chart-wrapper>h4{margin:5px 0 10px}.table-wrapper{max-height:250px;overflow:auto}.table-wrapper .table{margin:0}.progress-pie{position:relative}.progress-pie .progress-info{position:absolute;top:0;left:0;width:100%;height:100%;padding-top:25px;text-align:center}.progress-pie .progress-info>small{display:block;line-height:14px;color:#a6aab8}.progress-pie .progress-info>strong{display:block;font-size:36px;line-height:40px}.progress-pie .progress-info>strong>small{font-size:20px}.progress-pie-120 .progress-info{padding-top:30px}.progress-pie-120 .progress-info>small{line-height:18px}.progress-pie-50 .progress-info{padding-top:4px}.progress-pie-50 .progress-info>strong{font-size:20px;font-weight:400}.progress-pie-50 .progress-info>strong>small{font-size:14px}.progress-pie[data-value="100"] .progress-info>strong{-webkit-transform:scale(.7);-ms-transform:scale(.7);-o-transform:scale(.7);transform:scale(.7)}.status-bars{display:table;width:100%;height:140px;padding:5px;padding-top:50px;margin:0;overflow:hidden}.status-bars>li{position:relative;display:table-cell;text-align:center;vertical-align:bottom}.status-bars .bar{position:absolute;bottom:20px;left:50%;display:block;width:10px;margin-left:-5px;background:#0c64eb;border-radius:5px 5px 0 0}.status-bars .bar:after{position:absolute;right:-50px;bottom:0;left:-50px;display:block;height:1px;content:' ';background:#eee}.status-bars .title{font-size:12px;font-weight:400;color:#a6a8b6}.status-bars .value{position:relative;top:-20px;left:-20px;display:inline-block;width:50px;font-size:16px;font-weight:700;text-align:center}.status-bars-h{display:block;padding-right:50px;padding-left:60px;list-style:none}.status-bars-h>li{position:relative;height:40px;border-left:1px solid #eee}.status-bars-h .bar{position:relative;top:15px;display:block;height:10px;line-height:20px;background:#0c64eb;border-radius:0 5px 5px 0}.status-bars-h .title{position:absolute;top:-5px;left:-60px;width:60px;padding-right:10px;font-size:12px;color:#a6a8b6;text-align:right}.status-bars-h .value{position:absolute;top:-5px;right:-50px;display:block;width:40px;font-size:14px;font-weight:700;text-align:left;white-space:nowrap}.messager{border-radius:4px;-webkit-box-shadow:0 4px 16px rgba(0,0,0,.2),0 2px 8px rgba(0,0,0,.1);box-shadow:0 4px 16px rgba(0,0,0,.2),0 2px 8px rgba(0,0,0,.1)}.messager-content{padding:18px 20px;font-size:18px;line-height:30px}.messager-content>.icon{font-size:28px;line-height:30px}.messager-actions{vertical-align:middle}.messagger-zt{color:#3c4353;background-color:#fff}.messagger-zt .messager-content>.icon{color:#0c64eb}.messagger-zt .messager-actions>.action{color:#838a9d}.messagger-zt.messager-success .messager-content>.icon{color:#00da88}.messagger-zt.messager-danger .messager-content>.icon{color:#ff5d5d}.messagger-zt.messager-warning .messager-content>.icon{color:#ff9800}.messagger-zt.messager-info .messager-content>.icon{color:#2196f3}.tree{padding-left:0;overflow:hidden}.tree ul{position:relative;display:none;padding-left:0}.tree li{position:relative;padding:2px 0 2px 15px;list-style:none}.tree li.heading{padding-left:5px;color:#3c4353}.tree li>a{display:block;max-width:90%;padding:2px 6px;color:#3c4353;word-break:break-all}.tree li>a:hover{color:#3c4353}.tree li>a.tree-toggle:hover{background:0 0}.tree li.active>a{position:relative;font-weight:700;color:#0c64eb}.tree li>.list-toggle{position:absolute;top:1px;left:1px;z-index:10;width:20px;font-size:14px;line-height:22px;color:#cbd0db;text-align:center;cursor:pointer;-webkit-transition:all .2s;-o-transition:all .2s;transition:all .2s}.tree li>.list-toggle:before{content:"\f0da"}.tree li>.list-toggle:active,.tree li>.list-toggle:hover{color:#0c64eb}.tree li.has-active-item>.list-toggle{color:#3c4353}.tree li.has-list.open>ul{display:block}.tree li.has-list.open>.list-toggle{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.tree li.has-list.open:before{position:absolute;top:16px;bottom:-5px;left:10px;display:block;content:' ';border-left:1px solid #d8d8d8}.tree-actions{display:inline-block;margin-left:5px;vertical-align:middle}.tree-actions a{display:inline-block;margin-left:5px;font-size:13px;opacity:.6}.tree-actions a:hover{opacity:1}.tree li>.module-name{color:#3c4353;vertical-align:middle}.tree li>.module-name:hover{background-color:#f0f2f5}.tree li>.module-name:hover>a{color:#3c4353}.treemap-node-fold-icon:before{position:relative;left:-4px;min-width:18px}.dropdown-menu{padding:5px 0;border-color:rgba(0,0,0,.1)}.dropdown-menu>li{padding:0 10px}.dropdown-menu>li>a{padding:2px 10px;margin:5px 0;border-radius:3px}.dropdown-menu>li>a>.icon{position:relative;left:-5px;opacity:.5}.dropdown-menu>li.active>a,.dropdown-menu>li.selected>a{position:relative;color:#fff;background-color:#16a8f8}.dropdown-menu>li.selected>a:after{position:absolute;top:2px;right:4px;display:block;font-family:ZentaoIcon;font-size:18px;font-size:14px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;line-height:20px;text-transform:none;content:"\e5ca";speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.dropdown-menu>li.divider{margin:10px}.dropdown-submenu>a:after{margin-right:-5px}.dropdown-submenu>.dropdown-menu.pull-left{margin-left:-1px}.dropdown-submenu:focus>a,.dropdown-submenu:hover>a{color:#3c4353;background-color:#e9f2fb}.dropdown-submenu:hover>a:after{border-left-color:#0c64eb}.dropdown-submenu>a:hover:after{border-left-color:#fff}.pager .btn{padding:3px 10px}.pager .btn .caret{opacity:.7}.pager>li>.pager-label{padding:2px;line-height:20px}.pager>li>.pager-item{min-width:20px;padding:1px;margin:2px 0;font-size:16px;line-height:20px;text-align:center;background:0 0;border-color:transparent}.pager>li>.pager-item:hover{background-color:rgba(0,0,0,.1)}.pager>li>.pager-item>.icon{position:relative;top:-1px}.pager>li>.btn:hover,.pager>li>a:hover{background:rgba(0,0,0,.1)}.pager>li.disabled>a.pager-item{background:0 0;border-color:transparent;opacity:.5}.pager>li.active>a{background-color:#16a8f8}.pager>li .btn-group .btn{padding:1px;margin:2px 0;border-radius:4px}.pager .dropdown-menu{width:200px}.pager .dropdown-menu>li{float:left;width:33.333333%}.modal-dialog{width:900px;max-width:1360px;border:none;border-radius:0;-webkit-box-shadow:0 0 20px 0 rgba(0,0,0,.25);box-shadow:0 0 20px 0 rgba(0,0,0,.25)}.modal-dialog.modal-md{width:700px}.modal-dialog.modal-xs{width:400px}.modal-dialog.modal-sm{width:500px}.modal-dialog.modal-lg{width:1200px}.modal-dialog.modal-fullscreen{position:fixed;max-width:initial}.modal-header{padding:20px 0;margin:0 20px}.modal-header>.close{color:#838a9d;text-shadow:0 1px 0 rgba(255,255,255,.85);opacity:1}.modal-header>.close:hover{color:#222}.modal-footer{padding:20px 0;margin:0 20px}.modal-title{font-size:16px;font-weight:400;line-height:20px}.modal-actions{position:absolute;top:16px;right:16px}.modal-actions .divider{position:relative;top:5px;display:inline-block;width:0;height:20px;margin:0 10px;border-left:#eee 1px solid}.modal-actions>.dropdown{display:inline-block}.modal-body{padding:20px}.modal-iframe .modal-body>iframe{border-radius:0}.modal.fade .modal-dialog{-webkit-transform:translate(0,-3%);-ms-transform:translate(0,-3%);-o-transform:translate(0,-3%);transform:translate(0,-3%)}.modal.fade.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-simple .modal-footer{padding-top:0;border-top:none}.modal-iframe .modal-header{position:relative;z-index:10;min-height:0;padding:0;border:none}.modal-iframe .modal-title{display:none}.modal-iframe .modal-header .close{position:absolute;top:12px;right:10px;font-size:32px;font-weight:200}.modal-iframe .modal-dialog{overflow:hidden}.modal-inverse .modal-header>.close{color:rgba(255,255,255,.7);text-shadow:none}.modal-inverse .modal-header>.close:hover{color:#fff}.modal-scroll-inside>.modal-dialog{max-height:100%}.hide-modal-close .modal-iframe .modal-header .close{display:none}.tile{text-align:center}.tile-title{line-height:20px;color:#3c4353}.tile-amount{font-size:32px;font-weight:700;line-height:56px}.timeline>li{position:relative;list-style:none}.timeline>li:before,.timeline>li>a:after,.timeline>li>div:after{position:absolute;left:-20px;display:block;width:15px;height:15px;content:' ';border-radius:50%}.timeline>li:before{top:12px;left:-16px;z-index:3;width:7px;height:7px;background-color:#cbd0db;border:none;border:1px solid #cbd0db}.timeline>li>a:after,.timeline>li>div:after{top:11px;left:-17px;z-index:3;width:9px;height:9px;background-color:#0c64eb;border-radius:50%;opacity:0}.timeline>li+li:after{position:absolute;top:-12px;bottom:20px;left:-13px;z-index:1;display:block;content:' ';border-left:1px solid #eee}.timeline>li.active>a:after,.timeline>li.active>div:after{opacity:1}.timeline>li.active:before{top:8px;left:-20px;width:15px;height:15px;background-color:rgba(12,100,235,.2);border:none}.timeline>li>a,.timeline>li>div{display:block;padding:5px;line-height:20px}.timeline>li.active>a{color:#3c4353}.timeline-tag{position:absolute;top:5px;left:-115px;font-size:12px}.timeline-tag-left{padding-left:115px}.timeline-sm{font-size:12px}.timeline-sm>li:before,.timeline-sm>li>a:after,.timeline-sm>li>div:after{top:10px;left:-20px;width:11px;height:11px}.timeline-sm>li.active:before,.timeline-sm>li:before{top:10px;left:-18px;width:11px;height:11px;background:0 0;border:1px solid #eee}.timeline-sm>li>a,.timeline-sm>li>div{line-height:20px}.timeline-sm>li>a:after,.timeline-sm>li>div:after{top:13px;left:-15px;width:5px;height:5px}.form-control{-webkit-box-shadow:none;box-shadow:none}.form-horizontal .form-group>label{padding-right:0}.form-actions{margin-top:20px;margin-bottom:0}.form-actions .btn{margin-right:10px}form label{font-weight:400;color:#3c4353}.form-group .btn+.btn{margin-left:5px}.table-form{margin-bottom:0;table-layout:fixed}.table-form>thead>tr>th.required:after{position:relative;top:3px;right:auto;left:4px;display:inline-block;vertical-align:middle}.table-form>tbody>tr>td,.table-form>tbody>tr>th,.table-form>tfoot>tr>td,.table-form>thead>tr>th{padding:7px;vertical-align:middle;border-bottom:none}.table-form>tfoot>tr>td{padding:20px 7px 10px}.table-form>tbody>tr>th{width:100px;font-weight:700;text-align:right}.table-form .input-group{width:100%}.table-form textarea.form-control{height:32px}.chosen-container-single .chosen-single{position:relative}.chosen-container-single .chosen-single>span{height:20px;line-height:20px;white-space:normal}.chosen-container-single .chosen-single div b{position:relative;top:1px;color:#cbd0db}.chosen-container-single .chosen-search:before{top:8px;right:15px}.chosen-container-multi .chosen-choices li.search-choice{font-size:13px;background:#eee;border-color:#cbd0db;-webkit-box-shadow:none;box-shadow:none}.chosen-container-single .chosen-search input[type=text]{height:30px;padding:3px 25px 3px 5px}.chosen-container-single .chosen-search{padding:3px 10px 0}.chosen-container-single .chosen-single{overflow:visible}.chosen-container-single .chosen-single>.chosen-search{top:-2px;right:-1px;bottom:-1px;left:-1px;display:none;height:auto;padding:0;opacity:0}.chosen-container-single .chosen-single>.chosen-search>input{height:31px;padding:5px 26px 5px 8px;font-size:inherit;line-height:20px}.chosen-container-single .chosen-single>.chosen-search:before{top:7px;right:8px}.chosen-container .chosen-results{padding:10px}.chosen-container .chosen-results>li{border-radius:4px}.chosen-container .chosen-results li.highlighted em{color:#fff}.table-responsive .chosen-container .chosen-results{max-height:200px}.datetimepicker{padding:10px}.datetimepicker td.day.today{background-color:#f77}.datetimepicker td.day.active{background-color:#16a8f8}.datetimepicker tfoot th,.datetimepicker thead th{color:#838a9d}.input-control .colorpicker{top:0;z-index:auto;opacity:1}.input-control .colorpicker .btn{padding:5px}.input-control .input-control-icon-right.btn{top:0}.colorpicker .dropdown-menu{min-width:232px;padding:5px 10px 10px 10px}.colorpicker .dropdown-menu>li{display:block;float:left;padding:5px}.colorpicker .dropdown-menu>li.heading{width:100%;margin-bottom:5px;font-size:16px;font-weight:700;text-align:left}.colorpicker .dropdown-menu>li.heading>.icon-close{position:relative;top:4px;float:right;cursor:pointer;opacity:.6}.colorpicker .dropdown-menu>li>a{position:relative;display:block;width:100%;height:100%;padding:0;margin:0;font-family:ZentaoIcon;font-size:18px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;text-align:center;text-transform:none;border:1px solid transparent;border-radius:50%;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.colorpicker .dropdown-menu>li>a:before{position:absolute;top:0;display:block;width:100%;height:20px;line-height:18px}.colorpicker .dropdown-menu>li>a:hover{-webkit-box-shadow:0 1px 4px rgba(0,0,0,.25);box-shadow:0 1px 4px rgba(0,0,0,.25)}.colorpicker .dropdown-menu>li>a.active:before{font-size:14px;content:"\e5ca"}.colorpicker .dropdown-menu>li>a.empty{color:#666;background:#fff}.colorpicker .dropdown-menu>li>a.empty:before{content:"\e90d"}.colorpicker .btn{position:relative}.colorpicker .btn .color-bar{position:absolute;right:5px;bottom:3px;left:5px;height:3px}.colorpicker .btn .color-bar[style*='background: ']+.ic{position:relative;top:-2px}.colorpicker .btn .ic{color:#cbd0db}.colorpicker .btn:hover .ic{color:#838a9d}.input-group .colorpicker{z-index:3}.input-group .chosen-container{display:table-cell}.input-group-addon{border-right-width:0;border-left-width:0}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin:0}.input-group-cell{display:table-cell;width:1%;padding:0 12px;white-space:nowrap;vertical-align:middle}.ke-container{border-color:#dcdcdc!important;border-radius:2px!important}.ke-container.focus{border-color:#0c64eb!important}.ke-toolbar{border-color:#dcdcdc!important}.required:after{top:6px;right:-10px;font-size:20px}td.required:after{top:12px;right:-5px}.input-group>.chosen-container.required:after,.input-group>.input-control.required:after{top:1px;right:1px;z-index:2}.input-group.required .required:after{display:none}.file-input{position:relative}.file-input .input-group{width:auto}.file-input .input-group>.input-group-cell:first-child{padding-right:0;padding-left:7px}.file-input input[type=file]{position:absolute;width:0;height:0;opacity:0}.file-input .file-title{display:inline-block;max-width:400px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:middle}.file-input .file-editbox{min-width:200px;max-width:100%}.file-input .file-size{display:inline-block;vertical-align:middle}.edit .file-input-empty,.file-input-edit,.file-input-normal,.normal .file-input-empty{display:none}.edit .file-input-edit,.normal .file-input-normal{display:block}.edit .file-input-edit.input-group,.normal .file-input-normal.input-group{display:table}.edit .file-input-normal{display:none!important}.file-input-normal>.input-group-btn{width:auto}.input-group .chosen-container-active .chosen-choices{border-color:#0c64eb!important}.input-group .chosen-container{min-width:100px}.input-group .input-group-btn .btn>.icon{line-height:17px}.os-mac select.form-control{-webkit-appearance:none;background-image:url(data:image/gif;base64,R0lGODlhCQAFAIAAAMvQ2////yH5BAEAAAEALAAAAAAJAAUAAAIKhH+BGYoNGWxgFgA7);background-image:url(data:image/gif;base64,R0lGODlhBwAEAIAAAMvQ2////yH5BAEAAAEALAAAAAAHAAQAAAIIhA+BGWoNWSgAOw==);background-repeat:no-repeat;background-position:right 5px top 12px;-moz-appearance:none}input::-webkit-contacts-auto-fill-button{position:absolute;right:0;display:none!important;pointer-events:none;visibility:hidden}.chosen-choices.has-error,.chosen-single.has-error,.form-control.has-error{border-color:#ff5d5d!important;-webkit-box-shadow:0 0 6px #ffc3c3!important;box-shadow:0 0 6px #ffc3c3!important}.popover-success.popover-form-result{font-weight:700;color:#fff;background:#00da88}.popover-success.popover-form-result.popover.right .arrow:after{border-right-color:#00da88}#mainHeader{height:50px;color:#fff;background:#1183fb -webkit-gradient(linear,right top,left top,from(#0a48d1),to(#1183fb));background:#1183fb -webkit-linear-gradient(right,#0a48d1 0,#1183fb 100%);background:#1183fb -o-linear-gradient(right,#0a48d1 0,#1183fb 100%);background:#1183fb linear-gradient(-90deg,#0a48d1 0,#1183fb 100%);background-color:#1183fb;border-top-color:#0c64eb;border-bottom-color:#e9f2fb}#mainHeader>.container{min-width:1200px;padding:0}#heading{position:absolute;top:10px;left:20px}@media (min-width:1400px){#heading{left:40px}}#heading h1{float:left;max-width:250px;margin:0;overflow:hidden;font-size:20px;font-weight:400;line-height:30px;text-overflow:ellipsis;white-space:nowrap}#heading h1 a{color:inherit;text-decoration:inherit}#heading h1.long-name{position:relative;top:-5px;display:table-cell;font-size:16px;line-height:20px;word-break:break-all;white-space:normal}#heading .btn{display:block;float:left;height:20px;padding:1px 5px;margin:0;margin:5px 0 0 10px;font-size:12px;font-weight:lighter;line-height:18px;background-color:rgba(255,255,255,.2);border:none}#heading .btn:hover{background-color:rgba(0,0,0,.1)}#navbar{margin:0 auto;font-size:15px;text-align:center}#navbar .nav{display:inline-block}#navbar .nav>li>a{padding:10px 15px;line-height:30px;color:#fff;border-radius:0;opacity:.9}@media (max-width:992px){#navbar .nav>li>a{padding:10px}}#navbar .nav>li>a:focus,#navbar .nav>li>a:hover{background:rgba(0,0,0,.15);opacity:1}#navbar .nav>li.active>a{font-weight:700;background:rgba(0,0,0,.1);opacity:1}#navbar .nav>li.divider{display:block;width:2px;height:20px;margin:15px;background:rgba(255,255,255,.4)}#navbar .nav>li.divider:last-child{display:none}#toolbar{position:absolute;top:12px;right:20px;font-size:12px;color:#fff}@media (min-width:1400px){#toolbar{right:40px}}#extraNav{text-align:right}#extraNav>li{display:inline-block;float:none;text-align:left}#extraNav>li>a{display:block;padding:0;color:#fff;opacity:.75}#extraNav>li>a:hover{text-decoration:unset;background-color:rgba(0,0,0,.1);opacity:1}#extraNav>li.open>a{background-color:rgba(0,0,0,.1)}#extraNav>li+li{margin-left:10px}#searchbox{position:relative;float:left;width:150px}#searchbox .input-group-btn .btn{position:relative;padding:1px 4px;font-size:12px;line-height:20px;color:#fff;background-color:rgba(255,255,255,.15);border-right:none;border-radius:2px}#searchbox .input-group-btn .btn:after{position:absolute;top:3px;right:0;bottom:3px;display:block;width:1px;content:' ';background-color:rgba(255,255,255,.15)}#searchbox .input-group-btn .btn:hover{background-color:rgba(255,255,255,.25)}#searchGo{position:absolute;top:0;right:-1px;z-index:9;min-width:24px;height:24px;padding:2px 3px;font-size:12px;line-height:20px;color:#fff;background-color:#6a9afd;border-radius:2px}#searchGo:hover{color:#fff!important;background-color:#0c64eb}#searchInput{height:24px;padding:2px 30px 2px 5px;color:#fff;text-align:left;background:rgba(255,255,255,.15);border-color:transparent;border-radius:0 12px 12px 0;-webkit-transition:background .2s,border .2s;-o-transition:background .2s,border .2s;transition:background .2s,border .2s}#searchInput:hover{background:rgba(255,255,255,.25)}#searchInput:focus{color:#333;background:#fff}#searchInput::-webkit-input-placeholder{font-size:12px;color:#fff;color:rgba(255,255,255,.5)}#searchInput::-moz-placeholder{font-size:12px;color:#fff;color:rgba(255,255,255,.5)}#searchInput::placeholder{font-size:12px;color:#fff;color:rgba(255,255,255,.5)}#searchInput:focus::-webkit-input-placeholder{color:#838a9d}#searchInput:focus::-moz-placeholder{color:#838a9d}#searchInput:focus::placeholder{color:#838a9d}#searchTypeMenu{min-width:220px}#searchTypeMenu>li{float:left;width:50%}#searchTypeMenu>li>a{margin:4px 0}#userNav{float:right;margin:0 -6px 0 10px}#userNav .avatar{display:inline-block;vertical-align:middle}#userNav>li>a{padding:2px 6px;margin-left:3px;line-height:20px;color:#fff;opacity:.9}#userNav>li>a .user-name{max-width:100px;overflow:hidden;font-size:15px;text-overflow:ellipsis;white-space:nowrap}#userNav>li>a:hover{background-color:rgba(0,0,0,.1);opacity:1}#userNav>li>a span{display:inline-block;vertical-align:middle}#userNav>li.open>a{background-color:rgba(0,0,0,.1)}#userNav>li.has-new-items>a{position:relative}#userNav>li.has-new-items>a:before{position:absolute;top:3px;right:-1px;display:block;width:4px;height:4px;content:' ';background-color:#ff5d5d;border-radius:50%}#userNav .dropdown-menu{min-width:150px}#userNav .dropdown-menu>li>a>.icon{position:absolute;top:10px;right:5px;display:block;width:20px;height:20px;line-height:20px;text-align:center}#userNav .user-profile-item>a{position:relative;padding-left:45px}#userNav .user-profile-item .avatar{position:absolute;top:6px;left:5px}#userNav .user-profile-name{font-size:16px}#userNav .user-profile-role{font-size:12px;color:#a9abb8}#userNav .no-role .user-profile-role{display:none}#userNav .no-role .user-profile-name{line-height:40px}#subHeader{min-height:50px;background:#fff}#subHeader>.container{padding:0 20px}@media (min-width:1400px){#subHeader>.container{padding:0 40px}}#pageNav{position:absolute;top:8px;left:0;left:20px}@media (min-width:1400px){#pageNav{left:40px}}#subNavbar{margin-top:5px;font-size:14px;text-align:center}#subNavbar .nav{display:inline-block}#subNavbar .nav>li>a{padding:8px 12px;line-height:24px;color:#3c4353}#subNavbar .nav>li>a:hover{color:#3c4353;background-color:rgba(0,0,0,.075)}#subNavbar .nav>li.active>a{font-weight:700;color:#0c64eb}#subNavbar .nav>li.divider{display:block;width:2px;height:20px;margin:9px 5px;background-color:rgba(0,0,0,.05)}#subNavbar .dropdown-menu{text-align:left}#pageActions{position:absolute;top:9px;right:20px}@media (min-width:1400px){#pageActions{right:40px}}.cell{padding:10px;background-color:#fff;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045);box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045)}.cell+.cell{margin-top:10px}.cell>.panel{margin:0;-webkit-box-shadow:none;box-shadow:none}.cell>.panel>.panel-heading{padding:5px 5px 10px}.cell>.panel>.panel-heading .panel-actions{padding:0}.cell>.panel>.panel-body{padding:5px}.cell>.table{margin:0}#main{padding:20px 0}#main>.container{padding:0 20px}@media (min-width:1400px){#main>.container{padding:0 40px}}#header,#header+#main{min-width:1200px}#mainMenu{margin:-10px 0 8px}.main-content{padding:20px;background-color:#fff;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045);box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045)}@media (min-width:1400px){.main-content>.center-block{max-width:1350px;padding:20px;border:1px solid #eee}.main-content>.center-block .main-header{background-color:#f1f1f1}}.main-content>h2{margin:0 0 20px}.main-content .cell{-webkit-box-shadow:none;box-shadow:none}.main-header{padding:5px 20px;border-bottom:1px solid #eee}.main-header:after,.main-header:before{display:table;content:" "}.main-header:after{clear:both}.main-header>h2{display:block;float:left;margin:0 10px 0 0;font-size:14px;line-height:34px}.main-header>h2 .label-id{margin-right:5px}.main-header>h2 small{font-size:14px;font-weight:400}.main-content .main-header{margin:-20px -20px 10px}.main-header .label{top:-1px}.main-row{display:table;width:100%;table-layout:fixed}.main-row>*{display:table-cell;vertical-align:top}@media (max-width:720px){.main-row{display:block}.main-row>*{display:block;width:100%}.main-row .side-col{width:100%;padding:0}.main-row .main-col+.side-col,.main-row .side-col+.main-col{margin-top:10px}}.main-row.hide-side .side-col{display:none}@media (min-width:720px){.main-content>.center-block .main-form{padding-right:20px}}#main .side-col .tabs{padding:5px}#main .side-col .nav-tabs{margin:0 5px 5px 5px;border-bottom:1px solid #ddd}#main .side-col .nav-tabs>li{margin:0}#main .side-col .nav-tabs>li+li{margin-left:10px}#main .side-col .nav-tabs>li>a{position:relative;padding:8px 5px;border:none;border-radius:2px!important}#main .side-col .nav-tabs>li.active>a{font-weight:700;color:#3c4353}#main .side-col .nav-tabs>li.active>a:before{position:absolute;right:0;bottom:-1px;left:0;display:block;height:2px;content:' ';background:#0c64eb}#main .side-col .tab-content .tab-pane table{border:none}.main-actions .btn-toolbar{display:inline-block;padding:4px 15px;color:#fff;pointer-events:auto;background:#717171;background-color:rgba(90,90,90,.85);border-radius:4px}.main-actions .btn-toolbar .divider{margin-right:15px;margin-left:15px;border-color:rgba(255,255,255,.1)}.main-actions .btn-toolbar .btn{padding-right:10px;padding-left:10px;margin-right:0;color:#fff;background-color:transparent;border:none}.main-actions .btn-toolbar .btn+.btn{margin-left:10px}.main-actions .btn-toolbar .btn:focus,.main-actions .btn-toolbar .btn:hover{background-color:rgba(255,255,255,.2)}.main-actions .btn-toolbar .btn.btn-icon{min-width:32px;padding-right:0;padding-left:0}.main-actions .btn-toolbar .btn+.btn-group{margin-right:0;margin-left:10px}#mainContent .main-col>.main-actions{padding:30px 0 0 0;text-align:center}#mainContent .main-col>.main-actions>.btn-toolbar{visibility:visible;opacity:1;-webkit-transition:opacity .2s;-o-transition:opacity .2s;transition:opacity .2s}#mainActions{position:fixed;top:0;right:0;bottom:0;left:0;text-align:center;pointer-events:none}#mainActions .btn-toolbar{position:relative;top:-90px}#mainActions .dropdown-menu{text-align:left}#mainActions>.container{height:100%}.main-actions-holder{display:none}.main-actions-fixed .main-actions-holder{display:block}.main-actions-fixed #mainContent .main-col>.main-actions{position:fixed;bottom:50px}.main-actions-fixed.body-modal #mainContent .main-col>.main-actions{bottom:20px}#nextPage,#prevPage{position:absolute;top:50%;left:-10px;width:40px;height:60px;padding:10px 0;margin-top:-30px;line-height:40px;color:#fff;text-align:center;pointer-events:auto;background:#717171;background-color:rgba(90,90,90,.85);-webkit-box-shadow:0 2px 15px 2px rgba(0,0,0,.05);box-shadow:0 2px 15px 2px rgba(0,0,0,.05)}#nextPage:hover,#prevPage:hover{-webkit-box-shadow:0 2px 15px 2px rgba(0,0,0,.15);box-shadow:0 2px 15px 2px rgba(0,0,0,.15)}#nextPage>.icon,#prevPage>.icon{display:block;font-size:36px;line-height:36px}#nextPage{right:-10px;left:auto}@media (max-width:1800px){#prevPage{left:-3px}#nextPage{right:-3px}}#sidebarHeader{position:relative;float:left;width:180px;height:34px;padding-right:20px;margin-right:20px;background:#fff;border-left:4px solid #0c64eb;border-radius:4px 2px 2px 4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045);box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045)}#sidebarHeader:after{position:absolute;top:-1px;right:-8px;display:block;width:0;height:0;content:' ';border-color:transparent transparent transparent #fff;border-style:solid;border-width:18px 0 18px 8px}#sidebarHeader .title{padding:0 5px;overflow:hidden;font-size:14px;font-weight:700;line-height:32px;color:#0c64eb;text-align:center;text-overflow:ellipsis;white-space:nowrap}#sidebarHeader .title>a{position:absolute;top:0;right:0;width:20px;opacity:.5}#sidebarHeader .title>a:hover{opacity:1}#sidebar{position:relative;-webkit-transition:width .2s,padding .2s;-o-transition:width .2s,padding .2s;transition:width .2s,padding .2s}#sidebar>.sidebar-toggle{position:absolute;top:0;right:5px;bottom:0;width:10px;cursor:pointer;background:0 0;border-radius:5px;-webkit-transition:background-color .2s;-o-transition:background-color .2s;transition:background-color .2s}#sidebar>.sidebar-toggle>.icon{position:absolute;top:50%;left:-1px;width:12px;height:30px;margin-top:-10px;line-height:30px;color:#fff;text-align:center;background:#79cdfb;border-radius:6px}#sidebar>.sidebar-toggle>.icon:before{position:relative;left:-3px}#sidebar>.sidebar-toggle:before{position:absolute;top:0;right:-5px;bottom:0;left:-5px;display:block;content:' '}#sidebar>.sidebar-toggle:hover{background:rgba(0,0,0,.075)}#sidebar>.cell{position:relative;left:0;width:180px;-webkit-transition:left .2s;-o-transition:left .2s;transition:left .2s}#sidebar.no-animate>.cell{display:none;-webkit-transition:none;-o-transition:none;transition:none}.hide-sidebar #sidebar>.cell{position:absolute;left:-200px}.hide-sidebar #sidebar{position:relative;width:0;padding:0}.hide-sidebar #sidebar>.sidebar-toggle>.icon:before{content:"\e315"}@media (max-width:720px){#sidebar>.cell{width:100%}}#queryBox{max-height:0;padding:0;overflow:hidden;-webkit-transition:cubic-bezier(.175,.885,.32,1) .2s;-o-transition:cubic-bezier(.175,.885,.32,1) .2s;transition:cubic-bezier(.175,.885,.32,1) .2s;-webkit-transition-property:padding,max-height,margin;-o-transition-property:padding,max-height,margin;transition-property:padding,max-height,margin}#queryBox>form{visibility:hidden;-webkit-transition:visibility .2s .2s;-o-transition:visibility .2s .2s;transition:visibility .2s .2s}#queryBox.loading{height:50px}#queryBox.show{min-height:110px;max-height:300px;margin-bottom:10px;overflow:visible}#queryBox.show>form{visibility:visible}#queryBox.divider{border-bottom:1px solid #eee}#main .querybox-toggle.querybox-opened{position:relative;color:#0c64eb;background:0 0;border:none}#main .querybox-toggle.querybox-opened:before{position:absolute;bottom:-14px;left:50%;width:0;height:0;content:' ';border-color:transparent transparent #fff transparent;border-style:solid;border-width:0 10px 10px 10px}#contentNav{padding:5px;background:#fff;border-bottom:1px solid #eee}#contentNav .nav>li>a{position:relative;padding:6px 10px;color:#838a9d}#contentNav .nav>li.active>a{font-weight:700;color:#0c64eb}#contentNav .nav>li.active>a:before{position:absolute;right:10px;bottom:3px;left:10px;display:block;height:2px;content:' ';background:#0c64eb}.body-modal{padding-bottom:0}.body-modal #main,.body-modal .container{min-width:0!important}.body-modal #main{padding:0}.body-modal .main-header{position:fixed;top:0;right:20px;left:20px;z-index:100;padding:13px 48px 13px 0;margin:0;background:#fff}.body-modal #mainContent{padding-top:70px}.body-modal .main-header>h2{max-width:100%;overflow:hidden;font-size:14px;text-overflow:ellipsis;white-space:nowrap}.body-modal .cell,.body-modal .main-content{-webkit-box-shadow:none;box-shadow:none}.body-modal #mainMenu{position:fixed;top:0;right:0;left:0;z-index:100;padding:12px 60px 12px 10px;margin:0;background:#fff}.body-modal #mainMenu>.btn-toolbar.pull-left.divider{display:none}.body-modal #mainMenu>.btn-toolbar{max-width:100%;margin-left:20px}.body-modal #mainMenu>.btn-toolbar>.divider:first-child{display:none}.body-modal #mainMenu>.btn-toolbar .page-title{max-width:100%;margin-left:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.body-modal #mainMenu+#mainContent.main-row{padding:60px 10px 0}.body-modal #mainMenu+#mainContent.main-row .cell{border:1px solid #efefef;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045);box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045)}.body-modal #mainActions{top:auto}.body-modal #mainActions .btn-toolbar{top:auto;bottom:10px}.body-modal.m-bug-view,.body-modal.m-story-view,.body-modal.m-task-view,.body-modal.m-testcase-view,.body-modal.m-testtask-view,.body-modal.m-todo-view{padding-bottom:20px;border-radius:3px}#tabsNav{position:relative}#tabsNav .tab-pane>.actions{position:absolute;top:-8px;right:0}#tabsNav .tab-pane>.cell,#tabsNav .tab-pane>.main-table{padding:0;border:1px solid #cbd0db;border-top:none;border-radius:0 0 4px 4px}#tabsNav .tab-pane>.cell .detail-title{padding-left:5px}#helpContent{position:fixed;top:50px;right:0;bottom:40px;left:0;display:none;background-color:#fff}#helpContent .load-error{display:none;padding:20px}#helpContent .show-error .load-error{display:block}.show-help-tab{overflow:hidden}.show-help-tab #main{display:none}.show-help-tab #helpContent{display:block}#navbar .nav>li>a.open-help-tab>.icon-close{display:none;opacity:.5}#navbar .nav>li>a.open-help-tab>.icon-close:hover{background:rgba(0,0,0,.1);opacity:1}.show-help-tab #navbar .nav>li>a.open-help-tab>.icon-close{display:inline}.text-middle td,.text-middle th{vertical-align:middle}.text-center td,.text-center th{text-align:center}.c-sm{width:40px}.c-id{width:90px}.c-id-sm{width:70px}.c-id-xs{width:55px}.c-date{width:100px}.c-num,.c-pri,.c-type{width:80px;overflow:hidden}.c-begin,.c-end,.c-time{width:65px}.c-hours{width:60px}.c-actions-1{width:50px}.c-actions-2{width:75px}.c-actions-3{width:102px}.c-actions,.c-actions-4{width:128px}.c-actions-5{width:155px}.c-actions-6{width:180px}.c-product,.c-project{width:180px}.c-plan{width:130px}.c-datetime{width:120px}.c-stage,.c-status,.c-user{width:80px}.c-side{width:200px;border-right:10px solid #efefef}.c-assign,.c-assignedTo,.c-openedBy{width:130px}.c-progress{width:155px}.c-assign,.c-assignedTo,.c-openedBy,.c-product,.c-project,.c-stage,.c-status,.c-url,.c-user{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}td.c-name,td.c-title{overflow:hidden;text-align:left!important;text-overflow:ellipsis;white-space:nowrap}td.c-actions{position:relative;padding-top:0;padding-bottom:0;overflow:hidden;white-space:nowrap;vertical-align:middle}td.c-actions .btn{display:inline-block;width:26px;padding:2px;overflow:hidden;line-height:20px;color:#16a8f8;background:0 0;border-color:transparent}td.c-actions .btn .icon{font-size:18px}td.c-actions .btn:hover{color:#0c64eb;background-color:#d3e5f7}td.c-actions .btn+.btn{margin-left:-4px}td.c-actions .btn-link{color:#3c4353;background:0 0}td.c-actions .btn-link:hover{color:#0c64eb;background:#e9f2fb}td.c-actions .more{position:absolute;top:50%;right:100%;display:none;padding-right:4px;padding-left:20px;margin-top:-15px;margin-right:-6px;white-space:nowrap;background-color:#fafafa;-webkit-transition:opacity .3s,margin.3s;-o-transition:opacity .3s,margin.3s;transition:opacity .3s,margin.3s}tr:hover td.c-actions .more{display:block}td:hover+td.c-actions>.more{margin-right:-15px;pointer-events:none;opacity:.15}tr[data-url]{cursor:pointer}.table tbody>tr>td,.table thead>tr>th{vertical-align:middle}.table tbody>tr>td.has-btn,.table thead>tr>th.has-btn{padding-top:1px;padding-bottom:1px;overflow:visible}.table tbody>tr>td .progress,.table thead>tr>th .progress{height:6px}.table .em,.table em{color:#3c4353}.table .divider{border-bottom:10px solid #efefef}.table .divider-top{border-top:10px solid #efefef}.table .btn-icon-left{max-width:100%;padding-left:20px;overflow:hidden;line-height:18px;text-align:left;text-overflow:ellipsis;background:0 0;border-color:#eaf3fc}.table .btn-icon-left>.icon{width:20px;font-size:14px;background:0 0!important;opacity:0}.table .btn-icon-left.btn-sm{height:26px;font-size:13px}.table .btn-icon-left:active,.table .btn-icon-left:focus,.table .btn-icon-left:hover{border-color:rgba(0,0,0,.2)}.table .btn-icon-left:active>.icon,.table .btn-icon-left:focus>.icon,.table .btn-icon-left:hover>.icon{opacity:1}.table .btn-icon-left>.text{padding-left:25px}.table thead>tr>th.c-assign,.table thead>tr>th.c-assignedTo{padding-left:29px}.table a{vertical-align:middle}.table tbody>tr:last-child{border-bottom:none}.table caption{margin-bottom:5px;background:#f1f1f1;border:none}.is-firefox .table .btn-icon-left>.icon{line-height:22px}.main-table{border-radius:4px}.main-table>.table,.main-table>.table-footer,.main-table>.table-header,.main-table>.table-responsive{-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045);box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045)}.main-table .table{font-size:13px;table-layout:fixed;background-color:#fff;border-radius:4px 4px 0 0}.main-table .table.table-lg{font-size:14px}.main-table .table .btn-icon-left{border-color:transparent}.main-table .table .btn-icon-left>.icon{background:0 0;border-radius:4px}.main-table .table .btn-icon-left.btn-sm{height:26px}.main-table .table .btn-icon-left:hover{border-color:rgba(0,0,0,.2)}.main-table .table .btn-icon-left:hover>.icon{background:#e9f2fb;border-radius:4px 0 0 4px}.main-table tbody>tr>td,.main-table thead>tr>th{min-height:36px;padding:2px 8px;line-height:30px}.main-table tbody>tr>td:first-child,.main-table thead>tr>th:first-child{padding-left:15px}.main-table thead>tr>th{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-bottom:1px solid #ddd}.main-table tbody>tr:nth-child(odd){background-color:#f5f5f5}.main-table tbody>tr:last-child>td{border-bottom:1px solid #ddd}.main-table tbody>tr>td{position:relative;border-bottom:none;border-bottom:1px solid #eee}.main-table tbody>tr>td .label{max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.main-table tbody>tr>td>a{line-height:28px;color:#0c60e1}.main-table tbody>tr>td>a:not(.btn):visited{color:#082999;opacity:.9}.main-table tbody>tr>td>a:hover,.main-table tbody>tr>td>a:visited:hover{color:#0c64eb}.main-table tbody>tr>td.c-actions{padding-right:10px}.main-table tbody>tr>td.c-side+td:before,.main-table tbody>tr>td:first-child:before{position:absolute;top:0;bottom:0;left:0;display:block;width:0;content:'';background:#0c64eb;opacity:0;-webkit-transition:.2s linear;-o-transition:.2s linear;transition:.2s linear;-webkit-transition-property:width,opacity,border-radius;-o-transition-property:width,opacity,border-radius;transition-property:width,opacity,border-radius}@-moz-document url-prefix(){.main-table tbody>tr>td.c-side+td:before,.main-table tbody>tr>td:first-child:before{bottom:-1px}}.main-table tbody>tr>td.c-side:before{display:none}.main-table tbody>tr{-webkit-transition:.2s cubic-bezier(.175,.885,.32,1);-o-transition:.2s cubic-bezier(.175,.885,.32,1);transition:.2s cubic-bezier(.175,.885,.32,1);-webkit-transition-property:background-color,-webkit-box-shadow;-o-transition-property:box-shadow,background-color;transition-property:background-color,-webkit-box-shadow;transition-property:box-shadow,background-color;transition-property:box-shadow,background-color,-webkit-box-shadow}.main-table tbody>tr:hover{background:#e9f2fb}.main-table .table-grouped tbody>tr:hover{background:#f2f7fd;-webkit-box-shadow:none;box-shadow:none}.main-table .table-grouped tbody>tr:hover td.c-actions .more{background:#f2f7fd}.main-table tbody>tr.checked{background:#fff3e0}.main-table tbody>tr.checked:hover{background:#ffebbc}.main-table tbody>tr.checked>td.c-side+td:before,.main-table tbody>tr.checked>td:first-child:before{width:4px;opacity:1}.main-table tbody>tr.checked.row-check-begin{border-top-left-radius:4px;border-top-right-radius:2px}.main-table tbody>tr.checked.row-check-begin>td:first-child:before{border-top-left-radius:4px}.main-table tbody>tr.checked.row-check-end{border-bottom-right-radius:2px;border-bottom-left-radius:4px}.main-table tbody>tr.checked.row-check-end>td:first-child:before{border-bottom-left-radius:4px}.main-table .checkbox-primary{display:inline-block;line-height:20px}.main-table .checkbox-primary label{margin:0}.main-table .table{margin:0}.table-header{padding:4px 0 12px}.table-header .table-statistic{color:#838a9d}.table-header .table-statistic strong{font-size:15px;color:#3c4353}.table-header .btn-toolbar{margin-top:-28px}.table-header.fixed-right{position:relative;z-index:5;padding:0}.table-header.fixed-right>.btn-toolbar{position:absolute;top:0;right:0;z-index:1;padding:1px;margin:0;background:#fff;border-radius:4px}.table-header.fixed-right>.btn-toolbar .btn{opacity:.65}.table-header.fixed-right>.btn-toolbar .btn:hover{opacity:1}.table-footer{position:relative;min-height:40px;padding:6px 15px;background:#fff;border-radius:0 0 4px 4px}.body-modal .table-footer{margin-bottom:20px}.talbe-lg+.table-footer{padding:11px 15px}.table-footer .btn-toolbar,.table-footer .checkbox-primary{float:left}.table-footer .btn-toolbar+.btn-toolbar{margin-left:8px}.table-footer .checkbox-primary{margin:5px 20px 0 0}.table-footer .checkbox-primary.checked label:after{border-color:#00da88!important}.table-footer .btn{padding:3px 10px;line-height:20px}.table-footer .pager{position:absolute;top:0;right:0;z-index:4;height:40px;padding:6px 5px 6px 10px;margin:0;background:#fff;opacity:1;-webkit-transition:opacity .4s;-o-transition:opacity .4s;transition:opacity .4s}.table-footer .pager:before{position:absolute;top:0;bottom:0;left:-50px;display:block;width:50px;content:' ';background:-webkit-gradient(linear,left top,right top,from(rgba(255,255,255,0)),to(#fff));background:-webkit-linear-gradient(left,rgba(255,255,255,0) 0,#fff 100%);background:-o-linear-gradient(left,rgba(255,255,255,0) 0,#fff 100%);background:linear-gradient(to right,rgba(255,255,255,0) 0,#fff 100%)}.table-footer .pager .btn,.table-footer .pager>li>.pager-item,.table-footer .pager>li>.pager-label{color:#838a9d;background:0 0;border-color:transparent}.table-footer .pager .btn,.table-footer .pager>li>a{border-radius:3px}.table-footer .pager .btn:hover,.table-footer .pager>li>a:hover{background:rgba(0,0,0,.1)}.table-footer .pager>li.disabled>a.pager-item{opacity:1}.table-footer .form-control{height:28px;padding:3px 8px}.table-footer .table-statistic{position:relative;z-index:2;float:left;padding-right:30px;line-height:28px;color:#838a9d;background:#fff}.table-footer .table-statistic:hover{z-index:4}.table-footer .table-statistic:hover+.pager{z-index:2;opacity:.3}.table-footer .btn-toolbar+.table-statistic{margin-left:10px}.table-footer .text{line-height:28px}.table-footer.fixed-footer{position:fixed;z-index:10;margin:0;background:rgba(75,75,75,.85);border-top-color:transparent}.table-footer.fixed-footer .checkbox-primary label{color:#fff}.table-footer.fixed-footer .checkbox-primary label:after{border-color:rgba(255,255,255,.8)}.table-footer.fixed-footer .table-statistic{color:#fff;background:#666}.table-footer.fixed-footer .pager{background:#666}.table-footer.fixed-footer .pager:before{background:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,0)),to(#666));background:-webkit-linear-gradient(left,rgba(0,0,0,0) 0,#666 100%);background:-o-linear-gradient(left,rgba(0,0,0,0) 0,#666 100%);background:linear-gradient(to right,rgba(0,0,0,0) 0,#666 100%)}.table-footer.fixed-footer .pager .btn,.table-footer.fixed-footer .pager>li>.pager-item,.table-footer.fixed-footer .pager>li>.pager-label{color:#fff}.table-footer.fixed-footer .pager .btn:hover,.table-footer.fixed-footer .pager>li>a:hover{background:rgba(255,255,255,.3)}.table-footer.fixed-footer .pager>li.disabled>a.pager-item{opacity:.5}.table-actions{width:0;height:28px;visibility:hidden;opacity:0;-webkit-transition:opacity cubic-bezier(.175,.885,.32,1) .8s;-o-transition:opacity cubic-bezier(.175,.885,.32,1) .8s;transition:opacity cubic-bezier(.175,.885,.32,1) .8s}.table-actions.show-always{width:auto;pointer-events:none;cursor:not-allowed;visibility:visible;opacity:.75}.has-row-checked .table-actions{width:auto;pointer-events:auto!important;cursor:default;visibility:visible;opacity:1}.table-lg tbody>tr>td{padding:9px 10px}.table-lg tbody>tr>td .btn+.btn{margin-left:5px}.table.has-sort-head thead>tr>th{padding-right:0}.table.has-sort-head thead>tr>th>a{position:relative;display:inline-block;padding-right:16px;color:#3c4353}.table.has-sort-head thead>tr>th>a:after,.table.has-sort-head thead>tr>th>a:before{position:absolute;top:0;right:0;font-family:ZentaoIcon;font-size:18px;font-size:14px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;line-height:30px;color:#3c4353;text-transform:none;content:"\f0de";opacity:.5;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.table.has-sort-head thead>tr>th>a:after{content:"\f0dd"}.table.has-sort-head thead>tr>th>a.sort-down,.table.has-sort-head thead>tr>th>a.sort-up{color:#000;text-decoration:none}.table.has-sort-head thead>tr>th>a:hover,.table.has-sort-head thead>tr>th>a:hover:after,.table.has-sort-head thead>tr>th>a:hover:before{color:#0c64eb;opacity:1}.table.has-sort-head thead>tr>th>a.sort-down:after,.table.has-sort-head thead>tr>th>a.sort-up:before{color:#000;opacity:1}.head-fixed .datatable-head-span .table,.table.fixed-header-copy{z-index:10;color:#fff;background:rgba(75,75,75,.85)}.head-fixed .datatable-head-span .table thead>tr>th,.table.fixed-header-copy thead>tr>th{color:#eee}.head-fixed .datatable-head-span .table thead>tr>th>a,.table.fixed-header-copy thead>tr>th>a{color:#eee}.head-fixed .datatable-head-span .table thead>tr>th>a:hover,.table.fixed-header-copy thead>tr>th>a:hover{color:#fff}.head-fixed .datatable-head-span .table thead>tr>th>a:after,.head-fixed .datatable-head-span .table thead>tr>th>a:before,.table.fixed-header-copy thead>tr>th>a:after,.table.fixed-header-copy thead>tr>th>a:before{color:#eee}.head-fixed .datatable-head-span .table thead>tr>th>a.sort-down,.head-fixed .datatable-head-span .table thead>tr>th>a.sort-down:after,.head-fixed .datatable-head-span .table thead>tr>th>a.sort-up,.head-fixed .datatable-head-span .table thead>tr>th>a.sort-up:before,.head-fixed .datatable-head-span .table thead>tr>th>a:hover,.head-fixed .datatable-head-span .table thead>tr>th>a:hover:after,.head-fixed .datatable-head-span .table thead>tr>th>a:hover:before,.table.fixed-header-copy thead>tr>th>a.sort-down,.table.fixed-header-copy thead>tr>th>a.sort-down:after,.table.fixed-header-copy thead>tr>th>a.sort-up,.table.fixed-header-copy thead>tr>th>a.sort-up:before,.table.fixed-header-copy thead>tr>th>a:hover,.table.fixed-header-copy thead>tr>th>a:hover:after,.table.fixed-header-copy thead>tr>th>a:hover:before{color:#fff}.head-fixed .datatable-head-span .table .checkbox-primary,.table.fixed-header-copy .checkbox-primary{z-index:1}.head-fixed .datatable-head-span .table .checkbox-primary label,.table.fixed-header-copy .checkbox-primary label{color:#fff}.head-fixed .datatable-head-span .table .checkbox-primary label:after,.table.fixed-header-copy .checkbox-primary label:after{border-color:rgba(255,255,255,.8)}.head-fixed .datatable-head-span .table .checkbox-primary.checked label:after,.table.fixed-header-copy .checkbox-primary.checked label:after{border-color:#00da88!important}.table-data{margin:0;table-layout:fixed}.table-data tbody>tr>td,.table-data tbody>tr>th{padding:6px 8px;word-break:break-all;border:none}.table-data tbody>tr>th{width:70px;padding-left:0;font-weight:400;color:#838a9d;text-align:right;vertical-align:middle}.table-data tbody>tr>td{padding-right:0}.table-data tbody>tr>td>a{color:#0c60e1}.table-data tbody>tr>td>a:not(.btn):visited{color:#082999}.table-data tbody>tr>td>a:hover,.table-data tbody>tr>td>a:visited:hover{color:#0c64eb}.table-data ol,.table-data ul{margin:0}.fixed-head-table{background:rgba(0,0,0,.7);border-bottom:1px solid #ddd}.fixed-head-table thead>tr>th{color:#fff}.table-empty-tip{padding:80px 10px;text-align:center;background:#fff}.not-firefox .table-grouped>tbody>tr>td.c-side{background:#fff!important}.table-grouped .group-toggle{cursor:pointer}.table-grouped .group-toggle.group-summary{border-top:10px solid #efefef}.table-grouped tbody>tr>td:first-child,.table-grouped thead>tr>th:first-child{padding-left:8px}.group-expand-all,.table-group-collapsed .group-collapse-all{display:none}.table-group-collapsed .group-expand-all{display:inline-block}.table-auto{table-layout:auto}.datatable .table>tbody>tr.checked.hover>td,.datatable .table>tbody>tr.checked>td.col-hover{background:#ffebbc}body.has-fixed-footer{padding-bottom:60px}.table.with-footer-fixed{margin-bottom:20px}.article-content{overflow:auto}.article-content img{margin-top:0}.article-content table{margin:10px 0}.article-content table td,.article-content table th{border:1px solid #cbd0db}.article-content table th{background:#eee}.article-content,.article>.content{word-wrap:break-word}.detail{padding:10px 0;margin:0 10px}.detail+.detail{padding-top:25px;border-top:1px solid #eee}.detail-title{font-size:14px;font-weight:700;line-height:20px}.detail-title>.pull-right{position:relative;top:-8px}h2.detail-title{margin:0;font-size:15px;font-weight:700}h2.detail-title .label,h2.detail-title .label-id{position:relative;top:-1px}.detail-content{padding:0;margin-top:10px}.detail-content em{font-style:normal;color:#3c4353}.detail-content .list-unstyled>li+li{margin-top:5px}.side-col .detail-content{padding-left:0}details.detail{padding:10px 0}details.detail summary{position:relative;cursor:pointer;outline:0}details.detail summary::-webkit-details-marker{display:none}details.detail summary:after{position:absolute;top:0;right:0;font-family:ZentaoIcon;font-size:18px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;text-transform:none;content:"\e316";opacity:.4;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}details.detail[open] summary:after{content:"\e313"}.files-list{padding-left:0;list-style:none}.files-list>li>a{display:block;line-height:24px}.files-list>li>a>.icon{display:inline-block;margin-right:5px;opacity:.7}.files-list>li>a:hover{color:#0c64eb}.files-list>li>.right-icon{opacity:0;-webkit-transition:opacity .2s;-o-transition:opacity .2s;transition:opacity .2s}.files-list>li:hover>.right-icon{opacity:1}.histories-list{padding-left:15px;margin-bottom:0}.histories-list .btn-mini{position:relative;top:1px}.histories-list>li{position:relative}.histories-list>li+li{margin-top:5px}.histories-list>li strong{color:#3c4353}.histories-list .comment,.histories-list .show-form .comment-edit-form{padding:5px 5px 5px 10px;margin:5px 0 0;background-color:rgba(0,0,0,.025);border:1px solid #eee}.histories-list .btn-edit-comment{position:absolute;top:28px;right:2px}.histories-list .comment-edit-form,.histories-list .show-form .btn-edit-comment,.histories-list .show-form .comment{display:none}.histories-list .show-form .comment-edit-form{display:block;padding:10px;border:1px solid #eee}.histories .btn-mini{width:16px;min-width:16px;height:16px;overflow:hidden;line-height:16px;color:#cbd0db;vertical-align:-8%;border-radius:1px}.histories .btn-mini>.icon{position:relative;top:-2px;left:-2px}.histories .btn-mini:focus,.histories .btn-mini:hover{color:#0c64eb;border-color:#0c64eb}.histories .show-changes .btn-expand>.icon:before{content:"\e926"}.histories .btn-strip{display:none}.histories .show-changes .btn-strip{display:inline-block}.history-changes{display:none;padding:5px;margin-bottom:-5px;margin-left:5px;font-size:12px;line-height:20px}.history-changes blockquote{padding:5px 5px 5px 10px;margin:5px 0 0;font-size:12px;background-color:rgba(0,0,0,.05);border-left:3px solid #eee}.history-changes blockquote.original{display:none}.show-changes .history-changes,.show-original .history-changes blockquote.original{display:block}.show-original .history-changes blockquote.textdiff{display:none}.syntaxhighlighter{overflow:auto}.search-list{min-width:200px;max-width:300px;padding:0}.search-list .search-box{float:none;width:auto;margin:10px}.search-list .search-box .icon-search{opacity:.5}.search-list .list-group{max-height:248px;padding:5px 10px;margin:5px 0}.dropup .search-list .search-box+.list-group{height:171px;padding-top:0}.search-list .search-input{height:30px}.search-list .input-control-icon-right{height:28px;line-height:28px}.list-group{overflow-y:auto}.list-group>a{display:block;padding:2px 10px 2px 5px;overflow:hidden;line-height:20px;text-overflow:ellipsis;white-space:nowrap;border-radius:4px}.list-group>a+a{margin-top:5px}.list-group>a>.icon{display:inline-block;margin-right:3px;opacity:.5}.list-group>a.selected{color:#e9f2fb;background-color:#0c64eb}.list-group>a.active{color:#0c64eb;background-color:#e9f2fb}.list-group>a.active:hover,.list-group>a:hover{color:#fff;background-color:#0c64eb}.list-group>.heading{padding:2px 5px;line-height:20px;color:#838a9d}.list-group>a+.heading{margin-top:4px}.dropup .search-box-sink{padding-top:5px;padding-bottom:45px}.dropup .search-box-sink .search-box{position:absolute;right:10px;bottom:10px;left:10px;margin:0}.dropup .search-box-sink .search-box+.list-group{height:auto;max-height:171px}#dropMenu>.search-box{max-width:188px}#dropMenu .input-control-icon-left{top:0}#dropMenu .list-group{width:199px;max-width:199px;max-height:300px;padding-top:0}#dropMenu .table-row .list-group{margin:0 -10px}#dropMenu .col-right{display:none}#dropMenu .col-left{width:100%}#dropMenu .col-left .list-group{max-height:250px;margin-bottom:35px}#dropMenu .col-footer{position:absolute;bottom:10px;left:10px;width:180px;padding-top:10px;padding-left:5px;margin-top:5px;border-top:1px solid #eee}#dropMenu .col-footer>a{opacity:.8}#dropMenu .col-footer>a:hover{opacity:1}#dropMenu.show-right-col{width:402px;max-width:402px}#dropMenu.show-right-col>.list-group{width:400px;max-width:400px}#dropMenu.show-right-col .col-left,#dropMenu.show-right-col .col-right{display:table-cell;width:50%}#dropMenu.show-right-col .col-left>.list-group{width:200px;max-width:200px;margin-right:0}#dropMenu.show-right-col .col-right{border-left:1px solid #eee}#dropMenu.show-right-col .col-right>.list-group{width:199px;max-height:285px;margin:0}#dropMenu.show-right-col .col-right>.list-group>a{opacity:.7}#dropMenu.show-right-col .col-right>.list-group>a:hover{opacity:1}#dropMenu.show-right-col .toggle-right-col>.icon-angle-right:before{content:"\e314"}.release-path{overflow:hidden}.release-line{display:table;width:100%;padding:0;table-layout:fixed}.release-line>li{display:table-cell;list-style:none}.release-line>li>a{position:relative;display:block}.release-line>li>a:before{position:absolute;left:0;display:block;width:13px;height:13px;content:' ';background:#fff;border:2px solid #838a9d;border-radius:50%}.release-line>li>a:after{position:absolute;left:5px;display:block;width:2px;height:30px;content:' ';background:#cbe0f6}.release-line>li>a>.icon{position:absolute;left:4px;font-size:24px}.release-line>li>a .title{display:block;font-size:14px;white-space:nowrap}.release-line>li>a .date,.release-line>li>a .info{display:block;max-height:18px;overflow:hidden;font-size:12px;color:#838a9d;text-overflow:ellipsis;white-space:nowrap}.release-line>li>a:hover:before{background-color:#e9f2fb}.release-line>li>a:hover:after{background-color:#838a9d}.release-line>li>a:hover .title{color:#0c64eb}.release-line>li>a:hover .date,.release-line>li>a:hover .info{color:#838a9d}.release-line>li:nth-child(odd){padding-top:80px;vertical-align:top}.release-line>li:nth-child(odd)>a{height:85px;padding-top:36px;border-top:5px solid #cbe0f6}.release-line>li:nth-child(odd)>a:before{top:-9px}.release-line>li:nth-child(odd)>a:after{top:6px}.release-line>li:nth-child(odd)>a>.icon{top:-26px}.release-line>li:nth-child(even){padding-bottom:80px;vertical-align:bottom}.release-line>li:nth-child(even)>a{height:85px;padding-bottom:36px;border-bottom:5px solid #cbe0f6}.release-line>li:nth-child(even)>a:before{bottom:-9px}.release-line>li:nth-child(even)>a:after{bottom:6px}.release-line>li:nth-child(even)>a>.icon{bottom:-2px}.release-line>li:last-child>a{border-color:transparent}.release-line>li.active>a:before{border-color:#0c64eb}.release-line>li+li>a>.date,.release-line>li+li>a>.info,.release-line>li+li>a>.title{position:relative;left:-36%}#footer{position:fixed;right:0;bottom:0;left:0;z-index:1010;height:40px;background:#fff;border-top:1px solid #eff1f7}#footer .breadcrumb{padding:10px 0;margin:0}#footer .breadcrumb>li{max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#footer .breadcrumb>.active,#footer .breadcrumb>li>a{color:#838a9e}#footer .breadcrumb>.active:hover,#footer .breadcrumb>li>a:hover{color:#16a8f8}#footer .breadcrumb>li+li:before{content:'>'}#footer>.container{padding:0 20px}@media (min-width:1400px){#footer>.container{padding:0 40px}}#poweredBy{position:absolute;top:4px;right:0;padding:5px 10px}#poweredBy .icon-zentao{color:#0097fd}#poweredBy a{color:#3c4353}#poweredBy a:hover{color:#0c64eb}#poweredBy a:hover .icon-zentao{color:#0c64eb}#poweredBy a.text-important{color:#bd7b46}#poweredBy a.text-important:hover{color:#ff5d5d}#poweredBy a.text-primary{color:#0c64eb}#poweredBy a.text-primary:hover{color:#16a8f8}#poweredBy #aiux{color:#cbd0dc}#noticeBox .alert{-webkit-box-shadow:rgba(0,0,0,.15) 0 3px 10px,rgba(0,0,0,.25) 0 3px 10px;box-shadow:rgba(0,0,0,.15) 0 3px 10px,rgba(0,0,0,.25) 0 3px 10px} \ No newline at end of file +*/.chosen-container{position:relative;display:inline-block;font-size:13px;vertical-align:middle;zoom:1;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;*display:inline}.chosen-container .chosen-drop{position:absolute;top:100%;z-index:1010;display:none;width:100%;background:#fff;border:1px solid #b6bdcc;border:1px solid rgba(0,0,0,.15);border-top:0;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.chosen-container .chosen-drop.chosen-drop-size-limited{border-top:1px solid rgba(0,0,0,.15)}.chosen-container.chosen-with-drop .chosen-drop{display:block}.chosen-container a{cursor:pointer}.chosen-container.chosen-up .chosen-drop{top:inherit;bottom:100%;margin-top:auto;margin-bottom:-1px;border-radius:2px 2px 0 0;-webkit-box-shadow:0 -3px 5px rgba(0,0,0,.175);box-shadow:0 -3px 5px rgba(0,0,0,.175)}.chosen-container-single .chosen-single{display:block;width:100%;height:32px;padding:5px 8px;overflow:hidden;line-height:1.42857143;color:#222;text-decoration:none;white-space:nowrap;vertical-align:middle;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #dcdcdc;border-radius:2px;-webkit-box-shadow:none;box-shadow:none;-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s,-webkit-box-shadow ease-in-out .15s}.chosen-container-single .chosen-default{color:#838a9d}.chosen-container-single .chosen-single>span{display:block;margin-right:26px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.chosen-container-single .chosen-single-with-deselect span{margin-right:38px}.chosen-container-single .chosen-single abbr{position:absolute;top:7px;right:24px;display:block;width:20px;height:20px;font-size:19.5px;font-weight:700;line-height:14px;color:#000;text-align:center;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.chosen-container-single .chosen-single abbr:before{content:'×'}.chosen-container-single .chosen-single abbr:focus,.chosen-container-single .chosen-single abbr:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}.chosen-container-single .chosen-single div{position:absolute;top:0;right:0;display:block;height:100%;padding:5px 8px}.chosen-container-single .chosen-single div b{display:inline-block;width:0;height:0;margin-bottom:2px;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.chosen-container-single .chosen-search{position:relative;z-index:1010;padding:3px 4px;margin:0;white-space:nowrap}.chosen-container-single .chosen-search input[type=text]{width:100%;height:27px;padding:2px 26px 2px 8px;margin:1px 0;font-size:12px;line-height:1.5;background-color:#fff;border:1px solid #dcdcdc;border-radius:2px;outline:0}.chosen-container-single .chosen-search input[type=text]:focus{border-color:#0c64eb}.chosen-container-single .chosen-search:before{position:absolute;top:10px;right:10px;display:block;font-family:ZentaoIcon;font-size:18px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;color:#838a9d;text-transform:none;content:"\e928";speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.chosen-container-single .chosen-drop{margin-top:-1px;-webkit-background-clip:padding-box;background-clip:padding-box;border-radius:0 0 4px 4px}.chosen-container-single.chosen-container-single-nosearch .chosen-search{position:absolute;left:-9999px}.chosen-container .chosen-results{position:relative;max-height:240px;padding:0;margin:0;overflow-x:hidden;overflow-y:auto;-webkit-overflow-scrolling:touch}.chosen-container .chosen-results li{display:none;padding:5px 10px;margin:0;line-height:15px;list-style:none;-webkit-transition:background-color .2s cubic-bezier(.175,.885,.32,1);-o-transition:background-color .2s cubic-bezier(.175,.885,.32,1);transition:background-color .2s cubic-bezier(.175,.885,.32,1);-webkit-touch-callout:none}.chosen-container .chosen-results li.active-result{display:list-item;cursor:pointer}.chosen-container .chosen-results li.disabled-result{display:list-item;color:#ccc;cursor:default}.chosen-container .chosen-results li.highlighted{color:#fff;background-color:#0c64eb}.chosen-container .chosen-results li.no-results{display:list-item;background:#f4f4f4}.chosen-container .chosen-results li.group-result{display:list-item;font-weight:700;cursor:default}.chosen-container .chosen-results li.group-option{padding-left:15px}.chosen-container .chosen-results li em{font-style:normal;text-decoration:underline}.chosen-container-multi .chosen-choices{position:relative;width:100%;min-height:32px;min-height:30px\9;padding:0;margin:0;overflow:hidden;cursor:text;background-color:#fff;border:1px solid #dcdcdc;border-radius:2px;-webkit-box-shadow:none;box-shadow:none;-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s,-webkit-box-shadow ease-in-out .15s}.chosen-container-multi .chosen-choices:after,.chosen-container-multi .chosen-choices:before{display:table;content:" "}.chosen-container-multi .chosen-choices:after{clear:both}.chosen-container-multi .chosen-choices li{display:block;float:left;padding:0 6px;margin:5px 0 0 6px;list-style:none}.chosen-container-multi .chosen-choices li.search-field{padding:0;margin-bottom:4px;white-space:nowrap}.chosen-container-multi .chosen-choices li.search-field input[type=text]{height:20px;font-size:100%;color:#838a9d;background:0 0!important;border:0!important;border-radius:0;outline:0;-webkit-box-shadow:none;box-shadow:none}.chosen-container-multi .chosen-choices li.search-field .default{color:#999}.chosen-container-multi .chosen-choices li.search-field:before{position:absolute;right:8px;bottom:8px;display:block;font-family:ZentaoIcon;font-size:18px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;color:#838a9d;text-transform:none;content:"\e928";opacity:0;-webkit-transition:opacity .2s cubic-bezier(.175,.885,.32,1);-o-transition:opacity .2s cubic-bezier(.175,.885,.32,1);transition:opacity .2s cubic-bezier(.175,.885,.32,1);speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.chosen-container-multi .chosen-choices li.search-choice{position:relative;padding:3px 20px 3px 5px;line-height:12px;cursor:default;background-color:#f1f1f1;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #cbd0db;border-radius:3px;-webkit-box-shadow:0 0 2px #fff inset,0 1px 0 rgba(0,0,0,.05);box-shadow:0 0 2px #fff inset,0 1px 0 rgba(0,0,0,.05);-webkit-transition:all .4s cubic-bezier(.175,.885,.32,1);-o-transition:all .4s cubic-bezier(.175,.885,.32,1);transition:all .4s cubic-bezier(.175,.885,.32,1)}.chosen-container-multi .chosen-choices li.search-choice:hover{background-color:#fff;border-color:#adb5c6;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 0 rgba(0,0,0,.1)}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close{position:absolute;top:0;right:0;display:block;width:20px;height:20px;font-size:15.6px;font-weight:700;line-height:14px;color:#000;text-align:center;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:before{content:'×'}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:focus,.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}.chosen-container-multi .chosen-choices li.search-choice-disabled{padding-right:5px;color:#666;background-color:#e4e4e4;border:1px solid #ccc}.chosen-container-multi .chosen-choices li.search-choice-focus{background:#d4d4d4}.chosen-container-multi .chosen-choices li.search-choice-focus .search-choice-close{background-position:-42px -10px}.chosen-container-multi .chosen-results{padding:5px 0;margin:0}.chosen-container-multi .chosen-drop .result-selected{display:list-item;color:#ccc;cursor:default}.chosen-container-active .chosen-single{border-color:#0c64eb;-webkit-box-shadow:none,0 0 8px rgba(12,100,235,.6);box-shadow:none,0 0 8px rgba(12,100,235,.6)}.chosen-container-active.chosen-with-drop .chosen-single{border:1px solid #b6bdcc;border:1px solid rgba(0,0,0,.15);border-bottom-right-radius:0;border-bottom-left-radius:0;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.chosen-container-active.chosen-with-drop .chosen-single div{background:0 0;border-left:none}.chosen-container-active.chosen-with-drop .chosen-single div b{content:"";border-top:0 dotted;border-bottom:4px solid}.chosen-container-active.chosen-with-drop.chosen-up .chosen-single{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:2px;border-bottom-left-radius:2px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.chosen-container-active .chosen-choices{border-color:#0c64eb;-webkit-box-shadow:none,0 0 8px rgba(12,100,235,.6);box-shadow:none,0 0 8px rgba(12,100,235,.6)}.chosen-container-active .chosen-choices li.search-field input[type=text]{color:#111!important}.chosen-container-active .chosen-choices li.search-field:before{opacity:1}.chosen-disabled{cursor:default;opacity:.5!important}.chosen-disabled .chosen-single{cursor:default}.chosen-disabled .chosen-choices .search-choice .search-choice-close{cursor:default}.chosen-container-single .chosen-single>.chosen-search{left:0;display:none;padding:3px 4px;opacity:0}.chosen-container-single .chosen-single>.chosen-search>input{height:25px;padding:2px 26px 2px 4px;font-size:inherit}.chosen-container-single .chosen-single>.chosen-search:before{top:9px}.chosen-with-search.chosen-with-drop .chosen-single>.chosen-search{display:block;opacity:1}.container,.container-fixed,.container-fluid{position:relative}.container{max-width:1800px!important}body{padding-bottom:40px;background-color:#efefef}body.article-content,body.body-modal{background:0 0}body.body-modal{padding:0}a:active,a:focus,button:active,button:focus{outline:0!important}em{font-style:normal}.strong{font-weight:700}.font-normal{font-weight:400!important}.text-middle{vertical-align:middle!important}.text-bottom{vertical-align:bottom!important}.text-top{vertical-align:top!important}.inline-block{display:inline-block!important}.layer{border-radius:4px;-webkit-box-shadow:0 0 20px 0 #bdc9d8;box-shadow:0 0 20px 0 #bdc9d8}.space{margin-bottom:20px}.space-lg{margin-bottom:30px}.space-sm{margin-bottom:10px}.muted{opacity:.5}.text-muted em{color:#3c4353}.no-animate{-webkit-transition:none!important;-o-transition:none!important;transition:none!important}.template{display:none!important}.text-left{text-align:left!important}.text-yellow.icon-folder{color:#ffe066}.table-row{display:table;width:100%;table-layout:fixed}.table-col,.table-row>.col,.table-row>[class*=col-],.table-row>[class*="-col"]{display:table-cell;float:none;vertical-align:top}.side-col{width:200px;padding-right:20px}.side-col.col-4{width:33.3333333%}.col-lg{width:260px}.col-xl{width:320px}.col-sm{width:150px}.col-xs{width:100px}.main-col+.side-col{padding-right:0;padding-left:20px}.row-grid>[class*=col-],.row-grid>[class*="-col"]{padding-top:6px;padding-bottom:6px}hr.space{margin:10px 0;border:none}hr.space-sm{margin:5px 0;border:none}.text-secondary{color:#16a8f8}a.text-primary{color:#0c64eb}.nav-primary>li>a{min-width:100px;padding:5px 8px;color:#838a9d;border-color:#e7f1fc}.nav-primary>li.active>a{color:#0c64eb;background-color:#e7f1fc;border-color:#e7f1fc}.nav-primary>li.active>a:hover{color:#0c64eb;background-color:#c3dcf7;border-color:#c3dcf7}.end-marker{margin-bottom:20px;color:#cbd0db;text-align:center}@-webkit-keyframes highlight{0%{background:#fff;outline:1px solid transparent}100%{background:#fff0d5;outline:2px solid #ffdcbc}}@-o-keyframes highlight{0%{background:#fff;outline:1px solid transparent}100%{background:#fff0d5;outline:2px solid #ffdcbc}}@keyframes highlight{0%{background:#fff;outline:1px solid transparent}100%{background:#fff0d5;outline:2px solid #ffdcbc}}.highlight{-webkit-animation:highlight .5s linear 0s 2 alternate;-o-animation:highlight .5s linear 0s 2 alternate;animation:highlight .5s linear 0s 2 alternate}.progress.inline-block{width:100px;margin:0}.w-p5{width:5%!important}.w-p10{width:10%!important}.w-p15{width:15%!important}.w-p20{width:20%!important}.w-p25{width:25%!important}.w-p30{width:30%!important}.w-p35{width:35%!important}.w-p40{width:40%!important}.w-p45{width:45%!important}.w-p50{width:50%!important}.w-p55{width:55%!important}.w-p60{width:60%!important}.w-p65{width:65%!important}.w-p70{width:70%!important}.w-p75{width:75%!important}.w-p80{width:80%!important}.w-p85{width:85%!important}.w-p90{width:90%!important}.w-p94{width:94%!important}.w-p95{width:95%!important}.w-p98{width:98%!important}.w-p99{width:99%!important}.w-p100{width:100%!important}.w-auto{width:auto!important}.w-10px{width:10px!important}.w-20px{width:20px!important}.w-30px{width:30px!important}.w-35px{width:35px!important}.w-40px{width:40px!important}.w-45px{width:45px!important}.w-50px{width:50px!important}.w-60px{width:60px!important}.w-70px{width:70px!important}.w-80px{width:80px!important}.w-90px{width:90px!important}.w-100px{width:100px!important}.w-110px{width:110px!important}.w-120px{width:120px!important}.w-130px{width:130px!important}.w-140px{width:140px!important}.w-150px{width:150px!important}.w-160px{width:160px!important}.w-180px{width:180px!important}.w-200px{width:200px!important}.w-230px{width:230px!important}.w-250px{width:250px!important}.w-300px{width:300px!important}.w-400px{width:400px!important}.w-500px{width:500px!important}.w-600px{width:600px!important}.w-700px{width:700px!important}.w-800px{width:800px!important}.w-900px{width:900px!important}.mw-200px{max-width:200px!important}.mw-300px{max-width:300px!important}.mw-400px{max-width:400px!important}.mw-500px{max-width:500px!important}.mw-600px{max-width:600px!important}.mw-700px{max-width:700px!important}.mw-800px{max-width:800px!important}.mw-900px{max-width:900px!important}.mw-1400px{max-width:1400px!important}.w-id{width:70px!important}.w-pri{width:40px!important}.w-severity{width:50px!important}.w-hour{width:57px!important}.w-date{width:90px!important}.w-status{width:60px!important}.w-resolution,.w-type,.w-user{width:80px!important}.w-p15-f{width:15%!important;min-width:120px!important}.w-p25-f{width:25%!important;min-width:200px!important}.w-p35-f{width:35%!important;min-width:300px!important}.w-p45-f{width:45%!important;min-width:400px!important}.h-5px{height:5px!important}.h-10px{height:10px!important}.h-20px{height:20px!important}.h-30px{height:30px!important}.h-35px{height:35px!important}.h-40px{height:40px!important}.h-45px{height:45px!important}.h-50px{height:50px!important}.h-60px{height:60px!important}.h-70px{height:70px!important}.h-80px{height:80px!important}.h-100px{height:100px!important}.h-120px{height:120px!important}.h-130px{height:130px!important}.h-140px{height:140px!important}.h-150px{height:150px!important}.h-200px{height:200px!important}.pd-0{padding:0!important}.mg-0{margin:0!important}.mgb-20{margin-bottom:20px!important}.mgb-10{margin-bottom:10px!important}.pdb-20{padding-bottom:20px!important}.pdt-20{padding-top:20px!important}.br-0{border-radius:0!important}.bd-0,.bd-none,.borderless{border:none!important}.bg-none{background:0 0!important}.red{color:#ff5d5d!important}.icon-pro-version{font-size:14px!important}.icon-pro-version:before{position:relative;top:-1px;font-size:14px;color:#ff5d5d;content:"\e92b"}.bg-primary{color:#fff;background:#1183fb -webkit-gradient(linear,right top,left top,from(#0a48d1),to(#1183fb));background:#1183fb -webkit-linear-gradient(right,#0a48d1 0,#1183fb 100%);background:#1183fb -o-linear-gradient(right,#0a48d1 0,#1183fb 100%);background:#1183fb linear-gradient(-90deg,#0a48d1 0,#1183fb 100%);background-color:#00b1fd}.bg-secondary{color:#fff;background:#16a8f8}.hl-tutorial{position:relative!important;z-index:1010!important;-webkit-box-shadow:0 0 0 0 #000!important;box-shadow:0 0 0 0 #000!important;-webkit-transition:-webkit-box-shadow 1s!important;-o-transition:box-shadow 1s!important;transition:-webkit-box-shadow 1s!important;transition:box-shadow 1s!important;transition:box-shadow 1s,-webkit-box-shadow 1s!important}.hl-tutorial.hl-in{-webkit-box-shadow:0 0 20px 0 #ffff8d,0 0 0 2px #ffd180,0 0 0 2000px rgba(0,0,0,.2)!important;box-shadow:0 0 20px 0 #ffff8d,0 0 0 2px #ffd180,0 0 0 2000px rgba(0,0,0,.2)!important}.btn.tooltip-tutorial,.hl-tutorial.hl-in:hover{-webkit-box-shadow:0 0 30px 0 #ffff8d,0 0 0 5px #ffd180,0 0 0 2000px rgba(0,0,0,.3)!important;box-shadow:0 0 30px 0 #ffff8d,0 0 0 5px #ffd180,0 0 0 2000px rgba(0,0,0,.3)!important}.tooltip-max .tooltip-inner{max-width:1000px;padding:8px 10px}.transition-all *{-webkit-transition:all .2s!important;-o-transition:all .2s!important;transition:all .2s!important}.scroll-x{overflow-x:auto!important}.scroll-y{overflow-y:auto!important}.divider+.divider{display:none}@font-face{font-family:ZentaoIcon;font-style:normal;font-weight:400;src:url(../fonts/ZentaoIcon.eot?v=1.1.0);src:url(../fonts/ZentaoIcon.eot?#iefix&v=1.1.0) format('embedded-opentype'),url(../fonts/ZentaoIcon.woff?v=1.1.0) format('woff'),url(../fonts/ZentaoIcon.ttf?v=1.1.0) format('truetype'),url(../fonts/ZentaoIcon.svg#regular?v=1.1.0) format('svg')}.icon,[class*=" icon-"],[class^=icon-]{font-family:ZentaoIcon;font-size:18px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;text-transform:none;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon:before{display:inline-block;min-width:18px;text-align:center}a .icon,a [class*=" icon-"],a [class^=icon-]{display:inline}.icon-lg:before{font-size:1.33333333em;vertical-align:-10%}.icon-2x{font-size:36px}.icon-3x{font-size:54px}.icon-4x{font-size:72px}.icon-5x{font-size:90px}.icon-spin{display:inline-block;-webkit-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;animation:spin 2s infinite linear}a .icon-spin{display:inline-block;text-decoration:none}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0);transform:rotate(0)}100%{-o-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes spin{0%{-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);-o-transform:rotate(359deg);transform:rotate(359deg)}}.icon-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.icon-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.icon-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.icon-flip-horizontal{-webkit-transform:scale(-1,1);-ms-transform:scale(-1,1);-o-transform:scale(-1,1);transform:scale(-1,1)}.icon-flip-vertical{-webkit-transform:scale(1,-1);-ms-transform:scale(1,-1);-o-transform:scale(1,-1);transform:scale(1,-1)}.icon.icon-flip-horizontal,.icon.icon-flip-vertical,.icon.icon-rotate-180,.icon.icon-rotate-270,.icon.icon-rotate-90{display:inline-block}.icon-book:before{content:"\f02d"}.icon-treemap-alt:before{content:"\e971"}.icon-collapse-alt:before{content:"\e6f2"}.icon-expand-alt:before{content:"\e6f1"}.icon-more:before{content:"\e744"}.icon-angle-double-right:before{content:"\f101"}.icon-certificate:before{content:"\f0a3"}.icon-bell:before{content:"\e7f5"}.icon-format-bold:before{content:"\e953"}.icon-format-header-pound:before{content:"\e954"}.icon-format-italic:before{content:"\e955"}.icon-format-list-bulleted:before{content:"\e956"}.icon-format-list-numbers:before{content:"\e969"}.icon-format-quote-close:before{content:"\e96a"}.icon-fullscreen:before{content:"\e96b"}.icon-fullscreen-exit:before{content:"\e972"}.icon-image:before{content:"\e96c"}.icon-table-large:before{content:"\e96d"}.icon-columns:before{content:"\f0db"}.icon-cancel:before{content:"\e951"}.icon-ban-circle:before{content:"\e951"}.icon-persons:before{content:"\e94d"}.icon-eye:before{content:"\e94e"}.icon-unlock:before{content:"\e94f"}.icon-eye-off:before{content:"\e96e"}.icon-lock:before{content:"\e950"}.icon-move:before{content:"\e94c"}.icon-help:before{content:"\e968"}.icon-folder-account:before{content:"\e942"}.icon-folder-move:before{content:"\e960"}.icon-folder-plus:before{content:"\e961"}.icon-folder-upload:before{content:"\e962"}.icon-folder-star:before{content:"\e963"}.icon-folder-edit:before{content:"\e964"}.icon-folder-download:before{content:"\e965"}.icon-folder-outline:before{content:"\e966"}.icon-restart:before{content:"\e95e"}.icon-history:before{content:"\e95f"}.icon-home:before{content:"\e958"}.icon-pencil:before{content:"\e254"}.icon-angle-down:before{content:"\e313"}.icon-angle-left:before{content:"\e314"}.icon-angle-right:before{content:"\e315"}.icon-angle-top:before{content:"\e316"}.icon-first-page:before{content:"\e5dc"}.icon-last-page:before{content:"\e5dd"}.icon-caret-down:before{content:"\f0d7"}.icon-caret-up:before{content:"\f0d8"}.icon-caret-left:before{content:"\f0d9"}.icon-caret-right:before{content:"\f0da"}.icon-sort:before{content:"\f0dc"}.icon-sort-down:before{content:"\f0dd"}.icon-sort-up:before{content:"\f0de"}.icon-zentao-alt:before{content:"\e900"}.icon-zentao:before{content:"\e901"}.icon-severity:before{content:"\e973"}.icon-severity-solid:before{content:"\e902"}.icon-bar-chart:before{content:"\e903"}.icon-import:before{content:"\e904"}.icon-export:before{content:"\e905"}.icon-printer:before{content:"\e906"}.icon-hand-right:before{content:"\e907"}.icon-hand-right-alt:before{content:"\e96f"}.icon-checked:before{content:"\e908"}.icon-off:before{content:"\e909"}.icon-start:before{content:"\e90a"}.icon-play:before{content:"\e90a"}.icon-time:before{content:"\e90b"}.icon-edit:before{content:"\e90c"}.icon-trash:before{content:"\e90d"}.icon-link:before{content:"\e90e"}.icon-unlink:before{content:"\e90f"}.icon-bullhorn:before{content:"\e910"}.icon-bug:before{content:"\e911"}.icon-list-alt:before{content:"\e912"}.icon-fork:before{content:"\e913"}.icon-change:before{content:"\e970"}.icon-glasses:before{content:"\e914"}.icon-sitemap:before{content:"\e915"}.icon-plus-sign:before{content:"\e916"}.icon-pluses:before{content:"\e917"}.icon-flag-alt:before{content:"\e918"}.icon-magic:before{content:"\e919"}.icon-treemap:before{content:"\e91a"}.icon-confirm:before{content:"\e91b"}.icon-lightbulb:before{content:"\e91c"}.icon-delay:before{content:"\e91d"}.icon-calendar:before{content:"\e91d"}.icon-pause:before{content:"\e91e"}.icon-ban:before{content:"\e91f"}.icon-plus-bold:before{content:"\e920"}.icon-copy:before{content:"\e921"}.icon-refresh:before{content:"\e922"}.icon-arrow-up:before{content:"\e923"}.icon-arrow-down:before{content:"\e924"}.icon-arrow-left:before{content:"\e952"}.icon-arrow-right:before{content:"\e93e"}.icon-plus:before{content:"\e925"}.icon-minus:before{content:"\e926"}.icon-exchange:before{content:"\e927"}.icon-search:before{content:"\e928"}.icon-envelope-o:before{content:"\e92a"}.icon-check:before{content:"\e5ca"}.icon-circle:before{content:"\e836"}.icon-up-circle:before{content:"\e92b"}.icon-right-circle:before{content:"\e92c"}.icon-down-circle:before{content:"\e92d"}.icon-left-circle:before{content:"\e92e"}.icon-check-circle:before{content:"\e92f"}.icon-exclamation-sign:before{content:"\e930"}.icon-unfold-all:before{content:"\e931"}.icon-fold-all:before{content:"\e932"}.icon-plus-sm:before{content:"\e933"}.icon-chevron-left:before{content:"\e934"}.icon-chevron-right:before{content:"\e935"}.icon-close:before{content:"\e936"}.icon-flag:before{content:"\e937"}.icon-check-sign:before{content:"\e938"}.icon-minus-sign:before{content:"\e939"}.icon-bars-sign:before{content:"\e93a"}.icon-cog:before{content:"\e93b"}.icon-color:before{content:"\e93c"}.icon-paper-clip:before{content:"\e93d"}.icon-back:before{content:"\e93f"}.icon-chat-line:before{content:"\e940"}.icon-person:before{content:"\e941"}.icon-stack:before{content:"\e943"}.icon-cube:before{content:"\e967"}.icon-folder:before{content:"\e944"}.icon-folder-o:before{content:"\e945"}.icon-folder-open-o:before{content:"\e946"}.icon-folder-open:before{content:"\e947"}.icon-bars:before{content:"\e948"}.icon-cards-view:before{content:"\e949"}.icon-star-empty:before{content:"\e94a"}.icon-star:before{content:"\e94b"}.icon-ellipsis-v:before{content:"\e5d4"}.icon-spinner-indicator:before{content:"\e982"}.icon-text:before{content:"\e929"}.icon-code:before{content:"\e957"}.icon-chevron-double-up:before{content:"\e959"}.icon-chevron-double-down:before{content:"\e95a"}.icon-chart-pie:before{content:"\e95b"}.icon-chart-line:before{content:"\e95c"}.icon-chart-bar:before{content:"\e95d"}.icon-globe:before{content:"\f0ac"}.icon-file:before{content:"\f016"}.icon-file-empty:before{content:"\f016"}.icon-file-text:before{content:"\f0f6"}.icon-file-alt:before{content:"\f15b"}.icon-file-text-alt:before{content:"\f15c"}.icon-file-pdf:before{content:"\f1c1"}.icon-file-word:before{content:"\f1c2"}.icon-file-excel:before{content:"\f1c3"}.icon-file-powerpoint:before{content:"\f1c4"}.icon-file-image:before{content:"\f1c5"}.icon-file-archive:before{content:"\f1c6"}.icon-file-audio:before{content:"\f1c7"}.icon-file-video:before{content:"\f1c8"}.icon-file-code:before{content:"\f1c9"}.icon-sm:before{font-size:14px;vertical-align:10%}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:13px;font-weight:400;line-height:18px;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;border-radius:4px;-webkit-transition:.4s cubic-bezier(.175,.885,.32,1);-o-transition:.4s cubic-bezier(.175,.885,.32,1);transition:.4s cubic-bezier(.175,.885,.32,1);-webkit-transition-property:background,border,outline,opacity,-webkit-box-shadow;-o-transition-property:background,border,box-shadow,outline,opacity;transition-property:background,border,outline,opacity,-webkit-box-shadow;transition-property:background,border,box-shadow,outline,opacity;transition-property:background,border,box-shadow,outline,opacity,-webkit-box-shadow}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:focus,.btn:hover{color:#3c4353;text-decoration:none}.btn:active{text-decoration:none;background-image:none;outline:0;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.1)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;filter:grayscale(1);-webkit-box-shadow:none;box-shadow:none;opacity:.5;-webkit-filter:grayscale(1)}.btn{color:#3c4353;background-color:#fff;border-color:#d6dae3}.btn.active,.btn.hover,.btn:active,.btn:focus,.btn:hover,.open .dropdown-toggle.btn{color:#3c4353;background-color:rgba(255,255,255,.8);border-color:#b8bfce}.btn.active,.btn:active,.open .dropdown-toggle.btn{background-color:#f2f2f2;background-image:none;border-color:#b8bfce}.btn.disabled,.btn.disabled.active,.btn.disabled:active,.btn.disabled:focus,.btn.disabled:hover,.btn[disabled],.btn[disabled].active,.btn[disabled]:active,.btn[disabled]:focus,.btn[disabled]:hover,fieldset[disabled] .btn,fieldset[disabled] .btn.active,fieldset[disabled] .btn:active,fieldset[disabled] .btn:focus,fieldset[disabled] .btn:hover{color:rgba(60,67,83,.3);background-color:#fff;border-color:#d6dae3}.btn-gray{color:#82899f;background-color:#f1f1f1;border-color:#f1f1f1}.btn-gray.active,.btn-gray.hover,.btn-gray:active,.btn-gray:focus,.btn-gray:hover,.open .dropdown-toggle.btn-gray{color:#82899f;background-color:rgba(241,241,241,.8);border-color:#d8d8d8}.btn-gray.active,.btn-gray:active,.open .dropdown-toggle.btn-gray{background-color:#e4e4e4;background-image:none;border-color:#d8d8d8}.btn-gray.disabled,.btn-gray.disabled.active,.btn-gray.disabled:active,.btn-gray.disabled:focus,.btn-gray.disabled:hover,.btn-gray[disabled],.btn-gray[disabled].active,.btn-gray[disabled]:active,.btn-gray[disabled]:focus,.btn-gray[disabled]:hover,fieldset[disabled] .btn-gray,fieldset[disabled] .btn-gray.active,fieldset[disabled] .btn-gray:active,fieldset[disabled] .btn-gray:focus,fieldset[disabled] .btn-gray:hover{color:rgba(130,137,159,.3);background-color:#f1f1f1;border-color:#f1f1f1}.btn-primary{color:#fff;background-color:#0c64eb;border-color:transparent}.btn-primary.active,.btn-primary.hover,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.open .dropdown-toggle.btn-primary{color:#fff;background-color:rgba(12,100,235,.8);border-color:rgba(0,0,0,0)}.btn-primary.active,.btn-primary:active,.open .dropdown-toggle.btn-primary{background-color:#0b5ad3;background-image:none;border-color:rgba(0,0,0,0)}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{color:rgba(255,255,255,.3);background-color:#0c64eb;border-color:transparent}.btn-secondary{color:#fff;background-color:#16a8f8;border-color:transparent}.btn-secondary.active,.btn-secondary.hover,.btn-secondary:active,.btn-secondary:focus,.btn-secondary:hover,.open .dropdown-toggle.btn-secondary{color:#fff;background-color:rgba(22,168,248,.8);border-color:rgba(0,0,0,0)}.btn-secondary.active,.btn-secondary:active,.open .dropdown-toggle.btn-secondary{background-color:#079ced;background-image:none;border-color:rgba(0,0,0,0)}.btn-secondary.disabled,.btn-secondary.disabled.active,.btn-secondary.disabled:active,.btn-secondary.disabled:focus,.btn-secondary.disabled:hover,.btn-secondary[disabled],.btn-secondary[disabled].active,.btn-secondary[disabled]:active,.btn-secondary[disabled]:focus,.btn-secondary[disabled]:hover,fieldset[disabled] .btn-secondary,fieldset[disabled] .btn-secondary.active,fieldset[disabled] .btn-secondary:active,fieldset[disabled] .btn-secondary:focus,fieldset[disabled] .btn-secondary:hover{color:rgba(255,255,255,.3);background-color:#16a8f8;border-color:transparent}.btn-warning{color:#fff;background-color:#ff9800;border-color:transparent}.btn-warning.active,.btn-warning.hover,.btn-warning:active,.btn-warning:focus,.btn-warning:hover,.open .dropdown-toggle.btn-warning{color:#fff;background-color:rgba(255,152,0,.8);border-color:rgba(0,0,0,0)}.btn-warning.active,.btn-warning:active,.open .dropdown-toggle.btn-warning{background-color:#e68900;background-image:none;border-color:rgba(0,0,0,0)}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{color:rgba(255,255,255,.3);background-color:#ff9800;border-color:transparent}.btn-danger{color:#fff;background-color:#ff5d5d;border-color:transparent}.btn-danger.active,.btn-danger.hover,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,.open .dropdown-toggle.btn-danger{color:#fff;background-color:rgba(255,93,93,.8);border-color:rgba(0,0,0,0)}.btn-danger.active,.btn-danger:active,.open .dropdown-toggle.btn-danger{background-color:#ff4343;background-image:none;border-color:rgba(0,0,0,0)}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{color:rgba(255,255,255,.3);background-color:#ff5d5d;border-color:transparent}.btn-success{color:#fff;background-color:#00da88;border-color:transparent}.btn-success.active,.btn-success.hover,.btn-success:active,.btn-success:focus,.btn-success:hover,.open .dropdown-toggle.btn-success{color:#fff;background-color:rgba(0,218,136,.8);border-color:rgba(0,0,0,0)}.btn-success.active,.btn-success:active,.open .dropdown-toggle.btn-success{background-color:#00c178;background-image:none;border-color:rgba(0,0,0,0)}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{color:rgba(255,255,255,.3);background-color:#00da88;border-color:transparent}.btn-info{color:#0c64eb;background-color:#e9f2fb;border-color:transparent}.btn-info.active,.btn-info.hover,.btn-info:active,.btn-info:focus,.btn-info:hover,.open .dropdown-toggle.btn-info{color:#0c64eb;background-color:rgba(233,242,251,.8);border-color:rgba(0,0,0,0)}.btn-info.active,.btn-info:active,.open .dropdown-toggle.btn-info{background-color:#d3e5f7;background-image:none;border-color:rgba(0,0,0,0)}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{color:rgba(12,100,235,.3);background-color:#e9f2fb;border-color:transparent}.btn-link{padding-right:6px;padding-left:6px;font-weight:400;color:#3c4353;text-shadow:none;cursor:pointer;background:0 0;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover,.btn-link[disabled],fieldset[disabled] .btn-link{border-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link:focus,.btn-link:hover{color:#222;background:#f1f1f1;background:rgba(0,0,0,.075)}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#cbd0db;text-decoration:none}.btn-lg{padding:11px 16px;font-size:14px;line-height:18px;border-radius:4px}.btn-mini,.btn-sm{padding:3px 8px;font-size:12px;line-height:18px;border-radius:4px}.btn-mini,.btn-xs{padding:0 5px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.btn-wide{min-width:120px}.btn-limit{max-width:180px;padding-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.btn-limit>.caret{position:absolute;top:14px;right:8px}.btn-circle{border-radius:17px}.btn>.label-icon{top:3px;padding:3px;margin:-2px;background-color:rgba(0,0,0,.2);border-radius:12px}.btn>.label-icon>.icon{font-size:16px;line-height:18px}.btn>.icon+.text{margin-left:5px}.btn.btn-sm.btn-circle{border-radius:12px}.btn.btn-sm>.label-icon{top:2px;width:20px;height:20px;padding:1px;line-height:20px}.btn.btn-sm>.label-icon>.icon{position:relative;top:-1px;display:inline-block;font-size:14px;line-height:18px}.btn-icon-left{position:relative;padding-left:35px;overflow:hidden;text-align:right}.btn-icon-left>.label-icon{position:absolute;left:5px;margin:0}.btn-icon-left>.icon{position:absolute;top:0;bottom:0;left:0;display:block;width:30px;line-height:30px;color:#16a8f8;text-align:center;background:#e9f2fb}.btn-icon-left.btn-sm{padding-left:28px}.btn-icon-left.btn-sm>.label-icon{left:2px}.btn-icon-left.btn-sm>.icon{width:24px;line-height:24px}.btn-icon-right{position:relative;padding-right:35px;text-align:left}.btn-icon-right>.label-icon{position:absolute;right:5px;margin:0}.btn-icon-right.btn-sm{padding-right:28px}.btn-icon-right.btn-sm>.label-icon{right:2px}.btn-icon{min-width:32px;padding-right:0;padding-left:0}.btn-icon.btn-sm{width:24px;min-width:24px;height:24px}.btn-group{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group>.btn-group{float:left}.btn-group>.btn{border-radius:0}.btn-group>.btn:first-child{border-top-left-radius:2px;border-bottom-left-radius:2px}.btn-group>.btn:last-child{border-top-right-radius:2px;border-bottom-right-radius:2px}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.dropdown{float:left;margin-right:10px}.btn-toolbar>.btn-group:last-child,.btn-toolbar>.btn:last-child,.btn-toolbar>.dropdown:last-child{margin-right:0}.btn-toolbar>.divider{float:left;height:20px;margin:7px 5px 4px 10px;border-left:1px solid rgba(0,0,0,.1)}.btn-toolbar .space{float:left;min-height:1px;margin:0 10px 0 10px}.btn-toolbar .input-control{float:left;width:120px}.btn-toolbar .page-title{float:left;line-height:34px}.btn-toolbar .page-title .text{font-size:14px;font-weight:700}.btn-toolbar .page-title .label{top:-2px;margin-right:10px}.btn-toolbar .divider+.page-title{margin-left:15px}.btn-active-line{position:relative;font-weight:700;color:#0c64eb}.btn-active-line:after{position:absolute;right:5px;bottom:1px;left:5px;display:block;content:' ';border-bottom:2px solid #0c64eb}.btn-active-line:hover{color:#0c64eb}.btn-active-text .text{position:relative;top:-1px;display:inline-block;font-weight:700;color:#0c64eb}.btn-active-text .text:after{position:absolute;bottom:-5px;display:block;width:100%;content:' ';border-bottom:2px solid #0c64eb}.angle-btn{position:relative;padding:1px;background:#fff;border:1px solid #cbd0db;border-right:none}.btn-toolbar>.angle-btn{margin-right:8px}.angle-btn:after,.angle-btn:before{position:absolute;top:-1px;right:-8px;display:block;width:0;height:0;content:' ';border-color:transparent transparent transparent #cbd0db;border-style:solid;border-width:17px 0 17px 8px}.angle-btn:after{right:-7px;border-color:transparent transparent transparent #fff;border-width:17px 0 17px 8px}.angle-btn .btn{padding:6px;font-weight:700;background:#fff;border:none;border-radius:4px!important}.angle-btn .btn.btn-limit{padding-right:16px}.angle-btn .btn.btn-limit>.caret{right:4px}.angle-btn+.angle-btn{border-left:none}.angle-btn+.angle-btn>.btn-group:first-child{padding-left:8px}.angle-btn+.angle-btn>.btn-group:first-child:after,.angle-btn+.angle-btn>.btn-group:first-child:before{position:absolute;top:-2px;left:0;display:block;width:0;height:0;content:' ';border-color:transparent transparent transparent #cbd0db;border-style:solid;border-width:17px 0 17px 8px}.angle-btn+.angle-btn>.btn-group:first-child:after{left:-1px;border-color:transparent transparent transparent #fff;border-width:17px 0 17px 8px}.btn-toolbar>.angle-btn.active,.btn-toolbar>.angle-btn:last-child{border-color:#0c64eb}.btn-toolbar>.angle-btn.active .btn,.btn-toolbar>.angle-btn:last-child .btn{color:#0c64eb}.btn-toolbar>.angle-btn.active:after,.btn-toolbar>.angle-btn.active:before,.btn-toolbar>.angle-btn:last-child:after,.btn-toolbar>.angle-btn:last-child:before{border-color:transparent transparent transparent #0c64eb}.btn-toolbar>.angle-btn.active:after,.btn-toolbar>.angle-btn:last-child:after{border-color:transparent transparent transparent #fff}.btn-toolbar>.angle-btn+.angle-btn:last-child>.btn-group:first-child:after,.btn-toolbar>.angle-btn+.angle-btn:last-child>.btn-group:first-child:before,.btn-toolbar>.angle-btn.active+.angle-btn>.btn-group:first-child:after,.btn-toolbar>.angle-btn.active+.angle-btn>.btn-group:first-child:before{border-color:transparent transparent transparent #0c64eb}.btn-toolbar>.angle-btn+.angle-btn:last-child>.btn-group:first-child:after,.btn-toolbar>.angle-btn.active+.angle-btn>.btn-group:first-child:after{border-color:transparent transparent transparent #fff}.btn-toolbar>.angle-btn.active+.angle-btn,.btn-toolbar>.angle-btn.normal{border-color:#cbd0db}.btn-toolbar>.angle-btn.active+.angle-btn .btn,.btn-toolbar>.angle-btn.normal .btn{color:#3c4353}.btn-toolbar>.angle-btn.active+.angle-btn:after,.btn-toolbar>.angle-btn.active+.angle-btn:before,.btn-toolbar>.angle-btn.normal:after,.btn-toolbar>.angle-btn.normal:before{border-color:transparent transparent transparent #cbd0db}.btn-toolbar>.angle-btn.active+.angle-btn:after,.btn-toolbar>.angle-btn.normal:after{border-color:transparent transparent transparent #fff}.btn-toolbar>.angle-btn.active+.angle-btn>.btn-group:first-child:before,.btn-toolbar>.angle-btn.normal>.btn-group:first-child:before{border-color:transparent transparent transparent #cbd0db!important}.nav>li>.btn.btn-primary{color:#fff}.nav>li>.btn.btn-primary:focus,.nav>li>.btn.btn-primary:hover{background:rgba(12,100,235,.8)}.label{position:relative;display:inline-block;padding:3px 5px;font-size:12px;font-weight:400;vertical-align:middle;border-radius:2px}.label+.label{margin-left:4px}.label-pale{background:#bed8f3!important}.label-badge{border-radius:9px}.label-light{color:#3c4353;background-color:#ddd}.label-primary{background:#0c64eb!important}.label-gray{color:#878da0;background:#e8ebef}.label-outline.label-danger{color:#ff5d5d;background:#ffebee;border-color:rgba(255,93,93,.25)}.label-outline.label-light{color:#838a9d;background:#f2f5fb;border-color:#e1e5ee}.label-primary.label-outline{background:#e9f2fb!important;border-color:rgba(12,100,235,.25)}.label-outline.label-success{background:#e8f5e9;border-color:rgba(0,218,136,.25)}.label-dot{position:relative;top:-1px;padding:0;border-radius:50%}.label-dot+.status-text{display:inline-block;margin-left:5px}.label-icon{min-width:18px;padding:0;line-height:18px;border-radius:10px}.label-id{display:inline-block;min-width:30px;padding:0 5px;font-size:12px;line-height:16px;color:#838a9d;text-align:center;vertical-align:middle;background-color:transparent;border:1px solid #838a9d;border-radius:2px}.pri-1,.todo-pri-1{color:#ff5d5d}[class*=" status-"],[class^=status-]{color:#3c4353}.status-changed,.status-delayed,.status-doing,.status-fail,.status-investigate{color:#ff5d5d}.status-changed>.label-dot,.status-delayed>.label-dot,.status-doing>.label-dot,.status-fail>.label-dot,.status-investigate>.label-dot{background-color:#ff5d5d}.status-wait{color:#838a9d}.status-wait>.label-dot{background-color:#7ec5ff}.status-unclosed{color:#838a9d}.status-unclosed>.label-dot{background-color:#0c64eb}.status-done,.status-normal,.status-pass,.status-resolved{color:#43a047}.status-done>.label-dot,.status-normal>.label-dot,.status-pass>.label-dot,.status-resolved>.label-dot{background-color:#00da88}.status-postpone{color:#838a9d}.status-postpone>.label-dot{background-color:#ff5d5d}.status-blocked{position:relative;left:-5px;display:inline-block;padding:0 5px;line-height:20px;color:#3c4353;background:#fff3e0;border-radius:10px}.status-blocked>.label-dot{background-color:#ff9800}.status-pause,.status-suspended{color:#ff9800}.status-pause>.label-dot,.status-suspended>.label-dot{background-color:#ff9800}.status-active.status-bug,.status-draft{color:#8666b8}.status-active.status-bug>.label-dot,.status-draft>.label-dot{background-color:#8666b8}.status-closed,.status-terminate{color:#838a9d}.status-closed>.label-dot,.status-terminate>.label-dot{background-color:#838a9d}.status-cancel{color:#838a9d}.status-cancel>.label-dot{background-color:#cbd0db}.label-pri{display:inline-block;min-width:20px;max-width:67px;height:20px;padding:0 4px;overflow:hidden;line-height:17px;color:#838a9d;text-align:center;text-overflow:ellipsis;white-space:nowrap;vertical-align:middle;border:2px solid #838a9d;border-radius:10px}.label-selector>.label-pri,[class*=label-pri-]{color:#158af1;border-color:#2098ee}.label-pri-1,.label-selector>.label-pri[data-value="1"]{color:#d50000;border-color:#d50000}.label-pri-2,.label-selector>.label-pri[data-value="2"]{color:#ff9800;border-color:#ff9800}.label-pri-3,.label-selector>.label-pri[data-value="3"]{color:#2098ee;border-color:#2098ee}.label-pri-4,.label-selector>.label-pri[data-value="4"]{color:#009688;border-color:#009688}.label-pri-5,.label-selector>.label-pri[data-value="5"]{color:#838a9d;border-color:#838a9d}.label-pri-0,.label-selector>.label-pri.active[data-value="0"]{color:#d5d9df;border-color:#d5d9df}.label-severity{position:relative;display:inline-block;width:24px;height:20px;text-align:center;vertical-align:middle}.label-severity:before{position:absolute;top:-3px;left:0;z-index:0;display:block;font-family:ZentaoIcon;font-size:18px;font-size:24px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;color:inherit;text-transform:none;content:"\e973";speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.label-severity:after{position:absolute;top:7px;left:0;z-index:1;display:block;width:24px;font-size:12px;line-height:12px;text-align:center;content:attr(data-severity)}.label-severity[data-severity],.label-severity[data-value]{color:#ccc}.label-severity[data-severity="0"],.label-severity[data-value="0"]{color:#ccc}.label-severity[data-severity="0"]:after,.label-severity[data-value="0"]:after{display:none}.label-severity[data-severity="1"],.label-severity[data-value="1"]{color:#c62828}.label-severity[data-severity="2"],.label-severity[data-value="2"]{color:#e65100}.label-severity[data-severity="3"],.label-severity[data-value="3"]{color:#ffa000}.label-severity[data-severity="4"],.label-severity[data-value="4"]{color:#fdd835}.label-severity[data-severity="5"],.label-severity[data-value="5"]{color:#8bc34a}.label-severity-custom[data-severity]{color:#d5d9df}.label-severity-custom[data-severity="1"]{color:#c62828}.label-severity-custom[data-severity="2"]{color:#e65100}.label-severity-custom[data-severity="3"]{color:#ffa000}.label-severity-custom[data-severity="4"]{color:#fdd835}.label-severity-custom[data-severity="5"]{color:#cddc39}.label-selector>.label{display:inline-block;min-width:24px;height:24px;padding:0 5px;font-size:14px;line-height:20px;text-align:center;cursor:pointer;background:0 0;border:2px solid #d5d9df;border-radius:15px}.label-selector>.label+.label{margin-left:10px}.label-selector>.label.empty{border-color:transparent}.label-selector>.label.label-severity{font-size:12px;line-height:28px;border-color:transparent}.label-selector>.label.label-severity:before{top:-2px;left:-2px}.label-selector>.label.label-severity:after{display:none}.label-selector>.label.label-severity.active{background:0 0;filter:none;-webkit-filter:none}.checkbox-primary,.radio-primary{position:relative;display:block;vertical-align:middle}.checkbox-primary.inline-block,.radio-primary.inline-block{display:inline-block}.checkbox-primary.inline-block+.inline-block,.radio-primary.inline-block+.inline-block{margin-left:15px}.checkbox-primary>input,.radio-primary>input{position:absolute;top:0;left:0;z-index:3;width:100%;height:100%;margin:0;opacity:0}.checkbox-primary>label,.radio-primary>label{display:block;height:20px;padding-left:30px;margin:0;font-weight:400;line-height:20px;cursor:pointer}.checkbox-primary>label:after,.checkbox-primary>label:before,.radio-primary>label:after,.radio-primary>label:before{position:absolute;top:1px;right:0;left:0;display:block;width:18px;height:18px;line-height:18px;text-align:center;content:' ';border-radius:3px}.checkbox-primary>label:after,.radio-primary>label:after{z-index:1;border:2px solid #eee;border-color:rgba(0,0,0,.15);-webkit-transition:.4s cubic-bezier(.175,.885,.32,1);-o-transition:.4s cubic-bezier(.175,.885,.32,1);transition:.4s cubic-bezier(.175,.885,.32,1);-webkit-transition-property:border,background-color;-o-transition-property:border,background-color;transition-property:border,background-color}.checkbox-primary>label:before,.radio-primary>label:before{top:3px;z-index:2;font-family:ZentaoIcon;font-size:18px;font-size:14px;font-style:normal;font-weight:400;font-weight:900;font-variant:normal;line-height:1;text-transform:none;content:"\e5ca";opacity:0;-webkit-transition:.2s cubic-bezier(.175,.885,.32,1);-o-transition:.2s cubic-bezier(.175,.885,.32,1);transition:.2s cubic-bezier(.175,.885,.32,1);-webkit-transition-property:opacity,-webkit-transform;-o-transition-property:opacity,-o-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform,-o-transform;-webkit-transform:scale(0);-ms-transform:scale(0);-o-transform:scale(0);transform:scale(0);speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.checkbox-primary.checked>label:after,.checkbox-primary>input:checked+label:after,.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{background-color:#00da88;border-color:#00da88;border-width:4px}.checkbox-primary.checked>label:before,.checkbox-primary>input:checked+label:before,.radio-primary.checked>label:before,.radio-primary>input:checked+label:before{color:#fff;opacity:1;-webkit-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}.checkbox-primary.focus>label:after,.checkbox-primary>input:focus+label:after,.radio-primary.focus>label:after,.radio-primary>input:focus+label:after{border-color:#00da88;-webkit-box-shadow:0 0 0 3px rgba(0,218,136,.2);box-shadow:0 0 0 3px rgba(0,218,136,.2)}.checkbox-primary:hover>label:after,.radio-primary:hover>label:after{border-color:#00da88}.checkbox-primary.checkbox-right>label,.radio-primary.checkbox-right>label{padding:0 30px 0 0}.checkbox-primary.checkbox-right>label:after,.checkbox-primary.checkbox-right>label:before,.radio-primary.checkbox-right>label:after,.radio-primary.checkbox-right>label:before{right:0;left:auto}.checkbox-primary input:disabled+label:after,.checkbox-primary.disabled>label:after,.radio-primary input:disabled+label:after,.radio-primary.disabled>label:after{background-color:#e5e5e5!important;border-color:#bbb!important}.checkbox-primary input:disabled:checked+label:after,.checkbox-primary.checked.disabled>label:after,.radio-primary input:disabled:checked+label:after,.radio-primary.checked.disabled>label:after{background-color:#bbb!important}.radio-primary>label:after{border-radius:50%}.radio-primary>label:before{top:7px;left:6px;width:6px;height:6px;content:' ';border:none;border-radius:50%}.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{background-color:transparent;border-color:#00da88;border-width:2px}.radio-primary.checked>label:before,.radio-primary>input:checked+label:before{background-color:#00da88}.radio-primary input:disabled:checked+label:after,.radio-primary.checked.disabled>label:after{background-color:transparent;border-color:#bbb}.radio-primary input:disabled:checked+label:before,.radio-primary.checked.disabled>label:before{background-color:#bbb}.panel{position:relative;margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045);box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045)}.panel-body{padding:20px}.panel-body.has-table{padding:10px}.panel-body.has-table .table{margin-bottom:0;table-layout:fixed}.panel-heading{padding:12px 48px 12px 20px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading+.panel-body{padding-top:0}.panel-title{font-size:14px;font-weight:700;line-height:20px}.panel-title .label{top:-1px}.panel-actions{position:absolute;top:0;right:0;padding:7px 8px}.panel:hover .panel-actions{z-index:10}.panel-actions>li>a{display:inline-block;min-width:30px;padding:0 5px;line-height:30px;color:#a6aab8}.panel-actions>li>a:hover{color:#3c4353;text-decoration:initial;background-color:#f1f1f1}.panel-actions .btn-icon{color:#a6aab8}.panel-actions .btn.text-primary{color:#0c64eb}.panel .empty-tip{padding:30px 10px 50px;font-size:14px;color:#838a9d;text-align:center}.progress-text-left{position:relative;margin:7px 0;margin-left:35px;overflow:visible}.progress-text-left .progress-text{position:absolute;top:-7px;left:-35px;display:block;width:35px;height:20px;padding-right:5px;line-height:20px;color:#838a9d;text-align:right}.chart-color{width:20px}.chart-color-dot{display:inline-block;width:10px;height:10px;border-radius:50%}.chart-row{margin-top:10px}.chart-row+.chart-row{padding-top:10px;border-top:1px solid #eee}.chart-wrapper{padding:10px 5px;background:#eee}.chart-wrapper>h4{margin:5px 0 10px}.table-wrapper{max-height:250px;overflow:auto}.table-wrapper .table{margin:0}.progress-pie{position:relative}.progress-pie .progress-info{position:absolute;top:0;left:0;width:100%;height:100%;padding-top:25px;text-align:center}.progress-pie .progress-info>small{display:block;line-height:14px;color:#a6aab8}.progress-pie .progress-info>strong{display:block;font-size:36px;line-height:40px}.progress-pie .progress-info>strong>small{font-size:20px}.progress-pie-120 .progress-info{padding-top:30px}.progress-pie-120 .progress-info>small{line-height:18px}.progress-pie-50 .progress-info{padding-top:4px}.progress-pie-50 .progress-info>strong{font-size:20px;font-weight:400}.progress-pie-50 .progress-info>strong>small{font-size:14px}.progress-pie[data-value="100"] .progress-info>strong{-webkit-transform:scale(.7);-ms-transform:scale(.7);-o-transform:scale(.7);transform:scale(.7)}.status-bars{display:table;width:100%;height:140px;padding:5px;padding-top:50px;margin:0;overflow:hidden}.status-bars>li{position:relative;display:table-cell;text-align:center;vertical-align:bottom}.status-bars .bar{position:absolute;bottom:20px;left:50%;display:block;width:10px;margin-left:-5px;background:#0c64eb;border-radius:5px 5px 0 0}.status-bars .bar:after{position:absolute;right:-50px;bottom:0;left:-50px;display:block;height:1px;content:' ';background:#eee}.status-bars .title{font-size:12px;font-weight:400;color:#a6a8b6}.status-bars .value{position:relative;top:-20px;left:-20px;display:inline-block;width:50px;font-size:16px;font-weight:700;text-align:center}.status-bars-h{display:block;padding-right:50px;padding-left:60px;list-style:none}.status-bars-h>li{position:relative;height:40px;border-left:1px solid #eee}.status-bars-h .bar{position:relative;top:15px;display:block;height:10px;line-height:20px;background:#0c64eb;border-radius:0 5px 5px 0}.status-bars-h .title{position:absolute;top:-5px;left:-60px;width:60px;padding-right:10px;font-size:12px;color:#a6a8b6;text-align:right}.status-bars-h .value{position:absolute;top:-5px;right:-50px;display:block;width:40px;font-size:14px;font-weight:700;text-align:left;white-space:nowrap}.messager{border-radius:4px;-webkit-box-shadow:0 4px 16px rgba(0,0,0,.2),0 2px 8px rgba(0,0,0,.1);box-shadow:0 4px 16px rgba(0,0,0,.2),0 2px 8px rgba(0,0,0,.1)}.messager-content{padding:18px 20px;font-size:18px;line-height:30px}.messager-content>.icon{font-size:28px;line-height:30px}.messager-actions{vertical-align:middle}.messagger-zt{color:#3c4353;background-color:#fff}.messagger-zt .messager-content>.icon{color:#0c64eb}.messagger-zt .messager-actions>.action{color:#838a9d}.messagger-zt.messager-success .messager-content>.icon{color:#00da88}.messagger-zt.messager-danger .messager-content>.icon{color:#ff5d5d}.messagger-zt.messager-warning .messager-content>.icon{color:#ff9800}.messagger-zt.messager-info .messager-content>.icon{color:#2196f3}.tree{padding-left:0;overflow:hidden}.tree ul{position:relative;display:none;padding-left:0}.tree li{position:relative;padding:2px 0 2px 15px;list-style:none}.tree li.heading{padding-left:5px;color:#3c4353}.tree li>a{display:block;max-width:90%;padding:2px 6px;color:#3c4353;word-break:break-all}.tree li>a:hover{color:#3c4353}.tree li>a.tree-toggle:hover{background:0 0}.tree li.active>a{position:relative;font-weight:700;color:#0c64eb}.tree li>.list-toggle{position:absolute;top:1px;left:1px;z-index:10;width:20px;font-size:14px;line-height:22px;color:#cbd0db;text-align:center;cursor:pointer;-webkit-transition:all .2s;-o-transition:all .2s;transition:all .2s}.tree li>.list-toggle:before{content:"\f0da"}.tree li>.list-toggle:active,.tree li>.list-toggle:hover{color:#0c64eb}.tree li.has-active-item>.list-toggle{color:#3c4353}.tree li.has-list.open>ul{display:block}.tree li.has-list.open>.list-toggle{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.tree li.has-list.open:before{position:absolute;top:16px;bottom:-5px;left:10px;display:block;content:' ';border-left:1px solid #d8d8d8}.tree-actions{display:inline-block;margin-left:5px;vertical-align:middle}.tree-actions a{display:inline-block;margin-left:5px;font-size:13px;opacity:.6}.tree-actions a:hover{opacity:1}.tree li>.module-name{color:#3c4353;vertical-align:middle}.tree li>.module-name:hover{background-color:#f0f2f5}.tree li>.module-name:hover>a{color:#3c4353}.treemap-node-fold-icon:before{position:relative;left:-4px;min-width:18px}.dropdown-menu{padding:5px 0;border-color:rgba(0,0,0,.1)}.dropdown-menu>li{padding:0 10px}.dropdown-menu>li>a{padding:2px 10px;margin:5px 0;border-radius:3px}.dropdown-menu>li>a>.icon{position:relative;left:-5px;opacity:.5}.dropdown-menu>li.active>a,.dropdown-menu>li.selected>a{position:relative;color:#fff;background-color:#16a8f8}.dropdown-menu>li.selected>a:after{position:absolute;top:2px;right:4px;display:block;font-family:ZentaoIcon;font-size:18px;font-size:14px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;line-height:20px;text-transform:none;content:"\e5ca";speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.dropdown-menu>li.divider{margin:10px}.dropdown-submenu>a:after{margin-right:-5px}.dropdown-submenu>.dropdown-menu.pull-left{margin-left:-1px}.dropdown-submenu:focus>a,.dropdown-submenu:hover>a{color:#3c4353;background-color:#e9f2fb}.dropdown-submenu:hover>a:after{border-left-color:#0c64eb}.dropdown-submenu>a:hover:after{border-left-color:#fff}.pager .btn{padding:3px 10px}.pager .btn .caret{opacity:.7}.pager>li>.pager-label{padding:2px;line-height:20px}.pager>li>.pager-item{min-width:20px;padding:1px;margin:2px 0;font-size:16px;line-height:20px;text-align:center;background:0 0;border-color:transparent}.pager>li>.pager-item:hover{background-color:rgba(0,0,0,.1)}.pager>li>.pager-item>.icon{position:relative;top:-1px}.pager>li>.btn:hover,.pager>li>a:hover{background:rgba(0,0,0,.1)}.pager>li.disabled>a.pager-item{background:0 0;border-color:transparent;opacity:.5}.pager>li.active>a{background-color:#16a8f8}.pager>li .btn-group .btn{padding:1px;margin:2px 0;border-radius:4px}.pager .dropdown-menu{width:200px}.pager .dropdown-menu>li{float:left;width:33.333333%}.modal-dialog{width:900px;max-width:1360px;border:none;border-radius:0;-webkit-box-shadow:0 0 20px 0 rgba(0,0,0,.25);box-shadow:0 0 20px 0 rgba(0,0,0,.25)}.modal-dialog.modal-md{width:700px}.modal-dialog.modal-xs{width:400px}.modal-dialog.modal-sm{width:500px}.modal-dialog.modal-lg{width:1200px}.modal-dialog.modal-fullscreen{position:fixed;max-width:initial}.modal-header{padding:20px 0;margin:0 20px}.modal-header>.close{color:#838a9d;text-shadow:0 1px 0 rgba(255,255,255,.85);opacity:1}.modal-header>.close:hover{color:#222}.modal-footer{padding:20px 0;margin:0 20px}.modal-title{font-size:16px;font-weight:400;line-height:20px}.modal-actions{position:absolute;top:16px;right:16px}.modal-actions .divider{position:relative;top:5px;display:inline-block;width:0;height:20px;margin:0 10px;border-left:#eee 1px solid}.modal-actions>.dropdown{display:inline-block}.modal-body{padding:20px}.modal-iframe .modal-body>iframe{border-radius:0}.modal.fade .modal-dialog{-webkit-transform:translate(0,-3%);-ms-transform:translate(0,-3%);-o-transform:translate(0,-3%);transform:translate(0,-3%)}.modal.fade.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-simple .modal-footer{padding-top:0;border-top:none}.modal-iframe .modal-header{position:relative;z-index:10;min-height:0;padding:0;border:none}.modal-iframe .modal-title{display:none}.modal-iframe .modal-header .close{position:absolute;top:12px;right:10px;font-size:32px;font-weight:200}.modal-iframe .modal-dialog{overflow:hidden}.modal-inverse .modal-header>.close{color:rgba(255,255,255,.7);text-shadow:none}.modal-inverse .modal-header>.close:hover{color:#fff}.modal-scroll-inside>.modal-dialog{max-height:100%}.hide-modal-close .modal-iframe .modal-header .close{display:none}.tile{text-align:center}.tile-title{line-height:20px;color:#3c4353}.tile-amount{font-size:32px;font-weight:700;line-height:56px}.timeline>li{position:relative;list-style:none}.timeline>li:before,.timeline>li>a:after,.timeline>li>div:after{position:absolute;left:-20px;display:block;width:15px;height:15px;content:' ';border-radius:50%}.timeline>li:before{top:12px;left:-16px;z-index:3;width:7px;height:7px;background-color:#cbd0db;border:none;border:1px solid #cbd0db}.timeline>li>a:after,.timeline>li>div:after{top:11px;left:-17px;z-index:3;width:9px;height:9px;background-color:#0c64eb;border-radius:50%;opacity:0}.timeline>li+li:after{position:absolute;top:-12px;bottom:20px;left:-13px;z-index:1;display:block;content:' ';border-left:1px solid #eee}.timeline>li.active>a:after,.timeline>li.active>div:after{opacity:1}.timeline>li.active:before{top:8px;left:-20px;width:15px;height:15px;background-color:rgba(12,100,235,.2);border:none}.timeline>li>a,.timeline>li>div{display:block;padding:5px;line-height:20px}.timeline>li.active>a{color:#3c4353}.timeline-tag{position:absolute;top:5px;left:-115px;font-size:12px}.timeline-tag-left{padding-left:115px}.timeline-sm{font-size:12px}.timeline-sm>li:before,.timeline-sm>li>a:after,.timeline-sm>li>div:after{top:10px;left:-20px;width:11px;height:11px}.timeline-sm>li.active:before,.timeline-sm>li:before{top:10px;left:-18px;width:11px;height:11px;background:0 0;border:1px solid #eee}.timeline-sm>li>a,.timeline-sm>li>div{line-height:20px}.timeline-sm>li>a:after,.timeline-sm>li>div:after{top:13px;left:-15px;width:5px;height:5px}.form-control{-webkit-box-shadow:none;box-shadow:none}.form-horizontal .form-group>label{padding-right:0}.form-actions{margin-top:20px;margin-bottom:0}.form-actions .btn{margin-right:10px}form label{font-weight:400;color:#3c4353}.form-group .btn+.btn{margin-left:5px}.table-form{margin-bottom:0;table-layout:fixed}.table-form>thead>tr>th.required:after{position:relative;top:3px;right:auto;left:4px;display:inline-block;vertical-align:middle}.table-form>tbody>tr>td,.table-form>tbody>tr>th,.table-form>tfoot>tr>td,.table-form>thead>tr>th{padding:7px;vertical-align:middle;border-bottom:none}.table-form>tfoot>tr>td{padding:20px 7px 10px}.table-form>tbody>tr>th{width:100px;font-weight:700;text-align:right}.table-form .input-group{width:100%}.table-form textarea.form-control{height:32px}.chosen-container-single .chosen-single{position:relative}.chosen-container-single .chosen-single>span{height:20px;line-height:20px;white-space:normal}.chosen-container-single .chosen-single div b{position:relative;top:1px;color:#cbd0db}.chosen-container-single .chosen-search:before{top:8px;right:15px}.chosen-container-multi .chosen-choices li.search-choice{font-size:13px;background:#eee;border-color:#cbd0db;-webkit-box-shadow:none;box-shadow:none}.chosen-container-single .chosen-search input[type=text]{height:30px;padding:3px 25px 3px 5px}.chosen-container-single .chosen-search{padding:3px 10px 0}.chosen-container-single .chosen-single{overflow:visible}.chosen-container-single .chosen-single>.chosen-search{top:-2px;right:-1px;bottom:-1px;left:-1px;display:none;height:auto;padding:0;opacity:0}.chosen-container-single .chosen-single>.chosen-search>input{height:31px;padding:5px 26px 5px 8px;font-size:inherit;line-height:20px}.chosen-container-single .chosen-single>.chosen-search:before{top:7px;right:8px}.chosen-container .chosen-results{padding:10px}.chosen-container .chosen-results>li{border-radius:4px}.chosen-container .chosen-results li.highlighted em{color:#fff}.table-responsive .chosen-container .chosen-results{max-height:200px}.datetimepicker{padding:10px}.datetimepicker td.day.today{background-color:#f77}.datetimepicker td.day.active{background-color:#16a8f8}.datetimepicker tfoot th,.datetimepicker thead th{color:#838a9d}.input-control .colorpicker{top:0;z-index:auto;opacity:1}.input-control .colorpicker .btn{padding:5px}.input-control .input-control-icon-right.btn{top:0}.colorpicker .dropdown-menu{min-width:232px;padding:5px 10px 10px 10px}.colorpicker .dropdown-menu>li{display:block;float:left;padding:5px}.colorpicker .dropdown-menu>li.heading{width:100%;margin-bottom:5px;font-size:16px;font-weight:700;text-align:left}.colorpicker .dropdown-menu>li.heading>.icon-close{position:relative;top:4px;float:right;cursor:pointer;opacity:.6}.colorpicker .dropdown-menu>li>a{position:relative;display:block;width:100%;height:100%;padding:0;margin:0;font-family:ZentaoIcon;font-size:18px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;text-align:center;text-transform:none;border:1px solid transparent;border-radius:50%;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.colorpicker .dropdown-menu>li>a:before{position:absolute;top:0;display:block;width:100%;height:20px;line-height:18px}.colorpicker .dropdown-menu>li>a:hover{-webkit-box-shadow:0 1px 4px rgba(0,0,0,.25);box-shadow:0 1px 4px rgba(0,0,0,.25)}.colorpicker .dropdown-menu>li>a.active:before{font-size:14px;content:"\e5ca"}.colorpicker .dropdown-menu>li>a.empty{color:#666;background:#fff}.colorpicker .dropdown-menu>li>a.empty:before{content:"\e90d"}.colorpicker .btn{position:relative}.colorpicker .btn .color-bar{position:absolute;right:5px;bottom:3px;left:5px;height:3px}.colorpicker .btn .color-bar[style*='background: ']+.ic{position:relative;top:-2px}.colorpicker .btn .ic{color:#cbd0db}.colorpicker .btn:hover .ic{color:#838a9d}.input-group .colorpicker{z-index:3}.input-group .chosen-container{display:table-cell}.input-group-addon{border-right-width:0;border-left-width:0}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin:0}.input-group-cell{display:table-cell;width:1%;padding:0 12px;white-space:nowrap;vertical-align:middle}.ke-container{border-color:#dcdcdc!important;border-radius:2px!important}.ke-container.focus{border-color:#0c64eb!important}.ke-toolbar{border-color:#dcdcdc!important}.required:after{top:6px;right:-10px;font-size:20px}td.required:after{top:12px;right:-5px}.input-group>.chosen-container.required:after,.input-group>.input-control.required:after{top:1px;right:1px;z-index:2}.input-group.required .required:after{display:none}.file-input{position:relative}.file-input .input-group{width:auto}.file-input .input-group>.input-group-cell:first-child{padding-right:0;padding-left:7px}.file-input input[type=file]{position:absolute;width:0;height:0;opacity:0}.file-input .file-title{display:inline-block;max-width:400px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:middle}.file-input .file-editbox{min-width:200px;max-width:100%}.file-input .file-size{display:inline-block;vertical-align:middle}.edit .file-input-empty,.file-input-edit,.file-input-normal,.normal .file-input-empty{display:none}.edit .file-input-edit,.normal .file-input-normal{display:block}.edit .file-input-edit.input-group,.normal .file-input-normal.input-group{display:table}.edit .file-input-normal{display:none!important}.file-input-normal>.input-group-btn{width:auto}.input-group .chosen-container-active .chosen-choices{border-color:#0c64eb!important}.input-group .chosen-container{min-width:100px}.input-group .input-group-btn .btn>.icon{line-height:17px}.os-mac select.form-control{-webkit-appearance:none;background-image:url(data:image/gif;base64,R0lGODlhCQAFAIAAAMvQ2////yH5BAEAAAEALAAAAAAJAAUAAAIKhH+BGYoNGWxgFgA7);background-image:url(data:image/gif;base64,R0lGODlhBwAEAIAAAMvQ2////yH5BAEAAAEALAAAAAAHAAQAAAIIhA+BGWoNWSgAOw==);background-repeat:no-repeat;background-position:right 5px top 12px;-moz-appearance:none}input::-webkit-contacts-auto-fill-button{position:absolute;right:0;display:none!important;pointer-events:none;visibility:hidden}.chosen-choices.has-error,.chosen-single.has-error,.form-control.has-error{border-color:#ff5d5d!important;-webkit-box-shadow:0 0 6px #ffc3c3!important;box-shadow:0 0 6px #ffc3c3!important}.popover-success.popover-form-result{font-weight:700;color:#fff;background:#00da88}.popover-success.popover-form-result.popover.right .arrow:after{border-right-color:#00da88}#mainHeader{height:50px;color:#fff;background:#1183fb -webkit-gradient(linear,right top,left top,from(#0a48d1),to(#1183fb));background:#1183fb -webkit-linear-gradient(right,#0a48d1 0,#1183fb 100%);background:#1183fb -o-linear-gradient(right,#0a48d1 0,#1183fb 100%);background:#1183fb linear-gradient(-90deg,#0a48d1 0,#1183fb 100%);background-color:#1183fb;border-top-color:#0c64eb;border-bottom-color:#e9f2fb}#mainHeader>.container{min-width:1200px;padding:0}#heading{position:absolute;top:10px;left:20px}@media (min-width:1400px){#heading{left:40px}}#heading h1{float:left;max-width:250px;margin:0;overflow:hidden;font-size:20px;font-weight:400;line-height:30px;text-overflow:ellipsis;white-space:nowrap}#heading h1 a{color:inherit;text-decoration:inherit}#heading h1.long-name{position:relative;top:-5px;display:table-cell;font-size:16px;line-height:20px;word-break:break-all;white-space:normal}#heading .btn{display:block;float:left;height:20px;padding:1px 5px;margin:0;margin:5px 0 0 10px;font-size:12px;font-weight:lighter;line-height:18px;background-color:rgba(255,255,255,.2);border:none}#heading .btn:hover{background-color:rgba(0,0,0,.1)}#navbar{margin:0 auto;font-size:15px;text-align:center}#navbar .nav{display:inline-block}#navbar .nav>li>a{padding:10px 15px;line-height:30px;color:#fff;border-radius:0;opacity:.9}@media (max-width:992px){#navbar .nav>li>a{padding:10px}}#navbar .nav>li>a:focus,#navbar .nav>li>a:hover{background:rgba(0,0,0,.15);opacity:1}#navbar .nav>li.active>a{font-weight:700;background:rgba(0,0,0,.1);opacity:1}#navbar .nav>li.divider{display:block;width:2px;height:20px;margin:15px;background:rgba(255,255,255,.4)}#navbar .nav>li.divider:last-child{display:none}#toolbar{position:absolute;top:12px;right:20px;font-size:12px;color:#fff}@media (min-width:1400px){#toolbar{right:40px}}#extraNav{text-align:right}#extraNav>li{display:inline-block;float:none;text-align:left}#extraNav>li>a{display:block;padding:0;color:#fff;opacity:.75}#extraNav>li>a:hover{text-decoration:unset;background-color:rgba(0,0,0,.1);opacity:1}#extraNav>li.open>a{background-color:rgba(0,0,0,.1)}#extraNav>li+li{margin-left:10px}#searchbox{position:relative;float:left;width:150px}#searchbox .input-group-btn .btn{position:relative;padding:1px 4px;font-size:12px;line-height:20px;color:#fff;background-color:rgba(255,255,255,.15);border-right:none;border-radius:2px}#searchbox .input-group-btn .btn:after{position:absolute;top:3px;right:0;bottom:3px;display:block;width:1px;content:' ';background-color:rgba(255,255,255,.15)}#searchbox .input-group-btn .btn:hover{background-color:rgba(255,255,255,.25)}#searchGo{position:absolute;top:0;right:-1px;z-index:9;min-width:24px;height:24px;padding:2px 3px;font-size:12px;line-height:20px;color:#fff;background-color:#6a9afd;border-radius:2px}#searchGo:hover{color:#fff!important;background-color:#0c64eb}#searchInput{height:24px;padding:2px 30px 2px 5px;color:#fff;text-align:left;background:rgba(255,255,255,.15);border-color:transparent;border-radius:0 12px 12px 0;-webkit-transition:background .2s,border .2s;-o-transition:background .2s,border .2s;transition:background .2s,border .2s}#searchInput:hover{background:rgba(255,255,255,.25)}#searchInput:focus{color:#333;background:#fff}#searchInput::-webkit-input-placeholder{font-size:12px;color:#fff;color:rgba(255,255,255,.5)}#searchInput::-moz-placeholder{font-size:12px;color:#fff;color:rgba(255,255,255,.5)}#searchInput::placeholder{font-size:12px;color:#fff;color:rgba(255,255,255,.5)}#searchInput:focus::-webkit-input-placeholder{color:#838a9d}#searchInput:focus::-moz-placeholder{color:#838a9d}#searchInput:focus::placeholder{color:#838a9d}#searchTypeMenu{min-width:220px}#searchTypeMenu>li{float:left;width:50%}#searchTypeMenu>li>a{margin:4px 0}#userNav{float:right;margin:0 -6px 0 10px}#userNav .avatar{display:inline-block;vertical-align:middle}#userNav>li>a{padding:2px 6px;margin-left:3px;line-height:20px;color:#fff;opacity:.9}#userNav>li>a .user-name{max-width:100px;overflow:hidden;font-size:15px;text-overflow:ellipsis;white-space:nowrap}#userNav>li>a:hover{background-color:rgba(0,0,0,.1);opacity:1}#userNav>li>a span{display:inline-block;vertical-align:middle}#userNav>li.open>a{background-color:rgba(0,0,0,.1)}#userNav>li.has-new-items>a{position:relative}#userNav>li.has-new-items>a:before{position:absolute;top:3px;right:-1px;display:block;width:4px;height:4px;content:' ';background-color:#ff5d5d;border-radius:50%}#userNav .dropdown-menu{min-width:150px}#userNav .dropdown-menu>li>a>.icon{position:absolute;top:10px;right:5px;display:block;width:20px;height:20px;line-height:20px;text-align:center}#userNav .user-profile-item>a{position:relative;padding-left:45px}#userNav .user-profile-item .avatar{position:absolute;top:6px;left:5px}#userNav .user-profile-name{font-size:16px}#userNav .user-profile-role{font-size:12px;color:#a9abb8}#userNav .no-role .user-profile-role{display:none}#userNav .no-role .user-profile-name{line-height:40px}#subHeader{min-height:50px;background:#fff}#subHeader>.container{padding:0 20px}@media (min-width:1400px){#subHeader>.container{padding:0 40px}}#pageNav{position:absolute;top:8px;left:0;left:20px}@media (min-width:1400px){#pageNav{left:40px}}#subNavbar{margin-top:5px;font-size:14px;text-align:center}#subNavbar .nav{display:inline-block}#subNavbar .nav>li>a{padding:8px 12px;line-height:24px;color:#3c4353}#subNavbar .nav>li>a:hover{color:#3c4353;background-color:rgba(0,0,0,.075)}#subNavbar .nav>li.active>a{font-weight:700;color:#0c64eb}#subNavbar .nav>li.divider{display:block;width:2px;height:20px;margin:9px 5px;background-color:rgba(0,0,0,.05)}#subNavbar .dropdown-menu{text-align:left}#pageActions{position:absolute;top:9px;right:20px}@media (min-width:1400px){#pageActions{right:40px}}.cell{padding:10px;background-color:#fff;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045);box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045)}.cell+.cell{margin-top:10px}.cell>.panel{margin:0;-webkit-box-shadow:none;box-shadow:none}.cell>.panel>.panel-heading{padding:5px 5px 10px}.cell>.panel>.panel-heading .panel-actions{padding:0}.cell>.panel>.panel-body{padding:5px}.cell>.table{margin:0}#main{padding:20px 0}#main>.container{padding:0 20px}@media (min-width:1400px){#main>.container{padding:0 40px}}#header,#header+#main{min-width:1200px}#mainMenu{margin:-10px 0 8px}.main-content{padding:20px;background-color:#fff;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045);box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045)}@media (min-width:1400px){.main-content>.center-block{max-width:1350px;padding:20px;border:1px solid #eee}.main-content>.center-block .main-header{background-color:#f1f1f1}}.main-content>h2{margin:0 0 20px}.main-content .cell{-webkit-box-shadow:none;box-shadow:none}.main-header{padding:5px 20px;border-bottom:1px solid #eee}.main-header:after,.main-header:before{display:table;content:" "}.main-header:after{clear:both}.main-header>h2{display:block;float:left;margin:0 10px 0 0;font-size:14px;line-height:34px}.main-header>h2 .label-id{margin-right:5px}.main-header>h2 small{font-size:14px;font-weight:400}.main-content .main-header{margin:-20px -20px 10px}.main-header .label{top:-1px}.main-row{display:table;width:100%;table-layout:fixed}.main-row>*{display:table-cell;vertical-align:top}@media (max-width:720px){.main-row{display:block}.main-row>*{display:block;width:100%}.main-row .side-col{width:100%;padding:0}.main-row .main-col+.side-col,.main-row .side-col+.main-col{margin-top:10px}}.main-row.hide-side .side-col{display:none}@media (min-width:720px){.main-content>.center-block .main-form{padding-right:20px}}#main .side-col .tabs{padding:5px}#main .side-col .nav-tabs{margin:0 5px 5px 5px;border-bottom:1px solid #ddd}#main .side-col .nav-tabs>li{margin:0}#main .side-col .nav-tabs>li+li{margin-left:10px}#main .side-col .nav-tabs>li>a{position:relative;padding:8px 5px;border:none;border-radius:2px!important}#main .side-col .nav-tabs>li.active>a{font-weight:700;color:#3c4353}#main .side-col .nav-tabs>li.active>a:before{position:absolute;right:0;bottom:-1px;left:0;display:block;height:2px;content:' ';background:#0c64eb}#main .side-col .tab-content .tab-pane table{border:none}.main-actions .btn-toolbar{display:inline-block;padding:4px 15px;color:#fff;pointer-events:auto;background:#717171;background-color:rgba(90,90,90,.85);border-radius:4px}.main-actions .btn-toolbar .divider{margin-right:15px;margin-left:15px;border-color:rgba(255,255,255,.1)}.main-actions .btn-toolbar .btn{padding-right:10px;padding-left:10px;margin-right:0;color:#fff;background-color:transparent;border:none}.main-actions .btn-toolbar .btn+.btn{margin-left:10px}.main-actions .btn-toolbar .btn:focus,.main-actions .btn-toolbar .btn:hover{background-color:rgba(255,255,255,.2)}.main-actions .btn-toolbar .btn.btn-icon{min-width:32px;padding-right:0;padding-left:0}.main-actions .btn-toolbar .btn+.btn-group{margin-right:0;margin-left:10px}#mainContent .main-col>.main-actions{padding:30px 0 0 0;text-align:center}#mainContent .main-col>.main-actions>.btn-toolbar{visibility:visible;opacity:1;-webkit-transition:opacity .2s;-o-transition:opacity .2s;transition:opacity .2s}#mainActions{position:fixed;top:0;right:0;bottom:0;left:0;text-align:center;pointer-events:none}#mainActions .btn-toolbar{position:relative;top:-90px}#mainActions .dropdown-menu{text-align:left}#mainActions>.container{height:100%}.main-actions-holder{display:none}.main-actions-fixed .main-actions-holder{display:block}.main-actions-fixed #mainContent .main-col>.main-actions{position:fixed;bottom:50px}.main-actions-fixed.body-modal #mainContent .main-col>.main-actions{bottom:20px}#nextPage,#prevPage{position:absolute;top:50%;left:-10px;width:40px;height:60px;padding:10px 0;margin-top:-30px;line-height:40px;color:#fff;text-align:center;pointer-events:auto;background:#717171;background-color:rgba(90,90,90,.85);-webkit-box-shadow:0 2px 15px 2px rgba(0,0,0,.05);box-shadow:0 2px 15px 2px rgba(0,0,0,.05)}#nextPage:hover,#prevPage:hover{-webkit-box-shadow:0 2px 15px 2px rgba(0,0,0,.15);box-shadow:0 2px 15px 2px rgba(0,0,0,.15)}#nextPage>.icon,#prevPage>.icon{display:block;font-size:36px;line-height:36px}#nextPage{right:-10px;left:auto}@media (max-width:1800px){#prevPage{left:-3px}#nextPage{right:-3px}}#sidebarHeader{position:relative;float:left;width:180px;height:34px;padding-right:20px;margin-right:20px;background:#fff;border-left:4px solid #0c64eb;border-radius:4px 2px 2px 4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045);box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045)}#sidebarHeader:after{position:absolute;top:-1px;right:-8px;display:block;width:0;height:0;content:' ';border-color:transparent transparent transparent #fff;border-style:solid;border-width:18px 0 18px 8px}#sidebarHeader .title{padding:0 5px;overflow:hidden;font-size:14px;font-weight:700;line-height:32px;color:#0c64eb;text-align:center;text-overflow:ellipsis;white-space:nowrap}#sidebarHeader .title>a{position:absolute;top:0;right:0;width:20px;opacity:.5}#sidebarHeader .title>a:hover{opacity:1}#sidebar{position:relative;-webkit-transition:width .2s,padding .2s;-o-transition:width .2s,padding .2s;transition:width .2s,padding .2s}#sidebar>.sidebar-toggle{position:absolute;top:0;right:5px;bottom:0;width:10px;cursor:pointer;background:0 0;border-radius:5px;-webkit-transition:background-color .2s;-o-transition:background-color .2s;transition:background-color .2s}#sidebar>.sidebar-toggle>.icon{position:absolute;top:50%;left:-1px;width:12px;height:30px;margin-top:-10px;line-height:30px;color:#fff;text-align:center;background:#79cdfb;border-radius:6px}#sidebar>.sidebar-toggle>.icon:before{position:relative;left:-3px}#sidebar>.sidebar-toggle:before{position:absolute;top:0;right:-5px;bottom:0;left:-5px;display:block;content:' '}#sidebar>.sidebar-toggle:hover{background:rgba(0,0,0,.075)}#sidebar>.cell{position:relative;left:0;width:180px;-webkit-transition:left .2s;-o-transition:left .2s;transition:left .2s}#sidebar.no-animate>.cell{display:none;-webkit-transition:none;-o-transition:none;transition:none}.hide-sidebar #sidebar>.cell{position:absolute;left:-200px}.hide-sidebar #sidebar{position:relative;width:0;padding:0}.hide-sidebar #sidebar>.sidebar-toggle>.icon:before{content:"\e315"}@media (max-width:720px){#sidebar>.cell{width:100%}}#queryBox{max-height:0;padding:0;overflow:hidden;-webkit-transition:cubic-bezier(.175,.885,.32,1) .2s;-o-transition:cubic-bezier(.175,.885,.32,1) .2s;transition:cubic-bezier(.175,.885,.32,1) .2s;-webkit-transition-property:padding,max-height,margin;-o-transition-property:padding,max-height,margin;transition-property:padding,max-height,margin}#queryBox>form{visibility:hidden;-webkit-transition:visibility .2s .2s;-o-transition:visibility .2s .2s;transition:visibility .2s .2s}#queryBox.loading{height:50px}#queryBox.show{min-height:110px;max-height:300px;margin-bottom:10px;overflow:visible}#queryBox.show>form{visibility:visible}#queryBox.divider{border-bottom:1px solid #eee}#main .querybox-toggle.querybox-opened{position:relative;color:#0c64eb;background:0 0;border:none}#main .querybox-toggle.querybox-opened:before{position:absolute;bottom:-14px;left:50%;width:0;height:0;content:' ';border-color:transparent transparent #fff transparent;border-style:solid;border-width:0 10px 10px 10px}#contentNav{padding:5px;background:#fff;border-bottom:1px solid #eee}#contentNav .nav>li>a{position:relative;padding:6px 10px;color:#838a9d}#contentNav .nav>li.active>a{font-weight:700;color:#0c64eb}#contentNav .nav>li.active>a:before{position:absolute;right:10px;bottom:3px;left:10px;display:block;height:2px;content:' ';background:#0c64eb}.body-modal{padding-bottom:0}.body-modal #main,.body-modal .container{min-width:0!important}.body-modal #main{padding:0}.body-modal .main-header{position:fixed;top:0;right:20px;left:20px;z-index:100;padding:13px 48px 13px 0;margin:0;background:#fff}.body-modal #mainContent{padding-top:70px}.body-modal .main-header>h2{max-width:100%;overflow:hidden;font-size:14px;text-overflow:ellipsis;white-space:nowrap}.body-modal .cell,.body-modal .main-content{-webkit-box-shadow:none;box-shadow:none}.body-modal #mainMenu{position:fixed;top:0;right:0;left:0;z-index:100;padding:12px 60px 12px 10px;margin:0;background:#fff}.body-modal #mainMenu>.btn-toolbar.pull-left.divider{display:none}.body-modal #mainMenu>.btn-toolbar{max-width:100%;margin-left:20px}.body-modal #mainMenu>.btn-toolbar>.divider:first-child{display:none}.body-modal #mainMenu>.btn-toolbar .page-title{max-width:100%;margin-left:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.body-modal #mainMenu+#mainContent.main-row{padding:60px 10px 0}.body-modal #mainMenu+#mainContent.main-row .cell{border:1px solid #efefef;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045);box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045)}.body-modal #mainActions{top:auto}.body-modal #mainActions .btn-toolbar{top:auto;bottom:10px}.body-modal.m-bug-view,.body-modal.m-story-view,.body-modal.m-task-view,.body-modal.m-testcase-view,.body-modal.m-testtask-view,.body-modal.m-todo-view{padding-bottom:20px;border-radius:3px}#tabsNav{position:relative}#tabsNav .tab-pane>.actions{position:absolute;top:-8px;right:0}#tabsNav .tab-pane>.cell,#tabsNav .tab-pane>.main-table{padding:0;border:1px solid #cbd0db;border-top:none;border-radius:0 0 4px 4px}#tabsNav .tab-pane>.cell .detail-title{padding-left:5px}#helpContent{position:fixed;top:50px;right:0;bottom:40px;left:0;display:none;background-color:#fff}#helpContent .load-error{display:none;padding:20px}#helpContent .show-error .load-error{display:block}.show-help-tab{overflow:hidden}.show-help-tab #main{display:none}.show-help-tab #helpContent{display:block}#navbar .nav>li>a.open-help-tab>.icon-close{display:none;opacity:.5}#navbar .nav>li>a.open-help-tab>.icon-close:hover{background:rgba(0,0,0,.1);opacity:1}.show-help-tab #navbar .nav>li>a.open-help-tab>.icon-close{display:inline}.text-middle td,.text-middle th{vertical-align:middle}.text-center td,.text-center th{text-align:center}.c-sm{width:40px}.c-id{width:90px}.c-id-sm{width:70px}.c-id-xs{width:55px}.c-date{width:100px}.c-num,.c-pri,.c-type{width:80px;overflow:hidden}.c-begin,.c-end,.c-time{width:65px}.c-hours{width:60px}.c-actions-1{width:50px}.c-actions-2{width:75px}.c-actions-3{width:102px}.c-actions,.c-actions-4{width:128px}.c-actions-5{width:155px}.c-actions-6{width:180px}.c-product,.c-project{width:180px}.c-plan{width:130px}.c-datetime{width:120px}.c-stage,.c-status,.c-user{width:80px}.c-side{width:200px;border-right:10px solid #efefef}.c-assign,.c-assignedTo,.c-openedBy{width:130px}.c-progress{width:155px}.c-assign,.c-assignedTo,.c-openedBy,.c-product,.c-project,.c-status,.c-url,.c-user{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}td.c-name,td.c-title{overflow:hidden;text-align:left!important;text-overflow:ellipsis;white-space:nowrap}td.c-actions{position:relative;padding-top:0;padding-bottom:0;overflow:hidden;white-space:nowrap;vertical-align:middle}td.c-actions .btn{display:inline-block;width:26px;padding:2px;overflow:hidden;line-height:20px;color:#16a8f8;background:0 0;border-color:transparent}td.c-actions .btn .icon{font-size:18px}td.c-actions .btn:hover{color:#0c64eb;background-color:#d3e5f7}td.c-actions .btn+.btn{margin-left:-4px}td.c-actions .btn-link{color:#3c4353;background:0 0}td.c-actions .btn-link:hover{color:#0c64eb;background:#e9f2fb}td.c-actions .more{position:absolute;top:50%;right:100%;display:none;padding-right:4px;padding-left:20px;margin-top:-15px;margin-right:-6px;white-space:nowrap;background-color:#fafafa;-webkit-transition:opacity .3s,margin.3s;-o-transition:opacity .3s,margin.3s;transition:opacity .3s,margin.3s}tr:hover td.c-actions .more{display:block}td:hover+td.c-actions>.more{margin-right:-15px;pointer-events:none;opacity:.15}tr[data-url]{cursor:pointer}.table tbody>tr>td,.table thead>tr>th{vertical-align:middle}.table tbody>tr>td.has-btn,.table thead>tr>th.has-btn{padding-top:1px;padding-bottom:1px;overflow:visible}.table tbody>tr>td .progress,.table thead>tr>th .progress{height:6px}.table .em,.table em{color:#3c4353}.table .divider{border-bottom:10px solid #efefef}.table .divider-top{border-top:10px solid #efefef}.table .btn-icon-left{max-width:100%;padding-left:20px;overflow:hidden;line-height:18px;text-align:left;text-overflow:ellipsis;background:0 0;border-color:#eaf3fc}.table .btn-icon-left>.icon{width:20px;font-size:14px;background:0 0!important;opacity:0}.table .btn-icon-left.btn-sm{height:26px;font-size:13px}.table .btn-icon-left:active,.table .btn-icon-left:focus,.table .btn-icon-left:hover{border-color:rgba(0,0,0,.2)}.table .btn-icon-left:active>.icon,.table .btn-icon-left:focus>.icon,.table .btn-icon-left:hover>.icon{opacity:1}.table .btn-icon-left>.text{padding-left:25px}.table thead>tr>th.c-assign,.table thead>tr>th.c-assignedTo{padding-left:29px}.table a{vertical-align:middle}.table tbody>tr:last-child{border-bottom:none}.table caption{margin-bottom:5px;background:#f1f1f1;border:none}.is-firefox .table .btn-icon-left>.icon{line-height:22px}.main-table{border-radius:4px}.main-table>.table,.main-table>.table-footer,.main-table>.table-header,.main-table>.table-responsive{-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045);box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045)}.main-table .table{font-size:13px;table-layout:fixed;background-color:#fff;border-radius:4px 4px 0 0}.main-table .table.table-lg{font-size:14px}.main-table .table .btn-icon-left{border-color:transparent}.main-table .table .btn-icon-left>.icon{background:0 0;border-radius:4px}.main-table .table .btn-icon-left.btn-sm{height:26px}.main-table .table .btn-icon-left:hover{border-color:rgba(0,0,0,.2)}.main-table .table .btn-icon-left:hover>.icon{background:#e9f2fb;border-radius:4px 0 0 4px}.main-table tbody>tr>td,.main-table thead>tr>th{min-height:36px;padding:2px 8px;line-height:30px}.main-table tbody>tr>td:first-child,.main-table thead>tr>th:first-child{padding-left:15px}.main-table thead>tr>th{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-bottom:1px solid #ddd}.main-table tbody>tr:nth-child(odd){background-color:#f5f5f5}.main-table tbody>tr:last-child>td{border-bottom:1px solid #ddd}.main-table tbody>tr>td{position:relative;border-bottom:none;border-bottom:1px solid #eee}.main-table tbody>tr>td .label{max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.main-table tbody>tr>td>a{line-height:28px;color:#0c60e1}.main-table tbody>tr>td>a:not(.btn):visited{color:#082999;opacity:.9}.main-table tbody>tr>td>a:hover,.main-table tbody>tr>td>a:visited:hover{color:#0c64eb}.main-table tbody>tr>td.c-actions{padding-right:10px}.main-table tbody>tr>td.c-side+td:before,.main-table tbody>tr>td:first-child:before{position:absolute;top:0;bottom:0;left:0;display:block;width:0;content:'';background:#0c64eb;opacity:0;-webkit-transition:.2s linear;-o-transition:.2s linear;transition:.2s linear;-webkit-transition-property:width,opacity,border-radius;-o-transition-property:width,opacity,border-radius;transition-property:width,opacity,border-radius}@-moz-document url-prefix(){.main-table tbody>tr>td.c-side+td:before,.main-table tbody>tr>td:first-child:before{bottom:-1px}}.main-table tbody>tr>td.c-side:before{display:none}.main-table tbody>tr{-webkit-transition:.2s cubic-bezier(.175,.885,.32,1);-o-transition:.2s cubic-bezier(.175,.885,.32,1);transition:.2s cubic-bezier(.175,.885,.32,1);-webkit-transition-property:background-color,-webkit-box-shadow;-o-transition-property:box-shadow,background-color;transition-property:background-color,-webkit-box-shadow;transition-property:box-shadow,background-color;transition-property:box-shadow,background-color,-webkit-box-shadow}.main-table tbody>tr:hover{background:#e9f2fb}.main-table .table-grouped tbody>tr:hover{background:#f2f7fd;-webkit-box-shadow:none;box-shadow:none}.main-table .table-grouped tbody>tr:hover td.c-actions .more{background:#f2f7fd}.main-table tbody>tr.checked{background:#fff3e0}.main-table tbody>tr.checked:hover{background:#ffebbc}.main-table tbody>tr.checked>td.c-side+td:before,.main-table tbody>tr.checked>td:first-child:before{width:4px;opacity:1}.main-table tbody>tr.checked.row-check-begin{border-top-left-radius:4px;border-top-right-radius:2px}.main-table tbody>tr.checked.row-check-begin>td:first-child:before{border-top-left-radius:4px}.main-table tbody>tr.checked.row-check-end{border-bottom-right-radius:2px;border-bottom-left-radius:4px}.main-table tbody>tr.checked.row-check-end>td:first-child:before{border-bottom-left-radius:4px}.main-table .checkbox-primary{display:inline-block;line-height:20px}.main-table .checkbox-primary label{margin:0}.main-table .table{margin:0}.table-header{padding:4px 0 12px}.table-header .table-statistic{color:#838a9d}.table-header .table-statistic strong{font-size:15px;color:#3c4353}.table-header .btn-toolbar{margin-top:-28px}.table-header.fixed-right{position:relative;z-index:5;padding:0}.table-header.fixed-right>.btn-toolbar{position:absolute;top:0;right:0;z-index:1;padding:1px;margin:0;background:#fff;border-radius:4px}.table-header.fixed-right>.btn-toolbar .btn{opacity:.65}.table-header.fixed-right>.btn-toolbar .btn:hover{opacity:1}.table-footer{position:relative;min-height:40px;padding:6px 15px;background:#fff;border-radius:0 0 4px 4px}.body-modal .table-footer{margin-bottom:20px}.talbe-lg+.table-footer{padding:11px 15px}.table-footer .btn-toolbar,.table-footer .checkbox-primary{float:left}.table-footer .btn-toolbar+.btn-toolbar{margin-left:8px}.table-footer .checkbox-primary{margin:5px 20px 0 0}.table-footer .checkbox-primary.checked label:after{border-color:#00da88!important}.table-footer .btn{padding:3px 10px;line-height:20px}.table-footer .pager{position:absolute;top:0;right:0;z-index:4;height:40px;padding:6px 5px 6px 10px;margin:0;background:#fff;opacity:1;-webkit-transition:opacity .4s;-o-transition:opacity .4s;transition:opacity .4s}.table-footer .pager:before{position:absolute;top:0;bottom:0;left:-50px;display:block;width:50px;content:' ';background:-webkit-gradient(linear,left top,right top,from(rgba(255,255,255,0)),to(#fff));background:-webkit-linear-gradient(left,rgba(255,255,255,0) 0,#fff 100%);background:-o-linear-gradient(left,rgba(255,255,255,0) 0,#fff 100%);background:linear-gradient(to right,rgba(255,255,255,0) 0,#fff 100%)}.table-footer .pager .btn,.table-footer .pager>li>.pager-item,.table-footer .pager>li>.pager-label{color:#838a9d;background:0 0;border-color:transparent}.table-footer .pager .btn,.table-footer .pager>li>a{border-radius:3px}.table-footer .pager .btn:hover,.table-footer .pager>li>a:hover{background:rgba(0,0,0,.1)}.table-footer .pager>li.disabled>a.pager-item{opacity:1}.table-footer .form-control{height:28px;padding:3px 8px}.table-footer .table-statistic{position:relative;z-index:2;float:left;padding-right:30px;line-height:28px;color:#838a9d;background:#fff}.table-footer .table-statistic:hover{z-index:4}.table-footer .table-statistic:hover+.pager{z-index:2;opacity:.3}.table-footer .btn-toolbar+.table-statistic{margin-left:10px}.table-footer .text{line-height:28px}.table-footer.fixed-footer{position:fixed;z-index:10;margin:0;background:rgba(75,75,75,.85);border-top-color:transparent}.table-footer.fixed-footer .checkbox-primary label{color:#fff}.table-footer.fixed-footer .checkbox-primary label:after{border-color:rgba(255,255,255,.8)}.table-footer.fixed-footer .table-statistic{color:#fff;background:#666}.table-footer.fixed-footer .pager{background:#666}.table-footer.fixed-footer .pager:before{background:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,0)),to(#666));background:-webkit-linear-gradient(left,rgba(0,0,0,0) 0,#666 100%);background:-o-linear-gradient(left,rgba(0,0,0,0) 0,#666 100%);background:linear-gradient(to right,rgba(0,0,0,0) 0,#666 100%)}.table-footer.fixed-footer .pager .btn,.table-footer.fixed-footer .pager>li>.pager-item,.table-footer.fixed-footer .pager>li>.pager-label{color:#fff}.table-footer.fixed-footer .pager .btn:hover,.table-footer.fixed-footer .pager>li>a:hover{background:rgba(255,255,255,.3)}.table-footer.fixed-footer .pager>li.disabled>a.pager-item{opacity:.5}.table-actions{width:0;height:28px;visibility:hidden;opacity:0;-webkit-transition:opacity cubic-bezier(.175,.885,.32,1) .8s;-o-transition:opacity cubic-bezier(.175,.885,.32,1) .8s;transition:opacity cubic-bezier(.175,.885,.32,1) .8s}.table-actions.show-always{width:auto;pointer-events:none;cursor:not-allowed;visibility:visible;opacity:.75}.has-row-checked .table-actions{width:auto;pointer-events:auto!important;cursor:default;visibility:visible;opacity:1}.table-lg tbody>tr>td{padding:9px 10px}.table-lg tbody>tr>td .btn+.btn{margin-left:5px}.table.has-sort-head thead>tr>th{padding-right:0}.table.has-sort-head thead>tr>th>a{position:relative;display:inline-block;padding-right:16px;color:#3c4353}.table.has-sort-head thead>tr>th>a:after,.table.has-sort-head thead>tr>th>a:before{position:absolute;top:0;right:0;font-family:ZentaoIcon;font-size:18px;font-size:14px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;line-height:30px;color:#3c4353;text-transform:none;content:"\f0de";opacity:.5;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.table.has-sort-head thead>tr>th>a:after{content:"\f0dd"}.table.has-sort-head thead>tr>th>a.sort-down,.table.has-sort-head thead>tr>th>a.sort-up{color:#000;text-decoration:none}.table.has-sort-head thead>tr>th>a:hover,.table.has-sort-head thead>tr>th>a:hover:after,.table.has-sort-head thead>tr>th>a:hover:before{color:#0c64eb;opacity:1}.table.has-sort-head thead>tr>th>a.sort-down:after,.table.has-sort-head thead>tr>th>a.sort-up:before{color:#000;opacity:1}.head-fixed .datatable-head-span .table,.table.fixed-header-copy{z-index:10;color:#fff;background:rgba(75,75,75,.85)}.head-fixed .datatable-head-span .table thead>tr>th,.table.fixed-header-copy thead>tr>th{color:#eee}.head-fixed .datatable-head-span .table thead>tr>th>a,.table.fixed-header-copy thead>tr>th>a{color:#eee}.head-fixed .datatable-head-span .table thead>tr>th>a:hover,.table.fixed-header-copy thead>tr>th>a:hover{color:#fff}.head-fixed .datatable-head-span .table thead>tr>th>a:after,.head-fixed .datatable-head-span .table thead>tr>th>a:before,.table.fixed-header-copy thead>tr>th>a:after,.table.fixed-header-copy thead>tr>th>a:before{color:#eee}.head-fixed .datatable-head-span .table thead>tr>th>a.sort-down,.head-fixed .datatable-head-span .table thead>tr>th>a.sort-down:after,.head-fixed .datatable-head-span .table thead>tr>th>a.sort-up,.head-fixed .datatable-head-span .table thead>tr>th>a.sort-up:before,.head-fixed .datatable-head-span .table thead>tr>th>a:hover,.head-fixed .datatable-head-span .table thead>tr>th>a:hover:after,.head-fixed .datatable-head-span .table thead>tr>th>a:hover:before,.table.fixed-header-copy thead>tr>th>a.sort-down,.table.fixed-header-copy thead>tr>th>a.sort-down:after,.table.fixed-header-copy thead>tr>th>a.sort-up,.table.fixed-header-copy thead>tr>th>a.sort-up:before,.table.fixed-header-copy thead>tr>th>a:hover,.table.fixed-header-copy thead>tr>th>a:hover:after,.table.fixed-header-copy thead>tr>th>a:hover:before{color:#fff}.head-fixed .datatable-head-span .table .checkbox-primary,.table.fixed-header-copy .checkbox-primary{z-index:1}.head-fixed .datatable-head-span .table .checkbox-primary label,.table.fixed-header-copy .checkbox-primary label{color:#fff}.head-fixed .datatable-head-span .table .checkbox-primary label:after,.table.fixed-header-copy .checkbox-primary label:after{border-color:rgba(255,255,255,.8)}.head-fixed .datatable-head-span .table .checkbox-primary.checked label:after,.table.fixed-header-copy .checkbox-primary.checked label:after{border-color:#00da88!important}.table-data{margin:0;table-layout:fixed}.table-data tbody>tr>td,.table-data tbody>tr>th{padding:6px 8px;word-break:break-all;border:none}.table-data tbody>tr>th{width:70px;padding-left:0;font-weight:400;color:#838a9d;text-align:right;vertical-align:middle}.table-data tbody>tr>td{padding-right:0}.table-data tbody>tr>td>a{color:#0c60e1}.table-data tbody>tr>td>a:not(.btn):visited{color:#082999}.table-data tbody>tr>td>a:hover,.table-data tbody>tr>td>a:visited:hover{color:#0c64eb}.table-data ol,.table-data ul{margin:0}.fixed-head-table{background:rgba(0,0,0,.7);border-bottom:1px solid #ddd}.fixed-head-table thead>tr>th{color:#fff}.table-empty-tip{padding:80px 10px;text-align:center;background:#fff}.not-firefox .table-grouped>tbody>tr>td.c-side{background:#fff!important}.table-grouped .group-toggle{cursor:pointer}.table-grouped .group-toggle.group-summary{border-top:10px solid #efefef}.table-grouped tbody>tr>td:first-child,.table-grouped thead>tr>th:first-child{padding-left:8px}.group-expand-all,.table-group-collapsed .group-collapse-all{display:none}.table-group-collapsed .group-expand-all{display:inline-block}.table-auto{table-layout:auto}.datatable .table>tbody>tr.checked.hover>td,.datatable .table>tbody>tr.checked>td.col-hover{background:#ffebbc}body.has-fixed-footer{padding-bottom:60px}.table.with-footer-fixed{margin-bottom:20px}.article-content{overflow:auto}.article-content img{margin-top:0}.article-content table{margin:10px 0}.article-content table td,.article-content table th{border:1px solid #cbd0db}.article-content table th{background:#eee}.article-content,.article>.content{word-wrap:break-word}.detail{padding:10px 0;margin:0 10px}.detail+.detail{padding-top:25px;border-top:1px solid #eee}.detail-title{font-size:14px;font-weight:700;line-height:20px}.detail-title>.pull-right{position:relative;top:-8px}h2.detail-title{margin:0;font-size:15px;font-weight:700}h2.detail-title .label,h2.detail-title .label-id{position:relative;top:-1px}.detail-content{padding:0;margin-top:10px}.detail-content em{font-style:normal;color:#3c4353}.detail-content .list-unstyled>li+li{margin-top:5px}.side-col .detail-content{padding-left:0}details.detail{padding:10px 0}details.detail summary{position:relative;cursor:pointer;outline:0}details.detail summary::-webkit-details-marker{display:none}details.detail summary:after{position:absolute;top:0;right:0;font-family:ZentaoIcon;font-size:18px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;text-transform:none;content:"\e316";opacity:.4;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}details.detail[open] summary:after{content:"\e313"}.files-list{padding-left:0;list-style:none}.files-list>li>a{display:block;line-height:24px}.files-list>li>a>.icon{display:inline-block;margin-right:5px;opacity:.7}.files-list>li>a:hover{color:#0c64eb}.files-list>li>.right-icon{opacity:0;-webkit-transition:opacity .2s;-o-transition:opacity .2s;transition:opacity .2s}.files-list>li:hover>.right-icon{opacity:1}.histories-list{padding-left:15px;margin-bottom:0}.histories-list .btn-mini{position:relative;top:1px}.histories-list>li{position:relative}.histories-list>li+li{margin-top:5px}.histories-list>li strong{color:#3c4353}.histories-list .comment,.histories-list .show-form .comment-edit-form{padding:5px 5px 5px 10px;margin:5px 0 0;background-color:rgba(0,0,0,.025);border:1px solid #eee}.histories-list .btn-edit-comment{position:absolute;top:28px;right:2px}.histories-list .comment-edit-form,.histories-list .show-form .btn-edit-comment,.histories-list .show-form .comment{display:none}.histories-list .show-form .comment-edit-form{display:block;padding:10px;border:1px solid #eee}.histories .btn-mini{width:16px;min-width:16px;height:16px;overflow:hidden;line-height:16px;color:#cbd0db;vertical-align:-8%;border-radius:1px}.histories .btn-mini>.icon{position:relative;top:-2px;left:-2px}.histories .btn-mini:focus,.histories .btn-mini:hover{color:#0c64eb;border-color:#0c64eb}.histories .show-changes .btn-expand>.icon:before{content:"\e926"}.histories .btn-strip{display:none}.histories .show-changes .btn-strip{display:inline-block}.history-changes{display:none;padding:5px;margin-bottom:-5px;margin-left:5px;font-size:12px;line-height:20px}.history-changes blockquote{padding:5px 5px 5px 10px;margin:5px 0 0;font-size:12px;background-color:rgba(0,0,0,.05);border-left:3px solid #eee}.history-changes blockquote.original{display:none}.show-changes .history-changes,.show-original .history-changes blockquote.original{display:block}.show-original .history-changes blockquote.textdiff{display:none}.syntaxhighlighter{overflow:auto}.search-list{min-width:200px;max-width:300px;padding:0}.search-list .search-box{float:none;width:auto;margin:10px}.search-list .search-box .icon-search{opacity:.5}.search-list .list-group{max-height:248px;padding:5px 10px;margin:5px 0}.dropup .search-list .search-box+.list-group{height:171px;padding-top:0}.search-list .search-input{height:30px}.search-list .input-control-icon-right{height:28px;line-height:28px}.list-group{overflow-y:auto}.list-group>a{display:block;padding:2px 10px 2px 5px;overflow:hidden;line-height:20px;text-overflow:ellipsis;white-space:nowrap;border-radius:4px}.list-group>a+a{margin-top:5px}.list-group>a>.icon{display:inline-block;margin-right:3px;opacity:.5}.list-group>a.selected{color:#e9f2fb;background-color:#0c64eb}.list-group>a.active{color:#0c64eb;background-color:#e9f2fb}.list-group>a.active:hover,.list-group>a:hover{color:#fff;background-color:#0c64eb}.list-group>.heading{padding:2px 5px;line-height:20px;color:#838a9d}.list-group>a+.heading{margin-top:4px}.dropup .search-box-sink{padding-top:5px;padding-bottom:45px}.dropup .search-box-sink .search-box{position:absolute;right:10px;bottom:10px;left:10px;margin:0}.dropup .search-box-sink .search-box+.list-group{height:auto;max-height:171px}#dropMenu>.search-box{max-width:188px}#dropMenu .input-control-icon-left{top:0}#dropMenu .list-group{width:199px;max-width:199px;max-height:300px;padding-top:0}#dropMenu .table-row .list-group{margin:0 -10px}#dropMenu .col-right{display:none}#dropMenu .col-left{width:100%}#dropMenu .col-left .list-group{max-height:250px;margin-bottom:35px}#dropMenu .col-footer{position:absolute;bottom:10px;left:10px;width:180px;padding-top:10px;padding-left:5px;margin-top:5px;border-top:1px solid #eee}#dropMenu .col-footer>a{opacity:.8}#dropMenu .col-footer>a:hover{opacity:1}#dropMenu.show-right-col{width:402px;max-width:402px}#dropMenu.show-right-col>.list-group{width:400px;max-width:400px}#dropMenu.show-right-col .col-left,#dropMenu.show-right-col .col-right{display:table-cell;width:50%}#dropMenu.show-right-col .col-left>.list-group{width:200px;max-width:200px;margin-right:0}#dropMenu.show-right-col .col-right{border-left:1px solid #eee}#dropMenu.show-right-col .col-right>.list-group{width:199px;max-height:285px;margin:0}#dropMenu.show-right-col .col-right>.list-group>a{opacity:.7}#dropMenu.show-right-col .col-right>.list-group>a:hover{opacity:1}#dropMenu.show-right-col .toggle-right-col>.icon-angle-right:before{content:"\e314"}.release-path{overflow:hidden}.release-line{display:table;width:100%;padding:0;table-layout:fixed}.release-line>li{display:table-cell;list-style:none}.release-line>li>a{position:relative;display:block}.release-line>li>a:before{position:absolute;left:0;display:block;width:13px;height:13px;content:' ';background:#fff;border:2px solid #838a9d;border-radius:50%}.release-line>li>a:after{position:absolute;left:5px;display:block;width:2px;height:30px;content:' ';background:#cbe0f6}.release-line>li>a>.icon{position:absolute;left:4px;font-size:24px}.release-line>li>a .title{display:block;font-size:14px;white-space:nowrap}.release-line>li>a .date,.release-line>li>a .info{display:block;max-height:18px;overflow:hidden;font-size:12px;color:#838a9d;text-overflow:ellipsis;white-space:nowrap}.release-line>li>a:hover:before{background-color:#e9f2fb}.release-line>li>a:hover:after{background-color:#838a9d}.release-line>li>a:hover .title{color:#0c64eb}.release-line>li>a:hover .date,.release-line>li>a:hover .info{color:#838a9d}.release-line>li:nth-child(odd){padding-top:80px;vertical-align:top}.release-line>li:nth-child(odd)>a{height:85px;padding-top:36px;border-top:5px solid #cbe0f6}.release-line>li:nth-child(odd)>a:before{top:-9px}.release-line>li:nth-child(odd)>a:after{top:6px}.release-line>li:nth-child(odd)>a>.icon{top:-26px}.release-line>li:nth-child(even){padding-bottom:80px;vertical-align:bottom}.release-line>li:nth-child(even)>a{height:85px;padding-bottom:36px;border-bottom:5px solid #cbe0f6}.release-line>li:nth-child(even)>a:before{bottom:-9px}.release-line>li:nth-child(even)>a:after{bottom:6px}.release-line>li:nth-child(even)>a>.icon{bottom:-2px}.release-line>li:last-child>a{border-color:transparent}.release-line>li.active>a:before{border-color:#0c64eb}.release-line>li+li>a>.date,.release-line>li+li>a>.info,.release-line>li+li>a>.title{position:relative;left:-36%}#footer{position:fixed;right:0;bottom:0;left:0;z-index:1010;height:40px;background:#fff;border-top:1px solid #eff1f7}#footer .breadcrumb{padding:10px 0;margin:0}#footer .breadcrumb>li{max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#footer .breadcrumb>.active,#footer .breadcrumb>li>a{color:#838a9e}#footer .breadcrumb>.active:hover,#footer .breadcrumb>li>a:hover{color:#16a8f8}#footer .breadcrumb>li+li:before{content:'>'}#footer>.container{padding:0 20px}@media (min-width:1400px){#footer>.container{padding:0 40px}}#poweredBy{position:absolute;top:4px;right:0;padding:5px 10px}#poweredBy .icon-zentao{color:#0097fd}#poweredBy a{color:#3c4353}#poweredBy a:hover{color:#0c64eb}#poweredBy a:hover .icon-zentao{color:#0c64eb}#poweredBy a.text-important{color:#bd7b46}#poweredBy a.text-important:hover{color:#ff5d5d}#poweredBy a.text-primary{color:#0c64eb}#poweredBy a.text-primary:hover{color:#16a8f8}#poweredBy #aiux{color:#cbd0dc}#noticeBox .alert{-webkit-box-shadow:rgba(0,0,0,.15) 0 3px 10px,rgba(0,0,0,.25) 0 3px 10px;box-shadow:rgba(0,0,0,.15) 0 3px 10px,rgba(0,0,0,.25) 0 3px 10px} \ No newline at end of file From 815b60d9e4a2f71f887a0b5a9e618ba09d2617ca Mon Sep 17 00:00:00 2001 From: wangyidong Date: Tue, 25 Dec 2018 09:05:13 +0800 Subject: [PATCH 039/442] * update zentao-integrated.zip. --- .../www/data/xuanxuan/zentao-integrated.zip | Bin 98290 -> 98170 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/xuanxuan/www/data/xuanxuan/zentao-integrated.zip b/xuanxuan/www/data/xuanxuan/zentao-integrated.zip index 8b5c269dc69699d43d6c4c4ea60f86bd9b75b262..ccc89ce0c3bcde1159b4f04373cfa27d20fc1820 100644 GIT binary patch delta 4323 zcmZ8kcRU;3*G_5|MWl9(Qq-o3+O>%h)Q+MyA+<+U>{**CT1t%C)ZSaow)T$EP&*B3 zYhV4n{eItZ&*ywT=iGbFbDwkny3fIHg7aSlLTwF8x=j>ljEFEIimip(6PMKHj({QqPnO@6UD~7<=RoX^d*p`Wx2NP z%A49Ri|OuBD@5y4l_qlBdJYp{D2|hR_C{c@&MQ6HBO>drh3>=@{~ELI<(33|QN z*!#R)Xe8h3vtN#9$keI9gP(yYBOiXV;gG#Ze=7#j9?kq3^=&0~cj>bud_SGoUdhbN z`T2p>GM649TjaCyeL=_WJ|FmwBx6o$O--v|fbeo^;r3VUXLb{ggWSs0_R(2+94_~c zM7L^^Qw8;sz3pGPg;hny$sD`N8kzLuS2^pfAOfv(ajnmB5r-r1%%Rn}Ldw~%e~Or#rTQ=MjSiEx!-pVr@c zRB-JbS@31;01nvi&y3bK)Y+ahX?1EpC}wobPZH^h;S4WFJf`-_EU5a@+(D*QI|QB! zc9Ky+OmFBgjThMul@aJ8elDZ0cHr*qLb9d|*?e&RHngQpmsgj8ukd$r8QU37QXQj% z(wz`T9CDBV5m4S3Ktc$%5UAOMz&)a5+HS}}miazbQvuomGK};1JZtkNF<<)k!QW{~ z6K28V%URlRY_&8>ki+L@kSi=daD4Vh_}Vy67MRn)f+{b*c;&PIcs#!N$7Dd{t;Z)p!4 z>F)0nw5ES+hqIAbezp5%z!dE8oOgr4HM1TP*Ghych-~O1g?8L|M}GPYad}@t2YY7y z$mvot2uuT&m#966BZ20wn;-)7X#~90d2~amg=>g)++xvf9QK~Sw+BGviy_!MMDk6WhBrBs4i zrFA*boFksjoCf4zdYXw zdMoPVU2>Mc(GhiDZ=EdK_8Vv@fIz}qShA{)cVWW%EzupF^m1Jn3DiqRdOJ~2l1EUn z$`hzmg=`@uXy zf^e->GdKrbJB2JSs?(P*-^zIP`eE(OB%qavgX+DQOE!?YF!@lH5|4%pBNQj;r#&R; zL*^YQScl3DkAKm?EMJ(q+{iQJy=oH!kt#5QbbDQidg40Y+xTHNiMZrAh{n!J6vmt9 zO5K#hB&%UZovb4o0yJDJ?d(my5VcKKJKi66NjxVB6Oa}5<~x-t$uYIkv}EyT{Sm^V zKNYw7_1v5YVNR?4FQqFQYq(|jDjv9Vh2Eeo`hvkXg`-%yLq2XxM?bOCNV$Wyx8rK>VhLO!G)QE0x9aNbaCb`@#=M+{#y`5ZDr!Zn6MasO}pUyr0 z#1E5Y{E9R;(#el!=%@pCOC`IZgcu(?Ho}N_k;{f{H^Km{gWguFsv`O-d?ieQ-=zwZ@lIbSOemU+ zNq;jnk3QE%;*(>}x}NflWIvrU`GyW35g6nh(~mmctphu8Jw=jM`USa8o%Kt z{=MohCe00AF7>eLGY4gQJA^-6eE=3-7?*a_^HK8g;`gP%l}dLa=W#U~-@lJQ+Ri={ zbJ!`77Z!5H(XDmegD1Gy~&`vO{E>pK$#B$KF(v#4Xb08_{gN!k(&*49Cp{lh7!hF88CXRA%8z zU-+CltKjD~Bj)RnV>z^D0x{(AKmAWRFt{5Vyan_`4 zFlYTmZzj_L1AP?fQNdli)7pqbKT~l{404m#Em7%|%z6L^F^%Ha(@2|z$uu2FYuT8e zSEDO^?!nnZH~JL6;}vP&Q7MSE2%KPWzZID{T zQO92?JY}%2k;>Y4ts61q-6?NW0P)L1-@E<#>} ztE+8&$e7%l#z*g6DTwAN7+9tjC0-Dz2-s2>V~#HHl|MTp)Ort-Bjho7Xd5QxYS0Bi z4>P-#*_9}kHji?$_(ra@=aL*{UZRX8<=_cP$bb`q7+;Fv2IX?c;AxNkZ{*9v(9K__ z)DiChto!_8C{qLZR3FNVO>*6#r>$(`*mQBFr@vLvP-aK>SK*)1Kiw^Y?sYJpG!08K z%RS~7%+lC4z@6fF{QzF&lpUo!PfH@xr1!o%vnTj7(j3|Hq>{5=S-XB% zdUq>3RJbbkRTjYKC!)MYHIPyvXvqB>-N3larjhm0iYy$vmCyN1)On%GldV2VXZ~J_ zsOtPNP20njuU7_GbWF%627~-o!Y_+H3hr*9#y4%fi5OYtz{f|`X;f~R zZ!BIi!-irQ4O*91Xv^}(utmACv#)Wwos!x-rXj6cY2E$zEcf_z2#^%Y*eLM_@h@59 z8I2g?vgJVL)-kqydoGms5R#nJ8a*j}T(n`+@9%WHK5V(cwHBNPqyA~QHnm|a?U1`V zbNuYfr?u;EBY}@waA?s8hr>zIhPF9Ajio?NOXA>OW8@TXl;Y!}TTct$2Y2yztjfP- zqaSvA;;cP;M-=qR^*0}7QRvIq|JLV zsO9Q{ma{syxrZAbDrxgqyx5J6p`GV}k+UF?K?LE7)A4L-efPfjh@niZQC!9H(yZ!I zYT6SL<-;c7mLgwfe88K;-#+t7B!oC}XsR{+hKkASH;j%xch$Y1pZ7Q3Z zyAqBD=Z0dVerTtlwwF727=@+d%CRQ_^cn7}gl_*r41zMd$u z-4;pIP;KV(3V(2xvIjo%UVD9IZCoq{v~cxH63ygZ38vvC7*d-rKGJ_e{z$c@x~nEY zFxXkop0D4(;8FAZI9$0$W2(@AlX1;_3XY!)3YL600YzG>=C2t@aZBqOVXY6V;IqZ2 z#J0`5_{-fIkc%!gP1xMGxJxtjp27T|!P+t@UBiB7r|-`j3%0yW5BglnN`gRG*D_R9 zjhTV2DZlyIp*hbEoyFLUp*dy9@`;bt)U!O#98a#u`m0BgSdwYsML_+K)v#gHx|FA@xzWdT%BFz5#_05ldE5 z-mJL=0I)v*0RD*In}9#dK`le;KS4?u1s(n5wf_C%e>Cv_5y&ZZ6x>9A6>Zm6RM@>2at8oqG=bBz8JriTXrvu<6>Y_0#{kS_2N z$ojA5hC+ZhZsYwwM*pD&0FVI4{zd@#tH)>86IfViJyz7wHx@K7CI&CKcr~Y3M`N2XI|3J`PV+dF{y4u+K3OITELHj#m`ua;CFL>p;P*3@>l9sZ7 zi_M?YKeKQI0tIO)sQ`fIR@Tl|_O{oJ2-m-@=}y;&AS!AAz{!Aw=it znP4!31d)8n?|Z-Zt?%Bo&pPYev-aKR{IM4KJz0^_JnNQfMY1y5tL8-9_V38z3YYfAX}-9~XhSvlhdm|*YgNR!vqN&eYSRZ?PpLzu6oHD-Oxl|m0|n&X z3&oV&^0zxLrtug9_Y+EX`>ya0i(y~9?sZyi9LCR#a=K#670+8vy%ym%Y~reHVowfp zo`}Yh&-RDaOIhhd> zstn$?uIQ<)Z7@{uVuzDbGjh}g!*yqvd;QxR6}Pfi6vsVxSO|vle6)v|(u&Bf)E0qA z%a#_cF|50w&>0q@AtbEXb!f*iaNs-2^;WJlrG7vd(@do{ILEOCCBP#VqI`1#q zTG)qzIQL^al~S`$$?=6Tx}(vL+2v6hW%M$h*Q7O@)Z%}cWx&<)r4&y+{3pJ3)Wp2~ z3$$tPo$g<1)+m&=VjuAAD**3gGd?D?yo8Ueo_HkWIh-srqw}=6OxJz?!AGqCDVB5h zZ%AHPia{1<&F7crOQeyGdXai6k0$fG>V5?s*$3a;)8BfTyYXS>^9+uZp9)2V8BCE6 z{!;7j-EtaG^`;As$NSP= zbLR!((zI3KDe*k6CaH$MY0RkSDJYqAlIt`_=8p2&XrQYPRJ*n`-EJdxcQ;ygFV`R3 zsFWXK8Pl)B3^)59LJ-hKI|uEarS25d2M#38^Zj)qASD_L!E3{%bq$ydOa|q*N|3o5!iEE{%-?rI~(5TH)f3- zn`5jG(pBUC#;U+4U}^SbnS;c4$P-<9C4skIEA3-4W(P;Obmcuh(o3ZrgOOiW^;cdJ ze$`H>#7(}7>;!J4hYnEfqY{8yR11suUMPrm%FVC9xvN(fNp5~DfbUX+h6bZ;9(DJ7 zj~t5pErmlB+Vc1)7mk}$C%v^B|{G>_K?_)9H6v2-9rVLt6<7!N3BOU!H-0tw3dtS2s8+$loM zjmw1}RppQrnNq4*-?tC)*~C$1Ub%nKKp9D5Vo%t56-WCBRscpl_40oDrR4S@oJ)+7 zF8KX?mxeN_`eOb4Bll-&KTmpBi?%_>Ly~O%qd0l?eTHrlm}x{cEsb_?_Kk;EsYd%p z+x2ru{kD+f)N5Y08*AmD8YmYTE0%&>@eCdaeFEs+W%p3u`dl&>(vi;gkoEc3eUk!+ zpS`VD4H=ckmF0F^$@KpIh8IW?xyN=z#Cl+##vj(z%ZymOfYG$Q|AIv@lu&c^yv>Qy zAcz}KN`w^+x0t6@+hGXHn31kUfT7%iEHg%$?@Ik8O*Ec7FR?$d3db!$U*TxS2PgI! zx3X6-lUq$Pam9*#VjvP)Uajr2HDSHn>vn`j&Xl=B`d_LQ#A@k&cub9eGHeUdW$Mjq z$4X?FlcK#evq|3uBD|8%&t91asViVgtm*`FgP;8MZ5NgMw=i4vrYQ83VP7E7j>Yw( zdhXZn*({K5=@?hP?cxCZ_jkS_061EjmF^LLleLW@_L;I$T@mw@3&V(x>qe5J%i^$< zWPi4#NqA*QYra&}b(@ixOmG0=qVk|ehupL?apAQI1<;-}T{-pK`>-WEY?e^Ah3#jX zPLRSQyHF!ek~ks*na$Lt*WjT`>KcI_m?J@;RFKG}*pn9(vve`@SkHYE&dlFp4#embNV$+fgL#yCMd9dp2e!Pl{mT~C#=6pS9*#O1q%w} znIm}dULK4a!HUC|bIVW0e%vQtyY4C!CSRB(5YKNVF40@W9CGXutJ%Wy z5jjrrvE~V76(d&`W_OF>WZ>`EN$jfLJr$DKmgiIB?YCfBmvJ%1wE1z=76uCJLJ7d^ zKK2Jvb)|}=RNY9{laCSAD-S?Cytkg%I?u_c2<}w97;6w@E{|gC3USM9Rq{K%&gRy6 z!RmCESN`sPZY`g|3oYI#H@Z}D0aFGotTpc(1A_uWm!kVUfK!qO{#2yB>X*eNU0x*1 zkAYsaLyf_;aVOfmq%h{aO_wjXkswYKua^8NX{AbC_WIQnm=#Lh#$C}T(J5^u@59Mo z7|9w;y4wFH{E|9l4K}qG_{?hmwRIfF8iu}{!G0}3d;XbHLXXNPEfiah$ zdrIF2Y^O6+%ZCsyanC)tgd)4{5>v2N#br$+z@j~UrTnY#QcWh}iW_bRs2$lZe zT&N+R!S)e;10|ybeVu0Ys$0W6M+YN7?>Pt)oLF8_3gQXYLW39Kpk;H3{_v%rtv?9< zKTM~%WpamyU&VNO%rw)}-%&OBUQDKGFoSiZp&2qN9^GD=UXY88e|$+G6#9lv;Rx@S zJ)h&fossaYc&#tf1;^yRWS|vfCT}`Nd@iOmGS*$ska2iSB<|fO;7)-@RRt!G&|Z)x zhZl1aT2`I!1FjAz$lRFI*p}maurlbSKUr{R=~Av}L4YezO+(h}HrJTD1`uV_FDp8> z8%D_Ezb{^CA=8R-8ywyf@6tzil1oKHCop?9*KkaVk3%VS8g6I;cy1qs;CUHm9g^ZQ zVmgz(PHy|Gm}Yl2BIGQNJiO6`b23XsN%knSOsw@pB%UGs@@IcyK}a&eYX{trs3hzs zzU@}4rA!eq>!7{s4n`cLDrH(2@{dwTOJeEABi@VMk$ALmbLu%H!%{|dTo{$Wp)9CS z1!p~z*wt9eq7+cJ)yrMbQ10AT(p_f0(7{@D%_J1U2&UzPTC-QQFD*F}NmajIo-!5) zj(be0*&556xHW}VpN+E1Om%Ix5et}}1(@HS+1oLhrhjuUwvFe?Rb_ha?+ln-+ea=o zV!!DoNLw2_2=SG6LU@%pgRBrl^Vw9R8tzK@CTN6E?Y7Hyhn1ndRkwFXi*R1Z=XPSe z4*qeRomIGf$~kwOaj;U!D|BQ~byMX0IX)~H)V;8+N%;wxL+aF5-k2=NpVDwwq0%Fi zJ;V1qLc^)iBBW8VE3;-&m~9T*+Ov^f(##3Q`+b>wqBy^b@@(kx-Z4-6p#e4Rfus80 zgMQG`rW;JC06wsC&t1n~72rpw6n(bXd?WHom4` zFWuf7u|P-p$jH@wOAs9QaDovybo#pt`*A{bb(n=xRJR_N+C$Hjbu*@^xgouh(@&in zRx~tJm(i5YLpn!=BwuxY=5l=vNQe>?yrt0&Cb|_R@0nSmUGHhRB$;Xl*SJW+g~(G1ND+$ zS9X39sY=uDUwT-A=Wbbp3kJJzTxA-F2ugP;!-u<=Nyf*PmwA%y2Mp^i5`@N$#3UNj z6~k^H1XkUvj1Z~4xf!@vH;K+!AH2J)y-;XWY3H3Tg*$MeZ&DTLTTLxe45YV??wk$g z&CY(45IOI}f>;+$=!kGDTX(J~Y@X5yU6r1DVvRUnijGZVt*26iH?Tr%wuhJK3oda7 zH};8LCjBw99SfR=Q?xxvPM`LI!}DN${&_g&`O(n%igyqTy@Us1-JlG;$;oLhn(`}+ zVP>mYPs?(bQ`WfG8Ue;_mLsF#!14XwLw-xkDMVa-XA$RN$8?Gh#nt0#F0{V8Ye-9g z>(FAM3*&*=ox`v2h5obJri67H4!-3bjLC62XHOJ#7VmKVGrH@^fkNHxGp@+vJU(m! zB{N_Oz98Yb`N-9^PP(T*%mQ7NFK_UrR~R=j#3nXn1OP{97^;$bg^qjb`~{OftF3TW zlA_D$cD_H>A9eG2KVQIJcd_#!3=KrI{ghyeok&X32~&nM&B}I{)X66$n%oK0&}nq- z<+%EAIX4sCT!@6N8e9c7H41q$6Zn6AqyY~ug7EWz2 zdMukpl@d?%G(4b zqWjjJu=Uv*M)VoB&sd*~JZfmYPy_@349Nfhe_S^u;LlnK%s2c`@=wTS1kpqOct2SgNf*0VaUS>AUo9ew`O~LLv>9fGiz}R zYjVJ!?mzh7?tecIkP?wVc3=(CAQH&-UyVrbNT3MVnhpRky{oQecvsB(@gIiYs*&}P zKyelXJpl03!O7FX)mhBL-{;9c^ho^gLxvf#QtT5kP?VW0`;H{tRvp2Qra@BZ0r)_ Date: Tue, 25 Dec 2018 13:02:09 +0800 Subject: [PATCH 040/442] * Finish task #5167. --- module/doc/control.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/doc/control.php b/module/doc/control.php index 4deb163d97..a88eb8528d 100644 --- a/module/doc/control.php +++ b/module/doc/control.php @@ -173,7 +173,7 @@ class doc extends control $this->view->breadTitle = $title; $this->view->libID = $libID; $this->view->moduleID = $moduleID; - $this->view->modules = $this->doc->getDocMenu($libID, $moduleID, $orderBy == 'title_asc' ? 'name_asc' : 'id_desc', $browseType); + $this->view->modules = $this->doc->getDocMenu($libID, $moduleID, '`order`', $browseType); $this->view->docs = $this->doc->getDocsByBrowseType($libID, $browseType, $queryID, $moduleID, $sort, $pager); $this->view->attachLibs = $attachLibs; $this->view->users = $this->loadModel('user')->getPairs('noletter'); From be7391f64311ab917e3362c391355744c6c6b561 Mon Sep 17 00:00:00 2001 From: Catouse Date: Tue, 25 Dec 2018 13:56:22 +0800 Subject: [PATCH 041/442] * fix close button not show when open datetimepicker panel by update zui. --- www/js/zui/min.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/www/js/zui/min.js b/www/js/zui/min.js index 78bf45e284..9bee2af512 100644 --- a/www/js/zui/min.js +++ b/www/js/zui/min.js @@ -1,5 +1,5 @@ /*! - * ZUI: Zentao template - v1.8.1 - 2018-12-18 + * ZUI: Zentao template - v1.8.1 - 2018-12-25 * http://zui.sexy * GitHub: https://github.com/easysoft/zui.git * Copyright (c) 2018 cnezsoft.com; Licensed MIT @@ -75,4 +75,4 @@ function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"= * Binny V A, http://www.openjs.com/scripts/events/keyboard_shortcuts/ */ function(t){function e(e){if("string"==typeof e.data){var i=e.handler,n=e.data.toLowerCase().split(" ");e.handler=function(e){if(this===e.target||!/textarea|select/i.test(e.target.nodeName)&&"text"!==e.target.type){var o="keypress"!==e.type&&t.hotkeys.specialKeys[e.which],s=String.fromCharCode(e.which).toLowerCase(),a="",r={};e.altKey&&"alt"!==o&&(a+="alt+"),e.ctrlKey&&"ctrl"!==o&&(a+="ctrl+"),e.metaKey&&!e.ctrlKey&&"meta"!==o&&(a+="meta+"),e.shiftKey&&"shift"!==o&&(a+="shift+"),o?r[a+o]=!0:(r[a+s]=!0,r[a+t.hotkeys.shiftNums[s]]=!0,"shift+"===a&&(r[t.hotkeys.shiftNums[s]]=!0));for(var l=0,h=n.length;l","/":"?","\\":"|"}},t.each(["keydown","keyup","keypress"],function(){t.event.special[this]={add:e}})}(jQuery),function(t){"use strict";function e(e,i){if(e===!1)return e;if(!e)return i;e===!0?e={add:!0,"delete":!0,edit:!0,sort:!0}:"string"==typeof e&&(e=e.split(","));var n;return t.isArray(e)&&(n={},t.each(e,function(e,i){t.isPlainObject(i)?n[i.action]=i:n[i]=!0}),e=n),t.isPlainObject(e)&&(n={},t.each(e,function(e,i){i?n[e]=t.extend({type:e},a[e],t.isPlainObject(i)?i:null):n[e]=!1}),e=n),i?t.extend(!0,{},i,e):e}function i(e,i,n){return i=i||e.type,t(n||e.template).addClass("tree-action").attr(t.extend({"data-type":i,title:e.title||""},e.attr)).data("action",e)}var n="zui.tree",o=0,s=function(e,i){this.name=n,this.$=t(e),this.getOptions(i),this._init()},a={sort:{template:''},add:{template:''},edit:{template:''},"delete":{template:''}};s.DEFAULTS={animate:null,initialState:"normal",toggleTemplate:''},s.prototype.add=function(e,i,n,o,s){var a,r=t(e),l=this.options;if(r.is("li")?(a=r.children("ul"),a.length||(a=t("
    "),r.append(a),this._initList(a,r))):a=r,a){var h=this;t.isArray(i)||(i=[i]),t.each(i,function(e,i){var n=t("
  • ").data(i).appendTo(a);void 0!==i.id&&n.attr("data-id",i.id);var o=l.itemWrapper?t(l.itemWrapper===!0?'
  • ').append(i(h.add,"add",h.add.templateInList)).appendTo(n)}h.sort&&n.sortable(t.extend({dragCssClass:"tree-drag-holder",trigger:".sort-handler",selector:"li:not(.tree-action-item)",finish:function(t){r.callEvent("action",{action:h.sort,$list:n,target:t.target,item:a})}},h.sort.options,t.isPlainObject(this.options.sortable)?this.options.sortable:null))}o&&(o.hasClass("open")||a&&a.open)&&o.addClass("open in")},s.prototype._initItem=function(n,o,s,a){if(void 0===o){var r=n.prev("li");o=r.length?r.data("idx")+1:1}if(s=s||n.closest("ul"),n.attr("data-idx",o).removeClass("tree-single-item"),!n.data("id")){var l=o;s.hasClass("tree")||(l=s.parent("li").data("id")+"-"+l),n.attr("data-id",l)}n.hasClass("active")&&s.parent("li").addClass("has-active-item"),a=a||n.data();var h=e(a.actions,this.actions);if(h){var c=n.find(".tree-actions");c.length||(c=t('
    ').appendTo(this.options.itemWrapper?n.find(".tree-item-wrapper"):n),t.each(h,function(t,e){e&&c.append(i(e,t))}))}var d=n.children("ul");d.length&&this._initList(d,n,o,a)},s.prototype._init=function(){var i=this.options,s=this;this.actions=e(i.actions),this.$.addClass("tree"),i.animate&&this.$.addClass("tree-animate"),this._initList(this.$);var a=i.initialState,r=t.zui&&t.zui.store&&t.zui.store.enable;r&&(this.selector=n+"::"+(i.name||"")+"#"+(this.$.attr("id")||o++),this.store=t.zui.store[i.name?"get":"pageGet"](this.selector,{})),"preserve"===a&&(r?this.isPreserve=!0:this.options.initialState=a="normal"),this.reload(i.data),r&&(this.isPreserve=!0),"expand"===a?this.expand():"collapse"===a&&this.collapse(),this.$.on("click",'.list-toggle,a[href="#"],.tree-toggle',function(e){var i=t(this),n=i.parent("li");s.callEvent("hit",{target:n,item:n.data()}),s.toggle(n),i.is("a")&&e.preventDefault()}).on("click",".tree-action",function(){var e=t(this),i=e.data();if(i.action&&(i=i.action),"sort"!==i.type){var n=e.closest("li:not(.tree-action-item)");s.callEvent("action",{action:i,target:this,$item:n,item:n.data()})}})},s.prototype.preserve=function(e,i,n){if(this.isPreserve)if(e)i=i||e.data("id"),n=void 0===n&&e.hasClass("open"),n?this.store[i]=n:delete this.store[i],this.store.time=(new Date).getTime(),t.zui.store[this.options.name?"set":"pageSet"](this.selector,this.store);else{var o=this;this.store={},this.$.find("li").each(function(){o.preserve(t(this))})}},s.prototype.expand=function(t,e,i){t?(t.addClass("open"),!e&&this.options.animate?setTimeout(function(){t.addClass("in")},10):t.addClass("in")):t=this.$.find("li.has-list").addClass("open in"),i||this.preserve(t),this.callEvent("expand",t,this)},s.prototype.show=function(e,i,n){var o=this;e.each(function(){var e=t(this);if(o.expand(e,i,n),e)for(var s=e.parent("ul");s&&s.length&&!s.hasClass("tree");){var a=s.parent("li");a.length?(o.expand(a,i,n),s=a.parent("ul")):s=!1}})},s.prototype.collapse=function(t,e,i){t?!e&&this.options.animate?(t.removeClass("in"),setTimeout(function(){t.removeClass("open")},300)):t.removeClass("open in"):t=this.$.find("li.has-list").removeClass("open in"),i||this.preserve(t),this.callEvent("collapse",t,this)},s.prototype.toggle=function(t){var e=t&&t.hasClass("open")||t===!1||void 0===t&&this.$.find("li.has-list.open").length;this[e?"collapse":"expand"](t)},s.prototype.getOptions=function(e){this.options=t.extend({},s.DEFAULTS,this.$.data(),e),null===this.options.animate&&this.$.hasClass("tree-animate")&&(this.options.animate=!0)},s.prototype.toData=function(e,i){t.isFunction(e)&&(i=e,e=null),e=e||this.$;var n=this;return e.children("li:not(.tree-action-item)").map(function(){var e=t(this),o=e.data();delete o["zui.droppable"];var s=e.children("ul");return s.length&&(o.children=n.toData(s)),t.isFunction(i)?i(o,e):o}).get()},s.prototype.callEvent=function(e,i){var n;return t.isFunction(this.options[e])&&(n=this.options[e](i,this)),this.$.trigger(t.Event(e+"."+this.name,i)),n},t.fn.tree=function(e,i){return this.each(function(){var o=t(this),a=o.data(n),r="object"==typeof e&&e;a||o.data(n,a=new s(this,r)),"string"==typeof e&&a[e](i)})},t.fn.tree.Constructor=s,t(function(){t('[data-ride="tree"]').tree()})}(jQuery),function(t){"use strict";var e="zui.colorPicker",i='
    ',n={zh_cn:{errorTip:"不是有效的颜色值"},zh_tw:{errorTip:"不是有效的顏色值"},en:{errorTip:"Not a valid color value"}},o=function(i,n){this.name=e,this.$=t(i),this.getOptions(n),this.init()};o.DEFAULTS={colors:["#00BCD4","#388E3C","#3280fc","#3F51B5","#9C27B0","#795548","#F57C00","#F44336","#E91E63"],pullMenuRight:!0,wrapper:"btn-wrapper",tileSize:30,lineCount:5,optional:!0,tooltip:"top",icon:"caret-down",updateBtn:"auto"},o.prototype.init=function(){var e=this,n=e.options,o=e.$,s=o.parent(),a=!1;s.hasClass("colorpicker")?e.$picker=s:(e.$picker=t(n.template||i),a=!0),e.$picker.addClass(n.wrapper).find(".cp-title").toggle(void 0!==n.title).text(n.title),e.$menu=e.$picker.find(".dropdown-menu").toggleClass("pull-right",n.pullMenuRight),e.$btn=e.$picker.find(".btn.dropdown-toggle"),e.$btn.find(".ic").addClass("icon-"+n.icon),n.btnTip&&e.$picker.attr("data-toggle","tooltip").tooltip({title:n.btnTip,placement:n.tooltip,container:"body"}),o.attr("data-provide",null),a&&o.after(e.$picker),e.colors={},t.each(n.colors,function(i,n){if(t.zui.Color.isColor(n)){var o=new t.zui.Color(n);e.colors[o.toCssStr()]=o}}),e.updateColors(),e.$picker.on("click",".cp-tile",function(){e.setValue(t(this).data("color"))});var r=function(){var i=o.val(),s=t.zui.Color.isColor(i);o.parent().toggleClass("has-error",!(s||n.optional&&""===i)),s?e.setValue(i,!0):n.optional&&""===i?o.tooltip("hide"):o.is(":focus")||o.tooltip("show",n.errorTip)};o.is("input:not([type=hidden])")?(n.tooltip&&o.attr("data-toggle","tooltip").tooltip({trigger:"manual",placement:n.tooltip,tipClass:"tooltip-danger",container:"body"}),o.on("keyup paste input change",r)):o.appendTo(e.$picker),r()},o.prototype.addColor=function(e){e instanceof t.zui.Color||(e=new t.zui.Color(e));var i=e.toCssStr(),n=this.options;this.colors[i]||(this.colors[i]=e);var o=t('
    ',{titile:e}).data("color",e).css({color:e.contrast().toCssStr(),background:i,"border-color":e.luma()>.43?"#ccc":"transparent"}).attr("data-color",i);this.$menu.append(t("
  • ").css({width:n.tileSize,height:n.tileSize}).append(o)),n.optional&&this.$menu.find(".cp-tile.empty").parent().detach().appendTo(this.$menu)},o.prototype.updateColors=function(e){var i=(this.$picker,this.$menu.children("li:not(.heading)").remove()),n=this.options,e=e||this.colors,o=this,s=0;if(t.each(e,function(t,e){o.addColor(e),s++}),n.optional){var a=t('
  • ').css({width:n.tileSize,height:n.tileSize});this.$menu.append(a),s++}i.css("width",Math.min(s,n.lineCount)*n.tileSize+6)},o.prototype.setValue=function(e,i){var n=this,o=n.options,s=n.$btn;n.$menu.find(".cp-tile.active").removeClass("active");var a="",r=o.updateBtn;if("auto"===r){var l=s.find(".color-bar");r=!l.length||function(t){l.css("background",t||"")}}if(e){var h=new t.zui.Color(e);a=h.toCssStr().toLowerCase(),r&&(t.isFunction(r)?r(a,s,n):s.css({background:a,color:h.contrast().toCssStr(),borderColor:h.luma()>.43?"#ccc":a})),n.colors[a]||n.addColor(h),i||n.$.val().toLowerCase()===a||n.$.val(a).trigger("change"),n.$menu.find('.cp-tile[data-color="'+a+'"]').addClass("active"),n.$.tooltip("hide"),n.$.trigger("colorchange",h)}else r&&(t.isFunction(r)?r(null,s,n):s.attr("style",null)),i||""===n.$.val()||n.$.val(a).trigger("change"),o.optional&&n.$.tooltip("hide"),n.$menu.find(".cp-tile.empty").addClass("active"),n.$.trigger("colorchange",null);o.updateBorder&&t(o.updateBorder).css("border-color",a),o.updateBackground&&t(o.updateBackground).css("background-color",a),o.updateColor&&t(o.updateColor).css("color",a),o.updateText&&t(o.updateText).text(a)},o.prototype.getOptions=function(e){var i=t.extend({},o.DEFAULTS,this.$.data(),e);"string"==typeof i.colors&&(i.colors=i.colors.split(","));var s=(i.lang||t.zui.clientLang()).toLowerCase();i.errorTip||(i.errorTip=n[s].errorTip),t.fn.tooltip||(i.btnTip=!1),this.options=i},t.fn.colorPicker=function(i){return this.each(function(){var n=t(this),s=n.data(e),a="object"==typeof i&&i;s||n.data(e,s=new o(this,a)),"string"==typeof i&&s[i]()})},t.fn.colorPicker.Constructor=o,t(function(){t('[data-provide="colorpicker"]').colorPicker()})}(jQuery),function(t,e){function i(t){return t===e&&(t=n+=1),o[t%o.length]}var n=0,o=["#00a9fc","#ff5d5d","#fdc137","#00da88","#7ec5ff","#8666b8","#bd7b46","#ff9100","#ff3d00","#f57f17","#00e5ff","#00b0ff","#2979ff","#3d5afe","#651fff","#d500f9","#f50057","#ff1744"];jQuery.fn.tableChart=function(){t(this).each(function(){var e=t(this),n=e.data(),o=n.chart||"pie",s=t(n.target);if(s.length){var a=null;if("pie"===o){n=t.extend({scaleShowLabels:!0,scaleLabel:"<%=label%>: <%=value%>"},n);var r=[],l=e.find("tbody > tr").each(function(e){var n=t(this),o=i();n.attr("data-id",e).find(".chart-color-dot").css("background",o),r.push({label:n.find(".chart-label").text(),value:parseInt(n.find(".chart-value").text()),color:o,id:e})});r.length>1?n.scaleLabelPlacement="outside":1===r.length&&(n.scaleLabelPlacement="inside",r.push({label:"",value:r[0].value/2e3,color:"#fff",showLabel:!1})),a=s.pieChart(r,n),s.on("mousemove",function(t){var e=a.getSegmentsAtEvent(t);l.removeClass("active"),e.length&&l.filter('[data-id="'+e[0].id+'"]').addClass("active")})}else if("bar"===o){var h=i(),c=[],d={label:e.find("thead .chart-label").text(),color:h,data:[]},l=e.find("tbody > tr").each(function(e){var i=t(this);c.push(i.find(".chart-label").text()),d.data.push(parseInt(i.find(".chart-value").text())),i.find(".chart-color-dot").css("background",h)}),r={labels:c,datasets:[d]};c.length&&(n.barValueSpacing=5),a=s.barChart(r,n)}else if("line"===o){var h=i(),c=[],d={label:e.find("thead .chart-label").text(),color:h,data:[]},l=e.find("tbody > tr").each(function(e){var i=t(this);c.push(i.find(".chart-label").text()),d.data.push(parseInt(i.find(".chart-value").text())),i.find(".chart-color-dot").css("background",h)}),r={labels:c,datasets:[d]};c.length&&(n.barValueSpacing=5),a=s.lineChart(r,n)}null!==a&&e.data("zui.chart",a)}})},t(".table-chart").tableChart();var s=function(i,n){var o=t(i);if(!o.data("initProgressPie")){o.data("initProgressPie",1);var s=o.is("canvas")?o:o.find("canvas"),a=t.extend({value:0,color:t.getThemeColor("primary")||"#006af1",backColor:t.getThemeColor("pale")||"#E9F2FB",doughnut:!0,doughnutSize:85,width:20,height:20,showTip:!1,name:"",tipTemplate:"<%=value%>%",animation:"auto",realValue:parseFloat(o.find(".progress-value").text())},n,o.data()),r=s.length;r||(s=t("").appendTo(o)),s.attr("width")!==e?a.width=s.attr("width"):s.attr("width",a.width),s.attr("height")!==e?a.height=s.attr("height"):s.attr("height",a.height),r||8!=t.zui.browser.ie||G_vmlCanvasManager.initElement(s[0]),"auto"===a.animation&&(a.animation=a.width>30),a.value=Math.max(0,Math.min(100,a.value)),o.addClass("progress-pie-"+a.width);var l=[{value:a.value,label:a.name,color:a.color,circleBeginEnd:!0},{value:100-a.value,label:"",color:a.backColor}];s[a.doughnut?"doughnutChart":"pieChart"](l,t.extend({segmentShowStroke:!1,animation:a.animation,showTooltips:a.showTip,tooltipTemplate:a.tipTemplate,percentageInnerCutout:a.doughnutSize,reverseDrawOrder:!0,animationEasing:"easeInOutQuart",onAnimationProgress:a.realValue?function(t){o.find(".progress-value").text(Math.floor(a.realValue*t))}:e,onAnimationComplete:a.realValue?function(t){o.find(".progress-value").text(a.realValue)}:e},a.chartOptions))}};jQuery.fn.progressPie=function(e){t(this).each(function(){var i=t(this);if(!i.closest(".hidden").length){var n=i.closest(".tab-pane");n.length&&!n.hasClass("active")?t('[data-toggle="tab"][data-target="#'+n.attr("id")+'"]').one("shown.zui.tab",function(){s(i,e)}):s(this,e)}})},t(function(){t(".table-chart").tableChart();var e=t(".progress-pie");e.length>100?setTimeout(function(){e.progressPie()},1e3):e.progressPie()})}(jQuery,void 0),function(t){jQuery.fn.sparkline=function(e){t(this).each(function(){var i=t(this),n=t.extend({values:i.attr("values"),width:i.width()-4,height:i.height()-4},i.data(),e),o=n.height,s=[],a=n.width,r=n.values.split(","),l=0;for(var h in r){var c=parseFloat(r[h]);NaN!=c&&(s.push(c),l=Math.max(c,l))}var d=(Math.min(l,30),Math.min(a,Math.max(10,s.length*a/30))),u=i.children("canvas");u.length||(i.append(''),u=i.children("canvas")),u.attr("width",d).attr("height",o);var p={labels:s,datasets:[{fillColor:t.getThemeColor("pale")||"rgba(0,0,255,0.05)",strokeColor:t.getThemeColor("primary")||"#0054EC",pointColor:t.getThemeColor("secondary")||"rgba(255,136,0,1)",pointStrokeColor:"#fff",data:s}]},f={animation:!0,scaleOverride:!0,scaleStepWidth:Math.ceil(l/10),scaleSteps:10,scaleStartValue:0,showScale:!1,showTooltips:!1,pointDot:!1,scaleShowGridLines:!1,datasetStrokeWidth:1},g=t(u).lineChart(p,f);i.data("sparklineChart",g)})},t(function(){t(".sparkline").sparkline()})}(jQuery),function(t){t(function(){t.fn.fixedDate=function(){return t(this).each(function(){var e=t(this).attr("autocomplete","off");"0000-00-00"==e.val()&&e.focus(function(){"0000-00-00"==e.val()&&e.val("").datetimepicker("update")}).blur(function(){""==e.val()&&e.val("0000-00-00")})})};var e={language:t("html").attr("lang"),weekStart:1,todayBtn:1,autoclose:1,todayHighlight:1,startView:2,forceParse:0,showMeridian:1,format:"yyyy-mm-dd hh:ii",startDate:"1970-1-1"},i=t.extend({},e,{minView:2,format:"yyyy-mm-dd"}),n=t.extend({},e,{startView:1,minView:0,maxView:1,format:"hh:ii"});t(".datepicker-wrapper").click(function(){t(this).find(".form-date, .form-datetime, .form-time").datetimepicker("show").focus()}),window.datepickerOptions=e,t.fn.datepicker=function(e){return this.datetimepicker(t.extend({},i,e))},t.fn.timepicker=function(e){return this.datetimepicker(t.extend({},n,e))},t.fn.datepickerAll=function(){return this.find(".form-datetime").fixedDate().datetimepicker(e),this.find(".form-date").fixedDate().datepicker(),this.find(".form-time").fixedDate().timepicker(),this},t("body").datepickerAll()})}(jQuery),function(t){var e=function(e,i){i=t.extend({idStart:0,idEnd:9,chosen:!0,datetimepicker:!0,colorPicker:!0,hotkeys:!0},i,e.data());var n=e.find(".template");!n.length&&i.template&&(n=t(i.template));var o=0,s=0,a=function(t){t.is("select.chosen")?t.next(".chosen-container").find("input").focus():t.focus()},r=function(t){var i=e.find("[data-ctrl-index]:focus,.chosen-container-active").first();if(i.length){if(i.is(".chosen-container-active")){if(i.hasClass("chosen-with-drop")&&("down"===t||"up"===t))return;i=i.prev("select.chosen")}var n=i.data("ctrlIndex"),r=i.closest("tr").data("row");"down"===t?r0?r-=1:r=s-1:"left"===t?n>0?n-=1:n=o-1:"right"===t&&(n").html(a);return r.attr("data-row",e).addClass(n.attr("class")).removeClass("template"),i.rowCreator&&i.rowCreator(r,e,i),o?o.after(r):h.append(r),c(r),r};t.extend(l,{createRow:u,template:d});for(var p=i.idStart;p<=i.idEnd;++p)u(p)}else c(e);e.on("click",".btn-copy",function(){var e=t(this),i=t(e.data("copyFrom")).val(),n=t(e.data("copyTo")).val(i).addClass("highlight");setTimeout(function(){n.removeClass("highlight")},2e3)}),i.hotkeys&&t(document).on("keydown",function(t){var e={"Ctrl+#37":"left","Ctrl+#39":"right","#38":"up","#40":"down","Ctrl+#38":"up","Ctrl+#40":"down"},i=[];t.ctrlKey&&i.push("Ctrl"),i.push("#"+t.keyCode);var n=e[i.join("+")];n&&(r(n),t.ctrlKey&&(t.stopPropagation(),t.preventDefault()))}),e.data("zui.batchActionForm",l)};t.fn.batchActionForm=function(i){return this.each(function(){e(t(this),i)})}}(jQuery),function(t,e){"use strict";var i="zui.table",n={zh_cn:{selectedItems:"已选择 {0} 项",attrTotal:"{0}总计 {1}"},zh_tw:{selectedItems:"已选择 {0} 项",attrTotal:"{0}总计 {1}"},en:{selectedItems:"Seleted {0} items",attrTotal:"{0} total {1}"}},o=/^((?!chrome|android).)*safari/i.test(navigator.userAgent),s=function(e,o){var a=this;a.name=i;var r=a.$=t(e);o=a.options=t.extend({},s.DEFAULTS,this.$.data(),o);var l=o.lang||"zh_cn";a.lang=t.isPlainObject(l)?t.extend(!0,{},n[l.lang||t.zui.clientLang()],l):n[l],r.attr("id")||(r.attr("id","table-"+t.zui.uuid()),o.hot&&console.warn("ZUI: table hot replace id not defined, the element id attribute should be set.")),r.attr("data-ride")||r.attr("data-ride","table"),a.getTable().find("thead>tr>th").each(function(){var e=t(this);if(!e.attr("title")){var i=t.trim(e.find("a").text()||e.text()||"");i.length&&e.attr("title",i)}}),o.checkable&&(r.on("click",".check-all",function(){a.checkAll(!t(this).hasClass("checked"))}).on("click","tbody>tr",function(e){t(e.target).closest('.btn,a,.not-check,.form-control,input[type="text"],.chosen-container').length||a.checkRow(t(this))}).on("click",'tbody input[type="checkbox"],tbody label[for]',function(e){e.stopPropagation();var i=t(this);i.is("label")&&(i=i.closest(".checkbox-primary").find('input[type="checkbox"]')),a.checkRow(i.closest("tr"),i.is(":checked"))}),o.selectable&&r.selectable(t.extend({},{selector:a.isDataTable?".fixed-left tbody>tr":"tbody>tr",selectClass:"",trigger:".c-id",clickBehavior:"multi",listenClick:!1,select:function(e){a.checkRow(e.target,!0),t.cookie("ajax_dragSelected")||(t.cookie("ajax_dragSelected","on",{expires:config.cookieLife,path:config.webRoot}),t.ajaxSendScore("dragSelected"))},unselect:function(t){a.checkRow(t.target,!1)},rangeStyle:{border:"1px solid #006af1",backgroundColor:"rgba(50,128,252,0.2)",borderRadius:"2px"}},t.isPlainObject(o.selectable)?o.selectable:null)));var h=a.$form=r.is("form")?r:r.find("form");h.length&&(o.ajaxForm?h.ajaxForm(t.isPlainObject(o.ajaxForm)?o.ajaxForm:null):h.on("click","[data-form-action]",function(){h.attr("action",t(this).data("formAction")).submit()})),(o.fixFooter||o.fixHeader)&&(a.pageFooterHeight=t("#footer").outerHeight(),a.updateFixUI(),t(window).on("scroll resize",function(){a.updateFixUI()}).on("sidebar.toggle",function(){setTimeout(function(){a.updateFixUI()},200)})),o.group&&(r.on("click",".group-toggle",function(){a.toggleRowGroup(t(this).closest("tr").data("id"))}),t(document).on("click",".group-collapse-all",function(){a.toggleGroups(!1)}).on("click",".group-expand-all",function(){a.toggleGroups(!0)})),a.defaultStatistic=r.find(".table-statistic").html(),a.updateStatistic(),a.initModals(),a.checkItems={},a.updateCheckUI()};s.prototype.reload=function(e){var i=this,n=i.options,o=n.replaceId;if(!o)return e&&e();"self"===o&&(o=i.$.attr("id"));var s=t("
    ");i.$.addClass("load-indicator loading"),s.load(window.location.href+" #"+o,function(){i.$.empty().html(s.children().html()).removeClass("load-indicator loading"),i.$.trigger("beforeTableReload"),i.updateStatistic(),i.initModals(),i.$.datepickerAll();var o=i.$.find("tbody>tr"),a=!1;t.each(i.checkItems,function(t,e){e&&(i.checkRow(o.filter('[data-id="'+t+'"]'),!0,!0),a=!0)}),a&&i.updateCheckUI(),i.$.trigger("tableReload");var r=t("#mainMenu>.btn-toolbar>.btn-active-text>.label");r.length&&r.text(i.getTable().find("tbody:first>tr:not(.table-children)").length),i.$.find('[data-ride="pager"]').pager(),e&&e(),n.afterReload&&n.afterReload()})},s.prototype.initModals=function(){var e=this,i=e.options,n=e.$.find(i.iframeModalTrigger);if(n.length){var o={type:"iframe",onHide:i.replaceId?function(){var n=t.cookie("selfClose");(1==n||i.hot)&&(t("#triggerModal").data("cancel-reload",1),e.reload(function(){t.cookie("selfClose",0)}))}:null};n.modalTrigger(o)}},s.prototype.getTable=function(){var t=this.$;if(this.isDataTable)return t.find("div.datatable");var e=t.is("table")?t:t.find("table:not(.fixed-header-copy)").first();return e.is(".datatable")&&(this.isDataTable=!0,e=t.find("div.datatable")),e},s.prototype.toggleGroups=function(e){var i=this,n={};i.$.find("tbody>tr").each(function(){var o=t(this).closest("tr").data("id");n[o]||i.toggleRowGroup(o,e)})},s.prototype.toggleRowGroup=function(i,n){var o=this.$.find('tbody>tr[data-id="'+i+'"]'),s=o.filter(".group-summary"),a=n===e?!s.hasClass("hidden"):!!n;o.not(".group-summary").toggleClass("hidden",!a),s.toggleClass("hidden",a),t("body").toggleClass("table-group-collapsed",!this.$.find("tbody>tr.group-summary.hidden").length)},s.prototype.updateStatistic=function(){var i=this,n=i.$.find(".table-statistic");if(n.length){if(i.defaultStatistic===e&&(i.defaultStatistic=n.html()),i.options.statisticCreator)return void n.html(i.options.statisticCreator(i)||i.defaultStatistic);var o=i.statisticCols;if(!o&&o!==!1){o={};var s=!1;i.getTable().find("thead th").each(function(e){var i=t(this),n=i.data("statistic");n&&(s=!0,o[e]={format:n,name:i.text()})}),i.statisticCols=!!s&&o}var a=0;o&&t.each(o,function(t){o[t].total=0,o[t].checkedTotal=0}),i.$.find(i.isDataTable?".fixed-left tbody>tr":"tbody>tr").each(function(){var e=t(this),i=e.hasClass("checked"),n=e.children("td");i&&a++,o&&t.each(o,function(t){var e=parseFloat(n.eq(t).text());isNaN(e)&&(e=0),o[t].total+=e,i&&(o[t].checkedTotal+=e)})});var r=[];if(a)r.push(i.lang.selectedItems.format(a));else if(i.defaultStatistic)return void n.html(i.defaultStatistic);o&&t.each(o,function(t){var e=o[t],n=e[a?"checkedTotal":"total"];e.format&&(n=e.format.format(n)),r.push(i.lang.attrTotal.format(e.name,n))}),n.html(r.join(", "))}},s.prototype.updateFixUI=function(e){var i=this,n=(new Date).getTime();if(!e&&(i.lastUpdateCall&&clearTimeout(i.lastUpdateCall),!i.lastUpdateTime||n-i.lastUpdateTime<100))return void(i.lastUpdateCall=setTimeout(function(){i.updateFixUI(!0)},30));if(i.lastUpdateTime=n,i.lastUpdateCall&&(clearTimeout(i.lastUpdateCall),i.lastUpdateCall=null),o){var s=i.getTable();if(s.parent().is(".table-responsive")){var a=s.find("thead"),r=0;a.find("th").each(function(){r+=t(this).outerWidth()}),s.css("min-width",r)}}i.options.fixHeader&&!i.isDataTable&&i.fixHeader(),i.options.fixFooter&&i.fixFooter()},s.prototype.fixHeader=function(){var e=this,i=e.getTable(),n=i.find("thead"),o=n[0].getBoundingClientRect(),s=e.options.fixFooter,a=t.isFunction(s)?s(o,n):o.top<("number"==typeof s?s:-5),r=e.$.find(".fix-table-copy-wrapper"),l=i.parent(),h=l.is(".table-responsive");if(a){if(r.length||(r=t('
    ').append(t('
    ').addClass(i.attr("class")).append(n.clone())).insertAfter(i)),h){var c=l[0].getBoundingClientRect();r.css({left:c.left,width:l.width()}),r.find(".fixed-header-copy").css({left:o.left-c.left,position:"relative",minWidth:i.width()}),l.data("fixHeaderScroll")||l.data("fixHeaderScroll",1).on("scroll",function(){e.fixHeader()})}else r.css({left:o.left,width:o.width});var d=r.find("th");n.find("th").each(function(e){d.eq(e).css("width",t(this).outerWidth())})}else r.remove()},s.prototype.fixFooter=function(){var e,i=this,n=i.getTable(),o=i.$.find(".table-footer");if(i.isDataTable)e=n[0].getBoundingClientRect();else{var s=n.find("tbody");if(!s.length)return;e=s[0].getBoundingClientRect(),e=s[0].getBoundingClientRect()}var a=i.options.fixFooter;o.toggleClass("fixed-footer",!!r);var r=t.isFunction(a)?a(e,o):e.bottom>window.innerHeight-50-("number"==typeof a?a:i.pageFooterHeight||5);o.toggleClass("fixed-footer",!!r),n.toggleClass("with-footer-fixed",!!r),n.trigger("fixFooter",r);var l=t("body"),h=l.hasClass("body-modal");if(r){var c=n.parent(),d=c.is(".table-responsive");o.css({bottom:i.pageFooterHeight||0,left:d?c[0].getBoundingClientRect().left:e.left,width:d?c.width():e.width}),h&&l.css("padding-bottom",40)}else o.css({width:"",left:0,bottom:0}),h&&l.css("padding-bottom",0)},s.prototype.checkAll=function(e){var i=this,n=i.$.find(i.isDataTable?".fixed-left tbody>tr":"tbody>tr");n.each(function(){i.checkRow(t(this),e,!0)}),i.updateCheckUI()},s.prototype.checkRow=function(t,i,n){var o=this;o.isDataTable&&!t.is(".datatable-row-left")&&(t=o.getTable().find('.datatable-row-left[data-index="'+t.data("index")+'"]'));var s=t.find('input[type="checkbox"]');s.length&&(i===e&&(i=!s.is(":checked")),o.isDataTable?o.getTable().find('.datatable-row[data-index="'+t.data("index")+'"]').toggleClass("checked",i):t.toggleClass("checked",i),this.checkItems[t.data("id")]=i,s.prop("checked",i).trigger("change"),n||o.updateCheckUI())},s.prototype.updateCheckUI=function(){var e=this,i=e.getTable(),n=i.find(e.isDataTable?".fixed-left tbody>tr":"tbody>tr").not(".group-summary"),o=!1,s=null,a=0,r=!1,l=n.length;n.each(function(n){var h=t(this),c=h.find('input[type="checkbox"]');r=c.is(":checked");var d=e.isDataTable?i.find('.datatable-row[data-index="'+h.data("index")+'"]'):h;d.toggleClass("checked",r),d.toggleClass("row-check-begin",r&&!o),s&&s.toggleClass("row-check-end",!r&&o),r&&(a+=1),s=d,o=r,l===n+1&&d.toggleClass("row-check-end",r)}),e.$.toggleClass("has-row-checked",a>0).find(".check-all").toggleClass("checked",!(!l||a!==l)),e.updateStatistic(),e.options.onCheckChange&&e.options.onCheckChange()},s.DEFAULTS={checkable:!0,ajaxForm:!1,selectable:!0,fixHeader:!0,fixFooter:!0,iframeWidth:900,replaceId:"self",hot:!1,iframeModalTrigger:".iframe"},t.fn.table=function(e){return this.each(function(){var n=t(this),o=n.data(i),a="object"==typeof e&&e;o||n.data(i,o=new s(this,a)),"string"==typeof e&&o[e]()})},s.NAME=i,t.fn.table.Constructor=s,t(function(){t('[data-ride="table"]').table()})}(jQuery,void 0),function(t,e,i){t.fn._ajaxForm=t.fn.ajaxForm;var n={timeout:e.config?e.config.timeout:0,dataType:"json",method:"post"},o="";t.fn.enableForm=function(e,n,o){return e===i&&(e=!0),this.each(function(){var i=t(this);n||i.find('[type="submit"]').attr("disabled",e?null:"disabled"),!o&&i.hasClass("load-indicator")&&i.toggleClass("loading",!e),i.toggleClass("form-disabled",!e)})},t.enableForm=function(e,i,n){e===!1?t("form").enableForm(e,i,n):t("form.form-disabled").enableForm(!0,i,n)};var s=function(e,i,n){"string"==typeof i&&(n=i,i=null),n=n||"show",t.zui.messager?t.zui.messager[n](e,i):alert(e)};t.ajaxForm=function(a,r){var l=t(a);if(l.length>1)return l.each(function(){t.ajaxForm(this,r)});t.isFunction(r)&&(r={complete:r}),r=t.extend({},n,l.data(),r);var h=r.beforeSubmit,c=r.error,d=r.success,u=r.finish;delete r.finish,delete r.success,delete r.onError,delete r.beforeSubmit,r=t.extend({beforeSubmit:function(n,s,a){if(l.enableForm(!1),(h&&h(n,s,a))!==!1){var r={},c=s.find('[type="file"]');r.fileapi=c.length&&c[0].files!==i,r.formdata=e.FormData!==i;var d=r.fileapi&&s.find('input[type="file"]:enabled').filter(function(){return""!==t(this).val()}),u=d.length,p="multipart/form-data",f=s.attr("enctype")==p||s.attr("encoding")==p,g=r.fileapi&&r.formdata,m=(u||f)&&!g;m&&(""==o&&(o=a.url),a.url!=o&&(a.url=o),a.url=a.url.indexOf("&")>=0?a.url+"&HTTP_X_REQUESTED_WITH=XMLHttpRequest":a.url+"?HTTP_X_REQUESTED_WITH=XMLHttpRequest"); -}},success:function(i,n,o){if((d&&d(i,n,o,l))!==!1){try{"string"==typeof i&&(i=JSON.parse(i))}catch(a){}if(null===i||"object"!=typeof i)return i?alert(i):s("No response.","danger");var h=r.responser?t(r.responser):l.find(".form-responser");h.length||(h=t("#responser"));var c=i.message,p=function(){var n=i.callback;if(n){var o=n.indexOf("("),s=(o>0?n.substr(0,o):n).split("."),a=e,r=s[0];s.length>1&&(r=s[1],"top"===s[0]?a=e.top:"parent"===s[0]&&(a=e.parent));var h=a[r];if(t.isFunction(h)){var c=[];return o>0&&")"==n[n.length-1]&&(c=t.parseJSON("["+n.substring(o+1,n.length-1)+"]")),c.push(i),h.apply(l,c)}}};if("success"===i.result){if(l.enableForm(!0,1),c){var f=l.find('[type="submit"]'),g=!1;f.length&&(f.popover({container:"body",trigger:"manual",content:c,tipClass:"popover-in-modal popover-success popover-form-result",placement:i.placement||r.popoverPlacement||"right"}).popover("show"),setTimeout(function(){f.popover("destroy")},r.popoverTime||2e3),g=!0),h.length&&(h.html(''+c+"").show().delay(3e3).fadeOut(100),g=!0),g||s(c,"success")}if(u)return u(i,!0,l);if((r.closeModal||i.closeModal)&&setTimeout(t.zui.closeModal,r.closeModalTime||2e3),p()===!1)return;var m=r.locate||i.locate;if(m)if("loadInModal"==m){var v=t(".modal");setTimeout(function(){v.load(v.attr("ref"),function(){t(this).find(".modal-dialog").css("width",t(this).data("width")),t.zui.ajustModalPosition()})},1e3)}else{var y="reload"==m?e.location.href:m;setTimeout(function(){e.location.href=y},1200)}var b=r.ajaxReload||i.ajaxReload;if(b){var w=t(b);w.length&&w.load(e.location.href+" "+b,function(){w.find('[data-toggle="modal"]').modalTrigger()})}}else{if(l.enableForm(),"string"==typeof c)h.length?h.html(''+c+"").show().delay(3e3).fadeOut(100):s(c,"danger");else if("object"==typeof c){var x=!1,C=[];t.each(c,function(e,i){var n=t.isArray(i)?i.join(";"):i,o=t("#"+e);if(!o.length)return void C.push(n);var s=e+"Label",a=t("#"+s);if(!a.length){var r=o.closest(".input-group").length,l=o.closest("td").length;a=t('
    ').appendTo(l?o.closest("td"):r?o.closest(".input-group").parent():o.parent())}a.empty().append(n),o.addClass("has-error");var h=function(){var e=t("#"+s);if(e.length)return e.remove(),o.removeClass("has-error"),!0};o.on("change input mousedown",h);var c=t("#"+e+"_chosen");c.length&&c.find(".chosen-single,.chosen-choices").addClass("has-error").on("mousedown",function(){h()===!0&&t(this).removeClass("has-error")}),x||(o.focus(),x=!0)}),C.length&&s(C.join(";"),"danger")}if(u)return u(i,!1,l);if(p()===!1)return}}},error:function(t,i,n){if((c&&c(t,i,n,l))!==!1){l.enableForm();var o="timeout"==i||"error"==i?e.lang?e.lang.timeout:i:t.responseText+i+n;s(o,"danger")}}},r),l._ajaxForm(r).data("zui.ajaxform",!0),l.on("click","[data-form-action]",function(){l.attr("action",t(this).data("formAction")).submit()})},t.fn.ajaxForm=function(e){return this.each(function(){t.ajaxForm(this,e)})},t.fn.setInputRequired=function(){return this.each(function(){var e=t(this),i=e.parent();i.is(".input-control,td")?i.addClass("required"):e.is(".chosen")?e.attr("required",null).next(".chosen-container").addClass("required"):i.addClass("required"),e.attr("required",null);var n=i.closest(".input-group");n.length&&1===n.find(".required,input[required],select[required]").length&&n.addClass("required")})},t(function(){t('.form-ajax,form[data-type="ajax"]').ajaxForm(),setTimeout(function(){var i=e.config.requiredFields,n=t("form");i&&(i=i.split(",")),i&&i.length&&t.each(i,function(t,e){n.find("#"+e).attr("required","required")}),n.find("input[required],select[required],textarea[required]").setInputRequired()},400),t("#hiddenwin"),t('form[target="hiddenwin"]').on("submit",function(){var e=t(this);e.data("zui.ajaxform")||e.enableForm(!1).data("disabledTime",(new Date).getTime())}).on("click",function(){var e=t(this),i=e.data("disabledTime");i&&(new Date).getTime()-i>1e4&&e.enableForm(!0).data("disabledTime",null)})})}(jQuery,window,void 0),function(t){"use strict";var e="zui.searchList",i=function(t,e){if(t&&t.length)for(var i=0;i
    ').append(a)),i.$menu.append(a),i.$menu.removeClass("loading"),i.isLoaded=!0,e&&e(!0)},error:function(){i.$menu.removeClass("loading").append('
    '+(n.errorText||window.lang&&window.lang.timeout)+"
    "),e&&e(!1)}},n.ajax))},n.prototype.scrollTo=function(t){t.length&&t[0].scrollIntoView({behavior:"smooth"})},n.prototype.getItems=function(){return this.$.find(this.options.selector).addClass("search-list-item")},n.prototype.getActiveItem=function(){return this.getItems().filter(".active:first")},n.prototype.search=function(e){var n=this,o=void 0===e||null===e||""===e,s=n.getItems().removeClass("active");if(o)s.removeClass("hidden");else{var a=t.trim(e).split(" ");s.each(function(){var e=t(this),n=e.text()+" "+(e.data("key")||e.data("filter"));e.toggleClass("hidden",!i(a,n))})}n.scrollTo(s.not(".hidden").first().addClass("active"))},n.DEFAULTS={selector:".list-group a",searchBox:".search-box",onSelectItem:null},t.fn.searchList=function(i){return this.each(function(){var o=t(this),s=o.data(e),a="object"==typeof i&&i;s||o.data(e,s=new n(this,a)),"string"==typeof i&&s[i]()})},n.NAME=e,t.fn.searchList.Constructor=n,t(function(){t('[data-ride="searchList"]').searchList()})}(jQuery),function(t){"use strict";var e="zui.labelSelector",i=function(n,o){var s=this;s.name=e,s.$=t(n),o=s.options=t.extend({},i.DEFAULTS,this.$.data(),o),s.$.hide(),s.update()};i.prototype.select=function(t){t+="",this.$wrapper.find(".label.active").removeClass("active"),this.$wrapper.find('.label[data-value="'+t+'"]').addClass("active"),this.$.val(t).trigger("change")},i.prototype.update=function(){var e=this,i=e.options,n=e.$wrapper;if(!n){if(i.wrapper)n=t(i.wrapper);else{var o=e.$.next();n=o.hasClass(".label-selector")?o:t('
    ')}n.parent().length||e.$.after(n),e.$wrapper=n,n.on("click",".label",function(i){var n=e.$.val(),o=t(this).data("value");e.hasEmptyValue!==!1&&o==n&&(o=e.hasEmptyValue),e.select(o),i.preventDefault()})}n.empty();var s=e.$.val();e.hasEmptyValue=!1,e.$.children("option").each(function(){var e=t(this),o={label:e.text(),value:e.val()},a=""===o.value||"0"===o.value,r=t(i.labelTemplate||'');i.labelClass&&!a&&r.addClass(i.labelClass),i.labelCreator?r=i.labelCreator(r):(r.data("option",o).attr("data-value",o.value),a&&!o.label?r.addClass("empty").append(''):r.text(o.label).toggleClass("active",s===o.value)),n.append(r)})},i.DEFAULTS={},t.fn.labelSelector=function(n){return this.each(function(){var o=t(this),s=o.data(e),a="object"==typeof n&&n;s||o.data(e,s=new i(this,a)),"string"==typeof n&&s[n]()})},i.NAME=e,t.fn.labelSelector.Constructor=i,t(function(){t('[data-provide="labelSelector"]').labelSelector()})}(jQuery),function(t){"use strict";var e="zui.fileInput",i=t.BYTE_UNITS={B:1,KB:1024,MB:1048576,GB:1073741824,TB:1099511627776},n=t.formatBytes=function(t,e,n){return void 0===e&&(e=2),n||(n=ta.fileMaxSize&&(h.val(""),(window.bootbox||window).alert(a.fileSizeError.format(n(a.fileMaxSize)))),r.update()}),r.update()};s.prototype.getFile=function(){var t=this.$input.prop("files");return t&&t[0]},s.prototype.update=function(t){var e=this,i=e.$,o=e.getFile(),s=!o;i.toggleClass("normal",!s).toggleClass("empty",s),o?(e.oldName=o.name,i.find(".file-title").text(o.name).attr("title",o.name),i.find(".file-size").text(n(o.size)),i.find(".file-editbox").val(o.name).attr("size",o.name.length),e.options.onSelect&&e.options.onSelect(o,e)):i.find(".file-editbox").val("")},s.DEFAULTS={fileMaxSize:0,fileSizeError:"无法上传大于 {0} 的文件。"},t.fn.fileInput=function(i){return this.each(function(){var n=t(this),o=n.data(e),a="object"==typeof i&&i;o||n.data(e,o=new s(this,a)),"string"==typeof i&&o[i]()})},s.NAME=e,t.fn.fileInput.Constructor=s,t(function(){t('[data-provide="fileInput"]').fileInput()});var a="zui.fileInputList",r=function(e,i){var n=this;n.name=a;var o=n.$=t(e);i=n.options=t.extend({},r.DEFAULTS,this.$.data(),i),n.$template=o.find(".file-input").detach(),n.add()};r.prototype.add=function(){var t=this,e=t.options,i=t.$template.clone();"before"===e.appendWay?t.$.prepend(i):t.$.append(i),i.fileInput({fileMaxSize:e.eachFileMaxSize,fileSizeError:e.fileSizeError,onDelete:function(e){e.$.remove(),t.options.onDelete&&t.options.onDelete(e,t)},onSelect:function(e,i){t.add(),t.options.onSelect&&t.options.onSelect(e,i,t)}})},r.DEFAULTS={fileMaxSize:0,eachFileMaxSize:0,appendWay:"after",fileSizeError:"无法上传大于 {0} 的文件。"},t.fn.fileInputList=function(e){return this.each(function(){var i=t(this),n=i.data(a),o="object"==typeof e&&e;n||i.data(a,n=new r(this,o)),"string"==typeof e&&n[e]()})},r.NAME=a,t.fn.fileInputList.Constructor=r,t(function(){t('[data-provide="fileInputList"]').fileInputList()})}(jQuery),function(t){window.config||(window.config={}),t.createLink=window.createLink=function(t,e,n,o,s){if(o||(o=config.defaultView),s||(s=!1),n)for(n=n.split("&"),i=0;i'+d+"")}}t.val()||(time=e(s.format("hh:mm")),time=time-time%10+10,t.val(n(time)))};t.fn.timeSpanControl=function(i){return this.each(function(){var a=t(this),r=t.extend({},i,a.data()),l=a.find('[name="begin"],.control-time-begin'),h=a.find('[name="end"],.control-time-end'),c=function(){var t=l.val();if(a.find(".hide-empty-begin").toggleClass("hide",!t),t){var i=n(e(t)+30);h.find('option[value="'+i+'"]').length&&h.val(i),r.onChange&&r.onChange(h,i)}};if(a.data("timeSpanControlInit")){if(r.begin){var d=o(r.begin).format("hh:mm");l.find('option[value="'+d+'"]').length&&l.val(d),r.onChange&&r.onChange(l,d)}if(r.end){var u=o(r.end).format("hh:mm");h.find('option[value="'+u+'"]').length&&h.val(u),r.onChange&&r.onChange(h,u)}}else l.on("change",c),s(l,r.begin),s(h,r.end),a.data("timeSpanControlInit",!0);r.end||c()})},t.timeSpanControl={convertTimeToNum:e,convertNumToTime:n,initTimeSelect:s,createTime:o};var a=t.setSearchType=function(e,i){var n=t("#searchType");e||(e=n.val()),e=e||"bug",n.val(e);var o=t("#searchTypeMenu");o.find("li.selected").removeClass("selected");var s=o.find('a[data-value="'+e+'"]'),a=s.text();s.parent().addClass("selected"),t("#searchTypeName").text(a),i||t("#searchInput").focus()};t.gotoObject=function(e,i){e||(e=t("#searchType").val()),i||(i=t("#searchInput").val()),i&&e&&(window.location.href=t.createLink(e,"testsuite"===e?"library":"view","id="+i))},t(function(){a(null,!0),t(document).on("keydown",function(e){e.ctrlKey&&71===e.keyCode&&(t("#searchInput").val("").focus(),e.stopPropagation(),e.preventDefault())})}),t.removeAnchor=window.removeAnchor=function(t){var e=t.lastIndexOf("#");return e>-1?t.substr(0,e):t},t.refreshPage=function(){location.href=removeAnchor(location.href)},t.selectLang=window.selectLang=function(e){t.cookie("lang",e,{expires:config.cookieLife,path:config.webRoot}),t.ajaxSendScore("selectLang"),t.refreshPage()},t.selectTheme=window.selectTheme=function(e){t.cookie("theme",e,{expires:config.cookieLife,path:config.webRoot}),t.ajaxSendScore("selectTheme"),t.refreshPage()},t.chosenDefaultOptions={middle_highlight:!0,disable_search_threshold:1,compact_search:!0,allow_single_deselect:!0,placeholder_text_single:" ",placeholder_text_multiple:" ",search_contains:!0,drop_direction:function(){var e=t(this.container).closest(".table-responsive:not(.scroll-none)");if(e.length){if(this.drop_directionFixed)return this.drop_directionFixed;var i="down",n=this.container.find(".chosen-drop"),o=this.container.position(),s=n.outerHeight();return o.top>=s&&o.top+s{page}/{totalPage}
',"next_icon","last_icon"],onPageChange:function(e,i){e.recPerPage!==i.recPerPage&&t.cookie(this.options.pageCookie,e.recPerPage,{expires:config.cookieLife,path:config.webRoot}),e.recPerPage!==i.recPerPage&&(window.location.href=this.createLink())}}),t.zui.Messager.DEFAULTS.cssClass="messagger-zt",t.fn.reverseOrder=function(){return this.each(function(){var e=t(this);e.prependTo(e.parent())})};var r=function(e,i){var n=t(e);i=t.extend({},n.data(),i);var o=n.find(".histories-list"),s=!0,a=!1;n.on("click",".btn-reverse",function(){o.children("li").reverseOrder(),s=!s,t(this).find(".icon").toggleClass("icon-arrow-up",s).toggleClass("icon-arrow-down",!s)}).on("click",".btn-expand-all",function(){var e=t(this).find(".icon");a=!a,e.toggleClass("icon-plus",!a).toggleClass("icon-minus",a),o.children("li").toggleClass("show-changes",a)}).on("click",".btn-expand",function(){t(this).closest("li").toggleClass("show-changes")}).on("click",".btn-strip",function(){var e=t(this),n=e.find(".icon"),o=n.hasClass("icon-code");n.toggleClass("icon-code",!o).toggleClass("icon-text",o),e.attr("title",o?i.original:i.textdiff),e.closest("li").toggleClass("show-original",o)}),o.find(".btn-strip").attr("title",i.original);var r=n.find(".modal-comment").modal({show:!1}).on("shown.zui.modal",function(){var t=r.find("#comment");t.length&&(t.focus(),window.editor&&window.editor.comment&&window.editor.comment.focus())}).on("show.zui.modal",function(){var e=r.find("#comment");e.length&&!e.data("keditor")&&t.fn.kindeditor&&e.kindeditor()});n.on("click",".btn-comment",function(t){r.modal("toggle"),t.preventDefault()}).on("click",".btn-edit-comment,.btn-hide-form",function(){t(this).closest("li").toggleClass("show-form")});var l=n.find(".comment-edit-form");l.ajaxForm({success:function(t,e,i,n){setTimeout(function(){l.closest("li").removeClass("show-form")},2e3)}})};t.fn.histories=function(t){return this.each(function(){r(this,t)})},t(function(){t(".histories").histories()});var l=0,h=0;t.toggleSidebar=function(e){var i=t("#sidebar");if(i.length){var n=t("main");if(void 0===e)e=n.hasClass("hide-sidebar");else if(e&&!n.hasClass("hide-sidebar"))return;n.toggleClass("hide-sidebar",!e),clearTimeout(l),t.zui.store.set(h,e);var o=i.children(".cell"),s={overflow:"visible",maxHeight:"initial"};e?(i.addClass("showing"),l=setTimeout(function(){i.removeClass("showing"),i.trigger("sidebar.toggle",e)},210)):(i.trigger("sidebar.toggle",e),t(window).width()<1900&&(s={overflow:"hidden",maxHeight:t(window).height()-45})),o.css(s)}};var c=t.initSidebar=function(){var e=t("#sidebar");if(e.length){if(e.data("init"))return!0;h="sidebar:"+(e.data("id")||config.currentModule+"/"+config.currentMethod);var i=t("main");i.on("click",".sidebar-toggle",function(){t.toggleSidebar(i.hasClass("hide-sidebar"))});var n=t.zui.store.get(h,e.data("hide")!==!1);n===!1&&e.addClass("no-animate"),t.toggleSidebar(n),n===!1&&setTimeout(function(){e.removeClass("no-animate")},500);var o=function(){var i=e.find(".sidebar-toggle");if(i.length){var n=i[0].getBoundingClientRect(),o=t(window).height(),s=Math.max(0,Math.floor(Math.min(o-40,n.top+n.height)-Math.max(n.top,0))/2)+(n.top<0?0-n.top:0);i.find(".icon").css("top",s)}};return o(),e.on("sidebar.toggle",o),t(window).on("resize",o).on("scroll",o),e.data("init",1),!0}};c()||t(c),t.toggleQueryBox=function(e,i){var n=t(i||"#queryBox");n.length&&(void 0===e&&(e=!n.hasClass("show")),n.toggleClass("show",!!e),n.data("init")||(n.addClass("load-indicator loading").data("init",1),t.get(t.createLink("search","buildForm"),function(t){n.html(t).removeClass("loading")})),t(".querybox-toggle").toggleClass("querybox-opened",e))},t(function(){var e=t("#queryBox");e.length&&(t(document).on("click",".querybox-toggle",function(){t.toggleQueryBox()}),e.hasClass("show")&&t.toggleQueryBox(!0))}),t.extend(t.fn.colorPicker.Constructor.DEFAULTS,{colors:["#3DA7F5","#75C941","#2DBDB2","#797EC9","#FFAF38","#FF4E3E"]}),window.setCheckedCookie=function(){var e=[],i=t('#mainContent .main-table tbody>tr input[type="checkbox"]:checked');i.each(function(){var i=parseInt(t(this).val(),10);NaN!==i&&e.push(i)}),t.cookie("checkedItem",e.join(","),{expires:config.cookieLife,path:config.webRoot})},t.extend(t.fn.modal.bs.Constructor.DEFAULTS,{scrollInside:!0,backdrop:"static",headerHeight:100}),t.extend(t.zui.ModalTrigger.DEFAULTS,{scrollInside:!0,backdrop:"static",headerHeight:40}),t.fn.initIframeModal=function(){return this.each(function(){var e=t(this);if(!e.parents('[data-ride="table"],.skip-iframe-modal').length){var i={type:"iframe"};e.hasClass("export")&&t.extend(i,{width:800,shown:setCheckedCookie},e.data()),e.modalTrigger(i)}})},t(function(){t("a.iframe,.export").initIframeModal()});var d=function(){var e,i,n=t(this),o=t.extend({limitSize:40,suffix:"…"},n.data()),s=n.text();if(s.length>o.limitSize){e=s,i=s.substr(0,o.limitSize)+o.suffix,n.text(i).addClass("limit-text-on");var a=o.toggleBtn?t(o.toggleBtn):n.next(".text-limit-toggle");a.text(a.data("textExpand")),a.on("click",function(){var t=n.toggleClass("limit-text-on").hasClass("limit-text-on");n.text(t?i:e),a.text(a.data(t?"textExpand":"textCollapse"))})}else(o.toggleBtn?t(o.toggleBtn):n.next(".text-limit-toggle")).hide()};t.fn.textLimit=function(){return this.each(d)},t(function(){t(".text-limit").textLimit()}),t.fixedTableHead=window.fixedTableHead=function(e,i){var n=t(e);if(n.is("table")||(n=n.find("table")),n.length){var o=t(i||window),s=null,a=function(){var e=n.children("thead"),i=e[0].getBoundingClientRect(),o=n.next(".fixed-head-table");if(i.top<0){var a=e.width();if(o.length){if(s!==a){s=a;var r=o.find("th");e.find("th").each(function(e){r.eq(e).width(t(this).width())})}}else{var o=t("
").addClass(n.attr("class")),l=e.clone(),r=l.find("th");e.find("th").each(function(e){r.eq(e).width(t(this).width())}),o.append(l).insertAfter(n)}o.css({left:i.left,width:i.width}).show()}else o.hide()};o.on("scroll",a).on("resize",a),a()}},t(document).on("click","tr[data-url]",function(){var e=t(this),i=e.data("href")||e.data("url");i&&(window.location.href=i)}),"yes"===config.onlybody&&self===parent&&(window.location.href=window.location.href.replace("?onlybody=yes","").replace("&onlybody=yes","")),t(function(){t("body").addClass("m-{currentModule}-{currentMethod}".format(config))});var u,p,f,g,m,v=function(){u||(u=t("#subNavbar"),p=t("#pageNav"),f=t("#pageActions"),g=u.children(".nav"),m=g.outerWidth());var e=u.outerWidth(),i=p.outerWidth()||0,n=f.outerWidth()||0;if(i=i?i+15:0,n=n?n+15:0,!i&&!n)return void g.css({maxWidth:null,left:null,position:"static"});var o=Math.max(300,e-i-n),s=Math.min(o,m),a=(e-s)/2,r=i&&a.btn-toolbar");if(e.length){var i,n,o=!1,s=null,a=e.children(),r=a.length;for(a.each(function(e){i=t(this),n=i.is(".divider"),n&&!s&&i.hide(),o||n||(o=!0),s=n?null:i,!n||e!==r-1&&0!==e||i.hide()});i.length&&i.is(".divider");)i=i.hide().prev();o||e.hide()}};t(function(){t(".input-group,.btn-group").fixInputGroup(),k()}),window.holders&&t.each(window.holders,function(e){var i=t("#"+e);i.length&&i.is("input")&&i.attr("placeholder",window.holders[e])});var T=function(){var e,i="en"==config.clientLang?"http://www.zentao.pm/book/zentaomanual/8.html?fullScreen=zentao":"http://www.zentao.net/book/zentaopmshelp.html?fullScreen=zentao",n=t("#navbar > .nav").first(),o=1e4,s=function(){clearTimeout(e),t("#helpContent").removeClass("show-error")},a=t.openHelp=function(){s(),n.children("li.active:not(#helpMenuItem)").removeClass("active").addClass("close-help-tab"),t("#helpMenuItem").addClass("active");var a=t("#helpContent");if(a.length){if(t("body").hasClass("show-help-tab"))return void t("#helpIframe").get(0).contentWindow.location.replace(i)}else{a=t('

'+lang.timeout+'

'+i+'

'),t("#header").after(a);var r=t("#helpIframe").get(0);e=setTimeout(function(){t("#helpContent").addClass("show-error")},o),r.onload=r.onreadystatechange=function(){this.readyState&&"complete"!=this.readyState||s()}}t("body").addClass("show-help-tab")},r=t.closeHelp=function(){t("body").removeClass("show-help-tab"),t("#helpMenuItem").removeClass("active"),n.find("li.close-help-tab").removeClass("close-help-tab").addClass("active").find("a").focus()};t(document).on("click",".open-help-tab",function(e){var i=t("#helpMenuItem");i.length||(i=t('
  • '+t(this).text()+'
  • '),n.append('
  • ').append(i)),a(),e.preventDefault()}).on("click",".close-help-tab",function(t){r(),t.stopPropagation(),t.preventDefault()})};t(T),t(function(){var e=t(".table-responsive"),i=function(){e.each(function(){this.scrollHeight-3<=this.clientHeight&&this.scrollWidth-3<=this.clientWidth?t(this).addClass("scroll-none").css("overflow","visible"):t(this).removeClass("scroll-none").css("overflow","auto")})};e.length&&(i(),t(window).on("resize",i))});var S=function(){var e=this.value?this.scrollHeight+2+"px":"32px";this.style.height="auto",this.style.height=e,t(this).closest("tr").find("textarea").each(function(){this.style.height=e})};t.autoResizeTextarea=function(e){t(e).each(S)},t(function(){t("textarea.autosize").each(S),t(document).on("input keyup paste change","textarea.autosize",S)}),t(function(){var e=t("#dropMenu");e.length&&e.on("click",".toggle-right-col",function(t){e.toggleClass("show-right-col"),t.stopPropagation(),t.preventDefault()})});var D="undefined"!=typeof InstallTrigger;t.zui.browser.firefox=D,t("html").toggleClass("is-firefox",D).toggleClass("not-firefox",!D),t(function(){var e=t("#mainContent>.main-col"),i=e.children(".main-actions"),n=i.prev();if(i.length&&n.length){t('
    ').css("height",i.outerHeight()).insertAfter(i);var o=function(){var e=n[0].getBoundingClientRect(),o=e.top+e.height+120>t(window).height();t("body").toggleClass("main-actions-fixed",o),o&&i.width(n.width())};t.resetToolbarPosition=o,o(),t(window).on("resize scroll",o)}}),t(document).on("show.zui.modal",function(){t("body.body-modal").length&&window.parent&&window.parent!==window&&window.parent.$("body").addClass("hide-modal-close")}).on("hidden.zui.modal",function(){t("body.body-modal").length&&window.parent&&window.parent!==window&&window.parent.$("body").removeClass("hide-modal-close")})}(jQuery); \ No newline at end of file +}},success:function(i,n,o){if((d&&d(i,n,o,l))!==!1){try{"string"==typeof i&&(i=JSON.parse(i))}catch(a){}if(null===i||"object"!=typeof i)return i?alert(i):s("No response.","danger");var h=r.responser?t(r.responser):l.find(".form-responser");h.length||(h=t("#responser"));var c=i.message,p=function(){var n=i.callback;if(n){var o=n.indexOf("("),s=(o>0?n.substr(0,o):n).split("."),a=e,r=s[0];s.length>1&&(r=s[1],"top"===s[0]?a=e.top:"parent"===s[0]&&(a=e.parent));var h=a[r];if(t.isFunction(h)){var c=[];return o>0&&")"==n[n.length-1]&&(c=t.parseJSON("["+n.substring(o+1,n.length-1)+"]")),c.push(i),h.apply(l,c)}}};if("success"===i.result){if(l.enableForm(!0,1),c){var f=l.find('[type="submit"]'),g=!1;f.length&&(f.popover({container:"body",trigger:"manual",content:c,tipClass:"popover-in-modal popover-success popover-form-result",placement:i.placement||r.popoverPlacement||"right"}).popover("show"),setTimeout(function(){f.popover("destroy")},r.popoverTime||2e3),g=!0),h.length&&(h.html(''+c+"").show().delay(3e3).fadeOut(100),g=!0),g||s(c,"success")}if(u)return u(i,!0,l);if((r.closeModal||i.closeModal)&&setTimeout(t.zui.closeModal,r.closeModalTime||2e3),p()===!1)return;var m=r.locate||i.locate;if(m)if("loadInModal"==m){var v=t(".modal");setTimeout(function(){v.load(v.attr("ref"),function(){t(this).find(".modal-dialog").css("width",t(this).data("width")),t.zui.ajustModalPosition()})},1e3)}else{var y="reload"==m?e.location.href:m;setTimeout(function(){e.location.href=y},1200)}var b=r.ajaxReload||i.ajaxReload;if(b){var w=t(b);w.length&&w.load(e.location.href+" "+b,function(){w.find('[data-toggle="modal"]').modalTrigger()})}}else{if(l.enableForm(),"string"==typeof c)h.length?h.html(''+c+"").show().delay(3e3).fadeOut(100):s(c,"danger");else if("object"==typeof c){var x=!1,C=[];t.each(c,function(e,i){var n=t.isArray(i)?i.join(";"):i,o=t("#"+e);if(!o.length)return void C.push(n);var s=e+"Label",a=t("#"+s);if(!a.length){var r=o.closest(".input-group").length,l=o.closest("td").length;a=t('
    ').appendTo(l?o.closest("td"):r?o.closest(".input-group").parent():o.parent())}a.empty().append(n),o.addClass("has-error");var h=function(){var e=t("#"+s);if(e.length)return e.remove(),o.removeClass("has-error"),!0};o.on("change input mousedown",h);var c=t("#"+e+"_chosen");c.length&&c.find(".chosen-single,.chosen-choices").addClass("has-error").on("mousedown",function(){h()===!0&&t(this).removeClass("has-error")}),x||(o.focus(),x=!0)}),C.length&&s(C.join(";"),"danger")}if(u)return u(i,!1,l);if(p()===!1)return}}},error:function(t,i,n){if((c&&c(t,i,n,l))!==!1){l.enableForm();var o="timeout"==i||"error"==i?e.lang?e.lang.timeout:i:t.responseText+i+n;s(o,"danger")}}},r),l._ajaxForm(r).data("zui.ajaxform",!0),l.on("click","[data-form-action]",function(){l.attr("action",t(this).data("formAction")).submit()})},t.fn.ajaxForm=function(e){return this.each(function(){t.ajaxForm(this,e)})},t.fn.setInputRequired=function(){return this.each(function(){var e=t(this),i=e.parent();i.is(".input-control,td")?i.addClass("required"):e.is(".chosen")?e.attr("required",null).next(".chosen-container").addClass("required"):i.addClass("required"),e.attr("required",null);var n=i.closest(".input-group");n.length&&1===n.find(".required,input[required],select[required]").length&&n.addClass("required")})},t(function(){t('.form-ajax,form[data-type="ajax"]').ajaxForm(),setTimeout(function(){var i=e.config.requiredFields,n=t("form");i&&(i=i.split(",")),i&&i.length&&t.each(i,function(t,e){n.find("#"+e).attr("required","required")}),n.find("input[required],select[required],textarea[required]").setInputRequired()},400),t("#hiddenwin"),t('form[target="hiddenwin"]').on("submit",function(){var e=t(this);e.data("zui.ajaxform")||e.enableForm(!1).data("disabledTime",(new Date).getTime())}).on("click",function(){var e=t(this),i=e.data("disabledTime");i&&(new Date).getTime()-i>1e4&&e.enableForm(!0).data("disabledTime",null)})})}(jQuery,window,void 0),function(t){"use strict";var e="zui.searchList",i=function(t,e){if(t&&t.length)for(var i=0;i
    ').append(a)),i.$menu.append(a),i.$menu.removeClass("loading"),i.isLoaded=!0,e&&e(!0)},error:function(){i.$menu.removeClass("loading").append('
    '+(n.errorText||window.lang&&window.lang.timeout)+"
    "),e&&e(!1)}},n.ajax))},n.prototype.scrollTo=function(t){t.length&&t[0].scrollIntoView({behavior:"smooth"})},n.prototype.getItems=function(){return this.$.find(this.options.selector).addClass("search-list-item")},n.prototype.getActiveItem=function(){return this.getItems().filter(".active:first")},n.prototype.search=function(e){var n=this,o=void 0===e||null===e||""===e,s=n.getItems().removeClass("active");if(o)s.removeClass("hidden");else{var a=t.trim(e).split(" ");s.each(function(){var e=t(this),n=e.text()+" "+(e.data("key")||e.data("filter"));e.toggleClass("hidden",!i(a,n))})}n.scrollTo(s.not(".hidden").first().addClass("active"))},n.DEFAULTS={selector:".list-group a",searchBox:".search-box",onSelectItem:null},t.fn.searchList=function(i){return this.each(function(){var o=t(this),s=o.data(e),a="object"==typeof i&&i;s||o.data(e,s=new n(this,a)),"string"==typeof i&&s[i]()})},n.NAME=e,t.fn.searchList.Constructor=n,t(function(){t('[data-ride="searchList"]').searchList()})}(jQuery),function(t){"use strict";var e="zui.labelSelector",i=function(n,o){var s=this;s.name=e,s.$=t(n),o=s.options=t.extend({},i.DEFAULTS,this.$.data(),o),s.$.hide(),s.update()};i.prototype.select=function(t){t+="",this.$wrapper.find(".label.active").removeClass("active"),this.$wrapper.find('.label[data-value="'+t+'"]').addClass("active"),this.$.val(t).trigger("change")},i.prototype.update=function(){var e=this,i=e.options,n=e.$wrapper;if(!n){if(i.wrapper)n=t(i.wrapper);else{var o=e.$.next();n=o.hasClass(".label-selector")?o:t('
    ')}n.parent().length||e.$.after(n),e.$wrapper=n,n.on("click",".label",function(i){var n=e.$.val(),o=t(this).data("value");e.hasEmptyValue!==!1&&o==n&&(o=e.hasEmptyValue),e.select(o),i.preventDefault()})}n.empty();var s=e.$.val();e.hasEmptyValue=!1,e.$.children("option").each(function(){var e=t(this),o={label:e.text(),value:e.val()},a=""===o.value||"0"===o.value,r=t(i.labelTemplate||'');i.labelClass&&!a&&r.addClass(i.labelClass),i.labelCreator?r=i.labelCreator(r):(r.data("option",o).attr("data-value",o.value),a&&!o.label?r.addClass("empty").append(''):r.text(o.label).toggleClass("active",s===o.value)),n.append(r)})},i.DEFAULTS={},t.fn.labelSelector=function(n){return this.each(function(){var o=t(this),s=o.data(e),a="object"==typeof n&&n;s||o.data(e,s=new i(this,a)),"string"==typeof n&&s[n]()})},i.NAME=e,t.fn.labelSelector.Constructor=i,t(function(){t('[data-provide="labelSelector"]').labelSelector()})}(jQuery),function(t){"use strict";var e="zui.fileInput",i=t.BYTE_UNITS={B:1,KB:1024,MB:1048576,GB:1073741824,TB:1099511627776},n=t.formatBytes=function(t,e,n){return void 0===e&&(e=2),n||(n=ta.fileMaxSize&&(h.val(""),(window.bootbox||window).alert(a.fileSizeError.format(n(a.fileMaxSize)))),r.update()}),r.update()};s.prototype.getFile=function(){var t=this.$input.prop("files");return t&&t[0]},s.prototype.update=function(t){var e=this,i=e.$,o=e.getFile(),s=!o;i.toggleClass("normal",!s).toggleClass("empty",s),o?(e.oldName=o.name,i.find(".file-title").text(o.name).attr("title",o.name),i.find(".file-size").text(n(o.size)),i.find(".file-editbox").val(o.name).attr("size",o.name.length),e.options.onSelect&&e.options.onSelect(o,e)):i.find(".file-editbox").val("")},s.DEFAULTS={fileMaxSize:0,fileSizeError:"无法上传大于 {0} 的文件。"},t.fn.fileInput=function(i){return this.each(function(){var n=t(this),o=n.data(e),a="object"==typeof i&&i;o||n.data(e,o=new s(this,a)),"string"==typeof i&&o[i]()})},s.NAME=e,t.fn.fileInput.Constructor=s,t(function(){t('[data-provide="fileInput"]').fileInput()});var a="zui.fileInputList",r=function(e,i){var n=this;n.name=a;var o=n.$=t(e);i=n.options=t.extend({},r.DEFAULTS,this.$.data(),i),n.$template=o.find(".file-input").detach(),n.add()};r.prototype.add=function(){var t=this,e=t.options,i=t.$template.clone();"before"===e.appendWay?t.$.prepend(i):t.$.append(i),i.fileInput({fileMaxSize:e.eachFileMaxSize,fileSizeError:e.fileSizeError,onDelete:function(e){e.$.remove(),t.options.onDelete&&t.options.onDelete(e,t)},onSelect:function(e,i){t.add(),t.options.onSelect&&t.options.onSelect(e,i,t)}})},r.DEFAULTS={fileMaxSize:0,eachFileMaxSize:0,appendWay:"after",fileSizeError:"无法上传大于 {0} 的文件。"},t.fn.fileInputList=function(e){return this.each(function(){var i=t(this),n=i.data(a),o="object"==typeof e&&e;n||i.data(a,n=new r(this,o)),"string"==typeof e&&n[e]()})},r.NAME=a,t.fn.fileInputList.Constructor=r,t(function(){t('[data-provide="fileInputList"]').fileInputList()})}(jQuery),function(t){window.config||(window.config={}),t.createLink=window.createLink=function(t,e,n,o,s){if(o||(o=config.defaultView),s||(s=!1),n)for(n=n.split("&"),i=0;i'+d+"")}}t.val()||(time=e(s.format("hh:mm")),time=time-time%10+10,t.val(n(time)))};t.fn.timeSpanControl=function(i){return this.each(function(){var a=t(this),r=t.extend({},i,a.data()),l=a.find('[name="begin"],.control-time-begin'),h=a.find('[name="end"],.control-time-end'),c=function(){var t=l.val();if(a.find(".hide-empty-begin").toggleClass("hide",!t),t){var i=n(e(t)+30);h.find('option[value="'+i+'"]').length&&h.val(i),r.onChange&&r.onChange(h,i)}};if(a.data("timeSpanControlInit")){if(r.begin){var d=o(r.begin).format("hh:mm");l.find('option[value="'+d+'"]').length&&l.val(d),r.onChange&&r.onChange(l,d)}if(r.end){var u=o(r.end).format("hh:mm");h.find('option[value="'+u+'"]').length&&h.val(u),r.onChange&&r.onChange(h,u)}}else l.on("change",c),s(l,r.begin),s(h,r.end),a.data("timeSpanControlInit",!0);r.end||c()})},t.timeSpanControl={convertTimeToNum:e,convertNumToTime:n,initTimeSelect:s,createTime:o};var a=t.setSearchType=function(e,i){var n=t("#searchType");e||(e=n.val()),e=e||"bug",n.val(e);var o=t("#searchTypeMenu");o.find("li.selected").removeClass("selected");var s=o.find('a[data-value="'+e+'"]'),a=s.text();s.parent().addClass("selected"),t("#searchTypeName").text(a),i||t("#searchInput").focus()};t.gotoObject=function(e,i){e||(e=t("#searchType").val()),i||(i=t("#searchInput").val()),i&&e&&(window.location.href=t.createLink(e,"testsuite"===e?"library":"view","id="+i))},t(function(){a(null,!0),t(document).on("keydown",function(e){e.ctrlKey&&71===e.keyCode&&(t("#searchInput").val("").focus(),e.stopPropagation(),e.preventDefault())})}),t.removeAnchor=window.removeAnchor=function(t){var e=t.lastIndexOf("#");return e>-1?t.substr(0,e):t},t.refreshPage=function(){location.href=removeAnchor(location.href)},t.selectLang=window.selectLang=function(e){t.cookie("lang",e,{expires:config.cookieLife,path:config.webRoot}),t.ajaxSendScore("selectLang"),t.refreshPage()},t.selectTheme=window.selectTheme=function(e){t.cookie("theme",e,{expires:config.cookieLife,path:config.webRoot}),t.ajaxSendScore("selectTheme"),t.refreshPage()},t.chosenDefaultOptions={middle_highlight:!0,disable_search_threshold:1,compact_search:!0,allow_single_deselect:!0,placeholder_text_single:" ",placeholder_text_multiple:" ",search_contains:!0,drop_direction:function(){var e=t(this.container).closest(".table-responsive:not(.scroll-none)");if(e.length){if(this.drop_directionFixed)return this.drop_directionFixed;var i="down",n=this.container.find(".chosen-drop"),o=this.container.position(),s=n.outerHeight();return o.top>=s&&o.top+s{page}/{totalPage}
    ',"next_icon","last_icon"],onPageChange:function(e,i){e.recPerPage!==i.recPerPage&&t.cookie(this.options.pageCookie,e.recPerPage,{expires:config.cookieLife,path:config.webRoot}),e.recPerPage!==i.recPerPage&&(window.location.href=this.createLink())}}),t.zui.Messager.DEFAULTS.cssClass="messagger-zt",t.fn.reverseOrder=function(){return this.each(function(){var e=t(this);e.prependTo(e.parent())})};var r=function(e,i){var n=t(e);i=t.extend({},n.data(),i);var o=n.find(".histories-list"),s=!0,a=!1;n.on("click",".btn-reverse",function(){o.children("li").reverseOrder(),s=!s,t(this).find(".icon").toggleClass("icon-arrow-up",s).toggleClass("icon-arrow-down",!s)}).on("click",".btn-expand-all",function(){var e=t(this).find(".icon");a=!a,e.toggleClass("icon-plus",!a).toggleClass("icon-minus",a),o.children("li").toggleClass("show-changes",a)}).on("click",".btn-expand",function(){t(this).closest("li").toggleClass("show-changes")}).on("click",".btn-strip",function(){var e=t(this),n=e.find(".icon"),o=n.hasClass("icon-code");n.toggleClass("icon-code",!o).toggleClass("icon-text",o),e.attr("title",o?i.original:i.textdiff),e.closest("li").toggleClass("show-original",o)}),o.find(".btn-strip").attr("title",i.original);var r=n.find(".modal-comment").modal({show:!1}).on("shown.zui.modal",function(){var t=r.find("#comment");t.length&&(t.focus(),window.editor&&window.editor.comment&&window.editor.comment.focus())}).on("show.zui.modal",function(){var e=r.find("#comment");e.length&&!e.data("keditor")&&t.fn.kindeditor&&e.kindeditor()});n.on("click",".btn-comment",function(t){r.modal("toggle"),t.preventDefault()}).on("click",".btn-edit-comment,.btn-hide-form",function(){t(this).closest("li").toggleClass("show-form")});var l=n.find(".comment-edit-form");l.ajaxForm({success:function(t,e,i,n){setTimeout(function(){l.closest("li").removeClass("show-form")},2e3)}})};t.fn.histories=function(t){return this.each(function(){r(this,t)})},t(function(){t(".histories").histories()});var l=0,h=0;t.toggleSidebar=function(e){var i=t("#sidebar");if(i.length){var n=t("main");if(void 0===e)e=n.hasClass("hide-sidebar");else if(e&&!n.hasClass("hide-sidebar"))return;n.toggleClass("hide-sidebar",!e),clearTimeout(l),t.zui.store.set(h,e);var o=i.children(".cell"),s={overflow:"visible",maxHeight:"initial"};e?(i.addClass("showing"),l=setTimeout(function(){i.removeClass("showing"),i.trigger("sidebar.toggle",e)},210)):(i.trigger("sidebar.toggle",e),t(window).width()<1900&&(s={overflow:"hidden",maxHeight:t(window).height()-45})),o.css(s)}};var c=t.initSidebar=function(){var e=t("#sidebar");if(e.length){if(e.data("init"))return!0;h="sidebar:"+(e.data("id")||config.currentModule+"/"+config.currentMethod);var i=t("main");i.on("click",".sidebar-toggle",function(){t.toggleSidebar(i.hasClass("hide-sidebar"))});var n=t.zui.store.get(h,e.data("hide")!==!1);n===!1&&e.addClass("no-animate"),t.toggleSidebar(n),n===!1&&setTimeout(function(){e.removeClass("no-animate")},500);var o=function(){var i=e.find(".sidebar-toggle");if(i.length){var n=i[0].getBoundingClientRect(),o=t(window).height(),s=Math.max(0,Math.floor(Math.min(o-40,n.top+n.height)-Math.max(n.top,0))/2)+(n.top<0?0-n.top:0);i.find(".icon").css("top",s)}};return o(),e.on("sidebar.toggle",o),t(window).on("resize",o).on("scroll",o),e.data("init",1),!0}};c()||t(c),t.toggleQueryBox=function(e,i){var n=t(i||"#queryBox");n.length&&(void 0===e&&(e=!n.hasClass("show")),n.toggleClass("show",!!e),n.data("init")||(n.addClass("load-indicator loading").data("init",1),t.get(t.createLink("search","buildForm"),function(t){n.html(t).removeClass("loading")})),t(".querybox-toggle").toggleClass("querybox-opened",e))},t(function(){var e=t("#queryBox");e.length&&(t(document).on("click",".querybox-toggle",function(){t.toggleQueryBox()}),e.hasClass("show")&&t.toggleQueryBox(!0))}),t.extend(t.fn.colorPicker.Constructor.DEFAULTS,{colors:["#3DA7F5","#75C941","#2DBDB2","#797EC9","#FFAF38","#FF4E3E"]}),window.setCheckedCookie=function(){var e=[],i=t('#mainContent .main-table tbody>tr input[type="checkbox"]:checked');i.each(function(){var i=parseInt(t(this).val(),10);NaN!==i&&e.push(i)}),t.cookie("checkedItem",e.join(","),{expires:config.cookieLife,path:config.webRoot})},t.extend(t.fn.modal.bs.Constructor.DEFAULTS,{scrollInside:!0,backdrop:"static",headerHeight:100}),t.extend(t.zui.ModalTrigger.DEFAULTS,{scrollInside:!0,backdrop:"static",headerHeight:40}),t.fn.initIframeModal=function(){return this.each(function(){var e=t(this);if(!e.parents('[data-ride="table"],.skip-iframe-modal').length){var i={type:"iframe"};e.hasClass("export")&&t.extend(i,{width:800,shown:setCheckedCookie},e.data()),e.modalTrigger(i)}})},t(function(){t("a.iframe,.export").initIframeModal()});var d=function(){var e,i,n=t(this),o=t.extend({limitSize:40,suffix:"…"},n.data()),s=n.text();if(s.length>o.limitSize){e=s,i=s.substr(0,o.limitSize)+o.suffix,n.text(i).addClass("limit-text-on");var a=o.toggleBtn?t(o.toggleBtn):n.next(".text-limit-toggle");a.text(a.data("textExpand")),a.on("click",function(){var t=n.toggleClass("limit-text-on").hasClass("limit-text-on");n.text(t?i:e),a.text(a.data(t?"textExpand":"textCollapse"))})}else(o.toggleBtn?t(o.toggleBtn):n.next(".text-limit-toggle")).hide()};t.fn.textLimit=function(){return this.each(d)},t(function(){t(".text-limit").textLimit()}),t.fixedTableHead=window.fixedTableHead=function(e,i){var n=t(e);if(n.is("table")||(n=n.find("table")),n.length){var o=t(i||window),s=null,a=function(){var e=n.children("thead"),i=e[0].getBoundingClientRect(),o=n.next(".fixed-head-table");if(i.top<0){var a=e.width();if(o.length){if(s!==a){s=a;var r=o.find("th");e.find("th").each(function(e){r.eq(e).width(t(this).width())})}}else{var o=t("
    ").addClass(n.attr("class")),l=e.clone(),r=l.find("th");e.find("th").each(function(e){r.eq(e).width(t(this).width())}),o.append(l).insertAfter(n)}o.css({left:i.left,width:i.width}).show()}else o.hide()};o.on("scroll",a).on("resize",a),a()}},t(document).on("click","tr[data-url]",function(){var e=t(this),i=e.data("href")||e.data("url");i&&(window.location.href=i)}),"yes"===config.onlybody&&self===parent&&(window.location.href=window.location.href.replace("?onlybody=yes","").replace("&onlybody=yes","")),t(function(){t("body").addClass("m-{currentModule}-{currentMethod}".format(config))});var u,p,f,g,m,v=function(){u||(u=t("#subNavbar"),p=t("#pageNav"),f=t("#pageActions"),g=u.children(".nav"),m=g.outerWidth());var e=u.outerWidth(),i=p.outerWidth()||0,n=f.outerWidth()||0;if(i=i?i+15:0,n=n?n+15:0,!i&&!n)return void g.css({maxWidth:null,left:null,position:"static"});var o=Math.max(300,e-i-n),s=Math.min(o,m),a=(e-s)/2,r=i&&a.btn-toolbar");if(e.length){var i,n,o=!1,s=null,a=e.children(),r=a.length;for(a.each(function(e){i=t(this),n=i.is(".divider"),n&&!s&&i.hide(),o||n||(o=!0),s=n?null:i,!n||e!==r-1&&0!==e||i.hide()});i.length&&i.is(".divider");)i=i.hide().prev();o||e.hide()}};t(function(){t(".input-group,.btn-group").fixInputGroup(),k()}),window.holders&&t.each(window.holders,function(e){var i=t("#"+e);i.length&&i.is("input")&&i.attr("placeholder",window.holders[e])});var T=function(){var e,i="en"==config.clientLang?"http://www.zentao.pm/book/zentaomanual/8.html?fullScreen=zentao":"http://www.zentao.net/book/zentaopmshelp.html?fullScreen=zentao",n=t("#navbar > .nav").first(),o=1e4,s=function(){clearTimeout(e),t("#helpContent").removeClass("show-error")},a=t.openHelp=function(){s(),n.children("li.active:not(#helpMenuItem)").removeClass("active").addClass("close-help-tab"),t("#helpMenuItem").addClass("active");var a=t("#helpContent");if(a.length){if(t("body").hasClass("show-help-tab"))return void t("#helpIframe").get(0).contentWindow.location.replace(i)}else{a=t('

    '+lang.timeout+'

    '+i+'

    '),t("#header").after(a);var r=t("#helpIframe").get(0);e=setTimeout(function(){t("#helpContent").addClass("show-error")},o),r.onload=r.onreadystatechange=function(){this.readyState&&"complete"!=this.readyState||s()}}t("body").addClass("show-help-tab")},r=t.closeHelp=function(){t("body").removeClass("show-help-tab"),t("#helpMenuItem").removeClass("active"),n.find("li.close-help-tab").removeClass("close-help-tab").addClass("active").find("a").focus()};t(document).on("click",".open-help-tab",function(e){var i=t("#helpMenuItem");i.length||(i=t('
  • '+t(this).text()+'
  • '),n.append('
  • ').append(i)),a(),e.preventDefault()}).on("click",".close-help-tab",function(t){r(),t.stopPropagation(),t.preventDefault()})};t(T),t(function(){var e=t(".table-responsive"),i=function(){e.each(function(){this.scrollHeight-3<=this.clientHeight&&this.scrollWidth-3<=this.clientWidth?t(this).addClass("scroll-none").css("overflow","visible"):t(this).removeClass("scroll-none").css("overflow","auto")})};e.length&&(i(),t(window).on("resize",i))});var S=function(){var e=this.value?this.scrollHeight+2+"px":"32px";this.style.height="auto",this.style.height=e,t(this).closest("tr").find("textarea").each(function(){this.style.height=e})};t.autoResizeTextarea=function(e){t(e).each(S)},t(function(){t("textarea.autosize").each(S),t(document).on("input keyup paste change","textarea.autosize",S)}),t(function(){var e=t("#dropMenu");e.length&&e.on("click",".toggle-right-col",function(t){e.toggleClass("show-right-col"),t.stopPropagation(),t.preventDefault()})});var D="undefined"!=typeof InstallTrigger;t.zui.browser.firefox=D,t("html").toggleClass("is-firefox",D).toggleClass("not-firefox",!D),t(function(){var e=t("#mainContent>.main-col"),i=e.children(".main-actions"),n=i.prev();if(i.length&&n.length){t('
    ').css("height",i.outerHeight()).insertAfter(i);var o=function(){var e=n[0].getBoundingClientRect(),o=e.top+e.height+120>t(window).height();t("body").toggleClass("main-actions-fixed",o),o&&i.width(n.width())};t.resetToolbarPosition=o,o(),t(window).on("resize scroll",o)}}),t(document).on("show.zui.modal",function(e){t("body.body-modal").length&&window.parent&&window.parent!==window&&t(e.target).is(".modal")&&window.parent.$("body").addClass("hide-modal-close")}).on("hidden.zui.modal",function(){t("body.body-modal").length&&window.parent&&window.parent!==window&&window.parent.$("body").removeClass("hide-modal-close")})}(jQuery); \ No newline at end of file From 46cfd4c19a95a11f08e11718d0ce969a937c35e9 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Tue, 25 Dec 2018 14:14:08 +0800 Subject: [PATCH 042/442] * adjust for xuanxuan server. --- .../module/admin/ext/control/downloadxxd.php | 11 +++++++++-- .../module/admin/ext/control/xuanxuan.php | 19 ++++++++++--------- .../module/admin/ext/view/xuanxuan.html.php | 14 ++++++++------ xuanxuan/module/chat/ext/lang/en/xuanxuan.php | 3 ++- .../module/chat/ext/lang/zh-cn/xuanxuan.php | 3 ++- .../chat/ext/model/class/xuanxuan.class.php | 8 ++++++-- xuanxuan/module/common/ext/model/xuanxuan.php | 6 ------ 7 files changed, 37 insertions(+), 27 deletions(-) delete mode 100644 xuanxuan/module/common/ext/model/xuanxuan.php diff --git a/xuanxuan/module/admin/ext/control/downloadxxd.php b/xuanxuan/module/admin/ext/control/downloadxxd.php index e2f82c9cb2..95739bf8d1 100644 --- a/xuanxuan/module/admin/ext/control/downloadxxd.php +++ b/xuanxuan/module/admin/ext/control/downloadxxd.php @@ -5,9 +5,16 @@ class admin extends control { if(in_array($type, array('config', 'package'))) { - $setting = $this->config->xuanxuan; + $this->loadModel('mail'); + $this->loadModel('chat'); + $domain = empty($this->config->mail->domain) ? commonModel::getSysURL() : $this->config->mail->domain; + if(!empty($this->config->xuanxuan->server)) $domain = $this->config->xuanxuan->server; + if(strpos($domain, '127.0.0.1') !== false) die(js::alert($this->lang->chat->xxdServerError)); + if(empty($domain)) die(js::alert($this->lang->chat->xxdServerEmpty)); + + $setting = $this->config->xuanxuan; $setting->os = $os; - $this->loadModel('chat')->downloadXXD($setting, $type); + $this->chat->downloadXXD($setting, $type); } die("Params error."); } diff --git a/xuanxuan/module/admin/ext/control/xuanxuan.php b/xuanxuan/module/admin/ext/control/xuanxuan.php index 08a64fd3e2..e7d4f7c05f 100644 --- a/xuanxuan/module/admin/ext/control/xuanxuan.php +++ b/xuanxuan/module/admin/ext/control/xuanxuan.php @@ -23,10 +23,15 @@ class admin extends control if(empty($setting->sslkey)) $errors['sslkey'] = $this->lang->chat->errorSSLKey; } + if(strpos($setting->server, '127.0.0.1') !== false) $errors[] = $this->lang->chat->xxdServerError; + if(strpos($setting->server, 'https://') !== 0 and strpos($setting->server, 'http://') !== 0) $errors[] = $this->lang->chat->xxdSchemeError; + if(empty($setting->server)) $errors[] = $this->lang->chat->xxdServerEmpty; + if($errors) $this->send(array('result' => 'fail', 'message' => $errors)); - $setting->server = ($setting->isHttps ? 'https' : 'http') . '://' . $setting->domain . ':' . $setting->commonPort; - $result = $this->loadModel('setting')->setItems('system.common.xuanxuan', $setting, 'all'); + + $result = $this->loadModel('setting')->setItems('system.common.xuanxuan', $setting); + $this->setting->setItem('system.mail.domain', $setting->server); if(!$result) $this->send(array('result' => 'fail', 'message' => dao::getError())); $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => inlink('xuanxuan'))); } @@ -34,13 +39,9 @@ class admin extends control $os = 'win'; if(strpos(strtolower(PHP_OS), 'win') !== 0) $os = strtolower(PHP_OS); - $domain = $this->server->http_host; - if(!empty($this->config->xuanxuan->server)) - { - preg_match('/^(https?:\/\/)?([^\:]+)/i', $this->config->xuanxuan->server, $match); - $domain = $match[2]; - } - + $this->loadModel('mail'); + $domain = empty($this->config->mail->domain) ? commonModel::getSysURL() : $this->config->mail->domain; + if(!empty($this->config->xuanxuan->server)) $domain = $this->config->xuanxuan->server; $this->view->title = $this->lang->chat->common; $this->view->adminList = $this->loadModel('user')->getPairs('admin'); diff --git a/xuanxuan/module/admin/ext/view/xuanxuan.html.php b/xuanxuan/module/admin/ext/view/xuanxuan.html.php index 0ea81fbd52..cb5974b3cb 100644 --- a/xuanxuan/module/admin/ext/view/xuanxuan.html.php +++ b/xuanxuan/module/admin/ext/view/xuanxuan.html.php @@ -21,11 +21,12 @@

    chat->settings;?>

    -
    + - + + @@ -37,7 +38,8 @@ - + + @@ -58,7 +60,7 @@ - + - + '); + theadHtml.push(''); } theadHtml.push(''); $thead = $(theadHtml.join('')); diff --git a/www/js/kindeditor/kindeditor.min.js b/www/js/kindeditor/kindeditor.min.js index 37ad659afd..c2f1a239cd 100644 --- a/www/js/kindeditor/kindeditor.min.js +++ b/www/js/kindeditor/kindeditor.min.js @@ -1,6 +1,6 @@ -!function(window,undefined){function _isArray(e){return!!e&&"[object Array]"===Object.prototype.toString.call(e)}function _isFunction(e){return!!e&&"[object Function]"===Object.prototype.toString.call(e)}function _inArray(e,t){for(var n=0,i=t.length;n=0}function _addUnit(e,t){return t=t||"px",e&&/^\d+$/.test(e)?e+t:e}function _removeUnit(e){var t;return e&&(t=/(\d+)/.exec(e))?parseInt(t[1],10):0}function _escape(e){return e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""")}function _unescape(e){return e.replace(/</g,"<").replace(/>/g,">").replace(/"/g,'"').replace(/&/g,"&")}function _toCamel(e){var t=e.split("-");return e="",_each(t,function(t,n){e+=t>0?n.charAt(0).toUpperCase()+n.substr(1):n}),e}function _toHex(e){function t(e){var t=parseInt(e,10).toString(16).toUpperCase();return t.length>1?t:"0"+t}return e.replace(/rgb\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)/gi,function(e,n,i,a){return"#"+t(n)+t(i)+t(a)})}function _toMap(e,t){t=t===undefined?",":t;var n,i={},a=_isArray(e)?e:e.split(t);return _each(a,function(e,t){if(n=/^(\d+)\.\.(\d+)$/.exec(t))for(var a=parseInt(n[1],10);a<=parseInt(n[2],10);a++)i[a.toString()]=!0;else i[t]=!0}),i}function _toArray(e,t){return Array.prototype.slice.call(e,t||0)}function _undef(e,t){return e===undefined?t:e}function _invalidUrl(e){return!e||/[<>"]/.test(e)}function _addParam(e,t){return e.indexOf("?")>=0?e+"&"+t:e+"?"+t}function _extend(e,t,n){n||(n=t,t=null);var i;if(t){var a=function(){};a.prototype=t.prototype,i=new a,_each(n,function(e,t){i[e]=t})}else i=n;i.constructor=e,e.prototype=i,e.parent=t?t.prototype:null}function _json(text){var match;(match=/\{[\s\S]*\}|\[[\s\S]*\]/.exec(text))&&(text=match[0]);var cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;if(cx.lastIndex=0,cx.test(text)&&(text=text.replace(cx,function(e){return"\\u"+("0000"+e.charCodeAt(0).toString(16)).slice(-4)})),/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return eval("("+text+")");throw"JSON parse error"}function _getBasePath(){for(var e,t=document.getElementsByTagName("script"),n=0,i=t.length;n=0)return void _each(t.split(","),function(){_bind(e,this,n)});var i=_getId(e);i||(i=_setId(e)),_eventData[i]===undefined&&(_eventData[i]={});var a=_eventData[i][t];a&&a.length>0?_unbindEvent(e,t,a[0]):(_eventData[i][t]=[],_eventData[i].el=e),a=_eventData[i][t],0===a.length&&(a[0]=function(t){var n=t?new KEvent(e,t):undefined;_each(a,function(t,i){t>0&&i&&i.call(e,n)})}),_inArray(n,a)<0&&a.push(n),_bindEvent(e,t,a[0])}function _unbind(e,t,n){if(t&&t.indexOf(",")>=0)return void _each(t.split(","),function(){_unbind(e,this,n)});var i=_getId(e);if(i){if(t===undefined)return void(i in _eventData&&(_each(_eventData[i],function(t,n){"el"!=t&&n.length>0&&_unbindEvent(e,t,n[0])}),delete _eventData[i],_removeId(e)));if(_eventData[i]){var a=_eventData[i][t];if(a&&a.length>0){n===undefined?(_unbindEvent(e,t,a[0]),delete _eventData[i][t]):(_each(a,function(e,t){e>0&&t===n&&a.splice(e,1)}),1==a.length&&(_unbindEvent(e,t,a[0]),delete _eventData[i][t]));var o=0;_each(_eventData[i],function(){o++}),o<2&&(delete _eventData[i],_removeId(e))}}}}function _fire(e,t){if(t.indexOf(",")>=0)return void _each(t.split(","),function(){_fire(e,this)});var n=_getId(e);if(n){var i=_eventData[n][t];_eventData[n]&&i&&i.length>0&&i[0]()}}function _ctrl(e,t,n){t=/^\d{2,}$/.test(t)?t:t.toUpperCase().charCodeAt(0),_bind(e,"keydown",function(i){!i.ctrlKey||i.which!=t||i.shiftKey||i.altKey||(n.call(e),i.stop())})}function _ready(e){function t(){a||(a=!0,e(KindEditor),_readyFinished=!0)}function n(){if(!a){try{document.documentElement.doScroll("left")}catch(e){return void setTimeout(n,100)}t()}}function i(){"complete"===document.readyState&&t()}if(_readyFinished)return void e(KindEditor);var a=!1;if(document.addEventListener)_bind(document,"DOMContentLoaded",t);else if(document.attachEvent){_bind(document,"readystatechange",i);var o=!1;try{o=null==window.frameElement}catch(r){}document.documentElement.doScroll&&o&&n()}_bind(window,"load",t)}function _getCssList(e){for(var t,n={},i=/\s*([\w\-]+)\s*:([^;]*)(;|$)/g;t=i.exec(e);){var a=_trim(t[1].toLowerCase()),o=_trim(_toHex(t[2]));n[a]=o}return n}function _getAttrList(e){for(var t,n={},i=/\s+(?:([\w\-:]+)|(?:([\w\-:]+)=([^\s"'<>]+))|(?:([\w\-:"]+)="([^"]*)")|(?:([\w\-:"]+)='([^']*)'))(?=(?:\s|\/|>)+)/g;t=i.exec(e);){var a=(t[1]||t[2]||t[4]||t[6]).toLowerCase(),o=(t[2]?t[3]:t[4]?t[5]:t[7])||"";n[a]=o}return n}function _addClassToTag(e,t){return e=/\s+class\s*=/.test(e)?e.replace(/(\s+class=["']?)([^"']*)(["']?[\s>])/,function(e,n,i,a){return(" "+i+" ").indexOf(" "+t+" ")<0?""===i?n+t+a:n+i+" "+t+a:e}):e.substr(0,e.length-1)+' class="'+t+'">'}function _formatCss(e){var t="";return _each(_getCssList(e),function(e,n){t+=e+":"+n+";"}),t}function _formatUrl(e,t,n,i){function a(e){for(var t=e.split("/"),n=[],i=0,a=t.length;i0&&n.pop():""!==o&&"."!=o&&n.push(o)}return"/"+n.join("/")}function o(t,n){if(e.substr(0,t.length)===t){for(var a=[],r=0;r0&&(s+="/"+a.join("/")),"/"==i&&(s+="/"),s+e.substr(t.length)}if(l=/^(.*)\//.exec(t))return o(l[1],++n)}if(t=_undef(t,"").toLowerCase(),"data:"!=e.substr(0,5)&&(e=e.replace(/([^:])\/\//g,"$1/")),_inArray(t,["absolute","relative","domain"])<0)return e;if(n=n||location.protocol+"//"+location.host,i===undefined){var r=location.pathname.match(/^(\/.*)\//);i=r?r[1]:""}var l;if(l=/^(\w+:\/\/[^\/]*)/.exec(e)){if(l[1]!==n)return e}else if(/^\w+:/.test(e))return e;return/^\//.test(e)?e=n+a(e.substr(1)):/^\w+:\/\//.test(e)||(e=n+a(i+"/"+e)),"relative"===t?e=o(n+i,0).substr(2):"absolute"===t&&e.substr(0,n.length)===n&&(e=e.substr(n.length)),e}function _formatHtml(e,t,n,i,a){null==e&&(e=""),n=n||"",i=_undef(i,!1),a=_undef(a,"\t");var o="xx-small,x-small,small,medium,large,x-large,xx-large".split(",");e=e.replace(/(<(?:pre|pre\s[^>]*)>)([\s\S]*?)(<\/pre>)/gi,function(e,t,n,i){return t+n.replace(/<(?:br|br\s[^>]*)>/gi,"\n")+i}),e=e.replace(/<(?:br|br\s[^>]*)\s*\/?>\s*<\/p>/gi,"

    "),e=e.replace(/(<(?:p|p\s[^>]*)>)\s*(<\/p>)/gi,"$1
    $2"),e=e.replace(/\u200B/g,""),e=e.replace(/\u00A9/g,"©"),e=e.replace(/<[^>]+>/g,function(e){return e.replace(/\s+/g," ")});var r={};t&&(_each(t,function(e,t){for(var n=e.split(","),i=0,a=n.length;i]*)>)([\s\S]*?)(<\/script>)/gi,"")),r.style||(e=e.replace(/(<(?:style|style\s[^>]*)>)([\s\S]*?)(<\/style>)/gi,"")));var l=/(\s*)<(\/)?([\w\-:]+)((?:\s+|(?:\s+[\w\-:]+)|(?:\s+[\w\-:]+=[^\s"'<>]+)|(?:\s+[\w\-:"]+="[^"]*")|(?:\s+[\w\-:"]+='[^']*'))*)(\/)?>(\s*)/g,s=[];return e=e.replace(l,function(e,l,d,c,u,p,h){var f=e,m=l||"",g=d||"",v=c.toLowerCase(),_=u||"",b=p?" "+p:"",y=h||"";if(t&&!r[v])return"";if(""===b&&_SINGLE_TAG_MAP[v]&&(b=" /"),_INLINE_TAG_MAP[v]&&(m&&(m=" "),y&&(y=" ")),_PRE_TAG_MAP[v]&&(g?y="\n":m="\n"),i&&"br"==v&&(y="\n"),_BLOCK_TAG_MAP[v]&&!_PRE_TAG_MAP[v])if(i){g&&s.length>0&&s[s.length-1]===v?s.pop():s.push(v),m="\n",y="\n";for(var k=0,w=g?s.length:s.length-1;k=0&&(S[e]=_formatUrl(i,n)),(t&&"style"!==e&&!r[v]["*"]&&!r[v][e]||"body"===v&&"contenteditable"===e||/^kindeditor_\d+$/.test(e))&&delete S[e],"style"===e&&""!==i){var a=_getCssList(i);_each(a,function(e,n){!t||r[v].style||r[v]["."+e]||delete a[e]});var o="";_each(a,function(e,t){o+=e+":"+t+";"}),S.style=o}}),_="",_each(S,function(e,t){"style"===e&&""===t||(t=t.replace(/"/g,"""),_+=" "+e+'="'+t+'"')})}return"font"===v&&(v="span"),m+"<"+g+v+_+b+">"+y}),e=e.replace(/(<(?:pre|pre\s[^>]*)>)([\s\S]*?)(<\/pre>)/gi,function(e,t,n,i){return t+n.replace(/\n/g,'\n')+i}),e=e.replace(/\n\s*\n/g,"\n"),e=e.replace(/\n/g,"\n"),_trim(e)}function _clearMsWord(e,t){return e=e.replace(//gi,"").replace(//gi,"").replace(/]*>[\s\S]*?<\/style>/gi,"").replace(/]*>[\s\S]*?<\/script>/gi,"").replace(/]+>[\s\S]*?<\/w:[^>]+>/gi,"").replace(/]+>[\s\S]*?<\/o:[^>]+>/gi,"").replace(/[\s\S]*?<\/xml>/gi,"").replace(/<(?:table|td)[^>]*>/gi,function(e){return e.replace(/border-bottom:([#\w\s]+)/gi,"border:$1")}),_formatHtml(e,t)}function _mediaType(e){return/\.(rm|rmvb)(\?|$)/i.test(e)?"audio/x-pn-realaudio-plugin":/\.(swf|flv)(\?|$)/i.test(e)?"application/x-shockwave-flash":"video/x-ms-asf-plugin"}function _mediaClass(e){return/realaudio/i.test(e)?"ke-rm":/flash/i.test(e)?"ke-flash":"ke-media"}function _mediaAttrs(e){return _getAttrList(unescape(e))}function _mediaEmbed(e){var t="0&&(r+="width:"+n+"px;"),/\D/.test(i)?r+="height:"+i+";":i>0&&(r+="height:"+i+"px;");var l=''}function _tmpl(e,t){var n=new Function("obj","var p=[],print=function(){p.push.apply(p,arguments);};with(obj){p.push('"+e.replace(/[\r\t\n]/g," ").split("<%").join("\t").replace(/((^|%>)[^\t]*)'/g,"$1\r").replace(/\t=(.*?)%>/g,"',$1,'").split("\t").join("');").split("%>").join("p.push('").split("\r").join("\\'")+"');}return p.join('');");return t?n(t):n}function _contains(e,t){if(9==e.nodeType&&9!=t.nodeType)return!0;for(;t=t.parentNode;)if(t==e)return!0;return!1}function _getAttr(e,t){t=t.toLowerCase();var n=null;if(_GET_SET_ATTRIBUTE||"script"==e.nodeName.toLowerCase())try{n=e.getAttribute(t,2)}catch(i){n=e.getAttribute(t,1)}else{var a=e.ownerDocument.createElement("div");a.appendChild(e.cloneNode(!1));var o=_getAttrList(_unescape(a.innerHTML));t in o&&(n=o[t])}return"style"===t&&null!==n&&(n=_formatCss(n)),n}function _queryAll(e,t){function n(e){return"string"!=typeof e?e:e.replace(/([^\w\-])/g,"\\$1")}function i(e){return e.replace(/\\/g,"")}function a(e,t){return"*"===e||e.toLowerCase()===n(t.toLowerCase())}function o(e,t,n){var o=[],r=n.ownerDocument||n,l=r.getElementById(i(e));return l&&a(t,l.nodeName)&&_contains(n,l)&&o.push(l),o}function r(e,t,n){var o,r,l,s,d=n.ownerDocument||n,c=[];if(n.getElementsByClassName)for(o=n.getElementsByClassName(i(e)),r=0,l=o.length;r-1&&c.push(s)}return c}function l(e,t,n){for(var o,r=[],l=n.ownerDocument||n,s=l.getElementsByName(i(e)),d=0,c=s.length;d])+)/.exec(e);var a=n?n[1]:"*";if(n=/#((?:[\w\-]|\\.)+)$/.exec(e))i=o(n[1],a,t);else if(n=/\.((?:[\w\-]|\\.)+)$/.exec(e))i=r(n[1],a,t);else if(n=/\[((?:[\w\-]|\\.)+)\]/.exec(e))i=s(n[1].toLowerCase(),null,a,t);else if(n=/\[((?:[\w\-]|\\.)+)\s*=\s*['"]?((?:\\.|[^'"]+)+)['"]?\]/.exec(e)){var d=n[1].toLowerCase(),c=n[2];i="id"===d?o(c,a,t):"class"===d?r(c,a,t):"name"===d?l(c,a,t):s(d,c,a,t)}else for(var u,p=t.getElementsByTagName(a),h=0,f=p.length;h1){var u=[];return _each(c,function(){_each(_queryAll(this,t),function(){_inArray(this,u)<0&&u.push(this)})}),u}t=t||document;for(var p,h=[],f=/((?:\\.|[^\s>])+|[\s>])/g;p=f.exec(e);)" "!==p[1]&&h.push(p[1]);var m=[];if(1==h.length)return d(h[0],t);var g,v,_,b,y,k,w,S,C,E,x=!1;for(k=0,lenth=h.length;k"!==g){if(k>0){for(v=[],w=0,C=m.length;w0?n[0]:null}function _get(e){return K(e)[0]}function _getDoc(e){return e?e.ownerDocument||e.document||e:document}function _getWin(e){if(!e)return window;var t=_getDoc(e);return t.parentWindow||t.defaultView}function _setHtml(e,t){if(1==e.nodeType){var n=_getDoc(e);try{e.innerHTML=''+t;var i=n.getElementById("__kindeditor_temp_tag__");i.parentNode.removeChild(i)}catch(a){K(e).empty(),K("@"+t,n).each(function(){e.appendChild(this)})}}}function _hasClass(e,t){return _inString(t,e.className," ")}function _setAttr(e,t,n){_IE&&_V<8&&"class"==t.toLowerCase()&&(t="className"),e.setAttribute(t,""+n)}function _removeAttr(e,t){_IE&&_V<8&&"class"==t.toLowerCase()&&(t="className"),_setAttr(e,t,""),e.removeAttribute(t)}function _getNodeName(e){return e&&e.nodeName?e.nodeName.toLowerCase():""}function _computedCss(e,t){var n=_getWin(e),i=_toCamel(t),a="";if(n.getComputedStyle){var o=n.getComputedStyle(e,null);a=o[i]||o.getPropertyValue(t)||e.style[i]}else e.currentStyle&&(a=e.currentStyle[i]||e.style[i]);return a}function _hasVal(e){return!!_VALUE_TAG_MAP[_getNodeName(e)]}function _docElement(e){return e=e||document,_QUIRKS?e.body:e.documentElement}function _docHeight(e){var t=_docElement(e);return Math.max(t.scrollHeight,t.clientHeight)}function _docWidth(e){var t=_docElement(e);return Math.max(t.scrollWidth,t.clientWidth)}function _getScrollPos(e){e=e||document;var t,n;return _IE||_OPERA?(t=_docElement(e).scrollLeft,n=_docElement(e).scrollTop):(t=_getWin(e).scrollX,n=_getWin(e).scrollY),{x:t,y:n}}function KNode(e){this.init(e)}function _updateCollapsed(e){return e.collapsed=e.startContainer===e.endContainer&&e.startOffset===e.endOffset,e}function _copyAndDelete(e,t,n){function i(i,a,o){var r,s=i.nodeValue.length;if(t){var d=i.cloneNode(!0);r=a>0?d.splitText(a):d,o0&&(c=i.splitText(a),e.setStart(i,a)),o=0&&c<=0&&(c=g.compareBoundaryPoints(_START_TO_START,e)),c>=0&&u<=0&&(u=g.compareBoundaryPoints(_END_TO_END,e)),u>=0&&p<=0&&(p=g.compareBoundaryPoints(_END_TO_START,e)),p>=0)return!1;if(f=m.nextSibling,d>0)if(1==m.nodeType)if(c>=0&&u<=0)t&&h.appendChild(m.cloneNode(!0)),n&&l.push(m);else{var v;if(t&&(v=m.cloneNode(!1),h.appendChild(v)),o(m,v)===!1)return!1}else if(3==m.nodeType){var _;if(_=m==s.startContainer?i(m,s.startOffset,m.nodeValue.length):m==s.endContainer?i(m,0,s.endOffset):i(m,0,m.nodeValue.length),t)try{h.appendChild(_)}catch(b){}}m=f}}var r=e.doc,l=[],s=e.cloneRange().down(),d=-1,c=-1,u=-1,p=-1,h=e.commonAncestor(),f=r.createDocumentFragment();if(3==h.nodeType){var m=i(h,e.startOffset,e.endOffset);return t&&f.appendChild(m),a(),t?f:e}o(h,f),n&&e.up().collapse(!0);for(var g=0,v=l.length;g0?l+=f.text.replace(/\r\n|\n|\r/g,"").length:l=0,h&&K(h).remove()}else 3==p.nodeType&&(d.moveStart("character",p.nodeValue.length),l+=p.nodeValue.length);s<0&&(r=p)}if(s<0&&1==r.nodeType)return{node:a,offset:K(a.lastChild).index()+1};if(s>0)for(;r.nextSibling&&1==r.nodeType;)r=r.nextSibling;if(d=e.duplicate(),_moveToElementText(d,a),d.setEndPoint("StartToEnd",i),l-=d.text.replace(/\r\n|\n|\r/g,"").length,s>0&&3==r.nodeType)for(var v=r.previousSibling;v&&3==v.nodeType;)l-=v.nodeValue.length,v=v.previousSibling;return{node:r,offset:l}}function _getEndRange(e,t){var n=e.ownerDocument||e,i=n.body.createTextRange();if(n==e)return i.collapse(!0),i;if(1==e.nodeType&&e.childNodes.length>0){var a,o,r=e.childNodes;if(0===t?(o=r[0],a=!0):(o=r[t-1],a=!1),!o)return i;if("head"===K(o).name)return 1===t&&(a=!0),2===t&&(a=!1),i.collapse(a),i;if(1==o.nodeType){var l,s=K(o);return s.isControl()&&(l=n.createElement("span"),a?s.before(l):s.after(l),o=l),_moveToElementText(i,o),i.collapse(a),l&&K(l).remove(),i}e=o,t=a?0:o.nodeValue.length}var d=n.createElement("span");return K(e).before(d),_moveToElementText(i,d),i.moveStart("character",t),K(d).remove(),i}function _toRange(e){function t(e){"tr"==K(e.node).name&&(e.node=e.node.cells[e.offset],e.offset=0)}var n,i;if(_IERANGE){if(e.item)return n=_getDoc(e.item(0)),i=new KRange(n),i.selectNode(e.item(0)),i;n=e.parentElement().ownerDocument;var a=_getStartEnd(e,!0),o=_getStartEnd(e,!1);return t(a),t(o),i=new KRange(n),i.setStart(a.node,a.offset),i.setEnd(o.node,o.offset),i}var r=e.startContainer;return n=r.ownerDocument||r,i=new KRange(n),i.setStart(r,e.startOffset),i.setEnd(e.endContainer,e.endOffset),i}function KRange(e){this.init(e)}function _range(e){return e.nodeName?new KRange(e):e.constructor===KRange?e:_toRange(e)}function _nativeCommand(e,t,n){try{e.execCommand(t,!1,n)}catch(i){}}function _nativeCommandValue(e,t){var n="";try{n=e.queryCommandValue(t)}catch(i){}return"string"!=typeof n&&(n=""),n}function _getSel(e){var t=_getWin(e);return _IERANGE?e.selection:t.getSelection()}function _getRng(e){var t,n=_getSel(e);try{t=n.rangeCount>0?n.getRangeAt(0):n.createRange()}catch(i){}return!_IERANGE||t&&(t.item||t.parentElement().ownerDocument===e)?t:null}function _singleKeyMap(e){var t,n,i={};return _each(e,function(e,a){t=e.split(",");for(var o=0,r=t.length;o]+>/g,"")}function _mergeWrapper(e,t){e=e.clone(!0);for(var n=_getInnerNode(e),i=e,a=!1;t;){for(;i;)i.name===t.name&&(_mergeAttrs(i,t.attr(),t.css()),a=!0),i=i.first();a||n.append(t.clone(!1)),a=!1,t=t.first()}return e}function _wrapNode(e,t){if(t=t.clone(!0),3==e.type)return _getInnerNode(t).append(e.clone(!1)),e.replaceWith(t),t;for(var n,i=e;(n=e.first())&&1==n.children().length;)e=n;n=e.first();for(var a=e.doc.createDocumentFragment();n;)a.appendChild(n[0]),n=n.next();return t=_mergeWrapper(i,t),a.firstChild&&_getInnerNode(t).append(a),i.replaceWith(t),t}function _mergeAttrs(e,t,n){_each(t,function(t,n){"style"!==t&&e.attr(t,n)}),_each(n,function(t,n){e.css(t,n)})}function _inPreElement(e){for(;e&&"body"!=e.name;){if(_PRE_TAG_MAP[e.name]||"div"==e.name&&e.hasClass("ke-script"))return!0;e=e.parent()}return!1}function KCmd(e){this.init(e)}function _cmd(e){if(e.nodeName){var t=_getDoc(e);e=_range(t).selectNodeContents(t.body).collapse(!1)}return new KCmd(e)}function _drag(e){var t=e.moveEl,n=e.moveFn,i=e.clickEl||t,a=e.beforeDrag,o=e.iframeFix===undefined||e.iframeFix,r=[document];o&&K("iframe").each(function(){var e=_formatUrl(this.src||"","absolute");if(!/^https?:\/\//.test(e)){var t;try{t=_iframeDoc(this)}catch(n){}if(t){var i=K(this).pos();K(t).data("pos-x",i.x),K(t).data("pos-y",i.y),r.push(t)}}}),i.mousedown(function(e){function o(e){e.preventDefault();var t=K(_getDoc(e.target)),a=_round((t.data("pos-x")||0)+e.pageX-f),o=_round((t.data("pos-y")||0)+e.pageY-m);n.call(i,c,u,p,h,a,o)}function l(e){e.preventDefault()}function s(e){e.preventDefault(),K(r).unbind("mousemove",o).unbind("mouseup",s).unbind("selectstart",l),d.releaseCapture&&d.releaseCapture(),K(d).removeClass("ke-dragging")}e.stopPropagation();var d=i.get(),c=_removeUnit(t.css("left")),u=_removeUnit(t.css("top")),p=t.width(),h=t.height(),f=e.pageX,m=e.pageY;K(d).addClass("ke-dragging"),a&&a(),K(r).mousemove(o).mouseup(s).bind("selectstart",l),d.setCapture&&d.setCapture()})}function KWidget(e){this.init(e)}function _widget(e){return new KWidget(e)}function _iframeDoc(e){return e=_get(e),e.contentDocument||e.contentWindow.document}function _getInitHtml(e,t,n,i){var a=[""===_direction?"":'','',""];return _isArray(n)||(n=[n]),_each(n,function(e,t){t&&a.push('')}),i&&a.push(""),a.push(""),a.join("\n")}function _elementVal(e,t){if(e.hasVal()){if(t===undefined){var n=e.val();return n=n.replace(/(<(?:p|p\s[^>]*)>) *(<\/p>)/gi,"")}return e.val(t)}return e.html(t)}function KEdit(e){this.init(e)}function _edit(e){return new KEdit(e)}function _selectToolbar(e,t){var n=this,i=n.get(e);if(i){if(i.hasClass("ke-disabled"))return;t(i)}}function KToolbar(e){this.init(e)}function _toolbar(e){return new KToolbar(e)}function KMenu(e){this.init(e)}function _menu(e){return new KMenu(e)}function KColorPicker(e){this.init(e)}function _colorpicker(e){return new KColorPicker(e)}function KUploadButton(e){this.init(e)}function _uploadbutton(e){return new KUploadButton(e)}function _createButton(e){e=e||{};var t=e.name||"",n=K(''),i=K('');return e.click&&i.click(e.click),n.append(i),n}function KDialog(e){this.init(e)}function _dialog(e){return new KDialog(e)}function _tabs(e){var t=_widget(e),n=t.remove,i=e.afterSelect,a=t.div,o=[];a.addClass("ke-tabs").bind("contextmenu,mousedown,mousemove",function(e){e.preventDefault()});var r=K('
      ');return a.append(r),t.add=function(e){var t=K('
    • '+e.title+"
    • ");t.data("tab",e),o.push(t),r.append(t)},t.selectedIndex=0,t.select=function(e){t.selectedIndex=e,_each(o,function(n,i){i.unbind(),n===e?(i.addClass("ke-tabs-li-selected"),K(i.data("tab").panel).show("")):(i.removeClass("ke-tabs-li-selected").removeClass("ke-tabs-li-on").mouseover(function(){K(this).addClass("ke-tabs-li-on")}).mouseout(function(){K(this).removeClass("ke-tabs-li-on")}).click(function(){t.select(n)}),K(i.data("tab").panel).hide())}),i&&i.call(t,e)},t.remove=function(){_each(o,function(){this.remove()}),r.remove(),n.call(t)},t}function _loadScript(e,t){var n=document.getElementsByTagName("head")[0]||(_QUIRKS?document.body:document.documentElement),i=document.createElement("script");n.appendChild(i),i.src=e,i.charset="utf-8",i.onload=i.onreadystatechange=function(){this.readyState&&"loaded"!==this.readyState||(t&&t(),i.onload=i.onreadystatechange=null,n.removeChild(i))}}function _chopQuery(e){var t=e.indexOf("?");return t>0?e.substr(0,t):e}function _loadStyle(e){for(var t=document.getElementsByTagName("head")[0]||(_QUIRKS?document.body:document.documentElement),n=document.createElement("link"),i=_chopQuery(_formatUrl(e,"absolute")),a=K('link[rel="stylesheet"]',t),o=0,r=a.length;on&&(n=this.width)))});i.length>0&&"-"==i[0].title;)i.shift();for(;i.length>0&&"-"==i[i.length-1].title;)i.pop();var a=null;if(_each(i,function(e){"-"==this.title&&"-"==a.title&&delete i[e],a=this}),i.length>0){t.preventDefault();var o=K(e.edit.iframe).pos(),r=_menu({x:o.x+t.clientX,y:o.y+t.clientY,width:n,css:{visibility:"hidden"},shadowMode:e.shadowMode});_each(i,function(){this.title&&r.addItem(this)});var l=_docElement(r.doc),s=r.div.height();t.clientY+s>=l.clientHeight-100&&r.pos(r.x,_removeUnit(r.y)-s),r.div.css("visibility","visible"),e.menu=r}}})}function _bindNewlineEvent(){function e(e){for(var t=K(e.commonAncestor());t&&(1!=t.type||t.isStyle());)t=t.parent();return t.name}var t=this,n=t.edit.doc,i=t.newlineTag;if(!(_IE&&"br"!==i||_GECKO&&_V<3&&"p"!==i||_OPERA&&_V<9)){var a=_toMap("h1,h2,h3,h4,h5,h6,pre,li"),o=_toMap("p,h1,h2,h3,h4,h5,h6,pre,li,blockquote");K(n).keydown(function(r){if(!(13!=r.which||r.shiftKey||r.ctrlKey||r.altKey)){t.cmd.selection();var l=e(t.cmd.range);if("marquee"!=l&&"select"!=l)return"br"!==i||a[l]?void(o[l]||_nativeCommand(n,"formatblock","

      ")):(r.preventDefault(),void t.insertHtml("
      "+(_IE&&_V<9?"":"​")))}}),K(n).keyup(function(a){if(!(13!=a.which||a.shiftKey||a.ctrlKey||a.altKey)&&"br"!=i){if(_GECKO){var r=t.cmd.commonAncestor("p"),l=t.cmd.commonAncestor("a");return void(l&&""==l.text()&&(l.remove(!0),t.cmd.range.selectNodeContents(r[0]).collapse(!0),t.cmd.select()))}t.cmd.selection();var s=e(t.cmd.range);if("marquee"!=s&&"select"!=s){o[s]||_nativeCommand(n,"formatblock","

      ");var d=t.cmd.commonAncestor("div");if(d){for(var c=K("

      "),u=d[0].firstChild;u;){var p=u.nextSibling;c.append(u),u=p}d.before(c),d.remove(),t.cmd.range.selectNodeContents(c[0]),t.cmd.select()}}}})}}function _bindTabEvent(){var e=this,t=e.edit.doc;K(t).keydown(function(n){if(9==n.which){if(n.preventDefault(),e.afterTab)return void e.afterTab.call(e,n);var i=e.cmd,a=i.range;a.shrink(),a.collapsed&&1==a.startContainer.nodeType&&(a.insertNode(K("@ ",t)[0]),i.select()),e.insertHtml("    ")}})}function _bindFocusEvent(){var e=this;K(e.edit.textarea[0],e.edit.win).focus(function(t){e.afterFocus&&e.afterFocus.call(e,t),e.container.addClass("focus")}).blur(function(t){e.afterBlur&&e.afterBlur.call(e,t),e.container.removeClass("focus")})}function _removeBookmarkTag(e){return _trim(e.replace(/]*id="?__kindeditor_bookmark_\w+_\d+__"?[^>]*><\/span>/gi,""))}function _removeTempTag(e){return e.replace(/]+class="?__kindeditor_paste__"?[^>]*>[\s\S]*?<\/div>/gi,"")}function _addBookmarkToStack(e,t){if(0===e.length)return void e.push(t);var n=e[e.length-1];_removeBookmarkTag(t.html)!==_removeBookmarkTag(n.html)&&e.push(t)}function _undoToRedo(e,t){var n,i,a=this,o=a.edit,r=o.doc.body;if(0===e.length)return a;o.designMode?(n=a.cmd.range,i=n.createBookmark(!0),i.html=r.innerHTML):i={ -html:r.innerHTML},_addBookmarkToStack(t,i);var l=e.pop();return _removeBookmarkTag(i.html)===_removeBookmarkTag(l.html)&&e.length>0&&(l=e.pop()),o.designMode?(o.html(l.html),l.start&&(n.moveToBookmark(l),a.select())):K(r).html(_removeBookmarkTag(l.html)),a}function KEditor(e){function t(e,t){KEditor.prototype[e]===undefined&&(n[e]=t),n.options[e]=t}var n=this;n.options={},_each(e,function(n,i){t(n,e[n])}),_each(K.options,function(e,i){n[e]===undefined&&t(e,i)});var i=K(n.srcElement||"').css("width","100%"),n.tabIndex=isNaN(parseInt(e.tabIndex,10))?n.srcElement.attr("tabindex"):parseInt(e.tabIndex,10),n.iframe.attr("tabindex",n.tabIndex),n.textarea.attr("tabindex",n.tabIndex),n.width&&n.setWidth(n.width),n.height&&n.setHeight(n.height),n.designMode?n.textarea.hide():n.iframe.hide(),l&&n.iframe.bind("load",function(e){n.iframe.unbind("load"),_IE?t():setTimeout(t,0)}),n.div.append(n.iframe),n.div.append(n.textarea),n.srcElement.hide(),!l&&t()},setWidth:function(e){return this.div.css("width",_addUnit(e)),this},setHeight:function(e){var t=this;return e=_addUnit(e),t.div.css("height",e),t.iframe.css("height",e),(_IE&&_V<8||_QUIRKS)&&(e=_addUnit(_removeUnit(e)-2)),t.textarea.css("height",e),t},remove:function(){var e=this,t=e.doc;K(t.body).unbind(),K(t).unbind(),K(e.win).unbind(),e._mousedownHandler&&K(document).unbind("mousedown",e._mousedownHandler),_elementVal(e.srcElement,e.html()),e.srcElement.show(),t.write(""),e.iframe.unbind(),e.textarea.unbind(),KEdit.parent.remove.call(e)},html:function(e,t){var n=this,i=n.doc;if(n.designMode){var a=i.body;return e===undefined?(e=t?""+a.parentNode.innerHTML+"":a.innerHTML,n.beforeGetHtml&&(e=n.beforeGetHtml(e)),_GECKO&&"
      "==e&&(e=""),e):(n.beforeSetHtml&&(e=n.beforeSetHtml(e)),_IE&&_V>=9&&(e=e.replace(/(<.*?checked=")checked(".*>)/gi,"$1$2")),K(a).html(e),n.afterSetHtml&&n.afterSetHtml(),n)}return e===undefined?n.textarea.val():(n.textarea.val(e),n)},design:function(e){var t,n=this;return(e===undefined?!n.designMode:e)?n.designMode||(t=n.html(),n.designMode=!0,n.html(t),n.textarea.hide(),n.iframe.show()):n.designMode&&(t=n.html(),n.designMode=!1,n.html(t),n.iframe.hide(),n.textarea.show()),n.focus()},focus:function(){var e=this;return e.designMode?e.win.focus():e.textarea[0].focus(),e},blur:function(){var e=this;if(_IE){var t=K('',e.div);e.div.append(t),t[0].focus(),t.remove()}else e.designMode?e.win.blur():e.textarea[0].blur();return e},afterChange:function(e){function t(t){setTimeout(function(){e(t)},1)}var n=this,i=n.doc,a=i.body;return K(i).keyup(function(t){t.ctrlKey||t.altKey||!_CHANGE_KEY_MAP[t.which]||e(t)}),K(i).mouseup(e).contextmenu(e),K(n.win).blur(e),K(a).bind("paste",t),K(a).bind("cut",t),n}}),K.EditClass=KEdit,K.edit=_edit,K.iframeDoc=_iframeDoc,_extend(KToolbar,KWidget,{init:function(e){function t(e){var t=K(e);return t.hasClass("ke-outline")?t:t.hasClass("ke-toolbar-icon")?t.parent():void 0}function n(e,n){var i=t(e.target);if(i){if(i.hasClass("ke-disabled"))return;if(i.hasClass("ke-selected"))return;i[n]("ke-on")}}var i=this;KToolbar.parent.init.call(i,e),i.disableMode=_undef(e.disableMode,!1),i.noDisableItemMap=_toMap(_undef(e.noDisableItems,[])),i._itemMap={},i.div.addClass("ke-toolbar").bind("contextmenu,mousedown,mousemove",function(e){e.preventDefault()}).attr("unselectable","on"),i.div.mouseover(function(e){n(e,"addClass")}).mouseout(function(e){n(e,"removeClass")}).click(function(e){var n=t(e.target);if(n){if(n.hasClass("ke-disabled"))return;i.options.click.call(this,e,n.attr("data-name"))}})},get:function(e){return this._itemMap[e]?this._itemMap[e]:this._itemMap[e]=K("span.ke-icon-"+e,this.div).parent()},select:function(e){return _selectToolbar.call(this,e,function(e){e.addClass("ke-selected")}),self},unselect:function(e){return _selectToolbar.call(this,e,function(e){e.removeClass("ke-selected").removeClass("ke-on")}),self},enable:function(e){var t=this,n=e.get?e:t.get(e);return n&&(n.removeClass("ke-disabled"),n.opacity(1)),t},disable:function(e){var t=this,n=e.get?e:t.get(e);return n&&(n.removeClass("ke-selected").addClass("ke-disabled"),n.opacity(.5)),t},disableAll:function(e,t){var n=this,i=n.noDisableItemMap;return t&&(i=_toMap(t)),(e===undefined?!n.disableMode:e)?(K("span.ke-outline",n.div).each(function(){var e=K(this),t=e[0].getAttribute("data-name",2);i[t]||n.disable(e)}),n.disableMode=!0):(K("span.ke-outline",n.div).each(function(){var e=K(this),t=e[0].getAttribute("data-name",2);i[t]||n.enable(e)}),n.disableMode=!1),n}}),K.ToolbarClass=KToolbar,K.toolbar=_toolbar,_extend(KMenu,KWidget,{init:function(e){var t=this;e.z=e.z||811213,KMenu.parent.init.call(t,e),t.centerLineMode=_undef(e.centerLineMode,!0),t.div.addClass("ke-menu").bind("click,mousedown",function(e){e.stopPropagation()}).attr("unselectable","on")},addItem:function(e){var t=this;if("-"===e.title)return void t.div.append(K('
      '));var n=K('
      '),i=K('
      '),a=K('
      '),o=_addUnit(e.height),r=_undef(e.iconClass,"");t.div.append(n),o&&(n.css("height",o),a.css("line-height",o));var l;return t.centerLineMode&&(l=K('
      '),o&&l.css("height",o)),n.mouseover(function(e){K(this).addClass("ke-menu-item-on"),l&&l.addClass("ke-menu-item-center-on")}).mouseout(function(e){K(this).removeClass("ke-menu-item-on"),l&&l.removeClass("ke-menu-item-center-on")}).click(function(t){e.click.call(K(this)),t.stopPropagation()}).append(i),l&&n.append(l),n.append(a),e.checked&&(r="ke-icon-checked"),""!==r&&i.html(''),a.html(e.title),t},remove:function(){var e=this;return e.options.beforeRemove&&e.options.beforeRemove.call(e),K(".ke-menu-item",e.div[0]).unbind(),KMenu.parent.remove.call(e),e}}),K.MenuClass=KMenu,K.menu=_menu,_extend(KColorPicker,KWidget,{init:function(e){var t=this;e.z=e.z||811213,KColorPicker.parent.init.call(t,e);var n=e.colors||[["#E53333","#E56600","#FF9900","#64451D","#DFC5A4","#FFE500"],["#009900","#006600","#99BB00","#B8D100","#60D978","#00D5FF"],["#337FE5","#003399","#4C33E5","#9933E5","#CC33E5","#EE33EE"],["#FFFFFF","#CCCCCC","#999999","#666666","#333333","#000000"]];t.selectedColor=(e.selectedColor||"").toLowerCase(),t._cells=[],t.div.addClass("ke-colorpicker").bind("click,mousedown",function(e){e.stopPropagation()}).attr("unselectable","on");var i=t.doc.createElement("table");t.div.append(i),i.className="ke-colorpicker-table",i.cellPadding=0,i.cellSpacing=0,i.border=0;var a=i.insertRow(0),o=a.insertCell(0);o.colSpan=n[0].length,t._addAttr(o,"","ke-colorpicker-cell-top");for(var r=0;r').css("background-color",t)):e.html(i.options.noColor),K(e).attr("unselectable","on"),i._cells.push(e)},remove:function(){var e=this;return _each(e._cells,function(){this.unbind()}),KColorPicker.parent.remove.call(e),e}}),K.ColorPickerClass=KColorPicker,K.colorpicker=_colorpicker,_extend(KUploadButton,{init:function(e){var t=this,n=K(e.button),i=e.fieldName||"file",a=e.url||"",o=n.val(),r=e.extraParams||{},l=n[0].className||"",s=e.target||"kindeditor_upload_iframe_"+(new Date).getTime();e.afterError=e.afterError||function(e){alert(e)};var d=[];for(var c in r)d.push('');var u=['
      ',e.target?"":'',e.form?'
      ':'','',d.join(""),'',"",'',e.form?"
      ":"","
      "].join(""),p=K(u,n.doc);n.hide(),n.before(p),t.div=p,t.button=n,t.iframe=e.target?K('iframe[name="'+s+'"]'):K("iframe",p),t.form=e.form?K(e.form):K("form",p),t.fileBox=K(".ke-upload-file",p),t.options=e},submit:function(){var e=this,t=e.iframe;return t.bind("load",function(){t.unbind();var n=document.createElement("form");e.fileBox.before(n),K(n).append(e.fileBox),n.reset(),K(n).remove(!0);var i,a=K.iframeDoc(t),o=a.getElementsByTagName("pre")[0],r="";r=o?o.innerHTML:a.body.innerHTML,r=_unescape(r),t[0].src="javascript:false";try{i=K.json(r)}catch(l){e.options.afterError.call(e,""+a.body.parentNode.innerHTML+"")}i&&e.options.afterUpload.call(e,i)}),e.form[0].submit(),e},remove:function(){var e=this;return e.fileBox&&e.fileBox.unbind(),e.iframe.remove(),e.div.remove(),e.button.show(),e}}),K.UploadButtonClass=KUploadButton,K.uploadbutton=_uploadbutton,_extend(KDialog,KWidget,{init:function(e){var t=this,n=_undef(e.shadowMode,!0);e.z=e.z||811213,e.shadowMode=!1,e.autoScroll=_undef(e.autoScroll,!0),KDialog.parent.init.call(t,e);var i=e.title,a=K(e.body,t.doc),o=e.previewBtn,r=e.yesBtn,l=e.noBtn,s=e.closeBtn,d=_undef(e.showMask,!0);t.div.addClass("ke-dialog").bind("click,mousedown",function(e){e.stopPropagation()});var c=K('
      ').appendTo(t.div);_IE&&_V<7?t.iframeMask=K('').appendTo(t.div):n&&K('
      ').appendTo(t.div);var u=K('
      ');c.append(u),u.html(i),t.closeIcon=K('').click(s.click),u.append(t.closeIcon),t.draggable({clickEl:u,beforeDrag:e.beforeDrag});var p=K('
      ');c.append(p),p.append(a);var h=K('');if((o||r||l)&&c.append(h),_each([{btn:o,name:"preview"},{btn:r,name:"yes"},{btn:l,name:"no"}],function(){if(this.btn){var e=_createButton(this.btn);e.addClass("ke-dialog-"+this.name),h.append(e)}}),t.height&&p.height(_removeUnit(t.height)-u.height()-h.height()),t.div.width(t.div.width()),t.div.height(t.div.height()),t.mask=null,d){var f=_docElement(t.doc),m=Math.max(f.scrollWidth,f.clientWidth),g=Math.max(f.scrollHeight,f.clientHeight);t.mask=_widget({x:0,y:0,z:t.z-1,cls:"ke-dialog-mask",width:m,height:g})}t.autoPos(t.div.width(),t.div.height()),t.footerDiv=h,t.bodyDiv=p,t.headerDiv=u,t.isLoading=!1},setMaskIndex:function(e){var t=this;t.mask.div.css("z-index",e)},showLoading:function(e){e=_undef(e,"");var t=this,n=t.bodyDiv;return t.loading=K('
      '+e+"
      ").width(n.width()).height(n.height()).css("top",t.headerDiv.height()+"px"),n.css("visibility","hidden").after(t.loading),t.isLoading=!0,t},hideLoading:function(){return this.loading&&this.loading.remove(),this.bodyDiv.css("visibility","visible"),this.isLoading=!1,this},remove:function(){var e=this;return e.options.beforeRemove&&e.options.beforeRemove.call(e),e.mask&&e.mask.remove(),e.iframeMask&&e.iframeMask.remove(),e.closeIcon.unbind(),K("input",e.div).unbind(),K("button",e.div).unbind(),e.footerDiv.unbind(),e.bodyDiv.unbind(),e.headerDiv.unbind(),K("iframe",e.div).each(function(){K(this).remove()}),KDialog.parent.remove.call(e),e}}),K.DialogClass=KDialog,K.dialog=_dialog,K.tabs=_tabs,K.loadScript=_loadScript,K.loadStyle=_loadStyle,K.ajax=_ajax;var _plugins={},_language={};KEditor.prototype={lang:function(e){return _lang(e,this.langType)},loadPlugin:function(e,t){var n=this;return _plugins[e]?_isFunction(_plugins[e])?(_plugins[e].call(n,KindEditor),t&&t.call(n),n):(setTimeout(function(){n.loadPlugin(e,t)},100),n):(_plugins[e]="loading",_loadScript(n.pluginsPath+e+"/"+e+".js?ver="+encodeURIComponent(K.DEBUG?_TIME:_VERSION),function(){setTimeout(function(){_plugins[e]&&n.loadPlugin(e,t)},0)}),n)},handler:function(e,t){var n=this;return n._handlers[e]||(n._handlers[e]=[]),_isFunction(t)?(n._handlers[e].push(t),n):(_each(n._handlers[e],function(){t=this.call(n,t)}),t)},clickToolbar:function(e,t){var n=this,i="clickToolbar"+e;return t===undefined?n._handlers[i]?n.handler(i):(n.loadPlugin(e,function(){n.handler(i)}),n):n.handler(i,t)},updateState:function(){var e=this;return _each("justifyleft,justifycenter,justifyright,justifyfull,insertorderedlist,insertunorderedlist,subscript,superscript,bold,italic,underline,strikethrough".split(","),function(t,n){e.cmd.state(n)?e.toolbar.select(n):e.toolbar.unselect(n)}),e},addContextmenu:function(e){return this._contextmenus.push(e),this},afterCreate:function(e){return this.handler("afterCreate",e)},beforeRemove:function(e){return this.handler("beforeRemove",e)},beforeGetHtml:function(e){return this.handler("beforeGetHtml",e)},beforeSetHtml:function(e){return this.handler("beforeSetHtml",e)},afterSetHtml:function(e){return this.handler("afterSetHtml",e)},create:function(){function e(){return 0===s.height()?void setTimeout(e,100):void t.resize(i,a,!1)}var t=this,n=t.fullscreenMode;if(t.isCreated)return t;if(t.srcElement.data("kindeditor"))return t;t.srcElement.data("kindeditor","true"),n?_docElement().style.overflow="hidden":_docElement().style.overflow="";var i=n?_docElement().clientWidth+"px":t.width,a=n?_docElement().clientHeight+"px":t.height;(_IE&&_V<8||_QUIRKS)&&(a=_addUnit(_removeUnit(a)+2));var o=t.container=K(t.layout);n?K(document.body).append(o):t.srcElement.before(o);var r=K(".toolbar",o),l=K(".edit",o),s=t.statusbar=K(".statusbar",o);o.removeClass("container").addClass("ke-container ke-container-"+t.themeType).css("width",i),n?(o.css({position:"absolute",left:0,top:0,"z-index":811211}),_GECKO||(t._scrollPos=_getScrollPos()),window.scrollTo(0,0),K(document.body).css({height:"1px",overflow:"hidden"}),K(document.body.parentNode).css("overflow","hidden"),t._fullscreenExecuted=!0):(t._fullscreenExecuted&&(K(document.body).css({height:"",overflow:""}),K(document.body.parentNode).css("overflow","")),t._scrollPos&&window.scrollTo(t._scrollPos.x,t._scrollPos.y));var d=[];K.each(t.items,function(e,n){"|"==n?d.push(''):"/"==n?d.push('
      '):(d.push(''),d.push(''))});var c=t.toolbar=_toolbar({src:r,html:d.join(""),noDisableItems:t.noDisableItems,click:function(e,n){if(e.stop(),t.menu){var i=t.menu.name;if(t.hideMenu(),i===n)return}t.clickToolbar(n)}}),u=_removeUnit(a)-c.div.height(),p=t.edit=_edit({height:u>0&&_removeUnit(a)>t.minHeight?u:t.minHeight,src:l,srcElement:t.srcElement,designMode:t.designMode,themesPath:t.themesPath,bodyClass:t.bodyClass,cssPath:t.cssPath,cssData:t.cssData,beforeGetHtml:function(e){return e=t.beforeGetHtml(e),e=_removeBookmarkTag(_removeTempTag(e)),_formatHtml(e,t.filterMode?t.htmlTags:null,t.urlType,t.wellFormatMode,t.indentChar)},beforeSetHtml:function(e){return e=_formatHtml(e,t.filterMode?t.htmlTags:null,"",!1),t.beforeSetHtml(e)},afterSetHtml:function(){t.edit=p=this,t.afterSetHtml()},afterCreate:function(){if(t.edit=p=this,t.cmd=p.cmd,t._docMousedownFn=function(e){t.menu&&t.hideMenu()},K(p.doc,document).mousedown(t._docMousedownFn),_bindContextmenuEvent.call(t),_bindNewlineEvent.call(t),_bindTabEvent.call(t),_bindFocusEvent.call(t),p.afterChange(function(e){p.designMode&&(t.updateState(),t.addBookmark(),t.options.afterChange&&t.options.afterChange.call(t))}),p.textarea.keyup(function(e){e.ctrlKey||e.altKey||!_INPUT_KEY_MAP[e.which]||t.options.afterChange&&t.options.afterChange.call(t)}),t.readonlyMode&&t.readonly(),t.isCreated=!0,""===t.initContent&&(t.initContent=t.html()),t._undoStack.length>0){var e=t._undoStack.pop();e.start&&(t.html(e.html),p.cmd.range.moveToBookmark(e),t.select())}t.afterCreate(),t.options.afterCreate&&t.options.afterCreate.call(t)}});return s.removeClass("statusbar").addClass("ke-statusbar").append(''),t._fullscreenResizeHandler&&(K(window).unbind("resize",t._fullscreenResizeHandler),t._fullscreenResizeHandler=null),e(),n?(t._fullscreenResizeHandler=function(e){t.isCreated&&t.resize(_docElement().clientWidth,_docElement().clientHeight,!1)},K(window).bind("resize",t._fullscreenResizeHandler),c.select("fullscreen")):(_GECKO&&K(window).bind("scroll",function(e){t._scrollPos=_getScrollPos()}),t.resizeType>0&&_drag({moveEl:o,clickEl:s,moveFn:function(e,n,i,a,o,r){a+=r,t.resize(null,a)}}),2===t.resizeType&&_drag({moveEl:o,clickEl:s.last(),moveFn:function(e,n,i,a,o,r){i+=o,a+=r,t.resize(i,a)}})),t},remove:function(){var e=this;return e.isCreated?(e.beforeRemove(),e.srcElement.data("kindeditor",""),e.menu&&e.hideMenu(),_each(e.dialogs,function(){e.hideDialog()}),K(document).unbind("mousedown",e._docMousedownFn),e.toolbar.remove(),e.edit.remove(),e.statusbar.last().unbind(),e.statusbar.unbind(),e.container.remove(),e.container=e.toolbar=e.edit=e.menu=null,e.dialogs=[],e.isCreated=!1,e):e},resize:function(e,t,n){var i=this;return n=_undef(n,!0),e&&(/%/.test(e)||(e=_removeUnit(e),e=e/gi,"").replace(/ /gi," ")):t.html(_escape(e))},isEmpty:function(){return""===_trim(this.text().replace(/\r\n|\n|\r/,""))},isDirty:function(){return _trim(this.initContent.replace(/\r\n|\n|\r|t/g,""))!==_trim(this.html().replace(/\r\n|\n|\r|t/g,""))},selectedHtml:function(){var e=this.isCreated?this.cmd.range.html():"";return e=_removeBookmarkTag(_removeTempTag(e))},count:function(e){var t=this;return e=(e||"html").toLowerCase(),"html"===e?t.html().length:"text"===e?t.text().replace(/<(?:img|embed).*?>/gi,"K").replace(/\r\n|\n|\r/g,"").length:0},exec:function(e){e=e.toLowerCase();var t=this,n=t.cmd,i=_inArray(e,"selectall,copy,paste,print".split(","))<0;return i&&t.addBookmark(!1),n[e].apply(n,_toArray(arguments,1)),i&&(t.updateState(),t.addBookmark(!1),t.options.afterChange&&t.options.afterChange.call(t)),t},insertHtml:function(e,t){return this.isCreated?(e=this.beforeSetHtml(e),this.exec("inserthtml",e,t),this):this},appendHtml:function(e){if(this.html(this.html()+e),this.isCreated){var t=this.cmd;t.range.selectNodeContents(t.doc.body).collapse(!1),t.select()}return this},sync:function(){return _elementVal(this.srcElement,this.html()),this},focus:function(){return this.isCreated?this.edit.focus():this.srcElement[0].focus(),this},blur:function(){return this.isCreated?this.edit.blur():this.srcElement[0].blur(),this},addBookmark:function(e){e=_undef(e,!0);var t,n=this,i=n.edit,a=i.doc.body,o=_removeTempTag(a.innerHTML);if(e&&n._undoStack.length>0){var r=n._undoStack[n._undoStack.length-1];if(Math.abs(o.length-_removeBookmarkTag(r.html).length)0){var n=t.dialogs[0],i=t.dialogs[t.dialogs.length-1];n.setMaskIndex(i.z+2),e.z=i.z+3,e.showMask=!1}var a=_dialog(e);return t.dialogs.push(a),a},hideDialog:function(){var e=this;if(e.dialogs.length>0&&e.dialogs.pop().remove(),e.dialogs.length>0){var t=e.dialogs[0],n=e.dialogs[e.dialogs.length-1];t.setMaskIndex(n.z-1)}return e},errorDialog:function(e){var t=this,n=t.createDialog({width:750,title:t.lang("uploadError"),body:'
      '}),i=K("iframe",n.div),a=K.iframeDoc(i);return a.open(),a.write(e),a.close(),K(a.body).css("background-color","#FFF"),i[0].contentWindow.focus(),t}},_instances=[],K.remove=function(e){_eachEditor(e,function(e){this.remove(),_instances.splice(e,1)})},K.sync=function(e){_eachEditor(e,function(){this.sync()})},K.html=function(e,t){_eachEditor(e,function(){this.html(t)})},K.insertHtml=function(e,t){_eachEditor(e,function(){this.insertHtml(t)})},K.appendHtml=function(e,t){_eachEditor(e,function(){this.appendHtml(t)})},_IE&&_V<7&&_nativeCommand(document,"BackgroundImageCache",!0),K.EditorClass=KEditor,K.editor=_editor,K.create=_create,K.instances=_instances,K.plugin=_plugin,K.lang=_lang,_plugin("core",function(e){var t=this,n={undo:"Z",redo:"Y",bold:"B",italic:"I",underline:"U",print:"P",selectall:"A"};if(t.afterSetHtml(function(){t.options.afterChange&&t.options.afterChange.call(t)}),t.afterCreate(function(){if("form"==t.syncType){for(var n=e(t.srcElement),i=!1;n=n.parent();)if("form"==n.name){i=!0;break}if(i){n.bind("submit",function(n){t.sync(),e(window).bind("unload",function(){t.edit.textarea.remove()})});var a=e('[type="reset"]',n);a.click(function(){t.html(t.initContent),t.cmd.selection()}),t.beforeRemove(function(){n.unbind(),a.unbind()})}}}),t.clickToolbar("source",function(){t.edit.designMode?(t.toolbar.disableAll(!0),t.edit.design(!1),t.toolbar.select("source")):(t.toolbar.disableAll(!1),t.edit.design(!0),t.toolbar.unselect("source"),_GECKO?setTimeout(function(){t.cmd.selection()},0):t.cmd.selection()),t.designMode=t.edit.designMode}),t.afterCreate(function(){t.designMode||t.toolbar.disableAll(!0).select("source")}),t.clickToolbar("fullscreen",function(){t.fullscreen()}),t.fullscreenShortcut){var i=!1;t.afterCreate(function(){if(e(t.edit.doc,t.edit.textarea).keyup(function(e){27==e.which&&setTimeout(function(){t.fullscreen()},0)}),i){if(_IE&&!t.designMode)return;t.focus()}i||(i=!0)})}_each("undo,redo".split(","),function(e,i){n[i]&&t.afterCreate(function(){_ctrl(this.edit.doc,n[i],function(){t.clickToolbar(i)})}),t.clickToolbar(i,function(){t[i]()})}),t.clickToolbar("formatblock",function(){var e=t.lang("formatblock.formatBlock"),n={h1:28,h2:24,h3:18,H4:14,p:12},i=t.cmd.val("formatblock"),a=t.createMenu({name:"formatblock",width:"en"==t.langType?200:150});_each(e,function(e,o){var r="font-size:"+n[e]+"px;";"h"===e.charAt(0)&&(r+="font-weight:bold;"),a.addItem({title:''+o+"",height:n[e]+12,checked:i===e||i===o,click:function(){t.select().exec("formatblock","<"+e+">").hideMenu()}})})}),t.clickToolbar("fontname",function(){var e=t.cmd.val("fontname"),n=t.createMenu({name:"fontname",width:150});_each(t.lang("fontname.fontName"),function(i,a){n.addItem({title:''+a+"",checked:e===i.toLowerCase()||e===a.toLowerCase(),click:function(){t.exec("fontname",i).hideMenu()}})})}),t.clickToolbar("fontsize",function(){var e=t.cmd.val("fontsize"),n=t.createMenu({name:"fontsize",width:150});_each(t.fontSizeTable,function(i,a){n.addItem({title:''+a+"",height:_removeUnit(a)+12,checked:e===a,click:function(){t.exec("fontsize",a).hideMenu()}})})}),_each("forecolor,hilitecolor".split(","),function(e,n){t.clickToolbar(n,function(){t.createMenu({name:n,selectedColor:t.cmd.val(n)||"default",colors:t.colorTable,click:function(e){t.exec(n,e).hideMenu()}})})}),_each("cut,copy,paste".split(","),function(e,n){t.clickToolbar(n,function(){t.focus();try{t.exec(n,null)}catch(e){alert(t.lang(n+"Error"))}})}),t.clickToolbar("about",function(){var e='
      KindEditor '+_VERSION+'
      Copyright © kindsoft.net All rights reserved.
      ';t.createDialog({name:"about",width:350,title:t.lang("about"),body:e})}),t.plugin.getSelectedLink=function(){return t.cmd.commonAncestor("a")},t.plugin.getSelectedImage=function(){return _getImageFromRange(t.edit.cmd.range,function(e){return!/^ke-\w+$/i.test(e[0].className)})},t.plugin.getSelectedFlash=function(){return _getImageFromRange(t.edit.cmd.range,function(e){return"ke-flash"==e[0].className})},t.plugin.getSelectedMedia=function(){return _getImageFromRange(t.edit.cmd.range,function(e){return"ke-media"==e[0].className||"ke-rm"==e[0].className})},t.plugin.getSelectedAnchor=function(){return _getImageFromRange(t.edit.cmd.range,function(e){return"ke-anchor"==e[0].className})},_each("link,image,flash,media,anchor".split(","),function(e,n){var i=n.charAt(0).toUpperCase()+n.substr(1);_each("edit,delete".split(","),function(e,a){t.addContextmenu({title:t.lang(a+i),click:function(){t.loadPlugin(n,function(){t.plugin[n][a](),t.hideMenu()})},cond:t.plugin["getSelected"+i],width:150,iconClass:"edit"==a?"ke-icon-"+n:undefined})}),t.addContextmenu({title:"-"})}),t.plugin.getSelectedTable=function(){return t.cmd.commonAncestor("table")},t.plugin.getSelectedRow=function(){return t.cmd.commonAncestor("tr")},t.plugin.getSelectedCell=function(){return t.cmd.commonAncestor("td")||t.cmd.commonAncestor("th")},_each("prop,cellprop,colinsertleft,colinsertright,rowinsertabove,rowinsertbelow,rowmerge,colmerge,rowsplit,colsplit,coldelete,rowdelete,delete".split(","),function(e,n){var i=_inArray(n,["prop","delete"])<0?t.plugin.getSelectedCell:t.plugin.getSelectedTable; -t.addContextmenu({title:t.lang("table"+n),click:function(){t.loadPlugin("table",function(){t.plugin.table[n](),t.hideMenu()})},cond:i,width:170,iconClass:"ke-icon-table"+n})}),t.addContextmenu({title:"-"}),_each("selectall,justifyleft,justifycenter,justifyright,justifyfull,insertorderedlist,insertunorderedlist,indent,outdent,subscript,superscript,hr,print,bold,italic,underline,strikethrough,removeformat,unlink".split(","),function(e,i){n[i]&&t.afterCreate(function(){_ctrl(this.edit.doc,n[i],function(){t.cmd.selection(),t.clickToolbar(i)})}),t.clickToolbar(i,function(){t.focus().exec(i,null)})}),t.afterCreate(function(){function n(){i.range.moveToBookmark(a),i.select(),_WEBKIT&&(e("div."+l,o).each(function(){e(this).after("
      ").remove(!0)}),e("span.Apple-style-span",o).remove(!0),e("span.Apple-tab-span",o).remove(!0),e("span[style]",o).each(function(){"nowrap"==e(this).css("white-space")&&e(this).remove(!0)}),e("meta",o).remove());var n=o[0].innerHTML;o.remove(),""!==n&&(_WEBKIT&&(n=n.replace(/(
      )\1/gi,"$1")),2===t.pasteType&&(n=n.replace(/(<(?:p|p\s[^>]*)>) *(<\/p>)/gi,""),/schemas-microsoft-com|worddocument|mso-\w+/i.test(n)?n=_clearMsWord(n,t.filterMode?t.htmlTags:e.options.htmlTags):(n=_formatHtml(n,t.filterMode?t.htmlTags:null),n=t.beforeSetHtml(n))),1===t.pasteType&&(n=n.replace(/ /gi," "),n=n.replace(/\n\s*\n/g,"\n"),n=n.replace(/]*>/gi,"\n"),n=n.replace(/<\/p>]*>/gi,"\n"),n=n.replace(/<[^>]+>/g,""),n=n.replace(/ {2}/g,"  "),"p"==t.newlineTag?/\n/.test(n)&&(n=n.replace(/^/,"

      ").replace(/$/,"

      ").replace(/\n/g,"

      ")):n=n.replace(/\n/g,"
      $&")),t.insertHtml(n,!0))}var i,a,o,r=t.edit.doc,l="__kindeditor_paste__",s=!1;e(r.body).bind("paste",function(d){if(0===t.pasteType)return void d.stop();if(!s){if(s=!0,e("div."+l,r).remove(),i=t.cmd.selection(),a=i.range.createBookmark(),o=e('

      ',r).css({position:"absolute",width:"1px",height:"1px",overflow:"hidden",left:"-1981px",top:e(a.start).pos().y+"px","white-space":"nowrap"}),e(r.body).append(o),_IE){var c=i.range.get(!0);c.moveToElementText(o[0]),c.select(),c.execCommand("paste"),d.preventDefault()}else i.range.selectNodeContents(o[0]),i.select();setTimeout(function(){n(),s=!1},0)}})}),t.beforeGetHtml(function(e){return _IE&&_V<=8&&(e=e.replace(/]*data-ke-input-tag="([^"]*)"[^>]*>([\s\S]*?)<\/div>/gi,function(e,t){return unescape(t)}),e=e.replace(/(]*)?>)/gi,function(e,t,n){return/\s+type="[^"]+"/i.test(e)?e:t+' type="text"'+n})),e.replace(/(<(?:noscript|noscript\s[^>]*)>)([\s\S]*?)(<\/noscript>)/gi,function(e,t,n,i){return t+_unescape(n).replace(/\s+/g," ")+i}).replace(/]*class="?ke-(flash|rm|media)"?[^>]*>/gi,function(e){var t=_getAttrList(e),n=_getCssList(t.style||""),i=_mediaAttrs(t["data-ke-tag"]),a=_undef(n.width,""),o=_undef(n.height,"");return/px/i.test(a)&&(a=_removeUnit(a)),/px/i.test(o)&&(o=_removeUnit(o)),i.width=_undef(t.width,a),i.height=_undef(t.height,o),_mediaEmbed(i)}).replace(/]*class="?ke-anchor"?[^>]*>/gi,function(e){var t=_getAttrList(e);return''}).replace(/]*data-ke-script-attr="([^"]*)"[^>]*>([\s\S]*?)<\/div>/gi,function(e,t,n){return""+unescape(n)+""}).replace(/]*data-ke-noscript-attr="([^"]*)"[^>]*>([\s\S]*?)<\/div>/gi,function(e,t,n){return""+unescape(n)+""}).replace(/(<[^>]*)data-ke-src="([^"]*)"([^>]*>)/gi,function(e,t,n,i){return e=e.replace(/(\s+(?:href|src)=")[^"]*(")/i,function(e,t,i){return t+_unescape(n)+i}),e=e.replace(/\s+data-ke-src="[^"]*"/i,"")}).replace(/(<[^>]+\s)data-ke-(on\w+="[^"]*"[^>]*>)/gi,function(e,t,n){return t+n})}),t.beforeSetHtml(function(e){return _IE&&_V<=8&&(e=e.replace(/]*>|<(select|button)[^>]*>[\s\S]*?<\/\1>/gi,function(e){var t=_getAttrList(e),n=_getCssList(t.style||"");return"none"==n.display?'
      ':e})),e.replace(/]*type="([^"]+)"[^>]*>(?:<\/embed>)?/gi,function(e){var n=_getAttrList(e);return n.src=_undef(n.src,""),n.width=_undef(n.width,0),n.height=_undef(n.height,0),_mediaImg(t.themesPath+"common/blank.gif",n)}).replace(/]*name="([^"]+)"[^>]*>(?:<\/a>)?/gi,function(e){var n=_getAttrList(e);return n.href!==undefined?e:''}).replace(/]*)>([\s\S]*?)<\/script>/gi,function(e,t,n){return'
      '+escape(n)+"
      "}).replace(/]*)>([\s\S]*?)<\/noscript>/gi,function(e,t,n){return'
      '+escape(n)+"
      "}).replace(/(<[^>]*)(href|src)="([^"]*)"([^>]*>)/gi,function(e,t,n,i,a){return e.match(/\sdata-ke-src="[^"]*"/i)?e:e=t+n+'="'+i+'" data-ke-src="'+_escape(i)+'"'+a}).replace(/(<[^>]+\s)(on\w+="[^"]*"[^>]*>)/gi,function(e,t,n){return t+"data-ke-"+n}).replace(/]*\s+border="0"[^>]*>/gi,function(e){return e.indexOf("ke-zeroborder")>=0?e:_addClassToTag(e,"ke-zeroborder")})})})}}(window),KindEditor.lang({source:"HTML代码",preview:"预览",undo:"后退(Ctrl+Z)",redo:"前进(Ctrl+Y)",cut:"剪切(Ctrl+X)",copy:"复制(Ctrl+C)",paste:"粘贴(Ctrl+V)",plainpaste:"粘贴为无格式文本",wordpaste:"从Word粘贴",selectall:"全选(Ctrl+A)",justifyleft:"左对齐",justifycenter:"居中",justifyright:"右对齐",justifyfull:"两端对齐",insertorderedlist:"编号",insertunorderedlist:"项目符号",indent:"增加缩进",outdent:"减少缩进",subscript:"下标",superscript:"上标",formatblock:"段落",fontname:"字体",fontsize:"文字大小",forecolor:"文字颜色",hilitecolor:"文字背景",bold:"粗体(Ctrl+B)",italic:"斜体(Ctrl+I)",underline:"下划线(Ctrl+U)",strikethrough:"删除线",removeformat:"删除格式",image:"图片",multiimage:"批量图片上传",flash:"Flash",media:"视音频",table:"表格",tablecell:"单元格",hr:"插入横线",emoticons:"插入表情",link:"超级链接",unlink:"取消超级链接",fullscreen:"全屏显示",about:"关于",print:"打印(Ctrl+P)",filemanager:"文件空间",code:"插入程序代码",map:"Google地图",baidumap:"百度地图",lineheight:"行距",clearhtml:"清理HTML代码",pagebreak:"插入分页符",quickformat:"一键排版",insertfile:"插入文件",template:"插入模板",anchor:"锚点",yes:"确定",no:"取消",close:"关闭",editImage:"图片属性",deleteImage:"删除图片",editFlash:"Flash属性",deleteFlash:"删除Flash",editMedia:"视音频属性",deleteMedia:"删除视音频",editLink:"超级链接属性",deleteLink:"取消超级链接",editAnchor:"锚点属性",deleteAnchor:"删除锚点",tableprop:"表格属性",tablecellprop:"单元格属性",tableinsert:"插入表格",tabledelete:"删除表格",tablecolinsertleft:"左侧插入列",tablecolinsertright:"右侧插入列",tablerowinsertabove:"上方插入行",tablerowinsertbelow:"下方插入行",tablerowmerge:"向下合并单元格",tablecolmerge:"向右合并单元格",tablerowsplit:"拆分行",tablecolsplit:"拆分列",tablecoldelete:"删除列",tablerowdelete:"删除行",noColor:"无颜色",pleaseSelectFile:"请选择文件。",invalidImg:"请输入有效的URL地址。\n只允许jpg,gif,bmp,png格式。",invalidMedia:"请输入有效的URL地址。\n只允许swf,flv,mp3,wav,wma,wmv,mid,avi,mpg,asf,rm,rmvb格式。",invalidWidth:"宽度必须为数字。",invalidHeight:"高度必须为数字。",invalidBorder:"边框必须为数字。",invalidUrl:"请输入有效的URL地址。",invalidRows:"行数为必选项,只允许输入大于0的数字。",invalidCols:"列数为必选项,只允许输入大于0的数字。",invalidPadding:"边距必须为数字。",invalidSpacing:"间距必须为数字。",invalidJson:"服务器发生故障。",uploadSuccess:"上传成功。",cutError:"您的浏览器安全设置不允许使用剪切操作,请使用快捷键(Ctrl+X)来完成。",copyError:"您的浏览器安全设置不允许使用复制操作,请使用快捷键(Ctrl+C)来完成。",pasteError:"您的浏览器安全设置不允许使用粘贴操作,请使用快捷键(Ctrl+V)来完成。",ajaxLoading:"加载中,请稍候 ...",uploadLoading:"上传中,请稍候 ...",uploadError:"上传错误","plainpaste.comment":"请使用快捷键(Ctrl+V)把内容粘贴到下面的方框里。","wordpaste.comment":"请使用快捷键(Ctrl+V)把内容粘贴到下面的方框里。","code.pleaseInput":"请输入程序代码。","link.url":"URL","link.linkType":"打开类型","link.newWindow":"新窗口","link.selfWindow":"当前窗口","flash.url":"URL","flash.width":"宽度","flash.height":"高度","flash.upload":"上传","flash.viewServer":"文件空间","media.url":"URL","media.width":"宽度","media.height":"高度","media.autostart":"自动播放","media.upload":"上传","media.viewServer":"文件空间","image.remoteImage":"网络图片","image.localImage":"本地上传","image.remoteUrl":"图片地址","image.localUrl":"上传文件","image.size":"图片大小","image.width":"宽","image.height":"高","image.resetSize":"重置大小","image.align":"对齐方式","image.defaultAlign":"默认方式","image.leftAlign":"左对齐","image.rightAlign":"右对齐","image.imgTitle":"图片说明","image.upload":"浏览...","image.viewServer":"图片空间","multiimage.uploadDesc":"允许用户同时上传<%=uploadLimit%>张图片,单张图片容量不超过<%=sizeLimit%>","multiimage.startUpload":"开始上传","multiimage.clearAll":"全部清空","multiimage.insertAll":"全部插入","multiimage.queueLimitExceeded":"文件数量超过限制。","multiimage.fileExceedsSizeLimit":"文件大小超过限制。","multiimage.zeroByteFile":"无法上传空文件。","multiimage.invalidFiletype":"文件类型不正确。","multiimage.unknownError":"发生异常,无法上传。","multiimage.pending":"等待上传","multiimage.uploadError":"上传失败","filemanager.emptyFolder":"空文件夹","filemanager.moveup":"移到上一级文件夹","filemanager.viewType":"显示方式:","filemanager.viewImage":"缩略图","filemanager.listImage":"详细信息","filemanager.orderType":"排序方式:","filemanager.fileName":"名称","filemanager.fileSize":"大小","filemanager.fileType":"类型","insertfile.url":"URL","insertfile.title":"文件说明","insertfile.upload":"上传","insertfile.viewServer":"文件空间","table.cells":"单元格数","table.rows":"行数","table.cols":"列数","table.size":"大小","table.width":"宽度","table.height":"高度","table.percent":"%","table.px":"px","table.space":"边距间距","table.padding":"边距","table.spacing":"间距","table.align":"对齐方式","table.textAlign":"水平对齐","table.verticalAlign":"垂直对齐","table.alignDefault":"默认","table.alignLeft":"左对齐","table.alignCenter":"居中","table.alignRight":"右对齐","table.alignTop":"顶部","table.alignMiddle":"中部","table.alignBottom":"底部","table.alignBaseline":"基线","table.border":"边框","table.borderWidth":"边框","table.borderColor":"颜色","table.backgroundColor":"背景颜色","map.address":"地址: ","map.search":"搜索","baidumap.address":"地址: ","baidumap.search":"搜索","baidumap.insertDynamicMap":"插入动态地图","anchor.name":"锚点名称","formatblock.formatBlock":{h1:"标题 1",h2:"标题 2",h3:"标题 3",h4:"标题 4",p:"正 文"},"fontname.fontName":{SimSun:"宋体",NSimSun:"新宋体",FangSong_GB2312:"仿宋_GB2312",KaiTi_GB2312:"楷体_GB2312",SimHei:"黑体","Microsoft YaHei":"微软雅黑",Arial:"Arial","Arial Black":"Arial Black","Times New Roman":"Times New Roman","Courier New":"Courier New",Tahoma:"Tahoma",Verdana:"Verdana"},"lineheight.lineHeight":[{1:"单倍行距"},{1.5:"1.5倍行距"},{2:"2倍行距"},{2.5:"2.5倍行距"},{3:"3倍行距"}],"template.selectTemplate":"可选模板","template.replaceContent":"替换当前内容","template.fileList":{"1.html":"图片和文字","2.html":"表格","3.html":"项目编号"}},"zh_CN"),KindEditor.plugin("anchor",function(e){var t=this,n="anchor",i=t.lang(n+".");t.plugin.anchor={edit:function(){var a=['
      ','
      ','",'',"
      ","
      "].join(""),o=t.createDialog({name:n,width:300,title:t.lang(n),body:a,yesBtn:{name:t.lang("yes"),click:function(e){t.insertHtml('').hideDialog().focus()}}}),r=o.div,l=e('input[name="name"]',r),s=t.plugin.getSelectedAnchor();s&&l.val(unescape(s.attr("data-ke-name"))),l[0].focus(),l[0].select()},"delete":function(){t.plugin.getSelectedAnchor().remove()}},t.clickToolbar(n,t.plugin.anchor.edit)}),KindEditor.plugin("autoheight",function(e){function t(){i.iframe.height(o),n.resize(null,Math.max((e.IE?a.scrollHeight:a.offsetHeight)+76,o))}var n=this;if(n.autoHeightMode){var i=n.edit,a=i.doc.body,o=e.removeUnit(n.height);i.iframe[0].scroll="no",a.style.overflowY="hidden",i.afterChange(t),n.isCreated?t():n.afterCreate(t)}}),KindEditor.plugin("baidumap",function(e){var t=this,n="baidumap",i=t.lang(n+"."),a=e.undef(t.mapWidth,558),o=e.undef(t.mapHeight,360);t.clickToolbar(n,function(){function r(){l=m[0].contentWindow,s=e.iframeDoc(m)}var l,s,d=['
      ','
      ','
      ',i.address+' ','','',"","
      ",'
      ',' ","
      ",'
      ',"
      ",'
      ',"
      "].join(""),c=t.createDialog({name:n,width:a+42,title:t.lang(n),body:d,yesBtn:{name:t.lang("yes"),click:function(e){var n=l.map,i=n.getCenter(),r=i.lng+","+i.lat,s=n.getZoom(),d=[f[0].checked?t.pluginsPath+"baidumap/index.html":"http://api.map.baidu.com/staticimage","?center="+encodeURIComponent(r),"&zoom="+encodeURIComponent(s),"&width="+a,"&height="+o,"&markers="+encodeURIComponent(r),"&markerStyles="+encodeURIComponent("l,A")].join("");f[0].checked?t.insertHtml(''):t.exec("insertimage",d),t.hideDialog().focus()}},beforeRemove:function(){h.remove(),s&&s.write(""),m.remove()}}),u=c.div,p=e('[name="address"]',u),h=e('[name="searchBtn"]',u),f=e('[name="insertDynamicMap"]',c.div),m=e('');m.bind("load",function(){m.unbind("load"),e.IE?r():setTimeout(r,0)}),e(".ke-map",u).replaceWith(m),h.click(function(){l.search(p.val())})})}),KindEditor.plugin("clearhtml",function(e){var t=this,n="clearhtml";t.clickToolbar(n,function(){t.focus();var n=t.html();n=n.replace(/(]*>)([\s\S]*?)(<\/script>)/gi,""),n=n.replace(/(]*>)([\s\S]*?)(<\/style>)/gi,""),n=e.formatHtml(n,{a:["href","target"],embed:["src","width","height","type","loop","autostart","quality",".width",".height","align","allowscriptaccess"],img:["src","width","height","border","alt","title",".width",".height"],table:["border"],"td,th":["rowspan","colspan"],"div,hr,br,tbody,tr,p,ol,ul,li,blockquote,h1,h2,h3,h4,h5,h6":[]}),t.html(n),t.cmd.selection(!0),t.addBookmark()})}),KindEditor.plugin("code",function(e){var t=this,n="code";t.clickToolbar(n,function(){var i=t.lang(n+"."),a=['
      ','
      ','","
      ",'',"
      "].join(""),o=t.createDialog({name:n,width:450,title:t.lang(n),body:a,yesBtn:{name:t.lang("yes"),click:function(n){var a=e(".ke-code-type",o.div).val(),l=r.val(),s=""===a?"":" lang-"+a,d='
      \n'+e.escape(l)+"
      ";return""===e.trim(l)?(alert(i.pleaseInput),void r[0].focus()):void t.insertHtml(d).hideDialog().focus()}}}),r=e("textarea",o.div);r[0].focus()})}),KindEditor.plugin("emoticons",function(e){var t=this,n="emoticons",i=t.emoticonsPath||t.pluginsPath+"emoticons/images/",a=void 0===t.allowPreviewEmoticons||t.allowPreviewEmoticons,o=1;t.clickToolbar(n,function(){function r(n,a,o){k?n.mouseover(function(){a>v?(k.css("left",0),k.css("right","")):(k.css("left",""),k.css("right",0)),w.attr("src",i+o+".gif"),e(this).addClass("ke-on")}):n.mouseover(function(){e(this).addClass("ke-on")}),n.mouseout(function(){e(this).removeClass("ke-on")}),n.click(function(e){t.insertHtml('').hideMenu().focus(),e.stop()})}function l(t,n){var a=document.createElement("table");n.append(a),k&&(e(a).mouseover(function(){k.show("block")}),e(a).mouseout(function(){k.hide()}),b.push(e(a))),a.className="ke-table",a.cellPadding=0,a.cellSpacing=0,a.border=0;for(var o=(t-1)*m+f,l=0;l
      ').css("background-position","-"+24*o+"px 0px").css("background-image","url("+i+"static.gif)");c.append(h),b.push(c),o++}return a}function s(){e.each(b,function(){this.unbind()})}function d(e,t){e.click(function(e){s(),C.parentNode.removeChild(C),S.remove(),C=l(t,_),c(t),o=t,e.stop()})}function c(t){S=e('
      '),_.append(S);for(var n=1;n<=g;n++){if(t!==n){var i=e('
      ['+n+"]");d(i,n),S.append(i),b.push(i)}else S.append(e("@["+n+"]"));S.append(e("@ "))}}var u=5,p=9,h=135,f=0,m=u*p,g=Math.ceil(h/m),v=Math.floor(p/2),_=e('
      '),b=[],y=t.createMenu({name:n,beforeRemove:function(){s()}});y.div.append(_);var k,w;a&&(k=e('
      ').css("right",0),w=e(''),_.append(k),k.append(w));var S,C=l(o,_);c(o)})}),KindEditor.plugin("filemanager",function(e){function t(e,t,n){return e+" ("+Math.ceil(t/1024)+"KB, "+n+")"}function n(e,n){n.is_dir?e.attr("title",n.filename):e.attr("title",t(n.filename,n.filesize,n.datetime))}var i=this,a="filemanager",o=e.undef(i.fileManagerJson,i.basePath+"php/file_manager_json.php"),r=i.pluginsPath+a+"/images/",l=i.lang(a+".");i.plugin.filemanagerDialog=function(t){function s(t,n,a){var r="path="+t+"&order="+n+"&dir="+m;b.showLoading(i.lang("ajaxLoading")),e.ajax(e.addParam(o,r+"&"+(new Date).getTime()),function(e){b.hideLoading(),a(e)})}function d(t,n,i,a){var o=e.formatUrl(n.current_url+i.filename,"absolute"),r=encodeURIComponent(n.current_dir_path+i.filename+"/");i.is_dir?t.click(function(e){s(r,C.val(),a)}):i.is_photo?t.click(function(e){v.call(this,o,i.filename)}):t.click(function(e){v.call(this,o,i.filename)}),E.push(t)}function c(t,n){function i(){"VIEW"==S.val()?s(t.current_dir_path,C.val(),p):s(t.current_dir_path,C.val(),u)}e.each(E,function(){this.unbind()}),w.unbind(),S.unbind(),C.unbind(),t.current_dir_path&&w.click(function(e){s(t.moveup_dir_path,C.val(),n)}),S.change(i),C.change(i),k.html("")}function u(t){c(t,u);var n=document.createElement("table");n.className="ke-table",n.cellPadding=0,n.cellSpacing=0,n.border=0,k.append(n);for(var i=t.file_list,a=0,o=i.length;a'),m=e(p[0].insertCell(0)).addClass("ke-cell ke-name").append(f).append(document.createTextNode(" "+s.filename));!s.is_dir||s.has_file?(p.css("cursor","pointer"),m.attr("title",s.filename),d(m,t,s,u)):m.attr("title",l.emptyFolder),e(p[0].insertCell(1)).addClass("ke-cell ke-size").html(s.is_dir?"-":Math.ceil(s.filesize/1024)+"KB"),e(p[0].insertCell(2)).addClass("ke-cell ke-datetime").html(s.datetime)}}function p(t){c(t,p);for(var i=t.file_list,a=0,o=i.length;a');k.append(u);var h=e('
      ').mouseover(function(t){e(this).addClass("ke-on")}).mouseout(function(t){e(this).removeClass("ke-on")});u.append(h);var f=t.current_url+s.filename,m=s.is_dir?r+"folder-64.gif":s.is_photo?f:r+"file-64.gif",g=e(''+s.filename+'');!s.is_dir||s.has_file?(h.css("cursor","pointer"),n(h,s),d(h,t,s,p)):h.attr("title",l.emptyFolder),h.append(g),u.append('
      '+s.filename+"
      ")}}var h=e.undef(t.width,650),f=e.undef(t.height,510),m=e.undef(t.dirName,""),g=e.undef(t.viewType,"VIEW").toUpperCase(),v=t.clickFn,_=['
      ','
      ','
      ',' ',''+l.moveup+"","
      ",'
      ',l.viewType+' ",l.orderType+' ","
      ",'
      ',"
      ",'
      ',"
      "].join(""),b=i.createDialog({name:a,width:h,height:f,title:i.lang(a),body:_}),y=b.div,k=e(".ke-plugin-filemanager-body",y),w=(e('[name="moveupImg"]',y),e('[name="moveupLink"]',y)),S=(e('[name="viewServer"]',y),e('[name="viewType"]',y)),C=e('[name="orderType"]',y),E=[];return S.val(g),s("",C.val(),"VIEW"==g?p:u),b}}),KindEditor.plugin("flash",function(e){var t=this,n="flash",i=t.lang(n+"."),a=e.undef(t.allowFlashUpload,!0),o=e.undef(t.allowFileManager,!1),r=e.undef(t.formatUploadUrl,!0),l=e.undef(t.extraFileUploadParams,{}),s=e.undef(t.filePostName,"imgFile"),d=e.undef(t.uploadJson,t.basePath+"php/upload_json.php");t.plugin.flash={edit:function(){var c=['
      ','
      ','",'  ','  ','','',"","
      ",'
      ','",' ',"
      ",'
      ','",' ',"
      ","
      "].join(""),u=t.createDialog({name:n,width:450,title:t.lang(n),body:c,yesBtn:{name:t.lang("yes"),click:function(n){var i=e.trim(h.val()),a=m.val(),o=g.val();if("http://"==i||e.invalidUrl(i))return alert(t.lang("invalidUrl")),void h[0].focus();if(!/^\d*$/.test(a))return alert(t.lang("invalidWidth")),void m[0].focus();if(!/^\d*$/.test(o))return alert(t.lang("invalidHeight")),void g[0].focus();var r=e.mediaImg(t.themesPath+"common/blank.gif",{src:i,type:e.mediaType(".swf"),width:a,height:o,quality:"high"});t.insertHtml(r).hideDialog().focus()}}}),p=u.div,h=e('[name="url"]',p),f=e('[name="viewServer"]',p),m=e('[name="width"]',p),g=e('[name="height"]',p);if(h.val("http://"),a){var v=e.uploadbutton({button:e(".ke-upload-button",p)[0],fieldName:s,extraParams:l,url:e.addParam(d,"dir=flash"),afterUpload:function(i){if(u.hideLoading(),0===i.error){var a=i.url;r&&(a=e.formatUrl(a,"absolute")),h.val(a),t.afterUpload&&t.afterUpload.call(t,a,i,n),alert(t.lang("uploadSuccess"))}else alert(i.message)},afterError:function(e){u.hideLoading(),t.errorDialog(e)}});v.fileBox.change(function(e){u.showLoading(t.lang("uploadLoading")),v.submit()})}else e(".ke-upload-button",p).hide();o?f.click(function(n){t.loadPlugin("filemanager",function(){t.plugin.filemanagerDialog({viewType:"LIST",dirName:"flash",clickFn:function(n,i){t.dialogs.length>1&&(e('[name="url"]',p).val(n),t.afterSelectFile&&t.afterSelectFile.call(t,n),t.hideDialog())}})})}):f.hide();var _=t.plugin.getSelectedFlash();if(_){var b=e.mediaAttrs(_.attr("data-ke-tag"));h.val(b.src),m.val(e.removeUnit(_.css("width"))||b.width||0),g.val(e.removeUnit(_.css("height"))||b.height||0)}h[0].focus(),h[0].select()},"delete":function(){t.plugin.getSelectedFlash().remove(),t.addBookmark()}},t.clickToolbar(n,t.plugin.flash.edit)}),KindEditor.plugin("image",function(e){var t=this,n="image",i=e.undef(t.allowImageUpload,!0),a=e.undef(t.allowImageRemote,!0),o=e.undef(t.formatUploadUrl,!0),r=e.undef(t.allowFileManager,!1),l=e.undef(t.uploadJson,t.basePath+"php/upload_json.php"),s=e.undef(t.imageTabIndex,0),d=t.pluginsPath+"image/images/",c=e.undef(t.extraFileUploadParams,{}),u=e.undef(t.filePostName,"imgFile"),p=e.undef(t.fillDescAfterUploadImage,!1),h=t.lang(n+".");t.plugin.imageDialog=function(i){function a(e,t){U.val(e),A.val(t),R=e,M=t}var s=(i.imageUrl,e.undef(i.imageWidth,""),e.undef(i.imageHeight,""),e.undef(i.imageTitle,""),e.undef(i.imageAlign,""),e.undef(i.showRemote,!0)),f=e.undef(i.showLocal,!0),m=e.undef(i.tabIndex,0),g=i.clickFn,v="kindeditor_upload_iframe_"+(new Date).getTime(),_=[];for(var b in c)_.push('');var y,k=['
      ','
      ','",'","
      "].join(""),w=f||r?450:400,S=f&&s?300:250,C=t.createDialog({name:n,width:w,height:S,title:t.lang(n),body:k,yesBtn:{name:t.lang("yes"),click:function(n){if(!C.isLoading){if(f&&s&&y&&1===y.selectedIndex||!s)return""==D.fileBox.val()?void alert(t.lang("pleaseSelectFile")):(C.showLoading(t.lang("uploadLoading")),D.submit(),void T.val(""));var i=e.trim(x.val()),a=U.val(),o=A.val(),r=N.val(),l="";return I.each(function(){if(this.checked)return l=this.value,!1}),"http://"==i||e.invalidUrl(i)?(alert(t.lang("invalidUrl")),void x[0].focus()):/^\d*$/.test(a)?/^\d*$/.test(o)?void g.call(t,i,r,a,o,0,l):(alert(t.lang("invalidHeight")),void A[0].focus()):(alert(t.lang("invalidWidth")),void U[0].focus())}}},beforeRemove:function(){K.unbind(),U.unbind(),A.unbind(),F.unbind()}}),E=C.div,x=e('[name="url"]',E),T=e('[name="localUrl"]',E),K=e('[name="viewServer"]',E),U=e('.tab1 [name="width"]',E),A=e('.tab1 [name="height"]',E),F=e(".ke-refresh-btn",E),N=e('.tab1 [name="title"]',E),I=e('.tab1 [name="align"]',E);s&&f?(y=e.tabs({src:e(".tabs",E),afterSelect:function(e){}}),y.add({title:h.remoteImage,panel:e(".tab1",E)}),y.add({title:h.localImage,panel:e(".tab2",E)}),y.select(m)):s?e(".tab1",E).show():f&&e(".tab2",E).show();var D=e.uploadbutton({button:e(".ke-upload-button",E)[0],fieldName:u,form:e(".ke-form",E),target:v,width:70,afterUpload:function(i){if(C.hideLoading(),0===i.error){var a=i.url;o&&(a=e.formatUrl(a,"absolute")),t.afterUpload&&t.afterUpload.call(t,a,i,n),p?(e(".ke-dialog-row #remoteUrl",E).val(a),e(".ke-tabs-li",E)[0].click(),e(".ke-refresh-btn",E).click()):g.call(t,a,i.title,i.width,i.height,i.border,i.align)}else alert(i.message)},afterError:function(e){C.hideLoading(),t.errorDialog(e)}});D.fileBox.change(function(e){T.val(D.fileBox.val())}),r?K.click(function(n){t.loadPlugin("filemanager",function(){t.plugin.filemanagerDialog({viewType:"VIEW",dirName:"image",clickFn:function(n,i){t.dialogs.length>1&&(e('[name="url"]',E).val(n),t.afterSelectFile&&t.afterSelectFile.call(t,n),t.hideDialog())}})})}):K.hide();var R=0,M=0;return F.click(function(t){var n=e('',document).css({position:"absolute",visibility:"hidden",top:0,left:"-1000px"});n.bind("load",function(){a(n.width(),n.height()),n.remove()}),e(document.body).append(n)}),U.change(function(e){R>0&&A.val(Math.round(M/R*parseInt(this.value,10)))}),A.change(function(e){M>0&&U.val(Math.round(R/M*parseInt(this.value,10)))}),x.val(i.imageUrl),a(i.imageWidth,i.imageHeight),N.val(i.imageTitle),I.each(function(){if(this.value===i.imageAlign)return this.checked=!0,!1}),s&&0===m&&(x[0].focus(),x[0].select()),C},t.plugin.image={edit:function(){var e=t.plugin.getSelectedImage();t.plugin.imageDialog({imageUrl:e?e.attr("data-ke-src"):"http://",imageWidth:e?e.width():"",imageHeight:e?e.height():"",imageTitle:e?e.attr("title"):"",imageAlign:e?e.attr("align"):"",showRemote:a,showLocal:i,tabIndex:e?0:s,clickFn:function(n,i,a,o,r,l){e?(e.attr("src",n),e.attr("data-ke-src",n),e.attr("width",a),e.attr("height",o),e.attr("title",i),e.attr("align",l),e.attr("alt",i)):t.exec("insertimage",n,i,a,o,r,l),setTimeout(function(){t.hideDialog().focus()},0)}})},"delete":function(){var e=t.plugin.getSelectedImage();"a"==e.parent().name&&(e=e.parent()),e.remove(),t.addBookmark()}},t.clickToolbar(n,t.plugin.image.edit)}),KindEditor.plugin("insertfile",function(e){var t=this,n="insertfile",i=e.undef(t.allowFileUpload,!0),a=e.undef(t.allowFileManager,!1),o=e.undef(t.formatUploadUrl,!0),r=e.undef(t.uploadJson,t.basePath+"php/upload_json.php"),l=e.undef(t.extraFileUploadParams,{}),s=e.undef(t.filePostName,"imgFile"),d=t.lang(n+".");t.plugin.fileDialog=function(c){var u=e.undef(c.fileUrl,"http://"),p=e.undef(c.fileTitle,""),h=c.clickFn,f=['
      ','
      ','",'  ','  ','','',"","
      ",'
      ','",'
      ',"
      ","",""].join(""),m=t.createDialog({name:n,width:450,title:t.lang(n),body:f,yesBtn:{name:t.lang("yes"),click:function(n){var i=e.trim(v.val()),a=b.val();return"http://"==i||e.invalidUrl(i)?(alert(t.lang("invalidUrl")),void v[0].focus()):(""===e.trim(a)&&(a=i),void h.call(t,i,a))}}}),g=m.div,v=e('[name="url"]',g),_=e('[name="viewServer"]',g),b=e('[name="title"]',g);if(i){var y=e.uploadbutton({button:e(".ke-upload-button",g)[0],fieldName:s,url:e.addParam(r,"dir=file"), -extraParams:l,afterUpload:function(i){if(m.hideLoading(),0===i.error){var a=i.url;o&&(a=e.formatUrl(a,"absolute")),v.val(a),t.afterUpload&&t.afterUpload.call(t,a,i,n),alert(t.lang("uploadSuccess"))}else alert(i.message)},afterError:function(e){m.hideLoading(),t.errorDialog(e)}});y.fileBox.change(function(e){m.showLoading(t.lang("uploadLoading")),y.submit()})}else e(".ke-upload-button",g).hide();a?_.click(function(n){t.loadPlugin("filemanager",function(){t.plugin.filemanagerDialog({viewType:"LIST",dirName:"file",clickFn:function(n,i){t.dialogs.length>1&&(e('[name="url"]',g).val(n),t.afterSelectFile&&t.afterSelectFile.call(t,n),t.hideDialog())}})})}):_.hide(),v.val(u),b.val(p),v[0].focus(),v[0].select()},t.clickToolbar(n,function(){t.plugin.fileDialog({clickFn:function(e,n){var i=''+n+"";t.insertHtml(i).hideDialog().focus()}})})}),KindEditor.plugin("lineheight",function(e){var t=this,n="lineheight",i=t.lang(n+".");t.clickToolbar(n,function(){var a="",o=t.cmd.commonNode({"*":".line-height"});o&&(a=o.css("line-height"));var r=t.createMenu({name:n,width:150});e.each(i.lineHeight,function(n,i){e.each(i,function(e,n){r.addItem({title:n,checked:a===e,click:function(){t.cmd.toggle('',{span:".line-height="+e}),t.updateState(),t.addBookmark(),t.hideMenu()}})})})})}),KindEditor.plugin("link",function(e){var t=this,n="link";t.plugin.link={edit:function(){var i=t.lang(n+"."),a='
      ',o=t.createDialog({name:n,width:450,title:t.lang(n),body:a,yesBtn:{name:t.lang("yes"),click:function(n){var i=e.trim(l.val());return"http://"==i||e.invalidUrl(i)?(alert(t.lang("invalidUrl")),void l[0].focus()):void t.exec("createlink",i,s.val()).hideDialog().focus()}}}),r=o.div,l=e('input[name="url"]',r),s=e('select[name="type"]',r);l.val("http://"),s[0].options[0]=new Option(i.newWindow,"_blank"),s[0].options[1]=new Option(i.selfWindow,""),t.cmd.selection();var d=t.plugin.getSelectedLink();d&&(t.cmd.range.selectNode(d[0]),t.cmd.select(),l.val(d.attr("data-ke-src")),s.val(d.attr("target"))),l[0].focus(),l[0].select()},"delete":function(){t.exec("unlink",null)}},t.clickToolbar(n,t.plugin.link.edit)}),KindEditor.plugin("map",function(e){var t=this,n="map",i=t.lang(n+".");t.clickToolbar(n,function(){function a(){o=p[0].contentWindow,r=e.iframeDoc(p)}var o,r,l=['
      ','
      ',i.address+' ','','',"","
      ",'
      ',"
      "].join(""),s=t.createDialog({name:n,width:600,title:t.lang(n),body:l,yesBtn:{name:t.lang("yes"),click:function(e){var n=(o.geocoder,o.map),i=n.getCenter().lat()+","+n.getCenter().lng(),a=n.getZoom(),r=n.getMapTypeId(),l="http://maps.googleapis.com/maps/api/staticmap";l+="?center="+encodeURIComponent(i),l+="&zoom="+encodeURIComponent(a),l+="&size=558x360",l+="&maptype="+encodeURIComponent(r),l+="&markers="+encodeURIComponent(i),l+="&language="+t.langType,l+="&sensor=false",t.exec("insertimage",l).hideDialog().focus()}},beforeRemove:function(){u.remove(),r&&r.write(""),p.remove()}}),d=s.div,c=e('[name="address"]',d),u=e('[name="searchBtn"]',d),p=(["",'',"",'',"","",'','
      ',""].join("\n"),e(''));p.bind("load",function(){p.unbind("load"),e.IE?a():setTimeout(a,0)}),e(".ke-map",d).replaceWith(p),u.click(function(){o.search(c.val())})})}),KindEditor.plugin("media",function(e){var t=this,n="media",i=t.lang(n+"."),a=e.undef(t.allowMediaUpload,!0),o=e.undef(t.allowFileManager,!1),r=e.undef(t.formatUploadUrl,!0),l=e.undef(t.extraFileUploadParams,{}),s=e.undef(t.filePostName,"imgFile"),d=e.undef(t.uploadJson,t.basePath+"php/upload_json.php");t.plugin.media={edit:function(){var c=['
      ','
      ','",'  ','  ','','',"","
      ",'
      ','",'',"
      ",'
      ','",'',"
      ",'
      ','",' ',"
      ","
      "].join(""),u=t.createDialog({name:n,width:450,height:230,title:t.lang(n),body:c,yesBtn:{name:t.lang("yes"),click:function(n){var i=e.trim(h.val()),a=m.val(),o=g.val();if("http://"==i||e.invalidUrl(i))return alert(t.lang("invalidUrl")),void h[0].focus();if(!/^\d*$/.test(a))return alert(t.lang("invalidWidth")),void m[0].focus();if(!/^\d*$/.test(o))return alert(t.lang("invalidHeight")),void g[0].focus();var r=e.mediaImg(t.themesPath+"common/blank.gif",{src:i,type:e.mediaType(i),width:a,height:o,autostart:v[0].checked?"true":"false",loop:"true"});t.insertHtml(r).hideDialog().focus()}}}),p=u.div,h=e('[name="url"]',p),f=e('[name="viewServer"]',p),m=e('[name="width"]',p),g=e('[name="height"]',p),v=e('[name="autostart"]',p);if(h.val("http://"),a){var _=e.uploadbutton({button:e(".ke-upload-button",p)[0],fieldName:s,extraParams:l,url:e.addParam(d,"dir=media"),afterUpload:function(i){if(u.hideLoading(),0===i.error){var a=i.url;r&&(a=e.formatUrl(a,"absolute")),h.val(a),t.afterUpload&&t.afterUpload.call(t,a,i,n),alert(t.lang("uploadSuccess"))}else alert(i.message)},afterError:function(e){u.hideLoading(),t.errorDialog(e)}});_.fileBox.change(function(e){u.showLoading(t.lang("uploadLoading")),_.submit()})}else e(".ke-upload-button",p).hide();o?f.click(function(n){t.loadPlugin("filemanager",function(){t.plugin.filemanagerDialog({viewType:"LIST",dirName:"media",clickFn:function(n,i){t.dialogs.length>1&&(e('[name="url"]',p).val(n),t.afterSelectFile&&t.afterSelectFile.call(t,n),t.hideDialog())}})})}):f.hide();var b=t.plugin.getSelectedMedia();if(b){var y=e.mediaAttrs(b.attr("data-ke-tag"));h.val(y.src),m.val(e.removeUnit(b.css("width"))||y.width||0),g.val(e.removeUnit(b.css("height"))||y.height||0),v[0].checked="true"===y.autostart}h[0].focus(),h[0].select()},"delete":function(){t.plugin.getSelectedMedia().remove(),t.addBookmark()}},t.clickToolbar(n,t.plugin.media.edit)}),function(e){function t(e){this.init(e)}e.extend(t,{init:function(t){function n(t,n){e(".ke-status > div",t).hide(),e(".ke-message",t).addClass("ke-error").show().html(e.escape(n))}var i=this;t.afterError=t.afterError||function(e){alert(e)},i.options=t,i.progressbars={},i.div=e(t.container).html(['
      ','
      ','
      ','',"
      ",'
      '+t.uploadDesc+"
      ",'','',"","
      ",'
      ',"
      "].join("")),i.bodyDiv=e(".ke-swfupload-body",i.div);var a={debug:!1,upload_url:t.uploadUrl,flash_url:t.flashUrl,file_post_name:t.filePostName,button_placeholder:e(".ke-swfupload-button > input",i.div)[0],button_image_url:t.buttonImageUrl,button_width:t.buttonWidth,button_height:t.buttonHeight,button_cursor:SWFUpload.CURSOR.HAND,file_types:t.fileTypes,file_types_description:t.fileTypesDesc,file_upload_limit:t.fileUploadLimit,file_size_limit:t.fileSizeLimit,post_params:t.postParams,file_queued_handler:function(e){e.url=i.options.fileIconUrl,i.appendFile(e)},file_queue_error_handler:function(n,i,a){var o="";switch(i){case SWFUpload.QUEUE_ERROR.QUEUE_LIMIT_EXCEEDED:o=t.queueLimitExceeded;break;case SWFUpload.QUEUE_ERROR.FILE_EXCEEDS_SIZE_LIMIT:o=t.fileExceedsSizeLimit;break;case SWFUpload.QUEUE_ERROR.ZERO_BYTE_FILE:o=t.zeroByteFile;break;case SWFUpload.QUEUE_ERROR.INVALID_FILETYPE:o=t.invalidFiletype;break;default:o=t.unknownError}e.DEBUG&&alert(o)},upload_start_handler:function(t){var n=this,i=e('div[data-id="'+t.id+'"]',n.bodyDiv);e(".ke-status > div",i).hide(),e(".ke-progressbar",i).show()},upload_progress_handler:function(e,t,n){var a=Math.round(100*t/n),o=i.progressbars[e.id];o.bar.css("width",Math.round(80*a/100)+"px"),o.percent.html(a+"%")},upload_error_handler:function(t,a,o){if(t&&t.filestatus==SWFUpload.FILE_STATUS.ERROR){var r=e('div[data-id="'+t.id+'"]',i.bodyDiv).eq(0);n(r,i.options.errorMessage)}},upload_success_handler:function(t,a){var o=e('div[data-id="'+t.id+'"]',i.bodyDiv).eq(0),r={};try{r=e.json(a)}catch(l){i.options.afterError.call(this,""+a+"")}return 0!==r.error?void n(o,e.DEBUG?r.message:i.options.errorMessage):(t.url=r.url,e(".ke-img",o).attr("src",t.url).attr("data-status",t.filestatus).data("data",r),void e(".ke-status > div",o).hide())}};i.swfu=new SWFUpload(a),e(".ke-swfupload-startupload input",i.div).click(function(){i.swfu.startUpload()})},getUrlList:function(){var t=[];return e(".ke-img",self.bodyDiv).each(function(){var n=e(this),i=n.attr("data-status");i==SWFUpload.FILE_STATUS.COMPLETE&&t.push(n.data("data"))}),t},removeFile:function(t){var n=this;n.swfu.cancelUpload(t);var i=e('div[data-id="'+t+'"]',n.bodyDiv);e(".ke-photo",i).unbind(),e(".ke-delete",i).unbind(),i.remove()},removeFiles:function(){var t=this;e(".ke-item",t.bodyDiv).each(function(){t.removeFile(e(this).attr("data-id"))})},appendFile:function(t){var n=this,i=e('
      ');n.bodyDiv.append(i);var a=e('
      ').mouseover(function(t){e(this).addClass("ke-on")}).mouseout(function(t){e(this).removeClass("ke-on")});i.append(a);var o=e(''+t.name+'');a.append(o),e('').appendTo(a).click(function(){n.removeFile(t.id)});var r=e('
      ').appendTo(a);e(['
      ','
      ','
      0%
      '].join("")).hide().appendTo(r),e('
      '+n.options.pendingMessage+"
      ").appendTo(r),i.append('
      '+t.name+"
      "),n.progressbars[t.id]={bar:e(".ke-progressbar-bar-inner",a),percent:e(".ke-progressbar-percent",a)}},remove:function(){this.removeFiles(),this.swfu.destroy(),this.div.html("")}}),e.swfupload=function(e,n){return new t(e,n)}}(KindEditor),KindEditor.plugin("multiimage",function(e){var t=this,n="multiimage",i=(e.undef(t.formatUploadUrl,!0),e.undef(t.uploadJson,t.basePath+"php/upload_json.php")),a=t.pluginsPath+"multiimage/images/",o=e.undef(t.imageSizeLimit,"1MB"),r=(e.undef(t.imageFileTypes,"*.jpg;*.gif;*.png"),e.undef(t.imageUploadLimit,20)),l=e.undef(t.filePostName,"imgFile"),s=t.lang(n+".");t.plugin.multiImageDialog=function(d){var c=d.clickFn,u=e.tmpl(s.uploadDesc,{uploadLimit:r,sizeLimit:o}),p=['
      ','
      ',"
      ","
      "].join(""),h=t.createDialog({name:n,width:650,height:510,title:t.lang(n),body:p,previewBtn:{name:s.insertAll,click:function(e){c.call(t,m.getUrlList())}},yesBtn:{name:s.clearAll,click:function(e){m.removeFiles()}},beforeRemove:function(){(!e.IE||e.V<=8)&&m.remove()}}),f=h.div,m=e.swfupload({container:e(".swfupload",f),buttonImageUrl:a+("zh_CN"==t.langType?"select-files-zh_CN.png":"select-files-en.png"),buttonWidth:"zh_CN"==t.langType?72:88,buttonHeight:23,fileIconUrl:a+"image.png",uploadDesc:u,startButtonValue:s.startUpload,uploadUrl:e.addParam(i,"dir=image"),flashUrl:a+"swfupload.swf",filePostName:l,fileTypes:"*.jpg;*.jpeg;*.gif;*.png;*.bmp",fileTypesDesc:"Image Files",fileUploadLimit:r,fileSizeLimit:o,postParams:e.undef(t.extraFileUploadParams,{}),queueLimitExceeded:s.queueLimitExceeded,fileExceedsSizeLimit:s.fileExceedsSizeLimit,zeroByteFile:s.zeroByteFile,invalidFiletype:s.invalidFiletype,unknownError:s.unknownError,pendingMessage:s.pending,errorMessage:s.uploadError,afterError:function(e){t.errorDialog(e)}});return h},t.clickToolbar(n,function(){t.plugin.multiImageDialog({clickFn:function(n){0!==n.length&&(e.each(n,function(e,n){t.afterUpload&&t.afterUpload.call(t,n.url,n,"multiimage"),t.exec("insertimage",n.url,n.title,n.width,n.height,n.border,n.align)}),setTimeout(function(){t.hideDialog().focus()},0))}})})}),function(){window.SWFUpload=function(e){this.initSWFUpload(e)},SWFUpload.prototype.initSWFUpload=function(e){try{this.customSettings={},this.settings=e,this.eventQueue=[],this.movieName="KindEditor_SWFUpload_"+SWFUpload.movieCount++,this.movieElement=null,SWFUpload.instances[this.movieName]=this,this.initSettings(),this.loadFlash(),this.displayDebugInfo()}catch(t){throw delete SWFUpload.instances[this.movieName],t}},SWFUpload.instances={},SWFUpload.movieCount=0,SWFUpload.version="2.2.0 2009-03-25",SWFUpload.QUEUE_ERROR={QUEUE_LIMIT_EXCEEDED:-100,FILE_EXCEEDS_SIZE_LIMIT:-110,ZERO_BYTE_FILE:-120,INVALID_FILETYPE:-130},SWFUpload.UPLOAD_ERROR={HTTP_ERROR:-200,MISSING_UPLOAD_URL:-210,IO_ERROR:-220,SECURITY_ERROR:-230,UPLOAD_LIMIT_EXCEEDED:-240,UPLOAD_FAILED:-250,SPECIFIED_FILE_ID_NOT_FOUND:-260,FILE_VALIDATION_FAILED:-270,FILE_CANCELLED:-280,UPLOAD_STOPPED:-290},SWFUpload.FILE_STATUS={QUEUED:-1,IN_PROGRESS:-2,ERROR:-3,COMPLETE:-4,CANCELLED:-5},SWFUpload.BUTTON_ACTION={SELECT_FILE:-100,SELECT_FILES:-110,START_UPLOAD:-120},SWFUpload.CURSOR={ARROW:-1,HAND:-2},SWFUpload.WINDOW_MODE={WINDOW:"window",TRANSPARENT:"transparent",OPAQUE:"opaque"},SWFUpload.completeURL=function(e){if("string"!=typeof e||e.match(/^https?:\/\//i)||e.match(/^\//))return e;var t=(window.location.protocol+"//"+window.location.hostname+(window.location.port?":"+window.location.port:""),window.location.pathname.lastIndexOf("/"));return t<=0?path="/":path=window.location.pathname.substr(0,t)+"/",path+e},SWFUpload.prototype.initSettings=function(){this.ensureDefault=function(e,t){this.settings[e]=void 0==this.settings[e]?t:this.settings[e]},this.ensureDefault("upload_url",""),this.ensureDefault("preserve_relative_urls",!1),this.ensureDefault("file_post_name","Filedata"),this.ensureDefault("post_params",{}),this.ensureDefault("use_query_string",!1),this.ensureDefault("requeue_on_error",!1),this.ensureDefault("http_success",[]),this.ensureDefault("assume_success_timeout",0),this.ensureDefault("file_types","*.*"),this.ensureDefault("file_types_description","All Files"),this.ensureDefault("file_size_limit",0),this.ensureDefault("file_upload_limit",0),this.ensureDefault("file_queue_limit",0),this.ensureDefault("flash_url","swfupload.swf"),this.ensureDefault("prevent_swf_caching",!0),this.ensureDefault("button_image_url",""),this.ensureDefault("button_width",1),this.ensureDefault("button_height",1),this.ensureDefault("button_text",""),this.ensureDefault("button_text_style","color: #000000; font-size: 16pt;"),this.ensureDefault("button_text_top_padding",0),this.ensureDefault("button_text_left_padding",0),this.ensureDefault("button_action",SWFUpload.BUTTON_ACTION.SELECT_FILES),this.ensureDefault("button_disabled",!1),this.ensureDefault("button_placeholder_id",""),this.ensureDefault("button_placeholder",null),this.ensureDefault("button_cursor",SWFUpload.CURSOR.ARROW),this.ensureDefault("button_window_mode",SWFUpload.WINDOW_MODE.WINDOW),this.ensureDefault("debug",!1),this.settings.debug_enabled=this.settings.debug,this.settings.return_upload_start_handler=this.returnUploadStart,this.ensureDefault("swfupload_loaded_handler",null),this.ensureDefault("file_dialog_start_handler",null),this.ensureDefault("file_queued_handler",null),this.ensureDefault("file_queue_error_handler",null),this.ensureDefault("file_dialog_complete_handler",null),this.ensureDefault("upload_start_handler",null),this.ensureDefault("upload_progress_handler",null),this.ensureDefault("upload_error_handler",null),this.ensureDefault("upload_success_handler",null),this.ensureDefault("upload_complete_handler",null),this.ensureDefault("debug_handler",this.debugMessage),this.ensureDefault("custom_settings",{}),this.customSettings=this.settings.custom_settings,this.settings.prevent_swf_caching&&(this.settings.flash_url=this.settings.flash_url+(this.settings.flash_url.indexOf("?")<0?"?":"&")+"preventswfcaching="+(new Date).getTime()),this.settings.preserve_relative_urls||(this.settings.upload_url=SWFUpload.completeURL(this.settings.upload_url),this.settings.button_image_url=SWFUpload.completeURL(this.settings.button_image_url)),delete this.ensureDefault},SWFUpload.prototype.loadFlash=function(){var e,t;if(null!==document.getElementById(this.movieName))throw"ID "+this.movieName+" is already in use. The Flash Object could not be added";if(e=document.getElementById(this.settings.button_placeholder_id)||this.settings.button_placeholder,void 0==e)throw"Could not find the placeholder element: "+this.settings.button_placeholder_id;t=document.createElement("div"),t.innerHTML=this.getFlashHTML(),e.parentNode.replaceChild(t.firstChild,e),void 0==window[this.movieName]&&(window[this.movieName]=this.getMovieElement())},SWFUpload.prototype.getFlashHTML=function(){var e="";return KindEditor.IE&&KindEditor.V>8&&(e=' classid = "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"'),['','','','','','','',""].join("")},SWFUpload.prototype.getFlashVars=function(){var e=this.buildParamString(),t=this.settings.http_success.join(",");return["movieName=",encodeURIComponent(this.movieName),"&uploadURL=",encodeURIComponent(this.settings.upload_url),"&useQueryString=",encodeURIComponent(this.settings.use_query_string),"&requeueOnError=",encodeURIComponent(this.settings.requeue_on_error),"&httpSuccess=",encodeURIComponent(t),"&assumeSuccessTimeout=",encodeURIComponent(this.settings.assume_success_timeout),"&params=",encodeURIComponent(e),"&filePostName=",encodeURIComponent(this.settings.file_post_name),"&fileTypes=",encodeURIComponent(this.settings.file_types),"&fileTypesDescription=",encodeURIComponent(this.settings.file_types_description),"&fileSizeLimit=",encodeURIComponent(this.settings.file_size_limit),"&fileUploadLimit=",encodeURIComponent(this.settings.file_upload_limit),"&fileQueueLimit=",encodeURIComponent(this.settings.file_queue_limit),"&debugEnabled=",encodeURIComponent(this.settings.debug_enabled),"&buttonImageURL=",encodeURIComponent(this.settings.button_image_url),"&buttonWidth=",encodeURIComponent(this.settings.button_width),"&buttonHeight=",encodeURIComponent(this.settings.button_height),"&buttonText=",encodeURIComponent(this.settings.button_text),"&buttonTextTopPadding=",encodeURIComponent(this.settings.button_text_top_padding),"&buttonTextLeftPadding=",encodeURIComponent(this.settings.button_text_left_padding),"&buttonTextStyle=",encodeURIComponent(this.settings.button_text_style),"&buttonAction=",encodeURIComponent(this.settings.button_action),"&buttonDisabled=",encodeURIComponent(this.settings.button_disabled),"&buttonCursor=",encodeURIComponent(this.settings.button_cursor)].join("")},SWFUpload.prototype.getMovieElement=function(){if(void 0==this.movieElement&&(this.movieElement=document.getElementById(this.movieName)),null===this.movieElement)throw"Could not find Flash element";return this.movieElement},SWFUpload.prototype.buildParamString=function(){var e=this.settings.post_params,t=[];if("object"==typeof e)for(var n in e)e.hasOwnProperty(n)&&t.push(encodeURIComponent(n.toString())+"="+encodeURIComponent(e[n].toString()));return t.join("&")},SWFUpload.prototype.destroy=function(){try{this.cancelUpload(null,!1);var e=null;if(e=this.getMovieElement(),e&&"unknown"==typeof e.CallFunction){for(var t in e)try{"function"==typeof e[t]&&(e[t]=null)}catch(n){}try{e.parentNode.removeChild(e)}catch(i){}}return window[this.movieName]=null,SWFUpload.instances[this.movieName]=null,delete SWFUpload.instances[this.movieName],this.movieElement=null,this.settings=null,this.customSettings=null,this.eventQueue=null,this.movieName=null,!0}catch(a){return!1}},SWFUpload.prototype.displayDebugInfo=function(){this.debug(["---SWFUpload Instance Info---\n","Version: ",SWFUpload.version,"\n","Movie Name: ",this.movieName,"\n","Settings:\n","\t","upload_url: ",this.settings.upload_url,"\n","\t","flash_url: ",this.settings.flash_url,"\n","\t","use_query_string: ",this.settings.use_query_string.toString(),"\n","\t","requeue_on_error: ",this.settings.requeue_on_error.toString(),"\n","\t","http_success: ",this.settings.http_success.join(", "),"\n","\t","assume_success_timeout: ",this.settings.assume_success_timeout,"\n","\t","file_post_name: ",this.settings.file_post_name,"\n","\t","post_params: ",this.settings.post_params.toString(),"\n","\t","file_types: ",this.settings.file_types,"\n","\t","file_types_description: ",this.settings.file_types_description,"\n","\t","file_size_limit: ",this.settings.file_size_limit,"\n","\t","file_upload_limit: ",this.settings.file_upload_limit,"\n","\t","file_queue_limit: ",this.settings.file_queue_limit,"\n","\t","debug: ",this.settings.debug.toString(),"\n","\t","prevent_swf_caching: ",this.settings.prevent_swf_caching.toString(),"\n","\t","button_placeholder_id: ",this.settings.button_placeholder_id.toString(),"\n","\t","button_placeholder: ",this.settings.button_placeholder?"Set":"Not Set","\n","\t","button_image_url: ",this.settings.button_image_url.toString(),"\n","\t","button_width: ",this.settings.button_width.toString(),"\n","\t","button_height: ",this.settings.button_height.toString(),"\n","\t","button_text: ",this.settings.button_text.toString(),"\n","\t","button_text_style: ",this.settings.button_text_style.toString(),"\n","\t","button_text_top_padding: ",this.settings.button_text_top_padding.toString(),"\n","\t","button_text_left_padding: ",this.settings.button_text_left_padding.toString(),"\n","\t","button_action: ",this.settings.button_action.toString(),"\n","\t","button_disabled: ",this.settings.button_disabled.toString(),"\n","\t","custom_settings: ",this.settings.custom_settings.toString(),"\n","Event Handlers:\n","\t","swfupload_loaded_handler assigned: ",("function"==typeof this.settings.swfupload_loaded_handler).toString(),"\n","\t","file_dialog_start_handler assigned: ",("function"==typeof this.settings.file_dialog_start_handler).toString(),"\n","\t","file_queued_handler assigned: ",("function"==typeof this.settings.file_queued_handler).toString(),"\n","\t","file_queue_error_handler assigned: ",("function"==typeof this.settings.file_queue_error_handler).toString(),"\n","\t","upload_start_handler assigned: ",("function"==typeof this.settings.upload_start_handler).toString(),"\n","\t","upload_progress_handler assigned: ",("function"==typeof this.settings.upload_progress_handler).toString(),"\n","\t","upload_error_handler assigned: ",("function"==typeof this.settings.upload_error_handler).toString(),"\n","\t","upload_success_handler assigned: ",("function"==typeof this.settings.upload_success_handler).toString(),"\n","\t","upload_complete_handler assigned: ",("function"==typeof this.settings.upload_complete_handler).toString(),"\n","\t","debug_handler assigned: ",("function"==typeof this.settings.debug_handler).toString(),"\n"].join(""))},SWFUpload.prototype.addSetting=function(e,t,n){return void 0==t?this.settings[e]=n:this.settings[e]=t},SWFUpload.prototype.getSetting=function(e){return void 0!=this.settings[e]?this.settings[e]:""},SWFUpload.prototype.callFlash=function(functionName,argumentArray){argumentArray=argumentArray||[];var movieElement=this.getMovieElement(),returnValue,returnString;try{returnString=movieElement.CallFunction(''+__flash__argumentsToXML(argumentArray,0)+""),returnValue=eval(returnString)}catch(ex){throw"Call to "+functionName+" failed"}return void 0!=returnValue&&"object"==typeof returnValue.post&&(returnValue=this.unescapeFilePostParams(returnValue)),returnValue},SWFUpload.prototype.selectFile=function(){this.callFlash("SelectFile")},SWFUpload.prototype.selectFiles=function(){this.callFlash("SelectFiles")},SWFUpload.prototype.startUpload=function(e){this.callFlash("StartUpload",[e])},SWFUpload.prototype.cancelUpload=function(e,t){t!==!1&&(t=!0),this.callFlash("CancelUpload",[e,t])},SWFUpload.prototype.stopUpload=function(){this.callFlash("StopUpload")},SWFUpload.prototype.getStats=function(){return this.callFlash("GetStats")},SWFUpload.prototype.setStats=function(e){this.callFlash("SetStats",[e])},SWFUpload.prototype.getFile=function(e){return"number"==typeof e?this.callFlash("GetFileByIndex",[e]):this.callFlash("GetFile",[e])},SWFUpload.prototype.addFileParam=function(e,t,n){return this.callFlash("AddFileParam",[e,t,n])},SWFUpload.prototype.removeFileParam=function(e,t){this.callFlash("RemoveFileParam",[e,t])},SWFUpload.prototype.setUploadURL=function(e){this.settings.upload_url=e.toString(),this.callFlash("SetUploadURL",[e])},SWFUpload.prototype.setPostParams=function(e){this.settings.post_params=e,this.callFlash("SetPostParams",[e])},SWFUpload.prototype.addPostParam=function(e,t){this.settings.post_params[e]=t,this.callFlash("SetPostParams",[this.settings.post_params])},SWFUpload.prototype.removePostParam=function(e){delete this.settings.post_params[e],this.callFlash("SetPostParams",[this.settings.post_params])},SWFUpload.prototype.setFileTypes=function(e,t){this.settings.file_types=e,this.settings.file_types_description=t,this.callFlash("SetFileTypes",[e,t])},SWFUpload.prototype.setFileSizeLimit=function(e){this.settings.file_size_limit=e,this.callFlash("SetFileSizeLimit",[e])},SWFUpload.prototype.setFileUploadLimit=function(e){this.settings.file_upload_limit=e,this.callFlash("SetFileUploadLimit",[e])},SWFUpload.prototype.setFileQueueLimit=function(e){this.settings.file_queue_limit=e,this.callFlash("SetFileQueueLimit",[e])},SWFUpload.prototype.setFilePostName=function(e){this.settings.file_post_name=e,this.callFlash("SetFilePostName",[e])},SWFUpload.prototype.setUseQueryString=function(e){this.settings.use_query_string=e,this.callFlash("SetUseQueryString",[e])},SWFUpload.prototype.setRequeueOnError=function(e){this.settings.requeue_on_error=e,this.callFlash("SetRequeueOnError",[e])},SWFUpload.prototype.setHTTPSuccess=function(e){"string"==typeof e&&(e=e.replace(" ","").split(",")),this.settings.http_success=e,this.callFlash("SetHTTPSuccess",[e])},SWFUpload.prototype.setAssumeSuccessTimeout=function(e){this.settings.assume_success_timeout=e,this.callFlash("SetAssumeSuccessTimeout",[e])},SWFUpload.prototype.setDebugEnabled=function(e){this.settings.debug_enabled=e,this.callFlash("SetDebugEnabled",[e])},SWFUpload.prototype.setButtonImageURL=function(e){void 0==e&&(e=""),this.settings.button_image_url=e,this.callFlash("SetButtonImageURL",[e])},SWFUpload.prototype.setButtonDimensions=function(e,t){this.settings.button_width=e,this.settings.button_height=t;var n=this.getMovieElement();void 0!=n&&(n.style.width=e+"px",n.style.height=t+"px"),this.callFlash("SetButtonDimensions",[e,t])},SWFUpload.prototype.setButtonText=function(e){this.settings.button_text=e,this.callFlash("SetButtonText",[e])},SWFUpload.prototype.setButtonTextPadding=function(e,t){this.settings.button_text_top_padding=t,this.settings.button_text_left_padding=e,this.callFlash("SetButtonTextPadding",[e,t])},SWFUpload.prototype.setButtonTextStyle=function(e){this.settings.button_text_style=e,this.callFlash("SetButtonTextStyle",[e])},SWFUpload.prototype.setButtonDisabled=function(e){this.settings.button_disabled=e,this.callFlash("SetButtonDisabled",[e])},SWFUpload.prototype.setButtonAction=function(e){this.settings.button_action=e,this.callFlash("SetButtonAction",[e])},SWFUpload.prototype.setButtonCursor=function(e){this.settings.button_cursor=e,this.callFlash("SetButtonCursor",[e])},SWFUpload.prototype.queueEvent=function(e,t){void 0==t?t=[]:t instanceof Array||(t=[t]);var n=this;if("function"==typeof this.settings[e])this.eventQueue.push(function(){this.settings[e].apply(this,t)}),setTimeout(function(){n.executeNextEvent()},0);else if(null!==this.settings[e])throw"Event handler "+e+" is unknown or is not a function"},SWFUpload.prototype.executeNextEvent=function(){var e=this.eventQueue?this.eventQueue.shift():null; -"function"==typeof e&&e.apply(this)},SWFUpload.prototype.unescapeFilePostParams=function(e){var t,n=/[$]([0-9a-f]{4})/i,i={};if(void 0!=e){for(var a in e.post)if(e.post.hasOwnProperty(a)){t=a;for(var o;null!==(o=n.exec(t));)t=t.replace(o[0],String.fromCharCode(parseInt("0x"+o[1],16)));i[t]=e.post[a]}e.post=i}return e},SWFUpload.prototype.testExternalInterface=function(){try{return this.callFlash("TestExternalInterface")}catch(e){return!1}},SWFUpload.prototype.flashReady=function(){var e=this.getMovieElement();return e?(this.cleanUp(e),void this.queueEvent("swfupload_loaded_handler")):void this.debug("Flash called back ready but the flash movie can't be found.")},SWFUpload.prototype.cleanUp=function(e){try{if(this.movieElement&&"unknown"==typeof e.CallFunction){this.debug("Removing Flash functions hooks (this should only run in IE and should prevent memory leaks)");for(var t in e)try{"function"==typeof e[t]&&(e[t]=null)}catch(n){}}}catch(i){}window.__flash__removeCallback=function(e,t){try{e&&(e[t]=null)}catch(n){}}},SWFUpload.prototype.fileDialogStart=function(){this.queueEvent("file_dialog_start_handler")},SWFUpload.prototype.fileQueued=function(e){e=this.unescapeFilePostParams(e),this.queueEvent("file_queued_handler",e)},SWFUpload.prototype.fileQueueError=function(e,t,n){e=this.unescapeFilePostParams(e),this.queueEvent("file_queue_error_handler",[e,t,n])},SWFUpload.prototype.fileDialogComplete=function(e,t,n){this.queueEvent("file_dialog_complete_handler",[e,t,n])},SWFUpload.prototype.uploadStart=function(e){e=this.unescapeFilePostParams(e),this.queueEvent("return_upload_start_handler",e)},SWFUpload.prototype.returnUploadStart=function(e){var t;if("function"==typeof this.settings.upload_start_handler)e=this.unescapeFilePostParams(e),t=this.settings.upload_start_handler.call(this,e);else if(void 0!=this.settings.upload_start_handler)throw"upload_start_handler must be a function";void 0===t&&(t=!0),t=!!t,this.callFlash("ReturnUploadStart",[t])},SWFUpload.prototype.uploadProgress=function(e,t,n){e=this.unescapeFilePostParams(e),this.queueEvent("upload_progress_handler",[e,t,n])},SWFUpload.prototype.uploadError=function(e,t,n){e=this.unescapeFilePostParams(e),this.queueEvent("upload_error_handler",[e,t,n])},SWFUpload.prototype.uploadSuccess=function(e,t,n){e=this.unescapeFilePostParams(e),this.queueEvent("upload_success_handler",[e,t,n])},SWFUpload.prototype.uploadComplete=function(e){e=this.unescapeFilePostParams(e),this.queueEvent("upload_complete_handler",e)},SWFUpload.prototype.debug=function(e){this.queueEvent("debug_handler",e)},SWFUpload.prototype.debugMessage=function(e){if(this.settings.debug){var t,n=[];if("object"==typeof e&&"string"==typeof e.name&&"string"==typeof e.message){for(var i in e)e.hasOwnProperty(i)&&n.push(i+": "+e[i]);t=n.join("\n")||"",n=t.split("\n"),t="EXCEPTION: "+n.join("\nEXCEPTION: "),SWFUpload.Console.writeLine(t)}else SWFUpload.Console.writeLine(e)}},SWFUpload.Console={},SWFUpload.Console.writeLine=function(e){var t,n;try{t=document.getElementById("SWFUpload_Console"),t||(n=document.createElement("form"),document.getElementsByTagName("body")[0].appendChild(n),t=document.createElement("textarea"),t.id="SWFUpload_Console",t.style.fontFamily="monospace",t.setAttribute("wrap","off"),t.wrap="off",t.style.overflow="auto",t.style.width="700px",t.style.height="350px",t.style.margin="5px",n.appendChild(t)),t.value+=e+"\n",t.scrollTop=t.scrollHeight-t.clientHeight}catch(i){alert("Exception: "+i.name+" Message: "+i.message)}}}(),function(){"function"==typeof SWFUpload&&(SWFUpload.queue={},SWFUpload.prototype.initSettings=function(e){return function(){"function"==typeof e&&e.call(this),this.queueSettings={},this.queueSettings.queue_cancelled_flag=!1,this.queueSettings.queue_upload_count=0,this.queueSettings.user_upload_complete_handler=this.settings.upload_complete_handler,this.queueSettings.user_upload_start_handler=this.settings.upload_start_handler,this.settings.upload_complete_handler=SWFUpload.queue.uploadCompleteHandler,this.settings.upload_start_handler=SWFUpload.queue.uploadStartHandler,this.settings.queue_complete_handler=this.settings.queue_complete_handler||null}}(SWFUpload.prototype.initSettings),SWFUpload.prototype.startUpload=function(e){this.queueSettings.queue_cancelled_flag=!1,this.callFlash("StartUpload",[e])},SWFUpload.prototype.cancelQueue=function(){this.queueSettings.queue_cancelled_flag=!0,this.stopUpload();for(var e=this.getStats();e.files_queued>0;)this.cancelUpload(),e=this.getStats()},SWFUpload.queue.uploadStartHandler=function(e){var t;return"function"==typeof this.queueSettings.user_upload_start_handler&&(t=this.queueSettings.user_upload_start_handler.call(this,e)),t=t!==!1,this.queueSettings.queue_cancelled_flag=!t,t},SWFUpload.queue.uploadCompleteHandler=function(e){var t,n=this.queueSettings.user_upload_complete_handler;if(e.filestatus===SWFUpload.FILE_STATUS.COMPLETE&&this.queueSettings.queue_upload_count++,t="function"==typeof n?n.call(this,e)!==!1:e.filestatus!==SWFUpload.FILE_STATUS.QUEUED){var i=this.getStats();i.files_queued>0&&this.queueSettings.queue_cancelled_flag===!1?this.startUpload():this.queueSettings.queue_cancelled_flag===!1?(this.queueEvent("queue_complete_handler",[this.queueSettings.queue_upload_count]),this.queueSettings.queue_upload_count=0):(this.queueSettings.queue_cancelled_flag=!1,this.queueSettings.queue_upload_count=0)}})}(),KindEditor.plugin("pagebreak",function(e){var t=this,n="pagebreak",i=e.undef(t.pagebreakHtml,'
      ');t.clickToolbar(n,function(){var n=t.cmd,a=n.range;t.focus();var o="br"==t.newlineTag||e.WEBKIT?"":'';if(t.insertHtml(i+o),""!==o){var r=e("#__kindeditor_tail_tag__",t.edit.doc);a.selectNodeContents(r[0]),r.removeAttr("id"),n.select()}})}),KindEditor.plugin("plainpaste",function(e){var t=this,n="plainpaste";t.clickToolbar(n,function(){var i=t.lang(n+"."),a='
      '+i.comment+'
      ',o=t.createDialog({name:n,width:450,title:t.lang(n),body:a,yesBtn:{name:t.lang("yes"),click:function(n){var i=r.val();i=e.escape(i),i=i.replace(/ {2}/g,"  "),i="p"==t.newlineTag?i.replace(/^/,"

      ").replace(/$/,"

      ").replace(/\n/g,"

      "):i.replace(/\n/g,"
      $&"),t.insertHtml(i).hideDialog().focus()}}}),r=e("textarea",o.div);r[0].focus()})}),KindEditor.plugin("preview",function(e){var t=this,n="preview";t.clickToolbar(n,function(){var i=(t.lang(n+"."),'

      '),a=t.createDialog({name:n,width:750,title:t.lang(n),body:i}),o=e("iframe",a.div),r=e.iframeDoc(o);r.open(),r.write(t.fullHtml()),r.close(),e(r.body).css("background-color","#FFF"),o[0].contentWindow.focus()})}),KindEditor.plugin("quickformat",function(e){function t(e){for(var t=e.first();t&&t.first();)t=t.first();return t}var n=this,i="quickformat",a=e.toMap("blockquote,center,div,h1,h2,h3,h4,h5,h6,p");n.clickToolbar(i,function(){n.focus();for(var i,o=n.edit.doc,r=n.cmd.range,l=e(o.body).first(),s=[],d=[],c=r.createBookmark(!0);l;){i=l.next();var u=t(l);u&&"img"==u.name||(a[l.name]?(l.html(l.html().replace(/^(\s| | )+/gi,"")),l.css("text-indent","2em")):d.push(l),(!i||a[i.name]||a[l.name]&&!a[i.name])&&(d.length>0&&s.push(d),d=[])),l=i}e.each(s,function(t,n){var i=e('

      ',o);n[0].before(i),e.each(n,function(e,t){i.append(t)})}),r.moveToBookmark(c),n.addBookmark()})}),KindEditor.plugin("table",function(e){function t(e,t){t=t.toLowerCase(),e.css("background-color",t),t&&e.css("color","#000000"===t?"#FFFFFF":"#000000"),"input"===e.name?e.val(t):e.html(t)}function n(n,i,a){function o(){e.each(h,function(){this.remove()}),h=[],e(document).unbind("click,mousedown",o),n.unbind("click,mousedown",o)}i.bind("click,mousedown",function(e){e.stopPropagation()}),i.click(function(i){o();var r=e(this),l=r.pos(),d=e.colorpicker({x:l.x,y:l.y+r.height(),z:811214,selectedColor:e(this).html(),colors:s.colorTable,noColor:s.lang("table.defaultBorderColor"),shadowMode:s.shadowMode,click:function(e){t(r,e),o(),a&&a(e)}});h.push(d),e(document).bind("click,mousedown",o),n.bind("click,mousedown",o)})}function i(e,t,n){for(var i=0,a=0,o=t.cells.length;a
      "],l=n.find("tbody>tr:first").children(),d=0;l.each(function(){var e=$(this),t=e.attr("colspan");d+=t?parseInt(t):1});for(var c=0;c"+(e.IE?" ":"
      ")+"");r.push("
      "),o=$(r.join("")),n.prepend(o)}}else o.remove()}i&&i("header",t.header)}void 0!==t.stripedRows&&(n.toggleClass("table-striped",!!t.stripedRows),i&&i("stripedRows",t.stripedRows)),void 0!==t.hoverRows&&(n.toggleClass("table-hover",!!t.hoverRows),i&&i("hoverRows",t.hoverRows)),void 0!==t.autoWidth&&(n.toggleClass("table-auto",!!t.autoWidth),i&&i("autoWidth",t.autoWidth)),void 0!==t.borderColor&&(n.find("td,th").css("border","1px solid "+t.borderColor),i&&i("borderColor",t.borderColor))}}function r(t,n,i,a){if(t*n){for(var o=$('
      chat->turnon;?>chat->turnonList, $turnon) : zget($lang->chat->turnonList, $config->xuanxuan->turnon);?>chat->turnonList, $turnon) : zget($lang->chat->turnonList, $config->xuanxuan->turnon);?>
      chat->version;?>
      chat->xxdServer;?>chat->xxdServerTip;?>
      chat->xxd->ip;?>chat->xxd->uploadFileSize;?> -
      +
      chat->xxd->max;?> xuanxuan, 'uploadFileSize', 20), "class='form-control' placeholder='{$lang->chat->placeholder->xxd->uploadFileSize}' ");?> M @@ -109,8 +111,8 @@ goback, '', 'class="btn" style="min-width: 120px"');?> - chat->downloadXXD, '', "class='btn btn-primary download download-package' target='_blank'");?> - chat->downloadConfig, '', "class='btn btn-primary download'");?> + chat->downloadXXD, 'hiddenwin', "class='btn btn-primary download download-package'");?> + chat->downloadConfig, 'hiddenwin', "class='btn btn-primary download'");?> chat->changeSetting, '', "class='btn'");?> chat->help, '_blank', "class='btn'");?> diff --git a/xuanxuan/module/chat/ext/lang/en/xuanxuan.php b/xuanxuan/module/chat/ext/lang/en/xuanxuan.php index 3b6d432358..d0683f2afe 100644 --- a/xuanxuan/module/chat/ext/lang/en/xuanxuan.php +++ b/xuanxuan/module/chat/ext/lang/en/xuanxuan.php @@ -31,8 +31,9 @@ $lang->chat->statusList[0] = 'Disable'; $lang->chat->httpsOptions[1] = 'Enable'; $lang->chat->httpsOptions[0] = 'Disable'; -$lang->chat->xxdServerTip = 'XXD server address contains protocol and host and port,such as https://127.0.0.1:11443'; +$lang->chat->xxdServerTip = 'XXD server address contains protocol and host and port,such as http://192.168.1.35 or http://pms.zentao.com. that can not be 127.0.0.1.'; $lang->chat->xxdServerEmpty = 'XXD server address is empty.'; +$lang->chat->xxdServerError = 'XXD server address can not be 127.0.0.1.'; $lang->chat->xxdSchemeError = 'Server address should started with http:// or https://.'; $lang->chat->xxdPortError = 'Server address should contain valid port and the default is 11443.'; $lang->chat->xxClientConfirm = 'Click to download new zentao client!'; diff --git a/xuanxuan/module/chat/ext/lang/zh-cn/xuanxuan.php b/xuanxuan/module/chat/ext/lang/zh-cn/xuanxuan.php index ca7edea3ff..6217092182 100644 --- a/xuanxuan/module/chat/ext/lang/zh-cn/xuanxuan.php +++ b/xuanxuan/module/chat/ext/lang/zh-cn/xuanxuan.php @@ -29,8 +29,9 @@ $lang->chat->createTodo = '创建待办'; $lang->chat->statusList[1] = '启用'; $lang->chat->statusList[0] = '不启用'; -$lang->chat->xxdServerTip = 'XXD服务器地址为完整的协议+地址+端口,示例:https://127.0.0.1:11443。'; +$lang->chat->xxdServerTip = 'XXD服务器地址为完整的协议+地址+端口,示例:http://192.168.1.35 或 http://pms.zentao.com ,不能使用127.0.0.1。'; $lang->chat->xxdServerEmpty = 'XXD服务器地址为空。'; +$lang->chat->xxdServerError = 'XXD服务器地址不能为 127.0.0.1。'; $lang->chat->xxdSchemeError = '服务器地址应该以http://或https://开头。'; $lang->chat->xxdPortError = '服务器地址应该包含有效的端口号,默认为11443。'; $lang->chat->zentaoClient = '新增禅道客户端!'; diff --git a/xuanxuan/module/chat/ext/model/class/xuanxuan.class.php b/xuanxuan/module/chat/ext/model/class/xuanxuan.class.php index ae424d6541..b738e78501 100644 --- a/xuanxuan/module/chat/ext/model/class/xuanxuan.class.php +++ b/xuanxuan/module/chat/ext/model/class/xuanxuan.class.php @@ -4,7 +4,6 @@ class xuanxuanChat extends chatModel public function downloadXXD($setting, $type) { $data = new stdClass(); - $data->server = $setting->server; $data->uploadFileSize = $setting->uploadFileSize; $data->isHttps = $setting->isHttps; $data->sslcrt = $setting->sslcrt; @@ -13,12 +12,17 @@ class xuanxuanChat extends chatModel $data->chatPort = $setting->chatPort; $data->commonPort = $setting->commonPort; $data->maxOnlineUser = isset($setting->maxOnlineUser) ? $setting->maxOnlineUser : 0; - $data->host = commonModel::getSysURL() . getWebRoot(); $data->key = $this->config->xuanxuan->key; $data->os = $setting->os; $data->version = $this->config->xuanxuan->version; $data->downloadType = $type; + $this->loadModel('mail'); + $domain = empty($this->config->mail->domain) ? commonModel::getSysURL() : $this->config->mail->domain; + if(!empty($this->config->xuanxuan->server)) $domain = $this->config->xuanxuan->server; + $data->server = $domain; + $data->host = trim($domain, '/') . getWebRoot(); + $url = "https://www.chanzhi.org/license-downloadxxd-zentao.html"; $result = common::http($url, $data); diff --git a/xuanxuan/module/common/ext/model/xuanxuan.php b/xuanxuan/module/common/ext/model/xuanxuan.php deleted file mode 100644 index 0807095a41..0000000000 --- a/xuanxuan/module/common/ext/model/xuanxuan.php +++ /dev/null @@ -1,6 +0,0 @@ -config->system->xuanxuan)) $this->app->mergeConfig($this->config->system->xuanxuan, 'xuanxuan'); -} From b17a9b526232ee7ff4e7484a6690e27a17eeaeaf Mon Sep 17 00:00:00 2001 From: Yagami Date: Tue, 25 Dec 2018 17:15:30 +0800 Subject: [PATCH 043/442] * Fix xuanxuan priv. --- .../chat/ext/model/class/xuanxuan.class.php | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/xuanxuan/module/chat/ext/model/class/xuanxuan.class.php b/xuanxuan/module/chat/ext/model/class/xuanxuan.class.php index ae424d6541..facd3b6d91 100644 --- a/xuanxuan/module/chat/ext/model/class/xuanxuan.class.php +++ b/xuanxuan/module/chat/ext/model/class/xuanxuan.class.php @@ -71,16 +71,24 @@ class xuanxuanChat extends chatModel $user->admin = strpos($this->app->company->admins, ",{$user->account},") !== false; $user->rights = $this->user->authorize($user->account); $user->groups = $this->user->getGroups($user->account); + $user->view = $this->user->grantUserView($user->account, $user->rights['acls']); $this->session->set('user', $user); $this->app->user = $this->session->user; + $products = explode(',', $this->app->user->view->products); + $projects = explode(',', $this->app->user->view->projects); + $libids = array_keys($this->loadModel('doc')->getLibs('all')); + $productID = isset($products[0]) ? $products[0] : 1; + $projectID = isset($projects[0]) ? $projects[0] : 1; + $libID = isset($libids[0]) ? $libids[0] : 1; + $actions = new stdclass(); - if(common::hasPriv('bug', 'create')) $actions->createBug = array('title' => $this->lang->chat->createBug, 'url' => $baseURL . str_replace('/xuanxuan.php', '/index.php', helper::createLink('bug', 'create', 'product=1', 'xhtml')), 'height' => "600px", 'width' => "800px"); - if(common::hasPriv('doc', 'create')) $actions->createDoc = array('title' => $this->lang->chat->createDoc, 'url' => $baseURL . str_replace('/xuanxuan.php', '/index.php', helper::createLink('doc', 'create', 'lib=1', 'xhtml')), 'height' => "600px", 'width' => "800px"); - if(common::hasPriv('story', 'create')) $actions->createStory = array('title' => $this->lang->chat->createStory, 'url' => $baseURL . str_replace('/xuanxuan.php', '/index.php', helper::createLink('story', 'create', 'product=1', 'xhtml')), 'height' => "600px", 'width' => "800px"); - if(common::hasPriv('task', 'create')) $actions->createTask = array('title' => $this->lang->chat->createTask, 'url' => $baseURL . str_replace('/xuanxuan.php', '/index.php', helper::createLink('task', 'create', 'project=1', 'xhtml')), 'height' => "600px", 'width' => "800px"); - if(common::hasPriv('todo', 'create')) $actions->createTodo = array('title' => $this->lang->chat->createTodo, 'url' => $baseURL . str_replace('/xuanxuan.php', '/index.php', helper::createLink('todo', 'create', '', 'xhtml')), 'height' => "600px", 'width' => "800px"); + if(common::hasPriv('bug', 'create')) $actions->createBug = array('title' => $this->lang->chat->createBug, 'url' => $baseURL . str_replace('/xuanxuan.php', '/index.php', helper::createLink('bug', 'create', "product=$productID", 'xhtml')), 'height' => "600px", 'width' => "800px"); + if(common::hasPriv('doc', 'create')) $actions->createDoc = array('title' => $this->lang->chat->createDoc, 'url' => $baseURL . str_replace('/xuanxuan.php', '/index.php', helper::createLink('doc', 'create', "libID=$libID", 'xhtml')), 'height' => "600px", 'width' => "800px"); + if(common::hasPriv('story', 'create')) $actions->createStory = array('title' => $this->lang->chat->createStory, 'url' => $baseURL . str_replace('/xuanxuan.php', '/index.php', helper::createLink('story', 'create', "product=$productID", 'xhtml')), 'height' => "600px", 'width' => "800px"); + if(common::hasPriv('task', 'create')) $actions->createTask = array('title' => $this->lang->chat->createTask, 'url' => $baseURL . str_replace('/xuanxuan.php', '/index.php', helper::createLink('task', 'create', "project=$projectID", 'xhtml')), 'height' => "600px", 'width' => "800px"); + if(common::hasPriv('todo', 'create')) $actions->createTodo = array('title' => $this->lang->chat->createTodo, 'url' => $baseURL . str_replace('/xuanxuan.php', '/index.php', helper::createLink('todo', 'create', '', 'xhtml')), 'height' => "600px", 'width' => "800px"); $urls = array(); foreach($this->config->chat->cards as $moduleName => $methods) From a7996d0b51571119fd98fe5f7018f41fc2821f01 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Tue, 25 Dec 2018 17:40:42 +0800 Subject: [PATCH 044/442] * adjust for xx server. --- .../module/admin/ext/control/downloadxxd.php | 7 ++----- .../module/admin/ext/control/xuanxuan.php | 6 +----- .../chat/ext/model/class/xuanxuan.class.php | 19 +++++++++++++------ xuanxuan/module/chat/ext/model/xuanxuan.php | 5 +++++ xuanxuan/module/entry/ext/control/visit.php | 3 ++- .../ext/model/class/xuanxuan.class.php | 3 ++- 6 files changed, 25 insertions(+), 18 deletions(-) diff --git a/xuanxuan/module/admin/ext/control/downloadxxd.php b/xuanxuan/module/admin/ext/control/downloadxxd.php index 95739bf8d1..4a7ee6c908 100644 --- a/xuanxuan/module/admin/ext/control/downloadxxd.php +++ b/xuanxuan/module/admin/ext/control/downloadxxd.php @@ -5,12 +5,9 @@ class admin extends control { if(in_array($type, array('config', 'package'))) { - $this->loadModel('mail'); $this->loadModel('chat'); - $domain = empty($this->config->mail->domain) ? commonModel::getSysURL() : $this->config->mail->domain; - if(!empty($this->config->xuanxuan->server)) $domain = $this->config->xuanxuan->server; - if(strpos($domain, '127.0.0.1') !== false) die(js::alert($this->lang->chat->xxdServerError)); - if(empty($domain)) die(js::alert($this->lang->chat->xxdServerEmpty)); + $server = $this->chat->getServer(); + if(strpos($server, '127.0.0.1') !== false) die(js::alert($this->lang->chat->xxdServerError)); $setting = $this->config->xuanxuan; $setting->os = $os; diff --git a/xuanxuan/module/admin/ext/control/xuanxuan.php b/xuanxuan/module/admin/ext/control/xuanxuan.php index e7d4f7c05f..fade5a15ff 100644 --- a/xuanxuan/module/admin/ext/control/xuanxuan.php +++ b/xuanxuan/module/admin/ext/control/xuanxuan.php @@ -39,15 +39,11 @@ class admin extends control $os = 'win'; if(strpos(strtolower(PHP_OS), 'win') !== 0) $os = strtolower(PHP_OS); - $this->loadModel('mail'); - $domain = empty($this->config->mail->domain) ? commonModel::getSysURL() : $this->config->mail->domain; - if(!empty($this->config->xuanxuan->server)) $domain = $this->config->xuanxuan->server; - $this->view->title = $this->lang->chat->common; $this->view->adminList = $this->loadModel('user')->getPairs('admin'); $this->view->os = $os . '_' . php_uname('m'); $this->view->type = $type; - $this->view->domain = $domain; + $this->view->domain = $this->loadModel('chat')->getServer(); $this->view->turnon = isset($this->config->xuanxuan->turnon) ? $this->config->xuanxuan->turnon : 1; $this->view->isHttps = $this->config->xuanxuan->isHttps ? $this->config->xuanxuan->isHttps : 0; $this->display(); diff --git a/xuanxuan/module/chat/ext/model/class/xuanxuan.class.php b/xuanxuan/module/chat/ext/model/class/xuanxuan.class.php index b738e78501..721d2fdc45 100644 --- a/xuanxuan/module/chat/ext/model/class/xuanxuan.class.php +++ b/xuanxuan/module/chat/ext/model/class/xuanxuan.class.php @@ -17,11 +17,9 @@ class xuanxuanChat extends chatModel $data->version = $this->config->xuanxuan->version; $data->downloadType = $type; - $this->loadModel('mail'); - $domain = empty($this->config->mail->domain) ? commonModel::getSysURL() : $this->config->mail->domain; - if(!empty($this->config->xuanxuan->server)) $domain = $this->config->xuanxuan->server; - $data->server = $domain; - $data->host = trim($domain, '/') . getWebRoot(); + $server = $this->getServer(); + $data->server = $server; + $data->host = trim($server, '/') . getWebRoot(); $url = "https://www.chanzhi.org/license-downloadxxd-zentao.html"; $result = common::http($url, $data); @@ -68,7 +66,7 @@ class xuanxuanChat extends chatModel public function getExtensionList($userID) { $entries = array(); - $baseURL = commonModel::getSysURL(); + $baseURL = $this->getServer(); $this->loadModel('user'); $user = $this->dao->select('*')->from(TABLE_USER)->where('id')->eq($userID)->fetch(); @@ -119,4 +117,13 @@ class xuanxuanChat extends chatModel unset($_SESSION['user']); return $entries; } + + public function getServer() + { + $this->app->loadConfig('mail'); + $server = empty($this->config->mail->domain) ? commonModel::getSysURL() : $this->config->mail->domain; + if(!empty($this->config->xuanxuan->server)) $server = $this->config->xuanxuan->server; + + return $server; + } } diff --git a/xuanxuan/module/chat/ext/model/xuanxuan.php b/xuanxuan/module/chat/ext/model/xuanxuan.php index 65e0404bf7..25a659fbb1 100644 --- a/xuanxuan/module/chat/ext/model/xuanxuan.php +++ b/xuanxuan/module/chat/ext/model/xuanxuan.php @@ -13,3 +13,8 @@ public function sendDownHeader($fileName, $fileType, $content, $fileSize = 0) { return $this->loadExtension('xuanxuan')->sendDownHeader($fileName, $fileType, $content, $fileSize); } + +public function getServer() +{ + return $this->loadExtension('xuanxuan')->getServer(); +} diff --git a/xuanxuan/module/entry/ext/control/visit.php b/xuanxuan/module/entry/ext/control/visit.php index 7b0470bb08..15f93f9145 100644 --- a/xuanxuan/module/entry/ext/control/visit.php +++ b/xuanxuan/module/entry/ext/control/visit.php @@ -14,7 +14,8 @@ class entry extends control if(RUN_MODE != 'xuanxuan') die(); $referer = !empty($_GET['referer']) ? $this->get->referer : $referer; - if(empty($referer)) $referer = common::getSysURL() . str_replace('/xuanxuan.php', '/index.php', $this->createLink('my', 'index', '', 'html')); + $server = $this->loadModel('chat')->getServer(); + if(empty($referer)) $referer = $server . str_replace('/xuanxuan.php', '/index.php', $this->createLink('my', 'index', '', 'html')); $output = new stdclass(); $output->module = $this->moduleName; diff --git a/xuanxuan/module/message/ext/model/class/xuanxuan.class.php b/xuanxuan/module/message/ext/model/class/xuanxuan.class.php index 4804d6e314..acf0b7aeef 100644 --- a/xuanxuan/module/message/ext/model/class/xuanxuan.class.php +++ b/xuanxuan/module/message/ext/model/class/xuanxuan.class.php @@ -16,9 +16,10 @@ class xuanxuanMessage extends messageModel $title = $this->app->user->realname . $this->lang->action->label->$actionType . $this->lang->action->objectTypes[$objectType]; $text = $title . ' ' . "[#{$objectID}::{$object->$field}]"; + $server = $this->loadModel('chat')->getServer(); $onlybody = isset($_GET['onlybody']) ? $_GET['onlybody'] : ''; unset($_GET['onlybody']); - $url = common::getSysURL() . helper::createLink($objectType, 'view', "id=$objectID", 'html'); + $url = $server . helper::createLink($objectType, 'view', "id=$objectID", 'html'); $target = ''; if(!empty($object->assignedTo)) $target .= $object->assignedTo; From 2bd37a479ecf65976fd00bff6e0f740f1b7bd68f Mon Sep 17 00:00:00 2001 From: wangyidong Date: Wed, 26 Dec 2018 09:34:26 +0800 Subject: [PATCH 045/442] * fix bug for tutorial. --- .../ext/model/hook/loadConfigFromDB.xuanxuan.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/xuanxuan/module/common/ext/model/hook/loadConfigFromDB.xuanxuan.php b/xuanxuan/module/common/ext/model/hook/loadConfigFromDB.xuanxuan.php index e9af2f6c81..a594607c2a 100644 --- a/xuanxuan/module/common/ext/model/hook/loadConfigFromDB.xuanxuan.php +++ b/xuanxuan/module/common/ext/model/hook/loadConfigFromDB.xuanxuan.php @@ -8,8 +8,8 @@ if(empty($xxConfig['key'])) $this->setting->setItem('system.common.xuanxuan.turnon', 1); $this->setting->setItem('system.common.xuanxuan.key', $this->setting->computeSN()); } -if(empty($xxConfig['chatPort'])) $this->setting->setItem('system.common.xuanxuan.chatPort', 11444); -if(empty($xxConfig['commonPort'])) $this->setting->setItem('system.common.xuanxuan.commonPort', 11443); -if(empty($xxConfig['ip'])) $this->setting->setItem('system.common.xuanxuan.ip', '0.0.0.0'); -if(empty($xxConfig['isHttps'])) $this->setting->setItem('system.common.xuanxuan.isHttps', 0); -if(empty($xxConfig['uploadFileSize'])) $this->setting->setItem('system.common.xuanxuan.uploadFileSize', 20); +if(!isset($xxConfig['chatPort'])) $this->setting->setItem('system.common.xuanxuan.chatPort', 11444); +if(!isset($xxConfig['commonPort'])) $this->setting->setItem('system.common.xuanxuan.commonPort', 11443); +if(!isset($xxConfig['ip'])) $this->setting->setItem('system.common.xuanxuan.ip', '0.0.0.0'); +if(!isset($xxConfig['isHttps'])) $this->setting->setItem('system.common.xuanxuan.isHttps', 0); +if(!isset($xxConfig['uploadFileSize'])) $this->setting->setItem('system.common.xuanxuan.uploadFileSize', 20); From 4554a44aae8fdf5123536c57e05fdd5dd447386b Mon Sep 17 00:00:00 2001 From: wangyidong Date: Wed, 26 Dec 2018 09:47:05 +0800 Subject: [PATCH 046/442] * finish task #5172. --- module/task/model.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/task/model.php b/module/task/model.php index fe042c3a73..3ee0345755 100644 --- a/module/task/model.php +++ b/module/task/model.php @@ -598,7 +598,7 @@ class taskModel extends model ->setIF($this->post->assignedTo != $oldTask->assignedTo, 'assignedDate', $now) - ->setIF($this->post->status == 'wait' and $this->post->left == $oldTask->left and $this->post->consumed == 0, 'left', $this->post->estimate) + ->setIF($this->post->status == 'wait' and $this->post->left == $oldTask->left and $this->post->consumed == 0 and $this->post->estimate, 'left', $this->post->estimate) ->add('lastEditedBy', $this->app->user->account) ->add('lastEditedDate', $now) From da57fc447d805056c240e3b929c6cbb35bd1f3c5 Mon Sep 17 00:00:00 2001 From: Yagami Date: Wed, 26 Dec 2018 10:30:34 +0800 Subject: [PATCH 047/442] * Finish task #5170. --- module/task/model.php | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/module/task/model.php b/module/task/model.php index fe042c3a73..867739533b 100644 --- a/module/task/model.php +++ b/module/task/model.php @@ -29,12 +29,16 @@ class taskModel extends model ->setDefault('project', (int)$projectID) ->setDefault('estimate, left, story', 0) ->setDefault('status', 'wait') + ->setDefault('estimate',(int)$this->post->estimate) ->setIF($this->post->estimate != false, 'left', $this->post->estimate) ->setIF($this->post->story != false, 'storyVersion', $this->loadModel('story')->getVersion($this->post->story)) ->setDefault('estStarted', '0000-00-00') ->setDefault('deadline', '0000-00-00') ->setIF(strpos($this->config->task->create->requiredFields, 'estStarted') !== false, 'estStarted', $this->post->estStarted) ->setIF(strpos($this->config->task->create->requiredFields, 'deadline') !== false, 'deadline', $this->post->deadline) + ->setIF($this->post->estimate !== 0, 'estimate', (int)$this->post->estimate) + ->setIF($this->post->consumed !== 0, 'consumed', (int)$this->post->consumed) + ->setIF($this->post->left !== 0, 'left', (int)$this->post->left) ->setDefault('openedBy', $this->app->user->account) ->setDefault('openedDate', helper::now()) ->stripTags($this->config->task->editor->create['id'], $this->config->allowedTags) @@ -578,6 +582,9 @@ class taskModel extends model ->setDefault('story, estimate, left, consumed', 0) ->setDefault('estStarted', '0000-00-00') ->setDefault('deadline', '0000-00-00') + ->setIF($this->post->estimate !== 0, 'estimate', (int)$this->post->estimate) + ->setIF($this->post->consumed !== 0, 'consumed', (int)$this->post->consumed) + ->setIF($this->post->left !== 0, 'left', (int)$this->post->left) ->setIF($oldTask->parent == 0 && $this->post->parent == '', 'parent', 0) ->setIF(strpos($this->config->task->edit->requiredFields, 'estStarted') !== false, 'estStarted', $this->post->estStarted) ->setIF(strpos($this->config->task->edit->requiredFields, 'deadline') !== false, 'deadline', $this->post->deadline) @@ -1170,6 +1177,7 @@ class taskModel extends model } $task = fixer::input('post') + ->setIF($this->post->consumed !== 0, 'consumed', (int)$this->post->consumed) ->setDefault('left', 0) ->setDefault('assignedTo', $oldTask->openedBy) ->setDefault('assignedDate', $now) @@ -1229,6 +1237,7 @@ class taskModel extends model } if($task->finishedDate == substr($now, 0, 10)) $task->finishedDate = $now; + $task->consumed = (int)$task->consumed; $this->dao->update(TABLE_TASK)->data($task) ->autoCheck() @@ -1349,6 +1358,7 @@ class taskModel extends model $oldTask = $this->getById($taskID); $task = fixer::input('post') + ->setIF($this->post->left !== 0, 'left', (int)$this->post->left) ->setDefault('left', 0) ->setDefault('status', 'doing') ->setDefault('finishedBy, canceledBy, closedBy, closedReason', '') @@ -1359,6 +1369,12 @@ class taskModel extends model ->remove('comment') ->get(); + if(!is_numeric($task->left)) + { + dao::$errors[] = $this->lang->task->error->estimateNumber; + return false; + } + if(!empty($oldTask->team)) { $this->dao->update(TABLE_TEAM)->set('left')->eq($this->post->left) From 0063b4a86d581394dc97f629cc8bef7cdf4ac62a Mon Sep 17 00:00:00 2001 From: wangyidong Date: Wed, 26 Dec 2018 11:07:21 +0800 Subject: [PATCH 048/442] * update zentao-integrated. --- .../www/data/xuanxuan/zentao-integrated.zip | Bin 98170 -> 98181 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/xuanxuan/www/data/xuanxuan/zentao-integrated.zip b/xuanxuan/www/data/xuanxuan/zentao-integrated.zip index ccc89ce0c3bcde1159b4f04373cfa27d20fc1820..b2fd5461ed958044874cb61c4cc856670c411702 100644 GIT binary patch delta 3629 zcmX|^byyQz*v2;zrfhV_q#J2QcgKiPQ%8)H21icVXaPZl0eh7aq#PlsNC*<1?6oX!dz{s9e2F|7Gy zD32x<3l-#ZZ+oUA4Xmv0a46+A`f^*jPp)5N2%;k1zpAd^HBwR=@a|#x3HKyrgwV_8 zn3?E{JXJLL%qZX~R){Y%D#$91$jWF?`Sg&nlN)w0-Exd_qpI($R*P;wPL2PUp{s{u zNJ#h#>)tlM8g{l&J67k3>8#m+7*&9l?)TUb-3Ytu?){fE}(NZv#eJ_mo zKLIvm{((2T+h;lb=`llZ@*BqRwLaBky=lcLg|Yd`>@|#BvHOk*`4Ye7cz3AqE@aT(l6GwTR9qmh6VW|^~|Pi6ZrdwFYEh`JCE*qhSk+H?qg%q z$*0KezV_rQ>}T5Nh^yN7y{rb8_6V`G?lvy&32+O)MY(?>POs43$CBf+-`;X{;fsoh z#=;t|KTq`b5K+f-v{>ajimN)X+1ox)@qQW zIcyyNJx|Y_O64dlQB{|O4%uW&?0xA#r{6Z)`Vesk4HB5MR-xk@T`9Tw>O!~G#PYeq zvZ$oVu-`WmASE)^1*;$3?ZgmmUOYIFS6_8bp*F?tDHJP$&|Jz}xPW2QKhjI3p5<%w zHuhT9+zOFi&D-Gy9h_-OK|Gq{qt-jg3BhD`ctscgGm$X!?PC`sc^p)e5-iNkdHeWZ zGK<3HTmHCWW{D6b>mmvvXLq{%Mdr5qMnkJ-c;k8+o|7<1g^szTTRU^j=%TKpE83r4 zSUpGz#SEUJXLIanugsju!c-v~WVTv6F`fhdj?qd4D;okhY^bttN@dmnYOq}*4Un+F zcYy+ZOI~EZ!ak?lelNYd7x=@BLG0m;ALh!Eo zoI3d5oTIIO&LkXxrbpMP$&*HG8=yrwrr^CqQH!nMykS;Fw=%DGAs@=?y`Y)-kYj)b z{c}24NSbdYLl~H$Z>E0he%5}Ct-}77x;m2K+cDM z@+>7aWvkS*jm9~w{~l_0u&_DL@EyaPQBpjMb5xm=^Zw(z^-pDS=fP6Ba-kulJ*iiz!(Lb5g z&NGH_OMF-^;T(zk^~Mm;ZT13$%GVuGEquE7j0Pdb2XpRtdlVEm_ep{(mAEpcy|eW? z#ntRxX;xtqmxfFlt8yF$Nt0X6T;Nif^6?pI3@~gUV5?{-A0X=9un++04iCp)#bL*6 zU*}Jny}Jt^c5SFEv`K_eWXFeC7xfCI8zy^N%=05Gy*@=HPxWCClW$yVe%^lprMemP zx#br?rsV8j8_U;VAuH6Z$lPuE>W#9(had`p0X_o_#bX|"JTjLAWVR59N1q~#(I z1={vrts?Lc+ShYOTN@;OCz=Is#A@KXvx=Q;yzt_GVK{&R27XY0r4+v4GFHe=wvzpV z04r>L3-8I(TSEutrK_+pHYr953XM2(oYOLA+I%GH9MGn@$i?wPM^A0NNtX7Izb+7tOdQMZq&g0echXh+G@t~ z>Y*O4F2_u8kuA47IYu0rS|2`^OwM2;Dea#ht|W^s)QsNr$HvptebC88t0Z4@=}e2X zF<_CLY1vrk6BNr6-0ai+a%r_Y0eg`OV2vYVO zuA`8F#JE!EZ8ZD{qW9sIoH^$NbkyD+Jg;*m%5Y?^f}1=$%ME{_z$Ks6ol^d8e4LX{ zm{YzqE?}gx2Jk6oqSp?`H1=`)M|_Q~EXjsKTxm0FNOQn7&l)fH0ni~qZK!w7|B$N( z8ee`oq7|D%(92Dr=S7IpO?l~HL7#A_~5!+?HpI7QN~oS zChD0alXMrCw<5lvEVxVe(OY_uQQWXp0%v=1{4{Tgb<*Gj!DM($cd~?Q;~Z<(36r_& zpc64GX{I>nBm}e z2w7o$;ce|;2j^WL#J(02=P^|Q$?$%UyEhLAB1`Czxs6z2$5eG7`Y;r-xw6YwOn07B`x=xUO0D-jGV{A^^cs_(uzp{)w#@X|08-AD39cV?@t% ztMY?|)YH#y(6oYQ*+jU&FH+dqQI={{vu)yn4U^11L3~RFEFFTd5ymEH03m2yluuaeIX7>`P)^;= z?OuLjZZwSSc;B!6?y_r_^DU;OspFlMJAK2cA*M{?3RsFbY~Q;S^0{lBsk`u*6-d%* zq~lBWLIC&B&;9z1No0D5gdGSwo-f{b^Q-qUW#oDVU65ZwLfgtZg~mrA4>3vJP8B#} zq8)Doa}Hx~8Df8Ok3sH3wwd@R066NqMqQ1lsPv~9QB%o82Th+DMuyTLg{9CHbQ<$_ zA*UCy(WSwV>Hh4_#{o%5^|IzC`-7Szec9F-abYFY(eRbQW2L^?G_Tlr{M{;A(M(xB zo}#(-`juB-ZQz4?swo-A{BcVsD`L)~5`bMkNtP(`*@sWG&5TCRjrOZrkuv#lC=T$OjseM-;AsOwBc);w^_L0-x z*Yi~oy2NWtlt8sx?FGAHgiq4Ud+I4%!-v=L ze!=P=yZRSZ#a~@No@kck_kCGzjfk*_{QPlW`R4H=%+^LTDO6$7a(bqUBwUqUeReF7 z6`b;Nb)&&eY{MtK@wRy=pk+i9i*{9JqKeivDxQyIArv6rtX0Jz@O=c`f_vht)w@Pb zU#2Cfx{J?)Df+8n`TEwQ$(4@B8iLdriK8wq+6f9?2qgcHVinQQ{lK2CK#gw-(>5fV zyqDe&nPW){6VSEP`i%a! z)Bu2?ECBEaTqv&r{;cQ7rvwU`8*Gc0=2FMP+igy{J-(U#t0w} z%m0%S%EAPAg^7&vuNC5E1dv1cDh&YO=m^)+F}FfW+90n1{+j#0+y7Z3N<{)WfGR}O zNFe)Pi$vc@pcv!Er2;}vOBb#u;p_TG;nFm*G7>1s!a)ZB1fX5K(H?FRUKoGBKh4V^ z#J$TVJtqSIfW~0lf-rx_5@m5fNuVXs1qU<)h7c=pKr^5c@e~K-`V*80#RDZ7Htquf WzOM5B$^FUghzBxJltln9gZ&S!@U<8K delta 3695 zcmYjUXEYqz7M=;C%P=O|h#o|5(OYyz8C-n?(R;K}E(Xy;)KP-mh#t{f^iHDXir#C6 z=%NIpB#-y*&3b3Av)9^d?{Dw#>|f`L`~|xB2_i?p@$jJlq8l?(&rBx2PdFCFf~*T; zNfxq{bnmEK90_4+S*~llMo|T1Gq9et!nHqDX^q*;VuOst59Ob};@_+H%}DW%%4W6H z8=vG`L$u_~sV5Ke(j@tdV0MpWT53(`o6Q&K`1XgP)Ri%Z7;>O0I!vM?q`uL+QbJx2 zi7RT9A%8iSl?6%PYV3X1E;wA^`*%Q&Px$1yp~#Prd}BX8^P%v)=s;_F(H^aWT8(XG zHZK|634VZXT(4AC*4$kGYMEP)pxx8*eF3NLK0ntTDOgTwZEdSjkkE2!(e@Xer}pDc z16(Rp4llCv*xeqSphdT8Q&I)=Q&0|ndPY=5$IG6&%Nd*Y6jZtBu6TslmnZC2GtsKi_SeV<6oy zpX@Y$O?X%-_G$gKcLnF(i6w9L4&aFG;q>RahI+dT2JKEA5p)U6sUTUnE0!a&+~YBo zZ&qQ|NOK37cHJO!Hq2R8)njTymtm~fVXzEj;PGR5>3YZ2t6fmejQ$O;D_`4^m2H=A zm!ZGVH*#6KX%13dneUNnW8B%a_S0{|Vy?FDSx=OHZsDrGheC{L*Hd*-x;>eDx})3M0(}%{P;pdq zvMbgOeH;2nqR0WNP9{cqt~`fal$@XQ_~Kojj1uMoaVjt2_B=$svGD=N`wwu>k#Pm# zpKD0-{JNFz?&88i$sC#^L$|x}F#dSP=<}x@R}Uq04{$b;&R0^QP-=vNMBPz5F(P-} z)FY&TnjfXXt@oTtsFq0AGj6Gk-NEOleBo>~MNn%7Y-PWf_uPF^aMU^on7lVp($m}0 zv~exC_nDt4%=IT7j4>)6Sjz0*Rkz+y+4*{)5SUMS@JZ;PTi9xZX^KUSSi1Ac={dxl?r@nZmqHm~jrl^xt5n1A6DSUrANqZmCbdR zao&XUJ2gkjSCJ5_D&Z{b`4UZ#8M?S|q1~soFWLbMPUByZ{TUjU5~7fVp#ud1)iJ3c zX4a^mlKJz2Omsd-m_Js+AW8kic8nlVky!v3{YRsiKI&KK zJ2Q}}_j~Gk<65?ouXJ)aXEO#uD$oni?dsiR8MS}paCNa0`dZWv^&VHS(Gl}df1T`w z-B-w95J&~OC27DnbNuz`bSy={2b?>`nM16!GyRi75nX3vHTa6DQ z7802<)yVF5OO_Gp7{`qW8L2uUCY?gRL$yJ>kSmj zw=!R*KdK{123ngssy&FkVu5G~kq>4ob8EW65QkC$I)hSvWT+5<`uyC;gg+Y?6^c@q z8@UHjtG2Ol=|XdOx9_#6&td0V+W_n)A*Vb$;VACC;#l)+si#VWR5kLXlX+N^pPF-} zovq0quD;1^&-0xXP3$v4kXYehu~Vs<5?d!jLzaO17$qe7Luu=yzNa$*(s}h`uuMf` zEtf2Bg@_mD^E))fBUpSh*LlVbgP_`kf zE<_PONl*KtN0fcRxI8Y?+$^PKv`0nb5jkw}sK{6%*^Y6IY+g^9mMUboRH_?6fc3Ly zA&5#4zG~R^BnUci)Zc1VQ(C%?T!~QRbF0E;{$-#WA^3uf!C*5rk1p3%;*(R(y1vSt zW&u0f!cy)7^gu^W{v!JMQG!S3d+(S8LBsPEg{W-JER$DUM88(O#ALXj%cb7deHM@` zlw;(hRS~Gr{FscVzMrz6FP}g7uvDfKJ$G2U@$K6%ybbrRgxy}5yr_sHo_6(}(1VEQ z_K~2Or83p_qtaLDMfL&_^;vr5!d3%Ll|BS!96JShXlnuh%2SSeo741)YoANB8GK)~ zQPQ;6iHikt8o_GncD5dU=1NQTJcWEi)XQJ(uiP3r>8zq)f7e+JW`V!gj2S=lj)Mv0 zG*!Q*IFuGR%C5ji16fo*+WcVe*NX;aR_d8zyJ86uCfO5mVH_VWd$Smh=;>lePYPM> z&+DR&(E(=STG&k<&m`q@GMoNGxLFLJzGm7CQnu+tM%&inqI#*)?}01Z^Nl{GZ+OKz z_f^ZKz+@o{KW2-w)Qw)g34534#XGHcthHL+;QZ#1vI}uc-_Dj}W8DbYIF0RDPU=}W z^~6G23kz*xt8=cbC=qt8l_P%2o%hSmU9Fu(C`7PLLBtxv*>${ct~$ESv+_b%`DUL0*Qanos{4`FVQUO1#m zxK?~Z?@%k9z3*N>Y{auuM2`8X$mP}czLN`#JOw8x4l@EC((Y2RgK8}wzbHmuMrx>U zy~~`~Q=7tH+PhX1%~LeAN-a*hBvj?M1Djw^F7Z|VcJWZ}Jx+;Iz~U|0GB8#{E`{u%y7zm?2vExo9XS=p>f5*0N zj4uT3*ser%t2kD;EA>?ty3UQq_Zq%dS<<{3}!?Q#=;C+mse=Y@x5A`~wbhypJTes4>KR&S9tJJOF^?r^S!r6H+)7_Cii zn8-Nhu1=pm9r?6&^N9iZd4@eN9%gquOWx42z^At2&uK{-*lUcQt zzK&Ie*DQ2Ho-f^JV!qEsg~!k3k&5NcYw-CHch7f4TrBN|Z}vhz!(F${cdf~dqS2QA zG3%twd$IY;)rBp%de7NM8{VpEbJsiv8ykZ=&qAVSAi@J41S`&`GpQfC_r-^eWaEtE zE0z~$)D~0I{vcL4E|VDW_}UPKe@Riq_@YHtOvbdaw(CPt-yMQf#lq9?^+AzxKPHK! z#FcC-o0_{4PX=ZO<6^$+VDh(@JGjv>A(?m!hj^_fLV9~RXS!P`sPmY~)a0J8;QTDN zmO#uC1=m?9RgsT4)^Ec)k@_2_RSBNrxD%^EWi`rUd8P$`P|Pwc}!6#gZyq^`nPCR$-@4 zi;@iVMbYhcXu^hSbHA7P12YsouG4RI)>qcX#9|@y*FU9}7`!T>)I6X;^|_K0gFnb6 z)mo~%YJ&vAT=X4yKL!>`HqVW@s`O}178!ED)+{Dn@lzmSQjf+FR%!)nhSFRzdd3Gf z$5pN~CFewT&Aa%^-J0;rF0{H9a`tQdmAOXGK*5hN9a&7*Pyp`y?L}kZmao}SpIh1c zP{@IMS$!-1_dc!DZBgyuSz^>3#Af~_&Xpp_NlF!wj-Kt`%`-)+qIYG5>O zr8#2>IYt(m8Oo8`Y+?2J688_1-z#rxNn)gUW7+z9YV#)aj~>>$Qmr$f4f5~y-c9*+ z2LUG}lB%R2sl5vTu!#Tww;F~7aC;opGclB4M!Ja`5p#Qg0HOcQ{#G~`buibz5(nc4 z&cRy_Wv->85Cr1g=$=|FN*oaH2KQW@szIF!$U}J>G@#glImWkz8MHybZ1NkOr2Tt( zMrRO^#q1x=gharBckbc+rlS2{PX9P!0NKBx!u4a^4RuRP?Z-;G1||ZACPaXL8UL@v zZ@wAQ!9WHzsO2+%;L+l^#!p@9PYD}Mq3Znlqpx4W5z{CkP+W(gpI+n18uSpOXW;B^r2Ci)Mk CS;)8m From 8735d788e66a06e9ca7bfaafc67d465b7685ac55 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Wed, 26 Dec 2018 15:51:53 +0800 Subject: [PATCH 049/442] * adjust for task #5180. --- framework/base/router.class.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/framework/base/router.class.php b/framework/base/router.class.php index 611531ac57..21525b08f2 100644 --- a/framework/base/router.class.php +++ b/framework/base/router.class.php @@ -2264,7 +2264,8 @@ class baseRouter * 为了安全起见,对公网环境隐藏脚本路径。 * If the ip is pulic, hidden the full path of scripts. */ - if(!defined('IN_SHELL') and !($this->server->remote_addr == '127.0.0.1' or filter_var($this->server->remote_addr, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE) === false)) + $remoteIP = helper::getRemoteIp(); + if(!defined('IN_SHELL') and !($remoteIP == '127.0.0.1' or filter_var($remoteIP, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE) === false)) { $errorLog = str_replace($this->getBasePath(), '', $errorLog); } From 841cb608ccc318fdf2423509e9f265ccfbbc688f Mon Sep 17 00:00:00 2001 From: Catouse Date: Wed, 26 Dec 2018 15:52:47 +0800 Subject: [PATCH 050/442] * hide sidebar when collapsed. --- www/theme/zui/css/min.css | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/www/theme/zui/css/min.css b/www/theme/zui/css/min.css index 99217365cd..3340c0eb05 100644 --- a/www/theme/zui/css/min.css +++ b/www/theme/zui/css/min.css @@ -1,5 +1,5 @@ /*! - * ZUI: Zentao template - v1.8.1 - 2018-12-24 + * ZUI: Zentao template - v1.8.1 - 2018-12-26 * http://zui.sexy * GitHub: https://github.com/easysoft/zui.git * Copyright (c) 2018 cnezsoft.com; Licensed MIT @@ -13,4 +13,4 @@ * * Copyright (c) 2011-2016 Harvest http://getharvest.com * MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md -*/.chosen-container{position:relative;display:inline-block;font-size:13px;vertical-align:middle;zoom:1;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;*display:inline}.chosen-container .chosen-drop{position:absolute;top:100%;z-index:1010;display:none;width:100%;background:#fff;border:1px solid #b6bdcc;border:1px solid rgba(0,0,0,.15);border-top:0;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.chosen-container .chosen-drop.chosen-drop-size-limited{border-top:1px solid rgba(0,0,0,.15)}.chosen-container.chosen-with-drop .chosen-drop{display:block}.chosen-container a{cursor:pointer}.chosen-container.chosen-up .chosen-drop{top:inherit;bottom:100%;margin-top:auto;margin-bottom:-1px;border-radius:2px 2px 0 0;-webkit-box-shadow:0 -3px 5px rgba(0,0,0,.175);box-shadow:0 -3px 5px rgba(0,0,0,.175)}.chosen-container-single .chosen-single{display:block;width:100%;height:32px;padding:5px 8px;overflow:hidden;line-height:1.42857143;color:#222;text-decoration:none;white-space:nowrap;vertical-align:middle;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #dcdcdc;border-radius:2px;-webkit-box-shadow:none;box-shadow:none;-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s,-webkit-box-shadow ease-in-out .15s}.chosen-container-single .chosen-default{color:#838a9d}.chosen-container-single .chosen-single>span{display:block;margin-right:26px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.chosen-container-single .chosen-single-with-deselect span{margin-right:38px}.chosen-container-single .chosen-single abbr{position:absolute;top:7px;right:24px;display:block;width:20px;height:20px;font-size:19.5px;font-weight:700;line-height:14px;color:#000;text-align:center;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.chosen-container-single .chosen-single abbr:before{content:'×'}.chosen-container-single .chosen-single abbr:focus,.chosen-container-single .chosen-single abbr:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}.chosen-container-single .chosen-single div{position:absolute;top:0;right:0;display:block;height:100%;padding:5px 8px}.chosen-container-single .chosen-single div b{display:inline-block;width:0;height:0;margin-bottom:2px;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.chosen-container-single .chosen-search{position:relative;z-index:1010;padding:3px 4px;margin:0;white-space:nowrap}.chosen-container-single .chosen-search input[type=text]{width:100%;height:27px;padding:2px 26px 2px 8px;margin:1px 0;font-size:12px;line-height:1.5;background-color:#fff;border:1px solid #dcdcdc;border-radius:2px;outline:0}.chosen-container-single .chosen-search input[type=text]:focus{border-color:#0c64eb}.chosen-container-single .chosen-search:before{position:absolute;top:10px;right:10px;display:block;font-family:ZentaoIcon;font-size:18px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;color:#838a9d;text-transform:none;content:"\e928";speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.chosen-container-single .chosen-drop{margin-top:-1px;-webkit-background-clip:padding-box;background-clip:padding-box;border-radius:0 0 4px 4px}.chosen-container-single.chosen-container-single-nosearch .chosen-search{position:absolute;left:-9999px}.chosen-container .chosen-results{position:relative;max-height:240px;padding:0;margin:0;overflow-x:hidden;overflow-y:auto;-webkit-overflow-scrolling:touch}.chosen-container .chosen-results li{display:none;padding:5px 10px;margin:0;line-height:15px;list-style:none;-webkit-transition:background-color .2s cubic-bezier(.175,.885,.32,1);-o-transition:background-color .2s cubic-bezier(.175,.885,.32,1);transition:background-color .2s cubic-bezier(.175,.885,.32,1);-webkit-touch-callout:none}.chosen-container .chosen-results li.active-result{display:list-item;cursor:pointer}.chosen-container .chosen-results li.disabled-result{display:list-item;color:#ccc;cursor:default}.chosen-container .chosen-results li.highlighted{color:#fff;background-color:#0c64eb}.chosen-container .chosen-results li.no-results{display:list-item;background:#f4f4f4}.chosen-container .chosen-results li.group-result{display:list-item;font-weight:700;cursor:default}.chosen-container .chosen-results li.group-option{padding-left:15px}.chosen-container .chosen-results li em{font-style:normal;text-decoration:underline}.chosen-container-multi .chosen-choices{position:relative;width:100%;min-height:32px;min-height:30px\9;padding:0;margin:0;overflow:hidden;cursor:text;background-color:#fff;border:1px solid #dcdcdc;border-radius:2px;-webkit-box-shadow:none;box-shadow:none;-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s,-webkit-box-shadow ease-in-out .15s}.chosen-container-multi .chosen-choices:after,.chosen-container-multi .chosen-choices:before{display:table;content:" "}.chosen-container-multi .chosen-choices:after{clear:both}.chosen-container-multi .chosen-choices li{display:block;float:left;padding:0 6px;margin:5px 0 0 6px;list-style:none}.chosen-container-multi .chosen-choices li.search-field{padding:0;margin-bottom:4px;white-space:nowrap}.chosen-container-multi .chosen-choices li.search-field input[type=text]{height:20px;font-size:100%;color:#838a9d;background:0 0!important;border:0!important;border-radius:0;outline:0;-webkit-box-shadow:none;box-shadow:none}.chosen-container-multi .chosen-choices li.search-field .default{color:#999}.chosen-container-multi .chosen-choices li.search-field:before{position:absolute;right:8px;bottom:8px;display:block;font-family:ZentaoIcon;font-size:18px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;color:#838a9d;text-transform:none;content:"\e928";opacity:0;-webkit-transition:opacity .2s cubic-bezier(.175,.885,.32,1);-o-transition:opacity .2s cubic-bezier(.175,.885,.32,1);transition:opacity .2s cubic-bezier(.175,.885,.32,1);speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.chosen-container-multi .chosen-choices li.search-choice{position:relative;padding:3px 20px 3px 5px;line-height:12px;cursor:default;background-color:#f1f1f1;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #cbd0db;border-radius:3px;-webkit-box-shadow:0 0 2px #fff inset,0 1px 0 rgba(0,0,0,.05);box-shadow:0 0 2px #fff inset,0 1px 0 rgba(0,0,0,.05);-webkit-transition:all .4s cubic-bezier(.175,.885,.32,1);-o-transition:all .4s cubic-bezier(.175,.885,.32,1);transition:all .4s cubic-bezier(.175,.885,.32,1)}.chosen-container-multi .chosen-choices li.search-choice:hover{background-color:#fff;border-color:#adb5c6;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 0 rgba(0,0,0,.1)}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close{position:absolute;top:0;right:0;display:block;width:20px;height:20px;font-size:15.6px;font-weight:700;line-height:14px;color:#000;text-align:center;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:before{content:'×'}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:focus,.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}.chosen-container-multi .chosen-choices li.search-choice-disabled{padding-right:5px;color:#666;background-color:#e4e4e4;border:1px solid #ccc}.chosen-container-multi .chosen-choices li.search-choice-focus{background:#d4d4d4}.chosen-container-multi .chosen-choices li.search-choice-focus .search-choice-close{background-position:-42px -10px}.chosen-container-multi .chosen-results{padding:5px 0;margin:0}.chosen-container-multi .chosen-drop .result-selected{display:list-item;color:#ccc;cursor:default}.chosen-container-active .chosen-single{border-color:#0c64eb;-webkit-box-shadow:none,0 0 8px rgba(12,100,235,.6);box-shadow:none,0 0 8px rgba(12,100,235,.6)}.chosen-container-active.chosen-with-drop .chosen-single{border:1px solid #b6bdcc;border:1px solid rgba(0,0,0,.15);border-bottom-right-radius:0;border-bottom-left-radius:0;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.chosen-container-active.chosen-with-drop .chosen-single div{background:0 0;border-left:none}.chosen-container-active.chosen-with-drop .chosen-single div b{content:"";border-top:0 dotted;border-bottom:4px solid}.chosen-container-active.chosen-with-drop.chosen-up .chosen-single{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:2px;border-bottom-left-radius:2px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.chosen-container-active .chosen-choices{border-color:#0c64eb;-webkit-box-shadow:none,0 0 8px rgba(12,100,235,.6);box-shadow:none,0 0 8px rgba(12,100,235,.6)}.chosen-container-active .chosen-choices li.search-field input[type=text]{color:#111!important}.chosen-container-active .chosen-choices li.search-field:before{opacity:1}.chosen-disabled{cursor:default;opacity:.5!important}.chosen-disabled .chosen-single{cursor:default}.chosen-disabled .chosen-choices .search-choice .search-choice-close{cursor:default}.chosen-container-single .chosen-single>.chosen-search{left:0;display:none;padding:3px 4px;opacity:0}.chosen-container-single .chosen-single>.chosen-search>input{height:25px;padding:2px 26px 2px 4px;font-size:inherit}.chosen-container-single .chosen-single>.chosen-search:before{top:9px}.chosen-with-search.chosen-with-drop .chosen-single>.chosen-search{display:block;opacity:1}.container,.container-fixed,.container-fluid{position:relative}.container{max-width:1800px!important}body{padding-bottom:40px;background-color:#efefef}body.article-content,body.body-modal{background:0 0}body.body-modal{padding:0}a:active,a:focus,button:active,button:focus{outline:0!important}em{font-style:normal}.strong{font-weight:700}.font-normal{font-weight:400!important}.text-middle{vertical-align:middle!important}.text-bottom{vertical-align:bottom!important}.text-top{vertical-align:top!important}.inline-block{display:inline-block!important}.layer{border-radius:4px;-webkit-box-shadow:0 0 20px 0 #bdc9d8;box-shadow:0 0 20px 0 #bdc9d8}.space{margin-bottom:20px}.space-lg{margin-bottom:30px}.space-sm{margin-bottom:10px}.muted{opacity:.5}.text-muted em{color:#3c4353}.no-animate{-webkit-transition:none!important;-o-transition:none!important;transition:none!important}.template{display:none!important}.text-left{text-align:left!important}.text-yellow.icon-folder{color:#ffe066}.table-row{display:table;width:100%;table-layout:fixed}.table-col,.table-row>.col,.table-row>[class*=col-],.table-row>[class*="-col"]{display:table-cell;float:none;vertical-align:top}.side-col{width:200px;padding-right:20px}.side-col.col-4{width:33.3333333%}.col-lg{width:260px}.col-xl{width:320px}.col-sm{width:150px}.col-xs{width:100px}.main-col+.side-col{padding-right:0;padding-left:20px}.row-grid>[class*=col-],.row-grid>[class*="-col"]{padding-top:6px;padding-bottom:6px}hr.space{margin:10px 0;border:none}hr.space-sm{margin:5px 0;border:none}.text-secondary{color:#16a8f8}a.text-primary{color:#0c64eb}.nav-primary>li>a{min-width:100px;padding:5px 8px;color:#838a9d;border-color:#e7f1fc}.nav-primary>li.active>a{color:#0c64eb;background-color:#e7f1fc;border-color:#e7f1fc}.nav-primary>li.active>a:hover{color:#0c64eb;background-color:#c3dcf7;border-color:#c3dcf7}.end-marker{margin-bottom:20px;color:#cbd0db;text-align:center}@-webkit-keyframes highlight{0%{background:#fff;outline:1px solid transparent}100%{background:#fff0d5;outline:2px solid #ffdcbc}}@-o-keyframes highlight{0%{background:#fff;outline:1px solid transparent}100%{background:#fff0d5;outline:2px solid #ffdcbc}}@keyframes highlight{0%{background:#fff;outline:1px solid transparent}100%{background:#fff0d5;outline:2px solid #ffdcbc}}.highlight{-webkit-animation:highlight .5s linear 0s 2 alternate;-o-animation:highlight .5s linear 0s 2 alternate;animation:highlight .5s linear 0s 2 alternate}.progress.inline-block{width:100px;margin:0}.w-p5{width:5%!important}.w-p10{width:10%!important}.w-p15{width:15%!important}.w-p20{width:20%!important}.w-p25{width:25%!important}.w-p30{width:30%!important}.w-p35{width:35%!important}.w-p40{width:40%!important}.w-p45{width:45%!important}.w-p50{width:50%!important}.w-p55{width:55%!important}.w-p60{width:60%!important}.w-p65{width:65%!important}.w-p70{width:70%!important}.w-p75{width:75%!important}.w-p80{width:80%!important}.w-p85{width:85%!important}.w-p90{width:90%!important}.w-p94{width:94%!important}.w-p95{width:95%!important}.w-p98{width:98%!important}.w-p99{width:99%!important}.w-p100{width:100%!important}.w-auto{width:auto!important}.w-10px{width:10px!important}.w-20px{width:20px!important}.w-30px{width:30px!important}.w-35px{width:35px!important}.w-40px{width:40px!important}.w-45px{width:45px!important}.w-50px{width:50px!important}.w-60px{width:60px!important}.w-70px{width:70px!important}.w-80px{width:80px!important}.w-90px{width:90px!important}.w-100px{width:100px!important}.w-110px{width:110px!important}.w-120px{width:120px!important}.w-130px{width:130px!important}.w-140px{width:140px!important}.w-150px{width:150px!important}.w-160px{width:160px!important}.w-180px{width:180px!important}.w-200px{width:200px!important}.w-230px{width:230px!important}.w-250px{width:250px!important}.w-300px{width:300px!important}.w-400px{width:400px!important}.w-500px{width:500px!important}.w-600px{width:600px!important}.w-700px{width:700px!important}.w-800px{width:800px!important}.w-900px{width:900px!important}.mw-200px{max-width:200px!important}.mw-300px{max-width:300px!important}.mw-400px{max-width:400px!important}.mw-500px{max-width:500px!important}.mw-600px{max-width:600px!important}.mw-700px{max-width:700px!important}.mw-800px{max-width:800px!important}.mw-900px{max-width:900px!important}.mw-1400px{max-width:1400px!important}.w-id{width:70px!important}.w-pri{width:40px!important}.w-severity{width:50px!important}.w-hour{width:57px!important}.w-date{width:90px!important}.w-status{width:60px!important}.w-resolution,.w-type,.w-user{width:80px!important}.w-p15-f{width:15%!important;min-width:120px!important}.w-p25-f{width:25%!important;min-width:200px!important}.w-p35-f{width:35%!important;min-width:300px!important}.w-p45-f{width:45%!important;min-width:400px!important}.h-5px{height:5px!important}.h-10px{height:10px!important}.h-20px{height:20px!important}.h-30px{height:30px!important}.h-35px{height:35px!important}.h-40px{height:40px!important}.h-45px{height:45px!important}.h-50px{height:50px!important}.h-60px{height:60px!important}.h-70px{height:70px!important}.h-80px{height:80px!important}.h-100px{height:100px!important}.h-120px{height:120px!important}.h-130px{height:130px!important}.h-140px{height:140px!important}.h-150px{height:150px!important}.h-200px{height:200px!important}.pd-0{padding:0!important}.mg-0{margin:0!important}.mgb-20{margin-bottom:20px!important}.mgb-10{margin-bottom:10px!important}.pdb-20{padding-bottom:20px!important}.pdt-20{padding-top:20px!important}.br-0{border-radius:0!important}.bd-0,.bd-none,.borderless{border:none!important}.bg-none{background:0 0!important}.red{color:#ff5d5d!important}.icon-pro-version{font-size:14px!important}.icon-pro-version:before{position:relative;top:-1px;font-size:14px;color:#ff5d5d;content:"\e92b"}.bg-primary{color:#fff;background:#1183fb -webkit-gradient(linear,right top,left top,from(#0a48d1),to(#1183fb));background:#1183fb -webkit-linear-gradient(right,#0a48d1 0,#1183fb 100%);background:#1183fb -o-linear-gradient(right,#0a48d1 0,#1183fb 100%);background:#1183fb linear-gradient(-90deg,#0a48d1 0,#1183fb 100%);background-color:#00b1fd}.bg-secondary{color:#fff;background:#16a8f8}.hl-tutorial{position:relative!important;z-index:1010!important;-webkit-box-shadow:0 0 0 0 #000!important;box-shadow:0 0 0 0 #000!important;-webkit-transition:-webkit-box-shadow 1s!important;-o-transition:box-shadow 1s!important;transition:-webkit-box-shadow 1s!important;transition:box-shadow 1s!important;transition:box-shadow 1s,-webkit-box-shadow 1s!important}.hl-tutorial.hl-in{-webkit-box-shadow:0 0 20px 0 #ffff8d,0 0 0 2px #ffd180,0 0 0 2000px rgba(0,0,0,.2)!important;box-shadow:0 0 20px 0 #ffff8d,0 0 0 2px #ffd180,0 0 0 2000px rgba(0,0,0,.2)!important}.btn.tooltip-tutorial,.hl-tutorial.hl-in:hover{-webkit-box-shadow:0 0 30px 0 #ffff8d,0 0 0 5px #ffd180,0 0 0 2000px rgba(0,0,0,.3)!important;box-shadow:0 0 30px 0 #ffff8d,0 0 0 5px #ffd180,0 0 0 2000px rgba(0,0,0,.3)!important}.tooltip-max .tooltip-inner{max-width:1000px;padding:8px 10px}.transition-all *{-webkit-transition:all .2s!important;-o-transition:all .2s!important;transition:all .2s!important}.scroll-x{overflow-x:auto!important}.scroll-y{overflow-y:auto!important}.divider+.divider{display:none}@font-face{font-family:ZentaoIcon;font-style:normal;font-weight:400;src:url(../fonts/ZentaoIcon.eot?v=1.1.0);src:url(../fonts/ZentaoIcon.eot?#iefix&v=1.1.0) format('embedded-opentype'),url(../fonts/ZentaoIcon.woff?v=1.1.0) format('woff'),url(../fonts/ZentaoIcon.ttf?v=1.1.0) format('truetype'),url(../fonts/ZentaoIcon.svg#regular?v=1.1.0) format('svg')}.icon,[class*=" icon-"],[class^=icon-]{font-family:ZentaoIcon;font-size:18px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;text-transform:none;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon:before{display:inline-block;min-width:18px;text-align:center}a .icon,a [class*=" icon-"],a [class^=icon-]{display:inline}.icon-lg:before{font-size:1.33333333em;vertical-align:-10%}.icon-2x{font-size:36px}.icon-3x{font-size:54px}.icon-4x{font-size:72px}.icon-5x{font-size:90px}.icon-spin{display:inline-block;-webkit-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;animation:spin 2s infinite linear}a .icon-spin{display:inline-block;text-decoration:none}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0);transform:rotate(0)}100%{-o-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes spin{0%{-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);-o-transform:rotate(359deg);transform:rotate(359deg)}}.icon-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.icon-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.icon-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.icon-flip-horizontal{-webkit-transform:scale(-1,1);-ms-transform:scale(-1,1);-o-transform:scale(-1,1);transform:scale(-1,1)}.icon-flip-vertical{-webkit-transform:scale(1,-1);-ms-transform:scale(1,-1);-o-transform:scale(1,-1);transform:scale(1,-1)}.icon.icon-flip-horizontal,.icon.icon-flip-vertical,.icon.icon-rotate-180,.icon.icon-rotate-270,.icon.icon-rotate-90{display:inline-block}.icon-book:before{content:"\f02d"}.icon-treemap-alt:before{content:"\e971"}.icon-collapse-alt:before{content:"\e6f2"}.icon-expand-alt:before{content:"\e6f1"}.icon-more:before{content:"\e744"}.icon-angle-double-right:before{content:"\f101"}.icon-certificate:before{content:"\f0a3"}.icon-bell:before{content:"\e7f5"}.icon-format-bold:before{content:"\e953"}.icon-format-header-pound:before{content:"\e954"}.icon-format-italic:before{content:"\e955"}.icon-format-list-bulleted:before{content:"\e956"}.icon-format-list-numbers:before{content:"\e969"}.icon-format-quote-close:before{content:"\e96a"}.icon-fullscreen:before{content:"\e96b"}.icon-fullscreen-exit:before{content:"\e972"}.icon-image:before{content:"\e96c"}.icon-table-large:before{content:"\e96d"}.icon-columns:before{content:"\f0db"}.icon-cancel:before{content:"\e951"}.icon-ban-circle:before{content:"\e951"}.icon-persons:before{content:"\e94d"}.icon-eye:before{content:"\e94e"}.icon-unlock:before{content:"\e94f"}.icon-eye-off:before{content:"\e96e"}.icon-lock:before{content:"\e950"}.icon-move:before{content:"\e94c"}.icon-help:before{content:"\e968"}.icon-folder-account:before{content:"\e942"}.icon-folder-move:before{content:"\e960"}.icon-folder-plus:before{content:"\e961"}.icon-folder-upload:before{content:"\e962"}.icon-folder-star:before{content:"\e963"}.icon-folder-edit:before{content:"\e964"}.icon-folder-download:before{content:"\e965"}.icon-folder-outline:before{content:"\e966"}.icon-restart:before{content:"\e95e"}.icon-history:before{content:"\e95f"}.icon-home:before{content:"\e958"}.icon-pencil:before{content:"\e254"}.icon-angle-down:before{content:"\e313"}.icon-angle-left:before{content:"\e314"}.icon-angle-right:before{content:"\e315"}.icon-angle-top:before{content:"\e316"}.icon-first-page:before{content:"\e5dc"}.icon-last-page:before{content:"\e5dd"}.icon-caret-down:before{content:"\f0d7"}.icon-caret-up:before{content:"\f0d8"}.icon-caret-left:before{content:"\f0d9"}.icon-caret-right:before{content:"\f0da"}.icon-sort:before{content:"\f0dc"}.icon-sort-down:before{content:"\f0dd"}.icon-sort-up:before{content:"\f0de"}.icon-zentao-alt:before{content:"\e900"}.icon-zentao:before{content:"\e901"}.icon-severity:before{content:"\e973"}.icon-severity-solid:before{content:"\e902"}.icon-bar-chart:before{content:"\e903"}.icon-import:before{content:"\e904"}.icon-export:before{content:"\e905"}.icon-printer:before{content:"\e906"}.icon-hand-right:before{content:"\e907"}.icon-hand-right-alt:before{content:"\e96f"}.icon-checked:before{content:"\e908"}.icon-off:before{content:"\e909"}.icon-start:before{content:"\e90a"}.icon-play:before{content:"\e90a"}.icon-time:before{content:"\e90b"}.icon-edit:before{content:"\e90c"}.icon-trash:before{content:"\e90d"}.icon-link:before{content:"\e90e"}.icon-unlink:before{content:"\e90f"}.icon-bullhorn:before{content:"\e910"}.icon-bug:before{content:"\e911"}.icon-list-alt:before{content:"\e912"}.icon-fork:before{content:"\e913"}.icon-change:before{content:"\e970"}.icon-glasses:before{content:"\e914"}.icon-sitemap:before{content:"\e915"}.icon-plus-sign:before{content:"\e916"}.icon-pluses:before{content:"\e917"}.icon-flag-alt:before{content:"\e918"}.icon-magic:before{content:"\e919"}.icon-treemap:before{content:"\e91a"}.icon-confirm:before{content:"\e91b"}.icon-lightbulb:before{content:"\e91c"}.icon-delay:before{content:"\e91d"}.icon-calendar:before{content:"\e91d"}.icon-pause:before{content:"\e91e"}.icon-ban:before{content:"\e91f"}.icon-plus-bold:before{content:"\e920"}.icon-copy:before{content:"\e921"}.icon-refresh:before{content:"\e922"}.icon-arrow-up:before{content:"\e923"}.icon-arrow-down:before{content:"\e924"}.icon-arrow-left:before{content:"\e952"}.icon-arrow-right:before{content:"\e93e"}.icon-plus:before{content:"\e925"}.icon-minus:before{content:"\e926"}.icon-exchange:before{content:"\e927"}.icon-search:before{content:"\e928"}.icon-envelope-o:before{content:"\e92a"}.icon-check:before{content:"\e5ca"}.icon-circle:before{content:"\e836"}.icon-up-circle:before{content:"\e92b"}.icon-right-circle:before{content:"\e92c"}.icon-down-circle:before{content:"\e92d"}.icon-left-circle:before{content:"\e92e"}.icon-check-circle:before{content:"\e92f"}.icon-exclamation-sign:before{content:"\e930"}.icon-unfold-all:before{content:"\e931"}.icon-fold-all:before{content:"\e932"}.icon-plus-sm:before{content:"\e933"}.icon-chevron-left:before{content:"\e934"}.icon-chevron-right:before{content:"\e935"}.icon-close:before{content:"\e936"}.icon-flag:before{content:"\e937"}.icon-check-sign:before{content:"\e938"}.icon-minus-sign:before{content:"\e939"}.icon-bars-sign:before{content:"\e93a"}.icon-cog:before{content:"\e93b"}.icon-color:before{content:"\e93c"}.icon-paper-clip:before{content:"\e93d"}.icon-back:before{content:"\e93f"}.icon-chat-line:before{content:"\e940"}.icon-person:before{content:"\e941"}.icon-stack:before{content:"\e943"}.icon-cube:before{content:"\e967"}.icon-folder:before{content:"\e944"}.icon-folder-o:before{content:"\e945"}.icon-folder-open-o:before{content:"\e946"}.icon-folder-open:before{content:"\e947"}.icon-bars:before{content:"\e948"}.icon-cards-view:before{content:"\e949"}.icon-star-empty:before{content:"\e94a"}.icon-star:before{content:"\e94b"}.icon-ellipsis-v:before{content:"\e5d4"}.icon-spinner-indicator:before{content:"\e982"}.icon-text:before{content:"\e929"}.icon-code:before{content:"\e957"}.icon-chevron-double-up:before{content:"\e959"}.icon-chevron-double-down:before{content:"\e95a"}.icon-chart-pie:before{content:"\e95b"}.icon-chart-line:before{content:"\e95c"}.icon-chart-bar:before{content:"\e95d"}.icon-globe:before{content:"\f0ac"}.icon-file:before{content:"\f016"}.icon-file-empty:before{content:"\f016"}.icon-file-text:before{content:"\f0f6"}.icon-file-alt:before{content:"\f15b"}.icon-file-text-alt:before{content:"\f15c"}.icon-file-pdf:before{content:"\f1c1"}.icon-file-word:before{content:"\f1c2"}.icon-file-excel:before{content:"\f1c3"}.icon-file-powerpoint:before{content:"\f1c4"}.icon-file-image:before{content:"\f1c5"}.icon-file-archive:before{content:"\f1c6"}.icon-file-audio:before{content:"\f1c7"}.icon-file-video:before{content:"\f1c8"}.icon-file-code:before{content:"\f1c9"}.icon-sm:before{font-size:14px;vertical-align:10%}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:13px;font-weight:400;line-height:18px;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;border-radius:4px;-webkit-transition:.4s cubic-bezier(.175,.885,.32,1);-o-transition:.4s cubic-bezier(.175,.885,.32,1);transition:.4s cubic-bezier(.175,.885,.32,1);-webkit-transition-property:background,border,outline,opacity,-webkit-box-shadow;-o-transition-property:background,border,box-shadow,outline,opacity;transition-property:background,border,outline,opacity,-webkit-box-shadow;transition-property:background,border,box-shadow,outline,opacity;transition-property:background,border,box-shadow,outline,opacity,-webkit-box-shadow}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:focus,.btn:hover{color:#3c4353;text-decoration:none}.btn:active{text-decoration:none;background-image:none;outline:0;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.1)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;filter:grayscale(1);-webkit-box-shadow:none;box-shadow:none;opacity:.5;-webkit-filter:grayscale(1)}.btn{color:#3c4353;background-color:#fff;border-color:#d6dae3}.btn.active,.btn.hover,.btn:active,.btn:focus,.btn:hover,.open .dropdown-toggle.btn{color:#3c4353;background-color:rgba(255,255,255,.8);border-color:#b8bfce}.btn.active,.btn:active,.open .dropdown-toggle.btn{background-color:#f2f2f2;background-image:none;border-color:#b8bfce}.btn.disabled,.btn.disabled.active,.btn.disabled:active,.btn.disabled:focus,.btn.disabled:hover,.btn[disabled],.btn[disabled].active,.btn[disabled]:active,.btn[disabled]:focus,.btn[disabled]:hover,fieldset[disabled] .btn,fieldset[disabled] .btn.active,fieldset[disabled] .btn:active,fieldset[disabled] .btn:focus,fieldset[disabled] .btn:hover{color:rgba(60,67,83,.3);background-color:#fff;border-color:#d6dae3}.btn-gray{color:#82899f;background-color:#f1f1f1;border-color:#f1f1f1}.btn-gray.active,.btn-gray.hover,.btn-gray:active,.btn-gray:focus,.btn-gray:hover,.open .dropdown-toggle.btn-gray{color:#82899f;background-color:rgba(241,241,241,.8);border-color:#d8d8d8}.btn-gray.active,.btn-gray:active,.open .dropdown-toggle.btn-gray{background-color:#e4e4e4;background-image:none;border-color:#d8d8d8}.btn-gray.disabled,.btn-gray.disabled.active,.btn-gray.disabled:active,.btn-gray.disabled:focus,.btn-gray.disabled:hover,.btn-gray[disabled],.btn-gray[disabled].active,.btn-gray[disabled]:active,.btn-gray[disabled]:focus,.btn-gray[disabled]:hover,fieldset[disabled] .btn-gray,fieldset[disabled] .btn-gray.active,fieldset[disabled] .btn-gray:active,fieldset[disabled] .btn-gray:focus,fieldset[disabled] .btn-gray:hover{color:rgba(130,137,159,.3);background-color:#f1f1f1;border-color:#f1f1f1}.btn-primary{color:#fff;background-color:#0c64eb;border-color:transparent}.btn-primary.active,.btn-primary.hover,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.open .dropdown-toggle.btn-primary{color:#fff;background-color:rgba(12,100,235,.8);border-color:rgba(0,0,0,0)}.btn-primary.active,.btn-primary:active,.open .dropdown-toggle.btn-primary{background-color:#0b5ad3;background-image:none;border-color:rgba(0,0,0,0)}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{color:rgba(255,255,255,.3);background-color:#0c64eb;border-color:transparent}.btn-secondary{color:#fff;background-color:#16a8f8;border-color:transparent}.btn-secondary.active,.btn-secondary.hover,.btn-secondary:active,.btn-secondary:focus,.btn-secondary:hover,.open .dropdown-toggle.btn-secondary{color:#fff;background-color:rgba(22,168,248,.8);border-color:rgba(0,0,0,0)}.btn-secondary.active,.btn-secondary:active,.open .dropdown-toggle.btn-secondary{background-color:#079ced;background-image:none;border-color:rgba(0,0,0,0)}.btn-secondary.disabled,.btn-secondary.disabled.active,.btn-secondary.disabled:active,.btn-secondary.disabled:focus,.btn-secondary.disabled:hover,.btn-secondary[disabled],.btn-secondary[disabled].active,.btn-secondary[disabled]:active,.btn-secondary[disabled]:focus,.btn-secondary[disabled]:hover,fieldset[disabled] .btn-secondary,fieldset[disabled] .btn-secondary.active,fieldset[disabled] .btn-secondary:active,fieldset[disabled] .btn-secondary:focus,fieldset[disabled] .btn-secondary:hover{color:rgba(255,255,255,.3);background-color:#16a8f8;border-color:transparent}.btn-warning{color:#fff;background-color:#ff9800;border-color:transparent}.btn-warning.active,.btn-warning.hover,.btn-warning:active,.btn-warning:focus,.btn-warning:hover,.open .dropdown-toggle.btn-warning{color:#fff;background-color:rgba(255,152,0,.8);border-color:rgba(0,0,0,0)}.btn-warning.active,.btn-warning:active,.open .dropdown-toggle.btn-warning{background-color:#e68900;background-image:none;border-color:rgba(0,0,0,0)}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{color:rgba(255,255,255,.3);background-color:#ff9800;border-color:transparent}.btn-danger{color:#fff;background-color:#ff5d5d;border-color:transparent}.btn-danger.active,.btn-danger.hover,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,.open .dropdown-toggle.btn-danger{color:#fff;background-color:rgba(255,93,93,.8);border-color:rgba(0,0,0,0)}.btn-danger.active,.btn-danger:active,.open .dropdown-toggle.btn-danger{background-color:#ff4343;background-image:none;border-color:rgba(0,0,0,0)}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{color:rgba(255,255,255,.3);background-color:#ff5d5d;border-color:transparent}.btn-success{color:#fff;background-color:#00da88;border-color:transparent}.btn-success.active,.btn-success.hover,.btn-success:active,.btn-success:focus,.btn-success:hover,.open .dropdown-toggle.btn-success{color:#fff;background-color:rgba(0,218,136,.8);border-color:rgba(0,0,0,0)}.btn-success.active,.btn-success:active,.open .dropdown-toggle.btn-success{background-color:#00c178;background-image:none;border-color:rgba(0,0,0,0)}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{color:rgba(255,255,255,.3);background-color:#00da88;border-color:transparent}.btn-info{color:#0c64eb;background-color:#e9f2fb;border-color:transparent}.btn-info.active,.btn-info.hover,.btn-info:active,.btn-info:focus,.btn-info:hover,.open .dropdown-toggle.btn-info{color:#0c64eb;background-color:rgba(233,242,251,.8);border-color:rgba(0,0,0,0)}.btn-info.active,.btn-info:active,.open .dropdown-toggle.btn-info{background-color:#d3e5f7;background-image:none;border-color:rgba(0,0,0,0)}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{color:rgba(12,100,235,.3);background-color:#e9f2fb;border-color:transparent}.btn-link{padding-right:6px;padding-left:6px;font-weight:400;color:#3c4353;text-shadow:none;cursor:pointer;background:0 0;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover,.btn-link[disabled],fieldset[disabled] .btn-link{border-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link:focus,.btn-link:hover{color:#222;background:#f1f1f1;background:rgba(0,0,0,.075)}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#cbd0db;text-decoration:none}.btn-lg{padding:11px 16px;font-size:14px;line-height:18px;border-radius:4px}.btn-mini,.btn-sm{padding:3px 8px;font-size:12px;line-height:18px;border-radius:4px}.btn-mini,.btn-xs{padding:0 5px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.btn-wide{min-width:120px}.btn-limit{max-width:180px;padding-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.btn-limit>.caret{position:absolute;top:14px;right:8px}.btn-circle{border-radius:17px}.btn>.label-icon{top:3px;padding:3px;margin:-2px;background-color:rgba(0,0,0,.2);border-radius:12px}.btn>.label-icon>.icon{font-size:16px;line-height:18px}.btn>.icon+.text{margin-left:5px}.btn.btn-sm.btn-circle{border-radius:12px}.btn.btn-sm>.label-icon{top:2px;width:20px;height:20px;padding:1px;line-height:20px}.btn.btn-sm>.label-icon>.icon{position:relative;top:-1px;display:inline-block;font-size:14px;line-height:18px}.btn-icon-left{position:relative;padding-left:35px;overflow:hidden;text-align:right}.btn-icon-left>.label-icon{position:absolute;left:5px;margin:0}.btn-icon-left>.icon{position:absolute;top:0;bottom:0;left:0;display:block;width:30px;line-height:30px;color:#16a8f8;text-align:center;background:#e9f2fb}.btn-icon-left.btn-sm{padding-left:28px}.btn-icon-left.btn-sm>.label-icon{left:2px}.btn-icon-left.btn-sm>.icon{width:24px;line-height:24px}.btn-icon-right{position:relative;padding-right:35px;text-align:left}.btn-icon-right>.label-icon{position:absolute;right:5px;margin:0}.btn-icon-right.btn-sm{padding-right:28px}.btn-icon-right.btn-sm>.label-icon{right:2px}.btn-icon{min-width:32px;padding-right:0;padding-left:0}.btn-icon.btn-sm{width:24px;min-width:24px;height:24px}.btn-group{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group>.btn-group{float:left}.btn-group>.btn{border-radius:0}.btn-group>.btn:first-child{border-top-left-radius:2px;border-bottom-left-radius:2px}.btn-group>.btn:last-child{border-top-right-radius:2px;border-bottom-right-radius:2px}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.dropdown{float:left;margin-right:10px}.btn-toolbar>.btn-group:last-child,.btn-toolbar>.btn:last-child,.btn-toolbar>.dropdown:last-child{margin-right:0}.btn-toolbar>.divider{float:left;height:20px;margin:7px 5px 4px 10px;border-left:1px solid rgba(0,0,0,.1)}.btn-toolbar .space{float:left;min-height:1px;margin:0 10px 0 10px}.btn-toolbar .input-control{float:left;width:120px}.btn-toolbar .page-title{float:left;line-height:34px}.btn-toolbar .page-title .text{font-size:14px;font-weight:700}.btn-toolbar .page-title .label{top:-2px;margin-right:10px}.btn-toolbar .divider+.page-title{margin-left:15px}.btn-active-line{position:relative;font-weight:700;color:#0c64eb}.btn-active-line:after{position:absolute;right:5px;bottom:1px;left:5px;display:block;content:' ';border-bottom:2px solid #0c64eb}.btn-active-line:hover{color:#0c64eb}.btn-active-text .text{position:relative;top:-1px;display:inline-block;font-weight:700;color:#0c64eb}.btn-active-text .text:after{position:absolute;bottom:-5px;display:block;width:100%;content:' ';border-bottom:2px solid #0c64eb}.angle-btn{position:relative;padding:1px;background:#fff;border:1px solid #cbd0db;border-right:none}.btn-toolbar>.angle-btn{margin-right:8px}.angle-btn:after,.angle-btn:before{position:absolute;top:-1px;right:-8px;display:block;width:0;height:0;content:' ';border-color:transparent transparent transparent #cbd0db;border-style:solid;border-width:17px 0 17px 8px}.angle-btn:after{right:-7px;border-color:transparent transparent transparent #fff;border-width:17px 0 17px 8px}.angle-btn .btn{padding:6px;font-weight:700;background:#fff;border:none;border-radius:4px!important}.angle-btn .btn.btn-limit{padding-right:16px}.angle-btn .btn.btn-limit>.caret{right:4px}.angle-btn+.angle-btn{border-left:none}.angle-btn+.angle-btn>.btn-group:first-child{padding-left:8px}.angle-btn+.angle-btn>.btn-group:first-child:after,.angle-btn+.angle-btn>.btn-group:first-child:before{position:absolute;top:-2px;left:0;display:block;width:0;height:0;content:' ';border-color:transparent transparent transparent #cbd0db;border-style:solid;border-width:17px 0 17px 8px}.angle-btn+.angle-btn>.btn-group:first-child:after{left:-1px;border-color:transparent transparent transparent #fff;border-width:17px 0 17px 8px}.btn-toolbar>.angle-btn.active,.btn-toolbar>.angle-btn:last-child{border-color:#0c64eb}.btn-toolbar>.angle-btn.active .btn,.btn-toolbar>.angle-btn:last-child .btn{color:#0c64eb}.btn-toolbar>.angle-btn.active:after,.btn-toolbar>.angle-btn.active:before,.btn-toolbar>.angle-btn:last-child:after,.btn-toolbar>.angle-btn:last-child:before{border-color:transparent transparent transparent #0c64eb}.btn-toolbar>.angle-btn.active:after,.btn-toolbar>.angle-btn:last-child:after{border-color:transparent transparent transparent #fff}.btn-toolbar>.angle-btn+.angle-btn:last-child>.btn-group:first-child:after,.btn-toolbar>.angle-btn+.angle-btn:last-child>.btn-group:first-child:before,.btn-toolbar>.angle-btn.active+.angle-btn>.btn-group:first-child:after,.btn-toolbar>.angle-btn.active+.angle-btn>.btn-group:first-child:before{border-color:transparent transparent transparent #0c64eb}.btn-toolbar>.angle-btn+.angle-btn:last-child>.btn-group:first-child:after,.btn-toolbar>.angle-btn.active+.angle-btn>.btn-group:first-child:after{border-color:transparent transparent transparent #fff}.btn-toolbar>.angle-btn.active+.angle-btn,.btn-toolbar>.angle-btn.normal{border-color:#cbd0db}.btn-toolbar>.angle-btn.active+.angle-btn .btn,.btn-toolbar>.angle-btn.normal .btn{color:#3c4353}.btn-toolbar>.angle-btn.active+.angle-btn:after,.btn-toolbar>.angle-btn.active+.angle-btn:before,.btn-toolbar>.angle-btn.normal:after,.btn-toolbar>.angle-btn.normal:before{border-color:transparent transparent transparent #cbd0db}.btn-toolbar>.angle-btn.active+.angle-btn:after,.btn-toolbar>.angle-btn.normal:after{border-color:transparent transparent transparent #fff}.btn-toolbar>.angle-btn.active+.angle-btn>.btn-group:first-child:before,.btn-toolbar>.angle-btn.normal>.btn-group:first-child:before{border-color:transparent transparent transparent #cbd0db!important}.nav>li>.btn.btn-primary{color:#fff}.nav>li>.btn.btn-primary:focus,.nav>li>.btn.btn-primary:hover{background:rgba(12,100,235,.8)}.label{position:relative;display:inline-block;padding:3px 5px;font-size:12px;font-weight:400;vertical-align:middle;border-radius:2px}.label+.label{margin-left:4px}.label-pale{background:#bed8f3!important}.label-badge{border-radius:9px}.label-light{color:#3c4353;background-color:#ddd}.label-primary{background:#0c64eb!important}.label-gray{color:#878da0;background:#e8ebef}.label-outline.label-danger{color:#ff5d5d;background:#ffebee;border-color:rgba(255,93,93,.25)}.label-outline.label-light{color:#838a9d;background:#f2f5fb;border-color:#e1e5ee}.label-primary.label-outline{background:#e9f2fb!important;border-color:rgba(12,100,235,.25)}.label-outline.label-success{background:#e8f5e9;border-color:rgba(0,218,136,.25)}.label-dot{position:relative;top:-1px;padding:0;border-radius:50%}.label-dot+.status-text{display:inline-block;margin-left:5px}.label-icon{min-width:18px;padding:0;line-height:18px;border-radius:10px}.label-id{display:inline-block;min-width:30px;padding:0 5px;font-size:12px;line-height:16px;color:#838a9d;text-align:center;vertical-align:middle;background-color:transparent;border:1px solid #838a9d;border-radius:2px}.pri-1,.todo-pri-1{color:#ff5d5d}[class*=" status-"],[class^=status-]{color:#3c4353}.status-changed,.status-delayed,.status-doing,.status-fail,.status-investigate{color:#ff5d5d}.status-changed>.label-dot,.status-delayed>.label-dot,.status-doing>.label-dot,.status-fail>.label-dot,.status-investigate>.label-dot{background-color:#ff5d5d}.status-wait{color:#838a9d}.status-wait>.label-dot{background-color:#7ec5ff}.status-unclosed{color:#838a9d}.status-unclosed>.label-dot{background-color:#0c64eb}.status-done,.status-normal,.status-pass,.status-resolved{color:#43a047}.status-done>.label-dot,.status-normal>.label-dot,.status-pass>.label-dot,.status-resolved>.label-dot{background-color:#00da88}.status-postpone{color:#838a9d}.status-postpone>.label-dot{background-color:#ff5d5d}.status-blocked{position:relative;left:-5px;display:inline-block;padding:0 5px;line-height:20px;color:#3c4353;background:#fff3e0;border-radius:10px}.status-blocked>.label-dot{background-color:#ff9800}.status-pause,.status-suspended{color:#ff9800}.status-pause>.label-dot,.status-suspended>.label-dot{background-color:#ff9800}.status-active.status-bug,.status-draft{color:#8666b8}.status-active.status-bug>.label-dot,.status-draft>.label-dot{background-color:#8666b8}.status-closed,.status-terminate{color:#838a9d}.status-closed>.label-dot,.status-terminate>.label-dot{background-color:#838a9d}.status-cancel{color:#838a9d}.status-cancel>.label-dot{background-color:#cbd0db}.label-pri{display:inline-block;min-width:20px;max-width:67px;height:20px;padding:0 4px;overflow:hidden;line-height:17px;color:#838a9d;text-align:center;text-overflow:ellipsis;white-space:nowrap;vertical-align:middle;border:2px solid #838a9d;border-radius:10px}.label-selector>.label-pri,[class*=label-pri-]{color:#158af1;border-color:#2098ee}.label-pri-1,.label-selector>.label-pri[data-value="1"]{color:#d50000;border-color:#d50000}.label-pri-2,.label-selector>.label-pri[data-value="2"]{color:#ff9800;border-color:#ff9800}.label-pri-3,.label-selector>.label-pri[data-value="3"]{color:#2098ee;border-color:#2098ee}.label-pri-4,.label-selector>.label-pri[data-value="4"]{color:#009688;border-color:#009688}.label-pri-5,.label-selector>.label-pri[data-value="5"]{color:#838a9d;border-color:#838a9d}.label-pri-0,.label-selector>.label-pri.active[data-value="0"]{color:#d5d9df;border-color:#d5d9df}.label-severity{position:relative;display:inline-block;width:24px;height:20px;text-align:center;vertical-align:middle}.label-severity:before{position:absolute;top:-3px;left:0;z-index:0;display:block;font-family:ZentaoIcon;font-size:18px;font-size:24px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;color:inherit;text-transform:none;content:"\e973";speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.label-severity:after{position:absolute;top:7px;left:0;z-index:1;display:block;width:24px;font-size:12px;line-height:12px;text-align:center;content:attr(data-severity)}.label-severity[data-severity],.label-severity[data-value]{color:#ccc}.label-severity[data-severity="0"],.label-severity[data-value="0"]{color:#ccc}.label-severity[data-severity="0"]:after,.label-severity[data-value="0"]:after{display:none}.label-severity[data-severity="1"],.label-severity[data-value="1"]{color:#c62828}.label-severity[data-severity="2"],.label-severity[data-value="2"]{color:#e65100}.label-severity[data-severity="3"],.label-severity[data-value="3"]{color:#ffa000}.label-severity[data-severity="4"],.label-severity[data-value="4"]{color:#fdd835}.label-severity[data-severity="5"],.label-severity[data-value="5"]{color:#8bc34a}.label-severity-custom[data-severity]{color:#d5d9df}.label-severity-custom[data-severity="1"]{color:#c62828}.label-severity-custom[data-severity="2"]{color:#e65100}.label-severity-custom[data-severity="3"]{color:#ffa000}.label-severity-custom[data-severity="4"]{color:#fdd835}.label-severity-custom[data-severity="5"]{color:#cddc39}.label-selector>.label{display:inline-block;min-width:24px;height:24px;padding:0 5px;font-size:14px;line-height:20px;text-align:center;cursor:pointer;background:0 0;border:2px solid #d5d9df;border-radius:15px}.label-selector>.label+.label{margin-left:10px}.label-selector>.label.empty{border-color:transparent}.label-selector>.label.label-severity{font-size:12px;line-height:28px;border-color:transparent}.label-selector>.label.label-severity:before{top:-2px;left:-2px}.label-selector>.label.label-severity:after{display:none}.label-selector>.label.label-severity.active{background:0 0;filter:none;-webkit-filter:none}.checkbox-primary,.radio-primary{position:relative;display:block;vertical-align:middle}.checkbox-primary.inline-block,.radio-primary.inline-block{display:inline-block}.checkbox-primary.inline-block+.inline-block,.radio-primary.inline-block+.inline-block{margin-left:15px}.checkbox-primary>input,.radio-primary>input{position:absolute;top:0;left:0;z-index:3;width:100%;height:100%;margin:0;opacity:0}.checkbox-primary>label,.radio-primary>label{display:block;height:20px;padding-left:30px;margin:0;font-weight:400;line-height:20px;cursor:pointer}.checkbox-primary>label:after,.checkbox-primary>label:before,.radio-primary>label:after,.radio-primary>label:before{position:absolute;top:1px;right:0;left:0;display:block;width:18px;height:18px;line-height:18px;text-align:center;content:' ';border-radius:3px}.checkbox-primary>label:after,.radio-primary>label:after{z-index:1;border:2px solid #eee;border-color:rgba(0,0,0,.15);-webkit-transition:.4s cubic-bezier(.175,.885,.32,1);-o-transition:.4s cubic-bezier(.175,.885,.32,1);transition:.4s cubic-bezier(.175,.885,.32,1);-webkit-transition-property:border,background-color;-o-transition-property:border,background-color;transition-property:border,background-color}.checkbox-primary>label:before,.radio-primary>label:before{top:3px;z-index:2;font-family:ZentaoIcon;font-size:18px;font-size:14px;font-style:normal;font-weight:400;font-weight:900;font-variant:normal;line-height:1;text-transform:none;content:"\e5ca";opacity:0;-webkit-transition:.2s cubic-bezier(.175,.885,.32,1);-o-transition:.2s cubic-bezier(.175,.885,.32,1);transition:.2s cubic-bezier(.175,.885,.32,1);-webkit-transition-property:opacity,-webkit-transform;-o-transition-property:opacity,-o-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform,-o-transform;-webkit-transform:scale(0);-ms-transform:scale(0);-o-transform:scale(0);transform:scale(0);speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.checkbox-primary.checked>label:after,.checkbox-primary>input:checked+label:after,.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{background-color:#00da88;border-color:#00da88;border-width:4px}.checkbox-primary.checked>label:before,.checkbox-primary>input:checked+label:before,.radio-primary.checked>label:before,.radio-primary>input:checked+label:before{color:#fff;opacity:1;-webkit-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}.checkbox-primary.focus>label:after,.checkbox-primary>input:focus+label:after,.radio-primary.focus>label:after,.radio-primary>input:focus+label:after{border-color:#00da88;-webkit-box-shadow:0 0 0 3px rgba(0,218,136,.2);box-shadow:0 0 0 3px rgba(0,218,136,.2)}.checkbox-primary:hover>label:after,.radio-primary:hover>label:after{border-color:#00da88}.checkbox-primary.checkbox-right>label,.radio-primary.checkbox-right>label{padding:0 30px 0 0}.checkbox-primary.checkbox-right>label:after,.checkbox-primary.checkbox-right>label:before,.radio-primary.checkbox-right>label:after,.radio-primary.checkbox-right>label:before{right:0;left:auto}.checkbox-primary input:disabled+label:after,.checkbox-primary.disabled>label:after,.radio-primary input:disabled+label:after,.radio-primary.disabled>label:after{background-color:#e5e5e5!important;border-color:#bbb!important}.checkbox-primary input:disabled:checked+label:after,.checkbox-primary.checked.disabled>label:after,.radio-primary input:disabled:checked+label:after,.radio-primary.checked.disabled>label:after{background-color:#bbb!important}.radio-primary>label:after{border-radius:50%}.radio-primary>label:before{top:7px;left:6px;width:6px;height:6px;content:' ';border:none;border-radius:50%}.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{background-color:transparent;border-color:#00da88;border-width:2px}.radio-primary.checked>label:before,.radio-primary>input:checked+label:before{background-color:#00da88}.radio-primary input:disabled:checked+label:after,.radio-primary.checked.disabled>label:after{background-color:transparent;border-color:#bbb}.radio-primary input:disabled:checked+label:before,.radio-primary.checked.disabled>label:before{background-color:#bbb}.panel{position:relative;margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045);box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045)}.panel-body{padding:20px}.panel-body.has-table{padding:10px}.panel-body.has-table .table{margin-bottom:0;table-layout:fixed}.panel-heading{padding:12px 48px 12px 20px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading+.panel-body{padding-top:0}.panel-title{font-size:14px;font-weight:700;line-height:20px}.panel-title .label{top:-1px}.panel-actions{position:absolute;top:0;right:0;padding:7px 8px}.panel:hover .panel-actions{z-index:10}.panel-actions>li>a{display:inline-block;min-width:30px;padding:0 5px;line-height:30px;color:#a6aab8}.panel-actions>li>a:hover{color:#3c4353;text-decoration:initial;background-color:#f1f1f1}.panel-actions .btn-icon{color:#a6aab8}.panel-actions .btn.text-primary{color:#0c64eb}.panel .empty-tip{padding:30px 10px 50px;font-size:14px;color:#838a9d;text-align:center}.progress-text-left{position:relative;margin:7px 0;margin-left:35px;overflow:visible}.progress-text-left .progress-text{position:absolute;top:-7px;left:-35px;display:block;width:35px;height:20px;padding-right:5px;line-height:20px;color:#838a9d;text-align:right}.chart-color{width:20px}.chart-color-dot{display:inline-block;width:10px;height:10px;border-radius:50%}.chart-row{margin-top:10px}.chart-row+.chart-row{padding-top:10px;border-top:1px solid #eee}.chart-wrapper{padding:10px 5px;background:#eee}.chart-wrapper>h4{margin:5px 0 10px}.table-wrapper{max-height:250px;overflow:auto}.table-wrapper .table{margin:0}.progress-pie{position:relative}.progress-pie .progress-info{position:absolute;top:0;left:0;width:100%;height:100%;padding-top:25px;text-align:center}.progress-pie .progress-info>small{display:block;line-height:14px;color:#a6aab8}.progress-pie .progress-info>strong{display:block;font-size:36px;line-height:40px}.progress-pie .progress-info>strong>small{font-size:20px}.progress-pie-120 .progress-info{padding-top:30px}.progress-pie-120 .progress-info>small{line-height:18px}.progress-pie-50 .progress-info{padding-top:4px}.progress-pie-50 .progress-info>strong{font-size:20px;font-weight:400}.progress-pie-50 .progress-info>strong>small{font-size:14px}.progress-pie[data-value="100"] .progress-info>strong{-webkit-transform:scale(.7);-ms-transform:scale(.7);-o-transform:scale(.7);transform:scale(.7)}.status-bars{display:table;width:100%;height:140px;padding:5px;padding-top:50px;margin:0;overflow:hidden}.status-bars>li{position:relative;display:table-cell;text-align:center;vertical-align:bottom}.status-bars .bar{position:absolute;bottom:20px;left:50%;display:block;width:10px;margin-left:-5px;background:#0c64eb;border-radius:5px 5px 0 0}.status-bars .bar:after{position:absolute;right:-50px;bottom:0;left:-50px;display:block;height:1px;content:' ';background:#eee}.status-bars .title{font-size:12px;font-weight:400;color:#a6a8b6}.status-bars .value{position:relative;top:-20px;left:-20px;display:inline-block;width:50px;font-size:16px;font-weight:700;text-align:center}.status-bars-h{display:block;padding-right:50px;padding-left:60px;list-style:none}.status-bars-h>li{position:relative;height:40px;border-left:1px solid #eee}.status-bars-h .bar{position:relative;top:15px;display:block;height:10px;line-height:20px;background:#0c64eb;border-radius:0 5px 5px 0}.status-bars-h .title{position:absolute;top:-5px;left:-60px;width:60px;padding-right:10px;font-size:12px;color:#a6a8b6;text-align:right}.status-bars-h .value{position:absolute;top:-5px;right:-50px;display:block;width:40px;font-size:14px;font-weight:700;text-align:left;white-space:nowrap}.messager{border-radius:4px;-webkit-box-shadow:0 4px 16px rgba(0,0,0,.2),0 2px 8px rgba(0,0,0,.1);box-shadow:0 4px 16px rgba(0,0,0,.2),0 2px 8px rgba(0,0,0,.1)}.messager-content{padding:18px 20px;font-size:18px;line-height:30px}.messager-content>.icon{font-size:28px;line-height:30px}.messager-actions{vertical-align:middle}.messagger-zt{color:#3c4353;background-color:#fff}.messagger-zt .messager-content>.icon{color:#0c64eb}.messagger-zt .messager-actions>.action{color:#838a9d}.messagger-zt.messager-success .messager-content>.icon{color:#00da88}.messagger-zt.messager-danger .messager-content>.icon{color:#ff5d5d}.messagger-zt.messager-warning .messager-content>.icon{color:#ff9800}.messagger-zt.messager-info .messager-content>.icon{color:#2196f3}.tree{padding-left:0;overflow:hidden}.tree ul{position:relative;display:none;padding-left:0}.tree li{position:relative;padding:2px 0 2px 15px;list-style:none}.tree li.heading{padding-left:5px;color:#3c4353}.tree li>a{display:block;max-width:90%;padding:2px 6px;color:#3c4353;word-break:break-all}.tree li>a:hover{color:#3c4353}.tree li>a.tree-toggle:hover{background:0 0}.tree li.active>a{position:relative;font-weight:700;color:#0c64eb}.tree li>.list-toggle{position:absolute;top:1px;left:1px;z-index:10;width:20px;font-size:14px;line-height:22px;color:#cbd0db;text-align:center;cursor:pointer;-webkit-transition:all .2s;-o-transition:all .2s;transition:all .2s}.tree li>.list-toggle:before{content:"\f0da"}.tree li>.list-toggle:active,.tree li>.list-toggle:hover{color:#0c64eb}.tree li.has-active-item>.list-toggle{color:#3c4353}.tree li.has-list.open>ul{display:block}.tree li.has-list.open>.list-toggle{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.tree li.has-list.open:before{position:absolute;top:16px;bottom:-5px;left:10px;display:block;content:' ';border-left:1px solid #d8d8d8}.tree-actions{display:inline-block;margin-left:5px;vertical-align:middle}.tree-actions a{display:inline-block;margin-left:5px;font-size:13px;opacity:.6}.tree-actions a:hover{opacity:1}.tree li>.module-name{color:#3c4353;vertical-align:middle}.tree li>.module-name:hover{background-color:#f0f2f5}.tree li>.module-name:hover>a{color:#3c4353}.treemap-node-fold-icon:before{position:relative;left:-4px;min-width:18px}.dropdown-menu{padding:5px 0;border-color:rgba(0,0,0,.1)}.dropdown-menu>li{padding:0 10px}.dropdown-menu>li>a{padding:2px 10px;margin:5px 0;border-radius:3px}.dropdown-menu>li>a>.icon{position:relative;left:-5px;opacity:.5}.dropdown-menu>li.active>a,.dropdown-menu>li.selected>a{position:relative;color:#fff;background-color:#16a8f8}.dropdown-menu>li.selected>a:after{position:absolute;top:2px;right:4px;display:block;font-family:ZentaoIcon;font-size:18px;font-size:14px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;line-height:20px;text-transform:none;content:"\e5ca";speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.dropdown-menu>li.divider{margin:10px}.dropdown-submenu>a:after{margin-right:-5px}.dropdown-submenu>.dropdown-menu.pull-left{margin-left:-1px}.dropdown-submenu:focus>a,.dropdown-submenu:hover>a{color:#3c4353;background-color:#e9f2fb}.dropdown-submenu:hover>a:after{border-left-color:#0c64eb}.dropdown-submenu>a:hover:after{border-left-color:#fff}.pager .btn{padding:3px 10px}.pager .btn .caret{opacity:.7}.pager>li>.pager-label{padding:2px;line-height:20px}.pager>li>.pager-item{min-width:20px;padding:1px;margin:2px 0;font-size:16px;line-height:20px;text-align:center;background:0 0;border-color:transparent}.pager>li>.pager-item:hover{background-color:rgba(0,0,0,.1)}.pager>li>.pager-item>.icon{position:relative;top:-1px}.pager>li>.btn:hover,.pager>li>a:hover{background:rgba(0,0,0,.1)}.pager>li.disabled>a.pager-item{background:0 0;border-color:transparent;opacity:.5}.pager>li.active>a{background-color:#16a8f8}.pager>li .btn-group .btn{padding:1px;margin:2px 0;border-radius:4px}.pager .dropdown-menu{width:200px}.pager .dropdown-menu>li{float:left;width:33.333333%}.modal-dialog{width:900px;max-width:1360px;border:none;border-radius:0;-webkit-box-shadow:0 0 20px 0 rgba(0,0,0,.25);box-shadow:0 0 20px 0 rgba(0,0,0,.25)}.modal-dialog.modal-md{width:700px}.modal-dialog.modal-xs{width:400px}.modal-dialog.modal-sm{width:500px}.modal-dialog.modal-lg{width:1200px}.modal-dialog.modal-fullscreen{position:fixed;max-width:initial}.modal-header{padding:20px 0;margin:0 20px}.modal-header>.close{color:#838a9d;text-shadow:0 1px 0 rgba(255,255,255,.85);opacity:1}.modal-header>.close:hover{color:#222}.modal-footer{padding:20px 0;margin:0 20px}.modal-title{font-size:16px;font-weight:400;line-height:20px}.modal-actions{position:absolute;top:16px;right:16px}.modal-actions .divider{position:relative;top:5px;display:inline-block;width:0;height:20px;margin:0 10px;border-left:#eee 1px solid}.modal-actions>.dropdown{display:inline-block}.modal-body{padding:20px}.modal-iframe .modal-body>iframe{border-radius:0}.modal.fade .modal-dialog{-webkit-transform:translate(0,-3%);-ms-transform:translate(0,-3%);-o-transform:translate(0,-3%);transform:translate(0,-3%)}.modal.fade.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-simple .modal-footer{padding-top:0;border-top:none}.modal-iframe .modal-header{position:relative;z-index:10;min-height:0;padding:0;border:none}.modal-iframe .modal-title{display:none}.modal-iframe .modal-header .close{position:absolute;top:12px;right:10px;font-size:32px;font-weight:200}.modal-iframe .modal-dialog{overflow:hidden}.modal-inverse .modal-header>.close{color:rgba(255,255,255,.7);text-shadow:none}.modal-inverse .modal-header>.close:hover{color:#fff}.modal-scroll-inside>.modal-dialog{max-height:100%}.hide-modal-close .modal-iframe .modal-header .close{display:none}.tile{text-align:center}.tile-title{line-height:20px;color:#3c4353}.tile-amount{font-size:32px;font-weight:700;line-height:56px}.timeline>li{position:relative;list-style:none}.timeline>li:before,.timeline>li>a:after,.timeline>li>div:after{position:absolute;left:-20px;display:block;width:15px;height:15px;content:' ';border-radius:50%}.timeline>li:before{top:12px;left:-16px;z-index:3;width:7px;height:7px;background-color:#cbd0db;border:none;border:1px solid #cbd0db}.timeline>li>a:after,.timeline>li>div:after{top:11px;left:-17px;z-index:3;width:9px;height:9px;background-color:#0c64eb;border-radius:50%;opacity:0}.timeline>li+li:after{position:absolute;top:-12px;bottom:20px;left:-13px;z-index:1;display:block;content:' ';border-left:1px solid #eee}.timeline>li.active>a:after,.timeline>li.active>div:after{opacity:1}.timeline>li.active:before{top:8px;left:-20px;width:15px;height:15px;background-color:rgba(12,100,235,.2);border:none}.timeline>li>a,.timeline>li>div{display:block;padding:5px;line-height:20px}.timeline>li.active>a{color:#3c4353}.timeline-tag{position:absolute;top:5px;left:-115px;font-size:12px}.timeline-tag-left{padding-left:115px}.timeline-sm{font-size:12px}.timeline-sm>li:before,.timeline-sm>li>a:after,.timeline-sm>li>div:after{top:10px;left:-20px;width:11px;height:11px}.timeline-sm>li.active:before,.timeline-sm>li:before{top:10px;left:-18px;width:11px;height:11px;background:0 0;border:1px solid #eee}.timeline-sm>li>a,.timeline-sm>li>div{line-height:20px}.timeline-sm>li>a:after,.timeline-sm>li>div:after{top:13px;left:-15px;width:5px;height:5px}.form-control{-webkit-box-shadow:none;box-shadow:none}.form-horizontal .form-group>label{padding-right:0}.form-actions{margin-top:20px;margin-bottom:0}.form-actions .btn{margin-right:10px}form label{font-weight:400;color:#3c4353}.form-group .btn+.btn{margin-left:5px}.table-form{margin-bottom:0;table-layout:fixed}.table-form>thead>tr>th.required:after{position:relative;top:3px;right:auto;left:4px;display:inline-block;vertical-align:middle}.table-form>tbody>tr>td,.table-form>tbody>tr>th,.table-form>tfoot>tr>td,.table-form>thead>tr>th{padding:7px;vertical-align:middle;border-bottom:none}.table-form>tfoot>tr>td{padding:20px 7px 10px}.table-form>tbody>tr>th{width:100px;font-weight:700;text-align:right}.table-form .input-group{width:100%}.table-form textarea.form-control{height:32px}.chosen-container-single .chosen-single{position:relative}.chosen-container-single .chosen-single>span{height:20px;line-height:20px;white-space:normal}.chosen-container-single .chosen-single div b{position:relative;top:1px;color:#cbd0db}.chosen-container-single .chosen-search:before{top:8px;right:15px}.chosen-container-multi .chosen-choices li.search-choice{font-size:13px;background:#eee;border-color:#cbd0db;-webkit-box-shadow:none;box-shadow:none}.chosen-container-single .chosen-search input[type=text]{height:30px;padding:3px 25px 3px 5px}.chosen-container-single .chosen-search{padding:3px 10px 0}.chosen-container-single .chosen-single{overflow:visible}.chosen-container-single .chosen-single>.chosen-search{top:-2px;right:-1px;bottom:-1px;left:-1px;display:none;height:auto;padding:0;opacity:0}.chosen-container-single .chosen-single>.chosen-search>input{height:31px;padding:5px 26px 5px 8px;font-size:inherit;line-height:20px}.chosen-container-single .chosen-single>.chosen-search:before{top:7px;right:8px}.chosen-container .chosen-results{padding:10px}.chosen-container .chosen-results>li{border-radius:4px}.chosen-container .chosen-results li.highlighted em{color:#fff}.table-responsive .chosen-container .chosen-results{max-height:200px}.datetimepicker{padding:10px}.datetimepicker td.day.today{background-color:#f77}.datetimepicker td.day.active{background-color:#16a8f8}.datetimepicker tfoot th,.datetimepicker thead th{color:#838a9d}.input-control .colorpicker{top:0;z-index:auto;opacity:1}.input-control .colorpicker .btn{padding:5px}.input-control .input-control-icon-right.btn{top:0}.colorpicker .dropdown-menu{min-width:232px;padding:5px 10px 10px 10px}.colorpicker .dropdown-menu>li{display:block;float:left;padding:5px}.colorpicker .dropdown-menu>li.heading{width:100%;margin-bottom:5px;font-size:16px;font-weight:700;text-align:left}.colorpicker .dropdown-menu>li.heading>.icon-close{position:relative;top:4px;float:right;cursor:pointer;opacity:.6}.colorpicker .dropdown-menu>li>a{position:relative;display:block;width:100%;height:100%;padding:0;margin:0;font-family:ZentaoIcon;font-size:18px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;text-align:center;text-transform:none;border:1px solid transparent;border-radius:50%;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.colorpicker .dropdown-menu>li>a:before{position:absolute;top:0;display:block;width:100%;height:20px;line-height:18px}.colorpicker .dropdown-menu>li>a:hover{-webkit-box-shadow:0 1px 4px rgba(0,0,0,.25);box-shadow:0 1px 4px rgba(0,0,0,.25)}.colorpicker .dropdown-menu>li>a.active:before{font-size:14px;content:"\e5ca"}.colorpicker .dropdown-menu>li>a.empty{color:#666;background:#fff}.colorpicker .dropdown-menu>li>a.empty:before{content:"\e90d"}.colorpicker .btn{position:relative}.colorpicker .btn .color-bar{position:absolute;right:5px;bottom:3px;left:5px;height:3px}.colorpicker .btn .color-bar[style*='background: ']+.ic{position:relative;top:-2px}.colorpicker .btn .ic{color:#cbd0db}.colorpicker .btn:hover .ic{color:#838a9d}.input-group .colorpicker{z-index:3}.input-group .chosen-container{display:table-cell}.input-group-addon{border-right-width:0;border-left-width:0}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin:0}.input-group-cell{display:table-cell;width:1%;padding:0 12px;white-space:nowrap;vertical-align:middle}.ke-container{border-color:#dcdcdc!important;border-radius:2px!important}.ke-container.focus{border-color:#0c64eb!important}.ke-toolbar{border-color:#dcdcdc!important}.required:after{top:6px;right:-10px;font-size:20px}td.required:after{top:12px;right:-5px}.input-group>.chosen-container.required:after,.input-group>.input-control.required:after{top:1px;right:1px;z-index:2}.input-group.required .required:after{display:none}.file-input{position:relative}.file-input .input-group{width:auto}.file-input .input-group>.input-group-cell:first-child{padding-right:0;padding-left:7px}.file-input input[type=file]{position:absolute;width:0;height:0;opacity:0}.file-input .file-title{display:inline-block;max-width:400px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:middle}.file-input .file-editbox{min-width:200px;max-width:100%}.file-input .file-size{display:inline-block;vertical-align:middle}.edit .file-input-empty,.file-input-edit,.file-input-normal,.normal .file-input-empty{display:none}.edit .file-input-edit,.normal .file-input-normal{display:block}.edit .file-input-edit.input-group,.normal .file-input-normal.input-group{display:table}.edit .file-input-normal{display:none!important}.file-input-normal>.input-group-btn{width:auto}.input-group .chosen-container-active .chosen-choices{border-color:#0c64eb!important}.input-group .chosen-container{min-width:100px}.input-group .input-group-btn .btn>.icon{line-height:17px}.os-mac select.form-control{-webkit-appearance:none;background-image:url(data:image/gif;base64,R0lGODlhCQAFAIAAAMvQ2////yH5BAEAAAEALAAAAAAJAAUAAAIKhH+BGYoNGWxgFgA7);background-image:url(data:image/gif;base64,R0lGODlhBwAEAIAAAMvQ2////yH5BAEAAAEALAAAAAAHAAQAAAIIhA+BGWoNWSgAOw==);background-repeat:no-repeat;background-position:right 5px top 12px;-moz-appearance:none}input::-webkit-contacts-auto-fill-button{position:absolute;right:0;display:none!important;pointer-events:none;visibility:hidden}.chosen-choices.has-error,.chosen-single.has-error,.form-control.has-error{border-color:#ff5d5d!important;-webkit-box-shadow:0 0 6px #ffc3c3!important;box-shadow:0 0 6px #ffc3c3!important}.popover-success.popover-form-result{font-weight:700;color:#fff;background:#00da88}.popover-success.popover-form-result.popover.right .arrow:after{border-right-color:#00da88}#mainHeader{height:50px;color:#fff;background:#1183fb -webkit-gradient(linear,right top,left top,from(#0a48d1),to(#1183fb));background:#1183fb -webkit-linear-gradient(right,#0a48d1 0,#1183fb 100%);background:#1183fb -o-linear-gradient(right,#0a48d1 0,#1183fb 100%);background:#1183fb linear-gradient(-90deg,#0a48d1 0,#1183fb 100%);background-color:#1183fb;border-top-color:#0c64eb;border-bottom-color:#e9f2fb}#mainHeader>.container{min-width:1200px;padding:0}#heading{position:absolute;top:10px;left:20px}@media (min-width:1400px){#heading{left:40px}}#heading h1{float:left;max-width:250px;margin:0;overflow:hidden;font-size:20px;font-weight:400;line-height:30px;text-overflow:ellipsis;white-space:nowrap}#heading h1 a{color:inherit;text-decoration:inherit}#heading h1.long-name{position:relative;top:-5px;display:table-cell;font-size:16px;line-height:20px;word-break:break-all;white-space:normal}#heading .btn{display:block;float:left;height:20px;padding:1px 5px;margin:0;margin:5px 0 0 10px;font-size:12px;font-weight:lighter;line-height:18px;background-color:rgba(255,255,255,.2);border:none}#heading .btn:hover{background-color:rgba(0,0,0,.1)}#navbar{margin:0 auto;font-size:15px;text-align:center}#navbar .nav{display:inline-block}#navbar .nav>li>a{padding:10px 15px;line-height:30px;color:#fff;border-radius:0;opacity:.9}@media (max-width:992px){#navbar .nav>li>a{padding:10px}}#navbar .nav>li>a:focus,#navbar .nav>li>a:hover{background:rgba(0,0,0,.15);opacity:1}#navbar .nav>li.active>a{font-weight:700;background:rgba(0,0,0,.1);opacity:1}#navbar .nav>li.divider{display:block;width:2px;height:20px;margin:15px;background:rgba(255,255,255,.4)}#navbar .nav>li.divider:last-child{display:none}#toolbar{position:absolute;top:12px;right:20px;font-size:12px;color:#fff}@media (min-width:1400px){#toolbar{right:40px}}#extraNav{text-align:right}#extraNav>li{display:inline-block;float:none;text-align:left}#extraNav>li>a{display:block;padding:0;color:#fff;opacity:.75}#extraNav>li>a:hover{text-decoration:unset;background-color:rgba(0,0,0,.1);opacity:1}#extraNav>li.open>a{background-color:rgba(0,0,0,.1)}#extraNav>li+li{margin-left:10px}#searchbox{position:relative;float:left;width:150px}#searchbox .input-group-btn .btn{position:relative;padding:1px 4px;font-size:12px;line-height:20px;color:#fff;background-color:rgba(255,255,255,.15);border-right:none;border-radius:2px}#searchbox .input-group-btn .btn:after{position:absolute;top:3px;right:0;bottom:3px;display:block;width:1px;content:' ';background-color:rgba(255,255,255,.15)}#searchbox .input-group-btn .btn:hover{background-color:rgba(255,255,255,.25)}#searchGo{position:absolute;top:0;right:-1px;z-index:9;min-width:24px;height:24px;padding:2px 3px;font-size:12px;line-height:20px;color:#fff;background-color:#6a9afd;border-radius:2px}#searchGo:hover{color:#fff!important;background-color:#0c64eb}#searchInput{height:24px;padding:2px 30px 2px 5px;color:#fff;text-align:left;background:rgba(255,255,255,.15);border-color:transparent;border-radius:0 12px 12px 0;-webkit-transition:background .2s,border .2s;-o-transition:background .2s,border .2s;transition:background .2s,border .2s}#searchInput:hover{background:rgba(255,255,255,.25)}#searchInput:focus{color:#333;background:#fff}#searchInput::-webkit-input-placeholder{font-size:12px;color:#fff;color:rgba(255,255,255,.5)}#searchInput::-moz-placeholder{font-size:12px;color:#fff;color:rgba(255,255,255,.5)}#searchInput::placeholder{font-size:12px;color:#fff;color:rgba(255,255,255,.5)}#searchInput:focus::-webkit-input-placeholder{color:#838a9d}#searchInput:focus::-moz-placeholder{color:#838a9d}#searchInput:focus::placeholder{color:#838a9d}#searchTypeMenu{min-width:220px}#searchTypeMenu>li{float:left;width:50%}#searchTypeMenu>li>a{margin:4px 0}#userNav{float:right;margin:0 -6px 0 10px}#userNav .avatar{display:inline-block;vertical-align:middle}#userNav>li>a{padding:2px 6px;margin-left:3px;line-height:20px;color:#fff;opacity:.9}#userNav>li>a .user-name{max-width:100px;overflow:hidden;font-size:15px;text-overflow:ellipsis;white-space:nowrap}#userNav>li>a:hover{background-color:rgba(0,0,0,.1);opacity:1}#userNav>li>a span{display:inline-block;vertical-align:middle}#userNav>li.open>a{background-color:rgba(0,0,0,.1)}#userNav>li.has-new-items>a{position:relative}#userNav>li.has-new-items>a:before{position:absolute;top:3px;right:-1px;display:block;width:4px;height:4px;content:' ';background-color:#ff5d5d;border-radius:50%}#userNav .dropdown-menu{min-width:150px}#userNav .dropdown-menu>li>a>.icon{position:absolute;top:10px;right:5px;display:block;width:20px;height:20px;line-height:20px;text-align:center}#userNav .user-profile-item>a{position:relative;padding-left:45px}#userNav .user-profile-item .avatar{position:absolute;top:6px;left:5px}#userNav .user-profile-name{font-size:16px}#userNav .user-profile-role{font-size:12px;color:#a9abb8}#userNav .no-role .user-profile-role{display:none}#userNav .no-role .user-profile-name{line-height:40px}#subHeader{min-height:50px;background:#fff}#subHeader>.container{padding:0 20px}@media (min-width:1400px){#subHeader>.container{padding:0 40px}}#pageNav{position:absolute;top:8px;left:0;left:20px}@media (min-width:1400px){#pageNav{left:40px}}#subNavbar{margin-top:5px;font-size:14px;text-align:center}#subNavbar .nav{display:inline-block}#subNavbar .nav>li>a{padding:8px 12px;line-height:24px;color:#3c4353}#subNavbar .nav>li>a:hover{color:#3c4353;background-color:rgba(0,0,0,.075)}#subNavbar .nav>li.active>a{font-weight:700;color:#0c64eb}#subNavbar .nav>li.divider{display:block;width:2px;height:20px;margin:9px 5px;background-color:rgba(0,0,0,.05)}#subNavbar .dropdown-menu{text-align:left}#pageActions{position:absolute;top:9px;right:20px}@media (min-width:1400px){#pageActions{right:40px}}.cell{padding:10px;background-color:#fff;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045);box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045)}.cell+.cell{margin-top:10px}.cell>.panel{margin:0;-webkit-box-shadow:none;box-shadow:none}.cell>.panel>.panel-heading{padding:5px 5px 10px}.cell>.panel>.panel-heading .panel-actions{padding:0}.cell>.panel>.panel-body{padding:5px}.cell>.table{margin:0}#main{padding:20px 0}#main>.container{padding:0 20px}@media (min-width:1400px){#main>.container{padding:0 40px}}#header,#header+#main{min-width:1200px}#mainMenu{margin:-10px 0 8px}.main-content{padding:20px;background-color:#fff;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045);box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045)}@media (min-width:1400px){.main-content>.center-block{max-width:1350px;padding:20px;border:1px solid #eee}.main-content>.center-block .main-header{background-color:#f1f1f1}}.main-content>h2{margin:0 0 20px}.main-content .cell{-webkit-box-shadow:none;box-shadow:none}.main-header{padding:5px 20px;border-bottom:1px solid #eee}.main-header:after,.main-header:before{display:table;content:" "}.main-header:after{clear:both}.main-header>h2{display:block;float:left;margin:0 10px 0 0;font-size:14px;line-height:34px}.main-header>h2 .label-id{margin-right:5px}.main-header>h2 small{font-size:14px;font-weight:400}.main-content .main-header{margin:-20px -20px 10px}.main-header .label{top:-1px}.main-row{display:table;width:100%;table-layout:fixed}.main-row>*{display:table-cell;vertical-align:top}@media (max-width:720px){.main-row{display:block}.main-row>*{display:block;width:100%}.main-row .side-col{width:100%;padding:0}.main-row .main-col+.side-col,.main-row .side-col+.main-col{margin-top:10px}}.main-row.hide-side .side-col{display:none}@media (min-width:720px){.main-content>.center-block .main-form{padding-right:20px}}#main .side-col .tabs{padding:5px}#main .side-col .nav-tabs{margin:0 5px 5px 5px;border-bottom:1px solid #ddd}#main .side-col .nav-tabs>li{margin:0}#main .side-col .nav-tabs>li+li{margin-left:10px}#main .side-col .nav-tabs>li>a{position:relative;padding:8px 5px;border:none;border-radius:2px!important}#main .side-col .nav-tabs>li.active>a{font-weight:700;color:#3c4353}#main .side-col .nav-tabs>li.active>a:before{position:absolute;right:0;bottom:-1px;left:0;display:block;height:2px;content:' ';background:#0c64eb}#main .side-col .tab-content .tab-pane table{border:none}.main-actions .btn-toolbar{display:inline-block;padding:4px 15px;color:#fff;pointer-events:auto;background:#717171;background-color:rgba(90,90,90,.85);border-radius:4px}.main-actions .btn-toolbar .divider{margin-right:15px;margin-left:15px;border-color:rgba(255,255,255,.1)}.main-actions .btn-toolbar .btn{padding-right:10px;padding-left:10px;margin-right:0;color:#fff;background-color:transparent;border:none}.main-actions .btn-toolbar .btn+.btn{margin-left:10px}.main-actions .btn-toolbar .btn:focus,.main-actions .btn-toolbar .btn:hover{background-color:rgba(255,255,255,.2)}.main-actions .btn-toolbar .btn.btn-icon{min-width:32px;padding-right:0;padding-left:0}.main-actions .btn-toolbar .btn+.btn-group{margin-right:0;margin-left:10px}#mainContent .main-col>.main-actions{padding:30px 0 0 0;text-align:center}#mainContent .main-col>.main-actions>.btn-toolbar{visibility:visible;opacity:1;-webkit-transition:opacity .2s;-o-transition:opacity .2s;transition:opacity .2s}#mainActions{position:fixed;top:0;right:0;bottom:0;left:0;text-align:center;pointer-events:none}#mainActions .btn-toolbar{position:relative;top:-90px}#mainActions .dropdown-menu{text-align:left}#mainActions>.container{height:100%}.main-actions-holder{display:none}.main-actions-fixed .main-actions-holder{display:block}.main-actions-fixed #mainContent .main-col>.main-actions{position:fixed;bottom:50px}.main-actions-fixed.body-modal #mainContent .main-col>.main-actions{bottom:20px}#nextPage,#prevPage{position:absolute;top:50%;left:-10px;width:40px;height:60px;padding:10px 0;margin-top:-30px;line-height:40px;color:#fff;text-align:center;pointer-events:auto;background:#717171;background-color:rgba(90,90,90,.85);-webkit-box-shadow:0 2px 15px 2px rgba(0,0,0,.05);box-shadow:0 2px 15px 2px rgba(0,0,0,.05)}#nextPage:hover,#prevPage:hover{-webkit-box-shadow:0 2px 15px 2px rgba(0,0,0,.15);box-shadow:0 2px 15px 2px rgba(0,0,0,.15)}#nextPage>.icon,#prevPage>.icon{display:block;font-size:36px;line-height:36px}#nextPage{right:-10px;left:auto}@media (max-width:1800px){#prevPage{left:-3px}#nextPage{right:-3px}}#sidebarHeader{position:relative;float:left;width:180px;height:34px;padding-right:20px;margin-right:20px;background:#fff;border-left:4px solid #0c64eb;border-radius:4px 2px 2px 4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045);box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045)}#sidebarHeader:after{position:absolute;top:-1px;right:-8px;display:block;width:0;height:0;content:' ';border-color:transparent transparent transparent #fff;border-style:solid;border-width:18px 0 18px 8px}#sidebarHeader .title{padding:0 5px;overflow:hidden;font-size:14px;font-weight:700;line-height:32px;color:#0c64eb;text-align:center;text-overflow:ellipsis;white-space:nowrap}#sidebarHeader .title>a{position:absolute;top:0;right:0;width:20px;opacity:.5}#sidebarHeader .title>a:hover{opacity:1}#sidebar{position:relative;-webkit-transition:width .2s,padding .2s;-o-transition:width .2s,padding .2s;transition:width .2s,padding .2s}#sidebar>.sidebar-toggle{position:absolute;top:0;right:5px;bottom:0;width:10px;cursor:pointer;background:0 0;border-radius:5px;-webkit-transition:background-color .2s;-o-transition:background-color .2s;transition:background-color .2s}#sidebar>.sidebar-toggle>.icon{position:absolute;top:50%;left:-1px;width:12px;height:30px;margin-top:-10px;line-height:30px;color:#fff;text-align:center;background:#79cdfb;border-radius:6px}#sidebar>.sidebar-toggle>.icon:before{position:relative;left:-3px}#sidebar>.sidebar-toggle:before{position:absolute;top:0;right:-5px;bottom:0;left:-5px;display:block;content:' '}#sidebar>.sidebar-toggle:hover{background:rgba(0,0,0,.075)}#sidebar>.cell{position:relative;left:0;width:180px;-webkit-transition:left .2s;-o-transition:left .2s;transition:left .2s}#sidebar.no-animate>.cell{display:none;-webkit-transition:none;-o-transition:none;transition:none}.hide-sidebar #sidebar>.cell{position:absolute;left:-200px}.hide-sidebar #sidebar{position:relative;width:0;padding:0}.hide-sidebar #sidebar>.sidebar-toggle>.icon:before{content:"\e315"}@media (max-width:720px){#sidebar>.cell{width:100%}}#queryBox{max-height:0;padding:0;overflow:hidden;-webkit-transition:cubic-bezier(.175,.885,.32,1) .2s;-o-transition:cubic-bezier(.175,.885,.32,1) .2s;transition:cubic-bezier(.175,.885,.32,1) .2s;-webkit-transition-property:padding,max-height,margin;-o-transition-property:padding,max-height,margin;transition-property:padding,max-height,margin}#queryBox>form{visibility:hidden;-webkit-transition:visibility .2s .2s;-o-transition:visibility .2s .2s;transition:visibility .2s .2s}#queryBox.loading{height:50px}#queryBox.show{min-height:110px;max-height:300px;margin-bottom:10px;overflow:visible}#queryBox.show>form{visibility:visible}#queryBox.divider{border-bottom:1px solid #eee}#main .querybox-toggle.querybox-opened{position:relative;color:#0c64eb;background:0 0;border:none}#main .querybox-toggle.querybox-opened:before{position:absolute;bottom:-14px;left:50%;width:0;height:0;content:' ';border-color:transparent transparent #fff transparent;border-style:solid;border-width:0 10px 10px 10px}#contentNav{padding:5px;background:#fff;border-bottom:1px solid #eee}#contentNav .nav>li>a{position:relative;padding:6px 10px;color:#838a9d}#contentNav .nav>li.active>a{font-weight:700;color:#0c64eb}#contentNav .nav>li.active>a:before{position:absolute;right:10px;bottom:3px;left:10px;display:block;height:2px;content:' ';background:#0c64eb}.body-modal{padding-bottom:0}.body-modal #main,.body-modal .container{min-width:0!important}.body-modal #main{padding:0}.body-modal .main-header{position:fixed;top:0;right:20px;left:20px;z-index:100;padding:13px 48px 13px 0;margin:0;background:#fff}.body-modal #mainContent{padding-top:70px}.body-modal .main-header>h2{max-width:100%;overflow:hidden;font-size:14px;text-overflow:ellipsis;white-space:nowrap}.body-modal .cell,.body-modal .main-content{-webkit-box-shadow:none;box-shadow:none}.body-modal #mainMenu{position:fixed;top:0;right:0;left:0;z-index:100;padding:12px 60px 12px 10px;margin:0;background:#fff}.body-modal #mainMenu>.btn-toolbar.pull-left.divider{display:none}.body-modal #mainMenu>.btn-toolbar{max-width:100%;margin-left:20px}.body-modal #mainMenu>.btn-toolbar>.divider:first-child{display:none}.body-modal #mainMenu>.btn-toolbar .page-title{max-width:100%;margin-left:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.body-modal #mainMenu+#mainContent.main-row{padding:60px 10px 0}.body-modal #mainMenu+#mainContent.main-row .cell{border:1px solid #efefef;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045);box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045)}.body-modal #mainActions{top:auto}.body-modal #mainActions .btn-toolbar{top:auto;bottom:10px}.body-modal.m-bug-view,.body-modal.m-story-view,.body-modal.m-task-view,.body-modal.m-testcase-view,.body-modal.m-testtask-view,.body-modal.m-todo-view{padding-bottom:20px;border-radius:3px}#tabsNav{position:relative}#tabsNav .tab-pane>.actions{position:absolute;top:-8px;right:0}#tabsNav .tab-pane>.cell,#tabsNav .tab-pane>.main-table{padding:0;border:1px solid #cbd0db;border-top:none;border-radius:0 0 4px 4px}#tabsNav .tab-pane>.cell .detail-title{padding-left:5px}#helpContent{position:fixed;top:50px;right:0;bottom:40px;left:0;display:none;background-color:#fff}#helpContent .load-error{display:none;padding:20px}#helpContent .show-error .load-error{display:block}.show-help-tab{overflow:hidden}.show-help-tab #main{display:none}.show-help-tab #helpContent{display:block}#navbar .nav>li>a.open-help-tab>.icon-close{display:none;opacity:.5}#navbar .nav>li>a.open-help-tab>.icon-close:hover{background:rgba(0,0,0,.1);opacity:1}.show-help-tab #navbar .nav>li>a.open-help-tab>.icon-close{display:inline}.text-middle td,.text-middle th{vertical-align:middle}.text-center td,.text-center th{text-align:center}.c-sm{width:40px}.c-id{width:90px}.c-id-sm{width:70px}.c-id-xs{width:55px}.c-date{width:100px}.c-num,.c-pri,.c-type{width:80px;overflow:hidden}.c-begin,.c-end,.c-time{width:65px}.c-hours{width:60px}.c-actions-1{width:50px}.c-actions-2{width:75px}.c-actions-3{width:102px}.c-actions,.c-actions-4{width:128px}.c-actions-5{width:155px}.c-actions-6{width:180px}.c-product,.c-project{width:180px}.c-plan{width:130px}.c-datetime{width:120px}.c-stage,.c-status,.c-user{width:80px}.c-side{width:200px;border-right:10px solid #efefef}.c-assign,.c-assignedTo,.c-openedBy{width:130px}.c-progress{width:155px}.c-assign,.c-assignedTo,.c-openedBy,.c-product,.c-project,.c-status,.c-url,.c-user{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}td.c-name,td.c-title{overflow:hidden;text-align:left!important;text-overflow:ellipsis;white-space:nowrap}td.c-actions{position:relative;padding-top:0;padding-bottom:0;overflow:hidden;white-space:nowrap;vertical-align:middle}td.c-actions .btn{display:inline-block;width:26px;padding:2px;overflow:hidden;line-height:20px;color:#16a8f8;background:0 0;border-color:transparent}td.c-actions .btn .icon{font-size:18px}td.c-actions .btn:hover{color:#0c64eb;background-color:#d3e5f7}td.c-actions .btn+.btn{margin-left:-4px}td.c-actions .btn-link{color:#3c4353;background:0 0}td.c-actions .btn-link:hover{color:#0c64eb;background:#e9f2fb}td.c-actions .more{position:absolute;top:50%;right:100%;display:none;padding-right:4px;padding-left:20px;margin-top:-15px;margin-right:-6px;white-space:nowrap;background-color:#fafafa;-webkit-transition:opacity .3s,margin.3s;-o-transition:opacity .3s,margin.3s;transition:opacity .3s,margin.3s}tr:hover td.c-actions .more{display:block}td:hover+td.c-actions>.more{margin-right:-15px;pointer-events:none;opacity:.15}tr[data-url]{cursor:pointer}.table tbody>tr>td,.table thead>tr>th{vertical-align:middle}.table tbody>tr>td.has-btn,.table thead>tr>th.has-btn{padding-top:1px;padding-bottom:1px;overflow:visible}.table tbody>tr>td .progress,.table thead>tr>th .progress{height:6px}.table .em,.table em{color:#3c4353}.table .divider{border-bottom:10px solid #efefef}.table .divider-top{border-top:10px solid #efefef}.table .btn-icon-left{max-width:100%;padding-left:20px;overflow:hidden;line-height:18px;text-align:left;text-overflow:ellipsis;background:0 0;border-color:#eaf3fc}.table .btn-icon-left>.icon{width:20px;font-size:14px;background:0 0!important;opacity:0}.table .btn-icon-left.btn-sm{height:26px;font-size:13px}.table .btn-icon-left:active,.table .btn-icon-left:focus,.table .btn-icon-left:hover{border-color:rgba(0,0,0,.2)}.table .btn-icon-left:active>.icon,.table .btn-icon-left:focus>.icon,.table .btn-icon-left:hover>.icon{opacity:1}.table .btn-icon-left>.text{padding-left:25px}.table thead>tr>th.c-assign,.table thead>tr>th.c-assignedTo{padding-left:29px}.table a{vertical-align:middle}.table tbody>tr:last-child{border-bottom:none}.table caption{margin-bottom:5px;background:#f1f1f1;border:none}.is-firefox .table .btn-icon-left>.icon{line-height:22px}.main-table{border-radius:4px}.main-table>.table,.main-table>.table-footer,.main-table>.table-header,.main-table>.table-responsive{-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045);box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045)}.main-table .table{font-size:13px;table-layout:fixed;background-color:#fff;border-radius:4px 4px 0 0}.main-table .table.table-lg{font-size:14px}.main-table .table .btn-icon-left{border-color:transparent}.main-table .table .btn-icon-left>.icon{background:0 0;border-radius:4px}.main-table .table .btn-icon-left.btn-sm{height:26px}.main-table .table .btn-icon-left:hover{border-color:rgba(0,0,0,.2)}.main-table .table .btn-icon-left:hover>.icon{background:#e9f2fb;border-radius:4px 0 0 4px}.main-table tbody>tr>td,.main-table thead>tr>th{min-height:36px;padding:2px 8px;line-height:30px}.main-table tbody>tr>td:first-child,.main-table thead>tr>th:first-child{padding-left:15px}.main-table thead>tr>th{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-bottom:1px solid #ddd}.main-table tbody>tr:nth-child(odd){background-color:#f5f5f5}.main-table tbody>tr:last-child>td{border-bottom:1px solid #ddd}.main-table tbody>tr>td{position:relative;border-bottom:none;border-bottom:1px solid #eee}.main-table tbody>tr>td .label{max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.main-table tbody>tr>td>a{line-height:28px;color:#0c60e1}.main-table tbody>tr>td>a:not(.btn):visited{color:#082999;opacity:.9}.main-table tbody>tr>td>a:hover,.main-table tbody>tr>td>a:visited:hover{color:#0c64eb}.main-table tbody>tr>td.c-actions{padding-right:10px}.main-table tbody>tr>td.c-side+td:before,.main-table tbody>tr>td:first-child:before{position:absolute;top:0;bottom:0;left:0;display:block;width:0;content:'';background:#0c64eb;opacity:0;-webkit-transition:.2s linear;-o-transition:.2s linear;transition:.2s linear;-webkit-transition-property:width,opacity,border-radius;-o-transition-property:width,opacity,border-radius;transition-property:width,opacity,border-radius}@-moz-document url-prefix(){.main-table tbody>tr>td.c-side+td:before,.main-table tbody>tr>td:first-child:before{bottom:-1px}}.main-table tbody>tr>td.c-side:before{display:none}.main-table tbody>tr{-webkit-transition:.2s cubic-bezier(.175,.885,.32,1);-o-transition:.2s cubic-bezier(.175,.885,.32,1);transition:.2s cubic-bezier(.175,.885,.32,1);-webkit-transition-property:background-color,-webkit-box-shadow;-o-transition-property:box-shadow,background-color;transition-property:background-color,-webkit-box-shadow;transition-property:box-shadow,background-color;transition-property:box-shadow,background-color,-webkit-box-shadow}.main-table tbody>tr:hover{background:#e9f2fb}.main-table .table-grouped tbody>tr:hover{background:#f2f7fd;-webkit-box-shadow:none;box-shadow:none}.main-table .table-grouped tbody>tr:hover td.c-actions .more{background:#f2f7fd}.main-table tbody>tr.checked{background:#fff3e0}.main-table tbody>tr.checked:hover{background:#ffebbc}.main-table tbody>tr.checked>td.c-side+td:before,.main-table tbody>tr.checked>td:first-child:before{width:4px;opacity:1}.main-table tbody>tr.checked.row-check-begin{border-top-left-radius:4px;border-top-right-radius:2px}.main-table tbody>tr.checked.row-check-begin>td:first-child:before{border-top-left-radius:4px}.main-table tbody>tr.checked.row-check-end{border-bottom-right-radius:2px;border-bottom-left-radius:4px}.main-table tbody>tr.checked.row-check-end>td:first-child:before{border-bottom-left-radius:4px}.main-table .checkbox-primary{display:inline-block;line-height:20px}.main-table .checkbox-primary label{margin:0}.main-table .table{margin:0}.table-header{padding:4px 0 12px}.table-header .table-statistic{color:#838a9d}.table-header .table-statistic strong{font-size:15px;color:#3c4353}.table-header .btn-toolbar{margin-top:-28px}.table-header.fixed-right{position:relative;z-index:5;padding:0}.table-header.fixed-right>.btn-toolbar{position:absolute;top:0;right:0;z-index:1;padding:1px;margin:0;background:#fff;border-radius:4px}.table-header.fixed-right>.btn-toolbar .btn{opacity:.65}.table-header.fixed-right>.btn-toolbar .btn:hover{opacity:1}.table-footer{position:relative;min-height:40px;padding:6px 15px;background:#fff;border-radius:0 0 4px 4px}.body-modal .table-footer{margin-bottom:20px}.talbe-lg+.table-footer{padding:11px 15px}.table-footer .btn-toolbar,.table-footer .checkbox-primary{float:left}.table-footer .btn-toolbar+.btn-toolbar{margin-left:8px}.table-footer .checkbox-primary{margin:5px 20px 0 0}.table-footer .checkbox-primary.checked label:after{border-color:#00da88!important}.table-footer .btn{padding:3px 10px;line-height:20px}.table-footer .pager{position:absolute;top:0;right:0;z-index:4;height:40px;padding:6px 5px 6px 10px;margin:0;background:#fff;opacity:1;-webkit-transition:opacity .4s;-o-transition:opacity .4s;transition:opacity .4s}.table-footer .pager:before{position:absolute;top:0;bottom:0;left:-50px;display:block;width:50px;content:' ';background:-webkit-gradient(linear,left top,right top,from(rgba(255,255,255,0)),to(#fff));background:-webkit-linear-gradient(left,rgba(255,255,255,0) 0,#fff 100%);background:-o-linear-gradient(left,rgba(255,255,255,0) 0,#fff 100%);background:linear-gradient(to right,rgba(255,255,255,0) 0,#fff 100%)}.table-footer .pager .btn,.table-footer .pager>li>.pager-item,.table-footer .pager>li>.pager-label{color:#838a9d;background:0 0;border-color:transparent}.table-footer .pager .btn,.table-footer .pager>li>a{border-radius:3px}.table-footer .pager .btn:hover,.table-footer .pager>li>a:hover{background:rgba(0,0,0,.1)}.table-footer .pager>li.disabled>a.pager-item{opacity:1}.table-footer .form-control{height:28px;padding:3px 8px}.table-footer .table-statistic{position:relative;z-index:2;float:left;padding-right:30px;line-height:28px;color:#838a9d;background:#fff}.table-footer .table-statistic:hover{z-index:4}.table-footer .table-statistic:hover+.pager{z-index:2;opacity:.3}.table-footer .btn-toolbar+.table-statistic{margin-left:10px}.table-footer .text{line-height:28px}.table-footer.fixed-footer{position:fixed;z-index:10;margin:0;background:rgba(75,75,75,.85);border-top-color:transparent}.table-footer.fixed-footer .checkbox-primary label{color:#fff}.table-footer.fixed-footer .checkbox-primary label:after{border-color:rgba(255,255,255,.8)}.table-footer.fixed-footer .table-statistic{color:#fff;background:#666}.table-footer.fixed-footer .pager{background:#666}.table-footer.fixed-footer .pager:before{background:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,0)),to(#666));background:-webkit-linear-gradient(left,rgba(0,0,0,0) 0,#666 100%);background:-o-linear-gradient(left,rgba(0,0,0,0) 0,#666 100%);background:linear-gradient(to right,rgba(0,0,0,0) 0,#666 100%)}.table-footer.fixed-footer .pager .btn,.table-footer.fixed-footer .pager>li>.pager-item,.table-footer.fixed-footer .pager>li>.pager-label{color:#fff}.table-footer.fixed-footer .pager .btn:hover,.table-footer.fixed-footer .pager>li>a:hover{background:rgba(255,255,255,.3)}.table-footer.fixed-footer .pager>li.disabled>a.pager-item{opacity:.5}.table-actions{width:0;height:28px;visibility:hidden;opacity:0;-webkit-transition:opacity cubic-bezier(.175,.885,.32,1) .8s;-o-transition:opacity cubic-bezier(.175,.885,.32,1) .8s;transition:opacity cubic-bezier(.175,.885,.32,1) .8s}.table-actions.show-always{width:auto;pointer-events:none;cursor:not-allowed;visibility:visible;opacity:.75}.has-row-checked .table-actions{width:auto;pointer-events:auto!important;cursor:default;visibility:visible;opacity:1}.table-lg tbody>tr>td{padding:9px 10px}.table-lg tbody>tr>td .btn+.btn{margin-left:5px}.table.has-sort-head thead>tr>th{padding-right:0}.table.has-sort-head thead>tr>th>a{position:relative;display:inline-block;padding-right:16px;color:#3c4353}.table.has-sort-head thead>tr>th>a:after,.table.has-sort-head thead>tr>th>a:before{position:absolute;top:0;right:0;font-family:ZentaoIcon;font-size:18px;font-size:14px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;line-height:30px;color:#3c4353;text-transform:none;content:"\f0de";opacity:.5;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.table.has-sort-head thead>tr>th>a:after{content:"\f0dd"}.table.has-sort-head thead>tr>th>a.sort-down,.table.has-sort-head thead>tr>th>a.sort-up{color:#000;text-decoration:none}.table.has-sort-head thead>tr>th>a:hover,.table.has-sort-head thead>tr>th>a:hover:after,.table.has-sort-head thead>tr>th>a:hover:before{color:#0c64eb;opacity:1}.table.has-sort-head thead>tr>th>a.sort-down:after,.table.has-sort-head thead>tr>th>a.sort-up:before{color:#000;opacity:1}.head-fixed .datatable-head-span .table,.table.fixed-header-copy{z-index:10;color:#fff;background:rgba(75,75,75,.85)}.head-fixed .datatable-head-span .table thead>tr>th,.table.fixed-header-copy thead>tr>th{color:#eee}.head-fixed .datatable-head-span .table thead>tr>th>a,.table.fixed-header-copy thead>tr>th>a{color:#eee}.head-fixed .datatable-head-span .table thead>tr>th>a:hover,.table.fixed-header-copy thead>tr>th>a:hover{color:#fff}.head-fixed .datatable-head-span .table thead>tr>th>a:after,.head-fixed .datatable-head-span .table thead>tr>th>a:before,.table.fixed-header-copy thead>tr>th>a:after,.table.fixed-header-copy thead>tr>th>a:before{color:#eee}.head-fixed .datatable-head-span .table thead>tr>th>a.sort-down,.head-fixed .datatable-head-span .table thead>tr>th>a.sort-down:after,.head-fixed .datatable-head-span .table thead>tr>th>a.sort-up,.head-fixed .datatable-head-span .table thead>tr>th>a.sort-up:before,.head-fixed .datatable-head-span .table thead>tr>th>a:hover,.head-fixed .datatable-head-span .table thead>tr>th>a:hover:after,.head-fixed .datatable-head-span .table thead>tr>th>a:hover:before,.table.fixed-header-copy thead>tr>th>a.sort-down,.table.fixed-header-copy thead>tr>th>a.sort-down:after,.table.fixed-header-copy thead>tr>th>a.sort-up,.table.fixed-header-copy thead>tr>th>a.sort-up:before,.table.fixed-header-copy thead>tr>th>a:hover,.table.fixed-header-copy thead>tr>th>a:hover:after,.table.fixed-header-copy thead>tr>th>a:hover:before{color:#fff}.head-fixed .datatable-head-span .table .checkbox-primary,.table.fixed-header-copy .checkbox-primary{z-index:1}.head-fixed .datatable-head-span .table .checkbox-primary label,.table.fixed-header-copy .checkbox-primary label{color:#fff}.head-fixed .datatable-head-span .table .checkbox-primary label:after,.table.fixed-header-copy .checkbox-primary label:after{border-color:rgba(255,255,255,.8)}.head-fixed .datatable-head-span .table .checkbox-primary.checked label:after,.table.fixed-header-copy .checkbox-primary.checked label:after{border-color:#00da88!important}.table-data{margin:0;table-layout:fixed}.table-data tbody>tr>td,.table-data tbody>tr>th{padding:6px 8px;word-break:break-all;border:none}.table-data tbody>tr>th{width:70px;padding-left:0;font-weight:400;color:#838a9d;text-align:right;vertical-align:middle}.table-data tbody>tr>td{padding-right:0}.table-data tbody>tr>td>a{color:#0c60e1}.table-data tbody>tr>td>a:not(.btn):visited{color:#082999}.table-data tbody>tr>td>a:hover,.table-data tbody>tr>td>a:visited:hover{color:#0c64eb}.table-data ol,.table-data ul{margin:0}.fixed-head-table{background:rgba(0,0,0,.7);border-bottom:1px solid #ddd}.fixed-head-table thead>tr>th{color:#fff}.table-empty-tip{padding:80px 10px;text-align:center;background:#fff}.not-firefox .table-grouped>tbody>tr>td.c-side{background:#fff!important}.table-grouped .group-toggle{cursor:pointer}.table-grouped .group-toggle.group-summary{border-top:10px solid #efefef}.table-grouped tbody>tr>td:first-child,.table-grouped thead>tr>th:first-child{padding-left:8px}.group-expand-all,.table-group-collapsed .group-collapse-all{display:none}.table-group-collapsed .group-expand-all{display:inline-block}.table-auto{table-layout:auto}.datatable .table>tbody>tr.checked.hover>td,.datatable .table>tbody>tr.checked>td.col-hover{background:#ffebbc}body.has-fixed-footer{padding-bottom:60px}.table.with-footer-fixed{margin-bottom:20px}.article-content{overflow:auto}.article-content img{margin-top:0}.article-content table{margin:10px 0}.article-content table td,.article-content table th{border:1px solid #cbd0db}.article-content table th{background:#eee}.article-content,.article>.content{word-wrap:break-word}.detail{padding:10px 0;margin:0 10px}.detail+.detail{padding-top:25px;border-top:1px solid #eee}.detail-title{font-size:14px;font-weight:700;line-height:20px}.detail-title>.pull-right{position:relative;top:-8px}h2.detail-title{margin:0;font-size:15px;font-weight:700}h2.detail-title .label,h2.detail-title .label-id{position:relative;top:-1px}.detail-content{padding:0;margin-top:10px}.detail-content em{font-style:normal;color:#3c4353}.detail-content .list-unstyled>li+li{margin-top:5px}.side-col .detail-content{padding-left:0}details.detail{padding:10px 0}details.detail summary{position:relative;cursor:pointer;outline:0}details.detail summary::-webkit-details-marker{display:none}details.detail summary:after{position:absolute;top:0;right:0;font-family:ZentaoIcon;font-size:18px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;text-transform:none;content:"\e316";opacity:.4;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}details.detail[open] summary:after{content:"\e313"}.files-list{padding-left:0;list-style:none}.files-list>li>a{display:block;line-height:24px}.files-list>li>a>.icon{display:inline-block;margin-right:5px;opacity:.7}.files-list>li>a:hover{color:#0c64eb}.files-list>li>.right-icon{opacity:0;-webkit-transition:opacity .2s;-o-transition:opacity .2s;transition:opacity .2s}.files-list>li:hover>.right-icon{opacity:1}.histories-list{padding-left:15px;margin-bottom:0}.histories-list .btn-mini{position:relative;top:1px}.histories-list>li{position:relative}.histories-list>li+li{margin-top:5px}.histories-list>li strong{color:#3c4353}.histories-list .comment,.histories-list .show-form .comment-edit-form{padding:5px 5px 5px 10px;margin:5px 0 0;background-color:rgba(0,0,0,.025);border:1px solid #eee}.histories-list .btn-edit-comment{position:absolute;top:28px;right:2px}.histories-list .comment-edit-form,.histories-list .show-form .btn-edit-comment,.histories-list .show-form .comment{display:none}.histories-list .show-form .comment-edit-form{display:block;padding:10px;border:1px solid #eee}.histories .btn-mini{width:16px;min-width:16px;height:16px;overflow:hidden;line-height:16px;color:#cbd0db;vertical-align:-8%;border-radius:1px}.histories .btn-mini>.icon{position:relative;top:-2px;left:-2px}.histories .btn-mini:focus,.histories .btn-mini:hover{color:#0c64eb;border-color:#0c64eb}.histories .show-changes .btn-expand>.icon:before{content:"\e926"}.histories .btn-strip{display:none}.histories .show-changes .btn-strip{display:inline-block}.history-changes{display:none;padding:5px;margin-bottom:-5px;margin-left:5px;font-size:12px;line-height:20px}.history-changes blockquote{padding:5px 5px 5px 10px;margin:5px 0 0;font-size:12px;background-color:rgba(0,0,0,.05);border-left:3px solid #eee}.history-changes blockquote.original{display:none}.show-changes .history-changes,.show-original .history-changes blockquote.original{display:block}.show-original .history-changes blockquote.textdiff{display:none}.syntaxhighlighter{overflow:auto}.search-list{min-width:200px;max-width:300px;padding:0}.search-list .search-box{float:none;width:auto;margin:10px}.search-list .search-box .icon-search{opacity:.5}.search-list .list-group{max-height:248px;padding:5px 10px;margin:5px 0}.dropup .search-list .search-box+.list-group{height:171px;padding-top:0}.search-list .search-input{height:30px}.search-list .input-control-icon-right{height:28px;line-height:28px}.list-group{overflow-y:auto}.list-group>a{display:block;padding:2px 10px 2px 5px;overflow:hidden;line-height:20px;text-overflow:ellipsis;white-space:nowrap;border-radius:4px}.list-group>a+a{margin-top:5px}.list-group>a>.icon{display:inline-block;margin-right:3px;opacity:.5}.list-group>a.selected{color:#e9f2fb;background-color:#0c64eb}.list-group>a.active{color:#0c64eb;background-color:#e9f2fb}.list-group>a.active:hover,.list-group>a:hover{color:#fff;background-color:#0c64eb}.list-group>.heading{padding:2px 5px;line-height:20px;color:#838a9d}.list-group>a+.heading{margin-top:4px}.dropup .search-box-sink{padding-top:5px;padding-bottom:45px}.dropup .search-box-sink .search-box{position:absolute;right:10px;bottom:10px;left:10px;margin:0}.dropup .search-box-sink .search-box+.list-group{height:auto;max-height:171px}#dropMenu>.search-box{max-width:188px}#dropMenu .input-control-icon-left{top:0}#dropMenu .list-group{width:199px;max-width:199px;max-height:300px;padding-top:0}#dropMenu .table-row .list-group{margin:0 -10px}#dropMenu .col-right{display:none}#dropMenu .col-left{width:100%}#dropMenu .col-left .list-group{max-height:250px;margin-bottom:35px}#dropMenu .col-footer{position:absolute;bottom:10px;left:10px;width:180px;padding-top:10px;padding-left:5px;margin-top:5px;border-top:1px solid #eee}#dropMenu .col-footer>a{opacity:.8}#dropMenu .col-footer>a:hover{opacity:1}#dropMenu.show-right-col{width:402px;max-width:402px}#dropMenu.show-right-col>.list-group{width:400px;max-width:400px}#dropMenu.show-right-col .col-left,#dropMenu.show-right-col .col-right{display:table-cell;width:50%}#dropMenu.show-right-col .col-left>.list-group{width:200px;max-width:200px;margin-right:0}#dropMenu.show-right-col .col-right{border-left:1px solid #eee}#dropMenu.show-right-col .col-right>.list-group{width:199px;max-height:285px;margin:0}#dropMenu.show-right-col .col-right>.list-group>a{opacity:.7}#dropMenu.show-right-col .col-right>.list-group>a:hover{opacity:1}#dropMenu.show-right-col .toggle-right-col>.icon-angle-right:before{content:"\e314"}.release-path{overflow:hidden}.release-line{display:table;width:100%;padding:0;table-layout:fixed}.release-line>li{display:table-cell;list-style:none}.release-line>li>a{position:relative;display:block}.release-line>li>a:before{position:absolute;left:0;display:block;width:13px;height:13px;content:' ';background:#fff;border:2px solid #838a9d;border-radius:50%}.release-line>li>a:after{position:absolute;left:5px;display:block;width:2px;height:30px;content:' ';background:#cbe0f6}.release-line>li>a>.icon{position:absolute;left:4px;font-size:24px}.release-line>li>a .title{display:block;font-size:14px;white-space:nowrap}.release-line>li>a .date,.release-line>li>a .info{display:block;max-height:18px;overflow:hidden;font-size:12px;color:#838a9d;text-overflow:ellipsis;white-space:nowrap}.release-line>li>a:hover:before{background-color:#e9f2fb}.release-line>li>a:hover:after{background-color:#838a9d}.release-line>li>a:hover .title{color:#0c64eb}.release-line>li>a:hover .date,.release-line>li>a:hover .info{color:#838a9d}.release-line>li:nth-child(odd){padding-top:80px;vertical-align:top}.release-line>li:nth-child(odd)>a{height:85px;padding-top:36px;border-top:5px solid #cbe0f6}.release-line>li:nth-child(odd)>a:before{top:-9px}.release-line>li:nth-child(odd)>a:after{top:6px}.release-line>li:nth-child(odd)>a>.icon{top:-26px}.release-line>li:nth-child(even){padding-bottom:80px;vertical-align:bottom}.release-line>li:nth-child(even)>a{height:85px;padding-bottom:36px;border-bottom:5px solid #cbe0f6}.release-line>li:nth-child(even)>a:before{bottom:-9px}.release-line>li:nth-child(even)>a:after{bottom:6px}.release-line>li:nth-child(even)>a>.icon{bottom:-2px}.release-line>li:last-child>a{border-color:transparent}.release-line>li.active>a:before{border-color:#0c64eb}.release-line>li+li>a>.date,.release-line>li+li>a>.info,.release-line>li+li>a>.title{position:relative;left:-36%}#footer{position:fixed;right:0;bottom:0;left:0;z-index:1010;height:40px;background:#fff;border-top:1px solid #eff1f7}#footer .breadcrumb{padding:10px 0;margin:0}#footer .breadcrumb>li{max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#footer .breadcrumb>.active,#footer .breadcrumb>li>a{color:#838a9e}#footer .breadcrumb>.active:hover,#footer .breadcrumb>li>a:hover{color:#16a8f8}#footer .breadcrumb>li+li:before{content:'>'}#footer>.container{padding:0 20px}@media (min-width:1400px){#footer>.container{padding:0 40px}}#poweredBy{position:absolute;top:4px;right:0;padding:5px 10px}#poweredBy .icon-zentao{color:#0097fd}#poweredBy a{color:#3c4353}#poweredBy a:hover{color:#0c64eb}#poweredBy a:hover .icon-zentao{color:#0c64eb}#poweredBy a.text-important{color:#bd7b46}#poweredBy a.text-important:hover{color:#ff5d5d}#poweredBy a.text-primary{color:#0c64eb}#poweredBy a.text-primary:hover{color:#16a8f8}#poweredBy #aiux{color:#cbd0dc}#noticeBox .alert{-webkit-box-shadow:rgba(0,0,0,.15) 0 3px 10px,rgba(0,0,0,.25) 0 3px 10px;box-shadow:rgba(0,0,0,.15) 0 3px 10px,rgba(0,0,0,.25) 0 3px 10px} \ No newline at end of file +*/.chosen-container{position:relative;display:inline-block;font-size:13px;vertical-align:middle;zoom:1;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;*display:inline}.chosen-container .chosen-drop{position:absolute;top:100%;z-index:1010;display:none;width:100%;background:#fff;border:1px solid #b6bdcc;border:1px solid rgba(0,0,0,.15);border-top:0;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.chosen-container .chosen-drop.chosen-drop-size-limited{border-top:1px solid rgba(0,0,0,.15)}.chosen-container.chosen-with-drop .chosen-drop{display:block}.chosen-container a{cursor:pointer}.chosen-container.chosen-up .chosen-drop{top:inherit;bottom:100%;margin-top:auto;margin-bottom:-1px;border-radius:2px 2px 0 0;-webkit-box-shadow:0 -3px 5px rgba(0,0,0,.175);box-shadow:0 -3px 5px rgba(0,0,0,.175)}.chosen-container-single .chosen-single{display:block;width:100%;height:32px;padding:5px 8px;overflow:hidden;line-height:1.42857143;color:#222;text-decoration:none;white-space:nowrap;vertical-align:middle;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #dcdcdc;border-radius:2px;-webkit-box-shadow:none;box-shadow:none;-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s,-webkit-box-shadow ease-in-out .15s}.chosen-container-single .chosen-default{color:#838a9d}.chosen-container-single .chosen-single>span{display:block;margin-right:26px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.chosen-container-single .chosen-single-with-deselect span{margin-right:38px}.chosen-container-single .chosen-single abbr{position:absolute;top:7px;right:24px;display:block;width:20px;height:20px;font-size:19.5px;font-weight:700;line-height:14px;color:#000;text-align:center;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.chosen-container-single .chosen-single abbr:before{content:'×'}.chosen-container-single .chosen-single abbr:focus,.chosen-container-single .chosen-single abbr:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}.chosen-container-single .chosen-single div{position:absolute;top:0;right:0;display:block;height:100%;padding:5px 8px}.chosen-container-single .chosen-single div b{display:inline-block;width:0;height:0;margin-bottom:2px;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.chosen-container-single .chosen-search{position:relative;z-index:1010;padding:3px 4px;margin:0;white-space:nowrap}.chosen-container-single .chosen-search input[type=text]{width:100%;height:27px;padding:2px 26px 2px 8px;margin:1px 0;font-size:12px;line-height:1.5;background-color:#fff;border:1px solid #dcdcdc;border-radius:2px;outline:0}.chosen-container-single .chosen-search input[type=text]:focus{border-color:#0c64eb}.chosen-container-single .chosen-search:before{position:absolute;top:10px;right:10px;display:block;font-family:ZentaoIcon;font-size:18px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;color:#838a9d;text-transform:none;content:"\e928";speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.chosen-container-single .chosen-drop{margin-top:-1px;-webkit-background-clip:padding-box;background-clip:padding-box;border-radius:0 0 4px 4px}.chosen-container-single.chosen-container-single-nosearch .chosen-search{position:absolute;left:-9999px}.chosen-container .chosen-results{position:relative;max-height:240px;padding:0;margin:0;overflow-x:hidden;overflow-y:auto;-webkit-overflow-scrolling:touch}.chosen-container .chosen-results li{display:none;padding:5px 10px;margin:0;line-height:15px;list-style:none;-webkit-transition:background-color .2s cubic-bezier(.175,.885,.32,1);-o-transition:background-color .2s cubic-bezier(.175,.885,.32,1);transition:background-color .2s cubic-bezier(.175,.885,.32,1);-webkit-touch-callout:none}.chosen-container .chosen-results li.active-result{display:list-item;cursor:pointer}.chosen-container .chosen-results li.disabled-result{display:list-item;color:#ccc;cursor:default}.chosen-container .chosen-results li.highlighted{color:#fff;background-color:#0c64eb}.chosen-container .chosen-results li.no-results{display:list-item;background:#f4f4f4}.chosen-container .chosen-results li.group-result{display:list-item;font-weight:700;cursor:default}.chosen-container .chosen-results li.group-option{padding-left:15px}.chosen-container .chosen-results li em{font-style:normal;text-decoration:underline}.chosen-container-multi .chosen-choices{position:relative;width:100%;min-height:32px;min-height:30px\9;padding:0;margin:0;overflow:hidden;cursor:text;background-color:#fff;border:1px solid #dcdcdc;border-radius:2px;-webkit-box-shadow:none;box-shadow:none;-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s,-webkit-box-shadow ease-in-out .15s}.chosen-container-multi .chosen-choices:after,.chosen-container-multi .chosen-choices:before{display:table;content:" "}.chosen-container-multi .chosen-choices:after{clear:both}.chosen-container-multi .chosen-choices li{display:block;float:left;padding:0 6px;margin:5px 0 0 6px;list-style:none}.chosen-container-multi .chosen-choices li.search-field{padding:0;margin-bottom:4px;white-space:nowrap}.chosen-container-multi .chosen-choices li.search-field input[type=text]{height:20px;font-size:100%;color:#838a9d;background:0 0!important;border:0!important;border-radius:0;outline:0;-webkit-box-shadow:none;box-shadow:none}.chosen-container-multi .chosen-choices li.search-field .default{color:#999}.chosen-container-multi .chosen-choices li.search-field:before{position:absolute;right:8px;bottom:8px;display:block;font-family:ZentaoIcon;font-size:18px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;color:#838a9d;text-transform:none;content:"\e928";opacity:0;-webkit-transition:opacity .2s cubic-bezier(.175,.885,.32,1);-o-transition:opacity .2s cubic-bezier(.175,.885,.32,1);transition:opacity .2s cubic-bezier(.175,.885,.32,1);speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.chosen-container-multi .chosen-choices li.search-choice{position:relative;padding:3px 20px 3px 5px;line-height:12px;cursor:default;background-color:#f1f1f1;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #cbd0db;border-radius:3px;-webkit-box-shadow:0 0 2px #fff inset,0 1px 0 rgba(0,0,0,.05);box-shadow:0 0 2px #fff inset,0 1px 0 rgba(0,0,0,.05);-webkit-transition:all .4s cubic-bezier(.175,.885,.32,1);-o-transition:all .4s cubic-bezier(.175,.885,.32,1);transition:all .4s cubic-bezier(.175,.885,.32,1)}.chosen-container-multi .chosen-choices li.search-choice:hover{background-color:#fff;border-color:#adb5c6;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 0 rgba(0,0,0,.1)}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close{position:absolute;top:0;right:0;display:block;width:20px;height:20px;font-size:15.6px;font-weight:700;line-height:14px;color:#000;text-align:center;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:before{content:'×'}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:focus,.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}.chosen-container-multi .chosen-choices li.search-choice-disabled{padding-right:5px;color:#666;background-color:#e4e4e4;border:1px solid #ccc}.chosen-container-multi .chosen-choices li.search-choice-focus{background:#d4d4d4}.chosen-container-multi .chosen-choices li.search-choice-focus .search-choice-close{background-position:-42px -10px}.chosen-container-multi .chosen-results{padding:5px 0;margin:0}.chosen-container-multi .chosen-drop .result-selected{display:list-item;color:#ccc;cursor:default}.chosen-container-active .chosen-single{border-color:#0c64eb;-webkit-box-shadow:none,0 0 8px rgba(12,100,235,.6);box-shadow:none,0 0 8px rgba(12,100,235,.6)}.chosen-container-active.chosen-with-drop .chosen-single{border:1px solid #b6bdcc;border:1px solid rgba(0,0,0,.15);border-bottom-right-radius:0;border-bottom-left-radius:0;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.chosen-container-active.chosen-with-drop .chosen-single div{background:0 0;border-left:none}.chosen-container-active.chosen-with-drop .chosen-single div b{content:"";border-top:0 dotted;border-bottom:4px solid}.chosen-container-active.chosen-with-drop.chosen-up .chosen-single{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:2px;border-bottom-left-radius:2px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.chosen-container-active .chosen-choices{border-color:#0c64eb;-webkit-box-shadow:none,0 0 8px rgba(12,100,235,.6);box-shadow:none,0 0 8px rgba(12,100,235,.6)}.chosen-container-active .chosen-choices li.search-field input[type=text]{color:#111!important}.chosen-container-active .chosen-choices li.search-field:before{opacity:1}.chosen-disabled{cursor:default;opacity:.5!important}.chosen-disabled .chosen-single{cursor:default}.chosen-disabled .chosen-choices .search-choice .search-choice-close{cursor:default}.chosen-container-single .chosen-single>.chosen-search{left:0;display:none;padding:3px 4px;opacity:0}.chosen-container-single .chosen-single>.chosen-search>input{height:25px;padding:2px 26px 2px 4px;font-size:inherit}.chosen-container-single .chosen-single>.chosen-search:before{top:9px}.chosen-with-search.chosen-with-drop .chosen-single>.chosen-search{display:block;opacity:1}.container,.container-fixed,.container-fluid{position:relative}.container{max-width:1800px!important}body{padding-bottom:40px;background-color:#efefef}body.article-content,body.body-modal{background:0 0}body.body-modal{padding:0}a:active,a:focus,button:active,button:focus{outline:0!important}em{font-style:normal}.strong{font-weight:700}.font-normal{font-weight:400!important}.text-middle{vertical-align:middle!important}.text-bottom{vertical-align:bottom!important}.text-top{vertical-align:top!important}.inline-block{display:inline-block!important}.layer{border-radius:4px;-webkit-box-shadow:0 0 20px 0 #bdc9d8;box-shadow:0 0 20px 0 #bdc9d8}.space{margin-bottom:20px}.space-lg{margin-bottom:30px}.space-sm{margin-bottom:10px}.muted{opacity:.5}.text-muted em{color:#3c4353}.no-animate{-webkit-transition:none!important;-o-transition:none!important;transition:none!important}.template{display:none!important}.text-left{text-align:left!important}.text-yellow.icon-folder{color:#ffe066}.table-row{display:table;width:100%;table-layout:fixed}.table-col,.table-row>.col,.table-row>[class*=col-],.table-row>[class*="-col"]{display:table-cell;float:none;vertical-align:top}.side-col{width:200px;padding-right:20px}.side-col.col-4{width:33.3333333%}.col-lg{width:260px}.col-xl{width:320px}.col-sm{width:150px}.col-xs{width:100px}.main-col+.side-col{padding-right:0;padding-left:20px}.row-grid>[class*=col-],.row-grid>[class*="-col"]{padding-top:6px;padding-bottom:6px}hr.space{margin:10px 0;border:none}hr.space-sm{margin:5px 0;border:none}.text-secondary{color:#16a8f8}a.text-primary{color:#0c64eb}.nav-primary>li>a{min-width:100px;padding:5px 8px;color:#838a9d;border-color:#e7f1fc}.nav-primary>li.active>a{color:#0c64eb;background-color:#e7f1fc;border-color:#e7f1fc}.nav-primary>li.active>a:hover{color:#0c64eb;background-color:#c3dcf7;border-color:#c3dcf7}.end-marker{margin-bottom:20px;color:#cbd0db;text-align:center}@-webkit-keyframes highlight{0%{background:#fff;outline:1px solid transparent}100%{background:#fff0d5;outline:2px solid #ffdcbc}}@-o-keyframes highlight{0%{background:#fff;outline:1px solid transparent}100%{background:#fff0d5;outline:2px solid #ffdcbc}}@keyframes highlight{0%{background:#fff;outline:1px solid transparent}100%{background:#fff0d5;outline:2px solid #ffdcbc}}.highlight{-webkit-animation:highlight .5s linear 0s 2 alternate;-o-animation:highlight .5s linear 0s 2 alternate;animation:highlight .5s linear 0s 2 alternate}.progress.inline-block{width:100px;margin:0}.w-p5{width:5%!important}.w-p10{width:10%!important}.w-p15{width:15%!important}.w-p20{width:20%!important}.w-p25{width:25%!important}.w-p30{width:30%!important}.w-p35{width:35%!important}.w-p40{width:40%!important}.w-p45{width:45%!important}.w-p50{width:50%!important}.w-p55{width:55%!important}.w-p60{width:60%!important}.w-p65{width:65%!important}.w-p70{width:70%!important}.w-p75{width:75%!important}.w-p80{width:80%!important}.w-p85{width:85%!important}.w-p90{width:90%!important}.w-p94{width:94%!important}.w-p95{width:95%!important}.w-p98{width:98%!important}.w-p99{width:99%!important}.w-p100{width:100%!important}.w-auto{width:auto!important}.w-10px{width:10px!important}.w-20px{width:20px!important}.w-30px{width:30px!important}.w-35px{width:35px!important}.w-40px{width:40px!important}.w-45px{width:45px!important}.w-50px{width:50px!important}.w-60px{width:60px!important}.w-70px{width:70px!important}.w-80px{width:80px!important}.w-90px{width:90px!important}.w-100px{width:100px!important}.w-110px{width:110px!important}.w-120px{width:120px!important}.w-130px{width:130px!important}.w-140px{width:140px!important}.w-150px{width:150px!important}.w-160px{width:160px!important}.w-180px{width:180px!important}.w-200px{width:200px!important}.w-230px{width:230px!important}.w-250px{width:250px!important}.w-300px{width:300px!important}.w-400px{width:400px!important}.w-500px{width:500px!important}.w-600px{width:600px!important}.w-700px{width:700px!important}.w-800px{width:800px!important}.w-900px{width:900px!important}.mw-200px{max-width:200px!important}.mw-300px{max-width:300px!important}.mw-400px{max-width:400px!important}.mw-500px{max-width:500px!important}.mw-600px{max-width:600px!important}.mw-700px{max-width:700px!important}.mw-800px{max-width:800px!important}.mw-900px{max-width:900px!important}.mw-1400px{max-width:1400px!important}.w-id{width:70px!important}.w-pri{width:40px!important}.w-severity{width:50px!important}.w-hour{width:57px!important}.w-date{width:90px!important}.w-status{width:60px!important}.w-resolution,.w-type,.w-user{width:80px!important}.w-p15-f{width:15%!important;min-width:120px!important}.w-p25-f{width:25%!important;min-width:200px!important}.w-p35-f{width:35%!important;min-width:300px!important}.w-p45-f{width:45%!important;min-width:400px!important}.h-5px{height:5px!important}.h-10px{height:10px!important}.h-20px{height:20px!important}.h-30px{height:30px!important}.h-35px{height:35px!important}.h-40px{height:40px!important}.h-45px{height:45px!important}.h-50px{height:50px!important}.h-60px{height:60px!important}.h-70px{height:70px!important}.h-80px{height:80px!important}.h-100px{height:100px!important}.h-120px{height:120px!important}.h-130px{height:130px!important}.h-140px{height:140px!important}.h-150px{height:150px!important}.h-200px{height:200px!important}.pd-0{padding:0!important}.mg-0{margin:0!important}.mgb-20{margin-bottom:20px!important}.mgb-10{margin-bottom:10px!important}.pdb-20{padding-bottom:20px!important}.pdt-20{padding-top:20px!important}.br-0{border-radius:0!important}.bd-0,.bd-none,.borderless{border:none!important}.bg-none{background:0 0!important}.red{color:#ff5d5d!important}.icon-pro-version{font-size:14px!important}.icon-pro-version:before{position:relative;top:-1px;font-size:14px;color:#ff5d5d;content:"\e92b"}.bg-primary{color:#fff;background:#1183fb -webkit-gradient(linear,right top,left top,from(#0a48d1),to(#1183fb));background:#1183fb -webkit-linear-gradient(right,#0a48d1 0,#1183fb 100%);background:#1183fb -o-linear-gradient(right,#0a48d1 0,#1183fb 100%);background:#1183fb linear-gradient(-90deg,#0a48d1 0,#1183fb 100%);background-color:#00b1fd}.bg-secondary{color:#fff;background:#16a8f8}.hl-tutorial{position:relative!important;z-index:1010!important;-webkit-box-shadow:0 0 0 0 #000!important;box-shadow:0 0 0 0 #000!important;-webkit-transition:-webkit-box-shadow 1s!important;-o-transition:box-shadow 1s!important;transition:-webkit-box-shadow 1s!important;transition:box-shadow 1s!important;transition:box-shadow 1s,-webkit-box-shadow 1s!important}.hl-tutorial.hl-in{-webkit-box-shadow:0 0 20px 0 #ffff8d,0 0 0 2px #ffd180,0 0 0 2000px rgba(0,0,0,.2)!important;box-shadow:0 0 20px 0 #ffff8d,0 0 0 2px #ffd180,0 0 0 2000px rgba(0,0,0,.2)!important}.btn.tooltip-tutorial,.hl-tutorial.hl-in:hover{-webkit-box-shadow:0 0 30px 0 #ffff8d,0 0 0 5px #ffd180,0 0 0 2000px rgba(0,0,0,.3)!important;box-shadow:0 0 30px 0 #ffff8d,0 0 0 5px #ffd180,0 0 0 2000px rgba(0,0,0,.3)!important}.tooltip-max .tooltip-inner{max-width:1000px;padding:8px 10px}.transition-all *{-webkit-transition:all .2s!important;-o-transition:all .2s!important;transition:all .2s!important}.scroll-x{overflow-x:auto!important}.scroll-y{overflow-y:auto!important}.divider+.divider{display:none}@font-face{font-family:ZentaoIcon;font-style:normal;font-weight:400;src:url(../fonts/ZentaoIcon.eot?v=1.1.0);src:url(../fonts/ZentaoIcon.eot?#iefix&v=1.1.0) format('embedded-opentype'),url(../fonts/ZentaoIcon.woff?v=1.1.0) format('woff'),url(../fonts/ZentaoIcon.ttf?v=1.1.0) format('truetype'),url(../fonts/ZentaoIcon.svg#regular?v=1.1.0) format('svg')}.icon,[class*=" icon-"],[class^=icon-]{font-family:ZentaoIcon;font-size:18px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;text-transform:none;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon:before{display:inline-block;min-width:18px;text-align:center}a .icon,a [class*=" icon-"],a [class^=icon-]{display:inline}.icon-lg:before{font-size:1.33333333em;vertical-align:-10%}.icon-2x{font-size:36px}.icon-3x{font-size:54px}.icon-4x{font-size:72px}.icon-5x{font-size:90px}.icon-spin{display:inline-block;-webkit-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;animation:spin 2s infinite linear}a .icon-spin{display:inline-block;text-decoration:none}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0);transform:rotate(0)}100%{-o-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes spin{0%{-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);-o-transform:rotate(359deg);transform:rotate(359deg)}}.icon-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.icon-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.icon-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.icon-flip-horizontal{-webkit-transform:scale(-1,1);-ms-transform:scale(-1,1);-o-transform:scale(-1,1);transform:scale(-1,1)}.icon-flip-vertical{-webkit-transform:scale(1,-1);-ms-transform:scale(1,-1);-o-transform:scale(1,-1);transform:scale(1,-1)}.icon.icon-flip-horizontal,.icon.icon-flip-vertical,.icon.icon-rotate-180,.icon.icon-rotate-270,.icon.icon-rotate-90{display:inline-block}.icon-book:before{content:"\f02d"}.icon-treemap-alt:before{content:"\e971"}.icon-collapse-alt:before{content:"\e6f2"}.icon-expand-alt:before{content:"\e6f1"}.icon-more:before{content:"\e744"}.icon-angle-double-right:before{content:"\f101"}.icon-certificate:before{content:"\f0a3"}.icon-bell:before{content:"\e7f5"}.icon-format-bold:before{content:"\e953"}.icon-format-header-pound:before{content:"\e954"}.icon-format-italic:before{content:"\e955"}.icon-format-list-bulleted:before{content:"\e956"}.icon-format-list-numbers:before{content:"\e969"}.icon-format-quote-close:before{content:"\e96a"}.icon-fullscreen:before{content:"\e96b"}.icon-fullscreen-exit:before{content:"\e972"}.icon-image:before{content:"\e96c"}.icon-table-large:before{content:"\e96d"}.icon-columns:before{content:"\f0db"}.icon-cancel:before{content:"\e951"}.icon-ban-circle:before{content:"\e951"}.icon-persons:before{content:"\e94d"}.icon-eye:before{content:"\e94e"}.icon-unlock:before{content:"\e94f"}.icon-eye-off:before{content:"\e96e"}.icon-lock:before{content:"\e950"}.icon-move:before{content:"\e94c"}.icon-help:before{content:"\e968"}.icon-folder-account:before{content:"\e942"}.icon-folder-move:before{content:"\e960"}.icon-folder-plus:before{content:"\e961"}.icon-folder-upload:before{content:"\e962"}.icon-folder-star:before{content:"\e963"}.icon-folder-edit:before{content:"\e964"}.icon-folder-download:before{content:"\e965"}.icon-folder-outline:before{content:"\e966"}.icon-restart:before{content:"\e95e"}.icon-history:before{content:"\e95f"}.icon-home:before{content:"\e958"}.icon-pencil:before{content:"\e254"}.icon-angle-down:before{content:"\e313"}.icon-angle-left:before{content:"\e314"}.icon-angle-right:before{content:"\e315"}.icon-angle-top:before{content:"\e316"}.icon-first-page:before{content:"\e5dc"}.icon-last-page:before{content:"\e5dd"}.icon-caret-down:before{content:"\f0d7"}.icon-caret-up:before{content:"\f0d8"}.icon-caret-left:before{content:"\f0d9"}.icon-caret-right:before{content:"\f0da"}.icon-sort:before{content:"\f0dc"}.icon-sort-down:before{content:"\f0dd"}.icon-sort-up:before{content:"\f0de"}.icon-zentao-alt:before{content:"\e900"}.icon-zentao:before{content:"\e901"}.icon-severity:before{content:"\e973"}.icon-severity-solid:before{content:"\e902"}.icon-bar-chart:before{content:"\e903"}.icon-import:before{content:"\e904"}.icon-export:before{content:"\e905"}.icon-printer:before{content:"\e906"}.icon-hand-right:before{content:"\e907"}.icon-hand-right-alt:before{content:"\e96f"}.icon-checked:before{content:"\e908"}.icon-off:before{content:"\e909"}.icon-start:before{content:"\e90a"}.icon-play:before{content:"\e90a"}.icon-time:before{content:"\e90b"}.icon-edit:before{content:"\e90c"}.icon-trash:before{content:"\e90d"}.icon-link:before{content:"\e90e"}.icon-unlink:before{content:"\e90f"}.icon-bullhorn:before{content:"\e910"}.icon-bug:before{content:"\e911"}.icon-list-alt:before{content:"\e912"}.icon-fork:before{content:"\e913"}.icon-change:before{content:"\e970"}.icon-glasses:before{content:"\e914"}.icon-sitemap:before{content:"\e915"}.icon-plus-sign:before{content:"\e916"}.icon-pluses:before{content:"\e917"}.icon-flag-alt:before{content:"\e918"}.icon-magic:before{content:"\e919"}.icon-treemap:before{content:"\e91a"}.icon-confirm:before{content:"\e91b"}.icon-lightbulb:before{content:"\e91c"}.icon-delay:before{content:"\e91d"}.icon-calendar:before{content:"\e91d"}.icon-pause:before{content:"\e91e"}.icon-ban:before{content:"\e91f"}.icon-plus-bold:before{content:"\e920"}.icon-copy:before{content:"\e921"}.icon-refresh:before{content:"\e922"}.icon-arrow-up:before{content:"\e923"}.icon-arrow-down:before{content:"\e924"}.icon-arrow-left:before{content:"\e952"}.icon-arrow-right:before{content:"\e93e"}.icon-plus:before{content:"\e925"}.icon-minus:before{content:"\e926"}.icon-exchange:before{content:"\e927"}.icon-search:before{content:"\e928"}.icon-envelope-o:before{content:"\e92a"}.icon-check:before{content:"\e5ca"}.icon-circle:before{content:"\e836"}.icon-up-circle:before{content:"\e92b"}.icon-right-circle:before{content:"\e92c"}.icon-down-circle:before{content:"\e92d"}.icon-left-circle:before{content:"\e92e"}.icon-check-circle:before{content:"\e92f"}.icon-exclamation-sign:before{content:"\e930"}.icon-unfold-all:before{content:"\e931"}.icon-fold-all:before{content:"\e932"}.icon-plus-sm:before{content:"\e933"}.icon-chevron-left:before{content:"\e934"}.icon-chevron-right:before{content:"\e935"}.icon-close:before{content:"\e936"}.icon-flag:before{content:"\e937"}.icon-check-sign:before{content:"\e938"}.icon-minus-sign:before{content:"\e939"}.icon-bars-sign:before{content:"\e93a"}.icon-cog:before{content:"\e93b"}.icon-color:before{content:"\e93c"}.icon-paper-clip:before{content:"\e93d"}.icon-back:before{content:"\e93f"}.icon-chat-line:before{content:"\e940"}.icon-person:before{content:"\e941"}.icon-stack:before{content:"\e943"}.icon-cube:before{content:"\e967"}.icon-folder:before{content:"\e944"}.icon-folder-o:before{content:"\e945"}.icon-folder-open-o:before{content:"\e946"}.icon-folder-open:before{content:"\e947"}.icon-bars:before{content:"\e948"}.icon-cards-view:before{content:"\e949"}.icon-star-empty:before{content:"\e94a"}.icon-star:before{content:"\e94b"}.icon-ellipsis-v:before{content:"\e5d4"}.icon-spinner-indicator:before{content:"\e982"}.icon-text:before{content:"\e929"}.icon-code:before{content:"\e957"}.icon-chevron-double-up:before{content:"\e959"}.icon-chevron-double-down:before{content:"\e95a"}.icon-chart-pie:before{content:"\e95b"}.icon-chart-line:before{content:"\e95c"}.icon-chart-bar:before{content:"\e95d"}.icon-globe:before{content:"\f0ac"}.icon-file:before{content:"\f016"}.icon-file-empty:before{content:"\f016"}.icon-file-text:before{content:"\f0f6"}.icon-file-alt:before{content:"\f15b"}.icon-file-text-alt:before{content:"\f15c"}.icon-file-pdf:before{content:"\f1c1"}.icon-file-word:before{content:"\f1c2"}.icon-file-excel:before{content:"\f1c3"}.icon-file-powerpoint:before{content:"\f1c4"}.icon-file-image:before{content:"\f1c5"}.icon-file-archive:before{content:"\f1c6"}.icon-file-audio:before{content:"\f1c7"}.icon-file-video:before{content:"\f1c8"}.icon-file-code:before{content:"\f1c9"}.icon-sm:before{font-size:14px;vertical-align:10%}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:13px;font-weight:400;line-height:18px;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;border-radius:4px;-webkit-transition:.4s cubic-bezier(.175,.885,.32,1);-o-transition:.4s cubic-bezier(.175,.885,.32,1);transition:.4s cubic-bezier(.175,.885,.32,1);-webkit-transition-property:background,border,outline,opacity,-webkit-box-shadow;-o-transition-property:background,border,box-shadow,outline,opacity;transition-property:background,border,outline,opacity,-webkit-box-shadow;transition-property:background,border,box-shadow,outline,opacity;transition-property:background,border,box-shadow,outline,opacity,-webkit-box-shadow}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:focus,.btn:hover{color:#3c4353;text-decoration:none}.btn:active{text-decoration:none;background-image:none;outline:0;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.1)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;filter:grayscale(1);-webkit-box-shadow:none;box-shadow:none;opacity:.5;-webkit-filter:grayscale(1)}.btn{color:#3c4353;background-color:#fff;border-color:#d6dae3}.btn.active,.btn.hover,.btn:active,.btn:focus,.btn:hover,.open .dropdown-toggle.btn{color:#3c4353;background-color:rgba(255,255,255,.8);border-color:#b8bfce}.btn.active,.btn:active,.open .dropdown-toggle.btn{background-color:#f2f2f2;background-image:none;border-color:#b8bfce}.btn.disabled,.btn.disabled.active,.btn.disabled:active,.btn.disabled:focus,.btn.disabled:hover,.btn[disabled],.btn[disabled].active,.btn[disabled]:active,.btn[disabled]:focus,.btn[disabled]:hover,fieldset[disabled] .btn,fieldset[disabled] .btn.active,fieldset[disabled] .btn:active,fieldset[disabled] .btn:focus,fieldset[disabled] .btn:hover{color:rgba(60,67,83,.3);background-color:#fff;border-color:#d6dae3}.btn-gray{color:#82899f;background-color:#f1f1f1;border-color:#f1f1f1}.btn-gray.active,.btn-gray.hover,.btn-gray:active,.btn-gray:focus,.btn-gray:hover,.open .dropdown-toggle.btn-gray{color:#82899f;background-color:rgba(241,241,241,.8);border-color:#d8d8d8}.btn-gray.active,.btn-gray:active,.open .dropdown-toggle.btn-gray{background-color:#e4e4e4;background-image:none;border-color:#d8d8d8}.btn-gray.disabled,.btn-gray.disabled.active,.btn-gray.disabled:active,.btn-gray.disabled:focus,.btn-gray.disabled:hover,.btn-gray[disabled],.btn-gray[disabled].active,.btn-gray[disabled]:active,.btn-gray[disabled]:focus,.btn-gray[disabled]:hover,fieldset[disabled] .btn-gray,fieldset[disabled] .btn-gray.active,fieldset[disabled] .btn-gray:active,fieldset[disabled] .btn-gray:focus,fieldset[disabled] .btn-gray:hover{color:rgba(130,137,159,.3);background-color:#f1f1f1;border-color:#f1f1f1}.btn-primary{color:#fff;background-color:#0c64eb;border-color:transparent}.btn-primary.active,.btn-primary.hover,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.open .dropdown-toggle.btn-primary{color:#fff;background-color:rgba(12,100,235,.8);border-color:rgba(0,0,0,0)}.btn-primary.active,.btn-primary:active,.open .dropdown-toggle.btn-primary{background-color:#0b5ad3;background-image:none;border-color:rgba(0,0,0,0)}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{color:rgba(255,255,255,.3);background-color:#0c64eb;border-color:transparent}.btn-secondary{color:#fff;background-color:#16a8f8;border-color:transparent}.btn-secondary.active,.btn-secondary.hover,.btn-secondary:active,.btn-secondary:focus,.btn-secondary:hover,.open .dropdown-toggle.btn-secondary{color:#fff;background-color:rgba(22,168,248,.8);border-color:rgba(0,0,0,0)}.btn-secondary.active,.btn-secondary:active,.open .dropdown-toggle.btn-secondary{background-color:#079ced;background-image:none;border-color:rgba(0,0,0,0)}.btn-secondary.disabled,.btn-secondary.disabled.active,.btn-secondary.disabled:active,.btn-secondary.disabled:focus,.btn-secondary.disabled:hover,.btn-secondary[disabled],.btn-secondary[disabled].active,.btn-secondary[disabled]:active,.btn-secondary[disabled]:focus,.btn-secondary[disabled]:hover,fieldset[disabled] .btn-secondary,fieldset[disabled] .btn-secondary.active,fieldset[disabled] .btn-secondary:active,fieldset[disabled] .btn-secondary:focus,fieldset[disabled] .btn-secondary:hover{color:rgba(255,255,255,.3);background-color:#16a8f8;border-color:transparent}.btn-warning{color:#fff;background-color:#ff9800;border-color:transparent}.btn-warning.active,.btn-warning.hover,.btn-warning:active,.btn-warning:focus,.btn-warning:hover,.open .dropdown-toggle.btn-warning{color:#fff;background-color:rgba(255,152,0,.8);border-color:rgba(0,0,0,0)}.btn-warning.active,.btn-warning:active,.open .dropdown-toggle.btn-warning{background-color:#e68900;background-image:none;border-color:rgba(0,0,0,0)}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{color:rgba(255,255,255,.3);background-color:#ff9800;border-color:transparent}.btn-danger{color:#fff;background-color:#ff5d5d;border-color:transparent}.btn-danger.active,.btn-danger.hover,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,.open .dropdown-toggle.btn-danger{color:#fff;background-color:rgba(255,93,93,.8);border-color:rgba(0,0,0,0)}.btn-danger.active,.btn-danger:active,.open .dropdown-toggle.btn-danger{background-color:#ff4343;background-image:none;border-color:rgba(0,0,0,0)}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{color:rgba(255,255,255,.3);background-color:#ff5d5d;border-color:transparent}.btn-success{color:#fff;background-color:#00da88;border-color:transparent}.btn-success.active,.btn-success.hover,.btn-success:active,.btn-success:focus,.btn-success:hover,.open .dropdown-toggle.btn-success{color:#fff;background-color:rgba(0,218,136,.8);border-color:rgba(0,0,0,0)}.btn-success.active,.btn-success:active,.open .dropdown-toggle.btn-success{background-color:#00c178;background-image:none;border-color:rgba(0,0,0,0)}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{color:rgba(255,255,255,.3);background-color:#00da88;border-color:transparent}.btn-info{color:#0c64eb;background-color:#e9f2fb;border-color:transparent}.btn-info.active,.btn-info.hover,.btn-info:active,.btn-info:focus,.btn-info:hover,.open .dropdown-toggle.btn-info{color:#0c64eb;background-color:rgba(233,242,251,.8);border-color:rgba(0,0,0,0)}.btn-info.active,.btn-info:active,.open .dropdown-toggle.btn-info{background-color:#d3e5f7;background-image:none;border-color:rgba(0,0,0,0)}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{color:rgba(12,100,235,.3);background-color:#e9f2fb;border-color:transparent}.btn-link{padding-right:6px;padding-left:6px;font-weight:400;color:#3c4353;text-shadow:none;cursor:pointer;background:0 0;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover,.btn-link[disabled],fieldset[disabled] .btn-link{border-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link:focus,.btn-link:hover{color:#222;background:#f1f1f1;background:rgba(0,0,0,.075)}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#cbd0db;text-decoration:none}.btn-lg{padding:11px 16px;font-size:14px;line-height:18px;border-radius:4px}.btn-mini,.btn-sm{padding:3px 8px;font-size:12px;line-height:18px;border-radius:4px}.btn-mini,.btn-xs{padding:0 5px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.btn-wide{min-width:120px}.btn-limit{max-width:180px;padding-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.btn-limit>.caret{position:absolute;top:14px;right:8px}.btn-circle{border-radius:17px}.btn>.label-icon{top:3px;padding:3px;margin:-2px;background-color:rgba(0,0,0,.2);border-radius:12px}.btn>.label-icon>.icon{font-size:16px;line-height:18px}.btn>.icon+.text{margin-left:5px}.btn.btn-sm.btn-circle{border-radius:12px}.btn.btn-sm>.label-icon{top:2px;width:20px;height:20px;padding:1px;line-height:20px}.btn.btn-sm>.label-icon>.icon{position:relative;top:-1px;display:inline-block;font-size:14px;line-height:18px}.btn-icon-left{position:relative;padding-left:35px;overflow:hidden;text-align:right}.btn-icon-left>.label-icon{position:absolute;left:5px;margin:0}.btn-icon-left>.icon{position:absolute;top:0;bottom:0;left:0;display:block;width:30px;line-height:30px;color:#16a8f8;text-align:center;background:#e9f2fb}.btn-icon-left.btn-sm{padding-left:28px}.btn-icon-left.btn-sm>.label-icon{left:2px}.btn-icon-left.btn-sm>.icon{width:24px;line-height:24px}.btn-icon-right{position:relative;padding-right:35px;text-align:left}.btn-icon-right>.label-icon{position:absolute;right:5px;margin:0}.btn-icon-right.btn-sm{padding-right:28px}.btn-icon-right.btn-sm>.label-icon{right:2px}.btn-icon{min-width:32px;padding-right:0;padding-left:0}.btn-icon.btn-sm{width:24px;min-width:24px;height:24px}.btn-group{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group>.btn-group{float:left}.btn-group>.btn{border-radius:0}.btn-group>.btn:first-child{border-top-left-radius:2px;border-bottom-left-radius:2px}.btn-group>.btn:last-child{border-top-right-radius:2px;border-bottom-right-radius:2px}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.dropdown{float:left;margin-right:10px}.btn-toolbar>.btn-group:last-child,.btn-toolbar>.btn:last-child,.btn-toolbar>.dropdown:last-child{margin-right:0}.btn-toolbar>.divider{float:left;height:20px;margin:7px 5px 4px 10px;border-left:1px solid rgba(0,0,0,.1)}.btn-toolbar .space{float:left;min-height:1px;margin:0 10px 0 10px}.btn-toolbar .input-control{float:left;width:120px}.btn-toolbar .page-title{float:left;line-height:34px}.btn-toolbar .page-title .text{font-size:14px;font-weight:700}.btn-toolbar .page-title .label{top:-2px;margin-right:10px}.btn-toolbar .divider+.page-title{margin-left:15px}.btn-active-line{position:relative;font-weight:700;color:#0c64eb}.btn-active-line:after{position:absolute;right:5px;bottom:1px;left:5px;display:block;content:' ';border-bottom:2px solid #0c64eb}.btn-active-line:hover{color:#0c64eb}.btn-active-text .text{position:relative;top:-1px;display:inline-block;font-weight:700;color:#0c64eb}.btn-active-text .text:after{position:absolute;bottom:-5px;display:block;width:100%;content:' ';border-bottom:2px solid #0c64eb}.angle-btn{position:relative;padding:1px;background:#fff;border:1px solid #cbd0db;border-right:none}.btn-toolbar>.angle-btn{margin-right:8px}.angle-btn:after,.angle-btn:before{position:absolute;top:-1px;right:-8px;display:block;width:0;height:0;content:' ';border-color:transparent transparent transparent #cbd0db;border-style:solid;border-width:17px 0 17px 8px}.angle-btn:after{right:-7px;border-color:transparent transparent transparent #fff;border-width:17px 0 17px 8px}.angle-btn .btn{padding:6px;font-weight:700;background:#fff;border:none;border-radius:4px!important}.angle-btn .btn.btn-limit{padding-right:16px}.angle-btn .btn.btn-limit>.caret{right:4px}.angle-btn+.angle-btn{border-left:none}.angle-btn+.angle-btn>.btn-group:first-child{padding-left:8px}.angle-btn+.angle-btn>.btn-group:first-child:after,.angle-btn+.angle-btn>.btn-group:first-child:before{position:absolute;top:-2px;left:0;display:block;width:0;height:0;content:' ';border-color:transparent transparent transparent #cbd0db;border-style:solid;border-width:17px 0 17px 8px}.angle-btn+.angle-btn>.btn-group:first-child:after{left:-1px;border-color:transparent transparent transparent #fff;border-width:17px 0 17px 8px}.btn-toolbar>.angle-btn.active,.btn-toolbar>.angle-btn:last-child{border-color:#0c64eb}.btn-toolbar>.angle-btn.active .btn,.btn-toolbar>.angle-btn:last-child .btn{color:#0c64eb}.btn-toolbar>.angle-btn.active:after,.btn-toolbar>.angle-btn.active:before,.btn-toolbar>.angle-btn:last-child:after,.btn-toolbar>.angle-btn:last-child:before{border-color:transparent transparent transparent #0c64eb}.btn-toolbar>.angle-btn.active:after,.btn-toolbar>.angle-btn:last-child:after{border-color:transparent transparent transparent #fff}.btn-toolbar>.angle-btn+.angle-btn:last-child>.btn-group:first-child:after,.btn-toolbar>.angle-btn+.angle-btn:last-child>.btn-group:first-child:before,.btn-toolbar>.angle-btn.active+.angle-btn>.btn-group:first-child:after,.btn-toolbar>.angle-btn.active+.angle-btn>.btn-group:first-child:before{border-color:transparent transparent transparent #0c64eb}.btn-toolbar>.angle-btn+.angle-btn:last-child>.btn-group:first-child:after,.btn-toolbar>.angle-btn.active+.angle-btn>.btn-group:first-child:after{border-color:transparent transparent transparent #fff}.btn-toolbar>.angle-btn.active+.angle-btn,.btn-toolbar>.angle-btn.normal{border-color:#cbd0db}.btn-toolbar>.angle-btn.active+.angle-btn .btn,.btn-toolbar>.angle-btn.normal .btn{color:#3c4353}.btn-toolbar>.angle-btn.active+.angle-btn:after,.btn-toolbar>.angle-btn.active+.angle-btn:before,.btn-toolbar>.angle-btn.normal:after,.btn-toolbar>.angle-btn.normal:before{border-color:transparent transparent transparent #cbd0db}.btn-toolbar>.angle-btn.active+.angle-btn:after,.btn-toolbar>.angle-btn.normal:after{border-color:transparent transparent transparent #fff}.btn-toolbar>.angle-btn.active+.angle-btn>.btn-group:first-child:before,.btn-toolbar>.angle-btn.normal>.btn-group:first-child:before{border-color:transparent transparent transparent #cbd0db!important}.nav>li>.btn.btn-primary{color:#fff}.nav>li>.btn.btn-primary:focus,.nav>li>.btn.btn-primary:hover{background:rgba(12,100,235,.8)}.label{position:relative;display:inline-block;padding:3px 5px;font-size:12px;font-weight:400;vertical-align:middle;border-radius:2px}.label+.label{margin-left:4px}.label-pale{background:#bed8f3!important}.label-badge{border-radius:9px}.label-light{color:#3c4353;background-color:#ddd}.label-primary{background:#0c64eb!important}.label-gray{color:#878da0;background:#e8ebef}.label-outline.label-danger{color:#ff5d5d;background:#ffebee;border-color:rgba(255,93,93,.25)}.label-outline.label-light{color:#838a9d;background:#f2f5fb;border-color:#e1e5ee}.label-primary.label-outline{background:#e9f2fb!important;border-color:rgba(12,100,235,.25)}.label-outline.label-success{background:#e8f5e9;border-color:rgba(0,218,136,.25)}.label-dot{position:relative;top:-1px;padding:0;border-radius:50%}.label-dot+.status-text{display:inline-block;margin-left:5px}.label-icon{min-width:18px;padding:0;line-height:18px;border-radius:10px}.label-id{display:inline-block;min-width:30px;padding:0 5px;font-size:12px;line-height:16px;color:#838a9d;text-align:center;vertical-align:middle;background-color:transparent;border:1px solid #838a9d;border-radius:2px}.pri-1,.todo-pri-1{color:#ff5d5d}[class*=" status-"],[class^=status-]{color:#3c4353}.status-changed,.status-delayed,.status-doing,.status-fail,.status-investigate{color:#ff5d5d}.status-changed>.label-dot,.status-delayed>.label-dot,.status-doing>.label-dot,.status-fail>.label-dot,.status-investigate>.label-dot{background-color:#ff5d5d}.status-wait{color:#838a9d}.status-wait>.label-dot{background-color:#7ec5ff}.status-unclosed{color:#838a9d}.status-unclosed>.label-dot{background-color:#0c64eb}.status-done,.status-normal,.status-pass,.status-resolved{color:#43a047}.status-done>.label-dot,.status-normal>.label-dot,.status-pass>.label-dot,.status-resolved>.label-dot{background-color:#00da88}.status-postpone{color:#838a9d}.status-postpone>.label-dot{background-color:#ff5d5d}.status-blocked{position:relative;left:-5px;display:inline-block;padding:0 5px;line-height:20px;color:#3c4353;background:#fff3e0;border-radius:10px}.status-blocked>.label-dot{background-color:#ff9800}.status-pause,.status-suspended{color:#ff9800}.status-pause>.label-dot,.status-suspended>.label-dot{background-color:#ff9800}.status-active.status-bug,.status-draft{color:#8666b8}.status-active.status-bug>.label-dot,.status-draft>.label-dot{background-color:#8666b8}.status-closed,.status-terminate{color:#838a9d}.status-closed>.label-dot,.status-terminate>.label-dot{background-color:#838a9d}.status-cancel{color:#838a9d}.status-cancel>.label-dot{background-color:#cbd0db}.label-pri{display:inline-block;min-width:20px;max-width:67px;height:20px;padding:0 4px;overflow:hidden;line-height:17px;color:#838a9d;text-align:center;text-overflow:ellipsis;white-space:nowrap;vertical-align:middle;border:2px solid #838a9d;border-radius:10px}.label-selector>.label-pri,[class*=label-pri-]{color:#158af1;border-color:#2098ee}.label-pri-1,.label-selector>.label-pri[data-value="1"]{color:#d50000;border-color:#d50000}.label-pri-2,.label-selector>.label-pri[data-value="2"]{color:#ff9800;border-color:#ff9800}.label-pri-3,.label-selector>.label-pri[data-value="3"]{color:#2098ee;border-color:#2098ee}.label-pri-4,.label-selector>.label-pri[data-value="4"]{color:#009688;border-color:#009688}.label-pri-5,.label-selector>.label-pri[data-value="5"]{color:#838a9d;border-color:#838a9d}.label-pri-0,.label-selector>.label-pri.active[data-value="0"]{color:#d5d9df;border-color:#d5d9df}.label-severity{position:relative;display:inline-block;width:24px;height:20px;text-align:center;vertical-align:middle}.label-severity:before{position:absolute;top:-3px;left:0;z-index:0;display:block;font-family:ZentaoIcon;font-size:18px;font-size:24px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;color:inherit;text-transform:none;content:"\e973";speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.label-severity:after{position:absolute;top:7px;left:0;z-index:1;display:block;width:24px;font-size:12px;line-height:12px;text-align:center;content:attr(data-severity)}.label-severity[data-severity],.label-severity[data-value]{color:#ccc}.label-severity[data-severity="0"],.label-severity[data-value="0"]{color:#ccc}.label-severity[data-severity="0"]:after,.label-severity[data-value="0"]:after{display:none}.label-severity[data-severity="1"],.label-severity[data-value="1"]{color:#c62828}.label-severity[data-severity="2"],.label-severity[data-value="2"]{color:#e65100}.label-severity[data-severity="3"],.label-severity[data-value="3"]{color:#ffa000}.label-severity[data-severity="4"],.label-severity[data-value="4"]{color:#fdd835}.label-severity[data-severity="5"],.label-severity[data-value="5"]{color:#8bc34a}.label-severity-custom[data-severity]{color:#d5d9df}.label-severity-custom[data-severity="1"]{color:#c62828}.label-severity-custom[data-severity="2"]{color:#e65100}.label-severity-custom[data-severity="3"]{color:#ffa000}.label-severity-custom[data-severity="4"]{color:#fdd835}.label-severity-custom[data-severity="5"]{color:#cddc39}.label-selector>.label{display:inline-block;min-width:24px;height:24px;padding:0 5px;font-size:14px;line-height:20px;text-align:center;cursor:pointer;background:0 0;border:2px solid #d5d9df;border-radius:15px}.label-selector>.label+.label{margin-left:10px}.label-selector>.label.empty{border-color:transparent}.label-selector>.label.label-severity{font-size:12px;line-height:28px;border-color:transparent}.label-selector>.label.label-severity:before{top:-2px;left:-2px}.label-selector>.label.label-severity:after{display:none}.label-selector>.label.label-severity.active{background:0 0;filter:none;-webkit-filter:none}.checkbox-primary,.radio-primary{position:relative;display:block;vertical-align:middle}.checkbox-primary.inline-block,.radio-primary.inline-block{display:inline-block}.checkbox-primary.inline-block+.inline-block,.radio-primary.inline-block+.inline-block{margin-left:15px}.checkbox-primary>input,.radio-primary>input{position:absolute;top:0;left:0;z-index:3;width:100%;height:100%;margin:0;opacity:0}.checkbox-primary>label,.radio-primary>label{display:block;height:20px;padding-left:30px;margin:0;font-weight:400;line-height:20px;cursor:pointer}.checkbox-primary>label:after,.checkbox-primary>label:before,.radio-primary>label:after,.radio-primary>label:before{position:absolute;top:1px;right:0;left:0;display:block;width:18px;height:18px;line-height:18px;text-align:center;content:' ';border-radius:3px}.checkbox-primary>label:after,.radio-primary>label:after{z-index:1;border:2px solid #eee;border-color:rgba(0,0,0,.15);-webkit-transition:.4s cubic-bezier(.175,.885,.32,1);-o-transition:.4s cubic-bezier(.175,.885,.32,1);transition:.4s cubic-bezier(.175,.885,.32,1);-webkit-transition-property:border,background-color;-o-transition-property:border,background-color;transition-property:border,background-color}.checkbox-primary>label:before,.radio-primary>label:before{top:3px;z-index:2;font-family:ZentaoIcon;font-size:18px;font-size:14px;font-style:normal;font-weight:400;font-weight:900;font-variant:normal;line-height:1;text-transform:none;content:"\e5ca";opacity:0;-webkit-transition:.2s cubic-bezier(.175,.885,.32,1);-o-transition:.2s cubic-bezier(.175,.885,.32,1);transition:.2s cubic-bezier(.175,.885,.32,1);-webkit-transition-property:opacity,-webkit-transform;-o-transition-property:opacity,-o-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform,-o-transform;-webkit-transform:scale(0);-ms-transform:scale(0);-o-transform:scale(0);transform:scale(0);speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.checkbox-primary.checked>label:after,.checkbox-primary>input:checked+label:after,.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{background-color:#00da88;border-color:#00da88;border-width:4px}.checkbox-primary.checked>label:before,.checkbox-primary>input:checked+label:before,.radio-primary.checked>label:before,.radio-primary>input:checked+label:before{color:#fff;opacity:1;-webkit-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}.checkbox-primary.focus>label:after,.checkbox-primary>input:focus+label:after,.radio-primary.focus>label:after,.radio-primary>input:focus+label:after{border-color:#00da88;-webkit-box-shadow:0 0 0 3px rgba(0,218,136,.2);box-shadow:0 0 0 3px rgba(0,218,136,.2)}.checkbox-primary:hover>label:after,.radio-primary:hover>label:after{border-color:#00da88}.checkbox-primary.checkbox-right>label,.radio-primary.checkbox-right>label{padding:0 30px 0 0}.checkbox-primary.checkbox-right>label:after,.checkbox-primary.checkbox-right>label:before,.radio-primary.checkbox-right>label:after,.radio-primary.checkbox-right>label:before{right:0;left:auto}.checkbox-primary input:disabled+label:after,.checkbox-primary.disabled>label:after,.radio-primary input:disabled+label:after,.radio-primary.disabled>label:after{background-color:#e5e5e5!important;border-color:#bbb!important}.checkbox-primary input:disabled:checked+label:after,.checkbox-primary.checked.disabled>label:after,.radio-primary input:disabled:checked+label:after,.radio-primary.checked.disabled>label:after{background-color:#bbb!important}.radio-primary>label:after{border-radius:50%}.radio-primary>label:before{top:7px;left:6px;width:6px;height:6px;content:' ';border:none;border-radius:50%}.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{background-color:transparent;border-color:#00da88;border-width:2px}.radio-primary.checked>label:before,.radio-primary>input:checked+label:before{background-color:#00da88}.radio-primary input:disabled:checked+label:after,.radio-primary.checked.disabled>label:after{background-color:transparent;border-color:#bbb}.radio-primary input:disabled:checked+label:before,.radio-primary.checked.disabled>label:before{background-color:#bbb}.panel{position:relative;margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045);box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045)}.panel-body{padding:20px}.panel-body.has-table{padding:10px}.panel-body.has-table .table{margin-bottom:0;table-layout:fixed}.panel-heading{padding:12px 48px 12px 20px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading+.panel-body{padding-top:0}.panel-title{font-size:14px;font-weight:700;line-height:20px}.panel-title .label{top:-1px}.panel-actions{position:absolute;top:0;right:0;padding:7px 8px}.panel:hover .panel-actions{z-index:10}.panel-actions>li>a{display:inline-block;min-width:30px;padding:0 5px;line-height:30px;color:#a6aab8}.panel-actions>li>a:hover{color:#3c4353;text-decoration:initial;background-color:#f1f1f1}.panel-actions .btn-icon{color:#a6aab8}.panel-actions .btn.text-primary{color:#0c64eb}.panel .empty-tip{padding:30px 10px 50px;font-size:14px;color:#838a9d;text-align:center}.progress-text-left{position:relative;margin:7px 0;margin-left:35px;overflow:visible}.progress-text-left .progress-text{position:absolute;top:-7px;left:-35px;display:block;width:35px;height:20px;padding-right:5px;line-height:20px;color:#838a9d;text-align:right}.chart-color{width:20px}.chart-color-dot{display:inline-block;width:10px;height:10px;border-radius:50%}.chart-row{margin-top:10px}.chart-row+.chart-row{padding-top:10px;border-top:1px solid #eee}.chart-wrapper{padding:10px 5px;background:#eee}.chart-wrapper>h4{margin:5px 0 10px}.table-wrapper{max-height:250px;overflow:auto}.table-wrapper .table{margin:0}.progress-pie{position:relative}.progress-pie .progress-info{position:absolute;top:0;left:0;width:100%;height:100%;padding-top:25px;text-align:center}.progress-pie .progress-info>small{display:block;line-height:14px;color:#a6aab8}.progress-pie .progress-info>strong{display:block;font-size:36px;line-height:40px}.progress-pie .progress-info>strong>small{font-size:20px}.progress-pie-120 .progress-info{padding-top:30px}.progress-pie-120 .progress-info>small{line-height:18px}.progress-pie-50 .progress-info{padding-top:4px}.progress-pie-50 .progress-info>strong{font-size:20px;font-weight:400}.progress-pie-50 .progress-info>strong>small{font-size:14px}.progress-pie[data-value="100"] .progress-info>strong{-webkit-transform:scale(.7);-ms-transform:scale(.7);-o-transform:scale(.7);transform:scale(.7)}.status-bars{display:table;width:100%;height:140px;padding:5px;padding-top:50px;margin:0;overflow:hidden}.status-bars>li{position:relative;display:table-cell;text-align:center;vertical-align:bottom}.status-bars .bar{position:absolute;bottom:20px;left:50%;display:block;width:10px;margin-left:-5px;background:#0c64eb;border-radius:5px 5px 0 0}.status-bars .bar:after{position:absolute;right:-50px;bottom:0;left:-50px;display:block;height:1px;content:' ';background:#eee}.status-bars .title{font-size:12px;font-weight:400;color:#a6a8b6}.status-bars .value{position:relative;top:-20px;left:-20px;display:inline-block;width:50px;font-size:16px;font-weight:700;text-align:center}.status-bars-h{display:block;padding-right:50px;padding-left:60px;list-style:none}.status-bars-h>li{position:relative;height:40px;border-left:1px solid #eee}.status-bars-h .bar{position:relative;top:15px;display:block;height:10px;line-height:20px;background:#0c64eb;border-radius:0 5px 5px 0}.status-bars-h .title{position:absolute;top:-5px;left:-60px;width:60px;padding-right:10px;font-size:12px;color:#a6a8b6;text-align:right}.status-bars-h .value{position:absolute;top:-5px;right:-50px;display:block;width:40px;font-size:14px;font-weight:700;text-align:left;white-space:nowrap}.messager{border-radius:4px;-webkit-box-shadow:0 4px 16px rgba(0,0,0,.2),0 2px 8px rgba(0,0,0,.1);box-shadow:0 4px 16px rgba(0,0,0,.2),0 2px 8px rgba(0,0,0,.1)}.messager-content{padding:18px 20px;font-size:18px;line-height:30px}.messager-content>.icon{font-size:28px;line-height:30px}.messager-actions{vertical-align:middle}.messagger-zt{color:#3c4353;background-color:#fff}.messagger-zt .messager-content>.icon{color:#0c64eb}.messagger-zt .messager-actions>.action{color:#838a9d}.messagger-zt.messager-success .messager-content>.icon{color:#00da88}.messagger-zt.messager-danger .messager-content>.icon{color:#ff5d5d}.messagger-zt.messager-warning .messager-content>.icon{color:#ff9800}.messagger-zt.messager-info .messager-content>.icon{color:#2196f3}.tree{padding-left:0;overflow:hidden}.tree ul{position:relative;display:none;padding-left:0}.tree li{position:relative;padding:2px 0 2px 15px;list-style:none}.tree li.heading{padding-left:5px;color:#3c4353}.tree li>a{display:block;max-width:90%;padding:2px 6px;color:#3c4353;word-break:break-all}.tree li>a:hover{color:#3c4353}.tree li>a.tree-toggle:hover{background:0 0}.tree li.active>a{position:relative;font-weight:700;color:#0c64eb}.tree li>.list-toggle{position:absolute;top:1px;left:1px;z-index:10;width:20px;font-size:14px;line-height:22px;color:#cbd0db;text-align:center;cursor:pointer;-webkit-transition:all .2s;-o-transition:all .2s;transition:all .2s}.tree li>.list-toggle:before{content:"\f0da"}.tree li>.list-toggle:active,.tree li>.list-toggle:hover{color:#0c64eb}.tree li.has-active-item>.list-toggle{color:#3c4353}.tree li.has-list.open>ul{display:block}.tree li.has-list.open>.list-toggle{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.tree li.has-list.open:before{position:absolute;top:16px;bottom:-5px;left:10px;display:block;content:' ';border-left:1px solid #d8d8d8}.tree-actions{display:inline-block;margin-left:5px;vertical-align:middle}.tree-actions a{display:inline-block;margin-left:5px;font-size:13px;opacity:.6}.tree-actions a:hover{opacity:1}.tree li>.module-name{color:#3c4353;vertical-align:middle}.tree li>.module-name:hover{background-color:#f0f2f5}.tree li>.module-name:hover>a{color:#3c4353}.treemap-node-fold-icon:before{position:relative;left:-4px;min-width:18px}.dropdown-menu{padding:5px 0;border-color:rgba(0,0,0,.1)}.dropdown-menu>li{padding:0 10px}.dropdown-menu>li>a{padding:2px 10px;margin:5px 0;border-radius:3px}.dropdown-menu>li>a>.icon{position:relative;left:-5px;opacity:.5}.dropdown-menu>li.active>a,.dropdown-menu>li.selected>a{position:relative;color:#fff;background-color:#16a8f8}.dropdown-menu>li.selected>a:after{position:absolute;top:2px;right:4px;display:block;font-family:ZentaoIcon;font-size:18px;font-size:14px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;line-height:20px;text-transform:none;content:"\e5ca";speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.dropdown-menu>li.divider{margin:10px}.dropdown-submenu>a:after{margin-right:-5px}.dropdown-submenu>.dropdown-menu.pull-left{margin-left:-1px}.dropdown-submenu:focus>a,.dropdown-submenu:hover>a{color:#3c4353;background-color:#e9f2fb}.dropdown-submenu:hover>a:after{border-left-color:#0c64eb}.dropdown-submenu>a:hover:after{border-left-color:#fff}.pager .btn{padding:3px 10px}.pager .btn .caret{opacity:.7}.pager>li>.pager-label{padding:2px;line-height:20px}.pager>li>.pager-item{min-width:20px;padding:1px;margin:2px 0;font-size:16px;line-height:20px;text-align:center;background:0 0;border-color:transparent}.pager>li>.pager-item:hover{background-color:rgba(0,0,0,.1)}.pager>li>.pager-item>.icon{position:relative;top:-1px}.pager>li>.btn:hover,.pager>li>a:hover{background:rgba(0,0,0,.1)}.pager>li.disabled>a.pager-item{background:0 0;border-color:transparent;opacity:.5}.pager>li.active>a{background-color:#16a8f8}.pager>li .btn-group .btn{padding:1px;margin:2px 0;border-radius:4px}.pager .dropdown-menu{width:200px}.pager .dropdown-menu>li{float:left;width:33.333333%}.modal-dialog{width:900px;max-width:1360px;border:none;border-radius:0;-webkit-box-shadow:0 0 20px 0 rgba(0,0,0,.25);box-shadow:0 0 20px 0 rgba(0,0,0,.25)}.modal-dialog.modal-md{width:700px}.modal-dialog.modal-xs{width:400px}.modal-dialog.modal-sm{width:500px}.modal-dialog.modal-lg{width:1200px}.modal-dialog.modal-fullscreen{position:fixed;max-width:initial}.modal-header{padding:20px 0;margin:0 20px}.modal-header>.close{color:#838a9d;text-shadow:0 1px 0 rgba(255,255,255,.85);opacity:1}.modal-header>.close:hover{color:#222}.modal-footer{padding:20px 0;margin:0 20px}.modal-title{font-size:16px;font-weight:400;line-height:20px}.modal-actions{position:absolute;top:16px;right:16px}.modal-actions .divider{position:relative;top:5px;display:inline-block;width:0;height:20px;margin:0 10px;border-left:#eee 1px solid}.modal-actions>.dropdown{display:inline-block}.modal-body{padding:20px}.modal-iframe .modal-body>iframe{border-radius:0}.modal.fade .modal-dialog{-webkit-transform:translate(0,-3%);-ms-transform:translate(0,-3%);-o-transform:translate(0,-3%);transform:translate(0,-3%)}.modal.fade.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-simple .modal-footer{padding-top:0;border-top:none}.modal-iframe .modal-header{position:relative;z-index:10;min-height:0;padding:0;border:none}.modal-iframe .modal-title{display:none}.modal-iframe .modal-header .close{position:absolute;top:12px;right:10px;font-size:32px;font-weight:200}.modal-iframe .modal-dialog{overflow:hidden}.modal-inverse .modal-header>.close{color:rgba(255,255,255,.7);text-shadow:none}.modal-inverse .modal-header>.close:hover{color:#fff}.modal-scroll-inside>.modal-dialog{max-height:100%}.hide-modal-close .modal-iframe .modal-header .close{display:none}.tile{text-align:center}.tile-title{line-height:20px;color:#3c4353}.tile-amount{font-size:32px;font-weight:700;line-height:56px}.timeline>li{position:relative;list-style:none}.timeline>li:before,.timeline>li>a:after,.timeline>li>div:after{position:absolute;left:-20px;display:block;width:15px;height:15px;content:' ';border-radius:50%}.timeline>li:before{top:12px;left:-16px;z-index:3;width:7px;height:7px;background-color:#cbd0db;border:none;border:1px solid #cbd0db}.timeline>li>a:after,.timeline>li>div:after{top:11px;left:-17px;z-index:3;width:9px;height:9px;background-color:#0c64eb;border-radius:50%;opacity:0}.timeline>li+li:after{position:absolute;top:-12px;bottom:20px;left:-13px;z-index:1;display:block;content:' ';border-left:1px solid #eee}.timeline>li.active>a:after,.timeline>li.active>div:after{opacity:1}.timeline>li.active:before{top:8px;left:-20px;width:15px;height:15px;background-color:rgba(12,100,235,.2);border:none}.timeline>li>a,.timeline>li>div{display:block;padding:5px;line-height:20px}.timeline>li.active>a{color:#3c4353}.timeline-tag{position:absolute;top:5px;left:-115px;font-size:12px}.timeline-tag-left{padding-left:115px}.timeline-sm{font-size:12px}.timeline-sm>li:before,.timeline-sm>li>a:after,.timeline-sm>li>div:after{top:10px;left:-20px;width:11px;height:11px}.timeline-sm>li.active:before,.timeline-sm>li:before{top:10px;left:-18px;width:11px;height:11px;background:0 0;border:1px solid #eee}.timeline-sm>li>a,.timeline-sm>li>div{line-height:20px}.timeline-sm>li>a:after,.timeline-sm>li>div:after{top:13px;left:-15px;width:5px;height:5px}.form-control{-webkit-box-shadow:none;box-shadow:none}.form-horizontal .form-group>label{padding-right:0}.form-actions{margin-top:20px;margin-bottom:0}.form-actions .btn{margin-right:10px}form label{font-weight:400;color:#3c4353}.form-group .btn+.btn{margin-left:5px}.table-form{margin-bottom:0;table-layout:fixed}.table-form>thead>tr>th.required:after{position:relative;top:3px;right:auto;left:4px;display:inline-block;vertical-align:middle}.table-form>tbody>tr>td,.table-form>tbody>tr>th,.table-form>tfoot>tr>td,.table-form>thead>tr>th{padding:7px;vertical-align:middle;border-bottom:none}.table-form>tfoot>tr>td{padding:20px 7px 10px}.table-form>tbody>tr>th{width:100px;font-weight:700;text-align:right}.table-form .input-group{width:100%}.table-form textarea.form-control{height:32px}.chosen-container-single .chosen-single{position:relative}.chosen-container-single .chosen-single>span{height:20px;line-height:20px;white-space:normal}.chosen-container-single .chosen-single div b{position:relative;top:1px;color:#cbd0db}.chosen-container-single .chosen-search:before{top:8px;right:15px}.chosen-container-multi .chosen-choices li.search-choice{font-size:13px;background:#eee;border-color:#cbd0db;-webkit-box-shadow:none;box-shadow:none}.chosen-container-single .chosen-search input[type=text]{height:30px;padding:3px 25px 3px 5px}.chosen-container-single .chosen-search{padding:3px 10px 0}.chosen-container-single .chosen-single{overflow:visible}.chosen-container-single .chosen-single>.chosen-search{top:-2px;right:-1px;bottom:-1px;left:-1px;display:none;height:auto;padding:0;opacity:0}.chosen-container-single .chosen-single>.chosen-search>input{height:31px;padding:5px 26px 5px 8px;font-size:inherit;line-height:20px}.chosen-container-single .chosen-single>.chosen-search:before{top:7px;right:8px}.chosen-container .chosen-results{padding:10px}.chosen-container .chosen-results>li{border-radius:4px}.chosen-container .chosen-results li.highlighted em{color:#fff}.table-responsive .chosen-container .chosen-results{max-height:200px}.datetimepicker{padding:10px}.datetimepicker td.day.today{background-color:#f77}.datetimepicker td.day.active{background-color:#16a8f8}.datetimepicker tfoot th,.datetimepicker thead th{color:#838a9d}.input-control .colorpicker{top:0;z-index:auto;opacity:1}.input-control .colorpicker .btn{padding:5px}.input-control .input-control-icon-right.btn{top:0}.colorpicker .dropdown-menu{min-width:232px;padding:5px 10px 10px 10px}.colorpicker .dropdown-menu>li{display:block;float:left;padding:5px}.colorpicker .dropdown-menu>li.heading{width:100%;margin-bottom:5px;font-size:16px;font-weight:700;text-align:left}.colorpicker .dropdown-menu>li.heading>.icon-close{position:relative;top:4px;float:right;cursor:pointer;opacity:.6}.colorpicker .dropdown-menu>li>a{position:relative;display:block;width:100%;height:100%;padding:0;margin:0;font-family:ZentaoIcon;font-size:18px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;text-align:center;text-transform:none;border:1px solid transparent;border-radius:50%;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.colorpicker .dropdown-menu>li>a:before{position:absolute;top:0;display:block;width:100%;height:20px;line-height:18px}.colorpicker .dropdown-menu>li>a:hover{-webkit-box-shadow:0 1px 4px rgba(0,0,0,.25);box-shadow:0 1px 4px rgba(0,0,0,.25)}.colorpicker .dropdown-menu>li>a.active:before{font-size:14px;content:"\e5ca"}.colorpicker .dropdown-menu>li>a.empty{color:#666;background:#fff}.colorpicker .dropdown-menu>li>a.empty:before{content:"\e90d"}.colorpicker .btn{position:relative}.colorpicker .btn .color-bar{position:absolute;right:5px;bottom:3px;left:5px;height:3px}.colorpicker .btn .color-bar[style*='background: ']+.ic{position:relative;top:-2px}.colorpicker .btn .ic{color:#cbd0db}.colorpicker .btn:hover .ic{color:#838a9d}.input-group .colorpicker{z-index:3}.input-group .chosen-container{display:table-cell}.input-group-addon{border-right-width:0;border-left-width:0}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin:0}.input-group-cell{display:table-cell;width:1%;padding:0 12px;white-space:nowrap;vertical-align:middle}.ke-container{border-color:#dcdcdc!important;border-radius:2px!important}.ke-container.focus{border-color:#0c64eb!important}.ke-toolbar{border-color:#dcdcdc!important}.required:after{top:6px;right:-10px;font-size:20px}td.required:after{top:12px;right:-5px}.input-group>.chosen-container.required:after,.input-group>.input-control.required:after{top:1px;right:1px;z-index:2}.input-group.required .required:after{display:none}.file-input{position:relative}.file-input .input-group{width:auto}.file-input .input-group>.input-group-cell:first-child{padding-right:0;padding-left:7px}.file-input input[type=file]{position:absolute;width:0;height:0;opacity:0}.file-input .file-title{display:inline-block;max-width:400px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:middle}.file-input .file-editbox{min-width:200px;max-width:100%}.file-input .file-size{display:inline-block;vertical-align:middle}.edit .file-input-empty,.file-input-edit,.file-input-normal,.normal .file-input-empty{display:none}.edit .file-input-edit,.normal .file-input-normal{display:block}.edit .file-input-edit.input-group,.normal .file-input-normal.input-group{display:table}.edit .file-input-normal{display:none!important}.file-input-normal>.input-group-btn{width:auto}.input-group .chosen-container-active .chosen-choices{border-color:#0c64eb!important}.input-group .chosen-container{min-width:100px}.input-group .input-group-btn .btn>.icon{line-height:17px}.os-mac select.form-control{-webkit-appearance:none;background-image:url(data:image/gif;base64,R0lGODlhCQAFAIAAAMvQ2////yH5BAEAAAEALAAAAAAJAAUAAAIKhH+BGYoNGWxgFgA7);background-image:url(data:image/gif;base64,R0lGODlhBwAEAIAAAMvQ2////yH5BAEAAAEALAAAAAAHAAQAAAIIhA+BGWoNWSgAOw==);background-repeat:no-repeat;background-position:right 5px top 12px;-moz-appearance:none}input::-webkit-contacts-auto-fill-button{position:absolute;right:0;display:none!important;pointer-events:none;visibility:hidden}.chosen-choices.has-error,.chosen-single.has-error,.form-control.has-error{border-color:#ff5d5d!important;-webkit-box-shadow:0 0 6px #ffc3c3!important;box-shadow:0 0 6px #ffc3c3!important}.popover-success.popover-form-result{font-weight:700;color:#fff;background:#00da88}.popover-success.popover-form-result.popover.right .arrow:after{border-right-color:#00da88}#mainHeader{height:50px;color:#fff;background:#1183fb -webkit-gradient(linear,right top,left top,from(#0a48d1),to(#1183fb));background:#1183fb -webkit-linear-gradient(right,#0a48d1 0,#1183fb 100%);background:#1183fb -o-linear-gradient(right,#0a48d1 0,#1183fb 100%);background:#1183fb linear-gradient(-90deg,#0a48d1 0,#1183fb 100%);background-color:#1183fb;border-top-color:#0c64eb;border-bottom-color:#e9f2fb}#mainHeader>.container{min-width:1200px;padding:0}#heading{position:absolute;top:10px;left:20px}@media (min-width:1400px){#heading{left:40px}}#heading h1{float:left;max-width:250px;margin:0;overflow:hidden;font-size:20px;font-weight:400;line-height:30px;text-overflow:ellipsis;white-space:nowrap}#heading h1 a{color:inherit;text-decoration:inherit}#heading h1.long-name{position:relative;top:-5px;display:table-cell;font-size:16px;line-height:20px;word-break:break-all;white-space:normal}#heading .btn{display:block;float:left;height:20px;padding:1px 5px;margin:0;margin:5px 0 0 10px;font-size:12px;font-weight:lighter;line-height:18px;background-color:rgba(255,255,255,.2);border:none}#heading .btn:hover{background-color:rgba(0,0,0,.1)}#navbar{margin:0 auto;font-size:15px;text-align:center}#navbar .nav{display:inline-block}#navbar .nav>li>a{padding:10px 15px;line-height:30px;color:#fff;border-radius:0;opacity:.9}@media (max-width:992px){#navbar .nav>li>a{padding:10px}}#navbar .nav>li>a:focus,#navbar .nav>li>a:hover{background:rgba(0,0,0,.15);opacity:1}#navbar .nav>li.active>a{font-weight:700;background:rgba(0,0,0,.1);opacity:1}#navbar .nav>li.divider{display:block;width:2px;height:20px;margin:15px;background:rgba(255,255,255,.4)}#navbar .nav>li.divider:last-child{display:none}#toolbar{position:absolute;top:12px;right:20px;font-size:12px;color:#fff}@media (min-width:1400px){#toolbar{right:40px}}#extraNav{text-align:right}#extraNav>li{display:inline-block;float:none;text-align:left}#extraNav>li>a{display:block;padding:0;color:#fff;opacity:.75}#extraNav>li>a:hover{text-decoration:unset;background-color:rgba(0,0,0,.1);opacity:1}#extraNav>li.open>a{background-color:rgba(0,0,0,.1)}#extraNav>li+li{margin-left:10px}#searchbox{position:relative;float:left;width:150px}#searchbox .input-group-btn .btn{position:relative;padding:1px 4px;font-size:12px;line-height:20px;color:#fff;background-color:rgba(255,255,255,.15);border-right:none;border-radius:2px}#searchbox .input-group-btn .btn:after{position:absolute;top:3px;right:0;bottom:3px;display:block;width:1px;content:' ';background-color:rgba(255,255,255,.15)}#searchbox .input-group-btn .btn:hover{background-color:rgba(255,255,255,.25)}#searchGo{position:absolute;top:0;right:-1px;z-index:9;min-width:24px;height:24px;padding:2px 3px;font-size:12px;line-height:20px;color:#fff;background-color:#6a9afd;border-radius:2px}#searchGo:hover{color:#fff!important;background-color:#0c64eb}#searchInput{height:24px;padding:2px 30px 2px 5px;color:#fff;text-align:left;background:rgba(255,255,255,.15);border-color:transparent;border-radius:0 12px 12px 0;-webkit-transition:background .2s,border .2s;-o-transition:background .2s,border .2s;transition:background .2s,border .2s}#searchInput:hover{background:rgba(255,255,255,.25)}#searchInput:focus{color:#333;background:#fff}#searchInput::-webkit-input-placeholder{font-size:12px;color:#fff;color:rgba(255,255,255,.5)}#searchInput::-moz-placeholder{font-size:12px;color:#fff;color:rgba(255,255,255,.5)}#searchInput::placeholder{font-size:12px;color:#fff;color:rgba(255,255,255,.5)}#searchInput:focus::-webkit-input-placeholder{color:#838a9d}#searchInput:focus::-moz-placeholder{color:#838a9d}#searchInput:focus::placeholder{color:#838a9d}#searchTypeMenu{min-width:220px}#searchTypeMenu>li{float:left;width:50%}#searchTypeMenu>li>a{margin:4px 0}#userNav{float:right;margin:0 -6px 0 10px}#userNav .avatar{display:inline-block;vertical-align:middle}#userNav>li>a{padding:2px 6px;margin-left:3px;line-height:20px;color:#fff;opacity:.9}#userNav>li>a .user-name{max-width:100px;overflow:hidden;font-size:15px;text-overflow:ellipsis;white-space:nowrap}#userNav>li>a:hover{background-color:rgba(0,0,0,.1);opacity:1}#userNav>li>a span{display:inline-block;vertical-align:middle}#userNav>li.open>a{background-color:rgba(0,0,0,.1)}#userNav>li.has-new-items>a{position:relative}#userNav>li.has-new-items>a:before{position:absolute;top:3px;right:-1px;display:block;width:4px;height:4px;content:' ';background-color:#ff5d5d;border-radius:50%}#userNav .dropdown-menu{min-width:150px}#userNav .dropdown-menu>li>a>.icon{position:absolute;top:10px;right:5px;display:block;width:20px;height:20px;line-height:20px;text-align:center}#userNav .user-profile-item>a{position:relative;padding-left:45px}#userNav .user-profile-item .avatar{position:absolute;top:6px;left:5px}#userNav .user-profile-name{font-size:16px}#userNav .user-profile-role{font-size:12px;color:#a9abb8}#userNav .no-role .user-profile-role{display:none}#userNav .no-role .user-profile-name{line-height:40px}#subHeader{min-height:50px;background:#fff}#subHeader>.container{padding:0 20px}@media (min-width:1400px){#subHeader>.container{padding:0 40px}}#pageNav{position:absolute;top:8px;left:0;left:20px}@media (min-width:1400px){#pageNav{left:40px}}#subNavbar{margin-top:5px;font-size:14px;text-align:center}#subNavbar .nav{display:inline-block}#subNavbar .nav>li>a{padding:8px 12px;line-height:24px;color:#3c4353}#subNavbar .nav>li>a:hover{color:#3c4353;background-color:rgba(0,0,0,.075)}#subNavbar .nav>li.active>a{font-weight:700;color:#0c64eb}#subNavbar .nav>li.divider{display:block;width:2px;height:20px;margin:9px 5px;background-color:rgba(0,0,0,.05)}#subNavbar .dropdown-menu{text-align:left}#pageActions{position:absolute;top:9px;right:20px}@media (min-width:1400px){#pageActions{right:40px}}.cell{padding:10px;background-color:#fff;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045);box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045)}.cell+.cell{margin-top:10px}.cell>.panel{margin:0;-webkit-box-shadow:none;box-shadow:none}.cell>.panel>.panel-heading{padding:5px 5px 10px}.cell>.panel>.panel-heading .panel-actions{padding:0}.cell>.panel>.panel-body{padding:5px}.cell>.table{margin:0}#main{padding:20px 0}#main>.container{padding:0 20px}@media (min-width:1400px){#main>.container{padding:0 40px}}#header,#header+#main{min-width:1200px}#mainMenu{margin:-10px 0 8px}.main-content{padding:20px;background-color:#fff;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045);box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045)}@media (min-width:1400px){.main-content>.center-block{max-width:1350px;padding:20px;border:1px solid #eee}.main-content>.center-block .main-header{background-color:#f1f1f1}}.main-content>h2{margin:0 0 20px}.main-content .cell{-webkit-box-shadow:none;box-shadow:none}.main-header{padding:5px 20px;border-bottom:1px solid #eee}.main-header:after,.main-header:before{display:table;content:" "}.main-header:after{clear:both}.main-header>h2{display:block;float:left;margin:0 10px 0 0;font-size:14px;line-height:34px}.main-header>h2 .label-id{margin-right:5px}.main-header>h2 small{font-size:14px;font-weight:400}.main-content .main-header{margin:-20px -20px 10px}.main-header .label{top:-1px}.main-row{display:table;width:100%;table-layout:fixed}.main-row>*{display:table-cell;vertical-align:top}@media (max-width:720px){.main-row{display:block}.main-row>*{display:block;width:100%}.main-row .side-col{width:100%;padding:0}.main-row .main-col+.side-col,.main-row .side-col+.main-col{margin-top:10px}}.main-row.hide-side .side-col{display:none}@media (min-width:720px){.main-content>.center-block .main-form{padding-right:20px}}#main .side-col .tabs{padding:5px}#main .side-col .nav-tabs{margin:0 5px 5px 5px;border-bottom:1px solid #ddd}#main .side-col .nav-tabs>li{margin:0}#main .side-col .nav-tabs>li+li{margin-left:10px}#main .side-col .nav-tabs>li>a{position:relative;padding:8px 5px;border:none;border-radius:2px!important}#main .side-col .nav-tabs>li.active>a{font-weight:700;color:#3c4353}#main .side-col .nav-tabs>li.active>a:before{position:absolute;right:0;bottom:-1px;left:0;display:block;height:2px;content:' ';background:#0c64eb}#main .side-col .tab-content .tab-pane table{border:none}.main-actions .btn-toolbar{display:inline-block;padding:4px 15px;color:#fff;pointer-events:auto;background:#717171;background-color:rgba(90,90,90,.85);border-radius:4px}.main-actions .btn-toolbar .divider{margin-right:15px;margin-left:15px;border-color:rgba(255,255,255,.1)}.main-actions .btn-toolbar .btn{padding-right:10px;padding-left:10px;margin-right:0;color:#fff;background-color:transparent;border:none}.main-actions .btn-toolbar .btn+.btn{margin-left:10px}.main-actions .btn-toolbar .btn:focus,.main-actions .btn-toolbar .btn:hover{background-color:rgba(255,255,255,.2)}.main-actions .btn-toolbar .btn.btn-icon{min-width:32px;padding-right:0;padding-left:0}.main-actions .btn-toolbar .btn+.btn-group{margin-right:0;margin-left:10px}#mainContent .main-col>.main-actions{padding:30px 0 0 0;text-align:center}#mainContent .main-col>.main-actions>.btn-toolbar{visibility:visible;opacity:1;-webkit-transition:opacity .2s;-o-transition:opacity .2s;transition:opacity .2s}#mainActions{position:fixed;top:0;right:0;bottom:0;left:0;text-align:center;pointer-events:none}#mainActions .btn-toolbar{position:relative;top:-90px}#mainActions .dropdown-menu{text-align:left}#mainActions>.container{height:100%}.main-actions-holder{display:none}.main-actions-fixed .main-actions-holder{display:block}.main-actions-fixed #mainContent .main-col>.main-actions{position:fixed;bottom:50px}.main-actions-fixed.body-modal #mainContent .main-col>.main-actions{bottom:20px}#nextPage,#prevPage{position:absolute;top:50%;left:-10px;width:40px;height:60px;padding:10px 0;margin-top:-30px;line-height:40px;color:#fff;text-align:center;pointer-events:auto;background:#717171;background-color:rgba(90,90,90,.85);-webkit-box-shadow:0 2px 15px 2px rgba(0,0,0,.05);box-shadow:0 2px 15px 2px rgba(0,0,0,.05)}#nextPage:hover,#prevPage:hover{-webkit-box-shadow:0 2px 15px 2px rgba(0,0,0,.15);box-shadow:0 2px 15px 2px rgba(0,0,0,.15)}#nextPage>.icon,#prevPage>.icon{display:block;font-size:36px;line-height:36px}#nextPage{right:-10px;left:auto}@media (max-width:1800px){#prevPage{left:-3px}#nextPage{right:-3px}}#sidebarHeader{position:relative;float:left;width:180px;height:34px;padding-right:20px;margin-right:20px;background:#fff;border-left:4px solid #0c64eb;border-radius:4px 2px 2px 4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045);box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045)}#sidebarHeader:after{position:absolute;top:-1px;right:-8px;display:block;width:0;height:0;content:' ';border-color:transparent transparent transparent #fff;border-style:solid;border-width:18px 0 18px 8px}#sidebarHeader .title{padding:0 5px;overflow:hidden;font-size:14px;font-weight:700;line-height:32px;color:#0c64eb;text-align:center;text-overflow:ellipsis;white-space:nowrap}#sidebarHeader .title>a{position:absolute;top:0;right:0;width:20px;opacity:.5}#sidebarHeader .title>a:hover{opacity:1}#sidebar{position:relative;-webkit-transition:width .2s,padding .2s;-o-transition:width .2s,padding .2s;transition:width .2s,padding .2s}#sidebar>.sidebar-toggle{position:absolute;top:0;right:5px;bottom:0;width:10px;cursor:pointer;background:0 0;border-radius:5px;-webkit-transition:background-color .2s;-o-transition:background-color .2s;transition:background-color .2s}#sidebar>.sidebar-toggle>.icon{position:absolute;top:50%;left:-1px;width:12px;height:30px;margin-top:-10px;line-height:30px;color:#fff;text-align:center;background:#79cdfb;border-radius:6px}#sidebar>.sidebar-toggle>.icon:before{position:relative;left:-3px}#sidebar>.sidebar-toggle:before{position:absolute;top:0;right:-5px;bottom:0;left:-5px;display:block;content:' '}#sidebar>.sidebar-toggle:hover{background:rgba(0,0,0,.075)}#sidebar>.cell{position:relative;left:0;width:180px;-webkit-transition:left .2s,opacity .2s;-o-transition:left .2s,opacity .2s;transition:left .2s,opacity .2s}#sidebar.no-animate>.cell{display:none;-webkit-transition:none;-o-transition:none;transition:none}.hide-sidebar #sidebar>.cell{position:absolute;left:-200px;opacity:0}.hide-sidebar #sidebar{position:relative;width:0;padding:0}.hide-sidebar #sidebar>.sidebar-toggle>.icon:before{content:"\e315"}@media (max-width:720px){#sidebar>.cell{width:100%}}#queryBox{max-height:0;padding:0;overflow:hidden;-webkit-transition:cubic-bezier(.175,.885,.32,1) .2s;-o-transition:cubic-bezier(.175,.885,.32,1) .2s;transition:cubic-bezier(.175,.885,.32,1) .2s;-webkit-transition-property:padding,max-height,margin;-o-transition-property:padding,max-height,margin;transition-property:padding,max-height,margin}#queryBox>form{visibility:hidden;-webkit-transition:visibility .2s .2s;-o-transition:visibility .2s .2s;transition:visibility .2s .2s}#queryBox.loading{height:50px}#queryBox.show{min-height:110px;max-height:300px;margin-bottom:10px;overflow:visible}#queryBox.show>form{visibility:visible}#queryBox.divider{border-bottom:1px solid #eee}#main .querybox-toggle.querybox-opened{position:relative;color:#0c64eb;background:0 0;border:none}#main .querybox-toggle.querybox-opened:before{position:absolute;bottom:-14px;left:50%;width:0;height:0;content:' ';border-color:transparent transparent #fff transparent;border-style:solid;border-width:0 10px 10px 10px}#contentNav{padding:5px;background:#fff;border-bottom:1px solid #eee}#contentNav .nav>li>a{position:relative;padding:6px 10px;color:#838a9d}#contentNav .nav>li.active>a{font-weight:700;color:#0c64eb}#contentNav .nav>li.active>a:before{position:absolute;right:10px;bottom:3px;left:10px;display:block;height:2px;content:' ';background:#0c64eb}.body-modal{padding-bottom:0}.body-modal #main,.body-modal .container{min-width:0!important}.body-modal #main{padding:0}.body-modal .main-header{position:fixed;top:0;right:20px;left:20px;z-index:100;padding:13px 48px 13px 0;margin:0;background:#fff}.body-modal #mainContent{padding-top:70px}.body-modal .main-header>h2{max-width:100%;overflow:hidden;font-size:14px;text-overflow:ellipsis;white-space:nowrap}.body-modal .cell,.body-modal .main-content{-webkit-box-shadow:none;box-shadow:none}.body-modal #mainMenu{position:fixed;top:0;right:0;left:0;z-index:100;padding:12px 60px 12px 10px;margin:0;background:#fff}.body-modal #mainMenu>.btn-toolbar.pull-left.divider{display:none}.body-modal #mainMenu>.btn-toolbar{max-width:100%;margin-left:20px}.body-modal #mainMenu>.btn-toolbar>.divider:first-child{display:none}.body-modal #mainMenu>.btn-toolbar .page-title{max-width:100%;margin-left:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.body-modal #mainMenu+#mainContent.main-row{padding:60px 10px 0}.body-modal #mainMenu+#mainContent.main-row .cell{border:1px solid #efefef;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045);box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045)}.body-modal #mainActions{top:auto}.body-modal #mainActions .btn-toolbar{top:auto;bottom:10px}.body-modal.m-bug-view,.body-modal.m-story-view,.body-modal.m-task-view,.body-modal.m-testcase-view,.body-modal.m-testtask-view,.body-modal.m-todo-view{padding-bottom:20px;border-radius:3px}#tabsNav{position:relative}#tabsNav .tab-pane>.actions{position:absolute;top:-8px;right:0}#tabsNav .tab-pane>.cell,#tabsNav .tab-pane>.main-table{padding:0;border:1px solid #cbd0db;border-top:none;border-radius:0 0 4px 4px}#tabsNav .tab-pane>.cell .detail-title{padding-left:5px}#helpContent{position:fixed;top:50px;right:0;bottom:40px;left:0;display:none;background-color:#fff}#helpContent .load-error{display:none;padding:20px}#helpContent .show-error .load-error{display:block}.show-help-tab{overflow:hidden}.show-help-tab #main{display:none}.show-help-tab #helpContent{display:block}#navbar .nav>li>a.open-help-tab>.icon-close{display:none;opacity:.5}#navbar .nav>li>a.open-help-tab>.icon-close:hover{background:rgba(0,0,0,.1);opacity:1}.show-help-tab #navbar .nav>li>a.open-help-tab>.icon-close{display:inline}.text-middle td,.text-middle th{vertical-align:middle}.text-center td,.text-center th{text-align:center}.c-sm{width:40px}.c-id{width:90px}.c-id-sm{width:70px}.c-id-xs{width:55px}.c-date{width:100px}.c-num,.c-pri,.c-type{width:80px;overflow:hidden}.c-begin,.c-end,.c-time{width:65px}.c-hours{width:60px}.c-actions-1{width:50px}.c-actions-2{width:75px}.c-actions-3{width:102px}.c-actions,.c-actions-4{width:128px}.c-actions-5{width:155px}.c-actions-6{width:180px}.c-product,.c-project{width:180px}.c-plan{width:130px}.c-datetime{width:120px}.c-stage,.c-status,.c-user{width:80px}.c-side{width:200px;border-right:10px solid #efefef}.c-assign,.c-assignedTo,.c-openedBy{width:130px}.c-progress{width:155px}.c-assign,.c-assignedTo,.c-openedBy,.c-product,.c-project,.c-status,.c-url,.c-user{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}td.c-name,td.c-title{overflow:hidden;text-align:left!important;text-overflow:ellipsis;white-space:nowrap}td.c-actions{position:relative;padding-top:0;padding-bottom:0;overflow:hidden;white-space:nowrap;vertical-align:middle}td.c-actions .btn{display:inline-block;width:26px;padding:2px;overflow:hidden;line-height:20px;color:#16a8f8;background:0 0;border-color:transparent}td.c-actions .btn .icon{font-size:18px}td.c-actions .btn:hover{color:#0c64eb;background-color:#d3e5f7}td.c-actions .btn+.btn{margin-left:-4px}td.c-actions .btn-link{color:#3c4353;background:0 0}td.c-actions .btn-link:hover{color:#0c64eb;background:#e9f2fb}td.c-actions .more{position:absolute;top:50%;right:100%;display:none;padding-right:4px;padding-left:20px;margin-top:-15px;margin-right:-6px;white-space:nowrap;background-color:#fafafa;-webkit-transition:opacity .3s,margin.3s;-o-transition:opacity .3s,margin.3s;transition:opacity .3s,margin.3s}tr:hover td.c-actions .more{display:block}td:hover+td.c-actions>.more{margin-right:-15px;pointer-events:none;opacity:.15}tr[data-url]{cursor:pointer}.table tbody>tr>td,.table thead>tr>th{vertical-align:middle}.table tbody>tr>td.has-btn,.table thead>tr>th.has-btn{padding-top:1px;padding-bottom:1px;overflow:visible}.table tbody>tr>td .progress,.table thead>tr>th .progress{height:6px}.table .em,.table em{color:#3c4353}.table .divider{border-bottom:10px solid #efefef}.table .divider-top{border-top:10px solid #efefef}.table .btn-icon-left{max-width:100%;padding-left:20px;overflow:hidden;line-height:18px;text-align:left;text-overflow:ellipsis;background:0 0;border-color:#eaf3fc}.table .btn-icon-left>.icon{width:20px;font-size:14px;background:0 0!important;opacity:0}.table .btn-icon-left.btn-sm{height:26px;font-size:13px}.table .btn-icon-left:active,.table .btn-icon-left:focus,.table .btn-icon-left:hover{border-color:rgba(0,0,0,.2)}.table .btn-icon-left:active>.icon,.table .btn-icon-left:focus>.icon,.table .btn-icon-left:hover>.icon{opacity:1}.table .btn-icon-left>.text{padding-left:25px}.table thead>tr>th.c-assign,.table thead>tr>th.c-assignedTo{padding-left:29px}.table a{vertical-align:middle}.table tbody>tr:last-child{border-bottom:none}.table caption{margin-bottom:5px;background:#f1f1f1;border:none}.is-firefox .table .btn-icon-left>.icon{line-height:22px}.main-table{border-radius:4px}.main-table>.table,.main-table>.table-footer,.main-table>.table-header,.main-table>.table-responsive{-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045);box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045)}.main-table .table{font-size:13px;table-layout:fixed;background-color:#fff;border-radius:4px 4px 0 0}.main-table .table.table-lg{font-size:14px}.main-table .table .btn-icon-left{border-color:transparent}.main-table .table .btn-icon-left>.icon{background:0 0;border-radius:4px}.main-table .table .btn-icon-left.btn-sm{height:26px}.main-table .table .btn-icon-left:hover{border-color:rgba(0,0,0,.2)}.main-table .table .btn-icon-left:hover>.icon{background:#e9f2fb;border-radius:4px 0 0 4px}.main-table tbody>tr>td,.main-table thead>tr>th{min-height:36px;padding:2px 8px;line-height:30px}.main-table tbody>tr>td:first-child,.main-table thead>tr>th:first-child{padding-left:15px}.main-table thead>tr>th{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-bottom:1px solid #ddd}.main-table tbody>tr:nth-child(odd){background-color:#f5f5f5}.main-table tbody>tr:last-child>td{border-bottom:1px solid #ddd}.main-table tbody>tr>td{position:relative;border-bottom:none;border-bottom:1px solid #eee}.main-table tbody>tr>td .label{max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.main-table tbody>tr>td>a{line-height:28px;color:#0c60e1}.main-table tbody>tr>td>a:not(.btn):visited{color:#082999;opacity:.9}.main-table tbody>tr>td>a:hover,.main-table tbody>tr>td>a:visited:hover{color:#0c64eb}.main-table tbody>tr>td.c-actions{padding-right:10px}.main-table tbody>tr>td.c-side+td:before,.main-table tbody>tr>td:first-child:before{position:absolute;top:0;bottom:0;left:0;display:block;width:0;content:'';background:#0c64eb;opacity:0;-webkit-transition:.2s linear;-o-transition:.2s linear;transition:.2s linear;-webkit-transition-property:width,opacity,border-radius;-o-transition-property:width,opacity,border-radius;transition-property:width,opacity,border-radius}@-moz-document url-prefix(){.main-table tbody>tr>td.c-side+td:before,.main-table tbody>tr>td:first-child:before{bottom:-1px}}.main-table tbody>tr>td.c-side:before{display:none}.main-table tbody>tr{-webkit-transition:.2s cubic-bezier(.175,.885,.32,1);-o-transition:.2s cubic-bezier(.175,.885,.32,1);transition:.2s cubic-bezier(.175,.885,.32,1);-webkit-transition-property:background-color,-webkit-box-shadow;-o-transition-property:box-shadow,background-color;transition-property:background-color,-webkit-box-shadow;transition-property:box-shadow,background-color;transition-property:box-shadow,background-color,-webkit-box-shadow}.main-table tbody>tr:hover{background:#e9f2fb}.main-table .table-grouped tbody>tr:hover{background:#f2f7fd;-webkit-box-shadow:none;box-shadow:none}.main-table .table-grouped tbody>tr:hover td.c-actions .more{background:#f2f7fd}.main-table tbody>tr.checked{background:#fff3e0}.main-table tbody>tr.checked:hover{background:#ffebbc}.main-table tbody>tr.checked>td.c-side+td:before,.main-table tbody>tr.checked>td:first-child:before{width:4px;opacity:1}.main-table tbody>tr.checked.row-check-begin{border-top-left-radius:4px;border-top-right-radius:2px}.main-table tbody>tr.checked.row-check-begin>td:first-child:before{border-top-left-radius:4px}.main-table tbody>tr.checked.row-check-end{border-bottom-right-radius:2px;border-bottom-left-radius:4px}.main-table tbody>tr.checked.row-check-end>td:first-child:before{border-bottom-left-radius:4px}.main-table .checkbox-primary{display:inline-block;line-height:20px}.main-table .checkbox-primary label{margin:0}.main-table .table{margin:0}.table-header{padding:4px 0 12px}.table-header .table-statistic{color:#838a9d}.table-header .table-statistic strong{font-size:15px;color:#3c4353}.table-header .btn-toolbar{margin-top:-28px}.table-header.fixed-right{position:relative;z-index:5;padding:0}.table-header.fixed-right>.btn-toolbar{position:absolute;top:0;right:0;z-index:1;padding:1px;margin:0;background:#fff;border-radius:4px}.table-header.fixed-right>.btn-toolbar .btn{opacity:.65}.table-header.fixed-right>.btn-toolbar .btn:hover{opacity:1}.table-footer{position:relative;min-height:40px;padding:6px 15px;background:#fff;border-radius:0 0 4px 4px}.body-modal .table-footer{margin-bottom:20px}.talbe-lg+.table-footer{padding:11px 15px}.table-footer .btn-toolbar,.table-footer .checkbox-primary{float:left}.table-footer .btn-toolbar+.btn-toolbar{margin-left:8px}.table-footer .checkbox-primary{margin:5px 20px 0 0}.table-footer .checkbox-primary.checked label:after{border-color:#00da88!important}.table-footer .btn{padding:3px 10px;line-height:20px}.table-footer .pager{position:absolute;top:0;right:0;z-index:4;height:40px;padding:6px 5px 6px 10px;margin:0;background:#fff;opacity:1;-webkit-transition:opacity .4s;-o-transition:opacity .4s;transition:opacity .4s}.table-footer .pager:before{position:absolute;top:0;bottom:0;left:-50px;display:block;width:50px;content:' ';background:-webkit-gradient(linear,left top,right top,from(rgba(255,255,255,0)),to(#fff));background:-webkit-linear-gradient(left,rgba(255,255,255,0) 0,#fff 100%);background:-o-linear-gradient(left,rgba(255,255,255,0) 0,#fff 100%);background:linear-gradient(to right,rgba(255,255,255,0) 0,#fff 100%)}.table-footer .pager .btn,.table-footer .pager>li>.pager-item,.table-footer .pager>li>.pager-label{color:#838a9d;background:0 0;border-color:transparent}.table-footer .pager .btn,.table-footer .pager>li>a{border-radius:3px}.table-footer .pager .btn:hover,.table-footer .pager>li>a:hover{background:rgba(0,0,0,.1)}.table-footer .pager>li.disabled>a.pager-item{opacity:1}.table-footer .form-control{height:28px;padding:3px 8px}.table-footer .table-statistic{position:relative;z-index:2;float:left;padding-right:30px;line-height:28px;color:#838a9d;background:#fff}.table-footer .table-statistic:hover{z-index:4}.table-footer .table-statistic:hover+.pager{z-index:2;opacity:.3}.table-footer .btn-toolbar+.table-statistic{margin-left:10px}.table-footer .text{line-height:28px}.table-footer.fixed-footer{position:fixed;z-index:10;margin:0;background:rgba(75,75,75,.85);border-top-color:transparent}.table-footer.fixed-footer .checkbox-primary label{color:#fff}.table-footer.fixed-footer .checkbox-primary label:after{border-color:rgba(255,255,255,.8)}.table-footer.fixed-footer .table-statistic{color:#fff;background:#666}.table-footer.fixed-footer .pager{background:#666}.table-footer.fixed-footer .pager:before{background:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,0)),to(#666));background:-webkit-linear-gradient(left,rgba(0,0,0,0) 0,#666 100%);background:-o-linear-gradient(left,rgba(0,0,0,0) 0,#666 100%);background:linear-gradient(to right,rgba(0,0,0,0) 0,#666 100%)}.table-footer.fixed-footer .pager .btn,.table-footer.fixed-footer .pager>li>.pager-item,.table-footer.fixed-footer .pager>li>.pager-label{color:#fff}.table-footer.fixed-footer .pager .btn:hover,.table-footer.fixed-footer .pager>li>a:hover{background:rgba(255,255,255,.3)}.table-footer.fixed-footer .pager>li.disabled>a.pager-item{opacity:.5}.table-actions{width:0;height:28px;visibility:hidden;opacity:0;-webkit-transition:opacity cubic-bezier(.175,.885,.32,1) .8s;-o-transition:opacity cubic-bezier(.175,.885,.32,1) .8s;transition:opacity cubic-bezier(.175,.885,.32,1) .8s}.table-actions.show-always{width:auto;pointer-events:none;cursor:not-allowed;visibility:visible;opacity:.75}.has-row-checked .table-actions{width:auto;pointer-events:auto!important;cursor:default;visibility:visible;opacity:1}.table-lg tbody>tr>td{padding:9px 10px}.table-lg tbody>tr>td .btn+.btn{margin-left:5px}.table.has-sort-head thead>tr>th{padding-right:0}.table.has-sort-head thead>tr>th>a{position:relative;display:inline-block;padding-right:16px;color:#3c4353}.table.has-sort-head thead>tr>th>a:after,.table.has-sort-head thead>tr>th>a:before{position:absolute;top:0;right:0;font-family:ZentaoIcon;font-size:18px;font-size:14px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;line-height:30px;color:#3c4353;text-transform:none;content:"\f0de";opacity:.5;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.table.has-sort-head thead>tr>th>a:after{content:"\f0dd"}.table.has-sort-head thead>tr>th>a.sort-down,.table.has-sort-head thead>tr>th>a.sort-up{color:#000;text-decoration:none}.table.has-sort-head thead>tr>th>a:hover,.table.has-sort-head thead>tr>th>a:hover:after,.table.has-sort-head thead>tr>th>a:hover:before{color:#0c64eb;opacity:1}.table.has-sort-head thead>tr>th>a.sort-down:after,.table.has-sort-head thead>tr>th>a.sort-up:before{color:#000;opacity:1}.head-fixed .datatable-head-span .table,.table.fixed-header-copy{z-index:10;color:#fff;background:rgba(75,75,75,.85)}.head-fixed .datatable-head-span .table thead>tr>th,.table.fixed-header-copy thead>tr>th{color:#eee}.head-fixed .datatable-head-span .table thead>tr>th>a,.table.fixed-header-copy thead>tr>th>a{color:#eee}.head-fixed .datatable-head-span .table thead>tr>th>a:hover,.table.fixed-header-copy thead>tr>th>a:hover{color:#fff}.head-fixed .datatable-head-span .table thead>tr>th>a:after,.head-fixed .datatable-head-span .table thead>tr>th>a:before,.table.fixed-header-copy thead>tr>th>a:after,.table.fixed-header-copy thead>tr>th>a:before{color:#eee}.head-fixed .datatable-head-span .table thead>tr>th>a.sort-down,.head-fixed .datatable-head-span .table thead>tr>th>a.sort-down:after,.head-fixed .datatable-head-span .table thead>tr>th>a.sort-up,.head-fixed .datatable-head-span .table thead>tr>th>a.sort-up:before,.head-fixed .datatable-head-span .table thead>tr>th>a:hover,.head-fixed .datatable-head-span .table thead>tr>th>a:hover:after,.head-fixed .datatable-head-span .table thead>tr>th>a:hover:before,.table.fixed-header-copy thead>tr>th>a.sort-down,.table.fixed-header-copy thead>tr>th>a.sort-down:after,.table.fixed-header-copy thead>tr>th>a.sort-up,.table.fixed-header-copy thead>tr>th>a.sort-up:before,.table.fixed-header-copy thead>tr>th>a:hover,.table.fixed-header-copy thead>tr>th>a:hover:after,.table.fixed-header-copy thead>tr>th>a:hover:before{color:#fff}.head-fixed .datatable-head-span .table .checkbox-primary,.table.fixed-header-copy .checkbox-primary{z-index:1}.head-fixed .datatable-head-span .table .checkbox-primary label,.table.fixed-header-copy .checkbox-primary label{color:#fff}.head-fixed .datatable-head-span .table .checkbox-primary label:after,.table.fixed-header-copy .checkbox-primary label:after{border-color:rgba(255,255,255,.8)}.head-fixed .datatable-head-span .table .checkbox-primary.checked label:after,.table.fixed-header-copy .checkbox-primary.checked label:after{border-color:#00da88!important}.table-data{margin:0;table-layout:fixed}.table-data tbody>tr>td,.table-data tbody>tr>th{padding:6px 8px;word-break:break-all;border:none}.table-data tbody>tr>th{width:70px;padding-left:0;font-weight:400;color:#838a9d;text-align:right;vertical-align:middle}.table-data tbody>tr>td{padding-right:0}.table-data tbody>tr>td>a{color:#0c60e1}.table-data tbody>tr>td>a:not(.btn):visited{color:#082999}.table-data tbody>tr>td>a:hover,.table-data tbody>tr>td>a:visited:hover{color:#0c64eb}.table-data ol,.table-data ul{margin:0}.fixed-head-table{background:rgba(0,0,0,.7);border-bottom:1px solid #ddd}.fixed-head-table thead>tr>th{color:#fff}.table-empty-tip{padding:80px 10px;text-align:center;background:#fff}.not-firefox .table-grouped>tbody>tr>td.c-side{background:#fff!important}.table-grouped .group-toggle{cursor:pointer}.table-grouped .group-toggle.group-summary{border-top:10px solid #efefef}.table-grouped tbody>tr>td:first-child,.table-grouped thead>tr>th:first-child{padding-left:8px}.group-expand-all,.table-group-collapsed .group-collapse-all{display:none}.table-group-collapsed .group-expand-all{display:inline-block}.table-auto{table-layout:auto}.datatable .table>tbody>tr.checked.hover>td,.datatable .table>tbody>tr.checked>td.col-hover{background:#ffebbc}body.has-fixed-footer{padding-bottom:60px}.table.with-footer-fixed{margin-bottom:20px}.article-content{overflow:auto}.article-content img{margin-top:0}.article-content table{margin:10px 0}.article-content table td,.article-content table th{border:1px solid #cbd0db}.article-content table th{background:#eee}.article-content,.article>.content{word-wrap:break-word}.detail{padding:10px 0;margin:0 10px}.detail+.detail{padding-top:25px;border-top:1px solid #eee}.detail-title{font-size:14px;font-weight:700;line-height:20px}.detail-title>.pull-right{position:relative;top:-8px}h2.detail-title{margin:0;font-size:15px;font-weight:700}h2.detail-title .label,h2.detail-title .label-id{position:relative;top:-1px}.detail-content{padding:0;margin-top:10px}.detail-content em{font-style:normal;color:#3c4353}.detail-content .list-unstyled>li+li{margin-top:5px}.side-col .detail-content{padding-left:0}details.detail{padding:10px 0}details.detail summary{position:relative;cursor:pointer;outline:0}details.detail summary::-webkit-details-marker{display:none}details.detail summary:after{position:absolute;top:0;right:0;font-family:ZentaoIcon;font-size:18px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;text-transform:none;content:"\e316";opacity:.4;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}details.detail[open] summary:after{content:"\e313"}.files-list{padding-left:0;list-style:none}.files-list>li>a{display:block;line-height:24px}.files-list>li>a>.icon{display:inline-block;margin-right:5px;opacity:.7}.files-list>li>a:hover{color:#0c64eb}.files-list>li>.right-icon{opacity:0;-webkit-transition:opacity .2s;-o-transition:opacity .2s;transition:opacity .2s}.files-list>li:hover>.right-icon{opacity:1}.histories-list{padding-left:15px;margin-bottom:0}.histories-list .btn-mini{position:relative;top:1px}.histories-list>li{position:relative}.histories-list>li+li{margin-top:5px}.histories-list>li strong{color:#3c4353}.histories-list .comment,.histories-list .show-form .comment-edit-form{padding:5px 5px 5px 10px;margin:5px 0 0;background-color:rgba(0,0,0,.025);border:1px solid #eee}.histories-list .btn-edit-comment{position:absolute;top:28px;right:2px}.histories-list .comment-edit-form,.histories-list .show-form .btn-edit-comment,.histories-list .show-form .comment{display:none}.histories-list .show-form .comment-edit-form{display:block;padding:10px;border:1px solid #eee}.histories .btn-mini{width:16px;min-width:16px;height:16px;overflow:hidden;line-height:16px;color:#cbd0db;vertical-align:-8%;border-radius:1px}.histories .btn-mini>.icon{position:relative;top:-2px;left:-2px}.histories .btn-mini:focus,.histories .btn-mini:hover{color:#0c64eb;border-color:#0c64eb}.histories .show-changes .btn-expand>.icon:before{content:"\e926"}.histories .btn-strip{display:none}.histories .show-changes .btn-strip{display:inline-block}.history-changes{display:none;padding:5px;margin-bottom:-5px;margin-left:5px;font-size:12px;line-height:20px}.history-changes blockquote{padding:5px 5px 5px 10px;margin:5px 0 0;font-size:12px;background-color:rgba(0,0,0,.05);border-left:3px solid #eee}.history-changes blockquote.original{display:none}.show-changes .history-changes,.show-original .history-changes blockquote.original{display:block}.show-original .history-changes blockquote.textdiff{display:none}.syntaxhighlighter{overflow:auto}.search-list{min-width:200px;max-width:300px;padding:0}.search-list .search-box{float:none;width:auto;margin:10px}.search-list .search-box .icon-search{opacity:.5}.search-list .list-group{max-height:248px;padding:5px 10px;margin:5px 0}.dropup .search-list .search-box+.list-group{height:171px;padding-top:0}.search-list .search-input{height:30px}.search-list .input-control-icon-right{height:28px;line-height:28px}.list-group{overflow-y:auto}.list-group>a{display:block;padding:2px 10px 2px 5px;overflow:hidden;line-height:20px;text-overflow:ellipsis;white-space:nowrap;border-radius:4px}.list-group>a+a{margin-top:5px}.list-group>a>.icon{display:inline-block;margin-right:3px;opacity:.5}.list-group>a.selected{color:#e9f2fb;background-color:#0c64eb}.list-group>a.active{color:#0c64eb;background-color:#e9f2fb}.list-group>a.active:hover,.list-group>a:hover{color:#fff;background-color:#0c64eb}.list-group>.heading{padding:2px 5px;line-height:20px;color:#838a9d}.list-group>a+.heading{margin-top:4px}.dropup .search-box-sink{padding-top:5px;padding-bottom:45px}.dropup .search-box-sink .search-box{position:absolute;right:10px;bottom:10px;left:10px;margin:0}.dropup .search-box-sink .search-box+.list-group{height:auto;max-height:171px}#dropMenu>.search-box{max-width:188px}#dropMenu .input-control-icon-left{top:0}#dropMenu .list-group{width:199px;max-width:199px;max-height:300px;padding-top:0}#dropMenu .table-row .list-group{margin:0 -10px}#dropMenu .col-right{display:none}#dropMenu .col-left{width:100%}#dropMenu .col-left .list-group{max-height:250px;margin-bottom:35px}#dropMenu .col-footer{position:absolute;bottom:10px;left:10px;width:180px;padding-top:10px;padding-left:5px;margin-top:5px;border-top:1px solid #eee}#dropMenu .col-footer>a{opacity:.8}#dropMenu .col-footer>a:hover{opacity:1}#dropMenu.show-right-col{width:402px;max-width:402px}#dropMenu.show-right-col>.list-group{width:400px;max-width:400px}#dropMenu.show-right-col .col-left,#dropMenu.show-right-col .col-right{display:table-cell;width:50%}#dropMenu.show-right-col .col-left>.list-group{width:200px;max-width:200px;margin-right:0}#dropMenu.show-right-col .col-right{border-left:1px solid #eee}#dropMenu.show-right-col .col-right>.list-group{width:199px;max-height:285px;margin:0}#dropMenu.show-right-col .col-right>.list-group>a{opacity:.7}#dropMenu.show-right-col .col-right>.list-group>a:hover{opacity:1}#dropMenu.show-right-col .toggle-right-col>.icon-angle-right:before{content:"\e314"}.release-path{overflow:hidden}.release-line{display:table;width:100%;padding:0;table-layout:fixed}.release-line>li{display:table-cell;list-style:none}.release-line>li>a{position:relative;display:block}.release-line>li>a:before{position:absolute;left:0;display:block;width:13px;height:13px;content:' ';background:#fff;border:2px solid #838a9d;border-radius:50%}.release-line>li>a:after{position:absolute;left:5px;display:block;width:2px;height:30px;content:' ';background:#cbe0f6}.release-line>li>a>.icon{position:absolute;left:4px;font-size:24px}.release-line>li>a .title{display:block;font-size:14px;white-space:nowrap}.release-line>li>a .date,.release-line>li>a .info{display:block;max-height:18px;overflow:hidden;font-size:12px;color:#838a9d;text-overflow:ellipsis;white-space:nowrap}.release-line>li>a:hover:before{background-color:#e9f2fb}.release-line>li>a:hover:after{background-color:#838a9d}.release-line>li>a:hover .title{color:#0c64eb}.release-line>li>a:hover .date,.release-line>li>a:hover .info{color:#838a9d}.release-line>li:nth-child(odd){padding-top:80px;vertical-align:top}.release-line>li:nth-child(odd)>a{height:85px;padding-top:36px;border-top:5px solid #cbe0f6}.release-line>li:nth-child(odd)>a:before{top:-9px}.release-line>li:nth-child(odd)>a:after{top:6px}.release-line>li:nth-child(odd)>a>.icon{top:-26px}.release-line>li:nth-child(even){padding-bottom:80px;vertical-align:bottom}.release-line>li:nth-child(even)>a{height:85px;padding-bottom:36px;border-bottom:5px solid #cbe0f6}.release-line>li:nth-child(even)>a:before{bottom:-9px}.release-line>li:nth-child(even)>a:after{bottom:6px}.release-line>li:nth-child(even)>a>.icon{bottom:-2px}.release-line>li:last-child>a{border-color:transparent}.release-line>li.active>a:before{border-color:#0c64eb}.release-line>li+li>a>.date,.release-line>li+li>a>.info,.release-line>li+li>a>.title{position:relative;left:-36%}#footer{position:fixed;right:0;bottom:0;left:0;z-index:1010;height:40px;background:#fff;border-top:1px solid #eff1f7}#footer .breadcrumb{padding:10px 0;margin:0}#footer .breadcrumb>li{max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#footer .breadcrumb>.active,#footer .breadcrumb>li>a{color:#838a9e}#footer .breadcrumb>.active:hover,#footer .breadcrumb>li>a:hover{color:#16a8f8}#footer .breadcrumb>li+li:before{content:'>'}#footer>.container{padding:0 20px}@media (min-width:1400px){#footer>.container{padding:0 40px}}#poweredBy{position:absolute;top:4px;right:0;padding:5px 10px}#poweredBy .icon-zentao{color:#0097fd}#poweredBy a{color:#3c4353}#poweredBy a:hover{color:#0c64eb}#poweredBy a:hover .icon-zentao{color:#0c64eb}#poweredBy a.text-important{color:#bd7b46}#poweredBy a.text-important:hover{color:#ff5d5d}#poweredBy a.text-primary{color:#0c64eb}#poweredBy a.text-primary:hover{color:#16a8f8}#poweredBy #aiux{color:#cbd0dc}#noticeBox .alert{-webkit-box-shadow:rgba(0,0,0,.15) 0 3px 10px,rgba(0,0,0,.25) 0 3px 10px;box-shadow:rgba(0,0,0,.15) 0 3px 10px,rgba(0,0,0,.25) 0 3px 10px} \ No newline at end of file From 5b98a87dddaf2698d1e079abcd96bf6611773996 Mon Sep 17 00:00:00 2001 From: Yagami Date: Fri, 28 Dec 2018 10:57:41 +0800 Subject: [PATCH 051/442] * Finish task #7219. --- module/testcase/view/showimport.html.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/module/testcase/view/showimport.html.php b/module/testcase/view/showimport.html.php index d9a402d623..6c69823f53 100644 --- a/module/testcase/view/showimport.html.php +++ b/module/testcase/view/showimport.html.php @@ -19,11 +19,11 @@
      testcase->branch?> testcase->module?>testcase->module?> testcase->story?> testcase->pri?> testcase->type?>testcase->stage?>testcase->stage?> testcase->keywords?> testcase->precondition?> From 125fecef580de293bcd69a86e4e363a6997995f7 Mon Sep 17 00:00:00 2001 From: Yagami Date: Fri, 28 Dec 2018 14:27:38 +0800 Subject: [PATCH 052/442] * Fix task #5170. --- module/task/model.php | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/module/task/model.php b/module/task/model.php index 610b2766ef..636d929040 100644 --- a/module/task/model.php +++ b/module/task/model.php @@ -29,16 +29,16 @@ class taskModel extends model ->setDefault('project', (int)$projectID) ->setDefault('estimate, left, story', 0) ->setDefault('status', 'wait') - ->setDefault('estimate',(int)$this->post->estimate) + ->setDefault('estimate',(float)$this->post->estimate) ->setIF($this->post->estimate != false, 'left', $this->post->estimate) ->setIF($this->post->story != false, 'storyVersion', $this->loadModel('story')->getVersion($this->post->story)) ->setDefault('estStarted', '0000-00-00') ->setDefault('deadline', '0000-00-00') ->setIF(strpos($this->config->task->create->requiredFields, 'estStarted') !== false, 'estStarted', $this->post->estStarted) ->setIF(strpos($this->config->task->create->requiredFields, 'deadline') !== false, 'deadline', $this->post->deadline) - ->setIF($this->post->estimate !== 0, 'estimate', (int)$this->post->estimate) - ->setIF($this->post->consumed !== 0, 'consumed', (int)$this->post->consumed) - ->setIF($this->post->left !== 0, 'left', (int)$this->post->left) + ->setIF($this->post->estimate !== 0, 'estimate', (float)$this->post->estimate) + ->setIF($this->post->consumed !== 0, 'consumed', (float)$this->post->consumed) + ->setIF($this->post->left !== 0, 'left', (float)$this->post->left) ->setDefault('openedBy', $this->app->user->account) ->setDefault('openedDate', helper::now()) ->stripTags($this->config->task->editor->create['id'], $this->config->allowedTags) @@ -582,9 +582,9 @@ class taskModel extends model ->setDefault('story, estimate, left, consumed', 0) ->setDefault('estStarted', '0000-00-00') ->setDefault('deadline', '0000-00-00') - ->setIF($this->post->estimate !== 0, 'estimate', (int)$this->post->estimate) - ->setIF($this->post->consumed !== 0, 'consumed', (int)$this->post->consumed) - ->setIF($this->post->left !== 0, 'left', (int)$this->post->left) + ->setIF($this->post->estimate !== 0, 'estimate', (float)$this->post->estimate) + ->setIF($this->post->consumed !== 0, 'consumed', (float)$this->post->consumed) + ->setIF($this->post->left !== 0, 'left', (float)$this->post->left) ->setIF($oldTask->parent == 0 && $this->post->parent == '', 'parent', 0) ->setIF(strpos($this->config->task->edit->requiredFields, 'estStarted') !== false, 'estStarted', $this->post->estStarted) ->setIF(strpos($this->config->task->edit->requiredFields, 'deadline') !== false, 'deadline', $this->post->deadline) @@ -1177,7 +1177,7 @@ class taskModel extends model } $task = fixer::input('post') - ->setIF($this->post->consumed !== 0, 'consumed', (int)$this->post->consumed) + ->setIF($this->post->consumed !== 0, 'consumed', (float)$this->post->consumed) ->setDefault('left', 0) ->setDefault('assignedTo', $oldTask->openedBy) ->setDefault('assignedDate', $now) @@ -1358,7 +1358,7 @@ class taskModel extends model $oldTask = $this->getById($taskID); $task = fixer::input('post') - ->setIF($this->post->left !== 0, 'left', (int)$this->post->left) + ->setIF($this->post->left !== 0, 'left', (float)$this->post->left) ->setDefault('left', 0) ->setDefault('status', 'doing') ->setDefault('finishedBy, canceledBy, closedBy, closedReason', '') From 00b075ad9cd4444cc2bab1dd21bb32e98ef0d8db Mon Sep 17 00:00:00 2001 From: Catouse Date: Fri, 28 Dec 2018 20:35:21 +0800 Subject: [PATCH 053/442] * finish task #5175 and fix bug #2304. --- www/js/kindeditor/kindeditor.js | 38 +++++++++++++++-------------- www/js/kindeditor/kindeditor.min.js | 12 ++++----- 2 files changed, 26 insertions(+), 24 deletions(-) diff --git a/www/js/kindeditor/kindeditor.js b/www/js/kindeditor/kindeditor.js index c738d2ccd0..77e6782433 100644 --- a/www/js/kindeditor/kindeditor.js +++ b/www/js/kindeditor/kindeditor.js @@ -20,6 +20,7 @@ var _VERSION = '4.1.9 (2013-10-08)', _ua = navigator.userAgent.toLowerCase(), _IE = _ua.indexOf('msie') > -1 && _ua.indexOf('opera') == -1, + _NEWIE = _ua.indexOf('msie') == -1 && _ua.indexOf('trident') > -1, _GECKO = _ua.indexOf('gecko') > -1 && _ua.indexOf('khtml') == -1, _WEBKIT = _ua.indexOf('applewebkit') > -1, _OPERA = _ua.indexOf('opera') > -1, @@ -259,7 +260,7 @@ langType: 'zh_CN', urlType: '', newlineTag: 'p', - resizeType: 2, + resizeType: 1, syncType: 'form', pasteType: 2, dialogAlignType: 'page', @@ -1368,17 +1369,14 @@ function _getScrollPos(doc) { doc = doc || document; var x, y; - if(_IE || _OPERA) { + if (_IE || _NEWIE || _OPERA) { x = _docElement(doc).scrollLeft; y = _docElement(doc).scrollTop; } else { x = _getWin(doc).scrollX; y = _getWin(doc).scrollY; } - return { - x: x, - y: y - }; + return {x : x, y : y}; } function KNode(node) { @@ -3602,6 +3600,7 @@ height = moveEl.height(), pageX = e.pageX, pageY = e.pageY; + K(self).addClass('ke-dragging'); if(beforeDrag) { beforeDrag(); } @@ -3626,6 +3625,7 @@ if(self.releaseCapture) { self.releaseCapture(); } + K(self).removeClass('ke-dragging'); } K(docs).mousemove(moveListener) .mouseup(upListener) @@ -3722,10 +3722,10 @@ }, autoPos: function(width, height) { var self = this, - w = _removeUnit(width) || 0, - h = _removeUnit(height) || 0, - scrollPos = _getScrollPos(); - if(self._alignEl) { + w = _removeUnit(width) || 0, + h = _removeUnit(height) || 0, + scrollPos = _getScrollPos(); + if (self._alignEl) { var knode = K(self._alignEl), pos = knode.pos(), diffX = _round(knode[0].clientWidth / 2 - w / 2), @@ -3737,7 +3737,7 @@ x = _round(scrollPos.x + (docEl.clientWidth - w) / 2); y = _round(scrollPos.y + (docEl.clientHeight - h) / 2); } - if(!(_IE && _V < 7 || _QUIRKS)) { + if (!(_IE && _V < 7 || _QUIRKS)) { x -= scrollPos.x; y -= scrollPos.y; } @@ -5383,9 +5383,11 @@ } } }); + // statusbar.removeClass('statusbar').addClass('ke-statusbar') + // .append('') + // .append(''); statusbar.removeClass('statusbar').addClass('ke-statusbar') - .append('') - .append(''); + .append(''); if(self._fullscreenResizeHandler) { K(window).unbind('resize', self._fullscreenResizeHandler); self._fullscreenResizeHandler = null; @@ -5407,8 +5409,8 @@ }; K(window).bind('resize', self._fullscreenResizeHandler); toolbar.select('fullscreen'); - statusbar.first().css('visibility', 'hidden'); - statusbar.last().css('visibility', 'hidden'); + // statusbar.first().css('visibility', 'hidden'); + // statusbar.last().css('visibility', 'hidden'); } else { if(_GECKO) { K(window).bind('scroll', function(e) { @@ -5425,7 +5427,7 @@ } }); } else { - statusbar.first().css('visibility', 'hidden'); + // statusbar.first().css('visibility', 'hidden'); } if(self.resizeType === 2) { _drag({ @@ -5438,7 +5440,7 @@ } }); } else { - statusbar.last().css('visibility', 'hidden'); + // statusbar.last().css('visibility', 'hidden'); } } return self; @@ -9968,7 +9970,7 @@ KindEditor.plugin('table', function (K) { colsCount += cellSpan ? parseInt(cellSpan) : 1; }); for(var i = 0; i < colsCount; ++i) { - theadHtml.push('' + (K.IE ? ' ' : '
      ') + '
      ' + (K.IE ? ' ' : '
      ') + '
      '),r=$(""),l=0;l"),c=0;c"+(e.IE?" ":"
      ")+"");d.append(u)}r.append(d)}o.append(r);var p=$("
      ").append(o).html();return e.IE||(p+="
      "),s.insertHtml(p),o}}function l(i){for(var a=$(i[0]),r=[""],l=[""],c=0;c<6;++c){r.push('{tableHead}'),l.push("");for(var u=0;u<6;++u)l.push('{tableContent}');l.push("")}r.push(""),l.push("");var h=['
      ','
      ','
      ','
      ',"",'
      ','
      ','
      ',"
      ",'
      ',"",'
      ','
      ',"
      ",'
      ',"",'
      ','{borderColor}','',"
      ","
      ","
      ",'
      ','',r.join(""),l.join(""),"
      ","","",""].join("").format(p),f=$(h),m=f.find(".ke-plugin-table-example"),g=s.cmd.range.createBookmark(),v=f.find(".ke-plugin-table-input-color"),_=e(v[0]);f.on("change.kTable","input[name]",function(){var e=$(this),t={};t[e.attr("name")]=e.is('[type="checkbox"]')?e.is(":checked"):e.val(),o(t,m)});var b=s.createDialog({name:d+"test",width:550,title:s.lang(d),body:f[0],beforeRemove:function(){f.off(".kTable")},yesBtn:{name:s.lang("yes"),click:function(e){o({borderColor:f.find('[name="borderColor"]').val(),header:f.find('[name="header"]').is(":checked"),stripedRows:f.find('[name="stripedRows"]').is(":checked"),hoverRows:f.find('[name="hoverRows"]').is(":checked"),autoWidth:f.find('[name="autoWidth"]:checked').val()},a),s.hideDialog().focus(),s.cmd.range.moveToBookmark(g),s.cmd.select(),s.addBookmark()}}});n(b.div,_,function(e){o({borderColor:e},m)}),o({borderColor:a.find("td,th").first().css("borderColor"),header:a.find("thead").length,stripedRows:a.hasClass("table-striped"),hoverRows:a.hasClass("table-hover"),autoWidth:a.hasClass("table-auto")},m,function(e,n){switch(e){case"borderColor":t(_,n||"#dddddd");break;case"header":f.find('[name="header"]').prop("checked",!!n);break;case"stripedRows":f.find('[name="stripedRows"]').prop("checked",!!n);break;case"hoverRows":f.find('[name="hoverRows"]').prop("checked",!!n);break;case"autoWidth":f.find('[name="autoWidth"][value="'+(n?"auto":"")+'"]').prop("checked",!0)}})}var s=this,d="table",c={zh_cn:{name:"表格",xRxC:"{0}行 × {1}列",headerRow:"标题行",headerCol:"标题列",tableStyle:"表格样式",addHeaderRow:"添加表格标题行",stripedRows:"隔行变色效果",hoverRows:"鼠标悬停效果",autoChangeTableWidth:"自动调整表格尺寸",tableWidthFixed:"按表格文字自适应",tableWidthFull:"按页面宽度自适应",tableBorder:"表格边框",tableHead:"标题",tableContent:"内容"},zh_tw:{name:"表格",xRxC:"{0}行×{1}列",headerRow:"標題行",headerCol:"標題列",tableStyle:"表格樣式",addHeaderRow:"添加表格標題行",stripedRows:"隔行變色效果",hoverRows:"鼠標懸停效果",autoChangeTableWidth:"自動調整表格尺寸",tableWidthFixed:"按表格文字自適應",tableWidthFull:"按頁面寬度自適應",tableBorder:"表格邊框",tableHead:"標題",tableContent:"內容"},en:{name:"Table",xRxC:"{0} Rows × {1} Columns",headerRow:"Header Row",headerCol:"Header Column",tableStyle:"Table style",addHeaderRow:"Add header row",stripedRows:"Striped effection",hoverRows:"Mouse hover effection",autoChangeTableWidth:"Automatically adjust table size",tableWidthFixed:"Adaptive by form text",tableWidthFull:"Page width adaptive",tableBorder:"Table border",tableHead:"Title",tableContent:"Text"}},u=[],p=$.extend({},s.lang("table."),c[($.clientLang||$.zui.clientLang)()]),h=[];s.plugin.table={prop:function(){var e=s.plugin.getSelectedTable();e&&e.length&&l(e)},cellprop:function(){var i=['
      ','
      ','",p.width+'   ','   ",p.height+'   ','","
      ",'
      ','",p.textAlign+' ",p.verticalAlign+' ","
      ",'
      ','",p.borderColor+' ',"
      ",'
      ','",'',"
      ","
      "].join(""),a=s.cmd.range.createBookmark(),o=s.createDialog({name:d,width:500,title:s.lang("tablecell"),body:i,beforeRemove:function(){_.unbind()},yesBtn:{name:s.lang("yes"),click:function(t){var n=l.val(),i=c.val(),o=u.val(),r=h.val(),d=(f.val(),m.val(),g.val()),p=v.val(),b=e(_[0]).html()||"",k=e(_[1]).html()||"";return/^\d*$/.test(n)?/^\d*$/.test(i)?(y.css({width:""!==n?n+o:"",height:""!==i?i+r:"","background-color":k,"text-align":d,"vertical-align":p,"border-style":"solid","border-color":b}),s.hideDialog().focus(),s.cmd.range.moveToBookmark(a),s.cmd.select(),void s.addBookmark()):(alert(s.lang("invalidHeight")),void c[0].focus()):(alert(s.lang("invalidWidth")),void l[0].focus())}}}),r=o.div,l=e('[name="width"]',r).val(100),c=e('[name="height"]',r),u=e('[name="widthType"]',r),h=e('[name="heightType"]',r),f=e('[name="padding"]',r).val(2),m=e('[name="spacing"]',r).val(0),g=e('[name="textAlign"]',r),v=e('[name="verticalAlign"]',r),_=e(".ke-input-color",r);n(r,_.eq(0)),n(r,_.eq(1)),t(_.eq(0),"#000000"),t(_.eq(1),""),l[0].focus(),l[0].select();var b,y=s.plugin.getSelectedCell(),k=y[0].style.width||y[0].width||"",w=y[0].style.height||y[0].height||"";(b=/^(\d+)((?:px|%)*)$/.exec(k))?(l.val(b[1]),u.val(b[2])):l.val(""),(b=/^(\d+)((?:px|%)*)$/.exec(w))&&(c.val(b[1]),h.val(b[2])),g.val(y[0].style.textAlign||""),v.val(y[0].style.verticalAlign||""),t(_.eq(0),e.toHex(y[0].style.borderColor||"")),t(_.eq(1),e.toHex(y[0].style.backgroundColor||"")),l[0].focus(),l[0].select()},insert:function(){console.warn("Table insert not available.")},"delete":function(){var e=s.plugin.getSelectedTable();s.cmd.range.setStartBefore(e[0]).collapse(!0),s.cmd.select(),e.remove(),s.addBookmark()},colinsert:function(t){var n=s.plugin.getSelectedTable()[0],a=s.plugin.getSelectedRow()[0],o=s.plugin.getSelectedCell()[0],r=o.cellIndex+t;r+=n.rows[0].cells.length-a.cells.length;for(var l=0,d=n.rows.length;l"),u.innerHTML=e.IE?"":"
      ",r=i(n,c,u)}s.cmd.range.selectNodeContents(o).collapse(!0),s.cmd.select(),s.addBookmark()},colinsertleft:function(){this.colinsert(0)},colinsertright:function(){this.colinsert(1)},rowinsert:function(t){var n=s.plugin.getSelectedTable()[0],i=s.plugin.getSelectedRow()[0],a=s.plugin.getSelectedCell()[0],o=i.rowIndex;1===t&&(o=i.rowIndex+(a.rowSpan-1)+t);for(var r=n.insertRow(o),l=0,d=i.cells.length;l1&&(d-=i.cells[l].rowSpan-1);var c=r.insertCell(l);1===t&&i.cells[l].colSpan>1&&(c.colSpan=i.cells[l].colSpan),c.innerHTML=e.IE?"":"
      "}for(var u=o;u>=0;u--){var p=n.rows[u].cells;if(p.length>l){for(var h=a.cellIndex;h>=0;h--)p[h].rowSpan>1&&(p[h].rowSpan+=1);break}}s.cmd.range.selectNodeContents(a).collapse(!0),s.cmd.select(),s.addBookmark()},rowinsertabove:function(){this.rowinsert(0)},rowinsertbelow:function(){this.rowinsert(1)},rowmerge:function(){var e=s.plugin.getSelectedTable()[0],t=s.plugin.getSelectedRow()[0],n=s.plugin.getSelectedCell()[0],i=t.rowIndex,a=i+n.rowSpan,o=e.rows[a];if(!(e.rows.length<=a)){var r=n.cellIndex;if(!(o.cells.length<=r)){var l=o.cells[r];n.colSpan===l.colSpan&&(n.rowSpan+=l.rowSpan,o.deleteCell(r),s.cmd.range.selectNodeContents(n).collapse(!0),s.cmd.select(),s.addBookmark())}}},colmerge:function(){var e=(s.plugin.getSelectedTable()[0],s.plugin.getSelectedRow()[0]),t=s.plugin.getSelectedCell()[0],n=(e.rowIndex,t.cellIndex),i=n+1;if(!(e.cells.length<=i)){var a=e.cells[i];t.rowSpan===a.rowSpan&&(t.colSpan+=a.colSpan,e.deleteCell(i),s.cmd.range.selectNodeContents(t).collapse(!0),s.cmd.select(),s.addBookmark())}},rowsplit:function(){var t=s.plugin.getSelectedTable()[0],n=s.plugin.getSelectedRow()[0],a=s.plugin.getSelectedCell()[0],o=n.rowIndex;if(1!==a.rowSpan){for(var r=i(t,n,a),l=1,d=a.rowSpan;l1&&(u.colSpan=a.colSpan),u.innerHTML=e.IE?"":"
      ",r=i(t,c,u)}e(a).removeAttr("rowSpan"),s.cmd.range.selectNodeContents(a).collapse(!0),s.cmd.select(),s.addBookmark()}},colsplit:function(){var t=(s.plugin.getSelectedTable()[0],s.plugin.getSelectedRow()[0]),n=s.plugin.getSelectedCell()[0],i=n.cellIndex;if(1!==n.colSpan){for(var a=1,o=n.colSpan;a1&&(r.rowSpan=n.rowSpan),r.innerHTML=e.IE?"":"
      "}e(n).removeAttr("colSpan"),s.cmd.range.selectNodeContents(n).collapse(!0),s.cmd.select(),s.addBookmark()}},coldelete:function(){for(var t=s.plugin.getSelectedTable()[0],n=s.plugin.getSelectedRow()[0],i=s.plugin.getSelectedCell()[0],a=i.cellIndex,o=0,r=t.rows.length;o1?(d.colSpan-=1,1===d.colSpan&&e(d).removeAttr("colSpan")):l.deleteCell(a),d.rowSpan>1&&(o+=d.rowSpan-1)}0===n.cells.length?(s.cmd.range.setStartBefore(t).collapse(!0),s.cmd.select(),e(t).remove()):s.cmd.selection(!0),s.addBookmark()},rowdelete:function(){for(var t=s.plugin.getSelectedTable()[0],n=s.plugin.getSelectedRow()[0],i=s.plugin.getSelectedCell()[0],a=n.rowIndex,o=i.rowSpan-1;o>=0;o--)t.deleteRow(a+o);0===t.rows.length?(s.cmd.range.setStartBefore(t).collapse(!0),s.cmd.select(),e(t).remove()):s.cmd.selection(!0),s.addBookmark()}},s.clickToolbar(d,function(){if(!s.menu){var e=s.createMenu({name:d,beforeRemove:function(){a()}}),t=$('
      '),n=$('
      '+p.xRxC.format(0,0)+"
      ");t.append(n);var i=$('
      ');i.on("mouseenter.kTable",".ke-plugin-table-grid-cell",function(){var e=$(this),t=e.data("row"),a=e.data("col");n.text(p.xRxC.format(t,a));var o=i.find(".ke-plugin-table-grid-cell");o.each(function(){var e=$(this),n=e.data("row"),i=e.data("col");n<=t&&i<=a?e.css({border:"1px solid #2286d2",background:"#eff7ff"}):e.css({border:"1px solid #ddd",background:"#f1f1f1"})})}).on("click.kTable",".ke-plugin-table-grid-cell",function(e){var t=$(this),n=t.data("row"),i=t.data("col");r(n,i),s.hideMenu().focus(),s.addBookmark(),e.stopPropagation()});for(var o=1;o<11;o++)for(var l=1;l<11;l++)i.append('
      ');u.push(i),t.append(i),e.div.append(t[0])}})}),KindEditor.lang({table:KindEditor.lang("table")}),KindEditor.plugin("template",function(e){function t(t){return a+t+"?ver="+encodeURIComponent(e.DEBUG?e.TIME:e.VERSION)}var n=this,i="template",a=(n.lang(i+"."),n.pluginsPath+i+"/html/");n.clickToolbar(i,function(){var a=n.lang(i+"."),o=['
      ','
      ','
      ',a.selectTemplate+"
      ",'
      ',' ","
      ",'
      ',"
      ",'',"
      "].join("");var r=n.createDialog({name:i,width:500,title:n.lang(i),body:html,yesBtn:{name:n.lang("yes"),click:function(t){var i=e.iframeDoc(d);n[s[0].checked?"html":"insertHtml"](i.body.innerHTML).hideDialog().focus()}}}),l=e("select",r.div),s=e('[name="replaceFlag"]',r.div),d=e("iframe",r.div);s[0].checked=!0,d.attr("src",t(l.val())),l.change(function(){d.attr("src",t(this.value))})})}),KindEditor.plugin("wordpaste",function(e){var t=this,n="wordpaste";t.clickToolbar(n,function(){var i=t.lang(n+"."),a='
      '+i.comment+'
      ',o=t.createDialog({name:n,width:450,title:t.lang(n),body:a,yesBtn:{name:t.lang("yes"),click:function(n){var i=s.body.innerHTML;i=e.clearMsWord(i,t.filterMode?t.htmlTags:e.options.htmlTags),t.insertHtml(i).hideDialog().focus()}}}),r=o.div,l=e("iframe",r),s=e.iframeDoc(l);e.IE||(s.designMode="on"),s.open(),s.write("WordPaste"),s.write(''),e.IE||s.write("
      "),s.write(""),s.close(),e.IE&&(s.body.contentEditable="true"),l[0].contentWindow.focus()})}); \ No newline at end of file +!function(window,undefined){function _isArray(e){return!!e&&"[object Array]"===Object.prototype.toString.call(e)}function _isFunction(e){return!!e&&"[object Function]"===Object.prototype.toString.call(e)}function _inArray(e,t){for(var n=0,i=t.length;n=0}function _addUnit(e,t){return t=t||"px",e&&/^\d+$/.test(e)?e+t:e}function _removeUnit(e){var t;return e&&(t=/(\d+)/.exec(e))?parseInt(t[1],10):0}function _escape(e){return e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""")}function _unescape(e){return e.replace(/</g,"<").replace(/>/g,">").replace(/"/g,'"').replace(/&/g,"&")}function _toCamel(e){var t=e.split("-");return e="",_each(t,function(t,n){e+=t>0?n.charAt(0).toUpperCase()+n.substr(1):n}),e}function _toHex(e){function t(e){var t=parseInt(e,10).toString(16).toUpperCase();return t.length>1?t:"0"+t}return e.replace(/rgb\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)/gi,function(e,n,i,a){return"#"+t(n)+t(i)+t(a)})}function _toMap(e,t){t=t===undefined?",":t;var n,i={},a=_isArray(e)?e:e.split(t);return _each(a,function(e,t){if(n=/^(\d+)\.\.(\d+)$/.exec(t))for(var a=parseInt(n[1],10);a<=parseInt(n[2],10);a++)i[a.toString()]=!0;else i[t]=!0}),i}function _toArray(e,t){return Array.prototype.slice.call(e,t||0)}function _undef(e,t){return e===undefined?t:e}function _invalidUrl(e){return!e||/[<>"]/.test(e)}function _addParam(e,t){return e.indexOf("?")>=0?e+"&"+t:e+"?"+t}function _extend(e,t,n){n||(n=t,t=null);var i;if(t){var a=function(){};a.prototype=t.prototype,i=new a,_each(n,function(e,t){i[e]=t})}else i=n;i.constructor=e,e.prototype=i,e.parent=t?t.prototype:null}function _json(text){var match;(match=/\{[\s\S]*\}|\[[\s\S]*\]/.exec(text))&&(text=match[0]);var cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;if(cx.lastIndex=0,cx.test(text)&&(text=text.replace(cx,function(e){return"\\u"+("0000"+e.charCodeAt(0).toString(16)).slice(-4)})),/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return eval("("+text+")");throw"JSON parse error"}function _getBasePath(){for(var e,t=document.getElementsByTagName("script"),n=0,i=t.length;n=0)return void _each(t.split(","),function(){_bind(e,this,n)});var i=_getId(e);i||(i=_setId(e)),_eventData[i]===undefined&&(_eventData[i]={});var a=_eventData[i][t];a&&a.length>0?_unbindEvent(e,t,a[0]):(_eventData[i][t]=[],_eventData[i].el=e),a=_eventData[i][t],0===a.length&&(a[0]=function(t){var n=t?new KEvent(e,t):undefined;_each(a,function(t,i){t>0&&i&&i.call(e,n)})}),_inArray(n,a)<0&&a.push(n),_bindEvent(e,t,a[0])}function _unbind(e,t,n){if(t&&t.indexOf(",")>=0)return void _each(t.split(","),function(){_unbind(e,this,n)});var i=_getId(e);if(i){if(t===undefined)return void(i in _eventData&&(_each(_eventData[i],function(t,n){"el"!=t&&n.length>0&&_unbindEvent(e,t,n[0])}),delete _eventData[i],_removeId(e)));if(_eventData[i]){var a=_eventData[i][t];if(a&&a.length>0){n===undefined?(_unbindEvent(e,t,a[0]),delete _eventData[i][t]):(_each(a,function(e,t){e>0&&t===n&&a.splice(e,1)}),1==a.length&&(_unbindEvent(e,t,a[0]),delete _eventData[i][t]));var o=0;_each(_eventData[i],function(){o++}),o<2&&(delete _eventData[i],_removeId(e))}}}}function _fire(e,t){if(t.indexOf(",")>=0)return void _each(t.split(","),function(){_fire(e,this)});var n=_getId(e);if(n){var i=_eventData[n][t];_eventData[n]&&i&&i.length>0&&i[0]()}}function _ctrl(e,t,n){t=/^\d{2,}$/.test(t)?t:t.toUpperCase().charCodeAt(0),_bind(e,"keydown",function(i){!i.ctrlKey||i.which!=t||i.shiftKey||i.altKey||(n.call(e),i.stop())})}function _ready(e){function t(){a||(a=!0,e(KindEditor),_readyFinished=!0)}function n(){if(!a){try{document.documentElement.doScroll("left")}catch(e){return void setTimeout(n,100)}t()}}function i(){"complete"===document.readyState&&t()}if(_readyFinished)return void e(KindEditor);var a=!1;if(document.addEventListener)_bind(document,"DOMContentLoaded",t);else if(document.attachEvent){_bind(document,"readystatechange",i);var o=!1;try{o=null==window.frameElement}catch(r){}document.documentElement.doScroll&&o&&n()}_bind(window,"load",t)}function _getCssList(e){for(var t,n={},i=/\s*([\w\-]+)\s*:([^;]*)(;|$)/g;t=i.exec(e);){var a=_trim(t[1].toLowerCase()),o=_trim(_toHex(t[2]));n[a]=o}return n}function _getAttrList(e){for(var t,n={},i=/\s+(?:([\w\-:]+)|(?:([\w\-:]+)=([^\s"'<>]+))|(?:([\w\-:"]+)="([^"]*)")|(?:([\w\-:"]+)='([^']*)'))(?=(?:\s|\/|>)+)/g;t=i.exec(e);){var a=(t[1]||t[2]||t[4]||t[6]).toLowerCase(),o=(t[2]?t[3]:t[4]?t[5]:t[7])||"";n[a]=o}return n}function _addClassToTag(e,t){return e=/\s+class\s*=/.test(e)?e.replace(/(\s+class=["']?)([^"']*)(["']?[\s>])/,function(e,n,i,a){return(" "+i+" ").indexOf(" "+t+" ")<0?""===i?n+t+a:n+i+" "+t+a:e}):e.substr(0,e.length-1)+' class="'+t+'">'}function _formatCss(e){var t="";return _each(_getCssList(e),function(e,n){t+=e+":"+n+";"}),t}function _formatUrl(e,t,n,i){function a(e){for(var t=e.split("/"),n=[],i=0,a=t.length;i0&&n.pop():""!==o&&"."!=o&&n.push(o)}return"/"+n.join("/")}function o(t,n){if(e.substr(0,t.length)===t){for(var a=[],r=0;r0&&(s+="/"+a.join("/")),"/"==i&&(s+="/"),s+e.substr(t.length)}if(l=/^(.*)\//.exec(t))return o(l[1],++n)}if(t=_undef(t,"").toLowerCase(),"data:"!=e.substr(0,5)&&(e=e.replace(/([^:])\/\//g,"$1/")),_inArray(t,["absolute","relative","domain"])<0)return e;if(n=n||location.protocol+"//"+location.host,i===undefined){var r=location.pathname.match(/^(\/.*)\//);i=r?r[1]:""}var l;if(l=/^(\w+:\/\/[^\/]*)/.exec(e)){if(l[1]!==n)return e}else if(/^\w+:/.test(e))return e;return/^\//.test(e)?e=n+a(e.substr(1)):/^\w+:\/\//.test(e)||(e=n+a(i+"/"+e)),"relative"===t?e=o(n+i,0).substr(2):"absolute"===t&&e.substr(0,n.length)===n&&(e=e.substr(n.length)),e}function _formatHtml(e,t,n,i,a){null==e&&(e=""),n=n||"",i=_undef(i,!1),a=_undef(a,"\t");var o="xx-small,x-small,small,medium,large,x-large,xx-large".split(",");e=e.replace(/(<(?:pre|pre\s[^>]*)>)([\s\S]*?)(<\/pre>)/gi,function(e,t,n,i){return t+n.replace(/<(?:br|br\s[^>]*)>/gi,"\n")+i}),e=e.replace(/<(?:br|br\s[^>]*)\s*\/?>\s*<\/p>/gi,"

      "),e=e.replace(/(<(?:p|p\s[^>]*)>)\s*(<\/p>)/gi,"$1
      $2"),e=e.replace(/\u200B/g,""),e=e.replace(/\u00A9/g,"©"),e=e.replace(/<[^>]+>/g,function(e){return e.replace(/\s+/g," ")});var r={};t&&(_each(t,function(e,t){for(var n=e.split(","),i=0,a=n.length;i]*)>)([\s\S]*?)(<\/script>)/gi,"")),r.style||(e=e.replace(/(<(?:style|style\s[^>]*)>)([\s\S]*?)(<\/style>)/gi,"")));var l=/(\s*)<(\/)?([\w\-:]+)((?:\s+|(?:\s+[\w\-:]+)|(?:\s+[\w\-:]+=[^\s"'<>]+)|(?:\s+[\w\-:"]+="[^"]*")|(?:\s+[\w\-:"]+='[^']*'))*)(\/)?>(\s*)/g,s=[];return e=e.replace(l,function(e,l,d,c,u,p,h){var f=e,m=l||"",g=d||"",v=c.toLowerCase(),_=u||"",b=p?" "+p:"",y=h||"";if(t&&!r[v])return"";if(""===b&&_SINGLE_TAG_MAP[v]&&(b=" /"),_INLINE_TAG_MAP[v]&&(m&&(m=" "),y&&(y=" ")),_PRE_TAG_MAP[v]&&(g?y="\n":m="\n"),i&&"br"==v&&(y="\n"),_BLOCK_TAG_MAP[v]&&!_PRE_TAG_MAP[v])if(i){g&&s.length>0&&s[s.length-1]===v?s.pop():s.push(v),m="\n",y="\n";for(var k=0,w=g?s.length:s.length-1;k=0&&(S[e]=_formatUrl(i,n)),(t&&"style"!==e&&!r[v]["*"]&&!r[v][e]||"body"===v&&"contenteditable"===e||/^kindeditor_\d+$/.test(e))&&delete S[e],"style"===e&&""!==i){var a=_getCssList(i);_each(a,function(e,n){!t||r[v].style||r[v]["."+e]||delete a[e]});var o="";_each(a,function(e,t){o+=e+":"+t+";"}),S.style=o}}),_="",_each(S,function(e,t){"style"===e&&""===t||(t=t.replace(/"/g,"""),_+=" "+e+'="'+t+'"')})}return"font"===v&&(v="span"),m+"<"+g+v+_+b+">"+y}),e=e.replace(/(<(?:pre|pre\s[^>]*)>)([\s\S]*?)(<\/pre>)/gi,function(e,t,n,i){return t+n.replace(/\n/g,'\n')+i}),e=e.replace(/\n\s*\n/g,"\n"),e=e.replace(/\n/g,"\n"),_trim(e)}function _clearMsWord(e,t){return e=e.replace(//gi,"").replace(//gi,"").replace(/]*>[\s\S]*?<\/style>/gi,"").replace(/]*>[\s\S]*?<\/script>/gi,"").replace(/]+>[\s\S]*?<\/w:[^>]+>/gi,"").replace(/]+>[\s\S]*?<\/o:[^>]+>/gi,"").replace(/[\s\S]*?<\/xml>/gi,"").replace(/<(?:table|td)[^>]*>/gi,function(e){return e.replace(/border-bottom:([#\w\s]+)/gi,"border:$1")}),_formatHtml(e,t)}function _mediaType(e){return/\.(rm|rmvb)(\?|$)/i.test(e)?"audio/x-pn-realaudio-plugin":/\.(swf|flv)(\?|$)/i.test(e)?"application/x-shockwave-flash":"video/x-ms-asf-plugin"}function _mediaClass(e){return/realaudio/i.test(e)?"ke-rm":/flash/i.test(e)?"ke-flash":"ke-media"}function _mediaAttrs(e){return _getAttrList(unescape(e))}function _mediaEmbed(e){var t="0&&(r+="width:"+n+"px;"),/\D/.test(i)?r+="height:"+i+";":i>0&&(r+="height:"+i+"px;");var l=''}function _tmpl(e,t){var n=new Function("obj","var p=[],print=function(){p.push.apply(p,arguments);};with(obj){p.push('"+e.replace(/[\r\t\n]/g," ").split("<%").join("\t").replace(/((^|%>)[^\t]*)'/g,"$1\r").replace(/\t=(.*?)%>/g,"',$1,'").split("\t").join("');").split("%>").join("p.push('").split("\r").join("\\'")+"');}return p.join('');");return t?n(t):n}function _contains(e,t){if(9==e.nodeType&&9!=t.nodeType)return!0;for(;t=t.parentNode;)if(t==e)return!0;return!1}function _getAttr(e,t){t=t.toLowerCase();var n=null;if(_GET_SET_ATTRIBUTE||"script"==e.nodeName.toLowerCase())try{n=e.getAttribute(t,2)}catch(i){n=e.getAttribute(t,1)}else{var a=e.ownerDocument.createElement("div");a.appendChild(e.cloneNode(!1));var o=_getAttrList(_unescape(a.innerHTML));t in o&&(n=o[t])}return"style"===t&&null!==n&&(n=_formatCss(n)),n}function _queryAll(e,t){function n(e){return"string"!=typeof e?e:e.replace(/([^\w\-])/g,"\\$1")}function i(e){return e.replace(/\\/g,"")}function a(e,t){return"*"===e||e.toLowerCase()===n(t.toLowerCase())}function o(e,t,n){var o=[],r=n.ownerDocument||n,l=r.getElementById(i(e));return l&&a(t,l.nodeName)&&_contains(n,l)&&o.push(l),o}function r(e,t,n){var o,r,l,s,d=n.ownerDocument||n,c=[];if(n.getElementsByClassName)for(o=n.getElementsByClassName(i(e)),r=0,l=o.length;r-1&&c.push(s)}return c}function l(e,t,n){for(var o,r=[],l=n.ownerDocument||n,s=l.getElementsByName(i(e)),d=0,c=s.length;d])+)/.exec(e);var a=n?n[1]:"*";if(n=/#((?:[\w\-]|\\.)+)$/.exec(e))i=o(n[1],a,t);else if(n=/\.((?:[\w\-]|\\.)+)$/.exec(e))i=r(n[1],a,t);else if(n=/\[((?:[\w\-]|\\.)+)\]/.exec(e))i=s(n[1].toLowerCase(),null,a,t);else if(n=/\[((?:[\w\-]|\\.)+)\s*=\s*['"]?((?:\\.|[^'"]+)+)['"]?\]/.exec(e)){var d=n[1].toLowerCase(),c=n[2];i="id"===d?o(c,a,t):"class"===d?r(c,a,t):"name"===d?l(c,a,t):s(d,c,a,t)}else for(var u,p=t.getElementsByTagName(a),h=0,f=p.length;h1){var u=[];return _each(c,function(){_each(_queryAll(this,t),function(){_inArray(this,u)<0&&u.push(this)})}),u}t=t||document;for(var p,h=[],f=/((?:\\.|[^\s>])+|[\s>])/g;p=f.exec(e);)" "!==p[1]&&h.push(p[1]);var m=[];if(1==h.length)return d(h[0],t);var g,v,_,b,y,k,w,S,C,E,x=!1;for(k=0,lenth=h.length;k"!==g){if(k>0){for(v=[],w=0,C=m.length;w0?n[0]:null}function _get(e){return K(e)[0]}function _getDoc(e){return e?e.ownerDocument||e.document||e:document}function _getWin(e){if(!e)return window;var t=_getDoc(e);return t.parentWindow||t.defaultView}function _setHtml(e,t){if(1==e.nodeType){var n=_getDoc(e);try{e.innerHTML=''+t;var i=n.getElementById("__kindeditor_temp_tag__");i.parentNode.removeChild(i)}catch(a){K(e).empty(),K("@"+t,n).each(function(){e.appendChild(this)})}}}function _hasClass(e,t){return _inString(t,e.className," ")}function _setAttr(e,t,n){_IE&&_V<8&&"class"==t.toLowerCase()&&(t="className"),e.setAttribute(t,""+n)}function _removeAttr(e,t){_IE&&_V<8&&"class"==t.toLowerCase()&&(t="className"),_setAttr(e,t,""),e.removeAttribute(t)}function _getNodeName(e){return e&&e.nodeName?e.nodeName.toLowerCase():""}function _computedCss(e,t){var n=_getWin(e),i=_toCamel(t),a="";if(n.getComputedStyle){var o=n.getComputedStyle(e,null);a=o[i]||o.getPropertyValue(t)||e.style[i]}else e.currentStyle&&(a=e.currentStyle[i]||e.style[i]);return a}function _hasVal(e){return!!_VALUE_TAG_MAP[_getNodeName(e)]}function _docElement(e){return e=e||document,_QUIRKS?e.body:e.documentElement}function _docHeight(e){var t=_docElement(e);return Math.max(t.scrollHeight,t.clientHeight)}function _docWidth(e){var t=_docElement(e);return Math.max(t.scrollWidth,t.clientWidth)}function _getScrollPos(e){e=e||document;var t,n;return _IE||_NEWIE||_OPERA?(t=_docElement(e).scrollLeft,n=_docElement(e).scrollTop):(t=_getWin(e).scrollX,n=_getWin(e).scrollY),{x:t,y:n}}function KNode(e){this.init(e)}function _updateCollapsed(e){return e.collapsed=e.startContainer===e.endContainer&&e.startOffset===e.endOffset,e}function _copyAndDelete(e,t,n){function i(i,a,o){var r,s=i.nodeValue.length;if(t){var d=i.cloneNode(!0);r=a>0?d.splitText(a):d,o0&&(c=i.splitText(a),e.setStart(i,a)),o=0&&c<=0&&(c=g.compareBoundaryPoints(_START_TO_START,e)),c>=0&&u<=0&&(u=g.compareBoundaryPoints(_END_TO_END,e)),u>=0&&p<=0&&(p=g.compareBoundaryPoints(_END_TO_START,e)),p>=0)return!1;if(f=m.nextSibling,d>0)if(1==m.nodeType)if(c>=0&&u<=0)t&&h.appendChild(m.cloneNode(!0)),n&&l.push(m);else{var v;if(t&&(v=m.cloneNode(!1),h.appendChild(v)),o(m,v)===!1)return!1}else if(3==m.nodeType){var _;if(_=m==s.startContainer?i(m,s.startOffset,m.nodeValue.length):m==s.endContainer?i(m,0,s.endOffset):i(m,0,m.nodeValue.length),t)try{h.appendChild(_)}catch(b){}}m=f}}var r=e.doc,l=[],s=e.cloneRange().down(),d=-1,c=-1,u=-1,p=-1,h=e.commonAncestor(),f=r.createDocumentFragment();if(3==h.nodeType){var m=i(h,e.startOffset,e.endOffset);return t&&f.appendChild(m),a(),t?f:e}o(h,f),n&&e.up().collapse(!0);for(var g=0,v=l.length;g0?l+=f.text.replace(/\r\n|\n|\r/g,"").length:l=0,h&&K(h).remove()}else 3==p.nodeType&&(d.moveStart("character",p.nodeValue.length),l+=p.nodeValue.length);s<0&&(r=p)}if(s<0&&1==r.nodeType)return{node:a,offset:K(a.lastChild).index()+1};if(s>0)for(;r.nextSibling&&1==r.nodeType;)r=r.nextSibling;if(d=e.duplicate(),_moveToElementText(d,a),d.setEndPoint("StartToEnd",i),l-=d.text.replace(/\r\n|\n|\r/g,"").length,s>0&&3==r.nodeType)for(var v=r.previousSibling;v&&3==v.nodeType;)l-=v.nodeValue.length,v=v.previousSibling;return{node:r,offset:l}}function _getEndRange(e,t){var n=e.ownerDocument||e,i=n.body.createTextRange();if(n==e)return i.collapse(!0),i;if(1==e.nodeType&&e.childNodes.length>0){var a,o,r=e.childNodes;if(0===t?(o=r[0],a=!0):(o=r[t-1],a=!1),!o)return i;if("head"===K(o).name)return 1===t&&(a=!0),2===t&&(a=!1),i.collapse(a),i;if(1==o.nodeType){var l,s=K(o);return s.isControl()&&(l=n.createElement("span"),a?s.before(l):s.after(l),o=l),_moveToElementText(i,o),i.collapse(a),l&&K(l).remove(),i}e=o,t=a?0:o.nodeValue.length}var d=n.createElement("span");return K(e).before(d),_moveToElementText(i,d),i.moveStart("character",t),K(d).remove(),i}function _toRange(e){function t(e){"tr"==K(e.node).name&&(e.node=e.node.cells[e.offset],e.offset=0)}var n,i;if(_IERANGE){if(e.item)return n=_getDoc(e.item(0)),i=new KRange(n),i.selectNode(e.item(0)),i;n=e.parentElement().ownerDocument;var a=_getStartEnd(e,!0),o=_getStartEnd(e,!1);return t(a),t(o),i=new KRange(n),i.setStart(a.node,a.offset),i.setEnd(o.node,o.offset),i}var r=e.startContainer;return n=r.ownerDocument||r,i=new KRange(n),i.setStart(r,e.startOffset),i.setEnd(e.endContainer,e.endOffset),i}function KRange(e){this.init(e)}function _range(e){return e.nodeName?new KRange(e):e.constructor===KRange?e:_toRange(e)}function _nativeCommand(e,t,n){try{e.execCommand(t,!1,n)}catch(i){}}function _nativeCommandValue(e,t){var n="";try{n=e.queryCommandValue(t)}catch(i){}return"string"!=typeof n&&(n=""),n}function _getSel(e){var t=_getWin(e);return _IERANGE?e.selection:t.getSelection()}function _getRng(e){var t,n=_getSel(e);try{t=n.rangeCount>0?n.getRangeAt(0):n.createRange()}catch(i){}return!_IERANGE||t&&(t.item||t.parentElement().ownerDocument===e)?t:null}function _singleKeyMap(e){var t,n,i={};return _each(e,function(e,a){t=e.split(",");for(var o=0,r=t.length;o]+>/g,"")}function _mergeWrapper(e,t){e=e.clone(!0);for(var n=_getInnerNode(e),i=e,a=!1;t;){for(;i;)i.name===t.name&&(_mergeAttrs(i,t.attr(),t.css()),a=!0),i=i.first();a||n.append(t.clone(!1)),a=!1,t=t.first()}return e}function _wrapNode(e,t){if(t=t.clone(!0),3==e.type)return _getInnerNode(t).append(e.clone(!1)),e.replaceWith(t),t;for(var n,i=e;(n=e.first())&&1==n.children().length;)e=n;n=e.first();for(var a=e.doc.createDocumentFragment();n;)a.appendChild(n[0]),n=n.next();return t=_mergeWrapper(i,t),a.firstChild&&_getInnerNode(t).append(a),i.replaceWith(t),t}function _mergeAttrs(e,t,n){_each(t,function(t,n){"style"!==t&&e.attr(t,n)}),_each(n,function(t,n){e.css(t,n)})}function _inPreElement(e){for(;e&&"body"!=e.name;){if(_PRE_TAG_MAP[e.name]||"div"==e.name&&e.hasClass("ke-script"))return!0;e=e.parent()}return!1}function KCmd(e){this.init(e)}function _cmd(e){if(e.nodeName){var t=_getDoc(e);e=_range(t).selectNodeContents(t.body).collapse(!1)}return new KCmd(e)}function _drag(e){var t=e.moveEl,n=e.moveFn,i=e.clickEl||t,a=e.beforeDrag,o=e.iframeFix===undefined||e.iframeFix,r=[document];o&&K("iframe").each(function(){var e=_formatUrl(this.src||"","absolute");if(!/^https?:\/\//.test(e)){var t;try{t=_iframeDoc(this)}catch(n){}if(t){var i=K(this).pos();K(t).data("pos-x",i.x),K(t).data("pos-y",i.y),r.push(t)}}}),i.mousedown(function(e){function o(e){e.preventDefault();var t=K(_getDoc(e.target)),a=_round((t.data("pos-x")||0)+e.pageX-f),o=_round((t.data("pos-y")||0)+e.pageY-m);n.call(i,c,u,p,h,a,o)}function l(e){e.preventDefault()}function s(e){e.preventDefault(),K(r).unbind("mousemove",o).unbind("mouseup",s).unbind("selectstart",l),d.releaseCapture&&d.releaseCapture(),K(d).removeClass("ke-dragging")}e.stopPropagation();var d=i.get(),c=_removeUnit(t.css("left")),u=_removeUnit(t.css("top")),p=t.width(),h=t.height(),f=e.pageX,m=e.pageY;K(d).addClass("ke-dragging"),a&&a(),K(r).mousemove(o).mouseup(s).bind("selectstart",l),d.setCapture&&d.setCapture()})}function KWidget(e){this.init(e)}function _widget(e){return new KWidget(e)}function _iframeDoc(e){return e=_get(e),e.contentDocument||e.contentWindow.document}function _getInitHtml(e,t,n,i){var a=[""===_direction?"":'','',""];return _isArray(n)||(n=[n]),_each(n,function(e,t){t&&a.push('')}),i&&a.push(""),a.push(""),a.join("\n")}function _elementVal(e,t){if(e.hasVal()){if(t===undefined){var n=e.val();return n=n.replace(/(<(?:p|p\s[^>]*)>) *(<\/p>)/gi,"")}return e.val(t)}return e.html(t)}function KEdit(e){this.init(e)}function _edit(e){return new KEdit(e)}function _selectToolbar(e,t){var n=this,i=n.get(e);if(i){if(i.hasClass("ke-disabled"))return;t(i)}}function KToolbar(e){this.init(e)}function _toolbar(e){return new KToolbar(e)}function KMenu(e){this.init(e)}function _menu(e){return new KMenu(e)}function KColorPicker(e){this.init(e)}function _colorpicker(e){return new KColorPicker(e)}function KUploadButton(e){this.init(e)}function _uploadbutton(e){return new KUploadButton(e)}function _createButton(e){e=e||{};var t=e.name||"",n=K(''),i=K('');return e.click&&i.click(e.click),n.append(i),n}function KDialog(e){this.init(e)}function _dialog(e){return new KDialog(e)}function _tabs(e){var t=_widget(e),n=t.remove,i=e.afterSelect,a=t.div,o=[];a.addClass("ke-tabs").bind("contextmenu,mousedown,mousemove",function(e){e.preventDefault()});var r=K('
        ');return a.append(r),t.add=function(e){var t=K('
      • '+e.title+"
      • ");t.data("tab",e),o.push(t),r.append(t)},t.selectedIndex=0,t.select=function(e){t.selectedIndex=e,_each(o,function(n,i){i.unbind(),n===e?(i.addClass("ke-tabs-li-selected"),K(i.data("tab").panel).show("")):(i.removeClass("ke-tabs-li-selected").removeClass("ke-tabs-li-on").mouseover(function(){K(this).addClass("ke-tabs-li-on")}).mouseout(function(){K(this).removeClass("ke-tabs-li-on")}).click(function(){t.select(n)}),K(i.data("tab").panel).hide())}),i&&i.call(t,e)},t.remove=function(){_each(o,function(){this.remove()}),r.remove(),n.call(t)},t}function _loadScript(e,t){var n=document.getElementsByTagName("head")[0]||(_QUIRKS?document.body:document.documentElement),i=document.createElement("script");n.appendChild(i),i.src=e,i.charset="utf-8",i.onload=i.onreadystatechange=function(){this.readyState&&"loaded"!==this.readyState||(t&&t(),i.onload=i.onreadystatechange=null,n.removeChild(i))}}function _chopQuery(e){var t=e.indexOf("?");return t>0?e.substr(0,t):e}function _loadStyle(e){for(var t=document.getElementsByTagName("head")[0]||(_QUIRKS?document.body:document.documentElement),n=document.createElement("link"),i=_chopQuery(_formatUrl(e,"absolute")),a=K('link[rel="stylesheet"]',t),o=0,r=a.length;on&&(n=this.width)))});i.length>0&&"-"==i[0].title;)i.shift();for(;i.length>0&&"-"==i[i.length-1].title;)i.pop();var a=null;if(_each(i,function(e){"-"==this.title&&"-"==a.title&&delete i[e],a=this}),i.length>0){t.preventDefault();var o=K(e.edit.iframe).pos(),r=_menu({x:o.x+t.clientX,y:o.y+t.clientY,width:n,css:{visibility:"hidden"},shadowMode:e.shadowMode});_each(i,function(){this.title&&r.addItem(this)});var l=_docElement(r.doc),s=r.div.height();t.clientY+s>=l.clientHeight-100&&r.pos(r.x,_removeUnit(r.y)-s),r.div.css("visibility","visible"),e.menu=r}}})}function _bindNewlineEvent(){function e(e){for(var t=K(e.commonAncestor());t&&(1!=t.type||t.isStyle());)t=t.parent();return t.name}var t=this,n=t.edit.doc,i=t.newlineTag;if(!(_IE&&"br"!==i||_GECKO&&_V<3&&"p"!==i||_OPERA&&_V<9)){var a=_toMap("h1,h2,h3,h4,h5,h6,pre,li"),o=_toMap("p,h1,h2,h3,h4,h5,h6,pre,li,blockquote");K(n).keydown(function(r){if(!(13!=r.which||r.shiftKey||r.ctrlKey||r.altKey)){t.cmd.selection();var l=e(t.cmd.range);if("marquee"!=l&&"select"!=l)return"br"!==i||a[l]?void(o[l]||_nativeCommand(n,"formatblock","

        ")):(r.preventDefault(),void t.insertHtml("
        "+(_IE&&_V<9?"":"​")))}}),K(n).keyup(function(a){if(!(13!=a.which||a.shiftKey||a.ctrlKey||a.altKey)&&"br"!=i){if(_GECKO){var r=t.cmd.commonAncestor("p"),l=t.cmd.commonAncestor("a");return void(l&&""==l.text()&&(l.remove(!0),t.cmd.range.selectNodeContents(r[0]).collapse(!0),t.cmd.select()))}t.cmd.selection();var s=e(t.cmd.range);if("marquee"!=s&&"select"!=s){o[s]||_nativeCommand(n,"formatblock","

        ");var d=t.cmd.commonAncestor("div");if(d){for(var c=K("

        "),u=d[0].firstChild;u;){var p=u.nextSibling;c.append(u),u=p}d.before(c),d.remove(),t.cmd.range.selectNodeContents(c[0]),t.cmd.select()}}}})}}function _bindTabEvent(){var e=this,t=e.edit.doc;K(t).keydown(function(n){if(9==n.which){if(n.preventDefault(),e.afterTab)return void e.afterTab.call(e,n);var i=e.cmd,a=i.range;a.shrink(),a.collapsed&&1==a.startContainer.nodeType&&(a.insertNode(K("@ ",t)[0]),i.select()),e.insertHtml("    ")}})}function _bindFocusEvent(){var e=this;K(e.edit.textarea[0],e.edit.win).focus(function(t){e.afterFocus&&e.afterFocus.call(e,t),e.container.addClass("focus")}).blur(function(t){e.afterBlur&&e.afterBlur.call(e,t),e.container.removeClass("focus")})}function _removeBookmarkTag(e){return _trim(e.replace(/]*id="?__kindeditor_bookmark_\w+_\d+__"?[^>]*><\/span>/gi,""))}function _removeTempTag(e){return e.replace(/]+class="?__kindeditor_paste__"?[^>]*>[\s\S]*?<\/div>/gi,"")}function _addBookmarkToStack(e,t){if(0===e.length)return void e.push(t);var n=e[e.length-1];_removeBookmarkTag(t.html)!==_removeBookmarkTag(n.html)&&e.push(t)}function _undoToRedo(e,t){var n,i,a=this,o=a.edit,r=o.doc.body;if(0===e.length)return a;o.designMode?(n=a.cmd.range,i=n.createBookmark(!0), +i.html=r.innerHTML):i={html:r.innerHTML},_addBookmarkToStack(t,i);var l=e.pop();return _removeBookmarkTag(i.html)===_removeBookmarkTag(l.html)&&e.length>0&&(l=e.pop()),o.designMode?(o.html(l.html),l.start&&(n.moveToBookmark(l),a.select())):K(r).html(_removeBookmarkTag(l.html)),a}function KEditor(e){function t(e,t){KEditor.prototype[e]===undefined&&(n[e]=t),n.options[e]=t}var n=this;n.options={},_each(e,function(n,i){t(n,e[n])}),_each(K.options,function(e,i){n[e]===undefined&&t(e,i)});var i=K(n.srcElement||"').css("width","100%"),n.tabIndex=isNaN(parseInt(e.tabIndex,10))?n.srcElement.attr("tabindex"):parseInt(e.tabIndex,10),n.iframe.attr("tabindex",n.tabIndex),n.textarea.attr("tabindex",n.tabIndex),n.width&&n.setWidth(n.width),n.height&&n.setHeight(n.height),n.designMode?n.textarea.hide():n.iframe.hide(),l&&n.iframe.bind("load",function(e){n.iframe.unbind("load"),_IE?t():setTimeout(t,0)}),n.div.append(n.iframe),n.div.append(n.textarea),n.srcElement.hide(),!l&&t()},setWidth:function(e){return this.div.css("width",_addUnit(e)),this},setHeight:function(e){var t=this;return e=_addUnit(e),t.div.css("height",e),t.iframe.css("height",e),(_IE&&_V<8||_QUIRKS)&&(e=_addUnit(_removeUnit(e)-2)),t.textarea.css("height",e),t},remove:function(){var e=this,t=e.doc;K(t.body).unbind(),K(t).unbind(),K(e.win).unbind(),e._mousedownHandler&&K(document).unbind("mousedown",e._mousedownHandler),_elementVal(e.srcElement,e.html()),e.srcElement.show(),t.write(""),e.iframe.unbind(),e.textarea.unbind(),KEdit.parent.remove.call(e)},html:function(e,t){var n=this,i=n.doc;if(n.designMode){var a=i.body;return e===undefined?(e=t?""+a.parentNode.innerHTML+"":a.innerHTML,n.beforeGetHtml&&(e=n.beforeGetHtml(e)),_GECKO&&"
        "==e&&(e=""),e):(n.beforeSetHtml&&(e=n.beforeSetHtml(e)),_IE&&_V>=9&&(e=e.replace(/(<.*?checked=")checked(".*>)/gi,"$1$2")),K(a).html(e),n.afterSetHtml&&n.afterSetHtml(),n)}return e===undefined?n.textarea.val():(n.textarea.val(e),n)},design:function(e){var t,n=this;return(e===undefined?!n.designMode:e)?n.designMode||(t=n.html(),n.designMode=!0,n.html(t),n.textarea.hide(),n.iframe.show()):n.designMode&&(t=n.html(),n.designMode=!1,n.html(t),n.iframe.hide(),n.textarea.show()),n.focus()},focus:function(){var e=this;return e.designMode?e.win.focus():e.textarea[0].focus(),e},blur:function(){var e=this;if(_IE){var t=K('',e.div);e.div.append(t),t[0].focus(),t.remove()}else e.designMode?e.win.blur():e.textarea[0].blur();return e},afterChange:function(e){function t(t){setTimeout(function(){e(t)},1)}var n=this,i=n.doc,a=i.body;return K(i).keyup(function(t){t.ctrlKey||t.altKey||!_CHANGE_KEY_MAP[t.which]||e(t)}),K(i).mouseup(e).contextmenu(e),K(n.win).blur(e),K(a).bind("paste",t),K(a).bind("cut",t),n}}),K.EditClass=KEdit,K.edit=_edit,K.iframeDoc=_iframeDoc,_extend(KToolbar,KWidget,{init:function(e){function t(e){var t=K(e);return t.hasClass("ke-outline")?t:t.hasClass("ke-toolbar-icon")?t.parent():void 0}function n(e,n){var i=t(e.target);if(i){if(i.hasClass("ke-disabled"))return;if(i.hasClass("ke-selected"))return;i[n]("ke-on")}}var i=this;KToolbar.parent.init.call(i,e),i.disableMode=_undef(e.disableMode,!1),i.noDisableItemMap=_toMap(_undef(e.noDisableItems,[])),i._itemMap={},i.div.addClass("ke-toolbar").bind("contextmenu,mousedown,mousemove",function(e){e.preventDefault()}).attr("unselectable","on"),i.div.mouseover(function(e){n(e,"addClass")}).mouseout(function(e){n(e,"removeClass")}).click(function(e){var n=t(e.target);if(n){if(n.hasClass("ke-disabled"))return;i.options.click.call(this,e,n.attr("data-name"))}})},get:function(e){return this._itemMap[e]?this._itemMap[e]:this._itemMap[e]=K("span.ke-icon-"+e,this.div).parent()},select:function(e){return _selectToolbar.call(this,e,function(e){e.addClass("ke-selected")}),self},unselect:function(e){return _selectToolbar.call(this,e,function(e){e.removeClass("ke-selected").removeClass("ke-on")}),self},enable:function(e){var t=this,n=e.get?e:t.get(e);return n&&(n.removeClass("ke-disabled"),n.opacity(1)),t},disable:function(e){var t=this,n=e.get?e:t.get(e);return n&&(n.removeClass("ke-selected").addClass("ke-disabled"),n.opacity(.5)),t},disableAll:function(e,t){var n=this,i=n.noDisableItemMap;return t&&(i=_toMap(t)),(e===undefined?!n.disableMode:e)?(K("span.ke-outline",n.div).each(function(){var e=K(this),t=e[0].getAttribute("data-name",2);i[t]||n.disable(e)}),n.disableMode=!0):(K("span.ke-outline",n.div).each(function(){var e=K(this),t=e[0].getAttribute("data-name",2);i[t]||n.enable(e)}),n.disableMode=!1),n}}),K.ToolbarClass=KToolbar,K.toolbar=_toolbar,_extend(KMenu,KWidget,{init:function(e){var t=this;e.z=e.z||811213,KMenu.parent.init.call(t,e),t.centerLineMode=_undef(e.centerLineMode,!0),t.div.addClass("ke-menu").bind("click,mousedown",function(e){e.stopPropagation()}).attr("unselectable","on")},addItem:function(e){var t=this;if("-"===e.title)return void t.div.append(K('
        '));var n=K('
        '),i=K('
        '),a=K('
        '),o=_addUnit(e.height),r=_undef(e.iconClass,"");t.div.append(n),o&&(n.css("height",o),a.css("line-height",o));var l;return t.centerLineMode&&(l=K('
        '),o&&l.css("height",o)),n.mouseover(function(e){K(this).addClass("ke-menu-item-on"),l&&l.addClass("ke-menu-item-center-on")}).mouseout(function(e){K(this).removeClass("ke-menu-item-on"),l&&l.removeClass("ke-menu-item-center-on")}).click(function(t){e.click.call(K(this)),t.stopPropagation()}).append(i),l&&n.append(l),n.append(a),e.checked&&(r="ke-icon-checked"),""!==r&&i.html(''),a.html(e.title),t},remove:function(){var e=this;return e.options.beforeRemove&&e.options.beforeRemove.call(e),K(".ke-menu-item",e.div[0]).unbind(),KMenu.parent.remove.call(e),e}}),K.MenuClass=KMenu,K.menu=_menu,_extend(KColorPicker,KWidget,{init:function(e){var t=this;e.z=e.z||811213,KColorPicker.parent.init.call(t,e);var n=e.colors||[["#E53333","#E56600","#FF9900","#64451D","#DFC5A4","#FFE500"],["#009900","#006600","#99BB00","#B8D100","#60D978","#00D5FF"],["#337FE5","#003399","#4C33E5","#9933E5","#CC33E5","#EE33EE"],["#FFFFFF","#CCCCCC","#999999","#666666","#333333","#000000"]];t.selectedColor=(e.selectedColor||"").toLowerCase(),t._cells=[],t.div.addClass("ke-colorpicker").bind("click,mousedown",function(e){e.stopPropagation()}).attr("unselectable","on");var i=t.doc.createElement("table");t.div.append(i),i.className="ke-colorpicker-table",i.cellPadding=0,i.cellSpacing=0,i.border=0;var a=i.insertRow(0),o=a.insertCell(0);o.colSpan=n[0].length,t._addAttr(o,"","ke-colorpicker-cell-top");for(var r=0;r').css("background-color",t)):e.html(i.options.noColor),K(e).attr("unselectable","on"),i._cells.push(e)},remove:function(){var e=this;return _each(e._cells,function(){this.unbind()}),KColorPicker.parent.remove.call(e),e}}),K.ColorPickerClass=KColorPicker,K.colorpicker=_colorpicker,_extend(KUploadButton,{init:function(e){var t=this,n=K(e.button),i=e.fieldName||"file",a=e.url||"",o=n.val(),r=e.extraParams||{},l=n[0].className||"",s=e.target||"kindeditor_upload_iframe_"+(new Date).getTime();e.afterError=e.afterError||function(e){alert(e)};var d=[];for(var c in r)d.push('');var u=['
        ',e.target?"":'',e.form?'
        ':'
        ','',d.join(""),'',"",'',e.form?"
        ":"","
        "].join(""),p=K(u,n.doc);n.hide(),n.before(p),t.div=p,t.button=n,t.iframe=e.target?K('iframe[name="'+s+'"]'):K("iframe",p),t.form=e.form?K(e.form):K("form",p),t.fileBox=K(".ke-upload-file",p),t.options=e},submit:function(){var e=this,t=e.iframe;return t.bind("load",function(){t.unbind();var n=document.createElement("form");e.fileBox.before(n),K(n).append(e.fileBox),n.reset(),K(n).remove(!0);var i,a=K.iframeDoc(t),o=a.getElementsByTagName("pre")[0],r="";r=o?o.innerHTML:a.body.innerHTML,r=_unescape(r),t[0].src="javascript:false";try{i=K.json(r)}catch(l){e.options.afterError.call(e,""+a.body.parentNode.innerHTML+"")}i&&e.options.afterUpload.call(e,i)}),e.form[0].submit(),e},remove:function(){var e=this;return e.fileBox&&e.fileBox.unbind(),e.iframe.remove(),e.div.remove(),e.button.show(),e}}),K.UploadButtonClass=KUploadButton,K.uploadbutton=_uploadbutton,_extend(KDialog,KWidget,{init:function(e){var t=this,n=_undef(e.shadowMode,!0);e.z=e.z||811213,e.shadowMode=!1,e.autoScroll=_undef(e.autoScroll,!0),KDialog.parent.init.call(t,e);var i=e.title,a=K(e.body,t.doc),o=e.previewBtn,r=e.yesBtn,l=e.noBtn,s=e.closeBtn,d=_undef(e.showMask,!0);t.div.addClass("ke-dialog").bind("click,mousedown",function(e){e.stopPropagation()});var c=K('
        ').appendTo(t.div);_IE&&_V<7?t.iframeMask=K('').appendTo(t.div):n&&K('
        ').appendTo(t.div);var u=K('
        ');c.append(u),u.html(i),t.closeIcon=K('').click(s.click),u.append(t.closeIcon),t.draggable({clickEl:u,beforeDrag:e.beforeDrag});var p=K('
        ');c.append(p),p.append(a);var h=K('');if((o||r||l)&&c.append(h),_each([{btn:o,name:"preview"},{btn:r,name:"yes"},{btn:l,name:"no"}],function(){if(this.btn){var e=_createButton(this.btn);e.addClass("ke-dialog-"+this.name),h.append(e)}}),t.height&&p.height(_removeUnit(t.height)-u.height()-h.height()),t.div.width(t.div.width()),t.div.height(t.div.height()),t.mask=null,d){var f=_docElement(t.doc),m=Math.max(f.scrollWidth,f.clientWidth),g=Math.max(f.scrollHeight,f.clientHeight);t.mask=_widget({x:0,y:0,z:t.z-1,cls:"ke-dialog-mask",width:m,height:g})}t.autoPos(t.div.width(),t.div.height()),t.footerDiv=h,t.bodyDiv=p,t.headerDiv=u,t.isLoading=!1},setMaskIndex:function(e){var t=this;t.mask.div.css("z-index",e)},showLoading:function(e){e=_undef(e,"");var t=this,n=t.bodyDiv;return t.loading=K('
        '+e+"
        ").width(n.width()).height(n.height()).css("top",t.headerDiv.height()+"px"),n.css("visibility","hidden").after(t.loading),t.isLoading=!0,t},hideLoading:function(){return this.loading&&this.loading.remove(),this.bodyDiv.css("visibility","visible"),this.isLoading=!1,this},remove:function(){var e=this;return e.options.beforeRemove&&e.options.beforeRemove.call(e),e.mask&&e.mask.remove(),e.iframeMask&&e.iframeMask.remove(),e.closeIcon.unbind(),K("input",e.div).unbind(),K("button",e.div).unbind(),e.footerDiv.unbind(),e.bodyDiv.unbind(),e.headerDiv.unbind(),K("iframe",e.div).each(function(){K(this).remove()}),KDialog.parent.remove.call(e),e}}),K.DialogClass=KDialog,K.dialog=_dialog,K.tabs=_tabs,K.loadScript=_loadScript,K.loadStyle=_loadStyle,K.ajax=_ajax;var _plugins={},_language={};KEditor.prototype={lang:function(e){return _lang(e,this.langType)},loadPlugin:function(e,t){var n=this;return _plugins[e]?_isFunction(_plugins[e])?(_plugins[e].call(n,KindEditor),t&&t.call(n),n):(setTimeout(function(){n.loadPlugin(e,t)},100),n):(_plugins[e]="loading",_loadScript(n.pluginsPath+e+"/"+e+".js?ver="+encodeURIComponent(K.DEBUG?_TIME:_VERSION),function(){setTimeout(function(){_plugins[e]&&n.loadPlugin(e,t)},0)}),n)},handler:function(e,t){var n=this;return n._handlers[e]||(n._handlers[e]=[]),_isFunction(t)?(n._handlers[e].push(t),n):(_each(n._handlers[e],function(){t=this.call(n,t)}),t)},clickToolbar:function(e,t){var n=this,i="clickToolbar"+e;return t===undefined?n._handlers[i]?n.handler(i):(n.loadPlugin(e,function(){n.handler(i)}),n):n.handler(i,t)},updateState:function(){var e=this;return _each("justifyleft,justifycenter,justifyright,justifyfull,insertorderedlist,insertunorderedlist,subscript,superscript,bold,italic,underline,strikethrough".split(","),function(t,n){e.cmd.state(n)?e.toolbar.select(n):e.toolbar.unselect(n)}),e},addContextmenu:function(e){return this._contextmenus.push(e),this},afterCreate:function(e){return this.handler("afterCreate",e)},beforeRemove:function(e){return this.handler("beforeRemove",e)},beforeGetHtml:function(e){return this.handler("beforeGetHtml",e)},beforeSetHtml:function(e){return this.handler("beforeSetHtml",e)},afterSetHtml:function(e){return this.handler("afterSetHtml",e)},create:function(){function e(){return 0===s.height()?void setTimeout(e,100):void t.resize(i,a,!1)}var t=this,n=t.fullscreenMode;if(t.isCreated)return t;if(t.srcElement.data("kindeditor"))return t;t.srcElement.data("kindeditor","true"),n?_docElement().style.overflow="hidden":_docElement().style.overflow="";var i=n?_docElement().clientWidth+"px":t.width,a=n?_docElement().clientHeight+"px":t.height;(_IE&&_V<8||_QUIRKS)&&(a=_addUnit(_removeUnit(a)+2));var o=t.container=K(t.layout);n?K(document.body).append(o):t.srcElement.before(o);var r=K(".toolbar",o),l=K(".edit",o),s=t.statusbar=K(".statusbar",o);o.removeClass("container").addClass("ke-container ke-container-"+t.themeType).css("width",i),n?(o.css({position:"absolute",left:0,top:0,"z-index":811211}),_GECKO||(t._scrollPos=_getScrollPos()),window.scrollTo(0,0),K(document.body).css({height:"1px",overflow:"hidden"}),K(document.body.parentNode).css("overflow","hidden"),t._fullscreenExecuted=!0):(t._fullscreenExecuted&&(K(document.body).css({height:"",overflow:""}),K(document.body.parentNode).css("overflow","")),t._scrollPos&&window.scrollTo(t._scrollPos.x,t._scrollPos.y));var d=[];K.each(t.items,function(e,n){"|"==n?d.push(''):"/"==n?d.push('
        '):(d.push(''),d.push(''))});var c=t.toolbar=_toolbar({src:r,html:d.join(""),noDisableItems:t.noDisableItems,click:function(e,n){if(e.stop(),t.menu){var i=t.menu.name;if(t.hideMenu(),i===n)return}t.clickToolbar(n)}}),u=_removeUnit(a)-c.div.height(),p=t.edit=_edit({height:u>0&&_removeUnit(a)>t.minHeight?u:t.minHeight,src:l,srcElement:t.srcElement,designMode:t.designMode,themesPath:t.themesPath,bodyClass:t.bodyClass,cssPath:t.cssPath,cssData:t.cssData,beforeGetHtml:function(e){return e=t.beforeGetHtml(e),e=_removeBookmarkTag(_removeTempTag(e)),_formatHtml(e,t.filterMode?t.htmlTags:null,t.urlType,t.wellFormatMode,t.indentChar)},beforeSetHtml:function(e){return e=_formatHtml(e,t.filterMode?t.htmlTags:null,"",!1),t.beforeSetHtml(e)},afterSetHtml:function(){t.edit=p=this,t.afterSetHtml()},afterCreate:function(){if(t.edit=p=this,t.cmd=p.cmd,t._docMousedownFn=function(e){t.menu&&t.hideMenu()},K(p.doc,document).mousedown(t._docMousedownFn),_bindContextmenuEvent.call(t),_bindNewlineEvent.call(t),_bindTabEvent.call(t),_bindFocusEvent.call(t),p.afterChange(function(e){p.designMode&&(t.updateState(),t.addBookmark(),t.options.afterChange&&t.options.afterChange.call(t))}),p.textarea.keyup(function(e){e.ctrlKey||e.altKey||!_INPUT_KEY_MAP[e.which]||t.options.afterChange&&t.options.afterChange.call(t)}),t.readonlyMode&&t.readonly(),t.isCreated=!0,""===t.initContent&&(t.initContent=t.html()),t._undoStack.length>0){var e=t._undoStack.pop();e.start&&(t.html(e.html),p.cmd.range.moveToBookmark(e),t.select())}t.afterCreate(),t.options.afterCreate&&t.options.afterCreate.call(t)}});return s.removeClass("statusbar").addClass("ke-statusbar").append(''),t._fullscreenResizeHandler&&(K(window).unbind("resize",t._fullscreenResizeHandler),t._fullscreenResizeHandler=null),e(),n?(t._fullscreenResizeHandler=function(e){t.isCreated&&t.resize(_docElement().clientWidth,_docElement().clientHeight,!1)},K(window).bind("resize",t._fullscreenResizeHandler),c.select("fullscreen")):(_GECKO&&K(window).bind("scroll",function(e){t._scrollPos=_getScrollPos()}),t.resizeType>0&&_drag({moveEl:o,clickEl:s,moveFn:function(e,n,i,a,o,r){a+=r,t.resize(null,a)}}),2===t.resizeType&&_drag({moveEl:o,clickEl:s.last(),moveFn:function(e,n,i,a,o,r){i+=o,a+=r,t.resize(i,a)}})),t},remove:function(){var e=this;return e.isCreated?(e.beforeRemove(),e.srcElement.data("kindeditor",""),e.menu&&e.hideMenu(),_each(e.dialogs,function(){e.hideDialog()}),K(document).unbind("mousedown",e._docMousedownFn),e.toolbar.remove(),e.edit.remove(),e.statusbar.last().unbind(),e.statusbar.unbind(),e.container.remove(),e.container=e.toolbar=e.edit=e.menu=null,e.dialogs=[],e.isCreated=!1,e):e},resize:function(e,t,n){var i=this;return n=_undef(n,!0),e&&(/%/.test(e)||(e=_removeUnit(e),e=e/gi,"").replace(/ /gi," ")):t.html(_escape(e))},isEmpty:function(){return""===_trim(this.text().replace(/\r\n|\n|\r/,""))},isDirty:function(){return _trim(this.initContent.replace(/\r\n|\n|\r|t/g,""))!==_trim(this.html().replace(/\r\n|\n|\r|t/g,""))},selectedHtml:function(){var e=this.isCreated?this.cmd.range.html():"";return e=_removeBookmarkTag(_removeTempTag(e))},count:function(e){var t=this;return e=(e||"html").toLowerCase(),"html"===e?t.html().length:"text"===e?t.text().replace(/<(?:img|embed).*?>/gi,"K").replace(/\r\n|\n|\r/g,"").length:0},exec:function(e){e=e.toLowerCase();var t=this,n=t.cmd,i=_inArray(e,"selectall,copy,paste,print".split(","))<0;return i&&t.addBookmark(!1),n[e].apply(n,_toArray(arguments,1)),i&&(t.updateState(),t.addBookmark(!1),t.options.afterChange&&t.options.afterChange.call(t)),t},insertHtml:function(e,t){return this.isCreated?(e=this.beforeSetHtml(e),this.exec("inserthtml",e,t),this):this},appendHtml:function(e){if(this.html(this.html()+e),this.isCreated){var t=this.cmd;t.range.selectNodeContents(t.doc.body).collapse(!1),t.select()}return this},sync:function(){return _elementVal(this.srcElement,this.html()),this},focus:function(){return this.isCreated?this.edit.focus():this.srcElement[0].focus(),this},blur:function(){return this.isCreated?this.edit.blur():this.srcElement[0].blur(),this},addBookmark:function(e){e=_undef(e,!0);var t,n=this,i=n.edit,a=i.doc.body,o=_removeTempTag(a.innerHTML);if(e&&n._undoStack.length>0){var r=n._undoStack[n._undoStack.length-1];if(Math.abs(o.length-_removeBookmarkTag(r.html).length)0){var n=t.dialogs[0],i=t.dialogs[t.dialogs.length-1];n.setMaskIndex(i.z+2),e.z=i.z+3,e.showMask=!1}var a=_dialog(e);return t.dialogs.push(a),a},hideDialog:function(){var e=this;if(e.dialogs.length>0&&e.dialogs.pop().remove(),e.dialogs.length>0){var t=e.dialogs[0],n=e.dialogs[e.dialogs.length-1];t.setMaskIndex(n.z-1)}return e},errorDialog:function(e){var t=this,n=t.createDialog({width:750,title:t.lang("uploadError"),body:'
        '}),i=K("iframe",n.div),a=K.iframeDoc(i);return a.open(),a.write(e),a.close(),K(a.body).css("background-color","#FFF"),i[0].contentWindow.focus(),t}},_instances=[],K.remove=function(e){_eachEditor(e,function(e){this.remove(),_instances.splice(e,1)})},K.sync=function(e){_eachEditor(e,function(){this.sync()})},K.html=function(e,t){_eachEditor(e,function(){this.html(t)})},K.insertHtml=function(e,t){_eachEditor(e,function(){this.insertHtml(t)})},K.appendHtml=function(e,t){_eachEditor(e,function(){this.appendHtml(t)})},_IE&&_V<7&&_nativeCommand(document,"BackgroundImageCache",!0),K.EditorClass=KEditor,K.editor=_editor,K.create=_create,K.instances=_instances,K.plugin=_plugin,K.lang=_lang,_plugin("core",function(e){var t=this,n={undo:"Z",redo:"Y",bold:"B",italic:"I",underline:"U",print:"P",selectall:"A"};if(t.afterSetHtml(function(){t.options.afterChange&&t.options.afterChange.call(t)}),t.afterCreate(function(){if("form"==t.syncType){for(var n=e(t.srcElement),i=!1;n=n.parent();)if("form"==n.name){i=!0;break}if(i){n.bind("submit",function(n){t.sync(),e(window).bind("unload",function(){t.edit.textarea.remove()})});var a=e('[type="reset"]',n);a.click(function(){t.html(t.initContent),t.cmd.selection()}),t.beforeRemove(function(){n.unbind(),a.unbind()})}}}),t.clickToolbar("source",function(){t.edit.designMode?(t.toolbar.disableAll(!0),t.edit.design(!1),t.toolbar.select("source")):(t.toolbar.disableAll(!1),t.edit.design(!0),t.toolbar.unselect("source"),_GECKO?setTimeout(function(){t.cmd.selection()},0):t.cmd.selection()),t.designMode=t.edit.designMode}),t.afterCreate(function(){t.designMode||t.toolbar.disableAll(!0).select("source")}),t.clickToolbar("fullscreen",function(){t.fullscreen()}),t.fullscreenShortcut){var i=!1;t.afterCreate(function(){if(e(t.edit.doc,t.edit.textarea).keyup(function(e){27==e.which&&setTimeout(function(){t.fullscreen()},0)}),i){if(_IE&&!t.designMode)return;t.focus()}i||(i=!0)})}_each("undo,redo".split(","),function(e,i){n[i]&&t.afterCreate(function(){_ctrl(this.edit.doc,n[i],function(){t.clickToolbar(i)})}),t.clickToolbar(i,function(){t[i]()})}),t.clickToolbar("formatblock",function(){var e=t.lang("formatblock.formatBlock"),n={h1:28,h2:24,h3:18,H4:14,p:12},i=t.cmd.val("formatblock"),a=t.createMenu({name:"formatblock",width:"en"==t.langType?200:150});_each(e,function(e,o){var r="font-size:"+n[e]+"px;";"h"===e.charAt(0)&&(r+="font-weight:bold;"),a.addItem({title:''+o+"",height:n[e]+12,checked:i===e||i===o,click:function(){t.select().exec("formatblock","<"+e+">").hideMenu()}})})}),t.clickToolbar("fontname",function(){var e=t.cmd.val("fontname"),n=t.createMenu({name:"fontname",width:150});_each(t.lang("fontname.fontName"),function(i,a){n.addItem({title:''+a+"",checked:e===i.toLowerCase()||e===a.toLowerCase(),click:function(){t.exec("fontname",i).hideMenu()}})})}),t.clickToolbar("fontsize",function(){var e=t.cmd.val("fontsize"),n=t.createMenu({name:"fontsize",width:150});_each(t.fontSizeTable,function(i,a){n.addItem({title:''+a+"",height:_removeUnit(a)+12,checked:e===a,click:function(){t.exec("fontsize",a).hideMenu()}})})}),_each("forecolor,hilitecolor".split(","),function(e,n){t.clickToolbar(n,function(){t.createMenu({name:n,selectedColor:t.cmd.val(n)||"default",colors:t.colorTable,click:function(e){t.exec(n,e).hideMenu()}})})}),_each("cut,copy,paste".split(","),function(e,n){t.clickToolbar(n,function(){t.focus();try{t.exec(n,null)}catch(e){alert(t.lang(n+"Error"))}})}),t.clickToolbar("about",function(){var e='
        KindEditor '+_VERSION+'
        Copyright © kindsoft.net All rights reserved.
        ';t.createDialog({name:"about",width:350,title:t.lang("about"),body:e})}),t.plugin.getSelectedLink=function(){return t.cmd.commonAncestor("a")},t.plugin.getSelectedImage=function(){return _getImageFromRange(t.edit.cmd.range,function(e){return!/^ke-\w+$/i.test(e[0].className)})},t.plugin.getSelectedFlash=function(){return _getImageFromRange(t.edit.cmd.range,function(e){return"ke-flash"==e[0].className})},t.plugin.getSelectedMedia=function(){return _getImageFromRange(t.edit.cmd.range,function(e){return"ke-media"==e[0].className||"ke-rm"==e[0].className})},t.plugin.getSelectedAnchor=function(){return _getImageFromRange(t.edit.cmd.range,function(e){return"ke-anchor"==e[0].className})},_each("link,image,flash,media,anchor".split(","),function(e,n){var i=n.charAt(0).toUpperCase()+n.substr(1);_each("edit,delete".split(","),function(e,a){t.addContextmenu({title:t.lang(a+i),click:function(){t.loadPlugin(n,function(){t.plugin[n][a](),t.hideMenu()})},cond:t.plugin["getSelected"+i],width:150,iconClass:"edit"==a?"ke-icon-"+n:undefined})}),t.addContextmenu({title:"-"})}),t.plugin.getSelectedTable=function(){return t.cmd.commonAncestor("table")},t.plugin.getSelectedRow=function(){return t.cmd.commonAncestor("tr")},t.plugin.getSelectedCell=function(){return t.cmd.commonAncestor("td")||t.cmd.commonAncestor("th")},_each("prop,cellprop,colinsertleft,colinsertright,rowinsertabove,rowinsertbelow,rowmerge,colmerge,rowsplit,colsplit,coldelete,rowdelete,delete".split(","),function(e,n){ +var i=_inArray(n,["prop","delete"])<0?t.plugin.getSelectedCell:t.plugin.getSelectedTable;t.addContextmenu({title:t.lang("table"+n),click:function(){t.loadPlugin("table",function(){t.plugin.table[n](),t.hideMenu()})},cond:i,width:170,iconClass:"ke-icon-table"+n})}),t.addContextmenu({title:"-"}),_each("selectall,justifyleft,justifycenter,justifyright,justifyfull,insertorderedlist,insertunorderedlist,indent,outdent,subscript,superscript,hr,print,bold,italic,underline,strikethrough,removeformat,unlink".split(","),function(e,i){n[i]&&t.afterCreate(function(){_ctrl(this.edit.doc,n[i],function(){t.cmd.selection(),t.clickToolbar(i)})}),t.clickToolbar(i,function(){t.focus().exec(i,null)})}),t.afterCreate(function(){function n(){i.range.moveToBookmark(a),i.select(),_WEBKIT&&(e("div."+l,o).each(function(){e(this).after("
        ").remove(!0)}),e("span.Apple-style-span",o).remove(!0),e("span.Apple-tab-span",o).remove(!0),e("span[style]",o).each(function(){"nowrap"==e(this).css("white-space")&&e(this).remove(!0)}),e("meta",o).remove());var n=o[0].innerHTML;o.remove(),""!==n&&(_WEBKIT&&(n=n.replace(/(
        )\1/gi,"$1")),2===t.pasteType&&(n=n.replace(/(<(?:p|p\s[^>]*)>) *(<\/p>)/gi,""),/schemas-microsoft-com|worddocument|mso-\w+/i.test(n)?n=_clearMsWord(n,t.filterMode?t.htmlTags:e.options.htmlTags):(n=_formatHtml(n,t.filterMode?t.htmlTags:null),n=t.beforeSetHtml(n))),1===t.pasteType&&(n=n.replace(/ /gi," "),n=n.replace(/\n\s*\n/g,"\n"),n=n.replace(/]*>/gi,"\n"),n=n.replace(/<\/p>]*>/gi,"\n"),n=n.replace(/<[^>]+>/g,""),n=n.replace(/ {2}/g,"  "),"p"==t.newlineTag?/\n/.test(n)&&(n=n.replace(/^/,"

        ").replace(/$/,"

        ").replace(/\n/g,"

        ")):n=n.replace(/\n/g,"
        $&")),t.insertHtml(n,!0))}var i,a,o,r=t.edit.doc,l="__kindeditor_paste__",s=!1;e(r.body).bind("paste",function(d){if(0===t.pasteType)return void d.stop();if(!s){if(s=!0,e("div."+l,r).remove(),i=t.cmd.selection(),a=i.range.createBookmark(),o=e('

        ',r).css({position:"absolute",width:"1px",height:"1px",overflow:"hidden",left:"-1981px",top:e(a.start).pos().y+"px","white-space":"nowrap"}),e(r.body).append(o),_IE){var c=i.range.get(!0);c.moveToElementText(o[0]),c.select(),c.execCommand("paste"),d.preventDefault()}else i.range.selectNodeContents(o[0]),i.select();setTimeout(function(){n(),s=!1},0)}})}),t.beforeGetHtml(function(e){return _IE&&_V<=8&&(e=e.replace(/]*data-ke-input-tag="([^"]*)"[^>]*>([\s\S]*?)<\/div>/gi,function(e,t){return unescape(t)}),e=e.replace(/(]*)?>)/gi,function(e,t,n){return/\s+type="[^"]+"/i.test(e)?e:t+' type="text"'+n})),e.replace(/(<(?:noscript|noscript\s[^>]*)>)([\s\S]*?)(<\/noscript>)/gi,function(e,t,n,i){return t+_unescape(n).replace(/\s+/g," ")+i}).replace(/]*class="?ke-(flash|rm|media)"?[^>]*>/gi,function(e){var t=_getAttrList(e),n=_getCssList(t.style||""),i=_mediaAttrs(t["data-ke-tag"]),a=_undef(n.width,""),o=_undef(n.height,"");return/px/i.test(a)&&(a=_removeUnit(a)),/px/i.test(o)&&(o=_removeUnit(o)),i.width=_undef(t.width,a),i.height=_undef(t.height,o),_mediaEmbed(i)}).replace(/]*class="?ke-anchor"?[^>]*>/gi,function(e){var t=_getAttrList(e);return''}).replace(/]*data-ke-script-attr="([^"]*)"[^>]*>([\s\S]*?)<\/div>/gi,function(e,t,n){return""+unescape(n)+""}).replace(/]*data-ke-noscript-attr="([^"]*)"[^>]*>([\s\S]*?)<\/div>/gi,function(e,t,n){return""+unescape(n)+""}).replace(/(<[^>]*)data-ke-src="([^"]*)"([^>]*>)/gi,function(e,t,n,i){return e=e.replace(/(\s+(?:href|src)=")[^"]*(")/i,function(e,t,i){return t+_unescape(n)+i}),e=e.replace(/\s+data-ke-src="[^"]*"/i,"")}).replace(/(<[^>]+\s)data-ke-(on\w+="[^"]*"[^>]*>)/gi,function(e,t,n){return t+n})}),t.beforeSetHtml(function(e){return _IE&&_V<=8&&(e=e.replace(/]*>|<(select|button)[^>]*>[\s\S]*?<\/\1>/gi,function(e){var t=_getAttrList(e),n=_getCssList(t.style||"");return"none"==n.display?'
        ':e})),e.replace(/]*type="([^"]+)"[^>]*>(?:<\/embed>)?/gi,function(e){var n=_getAttrList(e);return n.src=_undef(n.src,""),n.width=_undef(n.width,0),n.height=_undef(n.height,0),_mediaImg(t.themesPath+"common/blank.gif",n)}).replace(/]*name="([^"]+)"[^>]*>(?:<\/a>)?/gi,function(e){var n=_getAttrList(e);return n.href!==undefined?e:''}).replace(/]*)>([\s\S]*?)<\/script>/gi,function(e,t,n){return'
        '+escape(n)+"
        "}).replace(/]*)>([\s\S]*?)<\/noscript>/gi,function(e,t,n){return'
        '+escape(n)+"
        "}).replace(/(<[^>]*)(href|src)="([^"]*)"([^>]*>)/gi,function(e,t,n,i,a){return e.match(/\sdata-ke-src="[^"]*"/i)?e:e=t+n+'="'+i+'" data-ke-src="'+_escape(i)+'"'+a}).replace(/(<[^>]+\s)(on\w+="[^"]*"[^>]*>)/gi,function(e,t,n){return t+"data-ke-"+n}).replace(/]*\s+border="0"[^>]*>/gi,function(e){return e.indexOf("ke-zeroborder")>=0?e:_addClassToTag(e,"ke-zeroborder")})})})}}(window),KindEditor.lang({source:"HTML代码",preview:"预览",undo:"后退(Ctrl+Z)",redo:"前进(Ctrl+Y)",cut:"剪切(Ctrl+X)",copy:"复制(Ctrl+C)",paste:"粘贴(Ctrl+V)",plainpaste:"粘贴为无格式文本",wordpaste:"从Word粘贴",selectall:"全选(Ctrl+A)",justifyleft:"左对齐",justifycenter:"居中",justifyright:"右对齐",justifyfull:"两端对齐",insertorderedlist:"编号",insertunorderedlist:"项目符号",indent:"增加缩进",outdent:"减少缩进",subscript:"下标",superscript:"上标",formatblock:"段落",fontname:"字体",fontsize:"文字大小",forecolor:"文字颜色",hilitecolor:"文字背景",bold:"粗体(Ctrl+B)",italic:"斜体(Ctrl+I)",underline:"下划线(Ctrl+U)",strikethrough:"删除线",removeformat:"删除格式",image:"图片",multiimage:"批量图片上传",flash:"Flash",media:"视音频",table:"表格",tablecell:"单元格",hr:"插入横线",emoticons:"插入表情",link:"超级链接",unlink:"取消超级链接",fullscreen:"全屏显示",about:"关于",print:"打印(Ctrl+P)",filemanager:"文件空间",code:"插入程序代码",map:"Google地图",baidumap:"百度地图",lineheight:"行距",clearhtml:"清理HTML代码",pagebreak:"插入分页符",quickformat:"一键排版",insertfile:"插入文件",template:"插入模板",anchor:"锚点",yes:"确定",no:"取消",close:"关闭",editImage:"图片属性",deleteImage:"删除图片",editFlash:"Flash属性",deleteFlash:"删除Flash",editMedia:"视音频属性",deleteMedia:"删除视音频",editLink:"超级链接属性",deleteLink:"取消超级链接",editAnchor:"锚点属性",deleteAnchor:"删除锚点",tableprop:"表格属性",tablecellprop:"单元格属性",tableinsert:"插入表格",tabledelete:"删除表格",tablecolinsertleft:"左侧插入列",tablecolinsertright:"右侧插入列",tablerowinsertabove:"上方插入行",tablerowinsertbelow:"下方插入行",tablerowmerge:"向下合并单元格",tablecolmerge:"向右合并单元格",tablerowsplit:"拆分行",tablecolsplit:"拆分列",tablecoldelete:"删除列",tablerowdelete:"删除行",noColor:"无颜色",pleaseSelectFile:"请选择文件。",invalidImg:"请输入有效的URL地址。\n只允许jpg,gif,bmp,png格式。",invalidMedia:"请输入有效的URL地址。\n只允许swf,flv,mp3,wav,wma,wmv,mid,avi,mpg,asf,rm,rmvb格式。",invalidWidth:"宽度必须为数字。",invalidHeight:"高度必须为数字。",invalidBorder:"边框必须为数字。",invalidUrl:"请输入有效的URL地址。",invalidRows:"行数为必选项,只允许输入大于0的数字。",invalidCols:"列数为必选项,只允许输入大于0的数字。",invalidPadding:"边距必须为数字。",invalidSpacing:"间距必须为数字。",invalidJson:"服务器发生故障。",uploadSuccess:"上传成功。",cutError:"您的浏览器安全设置不允许使用剪切操作,请使用快捷键(Ctrl+X)来完成。",copyError:"您的浏览器安全设置不允许使用复制操作,请使用快捷键(Ctrl+C)来完成。",pasteError:"您的浏览器安全设置不允许使用粘贴操作,请使用快捷键(Ctrl+V)来完成。",ajaxLoading:"加载中,请稍候 ...",uploadLoading:"上传中,请稍候 ...",uploadError:"上传错误","plainpaste.comment":"请使用快捷键(Ctrl+V)把内容粘贴到下面的方框里。","wordpaste.comment":"请使用快捷键(Ctrl+V)把内容粘贴到下面的方框里。","code.pleaseInput":"请输入程序代码。","link.url":"URL","link.linkType":"打开类型","link.newWindow":"新窗口","link.selfWindow":"当前窗口","flash.url":"URL","flash.width":"宽度","flash.height":"高度","flash.upload":"上传","flash.viewServer":"文件空间","media.url":"URL","media.width":"宽度","media.height":"高度","media.autostart":"自动播放","media.upload":"上传","media.viewServer":"文件空间","image.remoteImage":"网络图片","image.localImage":"本地上传","image.remoteUrl":"图片地址","image.localUrl":"上传文件","image.size":"图片大小","image.width":"宽","image.height":"高","image.resetSize":"重置大小","image.align":"对齐方式","image.defaultAlign":"默认方式","image.leftAlign":"左对齐","image.rightAlign":"右对齐","image.imgTitle":"图片说明","image.upload":"浏览...","image.viewServer":"图片空间","multiimage.uploadDesc":"允许用户同时上传<%=uploadLimit%>张图片,单张图片容量不超过<%=sizeLimit%>","multiimage.startUpload":"开始上传","multiimage.clearAll":"全部清空","multiimage.insertAll":"全部插入","multiimage.queueLimitExceeded":"文件数量超过限制。","multiimage.fileExceedsSizeLimit":"文件大小超过限制。","multiimage.zeroByteFile":"无法上传空文件。","multiimage.invalidFiletype":"文件类型不正确。","multiimage.unknownError":"发生异常,无法上传。","multiimage.pending":"等待上传","multiimage.uploadError":"上传失败","filemanager.emptyFolder":"空文件夹","filemanager.moveup":"移到上一级文件夹","filemanager.viewType":"显示方式:","filemanager.viewImage":"缩略图","filemanager.listImage":"详细信息","filemanager.orderType":"排序方式:","filemanager.fileName":"名称","filemanager.fileSize":"大小","filemanager.fileType":"类型","insertfile.url":"URL","insertfile.title":"文件说明","insertfile.upload":"上传","insertfile.viewServer":"文件空间","table.cells":"单元格数","table.rows":"行数","table.cols":"列数","table.size":"大小","table.width":"宽度","table.height":"高度","table.percent":"%","table.px":"px","table.space":"边距间距","table.padding":"边距","table.spacing":"间距","table.align":"对齐方式","table.textAlign":"水平对齐","table.verticalAlign":"垂直对齐","table.alignDefault":"默认","table.alignLeft":"左对齐","table.alignCenter":"居中","table.alignRight":"右对齐","table.alignTop":"顶部","table.alignMiddle":"中部","table.alignBottom":"底部","table.alignBaseline":"基线","table.border":"边框","table.borderWidth":"边框","table.borderColor":"颜色","table.backgroundColor":"背景颜色","map.address":"地址: ","map.search":"搜索","baidumap.address":"地址: ","baidumap.search":"搜索","baidumap.insertDynamicMap":"插入动态地图","anchor.name":"锚点名称","formatblock.formatBlock":{h1:"标题 1",h2:"标题 2",h3:"标题 3",h4:"标题 4",p:"正 文"},"fontname.fontName":{SimSun:"宋体",NSimSun:"新宋体",FangSong_GB2312:"仿宋_GB2312",KaiTi_GB2312:"楷体_GB2312",SimHei:"黑体","Microsoft YaHei":"微软雅黑",Arial:"Arial","Arial Black":"Arial Black","Times New Roman":"Times New Roman","Courier New":"Courier New",Tahoma:"Tahoma",Verdana:"Verdana"},"lineheight.lineHeight":[{1:"单倍行距"},{1.5:"1.5倍行距"},{2:"2倍行距"},{2.5:"2.5倍行距"},{3:"3倍行距"}],"template.selectTemplate":"可选模板","template.replaceContent":"替换当前内容","template.fileList":{"1.html":"图片和文字","2.html":"表格","3.html":"项目编号"}},"zh_CN"),KindEditor.plugin("anchor",function(e){var t=this,n="anchor",i=t.lang(n+".");t.plugin.anchor={edit:function(){var a=['
        ','
        ','",'',"
        ","
        "].join(""),o=t.createDialog({name:n,width:300,title:t.lang(n),body:a,yesBtn:{name:t.lang("yes"),click:function(e){t.insertHtml('').hideDialog().focus()}}}),r=o.div,l=e('input[name="name"]',r),s=t.plugin.getSelectedAnchor();s&&l.val(unescape(s.attr("data-ke-name"))),l[0].focus(),l[0].select()},"delete":function(){t.plugin.getSelectedAnchor().remove()}},t.clickToolbar(n,t.plugin.anchor.edit)}),KindEditor.plugin("autoheight",function(e){function t(){i.iframe.height(o),n.resize(null,Math.max((e.IE?a.scrollHeight:a.offsetHeight)+76,o))}var n=this;if(n.autoHeightMode){var i=n.edit,a=i.doc.body,o=e.removeUnit(n.height);i.iframe[0].scroll="no",a.style.overflowY="hidden",i.afterChange(t),n.isCreated?t():n.afterCreate(t)}}),KindEditor.plugin("baidumap",function(e){var t=this,n="baidumap",i=t.lang(n+"."),a=e.undef(t.mapWidth,558),o=e.undef(t.mapHeight,360);t.clickToolbar(n,function(){function r(){l=m[0].contentWindow,s=e.iframeDoc(m)}var l,s,d=['
        ','
        ','
        ',i.address+' ','','',"","
        ",'
        ',' ","
        ",'
        ',"
        ",'
        ',"
        "].join(""),c=t.createDialog({name:n,width:a+42,title:t.lang(n),body:d,yesBtn:{name:t.lang("yes"),click:function(e){var n=l.map,i=n.getCenter(),r=i.lng+","+i.lat,s=n.getZoom(),d=[f[0].checked?t.pluginsPath+"baidumap/index.html":"http://api.map.baidu.com/staticimage","?center="+encodeURIComponent(r),"&zoom="+encodeURIComponent(s),"&width="+a,"&height="+o,"&markers="+encodeURIComponent(r),"&markerStyles="+encodeURIComponent("l,A")].join("");f[0].checked?t.insertHtml(''):t.exec("insertimage",d),t.hideDialog().focus()}},beforeRemove:function(){h.remove(),s&&s.write(""),m.remove()}}),u=c.div,p=e('[name="address"]',u),h=e('[name="searchBtn"]',u),f=e('[name="insertDynamicMap"]',c.div),m=e('');m.bind("load",function(){m.unbind("load"),e.IE?r():setTimeout(r,0)}),e(".ke-map",u).replaceWith(m),h.click(function(){l.search(p.val())})})}),KindEditor.plugin("clearhtml",function(e){var t=this,n="clearhtml";t.clickToolbar(n,function(){t.focus();var n=t.html();n=n.replace(/(]*>)([\s\S]*?)(<\/script>)/gi,""),n=n.replace(/(]*>)([\s\S]*?)(<\/style>)/gi,""),n=e.formatHtml(n,{a:["href","target"],embed:["src","width","height","type","loop","autostart","quality",".width",".height","align","allowscriptaccess"],img:["src","width","height","border","alt","title",".width",".height"],table:["border"],"td,th":["rowspan","colspan"],"div,hr,br,tbody,tr,p,ol,ul,li,blockquote,h1,h2,h3,h4,h5,h6":[]}),t.html(n),t.cmd.selection(!0),t.addBookmark()})}),KindEditor.plugin("code",function(e){var t=this,n="code";t.clickToolbar(n,function(){var i=t.lang(n+"."),a=['
        ','
        ','","
        ",'',"
        "].join(""),o=t.createDialog({name:n,width:450,title:t.lang(n),body:a,yesBtn:{name:t.lang("yes"),click:function(n){var a=e(".ke-code-type",o.div).val(),l=r.val(),s=""===a?"":" lang-"+a,d='
        \n'+e.escape(l)+"
        ";return""===e.trim(l)?(alert(i.pleaseInput),void r[0].focus()):void t.insertHtml(d).hideDialog().focus()}}}),r=e("textarea",o.div);r[0].focus()})}),KindEditor.plugin("emoticons",function(e){var t=this,n="emoticons",i=t.emoticonsPath||t.pluginsPath+"emoticons/images/",a=void 0===t.allowPreviewEmoticons||t.allowPreviewEmoticons,o=1;t.clickToolbar(n,function(){function r(n,a,o){k?n.mouseover(function(){a>v?(k.css("left",0),k.css("right","")):(k.css("left",""),k.css("right",0)),w.attr("src",i+o+".gif"),e(this).addClass("ke-on")}):n.mouseover(function(){e(this).addClass("ke-on")}),n.mouseout(function(){e(this).removeClass("ke-on")}),n.click(function(e){t.insertHtml('').hideMenu().focus(),e.stop()})}function l(t,n){var a=document.createElement("table");n.append(a),k&&(e(a).mouseover(function(){k.show("block")}),e(a).mouseout(function(){k.hide()}),b.push(e(a))),a.className="ke-table",a.cellPadding=0,a.cellSpacing=0,a.border=0;for(var o=(t-1)*m+f,l=0;l
        ').css("background-position","-"+24*o+"px 0px").css("background-image","url("+i+"static.gif)");c.append(h),b.push(c),o++}return a}function s(){e.each(b,function(){this.unbind()})}function d(e,t){e.click(function(e){s(),C.parentNode.removeChild(C),S.remove(),C=l(t,_),c(t),o=t,e.stop()})}function c(t){S=e('
        '),_.append(S);for(var n=1;n<=g;n++){if(t!==n){var i=e('
        ['+n+"]");d(i,n),S.append(i),b.push(i)}else S.append(e("@["+n+"]"));S.append(e("@ "))}}var u=5,p=9,h=135,f=0,m=u*p,g=Math.ceil(h/m),v=Math.floor(p/2),_=e('
        '),b=[],y=t.createMenu({name:n,beforeRemove:function(){s()}});y.div.append(_);var k,w;a&&(k=e('
        ').css("right",0),w=e(''),_.append(k),k.append(w));var S,C=l(o,_);c(o)})}),KindEditor.plugin("filemanager",function(e){function t(e,t,n){return e+" ("+Math.ceil(t/1024)+"KB, "+n+")"}function n(e,n){n.is_dir?e.attr("title",n.filename):e.attr("title",t(n.filename,n.filesize,n.datetime))}var i=this,a="filemanager",o=e.undef(i.fileManagerJson,i.basePath+"php/file_manager_json.php"),r=i.pluginsPath+a+"/images/",l=i.lang(a+".");i.plugin.filemanagerDialog=function(t){function s(t,n,a){var r="path="+t+"&order="+n+"&dir="+m;b.showLoading(i.lang("ajaxLoading")),e.ajax(e.addParam(o,r+"&"+(new Date).getTime()),function(e){b.hideLoading(),a(e)})}function d(t,n,i,a){var o=e.formatUrl(n.current_url+i.filename,"absolute"),r=encodeURIComponent(n.current_dir_path+i.filename+"/");i.is_dir?t.click(function(e){s(r,C.val(),a)}):i.is_photo?t.click(function(e){v.call(this,o,i.filename)}):t.click(function(e){v.call(this,o,i.filename)}),E.push(t)}function c(t,n){function i(){"VIEW"==S.val()?s(t.current_dir_path,C.val(),p):s(t.current_dir_path,C.val(),u)}e.each(E,function(){this.unbind()}),w.unbind(),S.unbind(),C.unbind(),t.current_dir_path&&w.click(function(e){s(t.moveup_dir_path,C.val(),n)}),S.change(i),C.change(i),k.html("")}function u(t){c(t,u);var n=document.createElement("table");n.className="ke-table",n.cellPadding=0,n.cellSpacing=0,n.border=0,k.append(n);for(var i=t.file_list,a=0,o=i.length;a'),m=e(p[0].insertCell(0)).addClass("ke-cell ke-name").append(f).append(document.createTextNode(" "+s.filename));!s.is_dir||s.has_file?(p.css("cursor","pointer"),m.attr("title",s.filename),d(m,t,s,u)):m.attr("title",l.emptyFolder),e(p[0].insertCell(1)).addClass("ke-cell ke-size").html(s.is_dir?"-":Math.ceil(s.filesize/1024)+"KB"),e(p[0].insertCell(2)).addClass("ke-cell ke-datetime").html(s.datetime)}}function p(t){c(t,p);for(var i=t.file_list,a=0,o=i.length;a');k.append(u);var h=e('
        ').mouseover(function(t){e(this).addClass("ke-on")}).mouseout(function(t){e(this).removeClass("ke-on")});u.append(h);var f=t.current_url+s.filename,m=s.is_dir?r+"folder-64.gif":s.is_photo?f:r+"file-64.gif",g=e(''+s.filename+'');!s.is_dir||s.has_file?(h.css("cursor","pointer"),n(h,s),d(h,t,s,p)):h.attr("title",l.emptyFolder),h.append(g),u.append('
        '+s.filename+"
        ")}}var h=e.undef(t.width,650),f=e.undef(t.height,510),m=e.undef(t.dirName,""),g=e.undef(t.viewType,"VIEW").toUpperCase(),v=t.clickFn,_=['
        ','
        ','
        ',' ',''+l.moveup+"","
        ",'
        ',l.viewType+' ",l.orderType+' ","
        ",'
        ',"
        ",'
        ',"
        "].join(""),b=i.createDialog({name:a,width:h,height:f,title:i.lang(a),body:_}),y=b.div,k=e(".ke-plugin-filemanager-body",y),w=(e('[name="moveupImg"]',y),e('[name="moveupLink"]',y)),S=(e('[name="viewServer"]',y),e('[name="viewType"]',y)),C=e('[name="orderType"]',y),E=[];return S.val(g),s("",C.val(),"VIEW"==g?p:u),b}}),KindEditor.plugin("flash",function(e){var t=this,n="flash",i=t.lang(n+"."),a=e.undef(t.allowFlashUpload,!0),o=e.undef(t.allowFileManager,!1),r=e.undef(t.formatUploadUrl,!0),l=e.undef(t.extraFileUploadParams,{}),s=e.undef(t.filePostName,"imgFile"),d=e.undef(t.uploadJson,t.basePath+"php/upload_json.php");t.plugin.flash={edit:function(){var c=['
        ','
        ','",'  ','  ','','',"","
        ",'
        ','",' ',"
        ",'
        ','",' ',"
        ","
        "].join(""),u=t.createDialog({name:n,width:450,title:t.lang(n),body:c,yesBtn:{name:t.lang("yes"),click:function(n){var i=e.trim(h.val()),a=m.val(),o=g.val();if("http://"==i||e.invalidUrl(i))return alert(t.lang("invalidUrl")),void h[0].focus();if(!/^\d*$/.test(a))return alert(t.lang("invalidWidth")),void m[0].focus();if(!/^\d*$/.test(o))return alert(t.lang("invalidHeight")),void g[0].focus();var r=e.mediaImg(t.themesPath+"common/blank.gif",{src:i,type:e.mediaType(".swf"),width:a,height:o,quality:"high"});t.insertHtml(r).hideDialog().focus()}}}),p=u.div,h=e('[name="url"]',p),f=e('[name="viewServer"]',p),m=e('[name="width"]',p),g=e('[name="height"]',p);if(h.val("http://"),a){var v=e.uploadbutton({button:e(".ke-upload-button",p)[0],fieldName:s,extraParams:l,url:e.addParam(d,"dir=flash"),afterUpload:function(i){if(u.hideLoading(),0===i.error){var a=i.url;r&&(a=e.formatUrl(a,"absolute")),h.val(a),t.afterUpload&&t.afterUpload.call(t,a,i,n),alert(t.lang("uploadSuccess"))}else alert(i.message)},afterError:function(e){u.hideLoading(),t.errorDialog(e)}});v.fileBox.change(function(e){u.showLoading(t.lang("uploadLoading")),v.submit()})}else e(".ke-upload-button",p).hide();o?f.click(function(n){t.loadPlugin("filemanager",function(){t.plugin.filemanagerDialog({viewType:"LIST",dirName:"flash",clickFn:function(n,i){t.dialogs.length>1&&(e('[name="url"]',p).val(n),t.afterSelectFile&&t.afterSelectFile.call(t,n),t.hideDialog())}})})}):f.hide();var _=t.plugin.getSelectedFlash();if(_){var b=e.mediaAttrs(_.attr("data-ke-tag"));h.val(b.src),m.val(e.removeUnit(_.css("width"))||b.width||0),g.val(e.removeUnit(_.css("height"))||b.height||0)}h[0].focus(),h[0].select()},"delete":function(){t.plugin.getSelectedFlash().remove(),t.addBookmark()}},t.clickToolbar(n,t.plugin.flash.edit)}),KindEditor.plugin("image",function(e){var t=this,n="image",i=e.undef(t.allowImageUpload,!0),a=e.undef(t.allowImageRemote,!0),o=e.undef(t.formatUploadUrl,!0),r=e.undef(t.allowFileManager,!1),l=e.undef(t.uploadJson,t.basePath+"php/upload_json.php"),s=e.undef(t.imageTabIndex,0),d=t.pluginsPath+"image/images/",c=e.undef(t.extraFileUploadParams,{}),u=e.undef(t.filePostName,"imgFile"),p=e.undef(t.fillDescAfterUploadImage,!1),h=t.lang(n+".");t.plugin.imageDialog=function(i){function a(e,t){U.val(e),A.val(t),R=e,M=t}var s=(i.imageUrl,e.undef(i.imageWidth,""),e.undef(i.imageHeight,""),e.undef(i.imageTitle,""),e.undef(i.imageAlign,""),e.undef(i.showRemote,!0)),f=e.undef(i.showLocal,!0),m=e.undef(i.tabIndex,0),g=i.clickFn,v="kindeditor_upload_iframe_"+(new Date).getTime(),_=[];for(var b in c)_.push('');var y,k=['
        ','
        ','",'","
        "].join(""),w=f||r?450:400,S=f&&s?300:250,C=t.createDialog({name:n,width:w,height:S,title:t.lang(n),body:k,yesBtn:{name:t.lang("yes"),click:function(n){if(!C.isLoading){if(f&&s&&y&&1===y.selectedIndex||!s)return""==D.fileBox.val()?void alert(t.lang("pleaseSelectFile")):(C.showLoading(t.lang("uploadLoading")),D.submit(),void T.val(""));var i=e.trim(x.val()),a=U.val(),o=A.val(),r=N.val(),l="";return I.each(function(){if(this.checked)return l=this.value,!1}),"http://"==i||e.invalidUrl(i)?(alert(t.lang("invalidUrl")),void x[0].focus()):/^\d*$/.test(a)?/^\d*$/.test(o)?void g.call(t,i,r,a,o,0,l):(alert(t.lang("invalidHeight")),void A[0].focus()):(alert(t.lang("invalidWidth")),void U[0].focus())}}},beforeRemove:function(){K.unbind(),U.unbind(),A.unbind(),F.unbind()}}),E=C.div,x=e('[name="url"]',E),T=e('[name="localUrl"]',E),K=e('[name="viewServer"]',E),U=e('.tab1 [name="width"]',E),A=e('.tab1 [name="height"]',E),F=e(".ke-refresh-btn",E),N=e('.tab1 [name="title"]',E),I=e('.tab1 [name="align"]',E);s&&f?(y=e.tabs({src:e(".tabs",E),afterSelect:function(e){}}),y.add({title:h.remoteImage,panel:e(".tab1",E)}),y.add({title:h.localImage,panel:e(".tab2",E)}),y.select(m)):s?e(".tab1",E).show():f&&e(".tab2",E).show();var D=e.uploadbutton({button:e(".ke-upload-button",E)[0],fieldName:u,form:e(".ke-form",E),target:v,width:70,afterUpload:function(i){if(C.hideLoading(),0===i.error){var a=i.url;o&&(a=e.formatUrl(a,"absolute")),t.afterUpload&&t.afterUpload.call(t,a,i,n),p?(e(".ke-dialog-row #remoteUrl",E).val(a),e(".ke-tabs-li",E)[0].click(),e(".ke-refresh-btn",E).click()):g.call(t,a,i.title,i.width,i.height,i.border,i.align)}else alert(i.message)},afterError:function(e){C.hideLoading(),t.errorDialog(e)}});D.fileBox.change(function(e){T.val(D.fileBox.val())}),r?K.click(function(n){t.loadPlugin("filemanager",function(){t.plugin.filemanagerDialog({viewType:"VIEW",dirName:"image",clickFn:function(n,i){t.dialogs.length>1&&(e('[name="url"]',E).val(n),t.afterSelectFile&&t.afterSelectFile.call(t,n),t.hideDialog())}})})}):K.hide();var R=0,M=0;return F.click(function(t){var n=e('',document).css({position:"absolute",visibility:"hidden",top:0,left:"-1000px"});n.bind("load",function(){a(n.width(),n.height()),n.remove()}),e(document.body).append(n)}),U.change(function(e){R>0&&A.val(Math.round(M/R*parseInt(this.value,10)))}),A.change(function(e){M>0&&U.val(Math.round(R/M*parseInt(this.value,10)))}),x.val(i.imageUrl),a(i.imageWidth,i.imageHeight),N.val(i.imageTitle),I.each(function(){if(this.value===i.imageAlign)return this.checked=!0,!1}),s&&0===m&&(x[0].focus(),x[0].select()),C},t.plugin.image={edit:function(){var e=t.plugin.getSelectedImage();t.plugin.imageDialog({imageUrl:e?e.attr("data-ke-src"):"http://",imageWidth:e?e.width():"",imageHeight:e?e.height():"",imageTitle:e?e.attr("title"):"",imageAlign:e?e.attr("align"):"",showRemote:a,showLocal:i,tabIndex:e?0:s,clickFn:function(n,i,a,o,r,l){e?(e.attr("src",n),e.attr("data-ke-src",n),e.attr("width",a),e.attr("height",o),e.attr("title",i),e.attr("align",l),e.attr("alt",i)):t.exec("insertimage",n,i,a,o,r,l),setTimeout(function(){t.hideDialog().focus()},0)}})},"delete":function(){var e=t.plugin.getSelectedImage();"a"==e.parent().name&&(e=e.parent()),e.remove(),t.addBookmark()}},t.clickToolbar(n,t.plugin.image.edit)}),KindEditor.plugin("insertfile",function(e){var t=this,n="insertfile",i=e.undef(t.allowFileUpload,!0),a=e.undef(t.allowFileManager,!1),o=e.undef(t.formatUploadUrl,!0),r=e.undef(t.uploadJson,t.basePath+"php/upload_json.php"),l=e.undef(t.extraFileUploadParams,{}),s=e.undef(t.filePostName,"imgFile"),d=t.lang(n+".");t.plugin.fileDialog=function(c){var u=e.undef(c.fileUrl,"http://"),p=e.undef(c.fileTitle,""),h=c.clickFn,f=['
        ','
        ','",'  ','  ','','',"","
        ",'
        ','",'
        ',"
        ","",""].join(""),m=t.createDialog({name:n,width:450,title:t.lang(n),body:f,yesBtn:{name:t.lang("yes"),click:function(n){var i=e.trim(v.val()),a=b.val();return"http://"==i||e.invalidUrl(i)?(alert(t.lang("invalidUrl")),void v[0].focus()):(""===e.trim(a)&&(a=i),void h.call(t,i,a))}}}),g=m.div,v=e('[name="url"]',g),_=e('[name="viewServer"]',g),b=e('[name="title"]',g);if(i){ +var y=e.uploadbutton({button:e(".ke-upload-button",g)[0],fieldName:s,url:e.addParam(r,"dir=file"),extraParams:l,afterUpload:function(i){if(m.hideLoading(),0===i.error){var a=i.url;o&&(a=e.formatUrl(a,"absolute")),v.val(a),t.afterUpload&&t.afterUpload.call(t,a,i,n),alert(t.lang("uploadSuccess"))}else alert(i.message)},afterError:function(e){m.hideLoading(),t.errorDialog(e)}});y.fileBox.change(function(e){m.showLoading(t.lang("uploadLoading")),y.submit()})}else e(".ke-upload-button",g).hide();a?_.click(function(n){t.loadPlugin("filemanager",function(){t.plugin.filemanagerDialog({viewType:"LIST",dirName:"file",clickFn:function(n,i){t.dialogs.length>1&&(e('[name="url"]',g).val(n),t.afterSelectFile&&t.afterSelectFile.call(t,n),t.hideDialog())}})})}):_.hide(),v.val(u),b.val(p),v[0].focus(),v[0].select()},t.clickToolbar(n,function(){t.plugin.fileDialog({clickFn:function(e,n){var i=''+n+"";t.insertHtml(i).hideDialog().focus()}})})}),KindEditor.plugin("lineheight",function(e){var t=this,n="lineheight",i=t.lang(n+".");t.clickToolbar(n,function(){var a="",o=t.cmd.commonNode({"*":".line-height"});o&&(a=o.css("line-height"));var r=t.createMenu({name:n,width:150});e.each(i.lineHeight,function(n,i){e.each(i,function(e,n){r.addItem({title:n,checked:a===e,click:function(){t.cmd.toggle('',{span:".line-height="+e}),t.updateState(),t.addBookmark(),t.hideMenu()}})})})})}),KindEditor.plugin("link",function(e){var t=this,n="link";t.plugin.link={edit:function(){var i=t.lang(n+"."),a='
        ',o=t.createDialog({name:n,width:450,title:t.lang(n),body:a,yesBtn:{name:t.lang("yes"),click:function(n){var i=e.trim(l.val());return"http://"==i||e.invalidUrl(i)?(alert(t.lang("invalidUrl")),void l[0].focus()):void t.exec("createlink",i,s.val()).hideDialog().focus()}}}),r=o.div,l=e('input[name="url"]',r),s=e('select[name="type"]',r);l.val("http://"),s[0].options[0]=new Option(i.newWindow,"_blank"),s[0].options[1]=new Option(i.selfWindow,""),t.cmd.selection();var d=t.plugin.getSelectedLink();d&&(t.cmd.range.selectNode(d[0]),t.cmd.select(),l.val(d.attr("data-ke-src")),s.val(d.attr("target"))),l[0].focus(),l[0].select()},"delete":function(){t.exec("unlink",null)}},t.clickToolbar(n,t.plugin.link.edit)}),KindEditor.plugin("map",function(e){var t=this,n="map",i=t.lang(n+".");t.clickToolbar(n,function(){function a(){o=p[0].contentWindow,r=e.iframeDoc(p)}var o,r,l=['
        ','
        ',i.address+' ','','',"","
        ",'
        ',"
        "].join(""),s=t.createDialog({name:n,width:600,title:t.lang(n),body:l,yesBtn:{name:t.lang("yes"),click:function(e){var n=(o.geocoder,o.map),i=n.getCenter().lat()+","+n.getCenter().lng(),a=n.getZoom(),r=n.getMapTypeId(),l="http://maps.googleapis.com/maps/api/staticmap";l+="?center="+encodeURIComponent(i),l+="&zoom="+encodeURIComponent(a),l+="&size=558x360",l+="&maptype="+encodeURIComponent(r),l+="&markers="+encodeURIComponent(i),l+="&language="+t.langType,l+="&sensor=false",t.exec("insertimage",l).hideDialog().focus()}},beforeRemove:function(){u.remove(),r&&r.write(""),p.remove()}}),d=s.div,c=e('[name="address"]',d),u=e('[name="searchBtn"]',d),p=(["",'',"",'',"","",'','
        ',""].join("\n"),e(''));p.bind("load",function(){p.unbind("load"),e.IE?a():setTimeout(a,0)}),e(".ke-map",d).replaceWith(p),u.click(function(){o.search(c.val())})})}),KindEditor.plugin("media",function(e){var t=this,n="media",i=t.lang(n+"."),a=e.undef(t.allowMediaUpload,!0),o=e.undef(t.allowFileManager,!1),r=e.undef(t.formatUploadUrl,!0),l=e.undef(t.extraFileUploadParams,{}),s=e.undef(t.filePostName,"imgFile"),d=e.undef(t.uploadJson,t.basePath+"php/upload_json.php");t.plugin.media={edit:function(){var c=['
        ','
        ','",'  ','  ','','',"","
        ",'
        ','",'',"
        ",'
        ','",'',"
        ",'
        ','",' ',"
        ","
        "].join(""),u=t.createDialog({name:n,width:450,height:230,title:t.lang(n),body:c,yesBtn:{name:t.lang("yes"),click:function(n){var i=e.trim(h.val()),a=m.val(),o=g.val();if("http://"==i||e.invalidUrl(i))return alert(t.lang("invalidUrl")),void h[0].focus();if(!/^\d*$/.test(a))return alert(t.lang("invalidWidth")),void m[0].focus();if(!/^\d*$/.test(o))return alert(t.lang("invalidHeight")),void g[0].focus();var r=e.mediaImg(t.themesPath+"common/blank.gif",{src:i,type:e.mediaType(i),width:a,height:o,autostart:v[0].checked?"true":"false",loop:"true"});t.insertHtml(r).hideDialog().focus()}}}),p=u.div,h=e('[name="url"]',p),f=e('[name="viewServer"]',p),m=e('[name="width"]',p),g=e('[name="height"]',p),v=e('[name="autostart"]',p);if(h.val("http://"),a){var _=e.uploadbutton({button:e(".ke-upload-button",p)[0],fieldName:s,extraParams:l,url:e.addParam(d,"dir=media"),afterUpload:function(i){if(u.hideLoading(),0===i.error){var a=i.url;r&&(a=e.formatUrl(a,"absolute")),h.val(a),t.afterUpload&&t.afterUpload.call(t,a,i,n),alert(t.lang("uploadSuccess"))}else alert(i.message)},afterError:function(e){u.hideLoading(),t.errorDialog(e)}});_.fileBox.change(function(e){u.showLoading(t.lang("uploadLoading")),_.submit()})}else e(".ke-upload-button",p).hide();o?f.click(function(n){t.loadPlugin("filemanager",function(){t.plugin.filemanagerDialog({viewType:"LIST",dirName:"media",clickFn:function(n,i){t.dialogs.length>1&&(e('[name="url"]',p).val(n),t.afterSelectFile&&t.afterSelectFile.call(t,n),t.hideDialog())}})})}):f.hide();var b=t.plugin.getSelectedMedia();if(b){var y=e.mediaAttrs(b.attr("data-ke-tag"));h.val(y.src),m.val(e.removeUnit(b.css("width"))||y.width||0),g.val(e.removeUnit(b.css("height"))||y.height||0),v[0].checked="true"===y.autostart}h[0].focus(),h[0].select()},"delete":function(){t.plugin.getSelectedMedia().remove(),t.addBookmark()}},t.clickToolbar(n,t.plugin.media.edit)}),function(e){function t(e){this.init(e)}e.extend(t,{init:function(t){function n(t,n){e(".ke-status > div",t).hide(),e(".ke-message",t).addClass("ke-error").show().html(e.escape(n))}var i=this;t.afterError=t.afterError||function(e){alert(e)},i.options=t,i.progressbars={},i.div=e(t.container).html(['
        ','
        ','
        ','',"
        ",'
        '+t.uploadDesc+"
        ",'','',"","
        ",'
        ',"
        "].join("")),i.bodyDiv=e(".ke-swfupload-body",i.div);var a={debug:!1,upload_url:t.uploadUrl,flash_url:t.flashUrl,file_post_name:t.filePostName,button_placeholder:e(".ke-swfupload-button > input",i.div)[0],button_image_url:t.buttonImageUrl,button_width:t.buttonWidth,button_height:t.buttonHeight,button_cursor:SWFUpload.CURSOR.HAND,file_types:t.fileTypes,file_types_description:t.fileTypesDesc,file_upload_limit:t.fileUploadLimit,file_size_limit:t.fileSizeLimit,post_params:t.postParams,file_queued_handler:function(e){e.url=i.options.fileIconUrl,i.appendFile(e)},file_queue_error_handler:function(n,i,a){var o="";switch(i){case SWFUpload.QUEUE_ERROR.QUEUE_LIMIT_EXCEEDED:o=t.queueLimitExceeded;break;case SWFUpload.QUEUE_ERROR.FILE_EXCEEDS_SIZE_LIMIT:o=t.fileExceedsSizeLimit;break;case SWFUpload.QUEUE_ERROR.ZERO_BYTE_FILE:o=t.zeroByteFile;break;case SWFUpload.QUEUE_ERROR.INVALID_FILETYPE:o=t.invalidFiletype;break;default:o=t.unknownError}e.DEBUG&&alert(o)},upload_start_handler:function(t){var n=this,i=e('div[data-id="'+t.id+'"]',n.bodyDiv);e(".ke-status > div",i).hide(),e(".ke-progressbar",i).show()},upload_progress_handler:function(e,t,n){var a=Math.round(100*t/n),o=i.progressbars[e.id];o.bar.css("width",Math.round(80*a/100)+"px"),o.percent.html(a+"%")},upload_error_handler:function(t,a,o){if(t&&t.filestatus==SWFUpload.FILE_STATUS.ERROR){var r=e('div[data-id="'+t.id+'"]',i.bodyDiv).eq(0);n(r,i.options.errorMessage)}},upload_success_handler:function(t,a){var o=e('div[data-id="'+t.id+'"]',i.bodyDiv).eq(0),r={};try{r=e.json(a)}catch(l){i.options.afterError.call(this,""+a+"")}return 0!==r.error?void n(o,e.DEBUG?r.message:i.options.errorMessage):(t.url=r.url,e(".ke-img",o).attr("src",t.url).attr("data-status",t.filestatus).data("data",r),void e(".ke-status > div",o).hide())}};i.swfu=new SWFUpload(a),e(".ke-swfupload-startupload input",i.div).click(function(){i.swfu.startUpload()})},getUrlList:function(){var t=[];return e(".ke-img",self.bodyDiv).each(function(){var n=e(this),i=n.attr("data-status");i==SWFUpload.FILE_STATUS.COMPLETE&&t.push(n.data("data"))}),t},removeFile:function(t){var n=this;n.swfu.cancelUpload(t);var i=e('div[data-id="'+t+'"]',n.bodyDiv);e(".ke-photo",i).unbind(),e(".ke-delete",i).unbind(),i.remove()},removeFiles:function(){var t=this;e(".ke-item",t.bodyDiv).each(function(){t.removeFile(e(this).attr("data-id"))})},appendFile:function(t){var n=this,i=e('
        ');n.bodyDiv.append(i);var a=e('
        ').mouseover(function(t){e(this).addClass("ke-on")}).mouseout(function(t){e(this).removeClass("ke-on")});i.append(a);var o=e(''+t.name+'');a.append(o),e('').appendTo(a).click(function(){n.removeFile(t.id)});var r=e('
        ').appendTo(a);e(['
        ','
        ','
        0%
        '].join("")).hide().appendTo(r),e('
        '+n.options.pendingMessage+"
        ").appendTo(r),i.append('
        '+t.name+"
        "),n.progressbars[t.id]={bar:e(".ke-progressbar-bar-inner",a),percent:e(".ke-progressbar-percent",a)}},remove:function(){this.removeFiles(),this.swfu.destroy(),this.div.html("")}}),e.swfupload=function(e,n){return new t(e,n)}}(KindEditor),KindEditor.plugin("multiimage",function(e){var t=this,n="multiimage",i=(e.undef(t.formatUploadUrl,!0),e.undef(t.uploadJson,t.basePath+"php/upload_json.php")),a=t.pluginsPath+"multiimage/images/",o=e.undef(t.imageSizeLimit,"1MB"),r=(e.undef(t.imageFileTypes,"*.jpg;*.gif;*.png"),e.undef(t.imageUploadLimit,20)),l=e.undef(t.filePostName,"imgFile"),s=t.lang(n+".");t.plugin.multiImageDialog=function(d){var c=d.clickFn,u=e.tmpl(s.uploadDesc,{uploadLimit:r,sizeLimit:o}),p=['
        ','
        ',"
        ","
        "].join(""),h=t.createDialog({name:n,width:650,height:510,title:t.lang(n),body:p,previewBtn:{name:s.insertAll,click:function(e){c.call(t,m.getUrlList())}},yesBtn:{name:s.clearAll,click:function(e){m.removeFiles()}},beforeRemove:function(){(!e.IE||e.V<=8)&&m.remove()}}),f=h.div,m=e.swfupload({container:e(".swfupload",f),buttonImageUrl:a+("zh_CN"==t.langType?"select-files-zh_CN.png":"select-files-en.png"),buttonWidth:"zh_CN"==t.langType?72:88,buttonHeight:23,fileIconUrl:a+"image.png",uploadDesc:u,startButtonValue:s.startUpload,uploadUrl:e.addParam(i,"dir=image"),flashUrl:a+"swfupload.swf",filePostName:l,fileTypes:"*.jpg;*.jpeg;*.gif;*.png;*.bmp",fileTypesDesc:"Image Files",fileUploadLimit:r,fileSizeLimit:o,postParams:e.undef(t.extraFileUploadParams,{}),queueLimitExceeded:s.queueLimitExceeded,fileExceedsSizeLimit:s.fileExceedsSizeLimit,zeroByteFile:s.zeroByteFile,invalidFiletype:s.invalidFiletype,unknownError:s.unknownError,pendingMessage:s.pending,errorMessage:s.uploadError,afterError:function(e){t.errorDialog(e)}});return h},t.clickToolbar(n,function(){t.plugin.multiImageDialog({clickFn:function(n){0!==n.length&&(e.each(n,function(e,n){t.afterUpload&&t.afterUpload.call(t,n.url,n,"multiimage"),t.exec("insertimage",n.url,n.title,n.width,n.height,n.border,n.align)}),setTimeout(function(){t.hideDialog().focus()},0))}})})}),function(){window.SWFUpload=function(e){this.initSWFUpload(e)},SWFUpload.prototype.initSWFUpload=function(e){try{this.customSettings={},this.settings=e,this.eventQueue=[],this.movieName="KindEditor_SWFUpload_"+SWFUpload.movieCount++,this.movieElement=null,SWFUpload.instances[this.movieName]=this,this.initSettings(),this.loadFlash(),this.displayDebugInfo()}catch(t){throw delete SWFUpload.instances[this.movieName],t}},SWFUpload.instances={},SWFUpload.movieCount=0,SWFUpload.version="2.2.0 2009-03-25",SWFUpload.QUEUE_ERROR={QUEUE_LIMIT_EXCEEDED:-100,FILE_EXCEEDS_SIZE_LIMIT:-110,ZERO_BYTE_FILE:-120,INVALID_FILETYPE:-130},SWFUpload.UPLOAD_ERROR={HTTP_ERROR:-200,MISSING_UPLOAD_URL:-210,IO_ERROR:-220,SECURITY_ERROR:-230,UPLOAD_LIMIT_EXCEEDED:-240,UPLOAD_FAILED:-250,SPECIFIED_FILE_ID_NOT_FOUND:-260,FILE_VALIDATION_FAILED:-270,FILE_CANCELLED:-280,UPLOAD_STOPPED:-290},SWFUpload.FILE_STATUS={QUEUED:-1,IN_PROGRESS:-2,ERROR:-3,COMPLETE:-4,CANCELLED:-5},SWFUpload.BUTTON_ACTION={SELECT_FILE:-100,SELECT_FILES:-110,START_UPLOAD:-120},SWFUpload.CURSOR={ARROW:-1,HAND:-2},SWFUpload.WINDOW_MODE={WINDOW:"window",TRANSPARENT:"transparent",OPAQUE:"opaque"},SWFUpload.completeURL=function(e){if("string"!=typeof e||e.match(/^https?:\/\//i)||e.match(/^\//))return e;var t=(window.location.protocol+"//"+window.location.hostname+(window.location.port?":"+window.location.port:""),window.location.pathname.lastIndexOf("/"));return t<=0?path="/":path=window.location.pathname.substr(0,t)+"/",path+e},SWFUpload.prototype.initSettings=function(){this.ensureDefault=function(e,t){this.settings[e]=void 0==this.settings[e]?t:this.settings[e]},this.ensureDefault("upload_url",""),this.ensureDefault("preserve_relative_urls",!1),this.ensureDefault("file_post_name","Filedata"),this.ensureDefault("post_params",{}),this.ensureDefault("use_query_string",!1),this.ensureDefault("requeue_on_error",!1),this.ensureDefault("http_success",[]),this.ensureDefault("assume_success_timeout",0),this.ensureDefault("file_types","*.*"),this.ensureDefault("file_types_description","All Files"),this.ensureDefault("file_size_limit",0),this.ensureDefault("file_upload_limit",0),this.ensureDefault("file_queue_limit",0),this.ensureDefault("flash_url","swfupload.swf"),this.ensureDefault("prevent_swf_caching",!0),this.ensureDefault("button_image_url",""),this.ensureDefault("button_width",1),this.ensureDefault("button_height",1),this.ensureDefault("button_text",""),this.ensureDefault("button_text_style","color: #000000; font-size: 16pt;"),this.ensureDefault("button_text_top_padding",0),this.ensureDefault("button_text_left_padding",0),this.ensureDefault("button_action",SWFUpload.BUTTON_ACTION.SELECT_FILES),this.ensureDefault("button_disabled",!1),this.ensureDefault("button_placeholder_id",""),this.ensureDefault("button_placeholder",null),this.ensureDefault("button_cursor",SWFUpload.CURSOR.ARROW),this.ensureDefault("button_window_mode",SWFUpload.WINDOW_MODE.WINDOW),this.ensureDefault("debug",!1),this.settings.debug_enabled=this.settings.debug,this.settings.return_upload_start_handler=this.returnUploadStart,this.ensureDefault("swfupload_loaded_handler",null),this.ensureDefault("file_dialog_start_handler",null),this.ensureDefault("file_queued_handler",null),this.ensureDefault("file_queue_error_handler",null),this.ensureDefault("file_dialog_complete_handler",null),this.ensureDefault("upload_start_handler",null),this.ensureDefault("upload_progress_handler",null),this.ensureDefault("upload_error_handler",null),this.ensureDefault("upload_success_handler",null),this.ensureDefault("upload_complete_handler",null),this.ensureDefault("debug_handler",this.debugMessage),this.ensureDefault("custom_settings",{}),this.customSettings=this.settings.custom_settings,this.settings.prevent_swf_caching&&(this.settings.flash_url=this.settings.flash_url+(this.settings.flash_url.indexOf("?")<0?"?":"&")+"preventswfcaching="+(new Date).getTime()),this.settings.preserve_relative_urls||(this.settings.upload_url=SWFUpload.completeURL(this.settings.upload_url),this.settings.button_image_url=SWFUpload.completeURL(this.settings.button_image_url)),delete this.ensureDefault},SWFUpload.prototype.loadFlash=function(){var e,t;if(null!==document.getElementById(this.movieName))throw"ID "+this.movieName+" is already in use. The Flash Object could not be added";if(e=document.getElementById(this.settings.button_placeholder_id)||this.settings.button_placeholder,void 0==e)throw"Could not find the placeholder element: "+this.settings.button_placeholder_id;t=document.createElement("div"),t.innerHTML=this.getFlashHTML(),e.parentNode.replaceChild(t.firstChild,e),void 0==window[this.movieName]&&(window[this.movieName]=this.getMovieElement())},SWFUpload.prototype.getFlashHTML=function(){var e="";return KindEditor.IE&&KindEditor.V>8&&(e=' classid = "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"'),['','','','','','','',""].join("")},SWFUpload.prototype.getFlashVars=function(){var e=this.buildParamString(),t=this.settings.http_success.join(",");return["movieName=",encodeURIComponent(this.movieName),"&uploadURL=",encodeURIComponent(this.settings.upload_url),"&useQueryString=",encodeURIComponent(this.settings.use_query_string),"&requeueOnError=",encodeURIComponent(this.settings.requeue_on_error),"&httpSuccess=",encodeURIComponent(t),"&assumeSuccessTimeout=",encodeURIComponent(this.settings.assume_success_timeout),"&params=",encodeURIComponent(e),"&filePostName=",encodeURIComponent(this.settings.file_post_name),"&fileTypes=",encodeURIComponent(this.settings.file_types),"&fileTypesDescription=",encodeURIComponent(this.settings.file_types_description),"&fileSizeLimit=",encodeURIComponent(this.settings.file_size_limit),"&fileUploadLimit=",encodeURIComponent(this.settings.file_upload_limit),"&fileQueueLimit=",encodeURIComponent(this.settings.file_queue_limit),"&debugEnabled=",encodeURIComponent(this.settings.debug_enabled),"&buttonImageURL=",encodeURIComponent(this.settings.button_image_url),"&buttonWidth=",encodeURIComponent(this.settings.button_width),"&buttonHeight=",encodeURIComponent(this.settings.button_height),"&buttonText=",encodeURIComponent(this.settings.button_text),"&buttonTextTopPadding=",encodeURIComponent(this.settings.button_text_top_padding),"&buttonTextLeftPadding=",encodeURIComponent(this.settings.button_text_left_padding),"&buttonTextStyle=",encodeURIComponent(this.settings.button_text_style),"&buttonAction=",encodeURIComponent(this.settings.button_action),"&buttonDisabled=",encodeURIComponent(this.settings.button_disabled),"&buttonCursor=",encodeURIComponent(this.settings.button_cursor)].join("")},SWFUpload.prototype.getMovieElement=function(){if(void 0==this.movieElement&&(this.movieElement=document.getElementById(this.movieName)),null===this.movieElement)throw"Could not find Flash element";return this.movieElement},SWFUpload.prototype.buildParamString=function(){var e=this.settings.post_params,t=[];if("object"==typeof e)for(var n in e)e.hasOwnProperty(n)&&t.push(encodeURIComponent(n.toString())+"="+encodeURIComponent(e[n].toString()));return t.join("&")},SWFUpload.prototype.destroy=function(){try{this.cancelUpload(null,!1);var e=null;if(e=this.getMovieElement(),e&&"unknown"==typeof e.CallFunction){for(var t in e)try{"function"==typeof e[t]&&(e[t]=null)}catch(n){}try{e.parentNode.removeChild(e)}catch(i){}}return window[this.movieName]=null,SWFUpload.instances[this.movieName]=null,delete SWFUpload.instances[this.movieName],this.movieElement=null,this.settings=null,this.customSettings=null,this.eventQueue=null,this.movieName=null,!0}catch(a){return!1}},SWFUpload.prototype.displayDebugInfo=function(){this.debug(["---SWFUpload Instance Info---\n","Version: ",SWFUpload.version,"\n","Movie Name: ",this.movieName,"\n","Settings:\n","\t","upload_url: ",this.settings.upload_url,"\n","\t","flash_url: ",this.settings.flash_url,"\n","\t","use_query_string: ",this.settings.use_query_string.toString(),"\n","\t","requeue_on_error: ",this.settings.requeue_on_error.toString(),"\n","\t","http_success: ",this.settings.http_success.join(", "),"\n","\t","assume_success_timeout: ",this.settings.assume_success_timeout,"\n","\t","file_post_name: ",this.settings.file_post_name,"\n","\t","post_params: ",this.settings.post_params.toString(),"\n","\t","file_types: ",this.settings.file_types,"\n","\t","file_types_description: ",this.settings.file_types_description,"\n","\t","file_size_limit: ",this.settings.file_size_limit,"\n","\t","file_upload_limit: ",this.settings.file_upload_limit,"\n","\t","file_queue_limit: ",this.settings.file_queue_limit,"\n","\t","debug: ",this.settings.debug.toString(),"\n","\t","prevent_swf_caching: ",this.settings.prevent_swf_caching.toString(),"\n","\t","button_placeholder_id: ",this.settings.button_placeholder_id.toString(),"\n","\t","button_placeholder: ",this.settings.button_placeholder?"Set":"Not Set","\n","\t","button_image_url: ",this.settings.button_image_url.toString(),"\n","\t","button_width: ",this.settings.button_width.toString(),"\n","\t","button_height: ",this.settings.button_height.toString(),"\n","\t","button_text: ",this.settings.button_text.toString(),"\n","\t","button_text_style: ",this.settings.button_text_style.toString(),"\n","\t","button_text_top_padding: ",this.settings.button_text_top_padding.toString(),"\n","\t","button_text_left_padding: ",this.settings.button_text_left_padding.toString(),"\n","\t","button_action: ",this.settings.button_action.toString(),"\n","\t","button_disabled: ",this.settings.button_disabled.toString(),"\n","\t","custom_settings: ",this.settings.custom_settings.toString(),"\n","Event Handlers:\n","\t","swfupload_loaded_handler assigned: ",("function"==typeof this.settings.swfupload_loaded_handler).toString(),"\n","\t","file_dialog_start_handler assigned: ",("function"==typeof this.settings.file_dialog_start_handler).toString(),"\n","\t","file_queued_handler assigned: ",("function"==typeof this.settings.file_queued_handler).toString(),"\n","\t","file_queue_error_handler assigned: ",("function"==typeof this.settings.file_queue_error_handler).toString(),"\n","\t","upload_start_handler assigned: ",("function"==typeof this.settings.upload_start_handler).toString(),"\n","\t","upload_progress_handler assigned: ",("function"==typeof this.settings.upload_progress_handler).toString(),"\n","\t","upload_error_handler assigned: ",("function"==typeof this.settings.upload_error_handler).toString(),"\n","\t","upload_success_handler assigned: ",("function"==typeof this.settings.upload_success_handler).toString(),"\n","\t","upload_complete_handler assigned: ",("function"==typeof this.settings.upload_complete_handler).toString(),"\n","\t","debug_handler assigned: ",("function"==typeof this.settings.debug_handler).toString(),"\n"].join(""))},SWFUpload.prototype.addSetting=function(e,t,n){return void 0==t?this.settings[e]=n:this.settings[e]=t},SWFUpload.prototype.getSetting=function(e){return void 0!=this.settings[e]?this.settings[e]:""},SWFUpload.prototype.callFlash=function(functionName,argumentArray){argumentArray=argumentArray||[];var movieElement=this.getMovieElement(),returnValue,returnString;try{returnString=movieElement.CallFunction(''+__flash__argumentsToXML(argumentArray,0)+""),returnValue=eval(returnString)}catch(ex){throw"Call to "+functionName+" failed"}return void 0!=returnValue&&"object"==typeof returnValue.post&&(returnValue=this.unescapeFilePostParams(returnValue)),returnValue},SWFUpload.prototype.selectFile=function(){this.callFlash("SelectFile")},SWFUpload.prototype.selectFiles=function(){this.callFlash("SelectFiles")},SWFUpload.prototype.startUpload=function(e){this.callFlash("StartUpload",[e])},SWFUpload.prototype.cancelUpload=function(e,t){t!==!1&&(t=!0),this.callFlash("CancelUpload",[e,t])},SWFUpload.prototype.stopUpload=function(){this.callFlash("StopUpload")},SWFUpload.prototype.getStats=function(){return this.callFlash("GetStats")},SWFUpload.prototype.setStats=function(e){this.callFlash("SetStats",[e])},SWFUpload.prototype.getFile=function(e){return"number"==typeof e?this.callFlash("GetFileByIndex",[e]):this.callFlash("GetFile",[e])},SWFUpload.prototype.addFileParam=function(e,t,n){return this.callFlash("AddFileParam",[e,t,n])},SWFUpload.prototype.removeFileParam=function(e,t){this.callFlash("RemoveFileParam",[e,t])},SWFUpload.prototype.setUploadURL=function(e){this.settings.upload_url=e.toString(),this.callFlash("SetUploadURL",[e])},SWFUpload.prototype.setPostParams=function(e){this.settings.post_params=e,this.callFlash("SetPostParams",[e])},SWFUpload.prototype.addPostParam=function(e,t){this.settings.post_params[e]=t,this.callFlash("SetPostParams",[this.settings.post_params])},SWFUpload.prototype.removePostParam=function(e){delete this.settings.post_params[e],this.callFlash("SetPostParams",[this.settings.post_params])},SWFUpload.prototype.setFileTypes=function(e,t){this.settings.file_types=e,this.settings.file_types_description=t,this.callFlash("SetFileTypes",[e,t])},SWFUpload.prototype.setFileSizeLimit=function(e){this.settings.file_size_limit=e,this.callFlash("SetFileSizeLimit",[e])},SWFUpload.prototype.setFileUploadLimit=function(e){this.settings.file_upload_limit=e,this.callFlash("SetFileUploadLimit",[e])},SWFUpload.prototype.setFileQueueLimit=function(e){this.settings.file_queue_limit=e,this.callFlash("SetFileQueueLimit",[e])},SWFUpload.prototype.setFilePostName=function(e){this.settings.file_post_name=e,this.callFlash("SetFilePostName",[e])},SWFUpload.prototype.setUseQueryString=function(e){this.settings.use_query_string=e,this.callFlash("SetUseQueryString",[e])},SWFUpload.prototype.setRequeueOnError=function(e){this.settings.requeue_on_error=e,this.callFlash("SetRequeueOnError",[e])},SWFUpload.prototype.setHTTPSuccess=function(e){"string"==typeof e&&(e=e.replace(" ","").split(",")),this.settings.http_success=e,this.callFlash("SetHTTPSuccess",[e])},SWFUpload.prototype.setAssumeSuccessTimeout=function(e){this.settings.assume_success_timeout=e,this.callFlash("SetAssumeSuccessTimeout",[e])},SWFUpload.prototype.setDebugEnabled=function(e){this.settings.debug_enabled=e,this.callFlash("SetDebugEnabled",[e])},SWFUpload.prototype.setButtonImageURL=function(e){void 0==e&&(e=""),this.settings.button_image_url=e,this.callFlash("SetButtonImageURL",[e])},SWFUpload.prototype.setButtonDimensions=function(e,t){this.settings.button_width=e,this.settings.button_height=t;var n=this.getMovieElement();void 0!=n&&(n.style.width=e+"px",n.style.height=t+"px"),this.callFlash("SetButtonDimensions",[e,t])},SWFUpload.prototype.setButtonText=function(e){this.settings.button_text=e,this.callFlash("SetButtonText",[e])},SWFUpload.prototype.setButtonTextPadding=function(e,t){this.settings.button_text_top_padding=t,this.settings.button_text_left_padding=e,this.callFlash("SetButtonTextPadding",[e,t])},SWFUpload.prototype.setButtonTextStyle=function(e){this.settings.button_text_style=e,this.callFlash("SetButtonTextStyle",[e])},SWFUpload.prototype.setButtonDisabled=function(e){this.settings.button_disabled=e,this.callFlash("SetButtonDisabled",[e])},SWFUpload.prototype.setButtonAction=function(e){this.settings.button_action=e,this.callFlash("SetButtonAction",[e])},SWFUpload.prototype.setButtonCursor=function(e){this.settings.button_cursor=e,this.callFlash("SetButtonCursor",[e])},SWFUpload.prototype.queueEvent=function(e,t){void 0==t?t=[]:t instanceof Array||(t=[t]);var n=this;if("function"==typeof this.settings[e])this.eventQueue.push(function(){this.settings[e].apply(this,t)}),setTimeout(function(){n.executeNextEvent()},0);else if(null!==this.settings[e])throw"Event handler "+e+" is unknown or is not a function"}, +SWFUpload.prototype.executeNextEvent=function(){var e=this.eventQueue?this.eventQueue.shift():null;"function"==typeof e&&e.apply(this)},SWFUpload.prototype.unescapeFilePostParams=function(e){var t,n=/[$]([0-9a-f]{4})/i,i={};if(void 0!=e){for(var a in e.post)if(e.post.hasOwnProperty(a)){t=a;for(var o;null!==(o=n.exec(t));)t=t.replace(o[0],String.fromCharCode(parseInt("0x"+o[1],16)));i[t]=e.post[a]}e.post=i}return e},SWFUpload.prototype.testExternalInterface=function(){try{return this.callFlash("TestExternalInterface")}catch(e){return!1}},SWFUpload.prototype.flashReady=function(){var e=this.getMovieElement();return e?(this.cleanUp(e),void this.queueEvent("swfupload_loaded_handler")):void this.debug("Flash called back ready but the flash movie can't be found.")},SWFUpload.prototype.cleanUp=function(e){try{if(this.movieElement&&"unknown"==typeof e.CallFunction){this.debug("Removing Flash functions hooks (this should only run in IE and should prevent memory leaks)");for(var t in e)try{"function"==typeof e[t]&&(e[t]=null)}catch(n){}}}catch(i){}window.__flash__removeCallback=function(e,t){try{e&&(e[t]=null)}catch(n){}}},SWFUpload.prototype.fileDialogStart=function(){this.queueEvent("file_dialog_start_handler")},SWFUpload.prototype.fileQueued=function(e){e=this.unescapeFilePostParams(e),this.queueEvent("file_queued_handler",e)},SWFUpload.prototype.fileQueueError=function(e,t,n){e=this.unescapeFilePostParams(e),this.queueEvent("file_queue_error_handler",[e,t,n])},SWFUpload.prototype.fileDialogComplete=function(e,t,n){this.queueEvent("file_dialog_complete_handler",[e,t,n])},SWFUpload.prototype.uploadStart=function(e){e=this.unescapeFilePostParams(e),this.queueEvent("return_upload_start_handler",e)},SWFUpload.prototype.returnUploadStart=function(e){var t;if("function"==typeof this.settings.upload_start_handler)e=this.unescapeFilePostParams(e),t=this.settings.upload_start_handler.call(this,e);else if(void 0!=this.settings.upload_start_handler)throw"upload_start_handler must be a function";void 0===t&&(t=!0),t=!!t,this.callFlash("ReturnUploadStart",[t])},SWFUpload.prototype.uploadProgress=function(e,t,n){e=this.unescapeFilePostParams(e),this.queueEvent("upload_progress_handler",[e,t,n])},SWFUpload.prototype.uploadError=function(e,t,n){e=this.unescapeFilePostParams(e),this.queueEvent("upload_error_handler",[e,t,n])},SWFUpload.prototype.uploadSuccess=function(e,t,n){e=this.unescapeFilePostParams(e),this.queueEvent("upload_success_handler",[e,t,n])},SWFUpload.prototype.uploadComplete=function(e){e=this.unescapeFilePostParams(e),this.queueEvent("upload_complete_handler",e)},SWFUpload.prototype.debug=function(e){this.queueEvent("debug_handler",e)},SWFUpload.prototype.debugMessage=function(e){if(this.settings.debug){var t,n=[];if("object"==typeof e&&"string"==typeof e.name&&"string"==typeof e.message){for(var i in e)e.hasOwnProperty(i)&&n.push(i+": "+e[i]);t=n.join("\n")||"",n=t.split("\n"),t="EXCEPTION: "+n.join("\nEXCEPTION: "),SWFUpload.Console.writeLine(t)}else SWFUpload.Console.writeLine(e)}},SWFUpload.Console={},SWFUpload.Console.writeLine=function(e){var t,n;try{t=document.getElementById("SWFUpload_Console"),t||(n=document.createElement("form"),document.getElementsByTagName("body")[0].appendChild(n),t=document.createElement("textarea"),t.id="SWFUpload_Console",t.style.fontFamily="monospace",t.setAttribute("wrap","off"),t.wrap="off",t.style.overflow="auto",t.style.width="700px",t.style.height="350px",t.style.margin="5px",n.appendChild(t)),t.value+=e+"\n",t.scrollTop=t.scrollHeight-t.clientHeight}catch(i){alert("Exception: "+i.name+" Message: "+i.message)}}}(),function(){"function"==typeof SWFUpload&&(SWFUpload.queue={},SWFUpload.prototype.initSettings=function(e){return function(){"function"==typeof e&&e.call(this),this.queueSettings={},this.queueSettings.queue_cancelled_flag=!1,this.queueSettings.queue_upload_count=0,this.queueSettings.user_upload_complete_handler=this.settings.upload_complete_handler,this.queueSettings.user_upload_start_handler=this.settings.upload_start_handler,this.settings.upload_complete_handler=SWFUpload.queue.uploadCompleteHandler,this.settings.upload_start_handler=SWFUpload.queue.uploadStartHandler,this.settings.queue_complete_handler=this.settings.queue_complete_handler||null}}(SWFUpload.prototype.initSettings),SWFUpload.prototype.startUpload=function(e){this.queueSettings.queue_cancelled_flag=!1,this.callFlash("StartUpload",[e])},SWFUpload.prototype.cancelQueue=function(){this.queueSettings.queue_cancelled_flag=!0,this.stopUpload();for(var e=this.getStats();e.files_queued>0;)this.cancelUpload(),e=this.getStats()},SWFUpload.queue.uploadStartHandler=function(e){var t;return"function"==typeof this.queueSettings.user_upload_start_handler&&(t=this.queueSettings.user_upload_start_handler.call(this,e)),t=t!==!1,this.queueSettings.queue_cancelled_flag=!t,t},SWFUpload.queue.uploadCompleteHandler=function(e){var t,n=this.queueSettings.user_upload_complete_handler;if(e.filestatus===SWFUpload.FILE_STATUS.COMPLETE&&this.queueSettings.queue_upload_count++,t="function"==typeof n?n.call(this,e)!==!1:e.filestatus!==SWFUpload.FILE_STATUS.QUEUED){var i=this.getStats();i.files_queued>0&&this.queueSettings.queue_cancelled_flag===!1?this.startUpload():this.queueSettings.queue_cancelled_flag===!1?(this.queueEvent("queue_complete_handler",[this.queueSettings.queue_upload_count]),this.queueSettings.queue_upload_count=0):(this.queueSettings.queue_cancelled_flag=!1,this.queueSettings.queue_upload_count=0)}})}(),KindEditor.plugin("pagebreak",function(e){var t=this,n="pagebreak",i=e.undef(t.pagebreakHtml,'
        ');t.clickToolbar(n,function(){var n=t.cmd,a=n.range;t.focus();var o="br"==t.newlineTag||e.WEBKIT?"":'';if(t.insertHtml(i+o),""!==o){var r=e("#__kindeditor_tail_tag__",t.edit.doc);a.selectNodeContents(r[0]),r.removeAttr("id"),n.select()}})}),KindEditor.plugin("plainpaste",function(e){var t=this,n="plainpaste";t.clickToolbar(n,function(){var i=t.lang(n+"."),a='
        '+i.comment+'
        ',o=t.createDialog({name:n,width:450,title:t.lang(n),body:a,yesBtn:{name:t.lang("yes"),click:function(n){var i=r.val();i=e.escape(i),i=i.replace(/ {2}/g,"  "),i="p"==t.newlineTag?i.replace(/^/,"

        ").replace(/$/,"

        ").replace(/\n/g,"

        "):i.replace(/\n/g,"
        $&"),t.insertHtml(i).hideDialog().focus()}}}),r=e("textarea",o.div);r[0].focus()})}),KindEditor.plugin("preview",function(e){var t=this,n="preview";t.clickToolbar(n,function(){var i=(t.lang(n+"."),'

        '),a=t.createDialog({name:n,width:750,title:t.lang(n),body:i}),o=e("iframe",a.div),r=e.iframeDoc(o);r.open(),r.write(t.fullHtml()),r.close(),e(r.body).css("background-color","#FFF"),o[0].contentWindow.focus()})}),KindEditor.plugin("quickformat",function(e){function t(e){for(var t=e.first();t&&t.first();)t=t.first();return t}var n=this,i="quickformat",a=e.toMap("blockquote,center,div,h1,h2,h3,h4,h5,h6,p");n.clickToolbar(i,function(){n.focus();for(var i,o=n.edit.doc,r=n.cmd.range,l=e(o.body).first(),s=[],d=[],c=r.createBookmark(!0);l;){i=l.next();var u=t(l);u&&"img"==u.name||(a[l.name]?(l.html(l.html().replace(/^(\s| | )+/gi,"")),l.css("text-indent","2em")):d.push(l),(!i||a[i.name]||a[l.name]&&!a[i.name])&&(d.length>0&&s.push(d),d=[])),l=i}e.each(s,function(t,n){var i=e('

        ',o);n[0].before(i),e.each(n,function(e,t){i.append(t)})}),r.moveToBookmark(c),n.addBookmark()})}),KindEditor.plugin("table",function(e){function t(e,t){t=t.toLowerCase(),e.css("background-color",t),t&&e.css("color","#000000"===t?"#FFFFFF":"#000000"),"input"===e.name?e.val(t):e.html(t)}function n(n,i,a){function o(){e.each(h,function(){this.remove()}),h=[],e(document).unbind("click,mousedown",o),n.unbind("click,mousedown",o)}i.bind("click,mousedown",function(e){e.stopPropagation()}),i.click(function(i){o();var r=e(this),l=r.pos(),d=e.colorpicker({x:l.x,y:l.y+r.height(),z:811214,selectedColor:e(this).html(),colors:s.colorTable,noColor:s.lang("table.defaultBorderColor"),shadowMode:s.shadowMode,click:function(e){t(r,e),o(),a&&a(e)}});h.push(d),e(document).bind("click,mousedown",o),n.bind("click,mousedown",o)})}function i(e,t,n){for(var i=0,a=0,o=t.cells.length;a
        "],l=n.find("tbody>tr:first").children(),d=0;l.each(function(){var e=$(this),t=e.attr("colspan");d+=t?parseInt(t):1});for(var c=0;c"+(e.IE?" ":"
        ")+"");r.push("
        "),o=$(r.join("")),n.prepend(o)}}else o.remove()}i&&i("header",t.header)}void 0!==t.stripedRows&&(n.toggleClass("table-striped",!!t.stripedRows),i&&i("stripedRows",t.stripedRows)),void 0!==t.hoverRows&&(n.toggleClass("table-hover",!!t.hoverRows),i&&i("hoverRows",t.hoverRows)),void 0!==t.autoWidth&&(n.toggleClass("table-auto",!!t.autoWidth),i&&i("autoWidth",t.autoWidth)),void 0!==t.borderColor&&(n.find("td,th").css("border","1px solid "+t.borderColor),i&&i("borderColor",t.borderColor))}}function r(t,n,i,a){if(t*n){for(var o=$('
        '),r=$(""),l=0;l"),c=0;c"+(e.IE?" ":"
        ")+"");d.append(u)}r.append(d)}o.append(r);var p=$("
        ").append(o).html();return e.IE||(p+="
        "),s.insertHtml(p),o}}function l(i){for(var a=$(i[0]),r=[""],l=[""],c=0;c<6;++c){r.push('{tableHead}'),l.push("");for(var u=0;u<6;++u)l.push('{tableContent}');l.push("")}r.push(""),l.push("");var h=['
        ','
        ','
        ','
        ',"",'
        ','
        ','
        ',"
        ",'
        ',"",'
        ','
        ',"
        ",'
        ',"",'
        ','{borderColor}','',"
        ","
        ","
        ",'
        ','',r.join(""),l.join(""),"
        ","","",""].join("").format(p),f=$(h),m=f.find(".ke-plugin-table-example"),g=s.cmd.range.createBookmark(),v=f.find(".ke-plugin-table-input-color"),_=e(v[0]);f.on("change.kTable","input[name]",function(){var e=$(this),t={};t[e.attr("name")]=e.is('[type="checkbox"]')?e.is(":checked"):e.val(),o(t,m)});var b=s.createDialog({name:d+"test",width:550,title:s.lang(d),body:f[0],beforeRemove:function(){f.off(".kTable")},yesBtn:{name:s.lang("yes"),click:function(e){o({borderColor:f.find('[name="borderColor"]').val(),header:f.find('[name="header"]').is(":checked"),stripedRows:f.find('[name="stripedRows"]').is(":checked"),hoverRows:f.find('[name="hoverRows"]').is(":checked"),autoWidth:f.find('[name="autoWidth"]:checked').val()},a),s.hideDialog().focus(),s.cmd.range.moveToBookmark(g),s.cmd.select(),s.addBookmark()}}});n(b.div,_,function(e){o({borderColor:e},m)}),o({borderColor:a.find("td,th").first().css("borderColor"),header:a.find("thead").length,stripedRows:a.hasClass("table-striped"),hoverRows:a.hasClass("table-hover"),autoWidth:a.hasClass("table-auto")},m,function(e,n){switch(e){case"borderColor":t(_,n||"#dddddd");break;case"header":f.find('[name="header"]').prop("checked",!!n);break;case"stripedRows":f.find('[name="stripedRows"]').prop("checked",!!n);break;case"hoverRows":f.find('[name="hoverRows"]').prop("checked",!!n);break;case"autoWidth":f.find('[name="autoWidth"][value="'+(n?"auto":"")+'"]').prop("checked",!0)}})}var s=this,d="table",c={zh_cn:{name:"表格",xRxC:"{0}行 × {1}列",headerRow:"标题行",headerCol:"标题列",tableStyle:"表格样式",addHeaderRow:"添加表格标题行",stripedRows:"隔行变色效果",hoverRows:"鼠标悬停效果",autoChangeTableWidth:"自动调整表格尺寸",tableWidthFixed:"按表格文字自适应",tableWidthFull:"按页面宽度自适应",tableBorder:"表格边框",tableHead:"标题",tableContent:"内容"},zh_tw:{name:"表格",xRxC:"{0}行×{1}列",headerRow:"標題行",headerCol:"標題列",tableStyle:"表格樣式",addHeaderRow:"添加表格標題行",stripedRows:"隔行變色效果",hoverRows:"鼠標懸停效果",autoChangeTableWidth:"自動調整表格尺寸",tableWidthFixed:"按表格文字自適應",tableWidthFull:"按頁面寬度自適應",tableBorder:"表格邊框",tableHead:"標題",tableContent:"內容"},en:{name:"Table",xRxC:"{0} Rows × {1} Columns",headerRow:"Header Row",headerCol:"Header Column",tableStyle:"Table style",addHeaderRow:"Add header row",stripedRows:"Striped effection",hoverRows:"Mouse hover effection",autoChangeTableWidth:"Automatically adjust table size",tableWidthFixed:"Adaptive by form text",tableWidthFull:"Page width adaptive",tableBorder:"Table border",tableHead:"Title",tableContent:"Text"}},u=[],p=$.extend({},s.lang("table."),c[($.clientLang||$.zui.clientLang)()]),h=[];s.plugin.table={prop:function(){var e=s.plugin.getSelectedTable();e&&e.length&&l(e)},cellprop:function(){var i=['
        ','
        ','",p.width+'   ','   ",p.height+'   ','","
        ",'
        ','",p.textAlign+' ",p.verticalAlign+' ","
        ",'
        ','",p.borderColor+' ',"
        ",'
        ','",'',"
        ","
        "].join(""),a=s.cmd.range.createBookmark(),o=s.createDialog({name:d,width:500,title:s.lang("tablecell"),body:i,beforeRemove:function(){_.unbind()},yesBtn:{name:s.lang("yes"),click:function(t){var n=l.val(),i=c.val(),o=u.val(),r=h.val(),d=(f.val(),m.val(),g.val()),p=v.val(),b=e(_[0]).html()||"",k=e(_[1]).html()||"";return/^\d*$/.test(n)?/^\d*$/.test(i)?(y.css({width:""!==n?n+o:"",height:""!==i?i+r:"","background-color":k,"text-align":d,"vertical-align":p,"border-style":"solid","border-color":b}),s.hideDialog().focus(),s.cmd.range.moveToBookmark(a),s.cmd.select(),void s.addBookmark()):(alert(s.lang("invalidHeight")),void c[0].focus()):(alert(s.lang("invalidWidth")),void l[0].focus())}}}),r=o.div,l=e('[name="width"]',r).val(100),c=e('[name="height"]',r),u=e('[name="widthType"]',r),h=e('[name="heightType"]',r),f=e('[name="padding"]',r).val(2),m=e('[name="spacing"]',r).val(0),g=e('[name="textAlign"]',r),v=e('[name="verticalAlign"]',r),_=e(".ke-input-color",r);n(r,_.eq(0)),n(r,_.eq(1)),t(_.eq(0),"#000000"),t(_.eq(1),""),l[0].focus(),l[0].select();var b,y=s.plugin.getSelectedCell(),k=y[0].style.width||y[0].width||"",w=y[0].style.height||y[0].height||"";(b=/^(\d+)((?:px|%)*)$/.exec(k))?(l.val(b[1]),u.val(b[2])):l.val(""),(b=/^(\d+)((?:px|%)*)$/.exec(w))&&(c.val(b[1]),h.val(b[2])),g.val(y[0].style.textAlign||""),v.val(y[0].style.verticalAlign||""),t(_.eq(0),e.toHex(y[0].style.borderColor||"")),t(_.eq(1),e.toHex(y[0].style.backgroundColor||"")),l[0].focus(),l[0].select()},insert:function(){console.warn("Table insert not available.")},"delete":function(){var e=s.plugin.getSelectedTable();s.cmd.range.setStartBefore(e[0]).collapse(!0),s.cmd.select(),e.remove(),s.addBookmark()},colinsert:function(t){var n=s.plugin.getSelectedTable()[0],a=s.plugin.getSelectedRow()[0],o=s.plugin.getSelectedCell()[0],r=o.cellIndex+t;r+=n.rows[0].cells.length-a.cells.length;for(var l=0,d=n.rows.length;l"),u.innerHTML=e.IE?"":"
        ",r=i(n,c,u)}s.cmd.range.selectNodeContents(o).collapse(!0),s.cmd.select(),s.addBookmark()},colinsertleft:function(){this.colinsert(0)},colinsertright:function(){this.colinsert(1)},rowinsert:function(t){var n=s.plugin.getSelectedTable()[0],i=s.plugin.getSelectedRow()[0],a=s.plugin.getSelectedCell()[0],o=i.rowIndex;1===t&&(o=i.rowIndex+(a.rowSpan-1)+t);for(var r=n.insertRow(o),l=0,d=i.cells.length;l1&&(d-=i.cells[l].rowSpan-1);var c=r.insertCell(l);1===t&&i.cells[l].colSpan>1&&(c.colSpan=i.cells[l].colSpan),c.innerHTML=e.IE?"":"
        "}for(var u=o;u>=0;u--){var p=n.rows[u].cells;if(p.length>l){for(var h=a.cellIndex;h>=0;h--)p[h].rowSpan>1&&(p[h].rowSpan+=1);break}}s.cmd.range.selectNodeContents(a).collapse(!0),s.cmd.select(),s.addBookmark()},rowinsertabove:function(){this.rowinsert(0)},rowinsertbelow:function(){this.rowinsert(1)},rowmerge:function(){var e=s.plugin.getSelectedTable()[0],t=s.plugin.getSelectedRow()[0],n=s.plugin.getSelectedCell()[0],i=t.rowIndex,a=i+n.rowSpan,o=e.rows[a];if(!(e.rows.length<=a)){var r=n.cellIndex;if(!(o.cells.length<=r)){var l=o.cells[r];n.colSpan===l.colSpan&&(n.rowSpan+=l.rowSpan,o.deleteCell(r),s.cmd.range.selectNodeContents(n).collapse(!0),s.cmd.select(),s.addBookmark())}}},colmerge:function(){var e=(s.plugin.getSelectedTable()[0],s.plugin.getSelectedRow()[0]),t=s.plugin.getSelectedCell()[0],n=(e.rowIndex,t.cellIndex),i=n+1;if(!(e.cells.length<=i)){var a=e.cells[i];t.rowSpan===a.rowSpan&&(t.colSpan+=a.colSpan,e.deleteCell(i),s.cmd.range.selectNodeContents(t).collapse(!0),s.cmd.select(),s.addBookmark())}},rowsplit:function(){var t=s.plugin.getSelectedTable()[0],n=s.plugin.getSelectedRow()[0],a=s.plugin.getSelectedCell()[0],o=n.rowIndex;if(1!==a.rowSpan){for(var r=i(t,n,a),l=1,d=a.rowSpan;l1&&(u.colSpan=a.colSpan),u.innerHTML=e.IE?"":"
        ",r=i(t,c,u)}e(a).removeAttr("rowSpan"),s.cmd.range.selectNodeContents(a).collapse(!0),s.cmd.select(),s.addBookmark()}},colsplit:function(){var t=(s.plugin.getSelectedTable()[0],s.plugin.getSelectedRow()[0]),n=s.plugin.getSelectedCell()[0],i=n.cellIndex;if(1!==n.colSpan){for(var a=1,o=n.colSpan;a1&&(r.rowSpan=n.rowSpan),r.innerHTML=e.IE?"":"
        "}e(n).removeAttr("colSpan"),s.cmd.range.selectNodeContents(n).collapse(!0),s.cmd.select(),s.addBookmark()}},coldelete:function(){for(var t=s.plugin.getSelectedTable()[0],n=s.plugin.getSelectedRow()[0],i=s.plugin.getSelectedCell()[0],a=i.cellIndex,o=0,r=t.rows.length;o1?(d.colSpan-=1,1===d.colSpan&&e(d).removeAttr("colSpan")):l.deleteCell(a),d.rowSpan>1&&(o+=d.rowSpan-1)}0===n.cells.length?(s.cmd.range.setStartBefore(t).collapse(!0),s.cmd.select(),e(t).remove()):s.cmd.selection(!0),s.addBookmark()},rowdelete:function(){for(var t=s.plugin.getSelectedTable()[0],n=s.plugin.getSelectedRow()[0],i=s.plugin.getSelectedCell()[0],a=n.rowIndex,o=i.rowSpan-1;o>=0;o--)t.deleteRow(a+o);0===t.rows.length?(s.cmd.range.setStartBefore(t).collapse(!0),s.cmd.select(),e(t).remove()):s.cmd.selection(!0),s.addBookmark()}},s.clickToolbar(d,function(){if(!s.menu){var e=s.createMenu({name:d,beforeRemove:function(){a()}}),t=$('
        '),n=$('
        '+p.xRxC.format(0,0)+"
        ");t.append(n);var i=$('
        ');i.on("mouseenter.kTable",".ke-plugin-table-grid-cell",function(){var e=$(this),t=e.data("row"),a=e.data("col");n.text(p.xRxC.format(t,a));var o=i.find(".ke-plugin-table-grid-cell");o.each(function(){var e=$(this),n=e.data("row"),i=e.data("col");n<=t&&i<=a?e.css({border:"1px solid #2286d2",background:"#eff7ff"}):e.css({border:"1px solid #ddd",background:"#f1f1f1"})})}).on("click.kTable",".ke-plugin-table-grid-cell",function(e){var t=$(this),n=t.data("row"),i=t.data("col");r(n,i),s.hideMenu().focus(),s.addBookmark(),e.stopPropagation()});for(var o=1;o<11;o++)for(var l=1;l<11;l++)i.append('
        ');u.push(i),t.append(i),e.div.append(t[0])}})}),KindEditor.lang({table:KindEditor.lang("table")}),KindEditor.plugin("template",function(e){function t(t){return a+t+"?ver="+encodeURIComponent(e.DEBUG?e.TIME:e.VERSION)}var n=this,i="template",a=(n.lang(i+"."),n.pluginsPath+i+"/html/");n.clickToolbar(i,function(){var a=n.lang(i+"."),o=['
        ','
        ','
        ',a.selectTemplate+"
        ",'
        ',' ","
        ",'
        ',"
        ",'',"
        "].join("");var r=n.createDialog({name:i,width:500,title:n.lang(i),body:html,yesBtn:{name:n.lang("yes"),click:function(t){var i=e.iframeDoc(d);n[s[0].checked?"html":"insertHtml"](i.body.innerHTML).hideDialog().focus()}}}),l=e("select",r.div),s=e('[name="replaceFlag"]',r.div),d=e("iframe",r.div);s[0].checked=!0,d.attr("src",t(l.val())),l.change(function(){d.attr("src",t(this.value))})})}),KindEditor.plugin("wordpaste",function(e){var t=this,n="wordpaste";t.clickToolbar(n,function(){var i=t.lang(n+"."),a='
        '+i.comment+'
        ',o=t.createDialog({name:n,width:450,title:t.lang(n),body:a,yesBtn:{name:t.lang("yes"),click:function(n){var i=s.body.innerHTML;i=e.clearMsWord(i,t.filterMode?t.htmlTags:e.options.htmlTags),t.insertHtml(i).hideDialog().focus()}}}),r=o.div,l=e("iframe",r),s=e.iframeDoc(l);e.IE||(s.designMode="on"),s.open(),s.write("WordPaste"),s.write(''),e.IE||s.write("
        "),s.write(""),s.close(),e.IE&&(s.body.contentEditable="true"),l[0].contentWindow.focus()})}); \ No newline at end of file From 16e6d54a97f7284343242cdb8af1f8c2ee39de59 Mon Sep 17 00:00:00 2001 From: Catouse Date: Fri, 28 Dec 2018 21:01:51 +0800 Subject: [PATCH 054/442] * finish task #5173 and bug #2325. --- www/js/kindeditor/kindeditor.js | 2 ++ www/js/kindeditor/kindeditor.min.js | 6 +++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/www/js/kindeditor/kindeditor.js b/www/js/kindeditor/kindeditor.js index 77e6782433..19c3f40c10 100644 --- a/www/js/kindeditor/kindeditor.js +++ b/www/js/kindeditor/kindeditor.js @@ -6213,6 +6213,8 @@ } else { cmd.range.selectNodeContents(div[0]); cmd.select(); + div[0].tabIndex = -1; + div[0].focus(); } setTimeout(function() { movePastedData(); diff --git a/www/js/kindeditor/kindeditor.min.js b/www/js/kindeditor/kindeditor.min.js index c2f1a239cd..5fc22e6848 100644 --- a/www/js/kindeditor/kindeditor.min.js +++ b/www/js/kindeditor/kindeditor.min.js @@ -1,6 +1,6 @@ !function(window,undefined){function _isArray(e){return!!e&&"[object Array]"===Object.prototype.toString.call(e)}function _isFunction(e){return!!e&&"[object Function]"===Object.prototype.toString.call(e)}function _inArray(e,t){for(var n=0,i=t.length;n=0}function _addUnit(e,t){return t=t||"px",e&&/^\d+$/.test(e)?e+t:e}function _removeUnit(e){var t;return e&&(t=/(\d+)/.exec(e))?parseInt(t[1],10):0}function _escape(e){return e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""")}function _unescape(e){return e.replace(/</g,"<").replace(/>/g,">").replace(/"/g,'"').replace(/&/g,"&")}function _toCamel(e){var t=e.split("-");return e="",_each(t,function(t,n){e+=t>0?n.charAt(0).toUpperCase()+n.substr(1):n}),e}function _toHex(e){function t(e){var t=parseInt(e,10).toString(16).toUpperCase();return t.length>1?t:"0"+t}return e.replace(/rgb\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)/gi,function(e,n,i,a){return"#"+t(n)+t(i)+t(a)})}function _toMap(e,t){t=t===undefined?",":t;var n,i={},a=_isArray(e)?e:e.split(t);return _each(a,function(e,t){if(n=/^(\d+)\.\.(\d+)$/.exec(t))for(var a=parseInt(n[1],10);a<=parseInt(n[2],10);a++)i[a.toString()]=!0;else i[t]=!0}),i}function _toArray(e,t){return Array.prototype.slice.call(e,t||0)}function _undef(e,t){return e===undefined?t:e}function _invalidUrl(e){return!e||/[<>"]/.test(e)}function _addParam(e,t){return e.indexOf("?")>=0?e+"&"+t:e+"?"+t}function _extend(e,t,n){n||(n=t,t=null);var i;if(t){var a=function(){};a.prototype=t.prototype,i=new a,_each(n,function(e,t){i[e]=t})}else i=n;i.constructor=e,e.prototype=i,e.parent=t?t.prototype:null}function _json(text){var match;(match=/\{[\s\S]*\}|\[[\s\S]*\]/.exec(text))&&(text=match[0]);var cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;if(cx.lastIndex=0,cx.test(text)&&(text=text.replace(cx,function(e){return"\\u"+("0000"+e.charCodeAt(0).toString(16)).slice(-4)})),/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return eval("("+text+")");throw"JSON parse error"}function _getBasePath(){for(var e,t=document.getElementsByTagName("script"),n=0,i=t.length;n=0)return void _each(t.split(","),function(){_bind(e,this,n)});var i=_getId(e);i||(i=_setId(e)),_eventData[i]===undefined&&(_eventData[i]={});var a=_eventData[i][t];a&&a.length>0?_unbindEvent(e,t,a[0]):(_eventData[i][t]=[],_eventData[i].el=e),a=_eventData[i][t],0===a.length&&(a[0]=function(t){var n=t?new KEvent(e,t):undefined;_each(a,function(t,i){t>0&&i&&i.call(e,n)})}),_inArray(n,a)<0&&a.push(n),_bindEvent(e,t,a[0])}function _unbind(e,t,n){if(t&&t.indexOf(",")>=0)return void _each(t.split(","),function(){_unbind(e,this,n)});var i=_getId(e);if(i){if(t===undefined)return void(i in _eventData&&(_each(_eventData[i],function(t,n){"el"!=t&&n.length>0&&_unbindEvent(e,t,n[0])}),delete _eventData[i],_removeId(e)));if(_eventData[i]){var a=_eventData[i][t];if(a&&a.length>0){n===undefined?(_unbindEvent(e,t,a[0]),delete _eventData[i][t]):(_each(a,function(e,t){e>0&&t===n&&a.splice(e,1)}),1==a.length&&(_unbindEvent(e,t,a[0]),delete _eventData[i][t]));var o=0;_each(_eventData[i],function(){o++}),o<2&&(delete _eventData[i],_removeId(e))}}}}function _fire(e,t){if(t.indexOf(",")>=0)return void _each(t.split(","),function(){_fire(e,this)});var n=_getId(e);if(n){var i=_eventData[n][t];_eventData[n]&&i&&i.length>0&&i[0]()}}function _ctrl(e,t,n){t=/^\d{2,}$/.test(t)?t:t.toUpperCase().charCodeAt(0),_bind(e,"keydown",function(i){!i.ctrlKey||i.which!=t||i.shiftKey||i.altKey||(n.call(e),i.stop())})}function _ready(e){function t(){a||(a=!0,e(KindEditor),_readyFinished=!0)}function n(){if(!a){try{document.documentElement.doScroll("left")}catch(e){return void setTimeout(n,100)}t()}}function i(){"complete"===document.readyState&&t()}if(_readyFinished)return void e(KindEditor);var a=!1;if(document.addEventListener)_bind(document,"DOMContentLoaded",t);else if(document.attachEvent){_bind(document,"readystatechange",i);var o=!1;try{o=null==window.frameElement}catch(r){}document.documentElement.doScroll&&o&&n()}_bind(window,"load",t)}function _getCssList(e){for(var t,n={},i=/\s*([\w\-]+)\s*:([^;]*)(;|$)/g;t=i.exec(e);){var a=_trim(t[1].toLowerCase()),o=_trim(_toHex(t[2]));n[a]=o}return n}function _getAttrList(e){for(var t,n={},i=/\s+(?:([\w\-:]+)|(?:([\w\-:]+)=([^\s"'<>]+))|(?:([\w\-:"]+)="([^"]*)")|(?:([\w\-:"]+)='([^']*)'))(?=(?:\s|\/|>)+)/g;t=i.exec(e);){var a=(t[1]||t[2]||t[4]||t[6]).toLowerCase(),o=(t[2]?t[3]:t[4]?t[5]:t[7])||"";n[a]=o}return n}function _addClassToTag(e,t){return e=/\s+class\s*=/.test(e)?e.replace(/(\s+class=["']?)([^"']*)(["']?[\s>])/,function(e,n,i,a){return(" "+i+" ").indexOf(" "+t+" ")<0?""===i?n+t+a:n+i+" "+t+a:e}):e.substr(0,e.length-1)+' class="'+t+'">'}function _formatCss(e){var t="";return _each(_getCssList(e),function(e,n){t+=e+":"+n+";"}),t}function _formatUrl(e,t,n,i){function a(e){for(var t=e.split("/"),n=[],i=0,a=t.length;i0&&n.pop():""!==o&&"."!=o&&n.push(o)}return"/"+n.join("/")}function o(t,n){if(e.substr(0,t.length)===t){for(var a=[],r=0;r0&&(s+="/"+a.join("/")),"/"==i&&(s+="/"),s+e.substr(t.length)}if(l=/^(.*)\//.exec(t))return o(l[1],++n)}if(t=_undef(t,"").toLowerCase(),"data:"!=e.substr(0,5)&&(e=e.replace(/([^:])\/\//g,"$1/")),_inArray(t,["absolute","relative","domain"])<0)return e;if(n=n||location.protocol+"//"+location.host,i===undefined){var r=location.pathname.match(/^(\/.*)\//);i=r?r[1]:""}var l;if(l=/^(\w+:\/\/[^\/]*)/.exec(e)){if(l[1]!==n)return e}else if(/^\w+:/.test(e))return e;return/^\//.test(e)?e=n+a(e.substr(1)):/^\w+:\/\//.test(e)||(e=n+a(i+"/"+e)),"relative"===t?e=o(n+i,0).substr(2):"absolute"===t&&e.substr(0,n.length)===n&&(e=e.substr(n.length)),e}function _formatHtml(e,t,n,i,a){null==e&&(e=""),n=n||"",i=_undef(i,!1),a=_undef(a,"\t");var o="xx-small,x-small,small,medium,large,x-large,xx-large".split(",");e=e.replace(/(<(?:pre|pre\s[^>]*)>)([\s\S]*?)(<\/pre>)/gi,function(e,t,n,i){return t+n.replace(/<(?:br|br\s[^>]*)>/gi,"\n")+i}),e=e.replace(/<(?:br|br\s[^>]*)\s*\/?>\s*<\/p>/gi,"

        "),e=e.replace(/(<(?:p|p\s[^>]*)>)\s*(<\/p>)/gi,"$1
        $2"),e=e.replace(/\u200B/g,""),e=e.replace(/\u00A9/g,"©"),e=e.replace(/<[^>]+>/g,function(e){return e.replace(/\s+/g," ")});var r={};t&&(_each(t,function(e,t){for(var n=e.split(","),i=0,a=n.length;i]*)>)([\s\S]*?)(<\/script>)/gi,"")),r.style||(e=e.replace(/(<(?:style|style\s[^>]*)>)([\s\S]*?)(<\/style>)/gi,"")));var l=/(\s*)<(\/)?([\w\-:]+)((?:\s+|(?:\s+[\w\-:]+)|(?:\s+[\w\-:]+=[^\s"'<>]+)|(?:\s+[\w\-:"]+="[^"]*")|(?:\s+[\w\-:"]+='[^']*'))*)(\/)?>(\s*)/g,s=[];return e=e.replace(l,function(e,l,d,c,u,p,h){var f=e,m=l||"",g=d||"",v=c.toLowerCase(),_=u||"",b=p?" "+p:"",y=h||"";if(t&&!r[v])return"";if(""===b&&_SINGLE_TAG_MAP[v]&&(b=" /"),_INLINE_TAG_MAP[v]&&(m&&(m=" "),y&&(y=" ")),_PRE_TAG_MAP[v]&&(g?y="\n":m="\n"),i&&"br"==v&&(y="\n"),_BLOCK_TAG_MAP[v]&&!_PRE_TAG_MAP[v])if(i){g&&s.length>0&&s[s.length-1]===v?s.pop():s.push(v),m="\n",y="\n";for(var k=0,w=g?s.length:s.length-1;k=0&&(S[e]=_formatUrl(i,n)),(t&&"style"!==e&&!r[v]["*"]&&!r[v][e]||"body"===v&&"contenteditable"===e||/^kindeditor_\d+$/.test(e))&&delete S[e],"style"===e&&""!==i){var a=_getCssList(i);_each(a,function(e,n){!t||r[v].style||r[v]["."+e]||delete a[e]});var o="";_each(a,function(e,t){o+=e+":"+t+";"}),S.style=o}}),_="",_each(S,function(e,t){"style"===e&&""===t||(t=t.replace(/"/g,"""),_+=" "+e+'="'+t+'"')})}return"font"===v&&(v="span"),m+"<"+g+v+_+b+">"+y}),e=e.replace(/(<(?:pre|pre\s[^>]*)>)([\s\S]*?)(<\/pre>)/gi,function(e,t,n,i){return t+n.replace(/\n/g,'\n')+i}),e=e.replace(/\n\s*\n/g,"\n"),e=e.replace(/\n/g,"\n"),_trim(e)}function _clearMsWord(e,t){return e=e.replace(//gi,"").replace(//gi,"").replace(/]*>[\s\S]*?<\/style>/gi,"").replace(/]*>[\s\S]*?<\/script>/gi,"").replace(/]+>[\s\S]*?<\/w:[^>]+>/gi,"").replace(/]+>[\s\S]*?<\/o:[^>]+>/gi,"").replace(/[\s\S]*?<\/xml>/gi,"").replace(/<(?:table|td)[^>]*>/gi,function(e){return e.replace(/border-bottom:([#\w\s]+)/gi,"border:$1")}),_formatHtml(e,t)}function _mediaType(e){return/\.(rm|rmvb)(\?|$)/i.test(e)?"audio/x-pn-realaudio-plugin":/\.(swf|flv)(\?|$)/i.test(e)?"application/x-shockwave-flash":"video/x-ms-asf-plugin"}function _mediaClass(e){return/realaudio/i.test(e)?"ke-rm":/flash/i.test(e)?"ke-flash":"ke-media"}function _mediaAttrs(e){return _getAttrList(unescape(e))}function _mediaEmbed(e){var t="0&&(r+="width:"+n+"px;"),/\D/.test(i)?r+="height:"+i+";":i>0&&(r+="height:"+i+"px;");var l=''}function _tmpl(e,t){var n=new Function("obj","var p=[],print=function(){p.push.apply(p,arguments);};with(obj){p.push('"+e.replace(/[\r\t\n]/g," ").split("<%").join("\t").replace(/((^|%>)[^\t]*)'/g,"$1\r").replace(/\t=(.*?)%>/g,"',$1,'").split("\t").join("');").split("%>").join("p.push('").split("\r").join("\\'")+"');}return p.join('');");return t?n(t):n}function _contains(e,t){if(9==e.nodeType&&9!=t.nodeType)return!0;for(;t=t.parentNode;)if(t==e)return!0;return!1}function _getAttr(e,t){t=t.toLowerCase();var n=null;if(_GET_SET_ATTRIBUTE||"script"==e.nodeName.toLowerCase())try{n=e.getAttribute(t,2)}catch(i){n=e.getAttribute(t,1)}else{var a=e.ownerDocument.createElement("div");a.appendChild(e.cloneNode(!1));var o=_getAttrList(_unescape(a.innerHTML));t in o&&(n=o[t])}return"style"===t&&null!==n&&(n=_formatCss(n)),n}function _queryAll(e,t){function n(e){return"string"!=typeof e?e:e.replace(/([^\w\-])/g,"\\$1")}function i(e){return e.replace(/\\/g,"")}function a(e,t){return"*"===e||e.toLowerCase()===n(t.toLowerCase())}function o(e,t,n){var o=[],r=n.ownerDocument||n,l=r.getElementById(i(e));return l&&a(t,l.nodeName)&&_contains(n,l)&&o.push(l),o}function r(e,t,n){var o,r,l,s,d=n.ownerDocument||n,c=[];if(n.getElementsByClassName)for(o=n.getElementsByClassName(i(e)),r=0,l=o.length;r-1&&c.push(s)}return c}function l(e,t,n){for(var o,r=[],l=n.ownerDocument||n,s=l.getElementsByName(i(e)),d=0,c=s.length;d])+)/.exec(e);var a=n?n[1]:"*";if(n=/#((?:[\w\-]|\\.)+)$/.exec(e))i=o(n[1],a,t);else if(n=/\.((?:[\w\-]|\\.)+)$/.exec(e))i=r(n[1],a,t);else if(n=/\[((?:[\w\-]|\\.)+)\]/.exec(e))i=s(n[1].toLowerCase(),null,a,t);else if(n=/\[((?:[\w\-]|\\.)+)\s*=\s*['"]?((?:\\.|[^'"]+)+)['"]?\]/.exec(e)){var d=n[1].toLowerCase(),c=n[2];i="id"===d?o(c,a,t):"class"===d?r(c,a,t):"name"===d?l(c,a,t):s(d,c,a,t)}else for(var u,p=t.getElementsByTagName(a),h=0,f=p.length;h1){var u=[];return _each(c,function(){_each(_queryAll(this,t),function(){_inArray(this,u)<0&&u.push(this)})}),u}t=t||document;for(var p,h=[],f=/((?:\\.|[^\s>])+|[\s>])/g;p=f.exec(e);)" "!==p[1]&&h.push(p[1]);var m=[];if(1==h.length)return d(h[0],t);var g,v,_,b,y,k,w,S,C,E,x=!1;for(k=0,lenth=h.length;k"!==g){if(k>0){for(v=[],w=0,C=m.length;w0?n[0]:null}function _get(e){return K(e)[0]}function _getDoc(e){return e?e.ownerDocument||e.document||e:document}function _getWin(e){if(!e)return window;var t=_getDoc(e);return t.parentWindow||t.defaultView}function _setHtml(e,t){if(1==e.nodeType){var n=_getDoc(e);try{e.innerHTML=''+t;var i=n.getElementById("__kindeditor_temp_tag__");i.parentNode.removeChild(i)}catch(a){K(e).empty(),K("@"+t,n).each(function(){e.appendChild(this)})}}}function _hasClass(e,t){return _inString(t,e.className," ")}function _setAttr(e,t,n){_IE&&_V<8&&"class"==t.toLowerCase()&&(t="className"),e.setAttribute(t,""+n)}function _removeAttr(e,t){_IE&&_V<8&&"class"==t.toLowerCase()&&(t="className"),_setAttr(e,t,""),e.removeAttribute(t)}function _getNodeName(e){return e&&e.nodeName?e.nodeName.toLowerCase():""}function _computedCss(e,t){var n=_getWin(e),i=_toCamel(t),a="";if(n.getComputedStyle){var o=n.getComputedStyle(e,null);a=o[i]||o.getPropertyValue(t)||e.style[i]}else e.currentStyle&&(a=e.currentStyle[i]||e.style[i]);return a}function _hasVal(e){return!!_VALUE_TAG_MAP[_getNodeName(e)]}function _docElement(e){return e=e||document,_QUIRKS?e.body:e.documentElement}function _docHeight(e){var t=_docElement(e);return Math.max(t.scrollHeight,t.clientHeight)}function _docWidth(e){var t=_docElement(e);return Math.max(t.scrollWidth,t.clientWidth)}function _getScrollPos(e){e=e||document;var t,n;return _IE||_NEWIE||_OPERA?(t=_docElement(e).scrollLeft,n=_docElement(e).scrollTop):(t=_getWin(e).scrollX,n=_getWin(e).scrollY),{x:t,y:n}}function KNode(e){this.init(e)}function _updateCollapsed(e){return e.collapsed=e.startContainer===e.endContainer&&e.startOffset===e.endOffset,e}function _copyAndDelete(e,t,n){function i(i,a,o){var r,s=i.nodeValue.length;if(t){var d=i.cloneNode(!0);r=a>0?d.splitText(a):d,o0&&(c=i.splitText(a),e.setStart(i,a)),o=0&&c<=0&&(c=g.compareBoundaryPoints(_START_TO_START,e)),c>=0&&u<=0&&(u=g.compareBoundaryPoints(_END_TO_END,e)),u>=0&&p<=0&&(p=g.compareBoundaryPoints(_END_TO_START,e)),p>=0)return!1;if(f=m.nextSibling,d>0)if(1==m.nodeType)if(c>=0&&u<=0)t&&h.appendChild(m.cloneNode(!0)),n&&l.push(m);else{var v;if(t&&(v=m.cloneNode(!1),h.appendChild(v)),o(m,v)===!1)return!1}else if(3==m.nodeType){var _;if(_=m==s.startContainer?i(m,s.startOffset,m.nodeValue.length):m==s.endContainer?i(m,0,s.endOffset):i(m,0,m.nodeValue.length),t)try{h.appendChild(_)}catch(b){}}m=f}}var r=e.doc,l=[],s=e.cloneRange().down(),d=-1,c=-1,u=-1,p=-1,h=e.commonAncestor(),f=r.createDocumentFragment();if(3==h.nodeType){var m=i(h,e.startOffset,e.endOffset);return t&&f.appendChild(m),a(),t?f:e}o(h,f),n&&e.up().collapse(!0);for(var g=0,v=l.length;g0?l+=f.text.replace(/\r\n|\n|\r/g,"").length:l=0,h&&K(h).remove()}else 3==p.nodeType&&(d.moveStart("character",p.nodeValue.length),l+=p.nodeValue.length);s<0&&(r=p)}if(s<0&&1==r.nodeType)return{node:a,offset:K(a.lastChild).index()+1};if(s>0)for(;r.nextSibling&&1==r.nodeType;)r=r.nextSibling;if(d=e.duplicate(),_moveToElementText(d,a),d.setEndPoint("StartToEnd",i),l-=d.text.replace(/\r\n|\n|\r/g,"").length,s>0&&3==r.nodeType)for(var v=r.previousSibling;v&&3==v.nodeType;)l-=v.nodeValue.length,v=v.previousSibling;return{node:r,offset:l}}function _getEndRange(e,t){var n=e.ownerDocument||e,i=n.body.createTextRange();if(n==e)return i.collapse(!0),i;if(1==e.nodeType&&e.childNodes.length>0){var a,o,r=e.childNodes;if(0===t?(o=r[0],a=!0):(o=r[t-1],a=!1),!o)return i;if("head"===K(o).name)return 1===t&&(a=!0),2===t&&(a=!1),i.collapse(a),i;if(1==o.nodeType){var l,s=K(o);return s.isControl()&&(l=n.createElement("span"),a?s.before(l):s.after(l),o=l),_moveToElementText(i,o),i.collapse(a),l&&K(l).remove(),i}e=o,t=a?0:o.nodeValue.length}var d=n.createElement("span");return K(e).before(d),_moveToElementText(i,d),i.moveStart("character",t),K(d).remove(),i}function _toRange(e){function t(e){"tr"==K(e.node).name&&(e.node=e.node.cells[e.offset],e.offset=0)}var n,i;if(_IERANGE){if(e.item)return n=_getDoc(e.item(0)),i=new KRange(n),i.selectNode(e.item(0)),i;n=e.parentElement().ownerDocument;var a=_getStartEnd(e,!0),o=_getStartEnd(e,!1);return t(a),t(o),i=new KRange(n),i.setStart(a.node,a.offset),i.setEnd(o.node,o.offset),i}var r=e.startContainer;return n=r.ownerDocument||r,i=new KRange(n),i.setStart(r,e.startOffset),i.setEnd(e.endContainer,e.endOffset),i}function KRange(e){this.init(e)}function _range(e){return e.nodeName?new KRange(e):e.constructor===KRange?e:_toRange(e)}function _nativeCommand(e,t,n){try{e.execCommand(t,!1,n)}catch(i){}}function _nativeCommandValue(e,t){var n="";try{n=e.queryCommandValue(t)}catch(i){}return"string"!=typeof n&&(n=""),n}function _getSel(e){var t=_getWin(e);return _IERANGE?e.selection:t.getSelection()}function _getRng(e){var t,n=_getSel(e);try{t=n.rangeCount>0?n.getRangeAt(0):n.createRange()}catch(i){}return!_IERANGE||t&&(t.item||t.parentElement().ownerDocument===e)?t:null}function _singleKeyMap(e){var t,n,i={};return _each(e,function(e,a){t=e.split(",");for(var o=0,r=t.length;o]+>/g,"")}function _mergeWrapper(e,t){e=e.clone(!0);for(var n=_getInnerNode(e),i=e,a=!1;t;){for(;i;)i.name===t.name&&(_mergeAttrs(i,t.attr(),t.css()),a=!0),i=i.first();a||n.append(t.clone(!1)),a=!1,t=t.first()}return e}function _wrapNode(e,t){if(t=t.clone(!0),3==e.type)return _getInnerNode(t).append(e.clone(!1)),e.replaceWith(t),t;for(var n,i=e;(n=e.first())&&1==n.children().length;)e=n;n=e.first();for(var a=e.doc.createDocumentFragment();n;)a.appendChild(n[0]),n=n.next();return t=_mergeWrapper(i,t),a.firstChild&&_getInnerNode(t).append(a),i.replaceWith(t),t}function _mergeAttrs(e,t,n){_each(t,function(t,n){"style"!==t&&e.attr(t,n)}),_each(n,function(t,n){e.css(t,n)})}function _inPreElement(e){for(;e&&"body"!=e.name;){if(_PRE_TAG_MAP[e.name]||"div"==e.name&&e.hasClass("ke-script"))return!0;e=e.parent()}return!1}function KCmd(e){this.init(e)}function _cmd(e){if(e.nodeName){var t=_getDoc(e);e=_range(t).selectNodeContents(t.body).collapse(!1)}return new KCmd(e)}function _drag(e){var t=e.moveEl,n=e.moveFn,i=e.clickEl||t,a=e.beforeDrag,o=e.iframeFix===undefined||e.iframeFix,r=[document];o&&K("iframe").each(function(){var e=_formatUrl(this.src||"","absolute");if(!/^https?:\/\//.test(e)){var t;try{t=_iframeDoc(this)}catch(n){}if(t){var i=K(this).pos();K(t).data("pos-x",i.x),K(t).data("pos-y",i.y),r.push(t)}}}),i.mousedown(function(e){function o(e){e.preventDefault();var t=K(_getDoc(e.target)),a=_round((t.data("pos-x")||0)+e.pageX-f),o=_round((t.data("pos-y")||0)+e.pageY-m);n.call(i,c,u,p,h,a,o)}function l(e){e.preventDefault()}function s(e){e.preventDefault(),K(r).unbind("mousemove",o).unbind("mouseup",s).unbind("selectstart",l),d.releaseCapture&&d.releaseCapture(),K(d).removeClass("ke-dragging")}e.stopPropagation();var d=i.get(),c=_removeUnit(t.css("left")),u=_removeUnit(t.css("top")),p=t.width(),h=t.height(),f=e.pageX,m=e.pageY;K(d).addClass("ke-dragging"),a&&a(),K(r).mousemove(o).mouseup(s).bind("selectstart",l),d.setCapture&&d.setCapture()})}function KWidget(e){this.init(e)}function _widget(e){return new KWidget(e)}function _iframeDoc(e){return e=_get(e),e.contentDocument||e.contentWindow.document}function _getInitHtml(e,t,n,i){var a=[""===_direction?"":'','',""];return _isArray(n)||(n=[n]),_each(n,function(e,t){t&&a.push('')}),i&&a.push(""),a.push(""),a.join("\n")}function _elementVal(e,t){if(e.hasVal()){if(t===undefined){var n=e.val();return n=n.replace(/(<(?:p|p\s[^>]*)>) *(<\/p>)/gi,"")}return e.val(t)}return e.html(t)}function KEdit(e){this.init(e)}function _edit(e){return new KEdit(e)}function _selectToolbar(e,t){var n=this,i=n.get(e);if(i){if(i.hasClass("ke-disabled"))return;t(i)}}function KToolbar(e){this.init(e)}function _toolbar(e){return new KToolbar(e)}function KMenu(e){this.init(e)}function _menu(e){return new KMenu(e)}function KColorPicker(e){this.init(e)}function _colorpicker(e){return new KColorPicker(e)}function KUploadButton(e){this.init(e)}function _uploadbutton(e){return new KUploadButton(e)}function _createButton(e){e=e||{};var t=e.name||"",n=K(''),i=K('');return e.click&&i.click(e.click),n.append(i),n}function KDialog(e){this.init(e)}function _dialog(e){return new KDialog(e)}function _tabs(e){var t=_widget(e),n=t.remove,i=e.afterSelect,a=t.div,o=[];a.addClass("ke-tabs").bind("contextmenu,mousedown,mousemove",function(e){e.preventDefault()});var r=K('
          ');return a.append(r),t.add=function(e){var t=K('
        • '+e.title+"
        • ");t.data("tab",e),o.push(t),r.append(t)},t.selectedIndex=0,t.select=function(e){t.selectedIndex=e,_each(o,function(n,i){i.unbind(),n===e?(i.addClass("ke-tabs-li-selected"),K(i.data("tab").panel).show("")):(i.removeClass("ke-tabs-li-selected").removeClass("ke-tabs-li-on").mouseover(function(){K(this).addClass("ke-tabs-li-on")}).mouseout(function(){K(this).removeClass("ke-tabs-li-on")}).click(function(){t.select(n)}),K(i.data("tab").panel).hide())}),i&&i.call(t,e)},t.remove=function(){_each(o,function(){this.remove()}),r.remove(),n.call(t)},t}function _loadScript(e,t){var n=document.getElementsByTagName("head")[0]||(_QUIRKS?document.body:document.documentElement),i=document.createElement("script");n.appendChild(i),i.src=e,i.charset="utf-8",i.onload=i.onreadystatechange=function(){this.readyState&&"loaded"!==this.readyState||(t&&t(),i.onload=i.onreadystatechange=null,n.removeChild(i))}}function _chopQuery(e){var t=e.indexOf("?");return t>0?e.substr(0,t):e}function _loadStyle(e){for(var t=document.getElementsByTagName("head")[0]||(_QUIRKS?document.body:document.documentElement),n=document.createElement("link"),i=_chopQuery(_formatUrl(e,"absolute")),a=K('link[rel="stylesheet"]',t),o=0,r=a.length;on&&(n=this.width)))});i.length>0&&"-"==i[0].title;)i.shift();for(;i.length>0&&"-"==i[i.length-1].title;)i.pop();var a=null;if(_each(i,function(e){"-"==this.title&&"-"==a.title&&delete i[e],a=this}),i.length>0){t.preventDefault();var o=K(e.edit.iframe).pos(),r=_menu({x:o.x+t.clientX,y:o.y+t.clientY,width:n,css:{visibility:"hidden"},shadowMode:e.shadowMode});_each(i,function(){this.title&&r.addItem(this)});var l=_docElement(r.doc),s=r.div.height();t.clientY+s>=l.clientHeight-100&&r.pos(r.x,_removeUnit(r.y)-s),r.div.css("visibility","visible"),e.menu=r}}})}function _bindNewlineEvent(){function e(e){for(var t=K(e.commonAncestor());t&&(1!=t.type||t.isStyle());)t=t.parent();return t.name}var t=this,n=t.edit.doc,i=t.newlineTag;if(!(_IE&&"br"!==i||_GECKO&&_V<3&&"p"!==i||_OPERA&&_V<9)){var a=_toMap("h1,h2,h3,h4,h5,h6,pre,li"),o=_toMap("p,h1,h2,h3,h4,h5,h6,pre,li,blockquote");K(n).keydown(function(r){if(!(13!=r.which||r.shiftKey||r.ctrlKey||r.altKey)){t.cmd.selection();var l=e(t.cmd.range);if("marquee"!=l&&"select"!=l)return"br"!==i||a[l]?void(o[l]||_nativeCommand(n,"formatblock","

          ")):(r.preventDefault(),void t.insertHtml("
          "+(_IE&&_V<9?"":"​")))}}),K(n).keyup(function(a){if(!(13!=a.which||a.shiftKey||a.ctrlKey||a.altKey)&&"br"!=i){if(_GECKO){var r=t.cmd.commonAncestor("p"),l=t.cmd.commonAncestor("a");return void(l&&""==l.text()&&(l.remove(!0),t.cmd.range.selectNodeContents(r[0]).collapse(!0),t.cmd.select()))}t.cmd.selection();var s=e(t.cmd.range);if("marquee"!=s&&"select"!=s){o[s]||_nativeCommand(n,"formatblock","

          ");var d=t.cmd.commonAncestor("div");if(d){for(var c=K("

          "),u=d[0].firstChild;u;){var p=u.nextSibling;c.append(u),u=p}d.before(c),d.remove(),t.cmd.range.selectNodeContents(c[0]),t.cmd.select()}}}})}}function _bindTabEvent(){var e=this,t=e.edit.doc;K(t).keydown(function(n){if(9==n.which){if(n.preventDefault(),e.afterTab)return void e.afterTab.call(e,n);var i=e.cmd,a=i.range;a.shrink(),a.collapsed&&1==a.startContainer.nodeType&&(a.insertNode(K("@ ",t)[0]),i.select()),e.insertHtml("    ")}})}function _bindFocusEvent(){var e=this;K(e.edit.textarea[0],e.edit.win).focus(function(t){e.afterFocus&&e.afterFocus.call(e,t),e.container.addClass("focus")}).blur(function(t){e.afterBlur&&e.afterBlur.call(e,t),e.container.removeClass("focus")})}function _removeBookmarkTag(e){return _trim(e.replace(/]*id="?__kindeditor_bookmark_\w+_\d+__"?[^>]*><\/span>/gi,""))}function _removeTempTag(e){return e.replace(/]+class="?__kindeditor_paste__"?[^>]*>[\s\S]*?<\/div>/gi,"")}function _addBookmarkToStack(e,t){if(0===e.length)return void e.push(t);var n=e[e.length-1];_removeBookmarkTag(t.html)!==_removeBookmarkTag(n.html)&&e.push(t)}function _undoToRedo(e,t){var n,i,a=this,o=a.edit,r=o.doc.body;if(0===e.length)return a;o.designMode?(n=a.cmd.range,i=n.createBookmark(!0), i.html=r.innerHTML):i={html:r.innerHTML},_addBookmarkToStack(t,i);var l=e.pop();return _removeBookmarkTag(i.html)===_removeBookmarkTag(l.html)&&e.length>0&&(l=e.pop()),o.designMode?(o.html(l.html),l.start&&(n.moveToBookmark(l),a.select())):K(r).html(_removeBookmarkTag(l.html)),a}function KEditor(e){function t(e,t){KEditor.prototype[e]===undefined&&(n[e]=t),n.options[e]=t}var n=this;n.options={},_each(e,function(n,i){t(n,e[n])}),_each(K.options,function(e,i){n[e]===undefined&&t(e,i)});var i=K(n.srcElement||"').css("width","100%"),n.tabIndex=isNaN(parseInt(e.tabIndex,10))?n.srcElement.attr("tabindex"):parseInt(e.tabIndex,10),n.iframe.attr("tabindex",n.tabIndex),n.textarea.attr("tabindex",n.tabIndex),n.width&&n.setWidth(n.width),n.height&&n.setHeight(n.height),n.designMode?n.textarea.hide():n.iframe.hide(),l&&n.iframe.bind("load",function(e){n.iframe.unbind("load"),_IE?t():setTimeout(t,0)}),n.div.append(n.iframe),n.div.append(n.textarea),n.srcElement.hide(),!l&&t()},setWidth:function(e){return this.div.css("width",_addUnit(e)),this},setHeight:function(e){var t=this;return e=_addUnit(e),t.div.css("height",e),t.iframe.css("height",e),(_IE&&_V<8||_QUIRKS)&&(e=_addUnit(_removeUnit(e)-2)),t.textarea.css("height",e),t},remove:function(){var e=this,t=e.doc;K(t.body).unbind(),K(t).unbind(),K(e.win).unbind(),e._mousedownHandler&&K(document).unbind("mousedown",e._mousedownHandler),_elementVal(e.srcElement,e.html()),e.srcElement.show(),t.write(""),e.iframe.unbind(),e.textarea.unbind(),KEdit.parent.remove.call(e)},html:function(e,t){var n=this,i=n.doc;if(n.designMode){var a=i.body;return e===undefined?(e=t?""+a.parentNode.innerHTML+"":a.innerHTML,n.beforeGetHtml&&(e=n.beforeGetHtml(e)),_GECKO&&"
          "==e&&(e=""),e):(n.beforeSetHtml&&(e=n.beforeSetHtml(e)),_IE&&_V>=9&&(e=e.replace(/(<.*?checked=")checked(".*>)/gi,"$1$2")),K(a).html(e),n.afterSetHtml&&n.afterSetHtml(),n)}return e===undefined?n.textarea.val():(n.textarea.val(e),n)},design:function(e){var t,n=this;return(e===undefined?!n.designMode:e)?n.designMode||(t=n.html(),n.designMode=!0,n.html(t),n.textarea.hide(),n.iframe.show()):n.designMode&&(t=n.html(),n.designMode=!1,n.html(t),n.iframe.hide(),n.textarea.show()),n.focus()},focus:function(){var e=this;return e.designMode?e.win.focus():e.textarea[0].focus(),e},blur:function(){var e=this;if(_IE){var t=K('',e.div);e.div.append(t),t[0].focus(),t.remove()}else e.designMode?e.win.blur():e.textarea[0].blur();return e},afterChange:function(e){function t(t){setTimeout(function(){e(t)},1)}var n=this,i=n.doc,a=i.body;return K(i).keyup(function(t){t.ctrlKey||t.altKey||!_CHANGE_KEY_MAP[t.which]||e(t)}),K(i).mouseup(e).contextmenu(e),K(n.win).blur(e),K(a).bind("paste",t),K(a).bind("cut",t),n}}),K.EditClass=KEdit,K.edit=_edit,K.iframeDoc=_iframeDoc,_extend(KToolbar,KWidget,{init:function(e){function t(e){var t=K(e);return t.hasClass("ke-outline")?t:t.hasClass("ke-toolbar-icon")?t.parent():void 0}function n(e,n){var i=t(e.target);if(i){if(i.hasClass("ke-disabled"))return;if(i.hasClass("ke-selected"))return;i[n]("ke-on")}}var i=this;KToolbar.parent.init.call(i,e),i.disableMode=_undef(e.disableMode,!1),i.noDisableItemMap=_toMap(_undef(e.noDisableItems,[])),i._itemMap={},i.div.addClass("ke-toolbar").bind("contextmenu,mousedown,mousemove",function(e){e.preventDefault()}).attr("unselectable","on"),i.div.mouseover(function(e){n(e,"addClass")}).mouseout(function(e){n(e,"removeClass")}).click(function(e){var n=t(e.target);if(n){if(n.hasClass("ke-disabled"))return;i.options.click.call(this,e,n.attr("data-name"))}})},get:function(e){return this._itemMap[e]?this._itemMap[e]:this._itemMap[e]=K("span.ke-icon-"+e,this.div).parent()},select:function(e){return _selectToolbar.call(this,e,function(e){e.addClass("ke-selected")}),self},unselect:function(e){return _selectToolbar.call(this,e,function(e){e.removeClass("ke-selected").removeClass("ke-on")}),self},enable:function(e){var t=this,n=e.get?e:t.get(e);return n&&(n.removeClass("ke-disabled"),n.opacity(1)),t},disable:function(e){var t=this,n=e.get?e:t.get(e);return n&&(n.removeClass("ke-selected").addClass("ke-disabled"),n.opacity(.5)),t},disableAll:function(e,t){var n=this,i=n.noDisableItemMap;return t&&(i=_toMap(t)),(e===undefined?!n.disableMode:e)?(K("span.ke-outline",n.div).each(function(){var e=K(this),t=e[0].getAttribute("data-name",2);i[t]||n.disable(e)}),n.disableMode=!0):(K("span.ke-outline",n.div).each(function(){var e=K(this),t=e[0].getAttribute("data-name",2);i[t]||n.enable(e)}),n.disableMode=!1),n}}),K.ToolbarClass=KToolbar,K.toolbar=_toolbar,_extend(KMenu,KWidget,{init:function(e){var t=this;e.z=e.z||811213,KMenu.parent.init.call(t,e),t.centerLineMode=_undef(e.centerLineMode,!0),t.div.addClass("ke-menu").bind("click,mousedown",function(e){e.stopPropagation()}).attr("unselectable","on")},addItem:function(e){var t=this;if("-"===e.title)return void t.div.append(K('
          '));var n=K('
          '),i=K('
          '),a=K('
          '),o=_addUnit(e.height),r=_undef(e.iconClass,"");t.div.append(n),o&&(n.css("height",o),a.css("line-height",o));var l;return t.centerLineMode&&(l=K('
          '),o&&l.css("height",o)),n.mouseover(function(e){K(this).addClass("ke-menu-item-on"),l&&l.addClass("ke-menu-item-center-on")}).mouseout(function(e){K(this).removeClass("ke-menu-item-on"),l&&l.removeClass("ke-menu-item-center-on")}).click(function(t){e.click.call(K(this)),t.stopPropagation()}).append(i),l&&n.append(l),n.append(a),e.checked&&(r="ke-icon-checked"),""!==r&&i.html(''),a.html(e.title),t},remove:function(){var e=this;return e.options.beforeRemove&&e.options.beforeRemove.call(e),K(".ke-menu-item",e.div[0]).unbind(),KMenu.parent.remove.call(e),e}}),K.MenuClass=KMenu,K.menu=_menu,_extend(KColorPicker,KWidget,{init:function(e){var t=this;e.z=e.z||811213,KColorPicker.parent.init.call(t,e);var n=e.colors||[["#E53333","#E56600","#FF9900","#64451D","#DFC5A4","#FFE500"],["#009900","#006600","#99BB00","#B8D100","#60D978","#00D5FF"],["#337FE5","#003399","#4C33E5","#9933E5","#CC33E5","#EE33EE"],["#FFFFFF","#CCCCCC","#999999","#666666","#333333","#000000"]];t.selectedColor=(e.selectedColor||"").toLowerCase(),t._cells=[],t.div.addClass("ke-colorpicker").bind("click,mousedown",function(e){e.stopPropagation()}).attr("unselectable","on");var i=t.doc.createElement("table");t.div.append(i),i.className="ke-colorpicker-table",i.cellPadding=0,i.cellSpacing=0,i.border=0;var a=i.insertRow(0),o=a.insertCell(0);o.colSpan=n[0].length,t._addAttr(o,"","ke-colorpicker-cell-top");for(var r=0;r').css("background-color",t)):e.html(i.options.noColor),K(e).attr("unselectable","on"),i._cells.push(e)},remove:function(){var e=this;return _each(e._cells,function(){this.unbind()}),KColorPicker.parent.remove.call(e),e}}),K.ColorPickerClass=KColorPicker,K.colorpicker=_colorpicker,_extend(KUploadButton,{init:function(e){var t=this,n=K(e.button),i=e.fieldName||"file",a=e.url||"",o=n.val(),r=e.extraParams||{},l=n[0].className||"",s=e.target||"kindeditor_upload_iframe_"+(new Date).getTime();e.afterError=e.afterError||function(e){alert(e)};var d=[];for(var c in r)d.push('');var u=['
          ',e.target?"":'',e.form?'
          ':'
          ','',d.join(""),'',"",'',e.form?"
          ":"","
          "].join(""),p=K(u,n.doc);n.hide(),n.before(p),t.div=p,t.button=n,t.iframe=e.target?K('iframe[name="'+s+'"]'):K("iframe",p),t.form=e.form?K(e.form):K("form",p),t.fileBox=K(".ke-upload-file",p),t.options=e},submit:function(){var e=this,t=e.iframe;return t.bind("load",function(){t.unbind();var n=document.createElement("form");e.fileBox.before(n),K(n).append(e.fileBox),n.reset(),K(n).remove(!0);var i,a=K.iframeDoc(t),o=a.getElementsByTagName("pre")[0],r="";r=o?o.innerHTML:a.body.innerHTML,r=_unescape(r),t[0].src="javascript:false";try{i=K.json(r)}catch(l){e.options.afterError.call(e,""+a.body.parentNode.innerHTML+"")}i&&e.options.afterUpload.call(e,i)}),e.form[0].submit(),e},remove:function(){var e=this;return e.fileBox&&e.fileBox.unbind(),e.iframe.remove(),e.div.remove(),e.button.show(),e}}),K.UploadButtonClass=KUploadButton,K.uploadbutton=_uploadbutton,_extend(KDialog,KWidget,{init:function(e){var t=this,n=_undef(e.shadowMode,!0);e.z=e.z||811213,e.shadowMode=!1,e.autoScroll=_undef(e.autoScroll,!0),KDialog.parent.init.call(t,e);var i=e.title,a=K(e.body,t.doc),o=e.previewBtn,r=e.yesBtn,l=e.noBtn,s=e.closeBtn,d=_undef(e.showMask,!0);t.div.addClass("ke-dialog").bind("click,mousedown",function(e){e.stopPropagation()});var c=K('
          ').appendTo(t.div);_IE&&_V<7?t.iframeMask=K('').appendTo(t.div):n&&K('
          ').appendTo(t.div);var u=K('
          ');c.append(u),u.html(i),t.closeIcon=K('').click(s.click),u.append(t.closeIcon),t.draggable({clickEl:u,beforeDrag:e.beforeDrag});var p=K('
          ');c.append(p),p.append(a);var h=K('');if((o||r||l)&&c.append(h),_each([{btn:o,name:"preview"},{btn:r,name:"yes"},{btn:l,name:"no"}],function(){if(this.btn){var e=_createButton(this.btn);e.addClass("ke-dialog-"+this.name),h.append(e)}}),t.height&&p.height(_removeUnit(t.height)-u.height()-h.height()),t.div.width(t.div.width()),t.div.height(t.div.height()),t.mask=null,d){var f=_docElement(t.doc),m=Math.max(f.scrollWidth,f.clientWidth),g=Math.max(f.scrollHeight,f.clientHeight);t.mask=_widget({x:0,y:0,z:t.z-1,cls:"ke-dialog-mask",width:m,height:g})}t.autoPos(t.div.width(),t.div.height()),t.footerDiv=h,t.bodyDiv=p,t.headerDiv=u,t.isLoading=!1},setMaskIndex:function(e){var t=this;t.mask.div.css("z-index",e)},showLoading:function(e){e=_undef(e,"");var t=this,n=t.bodyDiv;return t.loading=K('
          '+e+"
          ").width(n.width()).height(n.height()).css("top",t.headerDiv.height()+"px"),n.css("visibility","hidden").after(t.loading),t.isLoading=!0,t},hideLoading:function(){return this.loading&&this.loading.remove(),this.bodyDiv.css("visibility","visible"),this.isLoading=!1,this},remove:function(){var e=this;return e.options.beforeRemove&&e.options.beforeRemove.call(e),e.mask&&e.mask.remove(),e.iframeMask&&e.iframeMask.remove(),e.closeIcon.unbind(),K("input",e.div).unbind(),K("button",e.div).unbind(),e.footerDiv.unbind(),e.bodyDiv.unbind(),e.headerDiv.unbind(),K("iframe",e.div).each(function(){K(this).remove()}),KDialog.parent.remove.call(e),e}}),K.DialogClass=KDialog,K.dialog=_dialog,K.tabs=_tabs,K.loadScript=_loadScript,K.loadStyle=_loadStyle,K.ajax=_ajax;var _plugins={},_language={};KEditor.prototype={lang:function(e){return _lang(e,this.langType)},loadPlugin:function(e,t){var n=this;return _plugins[e]?_isFunction(_plugins[e])?(_plugins[e].call(n,KindEditor),t&&t.call(n),n):(setTimeout(function(){n.loadPlugin(e,t)},100),n):(_plugins[e]="loading",_loadScript(n.pluginsPath+e+"/"+e+".js?ver="+encodeURIComponent(K.DEBUG?_TIME:_VERSION),function(){setTimeout(function(){_plugins[e]&&n.loadPlugin(e,t)},0)}),n)},handler:function(e,t){var n=this;return n._handlers[e]||(n._handlers[e]=[]),_isFunction(t)?(n._handlers[e].push(t),n):(_each(n._handlers[e],function(){t=this.call(n,t)}),t)},clickToolbar:function(e,t){var n=this,i="clickToolbar"+e;return t===undefined?n._handlers[i]?n.handler(i):(n.loadPlugin(e,function(){n.handler(i)}),n):n.handler(i,t)},updateState:function(){var e=this;return _each("justifyleft,justifycenter,justifyright,justifyfull,insertorderedlist,insertunorderedlist,subscript,superscript,bold,italic,underline,strikethrough".split(","),function(t,n){e.cmd.state(n)?e.toolbar.select(n):e.toolbar.unselect(n)}),e},addContextmenu:function(e){return this._contextmenus.push(e),this},afterCreate:function(e){return this.handler("afterCreate",e)},beforeRemove:function(e){return this.handler("beforeRemove",e)},beforeGetHtml:function(e){return this.handler("beforeGetHtml",e)},beforeSetHtml:function(e){return this.handler("beforeSetHtml",e)},afterSetHtml:function(e){return this.handler("afterSetHtml",e)},create:function(){function e(){return 0===s.height()?void setTimeout(e,100):void t.resize(i,a,!1)}var t=this,n=t.fullscreenMode;if(t.isCreated)return t;if(t.srcElement.data("kindeditor"))return t;t.srcElement.data("kindeditor","true"),n?_docElement().style.overflow="hidden":_docElement().style.overflow="";var i=n?_docElement().clientWidth+"px":t.width,a=n?_docElement().clientHeight+"px":t.height;(_IE&&_V<8||_QUIRKS)&&(a=_addUnit(_removeUnit(a)+2));var o=t.container=K(t.layout);n?K(document.body).append(o):t.srcElement.before(o);var r=K(".toolbar",o),l=K(".edit",o),s=t.statusbar=K(".statusbar",o);o.removeClass("container").addClass("ke-container ke-container-"+t.themeType).css("width",i),n?(o.css({position:"absolute",left:0,top:0,"z-index":811211}),_GECKO||(t._scrollPos=_getScrollPos()),window.scrollTo(0,0),K(document.body).css({height:"1px",overflow:"hidden"}),K(document.body.parentNode).css("overflow","hidden"),t._fullscreenExecuted=!0):(t._fullscreenExecuted&&(K(document.body).css({height:"",overflow:""}),K(document.body.parentNode).css("overflow","")),t._scrollPos&&window.scrollTo(t._scrollPos.x,t._scrollPos.y));var d=[];K.each(t.items,function(e,n){"|"==n?d.push(''):"/"==n?d.push('
          '):(d.push(''),d.push(''))});var c=t.toolbar=_toolbar({src:r,html:d.join(""),noDisableItems:t.noDisableItems,click:function(e,n){if(e.stop(),t.menu){var i=t.menu.name;if(t.hideMenu(),i===n)return}t.clickToolbar(n)}}),u=_removeUnit(a)-c.div.height(),p=t.edit=_edit({height:u>0&&_removeUnit(a)>t.minHeight?u:t.minHeight,src:l,srcElement:t.srcElement,designMode:t.designMode,themesPath:t.themesPath,bodyClass:t.bodyClass,cssPath:t.cssPath,cssData:t.cssData,beforeGetHtml:function(e){return e=t.beforeGetHtml(e),e=_removeBookmarkTag(_removeTempTag(e)),_formatHtml(e,t.filterMode?t.htmlTags:null,t.urlType,t.wellFormatMode,t.indentChar)},beforeSetHtml:function(e){return e=_formatHtml(e,t.filterMode?t.htmlTags:null,"",!1),t.beforeSetHtml(e)},afterSetHtml:function(){t.edit=p=this,t.afterSetHtml()},afterCreate:function(){if(t.edit=p=this,t.cmd=p.cmd,t._docMousedownFn=function(e){t.menu&&t.hideMenu()},K(p.doc,document).mousedown(t._docMousedownFn),_bindContextmenuEvent.call(t),_bindNewlineEvent.call(t),_bindTabEvent.call(t),_bindFocusEvent.call(t),p.afterChange(function(e){p.designMode&&(t.updateState(),t.addBookmark(),t.options.afterChange&&t.options.afterChange.call(t))}),p.textarea.keyup(function(e){e.ctrlKey||e.altKey||!_INPUT_KEY_MAP[e.which]||t.options.afterChange&&t.options.afterChange.call(t)}),t.readonlyMode&&t.readonly(),t.isCreated=!0,""===t.initContent&&(t.initContent=t.html()),t._undoStack.length>0){var e=t._undoStack.pop();e.start&&(t.html(e.html),p.cmd.range.moveToBookmark(e),t.select())}t.afterCreate(),t.options.afterCreate&&t.options.afterCreate.call(t)}});return s.removeClass("statusbar").addClass("ke-statusbar").append(''),t._fullscreenResizeHandler&&(K(window).unbind("resize",t._fullscreenResizeHandler),t._fullscreenResizeHandler=null),e(),n?(t._fullscreenResizeHandler=function(e){t.isCreated&&t.resize(_docElement().clientWidth,_docElement().clientHeight,!1)},K(window).bind("resize",t._fullscreenResizeHandler),c.select("fullscreen")):(_GECKO&&K(window).bind("scroll",function(e){t._scrollPos=_getScrollPos()}),t.resizeType>0&&_drag({moveEl:o,clickEl:s,moveFn:function(e,n,i,a,o,r){a+=r,t.resize(null,a)}}),2===t.resizeType&&_drag({moveEl:o,clickEl:s.last(),moveFn:function(e,n,i,a,o,r){i+=o,a+=r,t.resize(i,a)}})),t},remove:function(){var e=this;return e.isCreated?(e.beforeRemove(),e.srcElement.data("kindeditor",""),e.menu&&e.hideMenu(),_each(e.dialogs,function(){e.hideDialog()}),K(document).unbind("mousedown",e._docMousedownFn),e.toolbar.remove(),e.edit.remove(),e.statusbar.last().unbind(),e.statusbar.unbind(),e.container.remove(),e.container=e.toolbar=e.edit=e.menu=null,e.dialogs=[],e.isCreated=!1,e):e},resize:function(e,t,n){var i=this;return n=_undef(n,!0),e&&(/%/.test(e)||(e=_removeUnit(e),e=e/gi,"").replace(/ /gi," ")):t.html(_escape(e))},isEmpty:function(){return""===_trim(this.text().replace(/\r\n|\n|\r/,""))},isDirty:function(){return _trim(this.initContent.replace(/\r\n|\n|\r|t/g,""))!==_trim(this.html().replace(/\r\n|\n|\r|t/g,""))},selectedHtml:function(){var e=this.isCreated?this.cmd.range.html():"";return e=_removeBookmarkTag(_removeTempTag(e))},count:function(e){var t=this;return e=(e||"html").toLowerCase(),"html"===e?t.html().length:"text"===e?t.text().replace(/<(?:img|embed).*?>/gi,"K").replace(/\r\n|\n|\r/g,"").length:0},exec:function(e){e=e.toLowerCase();var t=this,n=t.cmd,i=_inArray(e,"selectall,copy,paste,print".split(","))<0;return i&&t.addBookmark(!1),n[e].apply(n,_toArray(arguments,1)),i&&(t.updateState(),t.addBookmark(!1),t.options.afterChange&&t.options.afterChange.call(t)),t},insertHtml:function(e,t){return this.isCreated?(e=this.beforeSetHtml(e),this.exec("inserthtml",e,t),this):this},appendHtml:function(e){if(this.html(this.html()+e),this.isCreated){var t=this.cmd;t.range.selectNodeContents(t.doc.body).collapse(!1),t.select()}return this},sync:function(){return _elementVal(this.srcElement,this.html()),this},focus:function(){return this.isCreated?this.edit.focus():this.srcElement[0].focus(),this},blur:function(){return this.isCreated?this.edit.blur():this.srcElement[0].blur(),this},addBookmark:function(e){e=_undef(e,!0);var t,n=this,i=n.edit,a=i.doc.body,o=_removeTempTag(a.innerHTML);if(e&&n._undoStack.length>0){var r=n._undoStack[n._undoStack.length-1];if(Math.abs(o.length-_removeBookmarkTag(r.html).length)0){var n=t.dialogs[0],i=t.dialogs[t.dialogs.length-1];n.setMaskIndex(i.z+2),e.z=i.z+3,e.showMask=!1}var a=_dialog(e);return t.dialogs.push(a),a},hideDialog:function(){var e=this;if(e.dialogs.length>0&&e.dialogs.pop().remove(),e.dialogs.length>0){var t=e.dialogs[0],n=e.dialogs[e.dialogs.length-1];t.setMaskIndex(n.z-1)}return e},errorDialog:function(e){var t=this,n=t.createDialog({width:750,title:t.lang("uploadError"),body:'
          '}),i=K("iframe",n.div),a=K.iframeDoc(i);return a.open(),a.write(e),a.close(),K(a.body).css("background-color","#FFF"),i[0].contentWindow.focus(),t}},_instances=[],K.remove=function(e){_eachEditor(e,function(e){this.remove(),_instances.splice(e,1)})},K.sync=function(e){_eachEditor(e,function(){this.sync()})},K.html=function(e,t){_eachEditor(e,function(){this.html(t)})},K.insertHtml=function(e,t){_eachEditor(e,function(){this.insertHtml(t)})},K.appendHtml=function(e,t){_eachEditor(e,function(){this.appendHtml(t)})},_IE&&_V<7&&_nativeCommand(document,"BackgroundImageCache",!0),K.EditorClass=KEditor,K.editor=_editor,K.create=_create,K.instances=_instances,K.plugin=_plugin,K.lang=_lang,_plugin("core",function(e){var t=this,n={undo:"Z",redo:"Y",bold:"B",italic:"I",underline:"U",print:"P",selectall:"A"};if(t.afterSetHtml(function(){t.options.afterChange&&t.options.afterChange.call(t)}),t.afterCreate(function(){if("form"==t.syncType){for(var n=e(t.srcElement),i=!1;n=n.parent();)if("form"==n.name){i=!0;break}if(i){n.bind("submit",function(n){t.sync(),e(window).bind("unload",function(){t.edit.textarea.remove()})});var a=e('[type="reset"]',n);a.click(function(){t.html(t.initContent),t.cmd.selection()}),t.beforeRemove(function(){n.unbind(),a.unbind()})}}}),t.clickToolbar("source",function(){t.edit.designMode?(t.toolbar.disableAll(!0),t.edit.design(!1),t.toolbar.select("source")):(t.toolbar.disableAll(!1),t.edit.design(!0),t.toolbar.unselect("source"),_GECKO?setTimeout(function(){t.cmd.selection()},0):t.cmd.selection()),t.designMode=t.edit.designMode}),t.afterCreate(function(){t.designMode||t.toolbar.disableAll(!0).select("source")}),t.clickToolbar("fullscreen",function(){t.fullscreen()}),t.fullscreenShortcut){var i=!1;t.afterCreate(function(){if(e(t.edit.doc,t.edit.textarea).keyup(function(e){27==e.which&&setTimeout(function(){t.fullscreen()},0)}),i){if(_IE&&!t.designMode)return;t.focus()}i||(i=!0)})}_each("undo,redo".split(","),function(e,i){n[i]&&t.afterCreate(function(){_ctrl(this.edit.doc,n[i],function(){t.clickToolbar(i)})}),t.clickToolbar(i,function(){t[i]()})}),t.clickToolbar("formatblock",function(){var e=t.lang("formatblock.formatBlock"),n={h1:28,h2:24,h3:18,H4:14,p:12},i=t.cmd.val("formatblock"),a=t.createMenu({name:"formatblock",width:"en"==t.langType?200:150});_each(e,function(e,o){var r="font-size:"+n[e]+"px;";"h"===e.charAt(0)&&(r+="font-weight:bold;"),a.addItem({title:''+o+"",height:n[e]+12,checked:i===e||i===o,click:function(){t.select().exec("formatblock","<"+e+">").hideMenu()}})})}),t.clickToolbar("fontname",function(){var e=t.cmd.val("fontname"),n=t.createMenu({name:"fontname",width:150});_each(t.lang("fontname.fontName"),function(i,a){n.addItem({title:''+a+"",checked:e===i.toLowerCase()||e===a.toLowerCase(),click:function(){t.exec("fontname",i).hideMenu()}})})}),t.clickToolbar("fontsize",function(){var e=t.cmd.val("fontsize"),n=t.createMenu({name:"fontsize",width:150});_each(t.fontSizeTable,function(i,a){n.addItem({title:''+a+"",height:_removeUnit(a)+12,checked:e===a,click:function(){t.exec("fontsize",a).hideMenu()}})})}),_each("forecolor,hilitecolor".split(","),function(e,n){t.clickToolbar(n,function(){t.createMenu({name:n,selectedColor:t.cmd.val(n)||"default",colors:t.colorTable,click:function(e){t.exec(n,e).hideMenu()}})})}),_each("cut,copy,paste".split(","),function(e,n){t.clickToolbar(n,function(){t.focus();try{t.exec(n,null)}catch(e){alert(t.lang(n+"Error"))}})}),t.clickToolbar("about",function(){var e='
          KindEditor '+_VERSION+'
          Copyright © kindsoft.net All rights reserved.
          ';t.createDialog({name:"about",width:350,title:t.lang("about"),body:e})}),t.plugin.getSelectedLink=function(){return t.cmd.commonAncestor("a")},t.plugin.getSelectedImage=function(){return _getImageFromRange(t.edit.cmd.range,function(e){return!/^ke-\w+$/i.test(e[0].className)})},t.plugin.getSelectedFlash=function(){return _getImageFromRange(t.edit.cmd.range,function(e){return"ke-flash"==e[0].className})},t.plugin.getSelectedMedia=function(){return _getImageFromRange(t.edit.cmd.range,function(e){return"ke-media"==e[0].className||"ke-rm"==e[0].className})},t.plugin.getSelectedAnchor=function(){return _getImageFromRange(t.edit.cmd.range,function(e){return"ke-anchor"==e[0].className})},_each("link,image,flash,media,anchor".split(","),function(e,n){var i=n.charAt(0).toUpperCase()+n.substr(1);_each("edit,delete".split(","),function(e,a){t.addContextmenu({title:t.lang(a+i),click:function(){t.loadPlugin(n,function(){t.plugin[n][a](),t.hideMenu()})},cond:t.plugin["getSelected"+i],width:150,iconClass:"edit"==a?"ke-icon-"+n:undefined})}),t.addContextmenu({title:"-"})}),t.plugin.getSelectedTable=function(){return t.cmd.commonAncestor("table")},t.plugin.getSelectedRow=function(){return t.cmd.commonAncestor("tr")},t.plugin.getSelectedCell=function(){return t.cmd.commonAncestor("td")||t.cmd.commonAncestor("th")},_each("prop,cellprop,colinsertleft,colinsertright,rowinsertabove,rowinsertbelow,rowmerge,colmerge,rowsplit,colsplit,coldelete,rowdelete,delete".split(","),function(e,n){ -var i=_inArray(n,["prop","delete"])<0?t.plugin.getSelectedCell:t.plugin.getSelectedTable;t.addContextmenu({title:t.lang("table"+n),click:function(){t.loadPlugin("table",function(){t.plugin.table[n](),t.hideMenu()})},cond:i,width:170,iconClass:"ke-icon-table"+n})}),t.addContextmenu({title:"-"}),_each("selectall,justifyleft,justifycenter,justifyright,justifyfull,insertorderedlist,insertunorderedlist,indent,outdent,subscript,superscript,hr,print,bold,italic,underline,strikethrough,removeformat,unlink".split(","),function(e,i){n[i]&&t.afterCreate(function(){_ctrl(this.edit.doc,n[i],function(){t.cmd.selection(),t.clickToolbar(i)})}),t.clickToolbar(i,function(){t.focus().exec(i,null)})}),t.afterCreate(function(){function n(){i.range.moveToBookmark(a),i.select(),_WEBKIT&&(e("div."+l,o).each(function(){e(this).after("
          ").remove(!0)}),e("span.Apple-style-span",o).remove(!0),e("span.Apple-tab-span",o).remove(!0),e("span[style]",o).each(function(){"nowrap"==e(this).css("white-space")&&e(this).remove(!0)}),e("meta",o).remove());var n=o[0].innerHTML;o.remove(),""!==n&&(_WEBKIT&&(n=n.replace(/(
          )\1/gi,"$1")),2===t.pasteType&&(n=n.replace(/(<(?:p|p\s[^>]*)>) *(<\/p>)/gi,""),/schemas-microsoft-com|worddocument|mso-\w+/i.test(n)?n=_clearMsWord(n,t.filterMode?t.htmlTags:e.options.htmlTags):(n=_formatHtml(n,t.filterMode?t.htmlTags:null),n=t.beforeSetHtml(n))),1===t.pasteType&&(n=n.replace(/ /gi," "),n=n.replace(/\n\s*\n/g,"\n"),n=n.replace(/]*>/gi,"\n"),n=n.replace(/<\/p>]*>/gi,"\n"),n=n.replace(/<[^>]+>/g,""),n=n.replace(/ {2}/g,"  "),"p"==t.newlineTag?/\n/.test(n)&&(n=n.replace(/^/,"

          ").replace(/$/,"

          ").replace(/\n/g,"

          ")):n=n.replace(/\n/g,"
          $&")),t.insertHtml(n,!0))}var i,a,o,r=t.edit.doc,l="__kindeditor_paste__",s=!1;e(r.body).bind("paste",function(d){if(0===t.pasteType)return void d.stop();if(!s){if(s=!0,e("div."+l,r).remove(),i=t.cmd.selection(),a=i.range.createBookmark(),o=e('

          ',r).css({position:"absolute",width:"1px",height:"1px",overflow:"hidden",left:"-1981px",top:e(a.start).pos().y+"px","white-space":"nowrap"}),e(r.body).append(o),_IE){var c=i.range.get(!0);c.moveToElementText(o[0]),c.select(),c.execCommand("paste"),d.preventDefault()}else i.range.selectNodeContents(o[0]),i.select();setTimeout(function(){n(),s=!1},0)}})}),t.beforeGetHtml(function(e){return _IE&&_V<=8&&(e=e.replace(/]*data-ke-input-tag="([^"]*)"[^>]*>([\s\S]*?)<\/div>/gi,function(e,t){return unescape(t)}),e=e.replace(/(]*)?>)/gi,function(e,t,n){return/\s+type="[^"]+"/i.test(e)?e:t+' type="text"'+n})),e.replace(/(<(?:noscript|noscript\s[^>]*)>)([\s\S]*?)(<\/noscript>)/gi,function(e,t,n,i){return t+_unescape(n).replace(/\s+/g," ")+i}).replace(/]*class="?ke-(flash|rm|media)"?[^>]*>/gi,function(e){var t=_getAttrList(e),n=_getCssList(t.style||""),i=_mediaAttrs(t["data-ke-tag"]),a=_undef(n.width,""),o=_undef(n.height,"");return/px/i.test(a)&&(a=_removeUnit(a)),/px/i.test(o)&&(o=_removeUnit(o)),i.width=_undef(t.width,a),i.height=_undef(t.height,o),_mediaEmbed(i)}).replace(/]*class="?ke-anchor"?[^>]*>/gi,function(e){var t=_getAttrList(e);return''}).replace(/]*data-ke-script-attr="([^"]*)"[^>]*>([\s\S]*?)<\/div>/gi,function(e,t,n){return""+unescape(n)+""}).replace(/]*data-ke-noscript-attr="([^"]*)"[^>]*>([\s\S]*?)<\/div>/gi,function(e,t,n){return""+unescape(n)+""}).replace(/(<[^>]*)data-ke-src="([^"]*)"([^>]*>)/gi,function(e,t,n,i){return e=e.replace(/(\s+(?:href|src)=")[^"]*(")/i,function(e,t,i){return t+_unescape(n)+i}),e=e.replace(/\s+data-ke-src="[^"]*"/i,"")}).replace(/(<[^>]+\s)data-ke-(on\w+="[^"]*"[^>]*>)/gi,function(e,t,n){return t+n})}),t.beforeSetHtml(function(e){return _IE&&_V<=8&&(e=e.replace(/]*>|<(select|button)[^>]*>[\s\S]*?<\/\1>/gi,function(e){var t=_getAttrList(e),n=_getCssList(t.style||"");return"none"==n.display?'
          ':e})),e.replace(/]*type="([^"]+)"[^>]*>(?:<\/embed>)?/gi,function(e){var n=_getAttrList(e);return n.src=_undef(n.src,""),n.width=_undef(n.width,0),n.height=_undef(n.height,0),_mediaImg(t.themesPath+"common/blank.gif",n)}).replace(/]*name="([^"]+)"[^>]*>(?:<\/a>)?/gi,function(e){var n=_getAttrList(e);return n.href!==undefined?e:''}).replace(/]*)>([\s\S]*?)<\/script>/gi,function(e,t,n){return'
          '+escape(n)+"
          "}).replace(/]*)>([\s\S]*?)<\/noscript>/gi,function(e,t,n){return'
          '+escape(n)+"
          "}).replace(/(<[^>]*)(href|src)="([^"]*)"([^>]*>)/gi,function(e,t,n,i,a){return e.match(/\sdata-ke-src="[^"]*"/i)?e:e=t+n+'="'+i+'" data-ke-src="'+_escape(i)+'"'+a}).replace(/(<[^>]+\s)(on\w+="[^"]*"[^>]*>)/gi,function(e,t,n){return t+"data-ke-"+n}).replace(/]*\s+border="0"[^>]*>/gi,function(e){return e.indexOf("ke-zeroborder")>=0?e:_addClassToTag(e,"ke-zeroborder")})})})}}(window),KindEditor.lang({source:"HTML代码",preview:"预览",undo:"后退(Ctrl+Z)",redo:"前进(Ctrl+Y)",cut:"剪切(Ctrl+X)",copy:"复制(Ctrl+C)",paste:"粘贴(Ctrl+V)",plainpaste:"粘贴为无格式文本",wordpaste:"从Word粘贴",selectall:"全选(Ctrl+A)",justifyleft:"左对齐",justifycenter:"居中",justifyright:"右对齐",justifyfull:"两端对齐",insertorderedlist:"编号",insertunorderedlist:"项目符号",indent:"增加缩进",outdent:"减少缩进",subscript:"下标",superscript:"上标",formatblock:"段落",fontname:"字体",fontsize:"文字大小",forecolor:"文字颜色",hilitecolor:"文字背景",bold:"粗体(Ctrl+B)",italic:"斜体(Ctrl+I)",underline:"下划线(Ctrl+U)",strikethrough:"删除线",removeformat:"删除格式",image:"图片",multiimage:"批量图片上传",flash:"Flash",media:"视音频",table:"表格",tablecell:"单元格",hr:"插入横线",emoticons:"插入表情",link:"超级链接",unlink:"取消超级链接",fullscreen:"全屏显示",about:"关于",print:"打印(Ctrl+P)",filemanager:"文件空间",code:"插入程序代码",map:"Google地图",baidumap:"百度地图",lineheight:"行距",clearhtml:"清理HTML代码",pagebreak:"插入分页符",quickformat:"一键排版",insertfile:"插入文件",template:"插入模板",anchor:"锚点",yes:"确定",no:"取消",close:"关闭",editImage:"图片属性",deleteImage:"删除图片",editFlash:"Flash属性",deleteFlash:"删除Flash",editMedia:"视音频属性",deleteMedia:"删除视音频",editLink:"超级链接属性",deleteLink:"取消超级链接",editAnchor:"锚点属性",deleteAnchor:"删除锚点",tableprop:"表格属性",tablecellprop:"单元格属性",tableinsert:"插入表格",tabledelete:"删除表格",tablecolinsertleft:"左侧插入列",tablecolinsertright:"右侧插入列",tablerowinsertabove:"上方插入行",tablerowinsertbelow:"下方插入行",tablerowmerge:"向下合并单元格",tablecolmerge:"向右合并单元格",tablerowsplit:"拆分行",tablecolsplit:"拆分列",tablecoldelete:"删除列",tablerowdelete:"删除行",noColor:"无颜色",pleaseSelectFile:"请选择文件。",invalidImg:"请输入有效的URL地址。\n只允许jpg,gif,bmp,png格式。",invalidMedia:"请输入有效的URL地址。\n只允许swf,flv,mp3,wav,wma,wmv,mid,avi,mpg,asf,rm,rmvb格式。",invalidWidth:"宽度必须为数字。",invalidHeight:"高度必须为数字。",invalidBorder:"边框必须为数字。",invalidUrl:"请输入有效的URL地址。",invalidRows:"行数为必选项,只允许输入大于0的数字。",invalidCols:"列数为必选项,只允许输入大于0的数字。",invalidPadding:"边距必须为数字。",invalidSpacing:"间距必须为数字。",invalidJson:"服务器发生故障。",uploadSuccess:"上传成功。",cutError:"您的浏览器安全设置不允许使用剪切操作,请使用快捷键(Ctrl+X)来完成。",copyError:"您的浏览器安全设置不允许使用复制操作,请使用快捷键(Ctrl+C)来完成。",pasteError:"您的浏览器安全设置不允许使用粘贴操作,请使用快捷键(Ctrl+V)来完成。",ajaxLoading:"加载中,请稍候 ...",uploadLoading:"上传中,请稍候 ...",uploadError:"上传错误","plainpaste.comment":"请使用快捷键(Ctrl+V)把内容粘贴到下面的方框里。","wordpaste.comment":"请使用快捷键(Ctrl+V)把内容粘贴到下面的方框里。","code.pleaseInput":"请输入程序代码。","link.url":"URL","link.linkType":"打开类型","link.newWindow":"新窗口","link.selfWindow":"当前窗口","flash.url":"URL","flash.width":"宽度","flash.height":"高度","flash.upload":"上传","flash.viewServer":"文件空间","media.url":"URL","media.width":"宽度","media.height":"高度","media.autostart":"自动播放","media.upload":"上传","media.viewServer":"文件空间","image.remoteImage":"网络图片","image.localImage":"本地上传","image.remoteUrl":"图片地址","image.localUrl":"上传文件","image.size":"图片大小","image.width":"宽","image.height":"高","image.resetSize":"重置大小","image.align":"对齐方式","image.defaultAlign":"默认方式","image.leftAlign":"左对齐","image.rightAlign":"右对齐","image.imgTitle":"图片说明","image.upload":"浏览...","image.viewServer":"图片空间","multiimage.uploadDesc":"允许用户同时上传<%=uploadLimit%>张图片,单张图片容量不超过<%=sizeLimit%>","multiimage.startUpload":"开始上传","multiimage.clearAll":"全部清空","multiimage.insertAll":"全部插入","multiimage.queueLimitExceeded":"文件数量超过限制。","multiimage.fileExceedsSizeLimit":"文件大小超过限制。","multiimage.zeroByteFile":"无法上传空文件。","multiimage.invalidFiletype":"文件类型不正确。","multiimage.unknownError":"发生异常,无法上传。","multiimage.pending":"等待上传","multiimage.uploadError":"上传失败","filemanager.emptyFolder":"空文件夹","filemanager.moveup":"移到上一级文件夹","filemanager.viewType":"显示方式:","filemanager.viewImage":"缩略图","filemanager.listImage":"详细信息","filemanager.orderType":"排序方式:","filemanager.fileName":"名称","filemanager.fileSize":"大小","filemanager.fileType":"类型","insertfile.url":"URL","insertfile.title":"文件说明","insertfile.upload":"上传","insertfile.viewServer":"文件空间","table.cells":"单元格数","table.rows":"行数","table.cols":"列数","table.size":"大小","table.width":"宽度","table.height":"高度","table.percent":"%","table.px":"px","table.space":"边距间距","table.padding":"边距","table.spacing":"间距","table.align":"对齐方式","table.textAlign":"水平对齐","table.verticalAlign":"垂直对齐","table.alignDefault":"默认","table.alignLeft":"左对齐","table.alignCenter":"居中","table.alignRight":"右对齐","table.alignTop":"顶部","table.alignMiddle":"中部","table.alignBottom":"底部","table.alignBaseline":"基线","table.border":"边框","table.borderWidth":"边框","table.borderColor":"颜色","table.backgroundColor":"背景颜色","map.address":"地址: ","map.search":"搜索","baidumap.address":"地址: ","baidumap.search":"搜索","baidumap.insertDynamicMap":"插入动态地图","anchor.name":"锚点名称","formatblock.formatBlock":{h1:"标题 1",h2:"标题 2",h3:"标题 3",h4:"标题 4",p:"正 文"},"fontname.fontName":{SimSun:"宋体",NSimSun:"新宋体",FangSong_GB2312:"仿宋_GB2312",KaiTi_GB2312:"楷体_GB2312",SimHei:"黑体","Microsoft YaHei":"微软雅黑",Arial:"Arial","Arial Black":"Arial Black","Times New Roman":"Times New Roman","Courier New":"Courier New",Tahoma:"Tahoma",Verdana:"Verdana"},"lineheight.lineHeight":[{1:"单倍行距"},{1.5:"1.5倍行距"},{2:"2倍行距"},{2.5:"2.5倍行距"},{3:"3倍行距"}],"template.selectTemplate":"可选模板","template.replaceContent":"替换当前内容","template.fileList":{"1.html":"图片和文字","2.html":"表格","3.html":"项目编号"}},"zh_CN"),KindEditor.plugin("anchor",function(e){var t=this,n="anchor",i=t.lang(n+".");t.plugin.anchor={edit:function(){var a=['
          ','
          ','",'',"
          ","
          "].join(""),o=t.createDialog({name:n,width:300,title:t.lang(n),body:a,yesBtn:{name:t.lang("yes"),click:function(e){t.insertHtml('').hideDialog().focus()}}}),r=o.div,l=e('input[name="name"]',r),s=t.plugin.getSelectedAnchor();s&&l.val(unescape(s.attr("data-ke-name"))),l[0].focus(),l[0].select()},"delete":function(){t.plugin.getSelectedAnchor().remove()}},t.clickToolbar(n,t.plugin.anchor.edit)}),KindEditor.plugin("autoheight",function(e){function t(){i.iframe.height(o),n.resize(null,Math.max((e.IE?a.scrollHeight:a.offsetHeight)+76,o))}var n=this;if(n.autoHeightMode){var i=n.edit,a=i.doc.body,o=e.removeUnit(n.height);i.iframe[0].scroll="no",a.style.overflowY="hidden",i.afterChange(t),n.isCreated?t():n.afterCreate(t)}}),KindEditor.plugin("baidumap",function(e){var t=this,n="baidumap",i=t.lang(n+"."),a=e.undef(t.mapWidth,558),o=e.undef(t.mapHeight,360);t.clickToolbar(n,function(){function r(){l=m[0].contentWindow,s=e.iframeDoc(m)}var l,s,d=['
          ','
          ','
          ',i.address+' ','','',"","
          ",'
          ',' ","
          ",'
          ',"
          ",'
          ',"
          "].join(""),c=t.createDialog({name:n,width:a+42,title:t.lang(n),body:d,yesBtn:{name:t.lang("yes"),click:function(e){var n=l.map,i=n.getCenter(),r=i.lng+","+i.lat,s=n.getZoom(),d=[f[0].checked?t.pluginsPath+"baidumap/index.html":"http://api.map.baidu.com/staticimage","?center="+encodeURIComponent(r),"&zoom="+encodeURIComponent(s),"&width="+a,"&height="+o,"&markers="+encodeURIComponent(r),"&markerStyles="+encodeURIComponent("l,A")].join("");f[0].checked?t.insertHtml(''):t.exec("insertimage",d),t.hideDialog().focus()}},beforeRemove:function(){h.remove(),s&&s.write(""),m.remove()}}),u=c.div,p=e('[name="address"]',u),h=e('[name="searchBtn"]',u),f=e('[name="insertDynamicMap"]',c.div),m=e('');m.bind("load",function(){m.unbind("load"),e.IE?r():setTimeout(r,0)}),e(".ke-map",u).replaceWith(m),h.click(function(){l.search(p.val())})})}),KindEditor.plugin("clearhtml",function(e){var t=this,n="clearhtml";t.clickToolbar(n,function(){t.focus();var n=t.html();n=n.replace(/(]*>)([\s\S]*?)(<\/script>)/gi,""),n=n.replace(/(]*>)([\s\S]*?)(<\/style>)/gi,""),n=e.formatHtml(n,{a:["href","target"],embed:["src","width","height","type","loop","autostart","quality",".width",".height","align","allowscriptaccess"],img:["src","width","height","border","alt","title",".width",".height"],table:["border"],"td,th":["rowspan","colspan"],"div,hr,br,tbody,tr,p,ol,ul,li,blockquote,h1,h2,h3,h4,h5,h6":[]}),t.html(n),t.cmd.selection(!0),t.addBookmark()})}),KindEditor.plugin("code",function(e){var t=this,n="code";t.clickToolbar(n,function(){var i=t.lang(n+"."),a=['
          ','
          ','","
          ",'',"
          "].join(""),o=t.createDialog({name:n,width:450,title:t.lang(n),body:a,yesBtn:{name:t.lang("yes"),click:function(n){var a=e(".ke-code-type",o.div).val(),l=r.val(),s=""===a?"":" lang-"+a,d='
          \n'+e.escape(l)+"
          ";return""===e.trim(l)?(alert(i.pleaseInput),void r[0].focus()):void t.insertHtml(d).hideDialog().focus()}}}),r=e("textarea",o.div);r[0].focus()})}),KindEditor.plugin("emoticons",function(e){var t=this,n="emoticons",i=t.emoticonsPath||t.pluginsPath+"emoticons/images/",a=void 0===t.allowPreviewEmoticons||t.allowPreviewEmoticons,o=1;t.clickToolbar(n,function(){function r(n,a,o){k?n.mouseover(function(){a>v?(k.css("left",0),k.css("right","")):(k.css("left",""),k.css("right",0)),w.attr("src",i+o+".gif"),e(this).addClass("ke-on")}):n.mouseover(function(){e(this).addClass("ke-on")}),n.mouseout(function(){e(this).removeClass("ke-on")}),n.click(function(e){t.insertHtml('').hideMenu().focus(),e.stop()})}function l(t,n){var a=document.createElement("table");n.append(a),k&&(e(a).mouseover(function(){k.show("block")}),e(a).mouseout(function(){k.hide()}),b.push(e(a))),a.className="ke-table",a.cellPadding=0,a.cellSpacing=0,a.border=0;for(var o=(t-1)*m+f,l=0;l
          ').css("background-position","-"+24*o+"px 0px").css("background-image","url("+i+"static.gif)");c.append(h),b.push(c),o++}return a}function s(){e.each(b,function(){this.unbind()})}function d(e,t){e.click(function(e){s(),C.parentNode.removeChild(C),S.remove(),C=l(t,_),c(t),o=t,e.stop()})}function c(t){S=e('
          '),_.append(S);for(var n=1;n<=g;n++){if(t!==n){var i=e('
          ['+n+"]");d(i,n),S.append(i),b.push(i)}else S.append(e("@["+n+"]"));S.append(e("@ "))}}var u=5,p=9,h=135,f=0,m=u*p,g=Math.ceil(h/m),v=Math.floor(p/2),_=e('
          '),b=[],y=t.createMenu({name:n,beforeRemove:function(){s()}});y.div.append(_);var k,w;a&&(k=e('
          ').css("right",0),w=e(''),_.append(k),k.append(w));var S,C=l(o,_);c(o)})}),KindEditor.plugin("filemanager",function(e){function t(e,t,n){return e+" ("+Math.ceil(t/1024)+"KB, "+n+")"}function n(e,n){n.is_dir?e.attr("title",n.filename):e.attr("title",t(n.filename,n.filesize,n.datetime))}var i=this,a="filemanager",o=e.undef(i.fileManagerJson,i.basePath+"php/file_manager_json.php"),r=i.pluginsPath+a+"/images/",l=i.lang(a+".");i.plugin.filemanagerDialog=function(t){function s(t,n,a){var r="path="+t+"&order="+n+"&dir="+m;b.showLoading(i.lang("ajaxLoading")),e.ajax(e.addParam(o,r+"&"+(new Date).getTime()),function(e){b.hideLoading(),a(e)})}function d(t,n,i,a){var o=e.formatUrl(n.current_url+i.filename,"absolute"),r=encodeURIComponent(n.current_dir_path+i.filename+"/");i.is_dir?t.click(function(e){s(r,C.val(),a)}):i.is_photo?t.click(function(e){v.call(this,o,i.filename)}):t.click(function(e){v.call(this,o,i.filename)}),E.push(t)}function c(t,n){function i(){"VIEW"==S.val()?s(t.current_dir_path,C.val(),p):s(t.current_dir_path,C.val(),u)}e.each(E,function(){this.unbind()}),w.unbind(),S.unbind(),C.unbind(),t.current_dir_path&&w.click(function(e){s(t.moveup_dir_path,C.val(),n)}),S.change(i),C.change(i),k.html("")}function u(t){c(t,u);var n=document.createElement("table");n.className="ke-table",n.cellPadding=0,n.cellSpacing=0,n.border=0,k.append(n);for(var i=t.file_list,a=0,o=i.length;a'),m=e(p[0].insertCell(0)).addClass("ke-cell ke-name").append(f).append(document.createTextNode(" "+s.filename));!s.is_dir||s.has_file?(p.css("cursor","pointer"),m.attr("title",s.filename),d(m,t,s,u)):m.attr("title",l.emptyFolder),e(p[0].insertCell(1)).addClass("ke-cell ke-size").html(s.is_dir?"-":Math.ceil(s.filesize/1024)+"KB"),e(p[0].insertCell(2)).addClass("ke-cell ke-datetime").html(s.datetime)}}function p(t){c(t,p);for(var i=t.file_list,a=0,o=i.length;a');k.append(u);var h=e('
          ').mouseover(function(t){e(this).addClass("ke-on")}).mouseout(function(t){e(this).removeClass("ke-on")});u.append(h);var f=t.current_url+s.filename,m=s.is_dir?r+"folder-64.gif":s.is_photo?f:r+"file-64.gif",g=e(''+s.filename+'');!s.is_dir||s.has_file?(h.css("cursor","pointer"),n(h,s),d(h,t,s,p)):h.attr("title",l.emptyFolder),h.append(g),u.append('
          '+s.filename+"
          ")}}var h=e.undef(t.width,650),f=e.undef(t.height,510),m=e.undef(t.dirName,""),g=e.undef(t.viewType,"VIEW").toUpperCase(),v=t.clickFn,_=['
          ','
          ','
          ',' ',''+l.moveup+"","
          ",'
          ',l.viewType+' ",l.orderType+' ","
          ",'
          ',"
          ",'
          ',"
          "].join(""),b=i.createDialog({name:a,width:h,height:f,title:i.lang(a),body:_}),y=b.div,k=e(".ke-plugin-filemanager-body",y),w=(e('[name="moveupImg"]',y),e('[name="moveupLink"]',y)),S=(e('[name="viewServer"]',y),e('[name="viewType"]',y)),C=e('[name="orderType"]',y),E=[];return S.val(g),s("",C.val(),"VIEW"==g?p:u),b}}),KindEditor.plugin("flash",function(e){var t=this,n="flash",i=t.lang(n+"."),a=e.undef(t.allowFlashUpload,!0),o=e.undef(t.allowFileManager,!1),r=e.undef(t.formatUploadUrl,!0),l=e.undef(t.extraFileUploadParams,{}),s=e.undef(t.filePostName,"imgFile"),d=e.undef(t.uploadJson,t.basePath+"php/upload_json.php");t.plugin.flash={edit:function(){var c=['
          ','
          ','",'  ','  ','','',"","
          ",'
          ','",' ',"
          ",'
          ','",' ',"
          ","
          "].join(""),u=t.createDialog({name:n,width:450,title:t.lang(n),body:c,yesBtn:{name:t.lang("yes"),click:function(n){var i=e.trim(h.val()),a=m.val(),o=g.val();if("http://"==i||e.invalidUrl(i))return alert(t.lang("invalidUrl")),void h[0].focus();if(!/^\d*$/.test(a))return alert(t.lang("invalidWidth")),void m[0].focus();if(!/^\d*$/.test(o))return alert(t.lang("invalidHeight")),void g[0].focus();var r=e.mediaImg(t.themesPath+"common/blank.gif",{src:i,type:e.mediaType(".swf"),width:a,height:o,quality:"high"});t.insertHtml(r).hideDialog().focus()}}}),p=u.div,h=e('[name="url"]',p),f=e('[name="viewServer"]',p),m=e('[name="width"]',p),g=e('[name="height"]',p);if(h.val("http://"),a){var v=e.uploadbutton({button:e(".ke-upload-button",p)[0],fieldName:s,extraParams:l,url:e.addParam(d,"dir=flash"),afterUpload:function(i){if(u.hideLoading(),0===i.error){var a=i.url;r&&(a=e.formatUrl(a,"absolute")),h.val(a),t.afterUpload&&t.afterUpload.call(t,a,i,n),alert(t.lang("uploadSuccess"))}else alert(i.message)},afterError:function(e){u.hideLoading(),t.errorDialog(e)}});v.fileBox.change(function(e){u.showLoading(t.lang("uploadLoading")),v.submit()})}else e(".ke-upload-button",p).hide();o?f.click(function(n){t.loadPlugin("filemanager",function(){t.plugin.filemanagerDialog({viewType:"LIST",dirName:"flash",clickFn:function(n,i){t.dialogs.length>1&&(e('[name="url"]',p).val(n),t.afterSelectFile&&t.afterSelectFile.call(t,n),t.hideDialog())}})})}):f.hide();var _=t.plugin.getSelectedFlash();if(_){var b=e.mediaAttrs(_.attr("data-ke-tag"));h.val(b.src),m.val(e.removeUnit(_.css("width"))||b.width||0),g.val(e.removeUnit(_.css("height"))||b.height||0)}h[0].focus(),h[0].select()},"delete":function(){t.plugin.getSelectedFlash().remove(),t.addBookmark()}},t.clickToolbar(n,t.plugin.flash.edit)}),KindEditor.plugin("image",function(e){var t=this,n="image",i=e.undef(t.allowImageUpload,!0),a=e.undef(t.allowImageRemote,!0),o=e.undef(t.formatUploadUrl,!0),r=e.undef(t.allowFileManager,!1),l=e.undef(t.uploadJson,t.basePath+"php/upload_json.php"),s=e.undef(t.imageTabIndex,0),d=t.pluginsPath+"image/images/",c=e.undef(t.extraFileUploadParams,{}),u=e.undef(t.filePostName,"imgFile"),p=e.undef(t.fillDescAfterUploadImage,!1),h=t.lang(n+".");t.plugin.imageDialog=function(i){function a(e,t){U.val(e),A.val(t),R=e,M=t}var s=(i.imageUrl,e.undef(i.imageWidth,""),e.undef(i.imageHeight,""),e.undef(i.imageTitle,""),e.undef(i.imageAlign,""),e.undef(i.showRemote,!0)),f=e.undef(i.showLocal,!0),m=e.undef(i.tabIndex,0),g=i.clickFn,v="kindeditor_upload_iframe_"+(new Date).getTime(),_=[];for(var b in c)_.push('');var y,k=['
          ','
          ','",'","
          "].join(""),w=f||r?450:400,S=f&&s?300:250,C=t.createDialog({name:n,width:w,height:S,title:t.lang(n),body:k,yesBtn:{name:t.lang("yes"),click:function(n){if(!C.isLoading){if(f&&s&&y&&1===y.selectedIndex||!s)return""==D.fileBox.val()?void alert(t.lang("pleaseSelectFile")):(C.showLoading(t.lang("uploadLoading")),D.submit(),void T.val(""));var i=e.trim(x.val()),a=U.val(),o=A.val(),r=N.val(),l="";return I.each(function(){if(this.checked)return l=this.value,!1}),"http://"==i||e.invalidUrl(i)?(alert(t.lang("invalidUrl")),void x[0].focus()):/^\d*$/.test(a)?/^\d*$/.test(o)?void g.call(t,i,r,a,o,0,l):(alert(t.lang("invalidHeight")),void A[0].focus()):(alert(t.lang("invalidWidth")),void U[0].focus())}}},beforeRemove:function(){K.unbind(),U.unbind(),A.unbind(),F.unbind()}}),E=C.div,x=e('[name="url"]',E),T=e('[name="localUrl"]',E),K=e('[name="viewServer"]',E),U=e('.tab1 [name="width"]',E),A=e('.tab1 [name="height"]',E),F=e(".ke-refresh-btn",E),N=e('.tab1 [name="title"]',E),I=e('.tab1 [name="align"]',E);s&&f?(y=e.tabs({src:e(".tabs",E),afterSelect:function(e){}}),y.add({title:h.remoteImage,panel:e(".tab1",E)}),y.add({title:h.localImage,panel:e(".tab2",E)}),y.select(m)):s?e(".tab1",E).show():f&&e(".tab2",E).show();var D=e.uploadbutton({button:e(".ke-upload-button",E)[0],fieldName:u,form:e(".ke-form",E),target:v,width:70,afterUpload:function(i){if(C.hideLoading(),0===i.error){var a=i.url;o&&(a=e.formatUrl(a,"absolute")),t.afterUpload&&t.afterUpload.call(t,a,i,n),p?(e(".ke-dialog-row #remoteUrl",E).val(a),e(".ke-tabs-li",E)[0].click(),e(".ke-refresh-btn",E).click()):g.call(t,a,i.title,i.width,i.height,i.border,i.align)}else alert(i.message)},afterError:function(e){C.hideLoading(),t.errorDialog(e)}});D.fileBox.change(function(e){T.val(D.fileBox.val())}),r?K.click(function(n){t.loadPlugin("filemanager",function(){t.plugin.filemanagerDialog({viewType:"VIEW",dirName:"image",clickFn:function(n,i){t.dialogs.length>1&&(e('[name="url"]',E).val(n),t.afterSelectFile&&t.afterSelectFile.call(t,n),t.hideDialog())}})})}):K.hide();var R=0,M=0;return F.click(function(t){var n=e('',document).css({position:"absolute",visibility:"hidden",top:0,left:"-1000px"});n.bind("load",function(){a(n.width(),n.height()),n.remove()}),e(document.body).append(n)}),U.change(function(e){R>0&&A.val(Math.round(M/R*parseInt(this.value,10)))}),A.change(function(e){M>0&&U.val(Math.round(R/M*parseInt(this.value,10)))}),x.val(i.imageUrl),a(i.imageWidth,i.imageHeight),N.val(i.imageTitle),I.each(function(){if(this.value===i.imageAlign)return this.checked=!0,!1}),s&&0===m&&(x[0].focus(),x[0].select()),C},t.plugin.image={edit:function(){var e=t.plugin.getSelectedImage();t.plugin.imageDialog({imageUrl:e?e.attr("data-ke-src"):"http://",imageWidth:e?e.width():"",imageHeight:e?e.height():"",imageTitle:e?e.attr("title"):"",imageAlign:e?e.attr("align"):"",showRemote:a,showLocal:i,tabIndex:e?0:s,clickFn:function(n,i,a,o,r,l){e?(e.attr("src",n),e.attr("data-ke-src",n),e.attr("width",a),e.attr("height",o),e.attr("title",i),e.attr("align",l),e.attr("alt",i)):t.exec("insertimage",n,i,a,o,r,l),setTimeout(function(){t.hideDialog().focus()},0)}})},"delete":function(){var e=t.plugin.getSelectedImage();"a"==e.parent().name&&(e=e.parent()),e.remove(),t.addBookmark()}},t.clickToolbar(n,t.plugin.image.edit)}),KindEditor.plugin("insertfile",function(e){var t=this,n="insertfile",i=e.undef(t.allowFileUpload,!0),a=e.undef(t.allowFileManager,!1),o=e.undef(t.formatUploadUrl,!0),r=e.undef(t.uploadJson,t.basePath+"php/upload_json.php"),l=e.undef(t.extraFileUploadParams,{}),s=e.undef(t.filePostName,"imgFile"),d=t.lang(n+".");t.plugin.fileDialog=function(c){var u=e.undef(c.fileUrl,"http://"),p=e.undef(c.fileTitle,""),h=c.clickFn,f=['
          ','
          ','",'  ','  ','','',"","
          ",'
          ','",'
          ',"
          ","",""].join(""),m=t.createDialog({name:n,width:450,title:t.lang(n),body:f,yesBtn:{name:t.lang("yes"),click:function(n){var i=e.trim(v.val()),a=b.val();return"http://"==i||e.invalidUrl(i)?(alert(t.lang("invalidUrl")),void v[0].focus()):(""===e.trim(a)&&(a=i),void h.call(t,i,a))}}}),g=m.div,v=e('[name="url"]',g),_=e('[name="viewServer"]',g),b=e('[name="title"]',g);if(i){ -var y=e.uploadbutton({button:e(".ke-upload-button",g)[0],fieldName:s,url:e.addParam(r,"dir=file"),extraParams:l,afterUpload:function(i){if(m.hideLoading(),0===i.error){var a=i.url;o&&(a=e.formatUrl(a,"absolute")),v.val(a),t.afterUpload&&t.afterUpload.call(t,a,i,n),alert(t.lang("uploadSuccess"))}else alert(i.message)},afterError:function(e){m.hideLoading(),t.errorDialog(e)}});y.fileBox.change(function(e){m.showLoading(t.lang("uploadLoading")),y.submit()})}else e(".ke-upload-button",g).hide();a?_.click(function(n){t.loadPlugin("filemanager",function(){t.plugin.filemanagerDialog({viewType:"LIST",dirName:"file",clickFn:function(n,i){t.dialogs.length>1&&(e('[name="url"]',g).val(n),t.afterSelectFile&&t.afterSelectFile.call(t,n),t.hideDialog())}})})}):_.hide(),v.val(u),b.val(p),v[0].focus(),v[0].select()},t.clickToolbar(n,function(){t.plugin.fileDialog({clickFn:function(e,n){var i=''+n+"";t.insertHtml(i).hideDialog().focus()}})})}),KindEditor.plugin("lineheight",function(e){var t=this,n="lineheight",i=t.lang(n+".");t.clickToolbar(n,function(){var a="",o=t.cmd.commonNode({"*":".line-height"});o&&(a=o.css("line-height"));var r=t.createMenu({name:n,width:150});e.each(i.lineHeight,function(n,i){e.each(i,function(e,n){r.addItem({title:n,checked:a===e,click:function(){t.cmd.toggle('',{span:".line-height="+e}),t.updateState(),t.addBookmark(),t.hideMenu()}})})})})}),KindEditor.plugin("link",function(e){var t=this,n="link";t.plugin.link={edit:function(){var i=t.lang(n+"."),a='
          ',o=t.createDialog({name:n,width:450,title:t.lang(n),body:a,yesBtn:{name:t.lang("yes"),click:function(n){var i=e.trim(l.val());return"http://"==i||e.invalidUrl(i)?(alert(t.lang("invalidUrl")),void l[0].focus()):void t.exec("createlink",i,s.val()).hideDialog().focus()}}}),r=o.div,l=e('input[name="url"]',r),s=e('select[name="type"]',r);l.val("http://"),s[0].options[0]=new Option(i.newWindow,"_blank"),s[0].options[1]=new Option(i.selfWindow,""),t.cmd.selection();var d=t.plugin.getSelectedLink();d&&(t.cmd.range.selectNode(d[0]),t.cmd.select(),l.val(d.attr("data-ke-src")),s.val(d.attr("target"))),l[0].focus(),l[0].select()},"delete":function(){t.exec("unlink",null)}},t.clickToolbar(n,t.plugin.link.edit)}),KindEditor.plugin("map",function(e){var t=this,n="map",i=t.lang(n+".");t.clickToolbar(n,function(){function a(){o=p[0].contentWindow,r=e.iframeDoc(p)}var o,r,l=['
          ','
          ',i.address+' ','','',"","
          ",'
          ',"
          "].join(""),s=t.createDialog({name:n,width:600,title:t.lang(n),body:l,yesBtn:{name:t.lang("yes"),click:function(e){var n=(o.geocoder,o.map),i=n.getCenter().lat()+","+n.getCenter().lng(),a=n.getZoom(),r=n.getMapTypeId(),l="http://maps.googleapis.com/maps/api/staticmap";l+="?center="+encodeURIComponent(i),l+="&zoom="+encodeURIComponent(a),l+="&size=558x360",l+="&maptype="+encodeURIComponent(r),l+="&markers="+encodeURIComponent(i),l+="&language="+t.langType,l+="&sensor=false",t.exec("insertimage",l).hideDialog().focus()}},beforeRemove:function(){u.remove(),r&&r.write(""),p.remove()}}),d=s.div,c=e('[name="address"]',d),u=e('[name="searchBtn"]',d),p=(["",'',"",'',"","",'','
          ',""].join("\n"),e(''));p.bind("load",function(){p.unbind("load"),e.IE?a():setTimeout(a,0)}),e(".ke-map",d).replaceWith(p),u.click(function(){o.search(c.val())})})}),KindEditor.plugin("media",function(e){var t=this,n="media",i=t.lang(n+"."),a=e.undef(t.allowMediaUpload,!0),o=e.undef(t.allowFileManager,!1),r=e.undef(t.formatUploadUrl,!0),l=e.undef(t.extraFileUploadParams,{}),s=e.undef(t.filePostName,"imgFile"),d=e.undef(t.uploadJson,t.basePath+"php/upload_json.php");t.plugin.media={edit:function(){var c=['
          ','
          ','",'  ','  ','','',"","
          ",'
          ','",'',"
          ",'
          ','",'',"
          ",'
          ','",' ',"
          ","
          "].join(""),u=t.createDialog({name:n,width:450,height:230,title:t.lang(n),body:c,yesBtn:{name:t.lang("yes"),click:function(n){var i=e.trim(h.val()),a=m.val(),o=g.val();if("http://"==i||e.invalidUrl(i))return alert(t.lang("invalidUrl")),void h[0].focus();if(!/^\d*$/.test(a))return alert(t.lang("invalidWidth")),void m[0].focus();if(!/^\d*$/.test(o))return alert(t.lang("invalidHeight")),void g[0].focus();var r=e.mediaImg(t.themesPath+"common/blank.gif",{src:i,type:e.mediaType(i),width:a,height:o,autostart:v[0].checked?"true":"false",loop:"true"});t.insertHtml(r).hideDialog().focus()}}}),p=u.div,h=e('[name="url"]',p),f=e('[name="viewServer"]',p),m=e('[name="width"]',p),g=e('[name="height"]',p),v=e('[name="autostart"]',p);if(h.val("http://"),a){var _=e.uploadbutton({button:e(".ke-upload-button",p)[0],fieldName:s,extraParams:l,url:e.addParam(d,"dir=media"),afterUpload:function(i){if(u.hideLoading(),0===i.error){var a=i.url;r&&(a=e.formatUrl(a,"absolute")),h.val(a),t.afterUpload&&t.afterUpload.call(t,a,i,n),alert(t.lang("uploadSuccess"))}else alert(i.message)},afterError:function(e){u.hideLoading(),t.errorDialog(e)}});_.fileBox.change(function(e){u.showLoading(t.lang("uploadLoading")),_.submit()})}else e(".ke-upload-button",p).hide();o?f.click(function(n){t.loadPlugin("filemanager",function(){t.plugin.filemanagerDialog({viewType:"LIST",dirName:"media",clickFn:function(n,i){t.dialogs.length>1&&(e('[name="url"]',p).val(n),t.afterSelectFile&&t.afterSelectFile.call(t,n),t.hideDialog())}})})}):f.hide();var b=t.plugin.getSelectedMedia();if(b){var y=e.mediaAttrs(b.attr("data-ke-tag"));h.val(y.src),m.val(e.removeUnit(b.css("width"))||y.width||0),g.val(e.removeUnit(b.css("height"))||y.height||0),v[0].checked="true"===y.autostart}h[0].focus(),h[0].select()},"delete":function(){t.plugin.getSelectedMedia().remove(),t.addBookmark()}},t.clickToolbar(n,t.plugin.media.edit)}),function(e){function t(e){this.init(e)}e.extend(t,{init:function(t){function n(t,n){e(".ke-status > div",t).hide(),e(".ke-message",t).addClass("ke-error").show().html(e.escape(n))}var i=this;t.afterError=t.afterError||function(e){alert(e)},i.options=t,i.progressbars={},i.div=e(t.container).html(['
          ','
          ','
          ','',"
          ",'
          '+t.uploadDesc+"
          ",'','',"","
          ",'
          ',"
          "].join("")),i.bodyDiv=e(".ke-swfupload-body",i.div);var a={debug:!1,upload_url:t.uploadUrl,flash_url:t.flashUrl,file_post_name:t.filePostName,button_placeholder:e(".ke-swfupload-button > input",i.div)[0],button_image_url:t.buttonImageUrl,button_width:t.buttonWidth,button_height:t.buttonHeight,button_cursor:SWFUpload.CURSOR.HAND,file_types:t.fileTypes,file_types_description:t.fileTypesDesc,file_upload_limit:t.fileUploadLimit,file_size_limit:t.fileSizeLimit,post_params:t.postParams,file_queued_handler:function(e){e.url=i.options.fileIconUrl,i.appendFile(e)},file_queue_error_handler:function(n,i,a){var o="";switch(i){case SWFUpload.QUEUE_ERROR.QUEUE_LIMIT_EXCEEDED:o=t.queueLimitExceeded;break;case SWFUpload.QUEUE_ERROR.FILE_EXCEEDS_SIZE_LIMIT:o=t.fileExceedsSizeLimit;break;case SWFUpload.QUEUE_ERROR.ZERO_BYTE_FILE:o=t.zeroByteFile;break;case SWFUpload.QUEUE_ERROR.INVALID_FILETYPE:o=t.invalidFiletype;break;default:o=t.unknownError}e.DEBUG&&alert(o)},upload_start_handler:function(t){var n=this,i=e('div[data-id="'+t.id+'"]',n.bodyDiv);e(".ke-status > div",i).hide(),e(".ke-progressbar",i).show()},upload_progress_handler:function(e,t,n){var a=Math.round(100*t/n),o=i.progressbars[e.id];o.bar.css("width",Math.round(80*a/100)+"px"),o.percent.html(a+"%")},upload_error_handler:function(t,a,o){if(t&&t.filestatus==SWFUpload.FILE_STATUS.ERROR){var r=e('div[data-id="'+t.id+'"]',i.bodyDiv).eq(0);n(r,i.options.errorMessage)}},upload_success_handler:function(t,a){var o=e('div[data-id="'+t.id+'"]',i.bodyDiv).eq(0),r={};try{r=e.json(a)}catch(l){i.options.afterError.call(this,""+a+"")}return 0!==r.error?void n(o,e.DEBUG?r.message:i.options.errorMessage):(t.url=r.url,e(".ke-img",o).attr("src",t.url).attr("data-status",t.filestatus).data("data",r),void e(".ke-status > div",o).hide())}};i.swfu=new SWFUpload(a),e(".ke-swfupload-startupload input",i.div).click(function(){i.swfu.startUpload()})},getUrlList:function(){var t=[];return e(".ke-img",self.bodyDiv).each(function(){var n=e(this),i=n.attr("data-status");i==SWFUpload.FILE_STATUS.COMPLETE&&t.push(n.data("data"))}),t},removeFile:function(t){var n=this;n.swfu.cancelUpload(t);var i=e('div[data-id="'+t+'"]',n.bodyDiv);e(".ke-photo",i).unbind(),e(".ke-delete",i).unbind(),i.remove()},removeFiles:function(){var t=this;e(".ke-item",t.bodyDiv).each(function(){t.removeFile(e(this).attr("data-id"))})},appendFile:function(t){var n=this,i=e('
          ');n.bodyDiv.append(i);var a=e('
          ').mouseover(function(t){e(this).addClass("ke-on")}).mouseout(function(t){e(this).removeClass("ke-on")});i.append(a);var o=e(''+t.name+'');a.append(o),e('').appendTo(a).click(function(){n.removeFile(t.id)});var r=e('
          ').appendTo(a);e(['
          ','
          ','
          0%
          '].join("")).hide().appendTo(r),e('
          '+n.options.pendingMessage+"
          ").appendTo(r),i.append('
          '+t.name+"
          "),n.progressbars[t.id]={bar:e(".ke-progressbar-bar-inner",a),percent:e(".ke-progressbar-percent",a)}},remove:function(){this.removeFiles(),this.swfu.destroy(),this.div.html("")}}),e.swfupload=function(e,n){return new t(e,n)}}(KindEditor),KindEditor.plugin("multiimage",function(e){var t=this,n="multiimage",i=(e.undef(t.formatUploadUrl,!0),e.undef(t.uploadJson,t.basePath+"php/upload_json.php")),a=t.pluginsPath+"multiimage/images/",o=e.undef(t.imageSizeLimit,"1MB"),r=(e.undef(t.imageFileTypes,"*.jpg;*.gif;*.png"),e.undef(t.imageUploadLimit,20)),l=e.undef(t.filePostName,"imgFile"),s=t.lang(n+".");t.plugin.multiImageDialog=function(d){var c=d.clickFn,u=e.tmpl(s.uploadDesc,{uploadLimit:r,sizeLimit:o}),p=['
          ','
          ',"
          ","
          "].join(""),h=t.createDialog({name:n,width:650,height:510,title:t.lang(n),body:p,previewBtn:{name:s.insertAll,click:function(e){c.call(t,m.getUrlList())}},yesBtn:{name:s.clearAll,click:function(e){m.removeFiles()}},beforeRemove:function(){(!e.IE||e.V<=8)&&m.remove()}}),f=h.div,m=e.swfupload({container:e(".swfupload",f),buttonImageUrl:a+("zh_CN"==t.langType?"select-files-zh_CN.png":"select-files-en.png"),buttonWidth:"zh_CN"==t.langType?72:88,buttonHeight:23,fileIconUrl:a+"image.png",uploadDesc:u,startButtonValue:s.startUpload,uploadUrl:e.addParam(i,"dir=image"),flashUrl:a+"swfupload.swf",filePostName:l,fileTypes:"*.jpg;*.jpeg;*.gif;*.png;*.bmp",fileTypesDesc:"Image Files",fileUploadLimit:r,fileSizeLimit:o,postParams:e.undef(t.extraFileUploadParams,{}),queueLimitExceeded:s.queueLimitExceeded,fileExceedsSizeLimit:s.fileExceedsSizeLimit,zeroByteFile:s.zeroByteFile,invalidFiletype:s.invalidFiletype,unknownError:s.unknownError,pendingMessage:s.pending,errorMessage:s.uploadError,afterError:function(e){t.errorDialog(e)}});return h},t.clickToolbar(n,function(){t.plugin.multiImageDialog({clickFn:function(n){0!==n.length&&(e.each(n,function(e,n){t.afterUpload&&t.afterUpload.call(t,n.url,n,"multiimage"),t.exec("insertimage",n.url,n.title,n.width,n.height,n.border,n.align)}),setTimeout(function(){t.hideDialog().focus()},0))}})})}),function(){window.SWFUpload=function(e){this.initSWFUpload(e)},SWFUpload.prototype.initSWFUpload=function(e){try{this.customSettings={},this.settings=e,this.eventQueue=[],this.movieName="KindEditor_SWFUpload_"+SWFUpload.movieCount++,this.movieElement=null,SWFUpload.instances[this.movieName]=this,this.initSettings(),this.loadFlash(),this.displayDebugInfo()}catch(t){throw delete SWFUpload.instances[this.movieName],t}},SWFUpload.instances={},SWFUpload.movieCount=0,SWFUpload.version="2.2.0 2009-03-25",SWFUpload.QUEUE_ERROR={QUEUE_LIMIT_EXCEEDED:-100,FILE_EXCEEDS_SIZE_LIMIT:-110,ZERO_BYTE_FILE:-120,INVALID_FILETYPE:-130},SWFUpload.UPLOAD_ERROR={HTTP_ERROR:-200,MISSING_UPLOAD_URL:-210,IO_ERROR:-220,SECURITY_ERROR:-230,UPLOAD_LIMIT_EXCEEDED:-240,UPLOAD_FAILED:-250,SPECIFIED_FILE_ID_NOT_FOUND:-260,FILE_VALIDATION_FAILED:-270,FILE_CANCELLED:-280,UPLOAD_STOPPED:-290},SWFUpload.FILE_STATUS={QUEUED:-1,IN_PROGRESS:-2,ERROR:-3,COMPLETE:-4,CANCELLED:-5},SWFUpload.BUTTON_ACTION={SELECT_FILE:-100,SELECT_FILES:-110,START_UPLOAD:-120},SWFUpload.CURSOR={ARROW:-1,HAND:-2},SWFUpload.WINDOW_MODE={WINDOW:"window",TRANSPARENT:"transparent",OPAQUE:"opaque"},SWFUpload.completeURL=function(e){if("string"!=typeof e||e.match(/^https?:\/\//i)||e.match(/^\//))return e;var t=(window.location.protocol+"//"+window.location.hostname+(window.location.port?":"+window.location.port:""),window.location.pathname.lastIndexOf("/"));return t<=0?path="/":path=window.location.pathname.substr(0,t)+"/",path+e},SWFUpload.prototype.initSettings=function(){this.ensureDefault=function(e,t){this.settings[e]=void 0==this.settings[e]?t:this.settings[e]},this.ensureDefault("upload_url",""),this.ensureDefault("preserve_relative_urls",!1),this.ensureDefault("file_post_name","Filedata"),this.ensureDefault("post_params",{}),this.ensureDefault("use_query_string",!1),this.ensureDefault("requeue_on_error",!1),this.ensureDefault("http_success",[]),this.ensureDefault("assume_success_timeout",0),this.ensureDefault("file_types","*.*"),this.ensureDefault("file_types_description","All Files"),this.ensureDefault("file_size_limit",0),this.ensureDefault("file_upload_limit",0),this.ensureDefault("file_queue_limit",0),this.ensureDefault("flash_url","swfupload.swf"),this.ensureDefault("prevent_swf_caching",!0),this.ensureDefault("button_image_url",""),this.ensureDefault("button_width",1),this.ensureDefault("button_height",1),this.ensureDefault("button_text",""),this.ensureDefault("button_text_style","color: #000000; font-size: 16pt;"),this.ensureDefault("button_text_top_padding",0),this.ensureDefault("button_text_left_padding",0),this.ensureDefault("button_action",SWFUpload.BUTTON_ACTION.SELECT_FILES),this.ensureDefault("button_disabled",!1),this.ensureDefault("button_placeholder_id",""),this.ensureDefault("button_placeholder",null),this.ensureDefault("button_cursor",SWFUpload.CURSOR.ARROW),this.ensureDefault("button_window_mode",SWFUpload.WINDOW_MODE.WINDOW),this.ensureDefault("debug",!1),this.settings.debug_enabled=this.settings.debug,this.settings.return_upload_start_handler=this.returnUploadStart,this.ensureDefault("swfupload_loaded_handler",null),this.ensureDefault("file_dialog_start_handler",null),this.ensureDefault("file_queued_handler",null),this.ensureDefault("file_queue_error_handler",null),this.ensureDefault("file_dialog_complete_handler",null),this.ensureDefault("upload_start_handler",null),this.ensureDefault("upload_progress_handler",null),this.ensureDefault("upload_error_handler",null),this.ensureDefault("upload_success_handler",null),this.ensureDefault("upload_complete_handler",null),this.ensureDefault("debug_handler",this.debugMessage),this.ensureDefault("custom_settings",{}),this.customSettings=this.settings.custom_settings,this.settings.prevent_swf_caching&&(this.settings.flash_url=this.settings.flash_url+(this.settings.flash_url.indexOf("?")<0?"?":"&")+"preventswfcaching="+(new Date).getTime()),this.settings.preserve_relative_urls||(this.settings.upload_url=SWFUpload.completeURL(this.settings.upload_url),this.settings.button_image_url=SWFUpload.completeURL(this.settings.button_image_url)),delete this.ensureDefault},SWFUpload.prototype.loadFlash=function(){var e,t;if(null!==document.getElementById(this.movieName))throw"ID "+this.movieName+" is already in use. The Flash Object could not be added";if(e=document.getElementById(this.settings.button_placeholder_id)||this.settings.button_placeholder,void 0==e)throw"Could not find the placeholder element: "+this.settings.button_placeholder_id;t=document.createElement("div"),t.innerHTML=this.getFlashHTML(),e.parentNode.replaceChild(t.firstChild,e),void 0==window[this.movieName]&&(window[this.movieName]=this.getMovieElement())},SWFUpload.prototype.getFlashHTML=function(){var e="";return KindEditor.IE&&KindEditor.V>8&&(e=' classid = "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"'),['','','','','','','',""].join("")},SWFUpload.prototype.getFlashVars=function(){var e=this.buildParamString(),t=this.settings.http_success.join(",");return["movieName=",encodeURIComponent(this.movieName),"&uploadURL=",encodeURIComponent(this.settings.upload_url),"&useQueryString=",encodeURIComponent(this.settings.use_query_string),"&requeueOnError=",encodeURIComponent(this.settings.requeue_on_error),"&httpSuccess=",encodeURIComponent(t),"&assumeSuccessTimeout=",encodeURIComponent(this.settings.assume_success_timeout),"&params=",encodeURIComponent(e),"&filePostName=",encodeURIComponent(this.settings.file_post_name),"&fileTypes=",encodeURIComponent(this.settings.file_types),"&fileTypesDescription=",encodeURIComponent(this.settings.file_types_description),"&fileSizeLimit=",encodeURIComponent(this.settings.file_size_limit),"&fileUploadLimit=",encodeURIComponent(this.settings.file_upload_limit),"&fileQueueLimit=",encodeURIComponent(this.settings.file_queue_limit),"&debugEnabled=",encodeURIComponent(this.settings.debug_enabled),"&buttonImageURL=",encodeURIComponent(this.settings.button_image_url),"&buttonWidth=",encodeURIComponent(this.settings.button_width),"&buttonHeight=",encodeURIComponent(this.settings.button_height),"&buttonText=",encodeURIComponent(this.settings.button_text),"&buttonTextTopPadding=",encodeURIComponent(this.settings.button_text_top_padding),"&buttonTextLeftPadding=",encodeURIComponent(this.settings.button_text_left_padding),"&buttonTextStyle=",encodeURIComponent(this.settings.button_text_style),"&buttonAction=",encodeURIComponent(this.settings.button_action),"&buttonDisabled=",encodeURIComponent(this.settings.button_disabled),"&buttonCursor=",encodeURIComponent(this.settings.button_cursor)].join("")},SWFUpload.prototype.getMovieElement=function(){if(void 0==this.movieElement&&(this.movieElement=document.getElementById(this.movieName)),null===this.movieElement)throw"Could not find Flash element";return this.movieElement},SWFUpload.prototype.buildParamString=function(){var e=this.settings.post_params,t=[];if("object"==typeof e)for(var n in e)e.hasOwnProperty(n)&&t.push(encodeURIComponent(n.toString())+"="+encodeURIComponent(e[n].toString()));return t.join("&")},SWFUpload.prototype.destroy=function(){try{this.cancelUpload(null,!1);var e=null;if(e=this.getMovieElement(),e&&"unknown"==typeof e.CallFunction){for(var t in e)try{"function"==typeof e[t]&&(e[t]=null)}catch(n){}try{e.parentNode.removeChild(e)}catch(i){}}return window[this.movieName]=null,SWFUpload.instances[this.movieName]=null,delete SWFUpload.instances[this.movieName],this.movieElement=null,this.settings=null,this.customSettings=null,this.eventQueue=null,this.movieName=null,!0}catch(a){return!1}},SWFUpload.prototype.displayDebugInfo=function(){this.debug(["---SWFUpload Instance Info---\n","Version: ",SWFUpload.version,"\n","Movie Name: ",this.movieName,"\n","Settings:\n","\t","upload_url: ",this.settings.upload_url,"\n","\t","flash_url: ",this.settings.flash_url,"\n","\t","use_query_string: ",this.settings.use_query_string.toString(),"\n","\t","requeue_on_error: ",this.settings.requeue_on_error.toString(),"\n","\t","http_success: ",this.settings.http_success.join(", "),"\n","\t","assume_success_timeout: ",this.settings.assume_success_timeout,"\n","\t","file_post_name: ",this.settings.file_post_name,"\n","\t","post_params: ",this.settings.post_params.toString(),"\n","\t","file_types: ",this.settings.file_types,"\n","\t","file_types_description: ",this.settings.file_types_description,"\n","\t","file_size_limit: ",this.settings.file_size_limit,"\n","\t","file_upload_limit: ",this.settings.file_upload_limit,"\n","\t","file_queue_limit: ",this.settings.file_queue_limit,"\n","\t","debug: ",this.settings.debug.toString(),"\n","\t","prevent_swf_caching: ",this.settings.prevent_swf_caching.toString(),"\n","\t","button_placeholder_id: ",this.settings.button_placeholder_id.toString(),"\n","\t","button_placeholder: ",this.settings.button_placeholder?"Set":"Not Set","\n","\t","button_image_url: ",this.settings.button_image_url.toString(),"\n","\t","button_width: ",this.settings.button_width.toString(),"\n","\t","button_height: ",this.settings.button_height.toString(),"\n","\t","button_text: ",this.settings.button_text.toString(),"\n","\t","button_text_style: ",this.settings.button_text_style.toString(),"\n","\t","button_text_top_padding: ",this.settings.button_text_top_padding.toString(),"\n","\t","button_text_left_padding: ",this.settings.button_text_left_padding.toString(),"\n","\t","button_action: ",this.settings.button_action.toString(),"\n","\t","button_disabled: ",this.settings.button_disabled.toString(),"\n","\t","custom_settings: ",this.settings.custom_settings.toString(),"\n","Event Handlers:\n","\t","swfupload_loaded_handler assigned: ",("function"==typeof this.settings.swfupload_loaded_handler).toString(),"\n","\t","file_dialog_start_handler assigned: ",("function"==typeof this.settings.file_dialog_start_handler).toString(),"\n","\t","file_queued_handler assigned: ",("function"==typeof this.settings.file_queued_handler).toString(),"\n","\t","file_queue_error_handler assigned: ",("function"==typeof this.settings.file_queue_error_handler).toString(),"\n","\t","upload_start_handler assigned: ",("function"==typeof this.settings.upload_start_handler).toString(),"\n","\t","upload_progress_handler assigned: ",("function"==typeof this.settings.upload_progress_handler).toString(),"\n","\t","upload_error_handler assigned: ",("function"==typeof this.settings.upload_error_handler).toString(),"\n","\t","upload_success_handler assigned: ",("function"==typeof this.settings.upload_success_handler).toString(),"\n","\t","upload_complete_handler assigned: ",("function"==typeof this.settings.upload_complete_handler).toString(),"\n","\t","debug_handler assigned: ",("function"==typeof this.settings.debug_handler).toString(),"\n"].join(""))},SWFUpload.prototype.addSetting=function(e,t,n){return void 0==t?this.settings[e]=n:this.settings[e]=t},SWFUpload.prototype.getSetting=function(e){return void 0!=this.settings[e]?this.settings[e]:""},SWFUpload.prototype.callFlash=function(functionName,argumentArray){argumentArray=argumentArray||[];var movieElement=this.getMovieElement(),returnValue,returnString;try{returnString=movieElement.CallFunction(''+__flash__argumentsToXML(argumentArray,0)+""),returnValue=eval(returnString)}catch(ex){throw"Call to "+functionName+" failed"}return void 0!=returnValue&&"object"==typeof returnValue.post&&(returnValue=this.unescapeFilePostParams(returnValue)),returnValue},SWFUpload.prototype.selectFile=function(){this.callFlash("SelectFile")},SWFUpload.prototype.selectFiles=function(){this.callFlash("SelectFiles")},SWFUpload.prototype.startUpload=function(e){this.callFlash("StartUpload",[e])},SWFUpload.prototype.cancelUpload=function(e,t){t!==!1&&(t=!0),this.callFlash("CancelUpload",[e,t])},SWFUpload.prototype.stopUpload=function(){this.callFlash("StopUpload")},SWFUpload.prototype.getStats=function(){return this.callFlash("GetStats")},SWFUpload.prototype.setStats=function(e){this.callFlash("SetStats",[e])},SWFUpload.prototype.getFile=function(e){return"number"==typeof e?this.callFlash("GetFileByIndex",[e]):this.callFlash("GetFile",[e])},SWFUpload.prototype.addFileParam=function(e,t,n){return this.callFlash("AddFileParam",[e,t,n])},SWFUpload.prototype.removeFileParam=function(e,t){this.callFlash("RemoveFileParam",[e,t])},SWFUpload.prototype.setUploadURL=function(e){this.settings.upload_url=e.toString(),this.callFlash("SetUploadURL",[e])},SWFUpload.prototype.setPostParams=function(e){this.settings.post_params=e,this.callFlash("SetPostParams",[e])},SWFUpload.prototype.addPostParam=function(e,t){this.settings.post_params[e]=t,this.callFlash("SetPostParams",[this.settings.post_params])},SWFUpload.prototype.removePostParam=function(e){delete this.settings.post_params[e],this.callFlash("SetPostParams",[this.settings.post_params])},SWFUpload.prototype.setFileTypes=function(e,t){this.settings.file_types=e,this.settings.file_types_description=t,this.callFlash("SetFileTypes",[e,t])},SWFUpload.prototype.setFileSizeLimit=function(e){this.settings.file_size_limit=e,this.callFlash("SetFileSizeLimit",[e])},SWFUpload.prototype.setFileUploadLimit=function(e){this.settings.file_upload_limit=e,this.callFlash("SetFileUploadLimit",[e])},SWFUpload.prototype.setFileQueueLimit=function(e){this.settings.file_queue_limit=e,this.callFlash("SetFileQueueLimit",[e])},SWFUpload.prototype.setFilePostName=function(e){this.settings.file_post_name=e,this.callFlash("SetFilePostName",[e])},SWFUpload.prototype.setUseQueryString=function(e){this.settings.use_query_string=e,this.callFlash("SetUseQueryString",[e])},SWFUpload.prototype.setRequeueOnError=function(e){this.settings.requeue_on_error=e,this.callFlash("SetRequeueOnError",[e])},SWFUpload.prototype.setHTTPSuccess=function(e){"string"==typeof e&&(e=e.replace(" ","").split(",")),this.settings.http_success=e,this.callFlash("SetHTTPSuccess",[e])},SWFUpload.prototype.setAssumeSuccessTimeout=function(e){this.settings.assume_success_timeout=e,this.callFlash("SetAssumeSuccessTimeout",[e])},SWFUpload.prototype.setDebugEnabled=function(e){this.settings.debug_enabled=e,this.callFlash("SetDebugEnabled",[e])},SWFUpload.prototype.setButtonImageURL=function(e){void 0==e&&(e=""),this.settings.button_image_url=e,this.callFlash("SetButtonImageURL",[e])},SWFUpload.prototype.setButtonDimensions=function(e,t){this.settings.button_width=e,this.settings.button_height=t;var n=this.getMovieElement();void 0!=n&&(n.style.width=e+"px",n.style.height=t+"px"),this.callFlash("SetButtonDimensions",[e,t])},SWFUpload.prototype.setButtonText=function(e){this.settings.button_text=e,this.callFlash("SetButtonText",[e])},SWFUpload.prototype.setButtonTextPadding=function(e,t){this.settings.button_text_top_padding=t,this.settings.button_text_left_padding=e,this.callFlash("SetButtonTextPadding",[e,t])},SWFUpload.prototype.setButtonTextStyle=function(e){this.settings.button_text_style=e,this.callFlash("SetButtonTextStyle",[e])},SWFUpload.prototype.setButtonDisabled=function(e){this.settings.button_disabled=e,this.callFlash("SetButtonDisabled",[e])},SWFUpload.prototype.setButtonAction=function(e){this.settings.button_action=e,this.callFlash("SetButtonAction",[e])},SWFUpload.prototype.setButtonCursor=function(e){this.settings.button_cursor=e,this.callFlash("SetButtonCursor",[e])},SWFUpload.prototype.queueEvent=function(e,t){void 0==t?t=[]:t instanceof Array||(t=[t]);var n=this;if("function"==typeof this.settings[e])this.eventQueue.push(function(){this.settings[e].apply(this,t)}),setTimeout(function(){n.executeNextEvent()},0);else if(null!==this.settings[e])throw"Event handler "+e+" is unknown or is not a function"}, -SWFUpload.prototype.executeNextEvent=function(){var e=this.eventQueue?this.eventQueue.shift():null;"function"==typeof e&&e.apply(this)},SWFUpload.prototype.unescapeFilePostParams=function(e){var t,n=/[$]([0-9a-f]{4})/i,i={};if(void 0!=e){for(var a in e.post)if(e.post.hasOwnProperty(a)){t=a;for(var o;null!==(o=n.exec(t));)t=t.replace(o[0],String.fromCharCode(parseInt("0x"+o[1],16)));i[t]=e.post[a]}e.post=i}return e},SWFUpload.prototype.testExternalInterface=function(){try{return this.callFlash("TestExternalInterface")}catch(e){return!1}},SWFUpload.prototype.flashReady=function(){var e=this.getMovieElement();return e?(this.cleanUp(e),void this.queueEvent("swfupload_loaded_handler")):void this.debug("Flash called back ready but the flash movie can't be found.")},SWFUpload.prototype.cleanUp=function(e){try{if(this.movieElement&&"unknown"==typeof e.CallFunction){this.debug("Removing Flash functions hooks (this should only run in IE and should prevent memory leaks)");for(var t in e)try{"function"==typeof e[t]&&(e[t]=null)}catch(n){}}}catch(i){}window.__flash__removeCallback=function(e,t){try{e&&(e[t]=null)}catch(n){}}},SWFUpload.prototype.fileDialogStart=function(){this.queueEvent("file_dialog_start_handler")},SWFUpload.prototype.fileQueued=function(e){e=this.unescapeFilePostParams(e),this.queueEvent("file_queued_handler",e)},SWFUpload.prototype.fileQueueError=function(e,t,n){e=this.unescapeFilePostParams(e),this.queueEvent("file_queue_error_handler",[e,t,n])},SWFUpload.prototype.fileDialogComplete=function(e,t,n){this.queueEvent("file_dialog_complete_handler",[e,t,n])},SWFUpload.prototype.uploadStart=function(e){e=this.unescapeFilePostParams(e),this.queueEvent("return_upload_start_handler",e)},SWFUpload.prototype.returnUploadStart=function(e){var t;if("function"==typeof this.settings.upload_start_handler)e=this.unescapeFilePostParams(e),t=this.settings.upload_start_handler.call(this,e);else if(void 0!=this.settings.upload_start_handler)throw"upload_start_handler must be a function";void 0===t&&(t=!0),t=!!t,this.callFlash("ReturnUploadStart",[t])},SWFUpload.prototype.uploadProgress=function(e,t,n){e=this.unescapeFilePostParams(e),this.queueEvent("upload_progress_handler",[e,t,n])},SWFUpload.prototype.uploadError=function(e,t,n){e=this.unescapeFilePostParams(e),this.queueEvent("upload_error_handler",[e,t,n])},SWFUpload.prototype.uploadSuccess=function(e,t,n){e=this.unescapeFilePostParams(e),this.queueEvent("upload_success_handler",[e,t,n])},SWFUpload.prototype.uploadComplete=function(e){e=this.unescapeFilePostParams(e),this.queueEvent("upload_complete_handler",e)},SWFUpload.prototype.debug=function(e){this.queueEvent("debug_handler",e)},SWFUpload.prototype.debugMessage=function(e){if(this.settings.debug){var t,n=[];if("object"==typeof e&&"string"==typeof e.name&&"string"==typeof e.message){for(var i in e)e.hasOwnProperty(i)&&n.push(i+": "+e[i]);t=n.join("\n")||"",n=t.split("\n"),t="EXCEPTION: "+n.join("\nEXCEPTION: "),SWFUpload.Console.writeLine(t)}else SWFUpload.Console.writeLine(e)}},SWFUpload.Console={},SWFUpload.Console.writeLine=function(e){var t,n;try{t=document.getElementById("SWFUpload_Console"),t||(n=document.createElement("form"),document.getElementsByTagName("body")[0].appendChild(n),t=document.createElement("textarea"),t.id="SWFUpload_Console",t.style.fontFamily="monospace",t.setAttribute("wrap","off"),t.wrap="off",t.style.overflow="auto",t.style.width="700px",t.style.height="350px",t.style.margin="5px",n.appendChild(t)),t.value+=e+"\n",t.scrollTop=t.scrollHeight-t.clientHeight}catch(i){alert("Exception: "+i.name+" Message: "+i.message)}}}(),function(){"function"==typeof SWFUpload&&(SWFUpload.queue={},SWFUpload.prototype.initSettings=function(e){return function(){"function"==typeof e&&e.call(this),this.queueSettings={},this.queueSettings.queue_cancelled_flag=!1,this.queueSettings.queue_upload_count=0,this.queueSettings.user_upload_complete_handler=this.settings.upload_complete_handler,this.queueSettings.user_upload_start_handler=this.settings.upload_start_handler,this.settings.upload_complete_handler=SWFUpload.queue.uploadCompleteHandler,this.settings.upload_start_handler=SWFUpload.queue.uploadStartHandler,this.settings.queue_complete_handler=this.settings.queue_complete_handler||null}}(SWFUpload.prototype.initSettings),SWFUpload.prototype.startUpload=function(e){this.queueSettings.queue_cancelled_flag=!1,this.callFlash("StartUpload",[e])},SWFUpload.prototype.cancelQueue=function(){this.queueSettings.queue_cancelled_flag=!0,this.stopUpload();for(var e=this.getStats();e.files_queued>0;)this.cancelUpload(),e=this.getStats()},SWFUpload.queue.uploadStartHandler=function(e){var t;return"function"==typeof this.queueSettings.user_upload_start_handler&&(t=this.queueSettings.user_upload_start_handler.call(this,e)),t=t!==!1,this.queueSettings.queue_cancelled_flag=!t,t},SWFUpload.queue.uploadCompleteHandler=function(e){var t,n=this.queueSettings.user_upload_complete_handler;if(e.filestatus===SWFUpload.FILE_STATUS.COMPLETE&&this.queueSettings.queue_upload_count++,t="function"==typeof n?n.call(this,e)!==!1:e.filestatus!==SWFUpload.FILE_STATUS.QUEUED){var i=this.getStats();i.files_queued>0&&this.queueSettings.queue_cancelled_flag===!1?this.startUpload():this.queueSettings.queue_cancelled_flag===!1?(this.queueEvent("queue_complete_handler",[this.queueSettings.queue_upload_count]),this.queueSettings.queue_upload_count=0):(this.queueSettings.queue_cancelled_flag=!1,this.queueSettings.queue_upload_count=0)}})}(),KindEditor.plugin("pagebreak",function(e){var t=this,n="pagebreak",i=e.undef(t.pagebreakHtml,'
          ');t.clickToolbar(n,function(){var n=t.cmd,a=n.range;t.focus();var o="br"==t.newlineTag||e.WEBKIT?"":'';if(t.insertHtml(i+o),""!==o){var r=e("#__kindeditor_tail_tag__",t.edit.doc);a.selectNodeContents(r[0]),r.removeAttr("id"),n.select()}})}),KindEditor.plugin("plainpaste",function(e){var t=this,n="plainpaste";t.clickToolbar(n,function(){var i=t.lang(n+"."),a='
          '+i.comment+'
          ',o=t.createDialog({name:n,width:450,title:t.lang(n),body:a,yesBtn:{name:t.lang("yes"),click:function(n){var i=r.val();i=e.escape(i),i=i.replace(/ {2}/g,"  "),i="p"==t.newlineTag?i.replace(/^/,"

          ").replace(/$/,"

          ").replace(/\n/g,"

          "):i.replace(/\n/g,"
          $&"),t.insertHtml(i).hideDialog().focus()}}}),r=e("textarea",o.div);r[0].focus()})}),KindEditor.plugin("preview",function(e){var t=this,n="preview";t.clickToolbar(n,function(){var i=(t.lang(n+"."),'

          '),a=t.createDialog({name:n,width:750,title:t.lang(n),body:i}),o=e("iframe",a.div),r=e.iframeDoc(o);r.open(),r.write(t.fullHtml()),r.close(),e(r.body).css("background-color","#FFF"),o[0].contentWindow.focus()})}),KindEditor.plugin("quickformat",function(e){function t(e){for(var t=e.first();t&&t.first();)t=t.first();return t}var n=this,i="quickformat",a=e.toMap("blockquote,center,div,h1,h2,h3,h4,h5,h6,p");n.clickToolbar(i,function(){n.focus();for(var i,o=n.edit.doc,r=n.cmd.range,l=e(o.body).first(),s=[],d=[],c=r.createBookmark(!0);l;){i=l.next();var u=t(l);u&&"img"==u.name||(a[l.name]?(l.html(l.html().replace(/^(\s| | )+/gi,"")),l.css("text-indent","2em")):d.push(l),(!i||a[i.name]||a[l.name]&&!a[i.name])&&(d.length>0&&s.push(d),d=[])),l=i}e.each(s,function(t,n){var i=e('

          ',o);n[0].before(i),e.each(n,function(e,t){i.append(t)})}),r.moveToBookmark(c),n.addBookmark()})}),KindEditor.plugin("table",function(e){function t(e,t){t=t.toLowerCase(),e.css("background-color",t),t&&e.css("color","#000000"===t?"#FFFFFF":"#000000"),"input"===e.name?e.val(t):e.html(t)}function n(n,i,a){function o(){e.each(h,function(){this.remove()}),h=[],e(document).unbind("click,mousedown",o),n.unbind("click,mousedown",o)}i.bind("click,mousedown",function(e){e.stopPropagation()}),i.click(function(i){o();var r=e(this),l=r.pos(),d=e.colorpicker({x:l.x,y:l.y+r.height(),z:811214,selectedColor:e(this).html(),colors:s.colorTable,noColor:s.lang("table.defaultBorderColor"),shadowMode:s.shadowMode,click:function(e){t(r,e),o(),a&&a(e)}});h.push(d),e(document).bind("click,mousedown",o),n.bind("click,mousedown",o)})}function i(e,t,n){for(var i=0,a=0,o=t.cells.length;a
          "],l=n.find("tbody>tr:first").children(),d=0;l.each(function(){var e=$(this),t=e.attr("colspan");d+=t?parseInt(t):1});for(var c=0;c"+(e.IE?" ":"
          ")+"");r.push("
          "),o=$(r.join("")),n.prepend(o)}}else o.remove()}i&&i("header",t.header)}void 0!==t.stripedRows&&(n.toggleClass("table-striped",!!t.stripedRows),i&&i("stripedRows",t.stripedRows)),void 0!==t.hoverRows&&(n.toggleClass("table-hover",!!t.hoverRows),i&&i("hoverRows",t.hoverRows)),void 0!==t.autoWidth&&(n.toggleClass("table-auto",!!t.autoWidth),i&&i("autoWidth",t.autoWidth)),void 0!==t.borderColor&&(n.find("td,th").css("border","1px solid "+t.borderColor),i&&i("borderColor",t.borderColor))}}function r(t,n,i,a){if(t*n){for(var o=$('
          '),r=$(""),l=0;l"),c=0;c"+(e.IE?" ":"
          ")+"");d.append(u)}r.append(d)}o.append(r);var p=$("
          ").append(o).html();return e.IE||(p+="
          "),s.insertHtml(p),o}}function l(i){for(var a=$(i[0]),r=[""],l=[""],c=0;c<6;++c){r.push('{tableHead}'),l.push("");for(var u=0;u<6;++u)l.push('{tableContent}');l.push("")}r.push(""),l.push("");var h=['
          ','
          ','
          ','
          ',"",'
          ','
          ','
          ',"
          ",'
          ',"",'
          ','
          ',"
          ",'
          ',"",'
          ','{borderColor}','',"
          ","
          ","
          ",'
          ','',r.join(""),l.join(""),"
          ","","",""].join("").format(p),f=$(h),m=f.find(".ke-plugin-table-example"),g=s.cmd.range.createBookmark(),v=f.find(".ke-plugin-table-input-color"),_=e(v[0]);f.on("change.kTable","input[name]",function(){var e=$(this),t={};t[e.attr("name")]=e.is('[type="checkbox"]')?e.is(":checked"):e.val(),o(t,m)});var b=s.createDialog({name:d+"test",width:550,title:s.lang(d),body:f[0],beforeRemove:function(){f.off(".kTable")},yesBtn:{name:s.lang("yes"),click:function(e){o({borderColor:f.find('[name="borderColor"]').val(),header:f.find('[name="header"]').is(":checked"),stripedRows:f.find('[name="stripedRows"]').is(":checked"),hoverRows:f.find('[name="hoverRows"]').is(":checked"),autoWidth:f.find('[name="autoWidth"]:checked').val()},a),s.hideDialog().focus(),s.cmd.range.moveToBookmark(g),s.cmd.select(),s.addBookmark()}}});n(b.div,_,function(e){o({borderColor:e},m)}),o({borderColor:a.find("td,th").first().css("borderColor"),header:a.find("thead").length,stripedRows:a.hasClass("table-striped"),hoverRows:a.hasClass("table-hover"),autoWidth:a.hasClass("table-auto")},m,function(e,n){switch(e){case"borderColor":t(_,n||"#dddddd");break;case"header":f.find('[name="header"]').prop("checked",!!n);break;case"stripedRows":f.find('[name="stripedRows"]').prop("checked",!!n);break;case"hoverRows":f.find('[name="hoverRows"]').prop("checked",!!n);break;case"autoWidth":f.find('[name="autoWidth"][value="'+(n?"auto":"")+'"]').prop("checked",!0)}})}var s=this,d="table",c={zh_cn:{name:"表格",xRxC:"{0}行 × {1}列",headerRow:"标题行",headerCol:"标题列",tableStyle:"表格样式",addHeaderRow:"添加表格标题行",stripedRows:"隔行变色效果",hoverRows:"鼠标悬停效果",autoChangeTableWidth:"自动调整表格尺寸",tableWidthFixed:"按表格文字自适应",tableWidthFull:"按页面宽度自适应",tableBorder:"表格边框",tableHead:"标题",tableContent:"内容"},zh_tw:{name:"表格",xRxC:"{0}行×{1}列",headerRow:"標題行",headerCol:"標題列",tableStyle:"表格樣式",addHeaderRow:"添加表格標題行",stripedRows:"隔行變色效果",hoverRows:"鼠標懸停效果",autoChangeTableWidth:"自動調整表格尺寸",tableWidthFixed:"按表格文字自適應",tableWidthFull:"按頁面寬度自適應",tableBorder:"表格邊框",tableHead:"標題",tableContent:"內容"},en:{name:"Table",xRxC:"{0} Rows × {1} Columns",headerRow:"Header Row",headerCol:"Header Column",tableStyle:"Table style",addHeaderRow:"Add header row",stripedRows:"Striped effection",hoverRows:"Mouse hover effection",autoChangeTableWidth:"Automatically adjust table size",tableWidthFixed:"Adaptive by form text",tableWidthFull:"Page width adaptive",tableBorder:"Table border",tableHead:"Title",tableContent:"Text"}},u=[],p=$.extend({},s.lang("table."),c[($.clientLang||$.zui.clientLang)()]),h=[];s.plugin.table={prop:function(){var e=s.plugin.getSelectedTable();e&&e.length&&l(e)},cellprop:function(){var i=['
          ','
          ','",p.width+'   ','   ",p.height+'   ','","
          ",'
          ','",p.textAlign+' ",p.verticalAlign+' ","
          ",'
          ','",p.borderColor+' ',"
          ",'
          ','",'',"
          ","
          "].join(""),a=s.cmd.range.createBookmark(),o=s.createDialog({name:d,width:500,title:s.lang("tablecell"),body:i,beforeRemove:function(){_.unbind()},yesBtn:{name:s.lang("yes"),click:function(t){var n=l.val(),i=c.val(),o=u.val(),r=h.val(),d=(f.val(),m.val(),g.val()),p=v.val(),b=e(_[0]).html()||"",k=e(_[1]).html()||"";return/^\d*$/.test(n)?/^\d*$/.test(i)?(y.css({width:""!==n?n+o:"",height:""!==i?i+r:"","background-color":k,"text-align":d,"vertical-align":p,"border-style":"solid","border-color":b}),s.hideDialog().focus(),s.cmd.range.moveToBookmark(a),s.cmd.select(),void s.addBookmark()):(alert(s.lang("invalidHeight")),void c[0].focus()):(alert(s.lang("invalidWidth")),void l[0].focus())}}}),r=o.div,l=e('[name="width"]',r).val(100),c=e('[name="height"]',r),u=e('[name="widthType"]',r),h=e('[name="heightType"]',r),f=e('[name="padding"]',r).val(2),m=e('[name="spacing"]',r).val(0),g=e('[name="textAlign"]',r),v=e('[name="verticalAlign"]',r),_=e(".ke-input-color",r);n(r,_.eq(0)),n(r,_.eq(1)),t(_.eq(0),"#000000"),t(_.eq(1),""),l[0].focus(),l[0].select();var b,y=s.plugin.getSelectedCell(),k=y[0].style.width||y[0].width||"",w=y[0].style.height||y[0].height||"";(b=/^(\d+)((?:px|%)*)$/.exec(k))?(l.val(b[1]),u.val(b[2])):l.val(""),(b=/^(\d+)((?:px|%)*)$/.exec(w))&&(c.val(b[1]),h.val(b[2])),g.val(y[0].style.textAlign||""),v.val(y[0].style.verticalAlign||""),t(_.eq(0),e.toHex(y[0].style.borderColor||"")),t(_.eq(1),e.toHex(y[0].style.backgroundColor||"")),l[0].focus(),l[0].select()},insert:function(){console.warn("Table insert not available.")},"delete":function(){var e=s.plugin.getSelectedTable();s.cmd.range.setStartBefore(e[0]).collapse(!0),s.cmd.select(),e.remove(),s.addBookmark()},colinsert:function(t){var n=s.plugin.getSelectedTable()[0],a=s.plugin.getSelectedRow()[0],o=s.plugin.getSelectedCell()[0],r=o.cellIndex+t;r+=n.rows[0].cells.length-a.cells.length;for(var l=0,d=n.rows.length;l"),u.innerHTML=e.IE?"":"
          ",r=i(n,c,u)}s.cmd.range.selectNodeContents(o).collapse(!0),s.cmd.select(),s.addBookmark()},colinsertleft:function(){this.colinsert(0)},colinsertright:function(){this.colinsert(1)},rowinsert:function(t){var n=s.plugin.getSelectedTable()[0],i=s.plugin.getSelectedRow()[0],a=s.plugin.getSelectedCell()[0],o=i.rowIndex;1===t&&(o=i.rowIndex+(a.rowSpan-1)+t);for(var r=n.insertRow(o),l=0,d=i.cells.length;l1&&(d-=i.cells[l].rowSpan-1);var c=r.insertCell(l);1===t&&i.cells[l].colSpan>1&&(c.colSpan=i.cells[l].colSpan),c.innerHTML=e.IE?"":"
          "}for(var u=o;u>=0;u--){var p=n.rows[u].cells;if(p.length>l){for(var h=a.cellIndex;h>=0;h--)p[h].rowSpan>1&&(p[h].rowSpan+=1);break}}s.cmd.range.selectNodeContents(a).collapse(!0),s.cmd.select(),s.addBookmark()},rowinsertabove:function(){this.rowinsert(0)},rowinsertbelow:function(){this.rowinsert(1)},rowmerge:function(){var e=s.plugin.getSelectedTable()[0],t=s.plugin.getSelectedRow()[0],n=s.plugin.getSelectedCell()[0],i=t.rowIndex,a=i+n.rowSpan,o=e.rows[a];if(!(e.rows.length<=a)){var r=n.cellIndex;if(!(o.cells.length<=r)){var l=o.cells[r];n.colSpan===l.colSpan&&(n.rowSpan+=l.rowSpan,o.deleteCell(r),s.cmd.range.selectNodeContents(n).collapse(!0),s.cmd.select(),s.addBookmark())}}},colmerge:function(){var e=(s.plugin.getSelectedTable()[0],s.plugin.getSelectedRow()[0]),t=s.plugin.getSelectedCell()[0],n=(e.rowIndex,t.cellIndex),i=n+1;if(!(e.cells.length<=i)){var a=e.cells[i];t.rowSpan===a.rowSpan&&(t.colSpan+=a.colSpan,e.deleteCell(i),s.cmd.range.selectNodeContents(t).collapse(!0),s.cmd.select(),s.addBookmark())}},rowsplit:function(){var t=s.plugin.getSelectedTable()[0],n=s.plugin.getSelectedRow()[0],a=s.plugin.getSelectedCell()[0],o=n.rowIndex;if(1!==a.rowSpan){for(var r=i(t,n,a),l=1,d=a.rowSpan;l1&&(u.colSpan=a.colSpan),u.innerHTML=e.IE?"":"
          ",r=i(t,c,u)}e(a).removeAttr("rowSpan"),s.cmd.range.selectNodeContents(a).collapse(!0),s.cmd.select(),s.addBookmark()}},colsplit:function(){var t=(s.plugin.getSelectedTable()[0],s.plugin.getSelectedRow()[0]),n=s.plugin.getSelectedCell()[0],i=n.cellIndex;if(1!==n.colSpan){for(var a=1,o=n.colSpan;a1&&(r.rowSpan=n.rowSpan),r.innerHTML=e.IE?"":"
          "}e(n).removeAttr("colSpan"),s.cmd.range.selectNodeContents(n).collapse(!0),s.cmd.select(),s.addBookmark()}},coldelete:function(){for(var t=s.plugin.getSelectedTable()[0],n=s.plugin.getSelectedRow()[0],i=s.plugin.getSelectedCell()[0],a=i.cellIndex,o=0,r=t.rows.length;o1?(d.colSpan-=1,1===d.colSpan&&e(d).removeAttr("colSpan")):l.deleteCell(a),d.rowSpan>1&&(o+=d.rowSpan-1)}0===n.cells.length?(s.cmd.range.setStartBefore(t).collapse(!0),s.cmd.select(),e(t).remove()):s.cmd.selection(!0),s.addBookmark()},rowdelete:function(){for(var t=s.plugin.getSelectedTable()[0],n=s.plugin.getSelectedRow()[0],i=s.plugin.getSelectedCell()[0],a=n.rowIndex,o=i.rowSpan-1;o>=0;o--)t.deleteRow(a+o);0===t.rows.length?(s.cmd.range.setStartBefore(t).collapse(!0),s.cmd.select(),e(t).remove()):s.cmd.selection(!0),s.addBookmark()}},s.clickToolbar(d,function(){if(!s.menu){var e=s.createMenu({name:d,beforeRemove:function(){a()}}),t=$('
          '),n=$('
          '+p.xRxC.format(0,0)+"
          ");t.append(n);var i=$('
          ');i.on("mouseenter.kTable",".ke-plugin-table-grid-cell",function(){var e=$(this),t=e.data("row"),a=e.data("col");n.text(p.xRxC.format(t,a));var o=i.find(".ke-plugin-table-grid-cell");o.each(function(){var e=$(this),n=e.data("row"),i=e.data("col");n<=t&&i<=a?e.css({border:"1px solid #2286d2",background:"#eff7ff"}):e.css({border:"1px solid #ddd",background:"#f1f1f1"})})}).on("click.kTable",".ke-plugin-table-grid-cell",function(e){var t=$(this),n=t.data("row"),i=t.data("col");r(n,i),s.hideMenu().focus(),s.addBookmark(),e.stopPropagation()});for(var o=1;o<11;o++)for(var l=1;l<11;l++)i.append('
          ');u.push(i),t.append(i),e.div.append(t[0])}})}),KindEditor.lang({table:KindEditor.lang("table")}),KindEditor.plugin("template",function(e){function t(t){return a+t+"?ver="+encodeURIComponent(e.DEBUG?e.TIME:e.VERSION)}var n=this,i="template",a=(n.lang(i+"."),n.pluginsPath+i+"/html/");n.clickToolbar(i,function(){var a=n.lang(i+"."),o=['
          ','
          ','
          ',a.selectTemplate+"
          ",'
          ',' ","
          ",'
          ',"
          ",'',"
          "].join("");var r=n.createDialog({name:i,width:500,title:n.lang(i),body:html,yesBtn:{name:n.lang("yes"),click:function(t){var i=e.iframeDoc(d);n[s[0].checked?"html":"insertHtml"](i.body.innerHTML).hideDialog().focus()}}}),l=e("select",r.div),s=e('[name="replaceFlag"]',r.div),d=e("iframe",r.div);s[0].checked=!0,d.attr("src",t(l.val())),l.change(function(){d.attr("src",t(this.value))})})}),KindEditor.plugin("wordpaste",function(e){var t=this,n="wordpaste";t.clickToolbar(n,function(){var i=t.lang(n+"."),a='
          '+i.comment+'
          ',o=t.createDialog({name:n,width:450,title:t.lang(n),body:a,yesBtn:{name:t.lang("yes"),click:function(n){var i=s.body.innerHTML;i=e.clearMsWord(i,t.filterMode?t.htmlTags:e.options.htmlTags),t.insertHtml(i).hideDialog().focus()}}}),r=o.div,l=e("iframe",r),s=e.iframeDoc(l);e.IE||(s.designMode="on"),s.open(),s.write("WordPaste"),s.write(''),e.IE||s.write("
          "),s.write(""),s.close(),e.IE&&(s.body.contentEditable="true"),l[0].contentWindow.focus()})}); \ No newline at end of file +var i=_inArray(n,["prop","delete"])<0?t.plugin.getSelectedCell:t.plugin.getSelectedTable;t.addContextmenu({title:t.lang("table"+n),click:function(){t.loadPlugin("table",function(){t.plugin.table[n](),t.hideMenu()})},cond:i,width:170,iconClass:"ke-icon-table"+n})}),t.addContextmenu({title:"-"}),_each("selectall,justifyleft,justifycenter,justifyright,justifyfull,insertorderedlist,insertunorderedlist,indent,outdent,subscript,superscript,hr,print,bold,italic,underline,strikethrough,removeformat,unlink".split(","),function(e,i){n[i]&&t.afterCreate(function(){_ctrl(this.edit.doc,n[i],function(){t.cmd.selection(),t.clickToolbar(i)})}),t.clickToolbar(i,function(){t.focus().exec(i,null)})}),t.afterCreate(function(){function n(){i.range.moveToBookmark(a),i.select(),_WEBKIT&&(e("div."+l,o).each(function(){e(this).after("
          ").remove(!0)}),e("span.Apple-style-span",o).remove(!0),e("span.Apple-tab-span",o).remove(!0),e("span[style]",o).each(function(){"nowrap"==e(this).css("white-space")&&e(this).remove(!0)}),e("meta",o).remove());var n=o[0].innerHTML;o.remove(),""!==n&&(_WEBKIT&&(n=n.replace(/(
          )\1/gi,"$1")),2===t.pasteType&&(n=n.replace(/(<(?:p|p\s[^>]*)>) *(<\/p>)/gi,""),/schemas-microsoft-com|worddocument|mso-\w+/i.test(n)?n=_clearMsWord(n,t.filterMode?t.htmlTags:e.options.htmlTags):(n=_formatHtml(n,t.filterMode?t.htmlTags:null),n=t.beforeSetHtml(n))),1===t.pasteType&&(n=n.replace(/ /gi," "),n=n.replace(/\n\s*\n/g,"\n"),n=n.replace(/]*>/gi,"\n"),n=n.replace(/<\/p>]*>/gi,"\n"),n=n.replace(/<[^>]+>/g,""),n=n.replace(/ {2}/g,"  "),"p"==t.newlineTag?/\n/.test(n)&&(n=n.replace(/^/,"

          ").replace(/$/,"

          ").replace(/\n/g,"

          ")):n=n.replace(/\n/g,"
          $&")),t.insertHtml(n,!0))}var i,a,o,r=t.edit.doc,l="__kindeditor_paste__",s=!1;e(r.body).bind("paste",function(d){if(0===t.pasteType)return void d.stop();if(!s){if(s=!0,e("div."+l,r).remove(),i=t.cmd.selection(),a=i.range.createBookmark(),o=e('

          ',r).css({position:"absolute",width:"1px",height:"1px",overflow:"hidden",left:"-1981px",top:e(a.start).pos().y+"px","white-space":"nowrap"}),e(r.body).append(o),_IE){var c=i.range.get(!0);c.moveToElementText(o[0]),c.select(),c.execCommand("paste"),d.preventDefault()}else i.range.selectNodeContents(o[0]),i.select(),o[0].tabIndex=-1,o[0].focus();setTimeout(function(){n(),s=!1},0)}})}),t.beforeGetHtml(function(e){return _IE&&_V<=8&&(e=e.replace(/]*data-ke-input-tag="([^"]*)"[^>]*>([\s\S]*?)<\/div>/gi,function(e,t){return unescape(t)}),e=e.replace(/(]*)?>)/gi,function(e,t,n){return/\s+type="[^"]+"/i.test(e)?e:t+' type="text"'+n})),e.replace(/(<(?:noscript|noscript\s[^>]*)>)([\s\S]*?)(<\/noscript>)/gi,function(e,t,n,i){return t+_unescape(n).replace(/\s+/g," ")+i}).replace(/]*class="?ke-(flash|rm|media)"?[^>]*>/gi,function(e){var t=_getAttrList(e),n=_getCssList(t.style||""),i=_mediaAttrs(t["data-ke-tag"]),a=_undef(n.width,""),o=_undef(n.height,"");return/px/i.test(a)&&(a=_removeUnit(a)),/px/i.test(o)&&(o=_removeUnit(o)),i.width=_undef(t.width,a),i.height=_undef(t.height,o),_mediaEmbed(i)}).replace(/]*class="?ke-anchor"?[^>]*>/gi,function(e){var t=_getAttrList(e);return''}).replace(/]*data-ke-script-attr="([^"]*)"[^>]*>([\s\S]*?)<\/div>/gi,function(e,t,n){return""+unescape(n)+""}).replace(/]*data-ke-noscript-attr="([^"]*)"[^>]*>([\s\S]*?)<\/div>/gi,function(e,t,n){return""+unescape(n)+""}).replace(/(<[^>]*)data-ke-src="([^"]*)"([^>]*>)/gi,function(e,t,n,i){return e=e.replace(/(\s+(?:href|src)=")[^"]*(")/i,function(e,t,i){return t+_unescape(n)+i}),e=e.replace(/\s+data-ke-src="[^"]*"/i,"")}).replace(/(<[^>]+\s)data-ke-(on\w+="[^"]*"[^>]*>)/gi,function(e,t,n){return t+n})}),t.beforeSetHtml(function(e){return _IE&&_V<=8&&(e=e.replace(/]*>|<(select|button)[^>]*>[\s\S]*?<\/\1>/gi,function(e){var t=_getAttrList(e),n=_getCssList(t.style||"");return"none"==n.display?'
          ':e})),e.replace(/]*type="([^"]+)"[^>]*>(?:<\/embed>)?/gi,function(e){var n=_getAttrList(e);return n.src=_undef(n.src,""),n.width=_undef(n.width,0),n.height=_undef(n.height,0),_mediaImg(t.themesPath+"common/blank.gif",n)}).replace(/]*name="([^"]+)"[^>]*>(?:<\/a>)?/gi,function(e){var n=_getAttrList(e);return n.href!==undefined?e:''}).replace(/]*)>([\s\S]*?)<\/script>/gi,function(e,t,n){return'
          '+escape(n)+"
          "}).replace(/]*)>([\s\S]*?)<\/noscript>/gi,function(e,t,n){return'
          '+escape(n)+"
          "}).replace(/(<[^>]*)(href|src)="([^"]*)"([^>]*>)/gi,function(e,t,n,i,a){return e.match(/\sdata-ke-src="[^"]*"/i)?e:e=t+n+'="'+i+'" data-ke-src="'+_escape(i)+'"'+a}).replace(/(<[^>]+\s)(on\w+="[^"]*"[^>]*>)/gi,function(e,t,n){return t+"data-ke-"+n}).replace(/]*\s+border="0"[^>]*>/gi,function(e){return e.indexOf("ke-zeroborder")>=0?e:_addClassToTag(e,"ke-zeroborder")})})})}}(window),KindEditor.lang({source:"HTML代码",preview:"预览",undo:"后退(Ctrl+Z)",redo:"前进(Ctrl+Y)",cut:"剪切(Ctrl+X)",copy:"复制(Ctrl+C)",paste:"粘贴(Ctrl+V)",plainpaste:"粘贴为无格式文本",wordpaste:"从Word粘贴",selectall:"全选(Ctrl+A)",justifyleft:"左对齐",justifycenter:"居中",justifyright:"右对齐",justifyfull:"两端对齐",insertorderedlist:"编号",insertunorderedlist:"项目符号",indent:"增加缩进",outdent:"减少缩进",subscript:"下标",superscript:"上标",formatblock:"段落",fontname:"字体",fontsize:"文字大小",forecolor:"文字颜色",hilitecolor:"文字背景",bold:"粗体(Ctrl+B)",italic:"斜体(Ctrl+I)",underline:"下划线(Ctrl+U)",strikethrough:"删除线",removeformat:"删除格式",image:"图片",multiimage:"批量图片上传",flash:"Flash",media:"视音频",table:"表格",tablecell:"单元格",hr:"插入横线",emoticons:"插入表情",link:"超级链接",unlink:"取消超级链接",fullscreen:"全屏显示",about:"关于",print:"打印(Ctrl+P)",filemanager:"文件空间",code:"插入程序代码",map:"Google地图",baidumap:"百度地图",lineheight:"行距",clearhtml:"清理HTML代码",pagebreak:"插入分页符",quickformat:"一键排版",insertfile:"插入文件",template:"插入模板",anchor:"锚点",yes:"确定",no:"取消",close:"关闭",editImage:"图片属性",deleteImage:"删除图片",editFlash:"Flash属性",deleteFlash:"删除Flash",editMedia:"视音频属性",deleteMedia:"删除视音频",editLink:"超级链接属性",deleteLink:"取消超级链接",editAnchor:"锚点属性",deleteAnchor:"删除锚点",tableprop:"表格属性",tablecellprop:"单元格属性",tableinsert:"插入表格",tabledelete:"删除表格",tablecolinsertleft:"左侧插入列",tablecolinsertright:"右侧插入列",tablerowinsertabove:"上方插入行",tablerowinsertbelow:"下方插入行",tablerowmerge:"向下合并单元格",tablecolmerge:"向右合并单元格",tablerowsplit:"拆分行",tablecolsplit:"拆分列",tablecoldelete:"删除列",tablerowdelete:"删除行",noColor:"无颜色",pleaseSelectFile:"请选择文件。",invalidImg:"请输入有效的URL地址。\n只允许jpg,gif,bmp,png格式。",invalidMedia:"请输入有效的URL地址。\n只允许swf,flv,mp3,wav,wma,wmv,mid,avi,mpg,asf,rm,rmvb格式。",invalidWidth:"宽度必须为数字。",invalidHeight:"高度必须为数字。",invalidBorder:"边框必须为数字。",invalidUrl:"请输入有效的URL地址。",invalidRows:"行数为必选项,只允许输入大于0的数字。",invalidCols:"列数为必选项,只允许输入大于0的数字。",invalidPadding:"边距必须为数字。",invalidSpacing:"间距必须为数字。",invalidJson:"服务器发生故障。",uploadSuccess:"上传成功。",cutError:"您的浏览器安全设置不允许使用剪切操作,请使用快捷键(Ctrl+X)来完成。",copyError:"您的浏览器安全设置不允许使用复制操作,请使用快捷键(Ctrl+C)来完成。",pasteError:"您的浏览器安全设置不允许使用粘贴操作,请使用快捷键(Ctrl+V)来完成。",ajaxLoading:"加载中,请稍候 ...",uploadLoading:"上传中,请稍候 ...",uploadError:"上传错误","plainpaste.comment":"请使用快捷键(Ctrl+V)把内容粘贴到下面的方框里。","wordpaste.comment":"请使用快捷键(Ctrl+V)把内容粘贴到下面的方框里。","code.pleaseInput":"请输入程序代码。","link.url":"URL","link.linkType":"打开类型","link.newWindow":"新窗口","link.selfWindow":"当前窗口","flash.url":"URL","flash.width":"宽度","flash.height":"高度","flash.upload":"上传","flash.viewServer":"文件空间","media.url":"URL","media.width":"宽度","media.height":"高度","media.autostart":"自动播放","media.upload":"上传","media.viewServer":"文件空间","image.remoteImage":"网络图片","image.localImage":"本地上传","image.remoteUrl":"图片地址","image.localUrl":"上传文件","image.size":"图片大小","image.width":"宽","image.height":"高","image.resetSize":"重置大小","image.align":"对齐方式","image.defaultAlign":"默认方式","image.leftAlign":"左对齐","image.rightAlign":"右对齐","image.imgTitle":"图片说明","image.upload":"浏览...","image.viewServer":"图片空间","multiimage.uploadDesc":"允许用户同时上传<%=uploadLimit%>张图片,单张图片容量不超过<%=sizeLimit%>","multiimage.startUpload":"开始上传","multiimage.clearAll":"全部清空","multiimage.insertAll":"全部插入","multiimage.queueLimitExceeded":"文件数量超过限制。","multiimage.fileExceedsSizeLimit":"文件大小超过限制。","multiimage.zeroByteFile":"无法上传空文件。","multiimage.invalidFiletype":"文件类型不正确。","multiimage.unknownError":"发生异常,无法上传。","multiimage.pending":"等待上传","multiimage.uploadError":"上传失败","filemanager.emptyFolder":"空文件夹","filemanager.moveup":"移到上一级文件夹","filemanager.viewType":"显示方式:","filemanager.viewImage":"缩略图","filemanager.listImage":"详细信息","filemanager.orderType":"排序方式:","filemanager.fileName":"名称","filemanager.fileSize":"大小","filemanager.fileType":"类型","insertfile.url":"URL","insertfile.title":"文件说明","insertfile.upload":"上传","insertfile.viewServer":"文件空间","table.cells":"单元格数","table.rows":"行数","table.cols":"列数","table.size":"大小","table.width":"宽度","table.height":"高度","table.percent":"%","table.px":"px","table.space":"边距间距","table.padding":"边距","table.spacing":"间距","table.align":"对齐方式","table.textAlign":"水平对齐","table.verticalAlign":"垂直对齐","table.alignDefault":"默认","table.alignLeft":"左对齐","table.alignCenter":"居中","table.alignRight":"右对齐","table.alignTop":"顶部","table.alignMiddle":"中部","table.alignBottom":"底部","table.alignBaseline":"基线","table.border":"边框","table.borderWidth":"边框","table.borderColor":"颜色","table.backgroundColor":"背景颜色","map.address":"地址: ","map.search":"搜索","baidumap.address":"地址: ","baidumap.search":"搜索","baidumap.insertDynamicMap":"插入动态地图","anchor.name":"锚点名称","formatblock.formatBlock":{h1:"标题 1",h2:"标题 2",h3:"标题 3",h4:"标题 4",p:"正 文"},"fontname.fontName":{SimSun:"宋体",NSimSun:"新宋体",FangSong_GB2312:"仿宋_GB2312",KaiTi_GB2312:"楷体_GB2312",SimHei:"黑体","Microsoft YaHei":"微软雅黑",Arial:"Arial","Arial Black":"Arial Black","Times New Roman":"Times New Roman","Courier New":"Courier New",Tahoma:"Tahoma",Verdana:"Verdana"},"lineheight.lineHeight":[{1:"单倍行距"},{1.5:"1.5倍行距"},{2:"2倍行距"},{2.5:"2.5倍行距"},{3:"3倍行距"}],"template.selectTemplate":"可选模板","template.replaceContent":"替换当前内容","template.fileList":{"1.html":"图片和文字","2.html":"表格","3.html":"项目编号"}},"zh_CN"),KindEditor.plugin("anchor",function(e){var t=this,n="anchor",i=t.lang(n+".");t.plugin.anchor={edit:function(){var a=['
          ','
          ','",'',"
          ","
          "].join(""),o=t.createDialog({name:n,width:300,title:t.lang(n),body:a,yesBtn:{name:t.lang("yes"),click:function(e){t.insertHtml('').hideDialog().focus()}}}),r=o.div,l=e('input[name="name"]',r),s=t.plugin.getSelectedAnchor();s&&l.val(unescape(s.attr("data-ke-name"))),l[0].focus(),l[0].select()},"delete":function(){t.plugin.getSelectedAnchor().remove()}},t.clickToolbar(n,t.plugin.anchor.edit)}),KindEditor.plugin("autoheight",function(e){function t(){i.iframe.height(o),n.resize(null,Math.max((e.IE?a.scrollHeight:a.offsetHeight)+76,o))}var n=this;if(n.autoHeightMode){var i=n.edit,a=i.doc.body,o=e.removeUnit(n.height);i.iframe[0].scroll="no",a.style.overflowY="hidden",i.afterChange(t),n.isCreated?t():n.afterCreate(t)}}),KindEditor.plugin("baidumap",function(e){var t=this,n="baidumap",i=t.lang(n+"."),a=e.undef(t.mapWidth,558),o=e.undef(t.mapHeight,360);t.clickToolbar(n,function(){function r(){l=m[0].contentWindow,s=e.iframeDoc(m)}var l,s,d=['
          ','
          ','
          ',i.address+' ','','',"","
          ",'
          ',' ","
          ",'
          ',"
          ",'
          ',"
          "].join(""),c=t.createDialog({name:n,width:a+42,title:t.lang(n),body:d,yesBtn:{name:t.lang("yes"),click:function(e){var n=l.map,i=n.getCenter(),r=i.lng+","+i.lat,s=n.getZoom(),d=[f[0].checked?t.pluginsPath+"baidumap/index.html":"http://api.map.baidu.com/staticimage","?center="+encodeURIComponent(r),"&zoom="+encodeURIComponent(s),"&width="+a,"&height="+o,"&markers="+encodeURIComponent(r),"&markerStyles="+encodeURIComponent("l,A")].join("");f[0].checked?t.insertHtml(''):t.exec("insertimage",d),t.hideDialog().focus()}},beforeRemove:function(){h.remove(),s&&s.write(""),m.remove()}}),u=c.div,p=e('[name="address"]',u),h=e('[name="searchBtn"]',u),f=e('[name="insertDynamicMap"]',c.div),m=e('');m.bind("load",function(){m.unbind("load"),e.IE?r():setTimeout(r,0)}),e(".ke-map",u).replaceWith(m),h.click(function(){l.search(p.val())})})}),KindEditor.plugin("clearhtml",function(e){var t=this,n="clearhtml";t.clickToolbar(n,function(){t.focus();var n=t.html();n=n.replace(/(]*>)([\s\S]*?)(<\/script>)/gi,""),n=n.replace(/(]*>)([\s\S]*?)(<\/style>)/gi,""),n=e.formatHtml(n,{a:["href","target"],embed:["src","width","height","type","loop","autostart","quality",".width",".height","align","allowscriptaccess"],img:["src","width","height","border","alt","title",".width",".height"],table:["border"],"td,th":["rowspan","colspan"],"div,hr,br,tbody,tr,p,ol,ul,li,blockquote,h1,h2,h3,h4,h5,h6":[]}),t.html(n),t.cmd.selection(!0),t.addBookmark()})}),KindEditor.plugin("code",function(e){var t=this,n="code";t.clickToolbar(n,function(){var i=t.lang(n+"."),a=['
          ','
          ','","
          ",'',"
          "].join(""),o=t.createDialog({name:n,width:450,title:t.lang(n),body:a,yesBtn:{name:t.lang("yes"),click:function(n){var a=e(".ke-code-type",o.div).val(),l=r.val(),s=""===a?"":" lang-"+a,d='
          \n'+e.escape(l)+"
          ";return""===e.trim(l)?(alert(i.pleaseInput),void r[0].focus()):void t.insertHtml(d).hideDialog().focus()}}}),r=e("textarea",o.div);r[0].focus()})}),KindEditor.plugin("emoticons",function(e){var t=this,n="emoticons",i=t.emoticonsPath||t.pluginsPath+"emoticons/images/",a=void 0===t.allowPreviewEmoticons||t.allowPreviewEmoticons,o=1;t.clickToolbar(n,function(){function r(n,a,o){k?n.mouseover(function(){a>v?(k.css("left",0),k.css("right","")):(k.css("left",""),k.css("right",0)),w.attr("src",i+o+".gif"),e(this).addClass("ke-on")}):n.mouseover(function(){e(this).addClass("ke-on")}),n.mouseout(function(){e(this).removeClass("ke-on")}),n.click(function(e){t.insertHtml('').hideMenu().focus(),e.stop()})}function l(t,n){var a=document.createElement("table");n.append(a),k&&(e(a).mouseover(function(){k.show("block")}),e(a).mouseout(function(){k.hide()}),b.push(e(a))),a.className="ke-table",a.cellPadding=0,a.cellSpacing=0,a.border=0;for(var o=(t-1)*m+f,l=0;l').css("background-position","-"+24*o+"px 0px").css("background-image","url("+i+"static.gif)");c.append(h),b.push(c),o++}return a}function s(){e.each(b,function(){this.unbind()})}function d(e,t){e.click(function(e){s(),C.parentNode.removeChild(C),S.remove(),C=l(t,_),c(t),o=t,e.stop()})}function c(t){S=e('
          '),_.append(S);for(var n=1;n<=g;n++){if(t!==n){var i=e('
          ['+n+"]");d(i,n),S.append(i),b.push(i)}else S.append(e("@["+n+"]"));S.append(e("@ "))}}var u=5,p=9,h=135,f=0,m=u*p,g=Math.ceil(h/m),v=Math.floor(p/2),_=e('
          '),b=[],y=t.createMenu({name:n,beforeRemove:function(){s()}});y.div.append(_);var k,w;a&&(k=e('
          ').css("right",0),w=e(''),_.append(k),k.append(w));var S,C=l(o,_);c(o)})}),KindEditor.plugin("filemanager",function(e){function t(e,t,n){return e+" ("+Math.ceil(t/1024)+"KB, "+n+")"}function n(e,n){n.is_dir?e.attr("title",n.filename):e.attr("title",t(n.filename,n.filesize,n.datetime))}var i=this,a="filemanager",o=e.undef(i.fileManagerJson,i.basePath+"php/file_manager_json.php"),r=i.pluginsPath+a+"/images/",l=i.lang(a+".");i.plugin.filemanagerDialog=function(t){function s(t,n,a){var r="path="+t+"&order="+n+"&dir="+m;b.showLoading(i.lang("ajaxLoading")),e.ajax(e.addParam(o,r+"&"+(new Date).getTime()),function(e){b.hideLoading(),a(e)})}function d(t,n,i,a){var o=e.formatUrl(n.current_url+i.filename,"absolute"),r=encodeURIComponent(n.current_dir_path+i.filename+"/");i.is_dir?t.click(function(e){s(r,C.val(),a)}):i.is_photo?t.click(function(e){v.call(this,o,i.filename)}):t.click(function(e){v.call(this,o,i.filename)}),E.push(t)}function c(t,n){function i(){"VIEW"==S.val()?s(t.current_dir_path,C.val(),p):s(t.current_dir_path,C.val(),u)}e.each(E,function(){this.unbind()}),w.unbind(),S.unbind(),C.unbind(),t.current_dir_path&&w.click(function(e){s(t.moveup_dir_path,C.val(),n)}),S.change(i),C.change(i),k.html("")}function u(t){c(t,u);var n=document.createElement("table");n.className="ke-table",n.cellPadding=0,n.cellSpacing=0,n.border=0,k.append(n);for(var i=t.file_list,a=0,o=i.length;a'),m=e(p[0].insertCell(0)).addClass("ke-cell ke-name").append(f).append(document.createTextNode(" "+s.filename));!s.is_dir||s.has_file?(p.css("cursor","pointer"),m.attr("title",s.filename),d(m,t,s,u)):m.attr("title",l.emptyFolder),e(p[0].insertCell(1)).addClass("ke-cell ke-size").html(s.is_dir?"-":Math.ceil(s.filesize/1024)+"KB"),e(p[0].insertCell(2)).addClass("ke-cell ke-datetime").html(s.datetime)}}function p(t){c(t,p);for(var i=t.file_list,a=0,o=i.length;a');k.append(u);var h=e('
          ').mouseover(function(t){e(this).addClass("ke-on")}).mouseout(function(t){e(this).removeClass("ke-on")});u.append(h);var f=t.current_url+s.filename,m=s.is_dir?r+"folder-64.gif":s.is_photo?f:r+"file-64.gif",g=e(''+s.filename+'');!s.is_dir||s.has_file?(h.css("cursor","pointer"),n(h,s),d(h,t,s,p)):h.attr("title",l.emptyFolder),h.append(g),u.append('
          '+s.filename+"
          ")}}var h=e.undef(t.width,650),f=e.undef(t.height,510),m=e.undef(t.dirName,""),g=e.undef(t.viewType,"VIEW").toUpperCase(),v=t.clickFn,_=['
          ','
          ','
          ',' ',''+l.moveup+"","
          ",'
          ',l.viewType+' ",l.orderType+' ","
          ",'
          ',"
          ",'
          ',"
          "].join(""),b=i.createDialog({name:a,width:h,height:f,title:i.lang(a),body:_}),y=b.div,k=e(".ke-plugin-filemanager-body",y),w=(e('[name="moveupImg"]',y),e('[name="moveupLink"]',y)),S=(e('[name="viewServer"]',y),e('[name="viewType"]',y)),C=e('[name="orderType"]',y),E=[];return S.val(g),s("",C.val(),"VIEW"==g?p:u),b}}),KindEditor.plugin("flash",function(e){var t=this,n="flash",i=t.lang(n+"."),a=e.undef(t.allowFlashUpload,!0),o=e.undef(t.allowFileManager,!1),r=e.undef(t.formatUploadUrl,!0),l=e.undef(t.extraFileUploadParams,{}),s=e.undef(t.filePostName,"imgFile"),d=e.undef(t.uploadJson,t.basePath+"php/upload_json.php");t.plugin.flash={edit:function(){var c=['
          ','
          ','",'  ','  ','','',"","
          ",'
          ','",' ',"
          ",'
          ','",' ',"
          ","
          "].join(""),u=t.createDialog({name:n,width:450,title:t.lang(n),body:c,yesBtn:{name:t.lang("yes"),click:function(n){var i=e.trim(h.val()),a=m.val(),o=g.val();if("http://"==i||e.invalidUrl(i))return alert(t.lang("invalidUrl")),void h[0].focus();if(!/^\d*$/.test(a))return alert(t.lang("invalidWidth")),void m[0].focus();if(!/^\d*$/.test(o))return alert(t.lang("invalidHeight")),void g[0].focus();var r=e.mediaImg(t.themesPath+"common/blank.gif",{src:i,type:e.mediaType(".swf"),width:a,height:o,quality:"high"});t.insertHtml(r).hideDialog().focus()}}}),p=u.div,h=e('[name="url"]',p),f=e('[name="viewServer"]',p),m=e('[name="width"]',p),g=e('[name="height"]',p);if(h.val("http://"),a){var v=e.uploadbutton({button:e(".ke-upload-button",p)[0],fieldName:s,extraParams:l,url:e.addParam(d,"dir=flash"),afterUpload:function(i){if(u.hideLoading(),0===i.error){var a=i.url;r&&(a=e.formatUrl(a,"absolute")),h.val(a),t.afterUpload&&t.afterUpload.call(t,a,i,n),alert(t.lang("uploadSuccess"))}else alert(i.message)},afterError:function(e){u.hideLoading(),t.errorDialog(e)}});v.fileBox.change(function(e){u.showLoading(t.lang("uploadLoading")),v.submit()})}else e(".ke-upload-button",p).hide();o?f.click(function(n){t.loadPlugin("filemanager",function(){t.plugin.filemanagerDialog({viewType:"LIST",dirName:"flash",clickFn:function(n,i){t.dialogs.length>1&&(e('[name="url"]',p).val(n),t.afterSelectFile&&t.afterSelectFile.call(t,n),t.hideDialog())}})})}):f.hide();var _=t.plugin.getSelectedFlash();if(_){var b=e.mediaAttrs(_.attr("data-ke-tag"));h.val(b.src),m.val(e.removeUnit(_.css("width"))||b.width||0),g.val(e.removeUnit(_.css("height"))||b.height||0)}h[0].focus(),h[0].select()},"delete":function(){t.plugin.getSelectedFlash().remove(),t.addBookmark()}},t.clickToolbar(n,t.plugin.flash.edit)}),KindEditor.plugin("image",function(e){var t=this,n="image",i=e.undef(t.allowImageUpload,!0),a=e.undef(t.allowImageRemote,!0),o=e.undef(t.formatUploadUrl,!0),r=e.undef(t.allowFileManager,!1),l=e.undef(t.uploadJson,t.basePath+"php/upload_json.php"),s=e.undef(t.imageTabIndex,0),d=t.pluginsPath+"image/images/",c=e.undef(t.extraFileUploadParams,{}),u=e.undef(t.filePostName,"imgFile"),p=e.undef(t.fillDescAfterUploadImage,!1),h=t.lang(n+".");t.plugin.imageDialog=function(i){function a(e,t){U.val(e),A.val(t),R=e,M=t}var s=(i.imageUrl,e.undef(i.imageWidth,""),e.undef(i.imageHeight,""),e.undef(i.imageTitle,""),e.undef(i.imageAlign,""),e.undef(i.showRemote,!0)),f=e.undef(i.showLocal,!0),m=e.undef(i.tabIndex,0),g=i.clickFn,v="kindeditor_upload_iframe_"+(new Date).getTime(),_=[];for(var b in c)_.push('');var y,k=['
          ','
          ','",'","
          "].join(""),w=f||r?450:400,S=f&&s?300:250,C=t.createDialog({name:n,width:w,height:S,title:t.lang(n),body:k,yesBtn:{name:t.lang("yes"),click:function(n){if(!C.isLoading){if(f&&s&&y&&1===y.selectedIndex||!s)return""==D.fileBox.val()?void alert(t.lang("pleaseSelectFile")):(C.showLoading(t.lang("uploadLoading")),D.submit(),void T.val(""));var i=e.trim(x.val()),a=U.val(),o=A.val(),r=N.val(),l="";return I.each(function(){if(this.checked)return l=this.value,!1}),"http://"==i||e.invalidUrl(i)?(alert(t.lang("invalidUrl")),void x[0].focus()):/^\d*$/.test(a)?/^\d*$/.test(o)?void g.call(t,i,r,a,o,0,l):(alert(t.lang("invalidHeight")),void A[0].focus()):(alert(t.lang("invalidWidth")),void U[0].focus())}}},beforeRemove:function(){K.unbind(),U.unbind(),A.unbind(),F.unbind()}}),E=C.div,x=e('[name="url"]',E),T=e('[name="localUrl"]',E),K=e('[name="viewServer"]',E),U=e('.tab1 [name="width"]',E),A=e('.tab1 [name="height"]',E),F=e(".ke-refresh-btn",E),N=e('.tab1 [name="title"]',E),I=e('.tab1 [name="align"]',E);s&&f?(y=e.tabs({src:e(".tabs",E),afterSelect:function(e){}}),y.add({title:h.remoteImage,panel:e(".tab1",E)}),y.add({title:h.localImage,panel:e(".tab2",E)}),y.select(m)):s?e(".tab1",E).show():f&&e(".tab2",E).show();var D=e.uploadbutton({button:e(".ke-upload-button",E)[0],fieldName:u,form:e(".ke-form",E),target:v,width:70,afterUpload:function(i){if(C.hideLoading(),0===i.error){var a=i.url;o&&(a=e.formatUrl(a,"absolute")),t.afterUpload&&t.afterUpload.call(t,a,i,n),p?(e(".ke-dialog-row #remoteUrl",E).val(a),e(".ke-tabs-li",E)[0].click(),e(".ke-refresh-btn",E).click()):g.call(t,a,i.title,i.width,i.height,i.border,i.align)}else alert(i.message)},afterError:function(e){C.hideLoading(),t.errorDialog(e)}});D.fileBox.change(function(e){T.val(D.fileBox.val())}),r?K.click(function(n){t.loadPlugin("filemanager",function(){t.plugin.filemanagerDialog({viewType:"VIEW",dirName:"image",clickFn:function(n,i){t.dialogs.length>1&&(e('[name="url"]',E).val(n),t.afterSelectFile&&t.afterSelectFile.call(t,n),t.hideDialog())}})})}):K.hide();var R=0,M=0;return F.click(function(t){var n=e('',document).css({position:"absolute",visibility:"hidden",top:0,left:"-1000px"});n.bind("load",function(){a(n.width(),n.height()),n.remove()}),e(document.body).append(n)}),U.change(function(e){R>0&&A.val(Math.round(M/R*parseInt(this.value,10)))}),A.change(function(e){M>0&&U.val(Math.round(R/M*parseInt(this.value,10)))}),x.val(i.imageUrl),a(i.imageWidth,i.imageHeight),N.val(i.imageTitle),I.each(function(){if(this.value===i.imageAlign)return this.checked=!0,!1}),s&&0===m&&(x[0].focus(),x[0].select()),C},t.plugin.image={edit:function(){var e=t.plugin.getSelectedImage();t.plugin.imageDialog({imageUrl:e?e.attr("data-ke-src"):"http://",imageWidth:e?e.width():"",imageHeight:e?e.height():"",imageTitle:e?e.attr("title"):"",imageAlign:e?e.attr("align"):"",showRemote:a,showLocal:i,tabIndex:e?0:s,clickFn:function(n,i,a,o,r,l){e?(e.attr("src",n),e.attr("data-ke-src",n),e.attr("width",a),e.attr("height",o),e.attr("title",i),e.attr("align",l),e.attr("alt",i)):t.exec("insertimage",n,i,a,o,r,l),setTimeout(function(){t.hideDialog().focus()},0)}})},"delete":function(){var e=t.plugin.getSelectedImage();"a"==e.parent().name&&(e=e.parent()),e.remove(),t.addBookmark()}},t.clickToolbar(n,t.plugin.image.edit)}),KindEditor.plugin("insertfile",function(e){var t=this,n="insertfile",i=e.undef(t.allowFileUpload,!0),a=e.undef(t.allowFileManager,!1),o=e.undef(t.formatUploadUrl,!0),r=e.undef(t.uploadJson,t.basePath+"php/upload_json.php"),l=e.undef(t.extraFileUploadParams,{}),s=e.undef(t.filePostName,"imgFile"),d=t.lang(n+".");t.plugin.fileDialog=function(c){var u=e.undef(c.fileUrl,"http://"),p=e.undef(c.fileTitle,""),h=c.clickFn,f=['
          ','
          ','",'  ','  ','','',"","
          ",'
          ','",'
          ',"
          ","",""].join(""),m=t.createDialog({name:n,width:450,title:t.lang(n),body:f,yesBtn:{name:t.lang("yes"),click:function(n){var i=e.trim(v.val()),a=b.val();return"http://"==i||e.invalidUrl(i)?(alert(t.lang("invalidUrl")),void v[0].focus()):(""===e.trim(a)&&(a=i),void h.call(t,i,a))}}}),g=m.div,v=e('[name="url"]',g),_=e('[name="viewServer"]',g),b=e('[name="title"]',g); +if(i){var y=e.uploadbutton({button:e(".ke-upload-button",g)[0],fieldName:s,url:e.addParam(r,"dir=file"),extraParams:l,afterUpload:function(i){if(m.hideLoading(),0===i.error){var a=i.url;o&&(a=e.formatUrl(a,"absolute")),v.val(a),t.afterUpload&&t.afterUpload.call(t,a,i,n),alert(t.lang("uploadSuccess"))}else alert(i.message)},afterError:function(e){m.hideLoading(),t.errorDialog(e)}});y.fileBox.change(function(e){m.showLoading(t.lang("uploadLoading")),y.submit()})}else e(".ke-upload-button",g).hide();a?_.click(function(n){t.loadPlugin("filemanager",function(){t.plugin.filemanagerDialog({viewType:"LIST",dirName:"file",clickFn:function(n,i){t.dialogs.length>1&&(e('[name="url"]',g).val(n),t.afterSelectFile&&t.afterSelectFile.call(t,n),t.hideDialog())}})})}):_.hide(),v.val(u),b.val(p),v[0].focus(),v[0].select()},t.clickToolbar(n,function(){t.plugin.fileDialog({clickFn:function(e,n){var i=''+n+"";t.insertHtml(i).hideDialog().focus()}})})}),KindEditor.plugin("lineheight",function(e){var t=this,n="lineheight",i=t.lang(n+".");t.clickToolbar(n,function(){var a="",o=t.cmd.commonNode({"*":".line-height"});o&&(a=o.css("line-height"));var r=t.createMenu({name:n,width:150});e.each(i.lineHeight,function(n,i){e.each(i,function(e,n){r.addItem({title:n,checked:a===e,click:function(){t.cmd.toggle('',{span:".line-height="+e}),t.updateState(),t.addBookmark(),t.hideMenu()}})})})})}),KindEditor.plugin("link",function(e){var t=this,n="link";t.plugin.link={edit:function(){var i=t.lang(n+"."),a='
          ',o=t.createDialog({name:n,width:450,title:t.lang(n),body:a,yesBtn:{name:t.lang("yes"),click:function(n){var i=e.trim(l.val());return"http://"==i||e.invalidUrl(i)?(alert(t.lang("invalidUrl")),void l[0].focus()):void t.exec("createlink",i,s.val()).hideDialog().focus()}}}),r=o.div,l=e('input[name="url"]',r),s=e('select[name="type"]',r);l.val("http://"),s[0].options[0]=new Option(i.newWindow,"_blank"),s[0].options[1]=new Option(i.selfWindow,""),t.cmd.selection();var d=t.plugin.getSelectedLink();d&&(t.cmd.range.selectNode(d[0]),t.cmd.select(),l.val(d.attr("data-ke-src")),s.val(d.attr("target"))),l[0].focus(),l[0].select()},"delete":function(){t.exec("unlink",null)}},t.clickToolbar(n,t.plugin.link.edit)}),KindEditor.plugin("map",function(e){var t=this,n="map",i=t.lang(n+".");t.clickToolbar(n,function(){function a(){o=p[0].contentWindow,r=e.iframeDoc(p)}var o,r,l=['
          ','
          ',i.address+' ','','',"","
          ",'
          ',"
          "].join(""),s=t.createDialog({name:n,width:600,title:t.lang(n),body:l,yesBtn:{name:t.lang("yes"),click:function(e){var n=(o.geocoder,o.map),i=n.getCenter().lat()+","+n.getCenter().lng(),a=n.getZoom(),r=n.getMapTypeId(),l="http://maps.googleapis.com/maps/api/staticmap";l+="?center="+encodeURIComponent(i),l+="&zoom="+encodeURIComponent(a),l+="&size=558x360",l+="&maptype="+encodeURIComponent(r),l+="&markers="+encodeURIComponent(i),l+="&language="+t.langType,l+="&sensor=false",t.exec("insertimage",l).hideDialog().focus()}},beforeRemove:function(){u.remove(),r&&r.write(""),p.remove()}}),d=s.div,c=e('[name="address"]',d),u=e('[name="searchBtn"]',d),p=(["",'',"",'',"","",'','
          ',""].join("\n"),e(''));p.bind("load",function(){p.unbind("load"),e.IE?a():setTimeout(a,0)}),e(".ke-map",d).replaceWith(p),u.click(function(){o.search(c.val())})})}),KindEditor.plugin("media",function(e){var t=this,n="media",i=t.lang(n+"."),a=e.undef(t.allowMediaUpload,!0),o=e.undef(t.allowFileManager,!1),r=e.undef(t.formatUploadUrl,!0),l=e.undef(t.extraFileUploadParams,{}),s=e.undef(t.filePostName,"imgFile"),d=e.undef(t.uploadJson,t.basePath+"php/upload_json.php");t.plugin.media={edit:function(){var c=['
          ','
          ','",'  ','  ','','',"","
          ",'
          ','",'',"
          ",'
          ','",'',"
          ",'
          ','",' ',"
          ","
          "].join(""),u=t.createDialog({name:n,width:450,height:230,title:t.lang(n),body:c,yesBtn:{name:t.lang("yes"),click:function(n){var i=e.trim(h.val()),a=m.val(),o=g.val();if("http://"==i||e.invalidUrl(i))return alert(t.lang("invalidUrl")),void h[0].focus();if(!/^\d*$/.test(a))return alert(t.lang("invalidWidth")),void m[0].focus();if(!/^\d*$/.test(o))return alert(t.lang("invalidHeight")),void g[0].focus();var r=e.mediaImg(t.themesPath+"common/blank.gif",{src:i,type:e.mediaType(i),width:a,height:o,autostart:v[0].checked?"true":"false",loop:"true"});t.insertHtml(r).hideDialog().focus()}}}),p=u.div,h=e('[name="url"]',p),f=e('[name="viewServer"]',p),m=e('[name="width"]',p),g=e('[name="height"]',p),v=e('[name="autostart"]',p);if(h.val("http://"),a){var _=e.uploadbutton({button:e(".ke-upload-button",p)[0],fieldName:s,extraParams:l,url:e.addParam(d,"dir=media"),afterUpload:function(i){if(u.hideLoading(),0===i.error){var a=i.url;r&&(a=e.formatUrl(a,"absolute")),h.val(a),t.afterUpload&&t.afterUpload.call(t,a,i,n),alert(t.lang("uploadSuccess"))}else alert(i.message)},afterError:function(e){u.hideLoading(),t.errorDialog(e)}});_.fileBox.change(function(e){u.showLoading(t.lang("uploadLoading")),_.submit()})}else e(".ke-upload-button",p).hide();o?f.click(function(n){t.loadPlugin("filemanager",function(){t.plugin.filemanagerDialog({viewType:"LIST",dirName:"media",clickFn:function(n,i){t.dialogs.length>1&&(e('[name="url"]',p).val(n),t.afterSelectFile&&t.afterSelectFile.call(t,n),t.hideDialog())}})})}):f.hide();var b=t.plugin.getSelectedMedia();if(b){var y=e.mediaAttrs(b.attr("data-ke-tag"));h.val(y.src),m.val(e.removeUnit(b.css("width"))||y.width||0),g.val(e.removeUnit(b.css("height"))||y.height||0),v[0].checked="true"===y.autostart}h[0].focus(),h[0].select()},"delete":function(){t.plugin.getSelectedMedia().remove(),t.addBookmark()}},t.clickToolbar(n,t.plugin.media.edit)}),function(e){function t(e){this.init(e)}e.extend(t,{init:function(t){function n(t,n){e(".ke-status > div",t).hide(),e(".ke-message",t).addClass("ke-error").show().html(e.escape(n))}var i=this;t.afterError=t.afterError||function(e){alert(e)},i.options=t,i.progressbars={},i.div=e(t.container).html(['
          ','
          ','
          ','',"
          ",'
          '+t.uploadDesc+"
          ",'','',"","
          ",'
          ',"
          "].join("")),i.bodyDiv=e(".ke-swfupload-body",i.div);var a={debug:!1,upload_url:t.uploadUrl,flash_url:t.flashUrl,file_post_name:t.filePostName,button_placeholder:e(".ke-swfupload-button > input",i.div)[0],button_image_url:t.buttonImageUrl,button_width:t.buttonWidth,button_height:t.buttonHeight,button_cursor:SWFUpload.CURSOR.HAND,file_types:t.fileTypes,file_types_description:t.fileTypesDesc,file_upload_limit:t.fileUploadLimit,file_size_limit:t.fileSizeLimit,post_params:t.postParams,file_queued_handler:function(e){e.url=i.options.fileIconUrl,i.appendFile(e)},file_queue_error_handler:function(n,i,a){var o="";switch(i){case SWFUpload.QUEUE_ERROR.QUEUE_LIMIT_EXCEEDED:o=t.queueLimitExceeded;break;case SWFUpload.QUEUE_ERROR.FILE_EXCEEDS_SIZE_LIMIT:o=t.fileExceedsSizeLimit;break;case SWFUpload.QUEUE_ERROR.ZERO_BYTE_FILE:o=t.zeroByteFile;break;case SWFUpload.QUEUE_ERROR.INVALID_FILETYPE:o=t.invalidFiletype;break;default:o=t.unknownError}e.DEBUG&&alert(o)},upload_start_handler:function(t){var n=this,i=e('div[data-id="'+t.id+'"]',n.bodyDiv);e(".ke-status > div",i).hide(),e(".ke-progressbar",i).show()},upload_progress_handler:function(e,t,n){var a=Math.round(100*t/n),o=i.progressbars[e.id];o.bar.css("width",Math.round(80*a/100)+"px"),o.percent.html(a+"%")},upload_error_handler:function(t,a,o){if(t&&t.filestatus==SWFUpload.FILE_STATUS.ERROR){var r=e('div[data-id="'+t.id+'"]',i.bodyDiv).eq(0);n(r,i.options.errorMessage)}},upload_success_handler:function(t,a){var o=e('div[data-id="'+t.id+'"]',i.bodyDiv).eq(0),r={};try{r=e.json(a)}catch(l){i.options.afterError.call(this,""+a+"")}return 0!==r.error?void n(o,e.DEBUG?r.message:i.options.errorMessage):(t.url=r.url,e(".ke-img",o).attr("src",t.url).attr("data-status",t.filestatus).data("data",r),void e(".ke-status > div",o).hide())}};i.swfu=new SWFUpload(a),e(".ke-swfupload-startupload input",i.div).click(function(){i.swfu.startUpload()})},getUrlList:function(){var t=[];return e(".ke-img",self.bodyDiv).each(function(){var n=e(this),i=n.attr("data-status");i==SWFUpload.FILE_STATUS.COMPLETE&&t.push(n.data("data"))}),t},removeFile:function(t){var n=this;n.swfu.cancelUpload(t);var i=e('div[data-id="'+t+'"]',n.bodyDiv);e(".ke-photo",i).unbind(),e(".ke-delete",i).unbind(),i.remove()},removeFiles:function(){var t=this;e(".ke-item",t.bodyDiv).each(function(){t.removeFile(e(this).attr("data-id"))})},appendFile:function(t){var n=this,i=e('
          ');n.bodyDiv.append(i);var a=e('
          ').mouseover(function(t){e(this).addClass("ke-on")}).mouseout(function(t){e(this).removeClass("ke-on")});i.append(a);var o=e(''+t.name+'');a.append(o),e('').appendTo(a).click(function(){n.removeFile(t.id)});var r=e('
          ').appendTo(a);e(['
          ','
          ','
          0%
          '].join("")).hide().appendTo(r),e('
          '+n.options.pendingMessage+"
          ").appendTo(r),i.append('
          '+t.name+"
          "),n.progressbars[t.id]={bar:e(".ke-progressbar-bar-inner",a),percent:e(".ke-progressbar-percent",a)}},remove:function(){this.removeFiles(),this.swfu.destroy(),this.div.html("")}}),e.swfupload=function(e,n){return new t(e,n)}}(KindEditor),KindEditor.plugin("multiimage",function(e){var t=this,n="multiimage",i=(e.undef(t.formatUploadUrl,!0),e.undef(t.uploadJson,t.basePath+"php/upload_json.php")),a=t.pluginsPath+"multiimage/images/",o=e.undef(t.imageSizeLimit,"1MB"),r=(e.undef(t.imageFileTypes,"*.jpg;*.gif;*.png"),e.undef(t.imageUploadLimit,20)),l=e.undef(t.filePostName,"imgFile"),s=t.lang(n+".");t.plugin.multiImageDialog=function(d){var c=d.clickFn,u=e.tmpl(s.uploadDesc,{uploadLimit:r,sizeLimit:o}),p=['
          ','
          ',"
          ","
          "].join(""),h=t.createDialog({name:n,width:650,height:510,title:t.lang(n),body:p,previewBtn:{name:s.insertAll,click:function(e){c.call(t,m.getUrlList())}},yesBtn:{name:s.clearAll,click:function(e){m.removeFiles()}},beforeRemove:function(){(!e.IE||e.V<=8)&&m.remove()}}),f=h.div,m=e.swfupload({container:e(".swfupload",f),buttonImageUrl:a+("zh_CN"==t.langType?"select-files-zh_CN.png":"select-files-en.png"),buttonWidth:"zh_CN"==t.langType?72:88,buttonHeight:23,fileIconUrl:a+"image.png",uploadDesc:u,startButtonValue:s.startUpload,uploadUrl:e.addParam(i,"dir=image"),flashUrl:a+"swfupload.swf",filePostName:l,fileTypes:"*.jpg;*.jpeg;*.gif;*.png;*.bmp",fileTypesDesc:"Image Files",fileUploadLimit:r,fileSizeLimit:o,postParams:e.undef(t.extraFileUploadParams,{}),queueLimitExceeded:s.queueLimitExceeded,fileExceedsSizeLimit:s.fileExceedsSizeLimit,zeroByteFile:s.zeroByteFile,invalidFiletype:s.invalidFiletype,unknownError:s.unknownError,pendingMessage:s.pending,errorMessage:s.uploadError,afterError:function(e){t.errorDialog(e)}});return h},t.clickToolbar(n,function(){t.plugin.multiImageDialog({clickFn:function(n){0!==n.length&&(e.each(n,function(e,n){t.afterUpload&&t.afterUpload.call(t,n.url,n,"multiimage"),t.exec("insertimage",n.url,n.title,n.width,n.height,n.border,n.align)}),setTimeout(function(){t.hideDialog().focus()},0))}})})}),function(){window.SWFUpload=function(e){this.initSWFUpload(e)},SWFUpload.prototype.initSWFUpload=function(e){try{this.customSettings={},this.settings=e,this.eventQueue=[],this.movieName="KindEditor_SWFUpload_"+SWFUpload.movieCount++,this.movieElement=null,SWFUpload.instances[this.movieName]=this,this.initSettings(),this.loadFlash(),this.displayDebugInfo()}catch(t){throw delete SWFUpload.instances[this.movieName],t}},SWFUpload.instances={},SWFUpload.movieCount=0,SWFUpload.version="2.2.0 2009-03-25",SWFUpload.QUEUE_ERROR={QUEUE_LIMIT_EXCEEDED:-100,FILE_EXCEEDS_SIZE_LIMIT:-110,ZERO_BYTE_FILE:-120,INVALID_FILETYPE:-130},SWFUpload.UPLOAD_ERROR={HTTP_ERROR:-200,MISSING_UPLOAD_URL:-210,IO_ERROR:-220,SECURITY_ERROR:-230,UPLOAD_LIMIT_EXCEEDED:-240,UPLOAD_FAILED:-250,SPECIFIED_FILE_ID_NOT_FOUND:-260,FILE_VALIDATION_FAILED:-270,FILE_CANCELLED:-280,UPLOAD_STOPPED:-290},SWFUpload.FILE_STATUS={QUEUED:-1,IN_PROGRESS:-2,ERROR:-3,COMPLETE:-4,CANCELLED:-5},SWFUpload.BUTTON_ACTION={SELECT_FILE:-100,SELECT_FILES:-110,START_UPLOAD:-120},SWFUpload.CURSOR={ARROW:-1,HAND:-2},SWFUpload.WINDOW_MODE={WINDOW:"window",TRANSPARENT:"transparent",OPAQUE:"opaque"},SWFUpload.completeURL=function(e){if("string"!=typeof e||e.match(/^https?:\/\//i)||e.match(/^\//))return e;var t=(window.location.protocol+"//"+window.location.hostname+(window.location.port?":"+window.location.port:""),window.location.pathname.lastIndexOf("/"));return t<=0?path="/":path=window.location.pathname.substr(0,t)+"/",path+e},SWFUpload.prototype.initSettings=function(){this.ensureDefault=function(e,t){this.settings[e]=void 0==this.settings[e]?t:this.settings[e]},this.ensureDefault("upload_url",""),this.ensureDefault("preserve_relative_urls",!1),this.ensureDefault("file_post_name","Filedata"),this.ensureDefault("post_params",{}),this.ensureDefault("use_query_string",!1),this.ensureDefault("requeue_on_error",!1),this.ensureDefault("http_success",[]),this.ensureDefault("assume_success_timeout",0),this.ensureDefault("file_types","*.*"),this.ensureDefault("file_types_description","All Files"),this.ensureDefault("file_size_limit",0),this.ensureDefault("file_upload_limit",0),this.ensureDefault("file_queue_limit",0),this.ensureDefault("flash_url","swfupload.swf"),this.ensureDefault("prevent_swf_caching",!0),this.ensureDefault("button_image_url",""),this.ensureDefault("button_width",1),this.ensureDefault("button_height",1),this.ensureDefault("button_text",""),this.ensureDefault("button_text_style","color: #000000; font-size: 16pt;"),this.ensureDefault("button_text_top_padding",0),this.ensureDefault("button_text_left_padding",0),this.ensureDefault("button_action",SWFUpload.BUTTON_ACTION.SELECT_FILES),this.ensureDefault("button_disabled",!1),this.ensureDefault("button_placeholder_id",""),this.ensureDefault("button_placeholder",null),this.ensureDefault("button_cursor",SWFUpload.CURSOR.ARROW),this.ensureDefault("button_window_mode",SWFUpload.WINDOW_MODE.WINDOW),this.ensureDefault("debug",!1),this.settings.debug_enabled=this.settings.debug,this.settings.return_upload_start_handler=this.returnUploadStart,this.ensureDefault("swfupload_loaded_handler",null),this.ensureDefault("file_dialog_start_handler",null),this.ensureDefault("file_queued_handler",null),this.ensureDefault("file_queue_error_handler",null),this.ensureDefault("file_dialog_complete_handler",null),this.ensureDefault("upload_start_handler",null),this.ensureDefault("upload_progress_handler",null),this.ensureDefault("upload_error_handler",null),this.ensureDefault("upload_success_handler",null),this.ensureDefault("upload_complete_handler",null),this.ensureDefault("debug_handler",this.debugMessage),this.ensureDefault("custom_settings",{}),this.customSettings=this.settings.custom_settings,this.settings.prevent_swf_caching&&(this.settings.flash_url=this.settings.flash_url+(this.settings.flash_url.indexOf("?")<0?"?":"&")+"preventswfcaching="+(new Date).getTime()),this.settings.preserve_relative_urls||(this.settings.upload_url=SWFUpload.completeURL(this.settings.upload_url),this.settings.button_image_url=SWFUpload.completeURL(this.settings.button_image_url)),delete this.ensureDefault},SWFUpload.prototype.loadFlash=function(){var e,t;if(null!==document.getElementById(this.movieName))throw"ID "+this.movieName+" is already in use. The Flash Object could not be added";if(e=document.getElementById(this.settings.button_placeholder_id)||this.settings.button_placeholder,void 0==e)throw"Could not find the placeholder element: "+this.settings.button_placeholder_id;t=document.createElement("div"),t.innerHTML=this.getFlashHTML(),e.parentNode.replaceChild(t.firstChild,e),void 0==window[this.movieName]&&(window[this.movieName]=this.getMovieElement())},SWFUpload.prototype.getFlashHTML=function(){var e="";return KindEditor.IE&&KindEditor.V>8&&(e=' classid = "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"'),['','','','','','','',""].join("")},SWFUpload.prototype.getFlashVars=function(){var e=this.buildParamString(),t=this.settings.http_success.join(",");return["movieName=",encodeURIComponent(this.movieName),"&uploadURL=",encodeURIComponent(this.settings.upload_url),"&useQueryString=",encodeURIComponent(this.settings.use_query_string),"&requeueOnError=",encodeURIComponent(this.settings.requeue_on_error),"&httpSuccess=",encodeURIComponent(t),"&assumeSuccessTimeout=",encodeURIComponent(this.settings.assume_success_timeout),"&params=",encodeURIComponent(e),"&filePostName=",encodeURIComponent(this.settings.file_post_name),"&fileTypes=",encodeURIComponent(this.settings.file_types),"&fileTypesDescription=",encodeURIComponent(this.settings.file_types_description),"&fileSizeLimit=",encodeURIComponent(this.settings.file_size_limit),"&fileUploadLimit=",encodeURIComponent(this.settings.file_upload_limit),"&fileQueueLimit=",encodeURIComponent(this.settings.file_queue_limit),"&debugEnabled=",encodeURIComponent(this.settings.debug_enabled),"&buttonImageURL=",encodeURIComponent(this.settings.button_image_url),"&buttonWidth=",encodeURIComponent(this.settings.button_width),"&buttonHeight=",encodeURIComponent(this.settings.button_height),"&buttonText=",encodeURIComponent(this.settings.button_text),"&buttonTextTopPadding=",encodeURIComponent(this.settings.button_text_top_padding),"&buttonTextLeftPadding=",encodeURIComponent(this.settings.button_text_left_padding),"&buttonTextStyle=",encodeURIComponent(this.settings.button_text_style),"&buttonAction=",encodeURIComponent(this.settings.button_action),"&buttonDisabled=",encodeURIComponent(this.settings.button_disabled),"&buttonCursor=",encodeURIComponent(this.settings.button_cursor)].join("")},SWFUpload.prototype.getMovieElement=function(){if(void 0==this.movieElement&&(this.movieElement=document.getElementById(this.movieName)),null===this.movieElement)throw"Could not find Flash element";return this.movieElement},SWFUpload.prototype.buildParamString=function(){var e=this.settings.post_params,t=[];if("object"==typeof e)for(var n in e)e.hasOwnProperty(n)&&t.push(encodeURIComponent(n.toString())+"="+encodeURIComponent(e[n].toString()));return t.join("&")},SWFUpload.prototype.destroy=function(){try{this.cancelUpload(null,!1);var e=null;if(e=this.getMovieElement(),e&&"unknown"==typeof e.CallFunction){for(var t in e)try{"function"==typeof e[t]&&(e[t]=null)}catch(n){}try{e.parentNode.removeChild(e)}catch(i){}}return window[this.movieName]=null,SWFUpload.instances[this.movieName]=null,delete SWFUpload.instances[this.movieName],this.movieElement=null,this.settings=null,this.customSettings=null,this.eventQueue=null,this.movieName=null,!0}catch(a){return!1}},SWFUpload.prototype.displayDebugInfo=function(){this.debug(["---SWFUpload Instance Info---\n","Version: ",SWFUpload.version,"\n","Movie Name: ",this.movieName,"\n","Settings:\n","\t","upload_url: ",this.settings.upload_url,"\n","\t","flash_url: ",this.settings.flash_url,"\n","\t","use_query_string: ",this.settings.use_query_string.toString(),"\n","\t","requeue_on_error: ",this.settings.requeue_on_error.toString(),"\n","\t","http_success: ",this.settings.http_success.join(", "),"\n","\t","assume_success_timeout: ",this.settings.assume_success_timeout,"\n","\t","file_post_name: ",this.settings.file_post_name,"\n","\t","post_params: ",this.settings.post_params.toString(),"\n","\t","file_types: ",this.settings.file_types,"\n","\t","file_types_description: ",this.settings.file_types_description,"\n","\t","file_size_limit: ",this.settings.file_size_limit,"\n","\t","file_upload_limit: ",this.settings.file_upload_limit,"\n","\t","file_queue_limit: ",this.settings.file_queue_limit,"\n","\t","debug: ",this.settings.debug.toString(),"\n","\t","prevent_swf_caching: ",this.settings.prevent_swf_caching.toString(),"\n","\t","button_placeholder_id: ",this.settings.button_placeholder_id.toString(),"\n","\t","button_placeholder: ",this.settings.button_placeholder?"Set":"Not Set","\n","\t","button_image_url: ",this.settings.button_image_url.toString(),"\n","\t","button_width: ",this.settings.button_width.toString(),"\n","\t","button_height: ",this.settings.button_height.toString(),"\n","\t","button_text: ",this.settings.button_text.toString(),"\n","\t","button_text_style: ",this.settings.button_text_style.toString(),"\n","\t","button_text_top_padding: ",this.settings.button_text_top_padding.toString(),"\n","\t","button_text_left_padding: ",this.settings.button_text_left_padding.toString(),"\n","\t","button_action: ",this.settings.button_action.toString(),"\n","\t","button_disabled: ",this.settings.button_disabled.toString(),"\n","\t","custom_settings: ",this.settings.custom_settings.toString(),"\n","Event Handlers:\n","\t","swfupload_loaded_handler assigned: ",("function"==typeof this.settings.swfupload_loaded_handler).toString(),"\n","\t","file_dialog_start_handler assigned: ",("function"==typeof this.settings.file_dialog_start_handler).toString(),"\n","\t","file_queued_handler assigned: ",("function"==typeof this.settings.file_queued_handler).toString(),"\n","\t","file_queue_error_handler assigned: ",("function"==typeof this.settings.file_queue_error_handler).toString(),"\n","\t","upload_start_handler assigned: ",("function"==typeof this.settings.upload_start_handler).toString(),"\n","\t","upload_progress_handler assigned: ",("function"==typeof this.settings.upload_progress_handler).toString(),"\n","\t","upload_error_handler assigned: ",("function"==typeof this.settings.upload_error_handler).toString(),"\n","\t","upload_success_handler assigned: ",("function"==typeof this.settings.upload_success_handler).toString(),"\n","\t","upload_complete_handler assigned: ",("function"==typeof this.settings.upload_complete_handler).toString(),"\n","\t","debug_handler assigned: ",("function"==typeof this.settings.debug_handler).toString(),"\n"].join(""))},SWFUpload.prototype.addSetting=function(e,t,n){return void 0==t?this.settings[e]=n:this.settings[e]=t},SWFUpload.prototype.getSetting=function(e){return void 0!=this.settings[e]?this.settings[e]:""},SWFUpload.prototype.callFlash=function(functionName,argumentArray){argumentArray=argumentArray||[];var movieElement=this.getMovieElement(),returnValue,returnString;try{returnString=movieElement.CallFunction(''+__flash__argumentsToXML(argumentArray,0)+""),returnValue=eval(returnString)}catch(ex){throw"Call to "+functionName+" failed"}return void 0!=returnValue&&"object"==typeof returnValue.post&&(returnValue=this.unescapeFilePostParams(returnValue)),returnValue},SWFUpload.prototype.selectFile=function(){this.callFlash("SelectFile")},SWFUpload.prototype.selectFiles=function(){this.callFlash("SelectFiles")},SWFUpload.prototype.startUpload=function(e){this.callFlash("StartUpload",[e])},SWFUpload.prototype.cancelUpload=function(e,t){t!==!1&&(t=!0),this.callFlash("CancelUpload",[e,t])},SWFUpload.prototype.stopUpload=function(){this.callFlash("StopUpload")},SWFUpload.prototype.getStats=function(){return this.callFlash("GetStats")},SWFUpload.prototype.setStats=function(e){this.callFlash("SetStats",[e])},SWFUpload.prototype.getFile=function(e){return"number"==typeof e?this.callFlash("GetFileByIndex",[e]):this.callFlash("GetFile",[e])},SWFUpload.prototype.addFileParam=function(e,t,n){return this.callFlash("AddFileParam",[e,t,n])},SWFUpload.prototype.removeFileParam=function(e,t){this.callFlash("RemoveFileParam",[e,t])},SWFUpload.prototype.setUploadURL=function(e){this.settings.upload_url=e.toString(),this.callFlash("SetUploadURL",[e])},SWFUpload.prototype.setPostParams=function(e){this.settings.post_params=e,this.callFlash("SetPostParams",[e])},SWFUpload.prototype.addPostParam=function(e,t){this.settings.post_params[e]=t,this.callFlash("SetPostParams",[this.settings.post_params])},SWFUpload.prototype.removePostParam=function(e){delete this.settings.post_params[e],this.callFlash("SetPostParams",[this.settings.post_params])},SWFUpload.prototype.setFileTypes=function(e,t){this.settings.file_types=e,this.settings.file_types_description=t,this.callFlash("SetFileTypes",[e,t])},SWFUpload.prototype.setFileSizeLimit=function(e){this.settings.file_size_limit=e,this.callFlash("SetFileSizeLimit",[e])},SWFUpload.prototype.setFileUploadLimit=function(e){this.settings.file_upload_limit=e,this.callFlash("SetFileUploadLimit",[e])},SWFUpload.prototype.setFileQueueLimit=function(e){this.settings.file_queue_limit=e,this.callFlash("SetFileQueueLimit",[e])},SWFUpload.prototype.setFilePostName=function(e){this.settings.file_post_name=e,this.callFlash("SetFilePostName",[e])},SWFUpload.prototype.setUseQueryString=function(e){this.settings.use_query_string=e,this.callFlash("SetUseQueryString",[e])},SWFUpload.prototype.setRequeueOnError=function(e){this.settings.requeue_on_error=e,this.callFlash("SetRequeueOnError",[e])},SWFUpload.prototype.setHTTPSuccess=function(e){"string"==typeof e&&(e=e.replace(" ","").split(",")),this.settings.http_success=e,this.callFlash("SetHTTPSuccess",[e])},SWFUpload.prototype.setAssumeSuccessTimeout=function(e){this.settings.assume_success_timeout=e,this.callFlash("SetAssumeSuccessTimeout",[e])},SWFUpload.prototype.setDebugEnabled=function(e){this.settings.debug_enabled=e,this.callFlash("SetDebugEnabled",[e])},SWFUpload.prototype.setButtonImageURL=function(e){void 0==e&&(e=""),this.settings.button_image_url=e,this.callFlash("SetButtonImageURL",[e])},SWFUpload.prototype.setButtonDimensions=function(e,t){this.settings.button_width=e,this.settings.button_height=t;var n=this.getMovieElement();void 0!=n&&(n.style.width=e+"px",n.style.height=t+"px"),this.callFlash("SetButtonDimensions",[e,t])},SWFUpload.prototype.setButtonText=function(e){this.settings.button_text=e,this.callFlash("SetButtonText",[e])},SWFUpload.prototype.setButtonTextPadding=function(e,t){this.settings.button_text_top_padding=t,this.settings.button_text_left_padding=e,this.callFlash("SetButtonTextPadding",[e,t])},SWFUpload.prototype.setButtonTextStyle=function(e){this.settings.button_text_style=e,this.callFlash("SetButtonTextStyle",[e])},SWFUpload.prototype.setButtonDisabled=function(e){this.settings.button_disabled=e,this.callFlash("SetButtonDisabled",[e])},SWFUpload.prototype.setButtonAction=function(e){this.settings.button_action=e,this.callFlash("SetButtonAction",[e])},SWFUpload.prototype.setButtonCursor=function(e){this.settings.button_cursor=e,this.callFlash("SetButtonCursor",[e])},SWFUpload.prototype.queueEvent=function(e,t){void 0==t?t=[]:t instanceof Array||(t=[t]);var n=this;if("function"==typeof this.settings[e])this.eventQueue.push(function(){this.settings[e].apply(this,t)}),setTimeout(function(){n.executeNextEvent()},0);else if(null!==this.settings[e])throw"Event handler "+e+" is unknown or is not a function"; +},SWFUpload.prototype.executeNextEvent=function(){var e=this.eventQueue?this.eventQueue.shift():null;"function"==typeof e&&e.apply(this)},SWFUpload.prototype.unescapeFilePostParams=function(e){var t,n=/[$]([0-9a-f]{4})/i,i={};if(void 0!=e){for(var a in e.post)if(e.post.hasOwnProperty(a)){t=a;for(var o;null!==(o=n.exec(t));)t=t.replace(o[0],String.fromCharCode(parseInt("0x"+o[1],16)));i[t]=e.post[a]}e.post=i}return e},SWFUpload.prototype.testExternalInterface=function(){try{return this.callFlash("TestExternalInterface")}catch(e){return!1}},SWFUpload.prototype.flashReady=function(){var e=this.getMovieElement();return e?(this.cleanUp(e),void this.queueEvent("swfupload_loaded_handler")):void this.debug("Flash called back ready but the flash movie can't be found.")},SWFUpload.prototype.cleanUp=function(e){try{if(this.movieElement&&"unknown"==typeof e.CallFunction){this.debug("Removing Flash functions hooks (this should only run in IE and should prevent memory leaks)");for(var t in e)try{"function"==typeof e[t]&&(e[t]=null)}catch(n){}}}catch(i){}window.__flash__removeCallback=function(e,t){try{e&&(e[t]=null)}catch(n){}}},SWFUpload.prototype.fileDialogStart=function(){this.queueEvent("file_dialog_start_handler")},SWFUpload.prototype.fileQueued=function(e){e=this.unescapeFilePostParams(e),this.queueEvent("file_queued_handler",e)},SWFUpload.prototype.fileQueueError=function(e,t,n){e=this.unescapeFilePostParams(e),this.queueEvent("file_queue_error_handler",[e,t,n])},SWFUpload.prototype.fileDialogComplete=function(e,t,n){this.queueEvent("file_dialog_complete_handler",[e,t,n])},SWFUpload.prototype.uploadStart=function(e){e=this.unescapeFilePostParams(e),this.queueEvent("return_upload_start_handler",e)},SWFUpload.prototype.returnUploadStart=function(e){var t;if("function"==typeof this.settings.upload_start_handler)e=this.unescapeFilePostParams(e),t=this.settings.upload_start_handler.call(this,e);else if(void 0!=this.settings.upload_start_handler)throw"upload_start_handler must be a function";void 0===t&&(t=!0),t=!!t,this.callFlash("ReturnUploadStart",[t])},SWFUpload.prototype.uploadProgress=function(e,t,n){e=this.unescapeFilePostParams(e),this.queueEvent("upload_progress_handler",[e,t,n])},SWFUpload.prototype.uploadError=function(e,t,n){e=this.unescapeFilePostParams(e),this.queueEvent("upload_error_handler",[e,t,n])},SWFUpload.prototype.uploadSuccess=function(e,t,n){e=this.unescapeFilePostParams(e),this.queueEvent("upload_success_handler",[e,t,n])},SWFUpload.prototype.uploadComplete=function(e){e=this.unescapeFilePostParams(e),this.queueEvent("upload_complete_handler",e)},SWFUpload.prototype.debug=function(e){this.queueEvent("debug_handler",e)},SWFUpload.prototype.debugMessage=function(e){if(this.settings.debug){var t,n=[];if("object"==typeof e&&"string"==typeof e.name&&"string"==typeof e.message){for(var i in e)e.hasOwnProperty(i)&&n.push(i+": "+e[i]);t=n.join("\n")||"",n=t.split("\n"),t="EXCEPTION: "+n.join("\nEXCEPTION: "),SWFUpload.Console.writeLine(t)}else SWFUpload.Console.writeLine(e)}},SWFUpload.Console={},SWFUpload.Console.writeLine=function(e){var t,n;try{t=document.getElementById("SWFUpload_Console"),t||(n=document.createElement("form"),document.getElementsByTagName("body")[0].appendChild(n),t=document.createElement("textarea"),t.id="SWFUpload_Console",t.style.fontFamily="monospace",t.setAttribute("wrap","off"),t.wrap="off",t.style.overflow="auto",t.style.width="700px",t.style.height="350px",t.style.margin="5px",n.appendChild(t)),t.value+=e+"\n",t.scrollTop=t.scrollHeight-t.clientHeight}catch(i){alert("Exception: "+i.name+" Message: "+i.message)}}}(),function(){"function"==typeof SWFUpload&&(SWFUpload.queue={},SWFUpload.prototype.initSettings=function(e){return function(){"function"==typeof e&&e.call(this),this.queueSettings={},this.queueSettings.queue_cancelled_flag=!1,this.queueSettings.queue_upload_count=0,this.queueSettings.user_upload_complete_handler=this.settings.upload_complete_handler,this.queueSettings.user_upload_start_handler=this.settings.upload_start_handler,this.settings.upload_complete_handler=SWFUpload.queue.uploadCompleteHandler,this.settings.upload_start_handler=SWFUpload.queue.uploadStartHandler,this.settings.queue_complete_handler=this.settings.queue_complete_handler||null}}(SWFUpload.prototype.initSettings),SWFUpload.prototype.startUpload=function(e){this.queueSettings.queue_cancelled_flag=!1,this.callFlash("StartUpload",[e])},SWFUpload.prototype.cancelQueue=function(){this.queueSettings.queue_cancelled_flag=!0,this.stopUpload();for(var e=this.getStats();e.files_queued>0;)this.cancelUpload(),e=this.getStats()},SWFUpload.queue.uploadStartHandler=function(e){var t;return"function"==typeof this.queueSettings.user_upload_start_handler&&(t=this.queueSettings.user_upload_start_handler.call(this,e)),t=t!==!1,this.queueSettings.queue_cancelled_flag=!t,t},SWFUpload.queue.uploadCompleteHandler=function(e){var t,n=this.queueSettings.user_upload_complete_handler;if(e.filestatus===SWFUpload.FILE_STATUS.COMPLETE&&this.queueSettings.queue_upload_count++,t="function"==typeof n?n.call(this,e)!==!1:e.filestatus!==SWFUpload.FILE_STATUS.QUEUED){var i=this.getStats();i.files_queued>0&&this.queueSettings.queue_cancelled_flag===!1?this.startUpload():this.queueSettings.queue_cancelled_flag===!1?(this.queueEvent("queue_complete_handler",[this.queueSettings.queue_upload_count]),this.queueSettings.queue_upload_count=0):(this.queueSettings.queue_cancelled_flag=!1,this.queueSettings.queue_upload_count=0)}})}(),KindEditor.plugin("pagebreak",function(e){var t=this,n="pagebreak",i=e.undef(t.pagebreakHtml,'
          ');t.clickToolbar(n,function(){var n=t.cmd,a=n.range;t.focus();var o="br"==t.newlineTag||e.WEBKIT?"":'';if(t.insertHtml(i+o),""!==o){var r=e("#__kindeditor_tail_tag__",t.edit.doc);a.selectNodeContents(r[0]),r.removeAttr("id"),n.select()}})}),KindEditor.plugin("plainpaste",function(e){var t=this,n="plainpaste";t.clickToolbar(n,function(){var i=t.lang(n+"."),a='
          '+i.comment+'
          ',o=t.createDialog({name:n,width:450,title:t.lang(n),body:a,yesBtn:{name:t.lang("yes"),click:function(n){var i=r.val();i=e.escape(i),i=i.replace(/ {2}/g,"  "),i="p"==t.newlineTag?i.replace(/^/,"

          ").replace(/$/,"

          ").replace(/\n/g,"

          "):i.replace(/\n/g,"
          $&"),t.insertHtml(i).hideDialog().focus()}}}),r=e("textarea",o.div);r[0].focus()})}),KindEditor.plugin("preview",function(e){var t=this,n="preview";t.clickToolbar(n,function(){var i=(t.lang(n+"."),'

          '),a=t.createDialog({name:n,width:750,title:t.lang(n),body:i}),o=e("iframe",a.div),r=e.iframeDoc(o);r.open(),r.write(t.fullHtml()),r.close(),e(r.body).css("background-color","#FFF"),o[0].contentWindow.focus()})}),KindEditor.plugin("quickformat",function(e){function t(e){for(var t=e.first();t&&t.first();)t=t.first();return t}var n=this,i="quickformat",a=e.toMap("blockquote,center,div,h1,h2,h3,h4,h5,h6,p");n.clickToolbar(i,function(){n.focus();for(var i,o=n.edit.doc,r=n.cmd.range,l=e(o.body).first(),s=[],d=[],c=r.createBookmark(!0);l;){i=l.next();var u=t(l);u&&"img"==u.name||(a[l.name]?(l.html(l.html().replace(/^(\s| | )+/gi,"")),l.css("text-indent","2em")):d.push(l),(!i||a[i.name]||a[l.name]&&!a[i.name])&&(d.length>0&&s.push(d),d=[])),l=i}e.each(s,function(t,n){var i=e('

          ',o);n[0].before(i),e.each(n,function(e,t){i.append(t)})}),r.moveToBookmark(c),n.addBookmark()})}),KindEditor.plugin("table",function(e){function t(e,t){t=t.toLowerCase(),e.css("background-color",t),t&&e.css("color","#000000"===t?"#FFFFFF":"#000000"),"input"===e.name?e.val(t):e.html(t)}function n(n,i,a){function o(){e.each(h,function(){this.remove()}),h=[],e(document).unbind("click,mousedown",o),n.unbind("click,mousedown",o)}i.bind("click,mousedown",function(e){e.stopPropagation()}),i.click(function(i){o();var r=e(this),l=r.pos(),d=e.colorpicker({x:l.x,y:l.y+r.height(),z:811214,selectedColor:e(this).html(),colors:s.colorTable,noColor:s.lang("table.defaultBorderColor"),shadowMode:s.shadowMode,click:function(e){t(r,e),o(),a&&a(e)}});h.push(d),e(document).bind("click,mousedown",o),n.bind("click,mousedown",o)})}function i(e,t,n){for(var i=0,a=0,o=t.cells.length;a
          "],l=n.find("tbody>tr:first").children(),d=0;l.each(function(){var e=$(this),t=e.attr("colspan");d+=t?parseInt(t):1});for(var c=0;c"+(e.IE?" ":"
          ")+"");r.push("
          "),o=$(r.join("")),n.prepend(o)}}else o.remove()}i&&i("header",t.header)}void 0!==t.stripedRows&&(n.toggleClass("table-striped",!!t.stripedRows),i&&i("stripedRows",t.stripedRows)),void 0!==t.hoverRows&&(n.toggleClass("table-hover",!!t.hoverRows),i&&i("hoverRows",t.hoverRows)),void 0!==t.autoWidth&&(n.toggleClass("table-auto",!!t.autoWidth),i&&i("autoWidth",t.autoWidth)),void 0!==t.borderColor&&(n.find("td,th").css("border","1px solid "+t.borderColor),i&&i("borderColor",t.borderColor))}}function r(t,n,i,a){if(t*n){for(var o=$('
          '),r=$(""),l=0;l"),c=0;c"+(e.IE?" ":"
          ")+"");d.append(u)}r.append(d)}o.append(r);var p=$("
          ").append(o).html();return e.IE||(p+="
          "),s.insertHtml(p),o}}function l(i){for(var a=$(i[0]),r=[""],l=[""],c=0;c<6;++c){r.push('{tableHead}'),l.push("");for(var u=0;u<6;++u)l.push('{tableContent}');l.push("")}r.push(""),l.push("");var h=['
          ','
          ','
          ','
          ',"",'
          ','
          ','
          ',"
          ",'
          ',"",'
          ','
          ',"
          ",'
          ',"",'
          ','{borderColor}','',"
          ","
          ","
          ",'
          ','',r.join(""),l.join(""),"
          ","","",""].join("").format(p),f=$(h),m=f.find(".ke-plugin-table-example"),g=s.cmd.range.createBookmark(),v=f.find(".ke-plugin-table-input-color"),_=e(v[0]);f.on("change.kTable","input[name]",function(){var e=$(this),t={};t[e.attr("name")]=e.is('[type="checkbox"]')?e.is(":checked"):e.val(),o(t,m)});var b=s.createDialog({name:d+"test",width:550,title:s.lang(d),body:f[0],beforeRemove:function(){f.off(".kTable")},yesBtn:{name:s.lang("yes"),click:function(e){o({borderColor:f.find('[name="borderColor"]').val(),header:f.find('[name="header"]').is(":checked"),stripedRows:f.find('[name="stripedRows"]').is(":checked"),hoverRows:f.find('[name="hoverRows"]').is(":checked"),autoWidth:f.find('[name="autoWidth"]:checked').val()},a),s.hideDialog().focus(),s.cmd.range.moveToBookmark(g),s.cmd.select(),s.addBookmark()}}});n(b.div,_,function(e){o({borderColor:e},m)}),o({borderColor:a.find("td,th").first().css("borderColor"),header:a.find("thead").length,stripedRows:a.hasClass("table-striped"),hoverRows:a.hasClass("table-hover"),autoWidth:a.hasClass("table-auto")},m,function(e,n){switch(e){case"borderColor":t(_,n||"#dddddd");break;case"header":f.find('[name="header"]').prop("checked",!!n);break;case"stripedRows":f.find('[name="stripedRows"]').prop("checked",!!n);break;case"hoverRows":f.find('[name="hoverRows"]').prop("checked",!!n);break;case"autoWidth":f.find('[name="autoWidth"][value="'+(n?"auto":"")+'"]').prop("checked",!0)}})}var s=this,d="table",c={zh_cn:{name:"表格",xRxC:"{0}行 × {1}列",headerRow:"标题行",headerCol:"标题列",tableStyle:"表格样式",addHeaderRow:"添加表格标题行",stripedRows:"隔行变色效果",hoverRows:"鼠标悬停效果",autoChangeTableWidth:"自动调整表格尺寸",tableWidthFixed:"按表格文字自适应",tableWidthFull:"按页面宽度自适应",tableBorder:"表格边框",tableHead:"标题",tableContent:"内容"},zh_tw:{name:"表格",xRxC:"{0}行×{1}列",headerRow:"標題行",headerCol:"標題列",tableStyle:"表格樣式",addHeaderRow:"添加表格標題行",stripedRows:"隔行變色效果",hoverRows:"鼠標懸停效果",autoChangeTableWidth:"自動調整表格尺寸",tableWidthFixed:"按表格文字自適應",tableWidthFull:"按頁面寬度自適應",tableBorder:"表格邊框",tableHead:"標題",tableContent:"內容"},en:{name:"Table",xRxC:"{0} Rows × {1} Columns",headerRow:"Header Row",headerCol:"Header Column",tableStyle:"Table style",addHeaderRow:"Add header row",stripedRows:"Striped effection",hoverRows:"Mouse hover effection",autoChangeTableWidth:"Automatically adjust table size",tableWidthFixed:"Adaptive by form text",tableWidthFull:"Page width adaptive",tableBorder:"Table border",tableHead:"Title",tableContent:"Text"}},u=[],p=$.extend({},s.lang("table."),c[($.clientLang||$.zui.clientLang)()]),h=[];s.plugin.table={prop:function(){var e=s.plugin.getSelectedTable();e&&e.length&&l(e)},cellprop:function(){var i=['
          ','
          ','",p.width+'   ','   ",p.height+'   ','","
          ",'
          ','",p.textAlign+' ",p.verticalAlign+' ","
          ",'
          ','",p.borderColor+' ',"
          ",'
          ','",'',"
          ","
          "].join(""),a=s.cmd.range.createBookmark(),o=s.createDialog({name:d,width:500,title:s.lang("tablecell"),body:i,beforeRemove:function(){_.unbind()},yesBtn:{name:s.lang("yes"),click:function(t){var n=l.val(),i=c.val(),o=u.val(),r=h.val(),d=(f.val(),m.val(),g.val()),p=v.val(),b=e(_[0]).html()||"",k=e(_[1]).html()||"";return/^\d*$/.test(n)?/^\d*$/.test(i)?(y.css({width:""!==n?n+o:"",height:""!==i?i+r:"","background-color":k,"text-align":d,"vertical-align":p,"border-style":"solid","border-color":b}),s.hideDialog().focus(),s.cmd.range.moveToBookmark(a),s.cmd.select(),void s.addBookmark()):(alert(s.lang("invalidHeight")),void c[0].focus()):(alert(s.lang("invalidWidth")),void l[0].focus())}}}),r=o.div,l=e('[name="width"]',r).val(100),c=e('[name="height"]',r),u=e('[name="widthType"]',r),h=e('[name="heightType"]',r),f=e('[name="padding"]',r).val(2),m=e('[name="spacing"]',r).val(0),g=e('[name="textAlign"]',r),v=e('[name="verticalAlign"]',r),_=e(".ke-input-color",r);n(r,_.eq(0)),n(r,_.eq(1)),t(_.eq(0),"#000000"),t(_.eq(1),""),l[0].focus(),l[0].select();var b,y=s.plugin.getSelectedCell(),k=y[0].style.width||y[0].width||"",w=y[0].style.height||y[0].height||"";(b=/^(\d+)((?:px|%)*)$/.exec(k))?(l.val(b[1]),u.val(b[2])):l.val(""),(b=/^(\d+)((?:px|%)*)$/.exec(w))&&(c.val(b[1]),h.val(b[2])),g.val(y[0].style.textAlign||""),v.val(y[0].style.verticalAlign||""),t(_.eq(0),e.toHex(y[0].style.borderColor||"")),t(_.eq(1),e.toHex(y[0].style.backgroundColor||"")),l[0].focus(),l[0].select()},insert:function(){console.warn("Table insert not available.")},"delete":function(){var e=s.plugin.getSelectedTable();s.cmd.range.setStartBefore(e[0]).collapse(!0),s.cmd.select(),e.remove(),s.addBookmark()},colinsert:function(t){var n=s.plugin.getSelectedTable()[0],a=s.plugin.getSelectedRow()[0],o=s.plugin.getSelectedCell()[0],r=o.cellIndex+t;r+=n.rows[0].cells.length-a.cells.length;for(var l=0,d=n.rows.length;l"),u.innerHTML=e.IE?"":"
          ",r=i(n,c,u)}s.cmd.range.selectNodeContents(o).collapse(!0),s.cmd.select(),s.addBookmark()},colinsertleft:function(){this.colinsert(0)},colinsertright:function(){this.colinsert(1)},rowinsert:function(t){var n=s.plugin.getSelectedTable()[0],i=s.plugin.getSelectedRow()[0],a=s.plugin.getSelectedCell()[0],o=i.rowIndex;1===t&&(o=i.rowIndex+(a.rowSpan-1)+t);for(var r=n.insertRow(o),l=0,d=i.cells.length;l1&&(d-=i.cells[l].rowSpan-1);var c=r.insertCell(l);1===t&&i.cells[l].colSpan>1&&(c.colSpan=i.cells[l].colSpan),c.innerHTML=e.IE?"":"
          "}for(var u=o;u>=0;u--){var p=n.rows[u].cells;if(p.length>l){for(var h=a.cellIndex;h>=0;h--)p[h].rowSpan>1&&(p[h].rowSpan+=1);break}}s.cmd.range.selectNodeContents(a).collapse(!0),s.cmd.select(),s.addBookmark()},rowinsertabove:function(){this.rowinsert(0)},rowinsertbelow:function(){this.rowinsert(1)},rowmerge:function(){var e=s.plugin.getSelectedTable()[0],t=s.plugin.getSelectedRow()[0],n=s.plugin.getSelectedCell()[0],i=t.rowIndex,a=i+n.rowSpan,o=e.rows[a];if(!(e.rows.length<=a)){var r=n.cellIndex;if(!(o.cells.length<=r)){var l=o.cells[r];n.colSpan===l.colSpan&&(n.rowSpan+=l.rowSpan,o.deleteCell(r),s.cmd.range.selectNodeContents(n).collapse(!0),s.cmd.select(),s.addBookmark())}}},colmerge:function(){var e=(s.plugin.getSelectedTable()[0],s.plugin.getSelectedRow()[0]),t=s.plugin.getSelectedCell()[0],n=(e.rowIndex,t.cellIndex),i=n+1;if(!(e.cells.length<=i)){var a=e.cells[i];t.rowSpan===a.rowSpan&&(t.colSpan+=a.colSpan,e.deleteCell(i),s.cmd.range.selectNodeContents(t).collapse(!0),s.cmd.select(),s.addBookmark())}},rowsplit:function(){var t=s.plugin.getSelectedTable()[0],n=s.plugin.getSelectedRow()[0],a=s.plugin.getSelectedCell()[0],o=n.rowIndex;if(1!==a.rowSpan){for(var r=i(t,n,a),l=1,d=a.rowSpan;l1&&(u.colSpan=a.colSpan),u.innerHTML=e.IE?"":"
          ",r=i(t,c,u)}e(a).removeAttr("rowSpan"),s.cmd.range.selectNodeContents(a).collapse(!0),s.cmd.select(),s.addBookmark()}},colsplit:function(){var t=(s.plugin.getSelectedTable()[0],s.plugin.getSelectedRow()[0]),n=s.plugin.getSelectedCell()[0],i=n.cellIndex;if(1!==n.colSpan){for(var a=1,o=n.colSpan;a1&&(r.rowSpan=n.rowSpan),r.innerHTML=e.IE?"":"
          "}e(n).removeAttr("colSpan"),s.cmd.range.selectNodeContents(n).collapse(!0),s.cmd.select(),s.addBookmark()}},coldelete:function(){for(var t=s.plugin.getSelectedTable()[0],n=s.plugin.getSelectedRow()[0],i=s.plugin.getSelectedCell()[0],a=i.cellIndex,o=0,r=t.rows.length;o1?(d.colSpan-=1,1===d.colSpan&&e(d).removeAttr("colSpan")):l.deleteCell(a),d.rowSpan>1&&(o+=d.rowSpan-1)}0===n.cells.length?(s.cmd.range.setStartBefore(t).collapse(!0),s.cmd.select(),e(t).remove()):s.cmd.selection(!0),s.addBookmark()},rowdelete:function(){for(var t=s.plugin.getSelectedTable()[0],n=s.plugin.getSelectedRow()[0],i=s.plugin.getSelectedCell()[0],a=n.rowIndex,o=i.rowSpan-1;o>=0;o--)t.deleteRow(a+o);0===t.rows.length?(s.cmd.range.setStartBefore(t).collapse(!0),s.cmd.select(),e(t).remove()):s.cmd.selection(!0),s.addBookmark()}},s.clickToolbar(d,function(){if(!s.menu){var e=s.createMenu({name:d,beforeRemove:function(){a()}}),t=$('
          '),n=$('
          '+p.xRxC.format(0,0)+"
          ");t.append(n);var i=$('
          ');i.on("mouseenter.kTable",".ke-plugin-table-grid-cell",function(){var e=$(this),t=e.data("row"),a=e.data("col");n.text(p.xRxC.format(t,a));var o=i.find(".ke-plugin-table-grid-cell");o.each(function(){var e=$(this),n=e.data("row"),i=e.data("col");n<=t&&i<=a?e.css({border:"1px solid #2286d2",background:"#eff7ff"}):e.css({border:"1px solid #ddd",background:"#f1f1f1"})})}).on("click.kTable",".ke-plugin-table-grid-cell",function(e){var t=$(this),n=t.data("row"),i=t.data("col");r(n,i),s.hideMenu().focus(),s.addBookmark(),e.stopPropagation()});for(var o=1;o<11;o++)for(var l=1;l<11;l++)i.append('
          ');u.push(i),t.append(i),e.div.append(t[0])}})}),KindEditor.lang({table:KindEditor.lang("table")}),KindEditor.plugin("template",function(e){function t(t){return a+t+"?ver="+encodeURIComponent(e.DEBUG?e.TIME:e.VERSION)}var n=this,i="template",a=(n.lang(i+"."),n.pluginsPath+i+"/html/");n.clickToolbar(i,function(){var a=n.lang(i+"."),o=['
          ','
          ','
          ',a.selectTemplate+"
          ",'
          ',' ","
          ",'
          ',"
          ",'',"
          "].join("");var r=n.createDialog({name:i,width:500,title:n.lang(i),body:html,yesBtn:{name:n.lang("yes"),click:function(t){var i=e.iframeDoc(d);n[s[0].checked?"html":"insertHtml"](i.body.innerHTML).hideDialog().focus()}}}),l=e("select",r.div),s=e('[name="replaceFlag"]',r.div),d=e("iframe",r.div);s[0].checked=!0,d.attr("src",t(l.val())),l.change(function(){d.attr("src",t(this.value))})})}),KindEditor.plugin("wordpaste",function(e){var t=this,n="wordpaste";t.clickToolbar(n,function(){var i=t.lang(n+"."),a='
          '+i.comment+'
          ',o=t.createDialog({name:n,width:450,title:t.lang(n),body:a,yesBtn:{name:t.lang("yes"),click:function(n){var i=s.body.innerHTML;i=e.clearMsWord(i,t.filterMode?t.htmlTags:e.options.htmlTags),t.insertHtml(i).hideDialog().focus()}}}),r=o.div,l=e("iframe",r),s=e.iframeDoc(l);e.IE||(s.designMode="on"),s.open(),s.write("WordPaste"),s.write(''),e.IE||s.write("
          "),s.write(""),s.close(),e.IE&&(s.body.contentEditable="true"),l[0].contentWindow.focus()})}); \ No newline at end of file From 659b4542287d5282bdd0f84198509a93735ff27e Mon Sep 17 00:00:00 2001 From: wangyidong Date: Sat, 29 Dec 2018 09:10:58 +0800 Subject: [PATCH 055/442] * finish task #5168. --- module/task/model.php | 1 + 1 file changed, 1 insertion(+) diff --git a/module/task/model.php b/module/task/model.php index 610b2766ef..37d8fafc7d 100644 --- a/module/task/model.php +++ b/module/task/model.php @@ -658,6 +658,7 @@ class taskModel extends model { foreach($teams as $member) $this->dao->insert(TABLE_TEAM)->data($member)->autoCheck()->exec(); $task = $this->computeHours4Multiple($oldTask, $task); + if($task->status == 'wait') $task->assignedTo = key($teams); } $this->dao->update(TABLE_TASK)->data($task) From 3d34eb42e868b50d7049ec33dd3c75bebe840d05 Mon Sep 17 00:00:00 2001 From: Yagami Date: Sat, 29 Dec 2018 13:41:36 +0800 Subject: [PATCH 056/442] * Finish task #5190. --- module/block/model.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/block/model.php b/module/block/model.php index ea26ca8e64..25b75d32b2 100644 --- a/module/block/model.php +++ b/module/block/model.php @@ -157,7 +157,7 @@ class blockModel extends model { $data = array(); - $data['tasks'] = (int)$this->dao->select('count(*) AS count')->from(TABLE_TASK)->where('assignedTo')->eq($this->app->user->account)->andWhere('deleted')->eq(0)->fetch('count'); + $data['tasks'] = (int)$this->dao->select('count(*) AS count')->from(TABLE_TASK)->where('assignedTo')->eq($this->app->user->account)->andWhere('deleted')->eq(0)->andWhere('status')->ne('closed')->fetch('count'); $data['bugs'] = (int)$this->dao->select('count(*) AS count')->from(TABLE_BUG)->where('assignedTo')->eq($this->app->user->account)->andWhere('deleted')->eq(0)->fetch('count'); $data['stories'] = (int)$this->dao->select('count(*) AS count')->from(TABLE_STORY)->where('assignedTo')->eq($this->app->user->account)->andWhere('deleted')->eq(0)->fetch('count'); $data['projects'] = (int)$this->dao->select('count(*) AS count')->from(TABLE_PROJECT) From 3d850bdc0a111831be9d173ff4bf5e74716857c4 Mon Sep 17 00:00:00 2001 From: Yagami Date: Sat, 29 Dec 2018 13:43:29 +0800 Subject: [PATCH 057/442] * Fix task 5190. --- module/block/model.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/block/model.php b/module/block/model.php index 25b75d32b2..222ca80d9d 100644 --- a/module/block/model.php +++ b/module/block/model.php @@ -157,7 +157,7 @@ class blockModel extends model { $data = array(); - $data['tasks'] = (int)$this->dao->select('count(*) AS count')->from(TABLE_TASK)->where('assignedTo')->eq($this->app->user->account)->andWhere('deleted')->eq(0)->andWhere('status')->ne('closed')->fetch('count'); + $data['tasks'] = (int)$this->dao->select('count(*) AS count')->from(TABLE_TASK)->where('assignedTo')->eq($this->app->user->account)->andWhere('status')->ne('closed')->andWhere('deleted')->eq(0)->fetch('count'); $data['bugs'] = (int)$this->dao->select('count(*) AS count')->from(TABLE_BUG)->where('assignedTo')->eq($this->app->user->account)->andWhere('deleted')->eq(0)->fetch('count'); $data['stories'] = (int)$this->dao->select('count(*) AS count')->from(TABLE_STORY)->where('assignedTo')->eq($this->app->user->account)->andWhere('deleted')->eq(0)->fetch('count'); $data['projects'] = (int)$this->dao->select('count(*) AS count')->from(TABLE_PROJECT) From 0db6ff757c6618a1b141aa5146ace7fcf310eb61 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Sat, 29 Dec 2018 13:58:07 +0800 Subject: [PATCH 058/442] * finish task #5189. --- module/story/view/batchcreate.html.php | 1 + 1 file changed, 1 insertion(+) diff --git a/module/story/view/batchcreate.html.php b/module/story/view/batchcreate.html.php index f50b28aa54..ea6fbdf116 100644 --- a/module/story/view/batchcreate.html.php +++ b/module/story/view/batchcreate.html.php @@ -118,6 +118,7 @@ $(function() var $select = $(this); if(index == 0) $select.find("option[value='ditto']").remove(); if(index > 0) $select.val('ditto'); + if($select.attr('id').indexOf('branch') >= 0) $select.val('') $select.chosen(); setTimeout(function() { From 851bcc28b33457fc46cb0c144fc33da77553b53d Mon Sep 17 00:00:00 2001 From: Yagami Date: Sat, 29 Dec 2018 14:04:09 +0800 Subject: [PATCH 059/442] * Finish task #5192. --- module/doc/model.php | 2 +- module/doc/view/browsebygrid.html.php | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/module/doc/model.php b/module/doc/model.php index 2ac0e3ab96..c13c496692 100644 --- a/module/doc/model.php +++ b/module/doc/model.php @@ -784,7 +784,7 @@ class docModel extends model $docCounts= $this->dao->select("module, count(id) as docCount")->from(TABLE_DOC) ->where('module')->in(array_keys($modules)) - ->groupBy('module') + ->andWhere('deleted')->eq(0) ->fetchPairs(); foreach($modules as $moduleID => $module) $modules[$moduleID]->docCount = isset($docCounts[$moduleID]) ? $docCounts[$moduleID] : 0; diff --git a/module/doc/view/browsebygrid.html.php b/module/doc/view/browsebygrid.html.php index b7332ebc0e..fafd7fc8d3 100644 --- a/module/doc/view/browsebygrid.html.php +++ b/module/doc/view/browsebygrid.html.php @@ -72,15 +72,15 @@ - $attachLib):?> + $attachLib):?>
          product}"); } - elseif($libID == 'files') + elseif($libType == 'files') { $browseLink = inlink('showFiles', "type=$type&objectID={$currentLib->$type}"); } From 0e3ef4a715cfa9ea796664b908801246be7916db Mon Sep 17 00:00:00 2001 From: wangyidong Date: Sat, 29 Dec 2018 14:24:31 +0800 Subject: [PATCH 060/442] * finish task #5185. --- module/project/model.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/module/project/model.php b/module/project/model.php index 61cb5f84d8..e99f47c47a 100644 --- a/module/project/model.php +++ b/module/project/model.php @@ -1839,14 +1839,14 @@ class projectModel extends model ->from(TABLE_TASK) ->where('project')->in(array_keys($projects)) ->andWhere('deleted')->eq('0') - ->andWhere('parent')->eq('0') + ->andWhere('parent')->ge('0') ->andWhere('status')->ne('cancel') ->groupBy('project') ->fetchAll('project'); $closedLefts = $this->dao->select("project, sum(`left`) AS `left`")->from(TABLE_TASK) ->where('project')->in(array_keys($projects)) ->andWhere('deleted')->eq('0') - ->andWhere('parent')->eq('0') + ->andWhere('parent')->ge('0') ->andWhere('status')->eq('closed') ->groupBy('project') ->fetchAll('project'); From dcf2c8095136ea6ada9586751f47a426ade08d71 Mon Sep 17 00:00:00 2001 From: Yagami Date: Sat, 29 Dec 2018 14:42:45 +0800 Subject: [PATCH 061/442] * Finish task #5193. --- module/task/model.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/module/task/model.php b/module/task/model.php index c47d9b6731..bbb765eecf 100644 --- a/module/task/model.php +++ b/module/task/model.php @@ -372,6 +372,10 @@ class taskModel extends model { $status = 'doing'; } + elseif(isset($childrenStatus['done']) && isset($childrenStatus['wait'])) + { + $status = 'doing'; + } elseif(isset($childrenStatus['wait'])) { $status = 'wait'; From ca688aa2f80f7111908e0d146fcdbcb14fd7edac Mon Sep 17 00:00:00 2001 From: wangyidong Date: Sat, 29 Dec 2018 14:54:51 +0800 Subject: [PATCH 062/442] * finish task #5182. --- .../chat/ext/model/class/xuanxuan.class.php | 24 ++++++++++--------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/xuanxuan/module/chat/ext/model/class/xuanxuan.class.php b/xuanxuan/module/chat/ext/model/class/xuanxuan.class.php index 59b02c9c66..bf4f2cc50d 100644 --- a/xuanxuan/module/chat/ext/model/class/xuanxuan.class.php +++ b/xuanxuan/module/chat/ext/model/class/xuanxuan.class.php @@ -78,19 +78,21 @@ class xuanxuanChat extends chatModel $this->session->set('user', $user); $this->app->user = $this->session->user; - $products = explode(',', $this->app->user->view->products); - $projects = explode(',', $this->app->user->view->projects); - $libids = array_keys($this->loadModel('doc')->getLibs('all')); - $productID = isset($products[0]) ? $products[0] : 1; - $projectID = isset($projects[0]) ? $projects[0] : 1; - $libID = isset($libids[0]) ? $libids[0] : 1; + $products = trim($this->app->user->view->products, ','); + $projects = trim($this->app->user->view->projects, ','); + $products = empty($products) ? array() : explode(',', $products); + $projects = empty($projects) ? array() : explode(',', $projects); + $libIdList = array_keys($this->loadModel('doc')->getLibs('all')); + $productID = isset($products[0]) ? $products[0] : 1; + $projectID = isset($projects[0]) ? $projects[0] : 1; + $libID = isset($libIdList[0]) ? $libIdList[0] : 1; $actions = new stdclass(); - if(common::hasPriv('bug', 'create')) $actions->createBug = array('title' => $this->lang->chat->createBug, 'url' => $baseURL . str_replace('/xuanxuan.php', '/index.php', helper::createLink('bug', 'create', "product=$productID", 'xhtml')), 'height' => "600px", 'width' => "800px"); - if(common::hasPriv('doc', 'create')) $actions->createDoc = array('title' => $this->lang->chat->createDoc, 'url' => $baseURL . str_replace('/xuanxuan.php', '/index.php', helper::createLink('doc', 'create', "libID=$libID", 'xhtml')), 'height' => "600px", 'width' => "800px"); - if(common::hasPriv('story', 'create')) $actions->createStory = array('title' => $this->lang->chat->createStory, 'url' => $baseURL . str_replace('/xuanxuan.php', '/index.php', helper::createLink('story', 'create', "product=$productID", 'xhtml')), 'height' => "600px", 'width' => "800px"); - if(common::hasPriv('task', 'create')) $actions->createTask = array('title' => $this->lang->chat->createTask, 'url' => $baseURL . str_replace('/xuanxuan.php', '/index.php', helper::createLink('task', 'create', "project=$projectID", 'xhtml')), 'height' => "600px", 'width' => "800px"); - if(common::hasPriv('todo', 'create')) $actions->createTodo = array('title' => $this->lang->chat->createTodo, 'url' => $baseURL . str_replace('/xuanxuan.php', '/index.php', helper::createLink('todo', 'create', '', 'xhtml')), 'height' => "600px", 'width' => "800px"); + if(common::hasPriv('bug', 'create') and !empty($products)) $actions->createBug = array('title' => $this->lang->chat->createBug, 'url' => $baseURL . str_replace('/xuanxuan.php', '/index.php', helper::createLink('bug', 'create', "product=$productID", 'xhtml')), 'height' => "600px", 'width' => "800px"); + if(common::hasPriv('doc', 'create') and !empty($libIdList))$actions->createDoc = array('title' => $this->lang->chat->createDoc, 'url' => $baseURL . str_replace('/xuanxuan.php', '/index.php', helper::createLink('doc', 'create', "libID=$libID", 'xhtml')), 'height' => "600px", 'width' => "800px"); + if(common::hasPriv('story', 'create') and !empty($products)) $actions->createStory = array('title' => $this->lang->chat->createStory, 'url' => $baseURL . str_replace('/xuanxuan.php', '/index.php', helper::createLink('story', 'create', "product=$productID", 'xhtml')), 'height' => "600px", 'width' => "800px"); + if(common::hasPriv('task', 'create') and !empty($projects)) $actions->createTask = array('title' => $this->lang->chat->createTask, 'url' => $baseURL . str_replace('/xuanxuan.php', '/index.php', helper::createLink('task', 'create', "project=$projectID", 'xhtml')), 'height' => "600px", 'width' => "800px"); + if(common::hasPriv('todo', 'create')) $actions->createTodo = array('title' => $this->lang->chat->createTodo, 'url' => $baseURL . str_replace('/xuanxuan.php', '/index.php', helper::createLink('todo', 'create', '', 'xhtml')), 'height' => "600px", 'width' => "800px"); $urls = array(); foreach($this->config->chat->cards as $moduleName => $methods) From 700fffb44287d6323fd677d1b2cd35bb7c956484 Mon Sep 17 00:00:00 2001 From: Yagami Date: Wed, 2 Jan 2019 09:23:35 +0800 Subject: [PATCH 063/442] * Finish task #5199. --- module/testtask/view/groupcase.html.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/testtask/view/groupcase.html.php b/module/testtask/view/groupcase.html.php index b0ca9909ec..0a0eb126e0 100644 --- a/module/testtask/view/groupcase.html.php +++ b/module/testtask/view/groupcase.html.php @@ -46,7 +46,7 @@ $i = 0; $groupName = $groupByList ? $groupByList[$groupKey] : ''; if(empty($groupName) and $groupBy == 'story') $groupName = $lang->task->noStory; - if(empty($groupName) and $groupBy == 'assignedTo') $groupName = $lang->task->noAssigned; + if(empty($groupName) and $groupBy == 'assignedTo') $groupName = $groupKey ? zget($users, $groupKey, $lang->task->noAssigned) : $lang->task->noAssigned; ?>
          > From cecc728d16133de0fe264436d5d38a1931b3698e Mon Sep 17 00:00:00 2001 From: Yagami Date: Wed, 2 Jan 2019 09:27:16 +0800 Subject: [PATCH 064/442] * Finish task #5200. --- module/task/model.php | 1 + 1 file changed, 1 insertion(+) diff --git a/module/task/model.php b/module/task/model.php index bbb765eecf..eaa61de718 100644 --- a/module/task/model.php +++ b/module/task/model.php @@ -1666,6 +1666,7 @@ class taskModel extends model ->beginIF($type == 'assignedTo')->andWhere('t1.status')->ne('closed')->fi() ->beginIF($type == 'finishedBy') ->andWhere('t1.finishedby', 1)->eq($account) + ->andWhere('t1.status')->eq('done') ->orWhere('t1.finishedList')->like("%,{$account},%") ->markRight(1) ->fi() From c163f11b0fd01710010e27b8da4cdf9d9305cefc Mon Sep 17 00:00:00 2001 From: Yagami Date: Wed, 2 Jan 2019 09:46:49 +0800 Subject: [PATCH 065/442] * Finish task #5198. --- module/block/control.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/block/control.php b/module/block/control.php index e93dc75f09..0f07685b64 100644 --- a/module/block/control.php +++ b/module/block/control.php @@ -898,7 +898,7 @@ class block extends control /* Get tasks. */ $yesterday = date('Y-m-d', strtotime('-1 day')); - $tasks = $this->dao->select("project, count(id) as totalTasks, count(status in ('wait','doing','pause') or null) as undoneTasks, count(finishedDate like '{$yesterday}%' or null) as yesterdayFinished, sum(if(status != 'cancel', estimate, 0)) as totalEstimate, sum(consumed) as totalConsumed, sum(if(status != 'cancel', `left`, 0)) as totalLeft")->from(TABLE_TASK) + $tasks = $this->dao->select("project, count(id) as totalTasks, count(status in ('wait','doing','pause') or null) as undoneTasks, count(finishedDate like '{$yesterday}%' or null) as yesterdayFinished, sum(if(status != 'cancel', estimate, 0)) as totalEstimate, sum(consumed) as totalConsumed, sum(if(status != 'cancel' and status != 'closed', `left`, 0)) as totalLeft")->from(TABLE_TASK) ->where('project')->in($projectIdList) ->andWhere('deleted')->eq(0) ->andWhere('parent')->lt(1) From 2b15b8d3c6f340009809c2e430bddb555b49cca7 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Wed, 2 Jan 2019 09:51:06 +0800 Subject: [PATCH 066/442] * finish task #5201. --- module/custom/control.php | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/module/custom/control.php b/module/custom/control.php index 56f5683645..059ef2d5ec 100644 --- a/module/custom/control.php +++ b/module/custom/control.php @@ -148,12 +148,13 @@ class custom extends control } $this->custom->deleteItems("lang=$lang&module=$module§ion=$field"); - foreach($_POST['keys'] as $index => $key) + $data = fixer::input('post')->get(); + foreach($data->keys as $index => $key) { //if(!$system and (!$value or !$key)) continue; //Fix bug #951. - $value = $_POST['values'][$index]; - $system = $_POST['systems'][$index]; + $value = $data->values[$index]; + $system = $data->systems[$index]; $this->custom->setItem("{$lang}.{$module}.{$field}.{$key}.{$system}", $value); } } From ed0692a545bbafcebff211bb51a3dc60226a1404 Mon Sep 17 00:00:00 2001 From: Yagami Date: Wed, 2 Jan 2019 10:08:12 +0800 Subject: [PATCH 067/442] * Finish task #5194. --- module/project/model.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/module/project/model.php b/module/project/model.php index e99f47c47a..1cc9839d53 100644 --- a/module/project/model.php +++ b/module/project/model.php @@ -2080,6 +2080,10 @@ class projectModel extends model $statusVar = 'status' . ucfirst($task->status); $$statusVar ++; + if(isset($task->children)) + { + foreach($task->children as $children) $taskSum ++; + } $taskSum ++; } From 936c2157df8748a8eab67ec29b0f81031cff1002 Mon Sep 17 00:00:00 2001 From: Yagami Date: Wed, 2 Jan 2019 10:39:21 +0800 Subject: [PATCH 068/442] * Finish task #5197. --- module/testsuite/model.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/module/testsuite/model.php b/module/testsuite/model.php index ece5e14d56..95a4e77f81 100644 --- a/module/testsuite/model.php +++ b/module/testsuite/model.php @@ -191,6 +191,11 @@ class testsuiteModel extends model $link = helper::createLink('testsuite', 'createCase', $params); $pageActions .= html::a($link, "" . $this->lang->testcase->create, '', "class='btn btn-primary'"); } + if(common::hasPriv('testsuite', 'createLib')) + { + $link = helper::createLink('testsuite', 'createLib'); + $pageActions .= html::a($link, "" . $this->lang->testsuite->createLib, '', "class='btn btn-primary'"); + } } } $pageNav .= $selectHtml; From 0dceba2e102242ed989c9ba6b972f1b0b370f82a Mon Sep 17 00:00:00 2001 From: Yagami Date: Wed, 2 Jan 2019 13:13:10 +0800 Subject: [PATCH 069/442] * Finish task #5195. --- module/testreport/control.php | 2 +- module/testreport/model.php | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/module/testreport/control.php b/module/testreport/control.php index 85cd63b87b..6e453cf469 100644 --- a/module/testreport/control.php +++ b/module/testreport/control.php @@ -194,8 +194,8 @@ class testreport extends control die(js::locate('back')); } - $stories = $this->story->getProjectStories($project->id); $builds = $this->build->getByList($buildIdList); + $stories = !empty($this->testreport->getStories4Test($builds)) ? $this->testreport->getStories4Test($builds) : $this->story->getProjectStories($project->id);; $begin = $project->begin; $end = $project->end; diff --git a/module/testreport/model.php b/module/testreport/model.php index d5a25348a8..06540639e8 100644 --- a/module/testreport/model.php +++ b/module/testreport/model.php @@ -410,4 +410,20 @@ class testreportModel extends model ->beginIF($type == 'project')->andWhere("(id " . helper::dbIN(trim($bugIdList, ',')) . " OR (resolvedBuild = 'trunk' and resolvedDate >= '$begin' and resolvedDate <= '$end 23:59:59'))") ->fetchAll('id'); } + + /** + * Get stories for test + * + * @param array $builds + * @return void + */ + public function getStories4Test($builds) + { + $bugIdList = ''; + foreach($builds as $build) $bugIdList .= $build->stories. ','; + + return $this->dao->select('*')->from(TABLE_STORY)->where('deleted')->eq(0) + ->beginIF(is_array($builds))->andWhere('id')->in(trim($bugIdList, ','))->fi() + ->fetchAll('id'); + } } From 20bf14db9cc4ac1277cc43983410a9d4592e90a8 Mon Sep 17 00:00:00 2001 From: Yagami Date: Wed, 2 Jan 2019 13:50:40 +0800 Subject: [PATCH 070/442] * Finish task #5196. --- module/release/model.php | 1 + 1 file changed, 1 insertion(+) diff --git a/module/release/model.php b/module/release/model.php index be6d099162..b84cd02dfa 100644 --- a/module/release/model.php +++ b/module/release/model.php @@ -131,6 +131,7 @@ class releaseModel extends model $this->dao->insert(TABLE_BUILD)->data($build) ->autoCheck() ->check('name', 'unique', "product = {$productID} AND branch = {$branch} AND deleted = '0'") + ->batchCheck($this->config->release->create->requiredFields, 'notempty') ->exec(); $buildID = $this->dao->lastInsertID(); } From d45b7a8ce97140041fe08d24c39854133d3f858e Mon Sep 17 00:00:00 2001 From: wangyidong Date: Wed, 2 Jan 2019 15:14:56 +0800 Subject: [PATCH 071/442] * finish task #7227. --- module/report/lang/en.php | 3 +-- module/report/lang/zh-cn.php | 1 - module/report/view/workload.html.php | 2 +- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/module/report/lang/en.php b/module/report/lang/en.php index 8565483277..d31b10f098 100644 --- a/module/report/lang/en.php +++ b/module/report/lang/en.php @@ -43,8 +43,7 @@ $lang->report->bugAssign = 'Bug Assigned'; $lang->report->workload = 'Team Workload '; $lang->report->workloadAB = 'Workload'; $lang->report->bugOpenedDate = 'Bug reported from'; -$lang->report->taskAssignedDate = 'From'; -$lang->report->beginAndEnd = ' : from'; +$lang->report->beginAndEnd = ' From'; $lang->report->dept = 'Dept'; $lang->report->deviationChart = $lang->projectCommon . ' Deviation Chart'; diff --git a/module/report/lang/zh-cn.php b/module/report/lang/zh-cn.php index 4ab6d666e5..470808c859 100644 --- a/module/report/lang/zh-cn.php +++ b/module/report/lang/zh-cn.php @@ -43,7 +43,6 @@ $lang->report->bugAssign = 'Bug指派表'; $lang->report->workload = '员工负载表'; $lang->report->workloadAB = '工作负载'; $lang->report->bugOpenedDate = 'Bug创建时间'; -$lang->report->taskAssignedDate = '起止时间'; $lang->report->beginAndEnd = '起止时间'; $lang->report->dept = '部门'; $lang->report->deviationChart = $lang->projectCommon . '偏差曲线'; diff --git a/module/report/view/workload.html.php b/module/report/view/workload.html.php index 2c7df29083..9aab6c0670 100644 --- a/module/report/view/workload.html.php +++ b/module/report/view/workload.html.php @@ -21,7 +21,7 @@
          - report->taskAssignedDate;?> + report->beginAndEnd;?>
          report->to;?>
          From c0d4da2f0df80d628fb03f13996c51a8afb758a1 Mon Sep 17 00:00:00 2001 From: Yagami Date: Wed, 2 Jan 2019 15:26:26 +0800 Subject: [PATCH 072/442] * Finish task #7232. --- module/common/model.php | 1 + 1 file changed, 1 insertion(+) diff --git a/module/common/model.php b/module/common/model.php index 39d6b1bb35..c09dbe791a 100644 --- a/module/common/model.php +++ b/module/common/model.php @@ -622,6 +622,7 @@ class commonModel extends model } } + if($moduleName == 'feedback') $active = ''; $menuItemHtml = "
        • " . html::a($link, $label, $target) . $subMenu . "
        • \n"; if($isMobile) $menuItemHtml = html::a($link, $menuItem->text, $target, "class='$class $active'") . "\n"; echo $menuItemHtml; From 5ec47edcfccc09648e8ecf5ada68db79c214400c Mon Sep 17 00:00:00 2001 From: wangyidong Date: Wed, 2 Jan 2019 16:34:27 +0800 Subject: [PATCH 073/442] * fix error. --- module/upgrade/model.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/module/upgrade/model.php b/module/upgrade/model.php index 2377f1b0cc..d50e67aac3 100644 --- a/module/upgrade/model.php +++ b/module/upgrade/model.php @@ -918,6 +918,8 @@ class upgradeModel extends model */ public function execSQL($sqlFile) { + if(!file_exists($sqlFile)) return false; + $mysqlVersion = $this->loadModel('install')->getMysqlVersion(); $ignoreCode = '|1050|1060|1091|1061|'; From 4d38384b4148315d07bad2361970c7d945ff5d93 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Thu, 3 Jan 2019 09:25:37 +0800 Subject: [PATCH 074/442] * finish task #7228. --- module/file/control.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/file/control.php b/module/file/control.php index 5fcf453e04..0a679eefe6 100644 --- a/module/file/control.php +++ b/module/file/control.php @@ -299,7 +299,7 @@ class file extends control if(strpos($fileName, $extension) === false) $fileName .= $extension; /* urlencode the filename for ie. */ - if(strpos($this->server->http_user_agent, 'MSIE') !== false or strpos($this->server->http_user_agent, 'Trident') !== false) $fileName = urlencode($fileName); + if(strpos($this->server->http_user_agent, 'MSIE') !== false or strpos($this->server->http_user_agent, 'Trident') !== false or strpos($this->server->http_user_agent, 'Edge') !== false) $fileName = urlencode($fileName); /* Judge the content type. */ $mimes = $this->config->file->mimes; From 44f689ed652649f3d9844b5d83da6944724f6849 Mon Sep 17 00:00:00 2001 From: Yagami Date: Thu, 3 Jan 2019 10:20:55 +0800 Subject: [PATCH 075/442] * Fix caseheader. --- module/testcase/view/browse.html.php | 1 + 1 file changed, 1 insertion(+) diff --git a/module/testcase/view/browse.html.php b/module/testcase/view/browse.html.php index 170fac2c09..5c7956bc44 100644 --- a/module/testcase/view/browse.html.php +++ b/module/testcase/view/browse.html.php @@ -43,6 +43,7 @@ js::set('suiteID', $suiteID);
          '>
          +

          testcase->noCase;?> From 0f17b4d16a4f81db99ee6f13e0afa41e22c1abfb Mon Sep 17 00:00:00 2001 From: Yagami Date: Thu, 3 Jan 2019 10:47:47 +0800 Subject: [PATCH 076/442] * Fix xuanxuan config lang. --- xuanxuan/module/chat/ext/lang/en/xuanxuan.php | 2 +- xuanxuan/module/chat/ext/lang/zh-cn/xuanxuan.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/xuanxuan/module/chat/ext/lang/en/xuanxuan.php b/xuanxuan/module/chat/ext/lang/en/xuanxuan.php index d0683f2afe..1e56490a24 100644 --- a/xuanxuan/module/chat/ext/lang/en/xuanxuan.php +++ b/xuanxuan/module/chat/ext/lang/en/xuanxuan.php @@ -9,7 +9,7 @@ $lang->chat->turnonList[1] = 'On'; $lang->chat->turnonList[0] = 'Off'; $lang->chat->status = 'Status'; -$lang->chat->xxdServer = 'XXD Server'; +$lang->chat->xxdServer = 'Zentao Server'; $lang->chat->downloadXXD = 'Download XXD'; $lang->chat->listenIP = 'Listen IP'; $lang->chat->chatPort = 'Chat Port'; diff --git a/xuanxuan/module/chat/ext/lang/zh-cn/xuanxuan.php b/xuanxuan/module/chat/ext/lang/zh-cn/xuanxuan.php index 6217092182..f41c3c890a 100644 --- a/xuanxuan/module/chat/ext/lang/zh-cn/xuanxuan.php +++ b/xuanxuan/module/chat/ext/lang/zh-cn/xuanxuan.php @@ -10,7 +10,7 @@ $lang->chat->turnonList[1] = '是'; $lang->chat->turnonList[0] = '否'; $lang->chat->status = '状态'; -$lang->chat->xxdServer = 'XXD服务器'; +$lang->chat->xxdServer = '禅道服务器'; $lang->chat->downloadXXD = '下载喧喧服务端'; $lang->chat->listenIP = '监听IP'; $lang->chat->chatPort = '客户端通讯端口'; From 7cafcbdabd870bc9099de67e027973d1e9b1ed76 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Thu, 3 Jan 2019 13:51:08 +0800 Subject: [PATCH 077/442] * fix error for empty class and count task. --- module/common/lang/en.php | 2 ++ module/common/lang/zh-cn.php | 2 ++ module/project/model.php | 7 ++++++- 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/module/common/lang/en.php b/module/common/lang/en.php index 1caefc4b30..563ab074b6 100644 --- a/module/common/lang/en.php +++ b/module/common/lang/en.php @@ -727,6 +727,8 @@ if(isset($config->global->flow) and $config->global->flow == 'onlyTest') /* Remove sub menu of project module. */ unset($lang->project->menu); unset($lang->project->menuOrder); + $lang->project->menu = new stdclass(); + $lang->project->menu->list = array('alias' => ''); /* Add bug, testcase and testtask module. */ $lang->menu->bug = 'Bug|bug|index'; diff --git a/module/common/lang/zh-cn.php b/module/common/lang/zh-cn.php index 9cec01efbd..a3df969873 100644 --- a/module/common/lang/zh-cn.php +++ b/module/common/lang/zh-cn.php @@ -727,6 +727,8 @@ if(isset($config->global->flow) and $config->global->flow == 'onlyTest') /* Remove sub menu of project module. */ unset($lang->project->menu); unset($lang->project->menuOrder); + $lang->project->menu = new stdclass(); + $lang->project->menu->list = array('alias' => ''); /* Add bug, testcase and testtask module. */ $lang->menu->bug = 'Bug|bug|index'; diff --git a/module/project/model.php b/module/project/model.php index 1cc9839d53..c541d70df7 100644 --- a/module/project/model.php +++ b/module/project/model.php @@ -2082,7 +2082,12 @@ class projectModel extends model $$statusVar ++; if(isset($task->children)) { - foreach($task->children as $children) $taskSum ++; + foreach($task->children as $children) + { + $statusVar = 'status' . ucfirst($children->status); + $$statusVar ++; + $taskSum ++; + } } $taskSum ++; } From b1e410f79e23f4efe64f828f9c492e687366554e Mon Sep 17 00:00:00 2001 From: wangyidong Date: Thu, 3 Jan 2019 16:35:59 +0800 Subject: [PATCH 078/442] * adjust for show case import page. --- module/testcase/view/showimport.html.php | 26 +++++++++-------------- module/testsuite/view/showimport.html.php | 14 ++++++------ 2 files changed, 17 insertions(+), 23 deletions(-) diff --git a/module/testcase/view/showimport.html.php b/module/testcase/view/showimport.html.php index 6c69823f53..df0a4e4b0b 100644 --- a/module/testcase/view/showimport.html.php +++ b/module/testcase/view/showimport.html.php @@ -14,17 +14,13 @@

          - + - - - - - + + - - '> + '> - '> + '> From b85628a43aa7f3ec933878b86538b93204ddc536 Mon Sep 17 00:00:00 2001 From: Yagami Date: Wed, 23 Jan 2019 16:16:27 +0800 Subject: [PATCH 121/442] * Fix makefile. --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 2626ff6ff6..c67a241909 100644 --- a/Makefile +++ b/Makefile @@ -53,7 +53,7 @@ zentaoxx: cd $(XUANPATH); git archive --format=zip --prefix=xuan/ $(XUANVERSION) > xuan.zip mv $(XUANPATH)/xuan.zip . unzip xuan.zip - cp xuan/ranzhi/config/ext/xuanxuan.php zentaoxx/config/ext/ + cp xuan/ranzhi/config/ext/xuanxuan.php zentaoxx/config/ext/x.php cp -r xuan/ranzhi/lib/phpaes zentaoxx/lib/ cp -r xuan/ranzhi/framework/xuanxuan.class.php zentaoxx/framework/ cp -r xuan/ranzhi/db/*.sql zentaoxx/db/ From fad09a3916d2ee33b90c09ff3d37489265c1d420 Mon Sep 17 00:00:00 2001 From: Yagami Date: Thu, 24 Jan 2019 09:08:34 +0800 Subject: [PATCH 122/442] * Finish task #5225. --- module/doc/model.php | 7 ++++++- module/user/config.php | 2 -- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/module/doc/model.php b/module/doc/model.php index 1be0ab67dc..da5a2c4c82 100644 --- a/module/doc/model.php +++ b/module/doc/model.php @@ -262,7 +262,12 @@ class docModel extends model { $libID = (int)$libID; $oldLib = $this->getLibById($libID); - $lib = fixer::input('post')->join('groups', ',')->join('users', ',')->get(); + $lib = fixer::input('post') + ->setIF(!$this->post->users, 'users', '') + ->setIF(!$this->post->groups, 'groups', '') + ->join('groups', ',') + ->join('users', ',') + ->get(); if($lib->acl == 'private') { $libCreatedBy = $this->dao->select('*')->from(TABLE_ACTION)->where('objectType')->eq('doclib')->andWhere('objectID')->eq($libID)->andWhere('action')->eq('created')->fetch('actor'); diff --git a/module/user/config.php b/module/user/config.php index 1be21805a6..44eb60792e 100644 --- a/module/user/config.php +++ b/module/user/config.php @@ -16,5 +16,3 @@ $config->user->custom->batchEditFields = 'dept,join,email,commiter'; $config->user->failTimes = 6; $config->user->lockMinutes = 10; $config->user->batchCreate = 10; - -$config->user->showDeleted = 0; From 976bc31271ac619a129eea04edf0d4fc769f29ec Mon Sep 17 00:00:00 2001 From: Yagami Date: Thu, 24 Jan 2019 09:24:17 +0800 Subject: [PATCH 123/442] * Finish task #5229. --- module/project/view/grouptask.html.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/project/view/grouptask.html.php b/module/project/view/grouptask.html.php index 41b68c4266..67c28e8cc2 100644 --- a/module/project/view/grouptask.html.php +++ b/module/project/view/grouptask.html.php @@ -147,7 +147,7 @@ { if($groupBy == 'story') { - if(!$task->parent) + if($task->parent <= 0) { $groupEstimate += $task->estimate; $groupConsumed += $task->consumed; From 289160ca45519f3eaf0bb5e87915590a9851ed61 Mon Sep 17 00:00:00 2001 From: Yagami Date: Thu, 24 Jan 2019 09:26:42 +0800 Subject: [PATCH 124/442] * Finish task #5229. --- module/project/view/grouptask.html.php | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/module/project/view/grouptask.html.php b/module/project/view/grouptask.html.php index 67c28e8cc2..3ee37981e3 100644 --- a/module/project/view/grouptask.html.php +++ b/module/project/view/grouptask.html.php @@ -156,8 +156,11 @@ } else { - $groupEstimate += $task->estimate; - $groupConsumed += $task->consumed; + if($task->parent <= 0) + { + $groupEstimate += $task->estimate; + $groupConsumed += $task->consumed; + } if($groupBy == 'status' || ($task->status != 'cancel' && $task->status != 'closed')) $groupLeft += $task->left; } From e9d8249ac89893bfc11efabcecc7605dc2ea7bf1 Mon Sep 17 00:00:00 2001 From: Yagami Date: Thu, 24 Jan 2019 14:24:03 +0800 Subject: [PATCH 125/442] * Finish task #5259. --- module/testcase/js/batchcreate.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/testcase/js/batchcreate.js b/module/testcase/js/batchcreate.js index 6ce0166461..b63e18724e 100644 --- a/module/testcase/js/batchcreate.js +++ b/module/testcase/js/batchcreate.js @@ -3,7 +3,7 @@ $(document).ready(function() removeDitto();//Remove 'ditto' in first row. if($('#batchCreateForm table thead tr th.c-title').width() < 150) $('#batchCreateForm table thead tr th.c-title').width('150'); - $(document).on('click', '.chosen-with-drop', function() + $(document).on('mousedown', '.chosen-with-drop', function() { var select = $(this).prev('select'); var id = $(select).attr('id'); From de0e1186cae3199739ff22041c4f70b204504627 Mon Sep 17 00:00:00 2001 From: Yagami Date: Thu, 24 Jan 2019 16:17:18 +0800 Subject: [PATCH 126/442] * Finish task #5255. --- module/story/control.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/module/story/control.php b/module/story/control.php index 051f144440..b2704adcbc 100644 --- a/module/story/control.php +++ b/module/story/control.php @@ -1324,7 +1324,8 @@ class story extends control $storyInfo['moduleID'] = $story->module; $storyInfo['estimate'] = $story->estimate; $storyInfo['pri'] = $story->pri; - $storyInfo['spec'] = $story->spec; + $storyInfo['spec'] = html_entity_decode($story->spec); + echo json_encode($storyInfo); } From 421a130e63be86f85870f83c016186fe632f3b36 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Thu, 24 Jan 2019 16:46:18 +0800 Subject: [PATCH 127/442] * finish task #5233. --- .../module/admin/ext/control/xuanxuan.php | 2 -- .../chat/ext/model/class/xuanxuan.class.php | 24 +++++++++++++++++++ xuanxuan/module/chat/ext/model/xuanxuan.php | 10 ++++++++ 3 files changed, 34 insertions(+), 2 deletions(-) diff --git a/xuanxuan/module/admin/ext/control/xuanxuan.php b/xuanxuan/module/admin/ext/control/xuanxuan.php index c342ef46c0..904aa09f7b 100644 --- a/xuanxuan/module/admin/ext/control/xuanxuan.php +++ b/xuanxuan/module/admin/ext/control/xuanxuan.php @@ -29,9 +29,7 @@ class admin extends control if($errors) $this->send(array('result' => 'fail', 'message' => $errors)); - $result = $this->loadModel('setting')->setItems('system.common.xuanxuan', $setting); - $this->setting->setItem('system.mail.domain', $setting->server); if(!$result) $this->send(array('result' => 'fail', 'message' => dao::getError())); $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => inlink('xuanxuan'))); } diff --git a/xuanxuan/module/chat/ext/model/class/xuanxuan.class.php b/xuanxuan/module/chat/ext/model/class/xuanxuan.class.php index 04d2de620b..40d1de46b8 100644 --- a/xuanxuan/module/chat/ext/model/class/xuanxuan.class.php +++ b/xuanxuan/module/chat/ext/model/class/xuanxuan.class.php @@ -65,4 +65,28 @@ class xuanxuanChat extends chatModel unset($_SESSION['user']); return $entries; } + + public function editUser($user = null) + { + if(empty($user->id)) return null; + + $data = array(); + foreach($this->config->chat->user->canEditFields as $field) + { + if(!empty($user->$field)) $data[$field] = $user->$field; + } + if(!$data) return null; + + $data['clientLang'] = $this->app->getClientLang(); + $this->dao->update(TABLE_USER)->data($data)->where('id')->eq($user->id)->exec(); + return $this->getUserByUserID($user->id); + } + + public function getServer($backend = 'xxb') + { + $server = commonModel::getSysURL(); + if(!empty($this->config->xuanxuan->server)) $server = $this->config->xuanxuan->server; + + return $server; + } } diff --git a/xuanxuan/module/chat/ext/model/xuanxuan.php b/xuanxuan/module/chat/ext/model/xuanxuan.php index dd3683e8b5..2c8462b089 100644 --- a/xuanxuan/module/chat/ext/model/xuanxuan.php +++ b/xuanxuan/module/chat/ext/model/xuanxuan.php @@ -3,3 +3,13 @@ public function getExtensionList($userID) { return $this->loadExtension('xuanxuan')->getExtensionList($userID); } + +public function editUser($user = null) +{ + return $this->loadExtension('xuanxuan')->editUser($user); +} + +public function getServer($backend = 'xxb') +{ + return $this->loadExtension('xuanxuan')->getServer($backend); +} From 857871042aecee5afa3ee5001ab814c9dbbb4587 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Thu, 24 Jan 2019 17:30:55 +0800 Subject: [PATCH 128/442] * finish task #5238. --- module/action/model.php | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/module/action/model.php b/module/action/model.php index 5a67dbab75..9dfe977eb5 100755 --- a/module/action/model.php +++ b/module/action/model.php @@ -750,7 +750,7 @@ class actionModel extends model } $objectNames['user'][0] = 'guest'; // Add guest account. - foreach($actions as $action) + foreach($actions as $i => $action) { /* Add name field to the actions. */ $action->objectName = isset($objectNames[$action->objectType][$action->objectID]) ? $objectNames[$action->objectType][$action->objectID] : ''; @@ -779,11 +779,14 @@ class actionModel extends model { list($objectLabel, $moduleName, $methodName, $vars) = explode('|', $action->objectLabel); $action->objectLink = ''; - if(common::hasPriv($moduleName, $methodName)) + if(!common::hasPriv($moduleName, $methodName)) { - $action->objectLink = helper::createLink($moduleName, $methodName, sprintf($vars, $action->objectID)); - if($action->objectType == 'user') $action->objectLink = helper::createLink($moduleName, $methodName, sprintf($vars, $action->actor)); + unset($actions[$i]); + continue; } + + $action->objectLink = helper::createLink($moduleName, $methodName, sprintf($vars, $action->objectID)); + if($action->objectType == 'user') $action->objectLink = helper::createLink($moduleName, $methodName, sprintf($vars, $action->actor)); $action->objectLabel = $objectLabel; } else From 9922370141feec7ccf64c849e4381e789ef46fc1 Mon Sep 17 00:00:00 2001 From: Yagami Date: Fri, 25 Jan 2019 08:59:13 +0800 Subject: [PATCH 129/442] * Finish task #5249. --- module/user/lang/en.php | 1 - module/user/lang/zh-cn.php | 1 - module/user/lang/zh-tw.php | 1 - module/user/model.php | 1 - 4 files changed, 4 deletions(-) diff --git a/module/user/lang/en.php b/module/user/lang/en.php index f11c3e0a0a..ca47dd68ea 100644 --- a/module/user/lang/en.php +++ b/module/user/lang/en.php @@ -146,7 +146,6 @@ $lang->user->error->accountDupl = "ID %s,account has been used."; $lang->user->error->realname = "ID %s,must be real name"; $lang->user->error->password = "ID %s,password must be 6 characters at least."; $lang->user->error->mail = "ID %s,please enter valid Email address"; -$lang->user->error->role = "ID %s,role cannot be null."; $lang->user->error->reserved = "ID %s,account is reserved."; $lang->user->error->verifyPassword = "Verification failed. Please enter your Login Password."; diff --git a/module/user/lang/zh-cn.php b/module/user/lang/zh-cn.php index e544e77bf8..77be8eb808 100644 --- a/module/user/lang/zh-cn.php +++ b/module/user/lang/zh-cn.php @@ -146,7 +146,6 @@ $lang->user->error->accountDupl = "【ID %s】的用户名已经存在"; $lang->user->error->realname = "【ID %s】的真实姓名必须填写"; $lang->user->error->password = "【ID %s】的密码必须为六位以上"; $lang->user->error->mail = "【ID %s】的邮箱地址不正确"; -$lang->user->error->role = "【ID %s】的职位不能为空"; $lang->user->error->reserved = "【ID %s】的用户名已被系统预留"; $lang->user->error->verifyPassword = "验证失败,请检查您的系统登录密码是否正确"; diff --git a/module/user/lang/zh-tw.php b/module/user/lang/zh-tw.php index 02463199e4..46b8da6f03 100644 --- a/module/user/lang/zh-tw.php +++ b/module/user/lang/zh-tw.php @@ -146,7 +146,6 @@ $lang->user->error->accountDupl = "【ID %s】的用戶名已經存在"; $lang->user->error->realname = "【ID %s】的真實姓名必須填寫"; $lang->user->error->password = "【ID %s】的密碼必須為六位以上"; $lang->user->error->mail = "【ID %s】的郵箱地址不正確"; -$lang->user->error->role = "【ID %s】的職位不能為空"; $lang->user->error->reserved = "【ID %s】的用戶名已被系統預留"; $lang->user->error->verifyPassword = "驗證失敗,請檢查您的系統登錄密碼是否正確"; diff --git a/module/user/model.php b/module/user/model.php index 6bc8284d09..692d32e4a7 100644 --- a/module/user/model.php +++ b/module/user/model.php @@ -500,7 +500,6 @@ class userModel extends model if(!validater::checkAccount($users[$id]['account'])) die(js::error(sprintf($this->lang->user->error->account, $id))); if($users[$id]['realname'] == '') die(js::error(sprintf($this->lang->user->error->realname, $id))); if($users[$id]['email'] and !validater::checkEmail($users[$id]['email'])) die(js::error(sprintf($this->lang->user->error->mail, $id))); - if(empty($users[$id]['role'])) die(js::error(sprintf($this->lang->user->error->role, $id))); $accounts[$id] = $account; $prev['dept'] = $users[$id]['dept']; From d81a106fad98f6f32315302ac3ea3bdfe13017b3 Mon Sep 17 00:00:00 2001 From: Yagami Date: Fri, 25 Jan 2019 09:07:13 +0800 Subject: [PATCH 130/442] * Fix makefile. --- Makefile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index c67a241909..4f57265a75 100644 --- a/Makefile +++ b/Makefile @@ -53,7 +53,7 @@ zentaoxx: cd $(XUANPATH); git archive --format=zip --prefix=xuan/ $(XUANVERSION) > xuan.zip mv $(XUANPATH)/xuan.zip . unzip xuan.zip - cp xuan/ranzhi/config/ext/xuanxuan.php zentaoxx/config/ext/x.php + cp xuan/ranzhi/config/ext/xuanxuan.php zentaoxx/config/ext/ cp -r xuan/ranzhi/lib/phpaes zentaoxx/lib/ cp -r xuan/ranzhi/framework/xuanxuan.class.php zentaoxx/framework/ cp -r xuan/ranzhi/db/*.sql zentaoxx/db/ @@ -63,6 +63,7 @@ zentaoxx: cp -r xuanxuan/config/* zentaoxx/config/ cp -r xuanxuan/module/* zentaoxx/module/ cp -r xuanxuan/www/* zentaoxx/www/ + mv zentaoxx/www/xuanxuan.php zentaoxx/www/x.php sed -i 's/site,//' zentaoxx/module/chat/model.php sed -i 's/admin, g/g/' zentaoxx/module/chat/model.php sed -i '/password = md5/d' zentaoxx/module/chat/control.php From 93701f583a2c619c660c7f125f08279e3b1e2e15 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Fri, 25 Jan 2019 09:18:48 +0800 Subject: [PATCH 131/442] * finish task #5252. --- module/report/model.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/report/model.php b/module/report/model.php index fdaa2aa2f0..0e249dd78d 100644 --- a/module/report/model.php +++ b/module/report/model.php @@ -313,7 +313,7 @@ class reportModel extends model { foreach($multiTasks as $task) { - $userTask = $allTasks[$task->root]; + $userTask = clone $allTasks[$task->root]; $userTask->estimate = $task->estimate; $userTask->consumed = $task->consumed; $userTask->left = $task->left; From a19de161237a0524f2cffb23acdb1adee4915e68 Mon Sep 17 00:00:00 2001 From: Yagami Date: Fri, 25 Jan 2019 09:56:48 +0800 Subject: [PATCH 132/442] * Finish task #5246. --- module/project/view/grouptask.html.php | 3 +-- module/testcase/lang/en.php | 5 +---- module/testcase/lang/zh-cn.php | 4 +--- module/testcase/lang/zh-tw.php | 5 +---- module/testcase/view/caseheader.html.php | 16 ++-------------- 5 files changed, 6 insertions(+), 27 deletions(-) diff --git a/module/project/view/grouptask.html.php b/module/project/view/grouptask.html.php index 3ee37981e3..7e0505fe07 100644 --- a/module/project/view/grouptask.html.php +++ b/module/project/view/grouptask.html.php @@ -160,9 +160,8 @@ { $groupEstimate += $task->estimate; $groupConsumed += $task->consumed; + if($groupBy == 'status' || ($task->status != 'cancel' && $task->status != 'closed')) $groupLeft += $task->left; } - - if($groupBy == 'status' || ($task->status != 'cancel' && $task->status != 'closed')) $groupLeft += $task->left; } if($task->status == 'wait') $groupWait++; diff --git a/module/testcase/lang/en.php b/module/testcase/lang/en.php index 7479b0c541..a89a21d2e9 100644 --- a/module/testcase/lang/en.php +++ b/module/testcase/lang/en.php @@ -83,6 +83,7 @@ $lang->testcase->edit = "Edit"; $lang->testcase->batchEdit = "Batch Edit "; $lang->testcase->batchChangeModule = "Batch Change Module"; $lang->testcase->batchChangeBranch = "Batch Change Branch"; +$lang->testcase->groupByStories = 'Group by Story'; $lang->testcase->delete = "Delete"; $lang->testcase->batchDelete = "Batch Delete "; $lang->testcase->batchConfirmStoryChange = "Batch Confirm"; @@ -170,10 +171,6 @@ $lang->testcase->reviewResultList[''] = ''; $lang->testcase->reviewResultList['pass'] = 'Pass'; $lang->testcase->reviewResultList['clarify'] = 'Clarify'; -$lang->testcase->groups[''] = 'Group '; -$lang->testcase->groups['story'] = 'Group by Story'; -$lang->testcase->groups['assignedTo'] = 'Group by Assignee'; - $lang->testcase->statusList[''] = ''; $lang->testcase->statusList['wait'] = 'Wait'; $lang->testcase->statusList['normal'] = 'Normal'; diff --git a/module/testcase/lang/zh-cn.php b/module/testcase/lang/zh-cn.php index dc74f6d72d..9a7a72e512 100644 --- a/module/testcase/lang/zh-cn.php +++ b/module/testcase/lang/zh-cn.php @@ -83,6 +83,7 @@ $lang->testcase->edit = "编辑"; $lang->testcase->batchEdit = "批量编辑 "; $lang->testcase->batchChangeModule = "批量修改模块"; $lang->testcase->batchChangeBranch = "批量修改分支"; +$lang->testcase->groupByStories = '需求分组'; $lang->testcase->delete = "删除"; $lang->testcase->batchDelete = "批量删除 "; $lang->testcase->batchConfirmStoryChange = "批量确认变更"; @@ -170,9 +171,6 @@ $lang->testcase->reviewResultList[''] = ''; $lang->testcase->reviewResultList['pass'] = '确认通过'; $lang->testcase->reviewResultList['clarify'] = '继续完善'; -$lang->testcase->groups[''] = '分组查看'; -$lang->testcase->groups['story'] = '需求分组'; -$lang->testcase->groups['assignedTo'] = '指派分组'; $lang->testcase->statusList[''] = ''; $lang->testcase->statusList['wait'] = '待评审'; diff --git a/module/testcase/lang/zh-tw.php b/module/testcase/lang/zh-tw.php index b40c77db18..c96cfc4a3d 100644 --- a/module/testcase/lang/zh-tw.php +++ b/module/testcase/lang/zh-tw.php @@ -83,6 +83,7 @@ $lang->testcase->edit = "編輯"; $lang->testcase->batchEdit = "批量編輯 "; $lang->testcase->batchChangeModule = "批量修改模組"; $lang->testcase->batchChangeBranch = "批量修改分支"; +$lang->testcase->groupByStories = '需求分組'; $lang->testcase->delete = "刪除"; $lang->testcase->batchDelete = "批量刪除 "; $lang->testcase->batchConfirmStoryChange = "批量確認變更"; @@ -170,10 +171,6 @@ $lang->testcase->reviewResultList[''] = ''; $lang->testcase->reviewResultList['pass'] = '確認通過'; $lang->testcase->reviewResultList['clarify'] = '繼續完善'; -$lang->testcase->groups[''] = '分組查看'; -$lang->testcase->groups['story'] = '需求分組'; -$lang->testcase->groups['assignedTo'] = '指派分組'; - $lang->testcase->statusList[''] = ''; $lang->testcase->statusList['wait'] = '待評審'; $lang->testcase->statusList['normal'] = '正常'; diff --git a/module/testcase/view/caseheader.html.php b/module/testcase/view/caseheader.html.php index 5e7d41e261..acefe66d7a 100644 --- a/module/testcase/view/caseheader.html.php +++ b/module/testcase/view/caseheader.html.php @@ -89,22 +89,10 @@ { $groupBy = isset($groupBy) ? $groupBy : ''; $active = !empty($groupBy) ? 'btn-active-text' : ''; - $current = zget($lang->testcase->groups, isset($groupBy) ? $groupBy : '', ''); - if(empty($current)) $current = $lang->testcase->groups['']; echo "
          "; - echo html::a('javascript:;', "{$current}" . " ", '', "class='btn btn-link {$active}' data-toggle='dropdown'"); - echo "
          '; + echo html::a($this->createLink('testcase', 'groupCase', "productID=$productID&branch=$branch&groupBy=story"), "{$lang->testcase->groupByStories}", '', "class='btn btn-link $active'"); + echo ''; } elseif($hasZeroPriv and $menuType == 'zerocase') { From f3f9b64932a0a1537b4ae58e789bfd49ae94dd83 Mon Sep 17 00:00:00 2001 From: Yagami Date: Fri, 25 Jan 2019 10:03:39 +0800 Subject: [PATCH 133/442] * Finish task #5250. --- module/tree/view/browse.html.php | 4 +--- module/tree/view/browsetask.html.php | 4 +--- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/module/tree/view/browse.html.php b/module/tree/view/browse.html.php index 2b9c0fe1ab..8387026eab 100644 --- a/module/tree/view/browse.html.php +++ b/module/tree/view/browse.html.php @@ -107,9 +107,7 @@
          id]", $branches, $sonModule->branch, 'class="form-control" disabled');?>
          id]", $sonModule->short, "class='form-control' placeholder='{$lang->tree->short}' $disabled autocomplete='off'") . html::hidden("order[id$sonModule->id]", $sonModule->order);?>
          -
          - -
          +
          diff --git a/module/tree/view/browsetask.html.php b/module/tree/view/browsetask.html.php index 2f1e4f2edb..2c13e37252 100644 --- a/module/tree/view/browsetask.html.php +++ b/module/tree/view/browsetask.html.php @@ -75,9 +75,7 @@ echo html::hidden("order[id$sonModule->id]", $sonModule->order); ?> -
          - -
          +
          From 03d3c8230193ab4c3f14db278fd2ca1da5c92d57 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Fri, 25 Jan 2019 10:03:51 +0800 Subject: [PATCH 134/442] * finish task #5236. --- module/common/model.php | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/module/common/model.php b/module/common/model.php index b93cb7b4ea..c350a265fa 100644 --- a/module/common/model.php +++ b/module/common/model.php @@ -615,11 +615,10 @@ class commonModel extends model $subMenu .= "
        • " . html::a($subLink, $subLabel) . '
        • '; } - if($subMenu) - { - $label .= ""; - $subMenu = ""; - } + if(empty($subMenu)) continue; + + $label .= ""; + $subMenu = ""; } $menuItemHtml = "
        • " . html::a($link, $label, $target) . $subMenu . "
        • \n"; From 66ce378726d8bc4a76b7b11c49a78926b4f9171d Mon Sep 17 00:00:00 2001 From: chenfeiCF Date: Fri, 25 Jan 2019 10:36:56 +0800 Subject: [PATCH 135/442] * Fix bug #5248, #5260, #5263, #5266. --- module/group/css/browse.css | 2 + module/project/view/kanban.html.php | 2 +- module/testcase/view/create.html.php | 2 +- module/testtask/control.php | 2 +- module/testtask/js/runcase.js | 68 +++++++++++++++------------- module/todo/view/view.html.php | 2 +- 6 files changed, 43 insertions(+), 35 deletions(-) diff --git a/module/group/css/browse.css b/module/group/css/browse.css index 1cb346bdb5..fd03a05ba4 100644 --- a/module/group/css/browse.css +++ b/module/group/css/browse.css @@ -1 +1,3 @@ .user {display:block; width:80px; float:left; overflow:hidden} + +#groupList tbody tr.even td{word-wrap:break-word;} diff --git a/module/project/view/kanban.html.php b/module/project/view/kanban.html.php index ecb6bf0ad9..2806e366be 100644 --- a/module/project/view/kanban.html.php +++ b/module/project/view/kanban.html.php @@ -159,7 +159,7 @@ $account = $this->app->user->account;
          " . zget($realnames, $bug->assignedTo) . ""; - if(empty($task->assignedTo)) $assignedToRealName = "{$lang->task->noAssigned}"; + if(empty($bug->assignedTo)) $assignedToRealName = "{$lang->task->noAssigned}"; echo html::a($this->createLink('bug', 'assignTo', "bugID={$bug->id}", '', true), ' ' . $assignedToRealName, '', 'class="btn btn-icon-left kanbaniframe bug-assignedTo"');?> bug->statusList, $bug->status);?>
          diff --git a/module/testcase/view/create.html.php b/module/testcase/view/create.html.php index 0677028730..b300f59685 100644 --- a/module/testcase/view/create.html.php +++ b/module/testcase/view/create.html.php @@ -70,7 +70,7 @@ searchMore . '"');?> - + createLink('story', 'view', "storyID=$storyID", '', true), $lang->preview, '', "class='btn' id='preview'");?> diff --git a/module/testtask/control.php b/module/testtask/control.php index 8a18e5c109..fb6e695005 100644 --- a/module/testtask/control.php +++ b/module/testtask/control.php @@ -831,7 +831,7 @@ class testtask extends control $caseResult = $this->testtask->createResult($runID); if(dao::isError()) die(js::error(dao::getError())); - if('fail' == $caseResult) { + if($caseResult == 'fail') { $response['result'] = 'success'; $response['locate'] = $this->createLink('testtask', 'results',"runID=$runID&caseID=$caseID&version=$version"); diff --git a/module/testtask/js/runcase.js b/module/testtask/js/runcase.js index 27843e6918..ca33d440ee 100644 --- a/module/testtask/js/runcase.js +++ b/module/testtask/js/runcase.js @@ -52,46 +52,52 @@ function loadFilesName() $(document).ready(function() { // First unbind ajaxForm for form. - $("form[data-type='ajax']").unbind('submit'); + $("#dataform").unbind('submit'); // Bind ajaxForm for form again. - $.ajaxForm("form[data-type='ajax']", function(response) - { - if(response.locate) + $('#dataform').ajaxForm( + { + finish:function(response) { - if(response.locate == 'reload' && response.target == 'parent') + if(response.locate) { - parent.$.cookie('selfClose', 1); - parent.$.closeModal(null, 'this'); - } else if(response.next) { - location.href = response.locate; - } else { - - // Get cases result - $('#resultsContainer').load(response.locate + " #casesResults", function() + if(response.locate == 'reload' && response.target == 'parent') { - $('tr:first').addClass("show-detail"); - $('#tr-detail_1').removeClass("hide"); - - $('.result-item').click(function() + parent.$.cookie('selfClose', 1); + parent.$.closeModal(null, 'this'); + } + else if(response.next) + { + location.href = response.locate; + } + else + { + // Get cases result + $('#resultsContainer').load(response.locate + " #casesResults", function() { - var $this = $(this); - $this.toggleClass('show-detail'); - var show = $this.hasClass('show-detail'); - $this.next('.result-detail').toggleClass('hide', !show); - $this.find('.collapse-handle').toggleClass('icon-chevron-down', !show).toggleClass('icon-chevron-up', show); + $('tr:first').addClass("show-detail"); + $('#tr-detail_1').removeClass("hide"); + + $('.result-item').click(function() + { + var $this = $(this); + $this.toggleClass('show-detail'); + var show = $this.hasClass('show-detail'); + $this.next('.result-detail').toggleClass('hide', !show); + $this.find('.collapse-handle').toggleClass('icon-chevron-down', !show).toggleClass('icon-chevron-up', show); + }); + + $('#casesResults table caption .result-tip').html($('#resultTip').html()); + + $("#submit").text(caseResultSave); + $("#submit").attr({"disabled":"disabled"}); }); + } + } - $('#casesResults table caption .result-tip').html($('#resultTip').html()); - - $("#submit").text(caseResultSave); - $("#submit").attr({"disabled":"disabled"}); - }); - } + return false; } - - return false; - }); + }); $(document).on('click', ".step-group input[type='checkbox']", function() { diff --git a/module/todo/view/view.html.php b/module/todo/view/view.html.php index 72240e1a13..6c55be83c7 100644 --- a/module/todo/view/view.html.php +++ b/module/todo/view/view.html.php @@ -45,7 +45,7 @@ common::printLink('todo', 'edit', "todoID=$todo->id", "", '', "title='{$lang->todo->edit}' class='btn showinonlybody'"); common::printLink('todo', 'delete', "todoID=$todo->id", "", 'hiddenwin', "title='{$lang->todo->delete}' class='btn showinonlybody'"); - echo html::a('#commentModal', '', '', "title='{$lang->comment}' data-toggle='modal' class='btn'"); + if(common::hasPriv('action', 'comment', $todo)) echo html::a('#commentModal', '', '', "title='{$lang->comment}' data-toggle='modal' class='btn'"); if($this->session->todoList) { From 0484785235e862e5c296497537da11b195b1c920 Mon Sep 17 00:00:00 2001 From: Yagami Date: Fri, 25 Jan 2019 10:42:55 +0800 Subject: [PATCH 136/442] * Fix user loadlang. --- module/user/model.php | 1 + 1 file changed, 1 insertion(+) diff --git a/module/user/model.php b/module/user/model.php index 692d32e4a7..9d4ba6d0ae 100644 --- a/module/user/model.php +++ b/module/user/model.php @@ -159,6 +159,7 @@ class userModel extends model */ public function getUserRoles($users) { + $this->app->loadLang('user'); $users = $this->dao->select('account, role')->from(TABLE_USER)->where('account')->in($users)->fetchPairs(); if(!$users) return array(); From 9a19b8a177fd0992cf67a97d9c01f7400bdac843 Mon Sep 17 00:00:00 2001 From: Yagami Date: Fri, 25 Jan 2019 11:06:46 +0800 Subject: [PATCH 137/442] * Fix bug getproducts. --- module/bug/control.php | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/module/bug/control.php b/module/bug/control.php index ee1dd6f651..454b49093e 100644 --- a/module/bug/control.php +++ b/module/bug/control.php @@ -29,10 +29,7 @@ class bug extends control $this->loadModel('action'); $this->loadModel('story'); $this->loadModel('task'); - - $productList = $this->loadModel('block')->getProducts('noclosed', ''); - foreach($productList as $product) $products[$product->id] = $product->name; - $this->view->products = $this->products = $products; + $this->view->products = $this->products = $this->product->getPairs('nocode'); if($this->config->global->flow == 'onlyTest') { @@ -397,6 +394,9 @@ class bug extends control $moduleOptionMenu = $this->tree->getOptionMenu($productID, $viewType = 'bug', $startModuleID = 0, $branch); if(empty($moduleOptionMenu)) die(js::locate(helper::createLink('tree', 'browse', "productID=$productID&view=story"))); + $productList = $this->loadModel('block')->getProducts('noclosed', ''); + foreach($productList as $product) $products[$product->id] = $product->name; + /* Set custom. */ foreach(explode(',', $this->config->bug->list->customCreateFields) as $field) $customFields[$field] = $this->lang->bug->$field; $this->view->customFields = $customFields; @@ -406,6 +406,7 @@ class bug extends control $this->view->position[] = html::a($this->createLink('bug', 'browse', "productID=$productID"), $this->products[$productID]); $this->view->position[] = $this->lang->bug->create; + $this->view->products = $products; $this->view->productID = $productID; $this->view->productName = $this->products[$productID]; $this->view->moduleOptionMenu = $moduleOptionMenu; From d1ace922a52995d829d7e1a12acec439d6cf9aa2 Mon Sep 17 00:00:00 2001 From: chenfeiCF Date: Fri, 25 Jan 2019 13:17:29 +0800 Subject: [PATCH 138/442] * Finish task #5261, #5262, #5265. --- module/bug/model.php | 2 +- module/common/lang/en.php | 1 + module/dept/view/edit.html.php | 4 +++- module/task/model.php | 2 +- module/testcase/control.php | 19 +++++++++++-------- module/tree/view/edit.html.php | 1 - 6 files changed, 17 insertions(+), 12 deletions(-) diff --git a/module/bug/model.php b/module/bug/model.php index a86dc4f60c..9d2c90a7d7 100644 --- a/module/bug/model.php +++ b/module/bug/model.php @@ -2667,7 +2667,7 @@ class bugModel extends model $assignToLink = helper::createLink('bug', 'assignTo', "bugID=$bug->id", '', true); $assignToHtml = html::a($assignToLink, " {$assignedToText}", '', "class='$btnClass'"); - echo !common::hasPriv('bug', 'assignTo') ? "{$assignedToText}" : $assignToHtml; + echo !common::hasPriv('bug', 'assignTo', $bug) ? "{$assignedToText}" : $assignToHtml; } /** diff --git a/module/common/lang/en.php b/module/common/lang/en.php index 4454234b3b..346639860e 100644 --- a/module/common/lang/en.php +++ b/module/common/lang/en.php @@ -865,3 +865,4 @@ if(isset($config->global->flow) and $config->global->flow == 'onlyTest') unset($lang->searchObjects['release']); unset($lang->searchObjects['project']); unset($lang->searchObjects['productplan']); +} diff --git a/module/dept/view/edit.html.php b/module/dept/view/edit.html.php index 11dae74392..f75b7a2dc9 100644 --- a/module/dept/view/edit.html.php +++ b/module/dept/view/edit.html.php @@ -14,7 +14,6 @@ $webRoot = $this->app->getWebRoot(); $jsRoot = $webRoot . "js/"; ?> - + diff --git a/module/task/model.php b/module/task/model.php index a94af1c135..70e5fab50e 100644 --- a/module/task/model.php +++ b/module/task/model.php @@ -2646,7 +2646,7 @@ class taskModel extends model $assignToLink = helper::createLink('task', 'assignTo', "projectID=$task->project&taskID=$task->id", '', true); $assignToHtml = html::a($assignToLink, " {$assignedToText}", '', "class='$btnClass'"); - echo !common::hasPriv('task', 'assignTo') ? "{$assignedToText}" : $assignToHtml; + echo !common::hasPriv('task', 'assignTo', $task) ? "{$assignedToText}" : $assignToHtml; } /** diff --git a/module/testcase/control.php b/module/testcase/control.php index ce98ec767a..59253bc911 100644 --- a/module/testcase/control.php +++ b/module/testcase/control.php @@ -252,15 +252,9 @@ class testcase extends control } if(empty($this->products)) $this->locate($this->createLink('product', 'create')); - /* Set productID and currentModuleID. */ + /* Set productID and branch. */ $productID = $this->product->saveState($productID, $this->products); if($branch === '') $branch = (int)$this->cookie->preBranch; - if($storyID and empty($moduleID)) - { - $story = $this->loadModel('story')->getByID($storyID); - $moduleID = $story->module; - } - $currentModuleID = (int)$moduleID; /* Set menu. */ $this->testcase->setMenu($this->products, $productID, $branch); @@ -319,6 +313,14 @@ class testcase extends control $position[] = $this->lang->testcase->common; $position[] = $this->lang->testcase->create; + /* Set story and currentModuleID. */ + if($storyID and empty($moduleID)) + { + $story = $this->loadModel('story')->getByID($storyID); + $moduleID = $story->module; + } + $currentModuleID = (int)$moduleID; + /* Get the status of stories are not closed. */ $storyStatus = $this->lang->story->statusList; $modules = array(); @@ -328,6 +330,7 @@ class testcase extends control $modules = $this->tree->getAllChildID($modules); } $stories = $this->story->getProductStoryPairs($productID, $branch, $modules, array_keys($storyStatus), 'id_desc', 50); + if($storyID and !isset($stories[$storyID])) $stories = $this->story->formatStories(array($storyID => $story)) + $stories;//Fix bug #2406. /* Set custom. */ foreach(explode(',', $this->config->testcase->customCreateFields) as $field) $customFields[$field] = $this->lang->testcase->$field; @@ -339,7 +342,7 @@ class testcase extends control $this->view->productID = $productID; $this->view->productName = $this->products[$productID]; $this->view->moduleOptionMenu = $this->tree->getOptionMenu($productID, $viewType = 'case', $startModuleID = 0, $branch); - $this->view->currentModuleID = $currentModuleID ? $currentModuleID : (isset($story->module) ? $story->module : 0); + $this->view->currentModuleID = $currentModuleID; $this->view->stories = $stories; $this->view->caseTitle = $caseTitle; $this->view->color = $color; diff --git a/module/tree/view/edit.html.php b/module/tree/view/edit.html.php index 1bcd06b5c1..abaf173532 100644 --- a/module/tree/view/edit.html.php +++ b/module/tree/view/edit.html.php @@ -15,7 +15,6 @@ $webRoot = $this->app->getWebRoot(); $jsRoot = $webRoot . "js/"; js::set('type', $type); ?> -
          diff --git a/module/project/view/ajaxgetdropmenu.html.php b/module/project/view/ajaxgetdropmenu.html.php index d30fc29ad3..af3f7981f7 100644 --- a/module/project/view/ajaxgetdropmenu.html.php +++ b/module/project/view/ajaxgetdropmenu.html.php @@ -49,8 +49,8 @@ foreach($projects as $project) ?>
          diff --git a/www/js/zui/min.js b/www/js/zui/min.js index 9bee2af512..cdca5e84cd 100644 --- a/www/js/zui/min.js +++ b/www/js/zui/min.js @@ -1,8 +1,8 @@ /*! - * ZUI: Zentao template - v1.8.1 - 2018-12-25 + * ZUI: Zentao template - v1.8.1 - 2019-01-25 * http://zui.sexy * GitHub: https://github.com/easysoft/zui.git - * Copyright (c) 2018 cnezsoft.com; Licensed MIT + * Copyright (c) 2019 cnezsoft.com; Licensed MIT */ !function(t,e,i){"use strict";if("undefined"==typeof t)throw new Error("ZUI requires jQuery");t.zui||(t.zui=function(e){t.isPlainObject(e)&&t.extend(t.zui,e)});var n={all:-1,left:0,middle:1,right:2},o=0;t.zui({uuid:function(t){var e=1e3*(new Date).getTime()+o++%1e3;return t?e:e.toString(36)},callEvent:function(e,n,o){if(t.isFunction(e)){o!==i&&(e=t.proxy(e,o));var s=e(n);return n&&(n.result=s),!(s!==i&&!s)}return 1},clientLang:function(){var i,n=e.config;if("undefined"!=typeof n&&n.clientLang&&(i=n.clientLang),!i){var o=t("html").attr("lang");i=o?o:navigator.userLanguage||navigator.userLanguage||"zh_cn"}return i.replace("-","_").toLowerCase()},strCode:function(t){var e=0;if(t&&t.length)for(var i=0;i0&&(o=s.data(e.substring(a+1))),o&&o.options){var h=o.options[r];t.isFunction(h)&&(l.result=t.zui.callEvent(h,l,o))}return s.trigger(l),l},t.fn.callComEvent=function(e,n,o){o===i||t.isArray(o)||(o=[o]);var s=this,a=s.triggerHandler(n,o),r=e.options[n];return r&&(a=r.apply(e,o)),a}}(jQuery,window,void 0),function(t){"use strict";t.fn.fixOlPd=function(e){return e=e||10,this.each(function(){var i=t(this);i.css("paddingLeft",Math.ceil(Math.log10(i.children().length))*e+10)})},t(function(){t(".ol-pd-fix,.article ol").fixOlPd()})}(jQuery),+function(t){"use strict";var e='[data-dismiss="alert"]',i="zui.alert",n=function(i){t(i).on("click",e,this.close)};n.prototype.close=function(e){function n(){a.trigger("closed."+i).remove()}var o=t(this),s=o.attr("data-target");s||(s=o.attr("href"),s=s&&s.replace(/.*(?=#[^\s]*$)/,""));var a=t(s);e&&e.preventDefault(),a.length||(a=o.hasClass("alert")?o:o.parent()),a.trigger(e=t.Event("close."+i)),e.isDefaultPrevented()||(a.removeClass("in"),t.support.transition&&a.hasClass("fade")?a.one(t.support.transition.end,n).emulateTransitionEnd(150):n())};var o=t.fn.alert;t.fn.alert=function(e){return this.each(function(){var o=t(this),s=o.data(i);s||o.data(i,s=new n(this)),"string"==typeof e&&s[e].call(o)})},t.fn.alert.Constructor=n,t.fn.alert.noConflict=function(){return t.fn.alert=o,this},t(document).on("click."+i+".data-api",e,n.prototype.close)}(window.jQuery),function(t,e){"use strict";var i="zui.pager",n={page:1,recTotal:0,recPerPage:10},o={zh_cn:{pageOfText:"第 {0} 页",prev:"上一页",next:"下一页",first:"第一页",last:"最后一页","goto":"跳转",pageOf:"第 {page} 页",totalPage:"共 {totalPage} 页",totalCount:"共 {recTotal} 项",pageSize:"每页 {recPerPage} 项",itemsRange:"第 {start} ~ {end} 项",pageOfTotal:"第 {page}/{totalPage} 页"},zh_tw:{pageOfText:"第 {0} 頁",prev:"上一頁",next:"下一頁",first:"第一頁",last:"最後一頁","goto":"跳轉",pageOf:"第 {page} 頁",totalPage:"共 {totalPage} 頁",totalCount:"共 {recTotal} 項",pageSize:"每頁 {recPerPage} 項",itemsRange:"第 {start} ~ {end} 項",pageOfTotal:"第 {page}/{totalPage} 頁"},en:{pageOfText:"Page {0}",prev:"Prev",next:"Next",first:"First",last:"Last","goto":"Goto",pageOf:"Page {page}",totalPage:"{totalPage} pages",totalCount:"{recTotal} in total",pageSize:"{recPerPage} per page",itemsRange:"From {start} to {end}",pageOfTotal:"Page {page} of {totalPage}"}},s=function(e,n){var a=this;a.name=i,a.$=t(e),n=a.options=t.extend({},s.DEFAULTS,this.$.data(),n);var r=n.lang||t.zui.clientLang();a.lang=t.isPlainObject(r)?t.extend(!0,{},o[r.lang||t.zui.clientLang()],r):o[r],a.state={},a.set(n.page,n.recTotal,n.recPerPage,!0),a.$.on("click",".pager-goto-btn",function(){var e=t(this).closest(".pager-goto"),i=parseInt(e.find(".pager-goto-input").val());NaN!==i&&a.set(i)}).on("click",".pager-item",function(){var e=t(this).data("page");"number"==typeof e&&e>0&&a.set(e)}).on("click",".pager-size-menu [data-size]",function(){var e=t(this).data("size");"number"==typeof e&&e>0&&a.set(-1,-1,e)})};s.prototype.set=function(e,i,o,s){var a=this;"object"==typeof e&&null!==e&&(o=e.recPerPage,i=e.recTotal,e=e.page);var r=a.state;r||(r=t.extend({},n));var l=t.extend({},r);return"number"==typeof o&&o>0&&(r.recPerPage=o),"number"==typeof i&&i>=0&&(r.recTotal=i),"number"==typeof e&&e>=0&&(r.page=e),r.totalPage=r.recTotal&&r.recPerPage?Math.ceil(r.recTotal/r.recPerPage):1,r.page=Math.max(0,Math.min(r.page,r.totalPage)),r.pageRecCount=r.recTotal,r.page&&r.recTotal&&(r.page1&&(r.pageRecCount=r.recTotal-r.recPerPage*(r.page-1))),r.skip=r.page>1?(r.page-1)*r.recPerPage:0,r.start=r.skip+1,r.end=r.skip+r.pageRecCount,r.prev=r.page>1?r.page-1:0,r.next=r.page').attr("href",i?s.createLink(i,s.state):"###").html(n);return o||(a=t("
        • ").append(a).toggleClass("active",i===s.state.page).toggleClass("disabled",!i||i===s.state.page)),a},s.prototype.createNavItems=function(t){var i=this,n=i.$,o=i.state,s=o.totalPage,a=o.page,r=function(t,o){if(t===!1)return void n.append(i.createLinkItem(0,o||i.options.navEllipsisItem));o===e&&(o=t);for(var s=t;s<=o;++s)n.append(i.createLinkItem(s))};t===e&&(t=i.options.maxNavCount||10),r(1),s>1&&(s<=t?r(2,s):as-t+2?(r(!1),r(s-t+2,s)):(r(!1),r(a-Math.ceil((t-4)/2),a+Math.floor((t-4)/2)),r(!1),r(s)))},s.prototype.createGoto=function(){var e=this,i=this.state,n=t('
          ");return n},s.prototype.createSizeMenu=function(){var e=this,i=this.state,n=t(''),o=e.options.pageSizeOptions;"string"==typeof o&&(o=o.split(","));for(var s=0;s'+a+"
        • ").toggleClass("active",a===i.recPerPage);n.append(r)}return t('
          ').addClass(e.options.menuDirection).append(n)},s.prototype.createElement=function(e,i,n){var o=this,s=t.proxy(o.createLinkItem,o),a=o.lang;switch(e){case"prev":return s(n.prev,a.prev);case"prev_icon":return s(n.prev,'');case"next":return s(n.next,a.next);case"next_icon":return s(n.next,'');case"first":return s(1,a.first);case"first_icon":return s(1,'');case"last":return s(n.totalPage,a.last);case"last_icon":return s(n.totalPage,'');case"space":case"|":return t('
        • ');case"nav":case"pages":return void o.createNavItems();case"total_text":return t(('
          '+a.totalCount+"
          ").format(n));case"page_text":return t(('
          '+a.pageOf+"
          ").format(n));case"total_page_text":return t(('
          '+a.totalPage+"
          ").format(n));case"page_of_total_text":return t(('
          '+a.pageOfTotal+"
          ").format(n));case"page_size_text":return t(('
          '+a.pageSize+"
          ").format(n));case"items_range_text":return t(('
          '+a.itemsRange+"
          ").format(n));case"goto":return o.createGoto();case"size_menu":return o.createSizeMenu();default:return t("
        • ").html(e.format(n))}},s.prototype.createLink=function(i,n){i===e&&(i=this.state.page),n===e&&(n=this.state);var o=this.options.linkCreator;return"string"==typeof o?o.format(t.extend({},n,{page:i})):t.isFunction(o)?o(i,n):"#page="+i},s.prototype.render=function(e){var i=this,n=i.state,o=i.options.elementCreator||i.createElement,s=t.isPlainObject(o);e=e||i.elements||i.options.elements,"string"==typeof e&&(e=e.split(",")),i.elements=e,i.$.empty();for(var a=0;a").append(h)),i.$.append(h))}var c=null;return i.$.children("li").each(function(){var e=t(this),i=!!e.children(".pager-item").length;c?c.toggleClass("pager-item-right",!i):i&&e.addClass("pager-item-left"),c=i?e:null}),c&&c.addClass("pager-item-right"),i.$.callComEvent(i,"onRender",[n]),i},s.DEFAULTS=t.extend({elements:["first_icon","prev_icon","pages","next_icon","last_icon","page_of_total_text","items_range_text","total_text"],prevIcon:"icon-double-angle-left",nextIcon:"icon-double-angle-right",firstIcon:"icon-step-backward",lastIcon:"icon-step-forward",navEllipsisItem:'',maxNavCount:10,menuDirection:"dropdown",pageSizeOptions:[10,20,30,50,100]},n),t.fn.pager=function(e){return this.each(function(){var n=t(this),o=n.data(i),a="object"==typeof e&&e;o||n.data(i,o=new s(this,a)),"string"==typeof e&&o[e]()})},s.NAME=i,t.fn.pager.Constructor=s,t(function(){t('[data-ride="pager"]').pager()})}(jQuery,void 0),+function(t){"use strict";var e="zui.tab",i=function(e){this.element=t(e)};i.prototype.show=function(){var i=this.element,n=i.closest("ul:not(.dropdown-menu)"),o=i.attr("data-target")||i.attr("data-tab");if(o||(o=i.attr("href"),o=o&&o.replace(/.*(?=#[^\s]*$)/,"")),!i.parent("li").hasClass("active")){var s=n.find(".active:last a")[0],a=t.Event("show."+e,{relatedTarget:s});if(i.trigger(a),!a.isDefaultPrevented()){var r=t(o);this.activate(i.parent("li"),n),this.activate(r,r.parent(),function(){i.trigger({type:"shown."+e,relatedTarget:s})})}}},i.prototype.activate=function(e,i,n){function o(){s.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),e.addClass("active"),a?(e[0].offsetWidth,e.addClass("in")):e.removeClass("fade"),e.parent(".dropdown-menu")&&e.closest("li.dropdown").addClass("active"),n&&n()}var s=i.find("> .active"),a=n&&t.support.transition&&s.hasClass("fade");a?s.one(t.support.transition.end,o).emulateTransitionEnd(150):o(),s.removeClass("in")};var n=t.fn.tab;t.fn.tab=function(n){return this.each(function(){var o=t(this),s=o.data(e);s||o.data(e,s=new i(this)),"string"==typeof n&&s[n]()})},t.fn.tab.Constructor=i,t.fn.tab.noConflict=function(){return t.fn.tab=n,this},t(document).on("click.zui.tab.data-api",'[data-toggle="tab"], [data-tab]',function(e){e.preventDefault(),t(this).tab("show")})}(window.jQuery),+function(t){"use strict";function e(){var t=document.createElement("bootstrap"),e={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var i in e)if(void 0!==t.style[i])return{end:e[i]};return!1}t.fn.emulateTransitionEnd=function(e){var i=!1,n=this;t(this).one("bsTransitionEnd",function(){i=!0});var o=function(){i||t(n).trigger(t.support.transition.end)};return setTimeout(o,e),this},t(function(){t.support.transition=e(),t.support.transition&&(t.event.special.bsTransitionEnd={bindType:t.support.transition.end,delegateType:t.support.transition.end,handle:function(e){if(t(e.target).is(this))return e.handleObj.handler.apply(this,arguments)}})})}(jQuery),+function(t){"use strict";var e="zui.collapse",i=function(e,n){this.$element=t(e),this.options=t.extend({},i.DEFAULTS,n),this.transitioning=null,this.options.parent&&(this.$parent=t(this.options.parent)),this.options.toggle&&this.toggle()};i.DEFAULTS={toggle:!0},i.prototype.dimension=function(){var t=this.$element.hasClass("width");return t?"width":"height"},i.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var i=t.Event("show."+e);if(this.$element.trigger(i),!i.isDefaultPrevented()){var n=this.$parent&&this.$parent.find(".in");if(n&&n.length){var o=n.data(e);if(o&&o.transitioning)return;n.collapse("hide"),o||n.data(e,null)}var s=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[s](0),this.transitioning=1;var a=function(){this.$element.removeClass("collapsing").addClass("in")[s]("auto"),this.transitioning=0,this.$element.trigger("shown."+e)};if(!t.support.transition)return a.call(this);var r=t.camelCase(["scroll",s].join("-"));this.$element.one(t.support.transition.end,t.proxy(a,this)).emulateTransitionEnd(350)[s](this.$element[0][r])}}},i.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var i=t.Event("hide."+e);if(this.$element.trigger(i),!i.isDefaultPrevented()){var n=this.dimension();this.$element[n](this.$element[n]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse").removeClass("in"),this.transitioning=1;var o=function(){this.transitioning=0,this.$element.trigger("hidden."+e).removeClass("collapsing").addClass("collapse")};return t.support.transition?void this.$element[n](0).one(t.support.transition.end,t.proxy(o,this)).emulateTransitionEnd(350):o.call(this)}}},i.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()};var n=t.fn.collapse;t.fn.collapse=function(n){return this.each(function(){var o=t(this),s=o.data(e),a=t.extend({},i.DEFAULTS,o.data(),"object"==typeof n&&n);s||o.data(e,s=new i(this,a)),"string"==typeof n&&s[n]()})},t.fn.collapse.Constructor=i,t.fn.collapse.noConflict=function(){return t.fn.collapse=n,this},t(document).on("click."+e+".data-api","[data-toggle=collapse]",function(i){var n,o=t(this),s=o.attr("data-target")||i.preventDefault()||(n=o.attr("href"))&&n.replace(/.*(?=#[^\s]+$)/,""),a=t(s),r=a.data(e),l=r?"toggle":o.data(),h=o.attr("data-parent"),c=h&&t(h);r&&r.transitioning||(c&&c.find('[data-toggle=collapse][data-parent="'+h+'"]').not(o).addClass("collapsed"),o[a.hasClass("in")?"addClass":"removeClass"]("collapsed")),a.collapse(l)})}(window.jQuery),function(t,e){"use strict";var i=1200,n=992,o=768,s=e(t),a=function(){var t=s.width();e("html").toggleClass("screen-desktop",t>=n&&t=i).toggleClass("screen-tablet",t>=o&&t=n)},r="",l=navigator.userAgent;l.match(/(iPad|iPhone|iPod)/i)?r+=" os-ios":l.match(/android/i)?r+=" os-android":l.match(/Win/i)?r+=" os-windows":l.match(/Mac/i)?r+=" os-mac":l.match(/Linux/i)?r+=" os-linux":l.match(/X11/i)&&(r+=" os-unix"),"ontouchstart"in document.documentElement&&(r+=" is-touchable"),e("html").addClass(r),s.resize(a),a()}(window,jQuery),function(t){"use strict";var e={zh_cn:'您的浏览器版本过低,无法体验所有功能,建议升级或者更换浏览器。 了解更多...',zh_tw:'您的瀏覽器版本過低,無法體驗所有功能,建議升級或者更换瀏覽器。了解更多...',en:'Your browser is too old, it has been unable to experience the colorful internet. We strongly recommend that you upgrade a better one. Learn more...'},i=function(){var t=this.isIE()||this.isIE10()||!1;if(t)for(var e=10;e>5;e--)if(this.isIE(e)){t=e;break}this.ie=t,this.cssHelper()};i.prototype.cssHelper=function(){var e=this.ie,i=t("html");i.toggleClass("ie",e).removeClass("ie-6 ie-7 ie-8 ie-9 ie-10"),e&&i.addClass("ie-"+e).toggleClass("gt-ie-7 gte-ie-8 support-ie",e>=8).toggleClass("lte-ie-7 lt-ie-8 outdated-ie",e<8).toggleClass("gt-ie-8 gte-ie-9",e>=9).toggleClass("lte-ie-8 lt-ie-9",e<9).toggleClass("gt-ie-9 gte-ie-10",e>=10).toggleClass("lte-ie-9 lt-ie-10",e<10)},i.prototype.tip=function(i){var n=t("#browseHappyTip");n.length||(n=t('
          '),n.prependTo("body")),n.find(".content").html(i||this.browseHappyTip||e[t.zui.clientLang()||"zh_cn"])},i.prototype.isIE=function(t){if(10===t)return this.isIE10();var e=document.createElement("b");return e.innerHTML="",1===e.getElementsByTagName("i").length},i.prototype.isIE10=function(){return!1},t.zui({browser:new i}),t(function(){t("body").hasClass("disabled-browser-tip")||t.zui.browser.ie&&t.zui.browser.ie<8&&t.zui.browser.tip()})}(jQuery),function(){"use strict";Date.ONEDAY_TICKS=864e5,Date.prototype.format||(Date.prototype.format=function(t){var e={"M+":this.getMonth()+1,"d+":this.getDate(),"h+":this.getHours(),"m+":this.getMinutes(),"s+":this.getSeconds(),"q+":Math.floor((this.getMonth()+3)/3),"S+":this.getMilliseconds()};/(y+)/i.test(t)&&(t=t.replace(RegExp.$1,(this.getFullYear()+"").substr(4-RegExp.$1.length)));for(var i in e)new RegExp("("+i+")").test(t)&&(t=t.replace(RegExp.$1,1==RegExp.$1.length?e[i]:("00"+e[i]).substr((""+e[i]).length)));return t}),Date.prototype.addMilliseconds||(Date.prototype.addMilliseconds=function(t){return this.setTime(this.getTime()+t),this}),Date.prototype.addDays||(Date.prototype.addDays=function(t){return this.addMilliseconds(t*Date.ONEDAY_TICKS),this}),Date.prototype.clone||(Date.prototype.clone=function(){var t=new Date;return t.setTime(this.getTime()),t}),Date.isLeapYear||(Date.isLeapYear=function(t){return t%4===0&&t%100!==0||t%400===0}),Date.getDaysInMonth||(Date.getDaysInMonth=function(t,e){return[31,Date.isLeapYear(t)?29:28,31,30,31,30,31,31,30,31,30,31][e]}),Date.prototype.isLeapYear||(Date.prototype.isLeapYear=function(){return Date.isLeapYear(this.getFullYear())}),Date.prototype.clearTime||(Date.prototype.clearTime=function(){return this.setHours(0),this.setMinutes(0),this.setSeconds(0),this.setMilliseconds(0),this}),Date.prototype.getDaysInMonth||(Date.prototype.getDaysInMonth=function(){return Date.getDaysInMonth(this.getFullYear(),this.getMonth())}),Date.prototype.addMonths||(Date.prototype.addMonths=function(t){var e=this.getDate();return this.setDate(1),this.setMonth(this.getMonth()+t),this.setDate(Math.min(e,this.getDaysInMonth())),this}),Date.prototype.getLastWeekday||(Date.prototype.getLastWeekday=function(t){t=t||1;for(var e=this.clone();e.getDay()!=t;)e.addDays(-1);return e.clearTime(),e}),Date.prototype.isSameDay||(Date.prototype.isSameDay=function(t){return t.toDateString()===this.toDateString()}),Date.prototype.isSameWeek||(Date.prototype.isSameWeek=function(t){var e=this.getLastWeekday(),i=e.clone().addDays(7);return t>=e&&t0){var i;if(arguments.length<=2&&"object"==typeof t)for(var n in t)void 0!==t[n]&&(i=new RegExp("("+(arguments[1]?arguments[1].replace("0",n):"{"+n+"}")+")","g"),e=e.replace(i,t[n]));else for(var o=0;oi.length)&&(e=i.length),e-=t.length;var n=i.indexOf(t,e);return n!==-1&&n===e}),String.prototype.startsWith||(String.prototype.startsWith=function(t,e){return e=e||0,this.lastIndexOf(t,e)===e}),String.prototype.includes||(String.prototype.includes=function(){return String.prototype.indexOf.apply(this,arguments)!==-1})}(),/*! * jQuery resize event - v1.1 @@ -75,4 +75,4 @@ function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"= * Binny V A, http://www.openjs.com/scripts/events/keyboard_shortcuts/ */ function(t){function e(e){if("string"==typeof e.data){var i=e.handler,n=e.data.toLowerCase().split(" ");e.handler=function(e){if(this===e.target||!/textarea|select/i.test(e.target.nodeName)&&"text"!==e.target.type){var o="keypress"!==e.type&&t.hotkeys.specialKeys[e.which],s=String.fromCharCode(e.which).toLowerCase(),a="",r={};e.altKey&&"alt"!==o&&(a+="alt+"),e.ctrlKey&&"ctrl"!==o&&(a+="ctrl+"),e.metaKey&&!e.ctrlKey&&"meta"!==o&&(a+="meta+"),e.shiftKey&&"shift"!==o&&(a+="shift+"),o?r[a+o]=!0:(r[a+s]=!0,r[a+t.hotkeys.shiftNums[s]]=!0,"shift+"===a&&(r[t.hotkeys.shiftNums[s]]=!0));for(var l=0,h=n.length;l","/":"?","\\":"|"}},t.each(["keydown","keyup","keypress"],function(){t.event.special[this]={add:e}})}(jQuery),function(t){"use strict";function e(e,i){if(e===!1)return e;if(!e)return i;e===!0?e={add:!0,"delete":!0,edit:!0,sort:!0}:"string"==typeof e&&(e=e.split(","));var n;return t.isArray(e)&&(n={},t.each(e,function(e,i){t.isPlainObject(i)?n[i.action]=i:n[i]=!0}),e=n),t.isPlainObject(e)&&(n={},t.each(e,function(e,i){i?n[e]=t.extend({type:e},a[e],t.isPlainObject(i)?i:null):n[e]=!1}),e=n),i?t.extend(!0,{},i,e):e}function i(e,i,n){return i=i||e.type,t(n||e.template).addClass("tree-action").attr(t.extend({"data-type":i,title:e.title||""},e.attr)).data("action",e)}var n="zui.tree",o=0,s=function(e,i){this.name=n,this.$=t(e),this.getOptions(i),this._init()},a={sort:{template:''},add:{template:''},edit:{template:''},"delete":{template:''}};s.DEFAULTS={animate:null,initialState:"normal",toggleTemplate:''},s.prototype.add=function(e,i,n,o,s){var a,r=t(e),l=this.options;if(r.is("li")?(a=r.children("ul"),a.length||(a=t("
        • lineNumber?>testcase->id?>idAB?> testcase->title?>testcase->branch?> testcase->module?> testcase->story?>testcase->pri?>testcase->type?>testcase->pri?>testcase->type?> testcase->stage?>testcase->keywords?> testcase->precondition?> @@ -43,7 +39,7 @@ ?> $case):?> title)) continue;?> - + - - - - - + + - - + - - - - + + + @@ -39,7 +39,7 @@ $case):?> title)) continue;?> id) and !isset($cases[$case->id])) $case->id = 0;?> - + - + - - + + - + type != 'normal'):?> diff --git a/module/release/view/view.html.php b/module/release/view/view.html.php index f36b28891c..6bac17fa8c 100644 --- a/module/release/view/view.html.php +++ b/module/release/view/view.html.php @@ -21,7 +21,8 @@
          id;?> - name;?> + marker ? "" . $release->name : $release->name;?> + deleted):?> release->deleted;?> From ed6172aab012b96aadebd7142112efa1ae593d87 Mon Sep 17 00:00:00 2001 From: Yagami Date: Mon, 21 Jan 2019 15:55:36 +0800 Subject: [PATCH 102/442] * Finish task #5210. --- module/bug/view/create.html.php | 6 +----- module/story/view/create.html.php | 2 ++ module/task/view/create.html.php | 6 +----- module/testcase/view/create.html.php | 6 +----- 4 files changed, 5 insertions(+), 15 deletions(-) diff --git a/module/bug/view/create.html.php b/module/bug/view/create.html.php index fb92e5afca..8dc5594d72 100644 --- a/module/bug/view/create.html.php +++ b/module/bug/view/create.html.php @@ -196,11 +196,7 @@ js::set('confirmDeleteTemplate', $lang->bug->confirmDeleteTemplate); } } $priList = $lang->bug->priList; - if(end($priList)) - { - unset($priList[0]); - $priList[0] = ''; - } + if(end($priList)) unset($priList[0]); ?> diff --git a/module/story/view/create.html.php b/module/story/view/create.html.php index 8c86cd4d1c..c01944a897 100644 --- a/module/story/view/create.html.php +++ b/module/story/view/create.html.php @@ -127,7 +127,9 @@ break; } } + $priList = $lang->story->priList; + if(end($priList)) unset($priList[0]); ?> diff --git a/module/task/view/create.html.php b/module/task/view/create.html.php index d7f4ff5b37..d86891f449 100644 --- a/module/task/view/create.html.php +++ b/module/task/view/create.html.php @@ -100,11 +100,7 @@ } } $priList = $lang->task->priList; - if(end($priList)) - { - unset($priList[0]); - $priList[0] = ''; - } + if(end($priList)) unset($priList[0]); ?> pri, "class='form-control'");?> diff --git a/module/testcase/view/create.html.php b/module/testcase/view/create.html.php index c3ce4a5ad9..0677028730 100644 --- a/module/testcase/view/create.html.php +++ b/module/testcase/view/create.html.php @@ -106,11 +106,7 @@ } } $priList = $lang->testcase->priList; - if(end($priList)) - { - unset($priList[0]); - $priList[0] = ''; - } + if(end($priList)) unset($priList[0]); ?> From 36fced872a0450860ecf6cb63c4b3e1a3b0854c2 Mon Sep 17 00:00:00 2001 From: reneeteng Date: Tue, 22 Jan 2019 13:16:06 +0800 Subject: [PATCH 103/442] * Lang change. --- module/common/lang/en.php | 3 +-- module/project/lang/en.php | 8 ++++---- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/module/common/lang/en.php b/module/common/lang/en.php index 57e60dd25e..9788e7f037 100644 --- a/module/common/lang/en.php +++ b/module/common/lang/en.php @@ -236,7 +236,7 @@ $lang->project->menu = new stdclass(); $lang->project->menu->task = array('link' => 'Task|project|task|projectID=%s', 'subModule' => 'task,tree', 'alias' => 'importtask,importbug'); $lang->project->menu->kanban = array('link' => 'Kanban|project|kanban|projectID=%s'); -$lang->project->menu->burn = array('link' => 'Burn|project|burn|projectID=%s'); +$lang->project->menu->burn = array('link' => 'Burndown|project|burn|projectID=%s'); $lang->project->menu->list = array('link' => 'More|project|grouptask|projectID=%s', 'alias' => 'grouptask,tree', 'class' => 'dropdown dropdown-hover'); $lang->project->menu->story = array('link' => 'Story|project|story|projectID=%s', 'subModule' => 'story', 'alias' => 'linkstory,storykanban'); $lang->project->menu->qa = array('link' => 'Test|project|bug|projectID=%s', 'subModule' => 'bug,build,testtask', 'alias' => 'build,testtask', 'class' => 'dropdown dropdown-hover'); @@ -865,4 +865,3 @@ if(isset($config->global->flow) and $config->global->flow == 'onlyTest') unset($lang->searchObjects['release']); unset($lang->searchObjects['project']); unset($lang->searchObjects['productplan']); -} diff --git a/module/project/lang/en.php b/module/project/lang/en.php index 5c917676ae..7b5dd6e108 100644 --- a/module/project/lang/en.php +++ b/module/project/lang/en.php @@ -19,7 +19,7 @@ $lang->project->begin = 'Begin'; $lang->project->end = 'End'; $lang->project->dateRange = 'Duration'; $lang->project->to = 'To'; -$lang->project->days = 'Man Day'; +$lang->project->days = 'Man-Day'; $lang->project->day = ' days'; $lang->project->workHour = ' hours'; $lang->project->totalHours = 'Work Hours'; @@ -106,14 +106,14 @@ $lang->project->aclList['custom'] = 'Whitelist (Team members and the whitelist /* 方法列表。*/ $lang->project->index = "Home"; -$lang->project->task = 'Tasks'; +$lang->project->task = 'Task'; $lang->project->groupTask = 'Group View'; $lang->project->story = 'Story'; $lang->project->bug = 'Bug'; $lang->project->dynamic = 'Dynamic'; $lang->project->latestDynamic = 'Latest Dynamic'; $lang->project->build = 'Build'; -$lang->project->testtask = 'Test Task'; +$lang->project->testtask = 'Test'; $lang->project->burn = 'Burndown'; $lang->project->computeBurn = 'Update'; $lang->project->burnData = 'Burndown Data'; @@ -197,7 +197,7 @@ $lang->project->selectProject = "Select {$lang->projectCommon}"; $lang->project->beginAndEnd = 'Duration'; $lang->project->begin = 'Begin'; $lang->project->end = 'End'; -$lang->project->lblStats = 'Total Man-Hour(h) : '; +$lang->project->lblStats = 'Total Effort(h) : '; $lang->project->stats = '%s Available, %s Total Estimates, %s Cost, %s Left.'; $lang->project->taskSummary = "Tasks on this page : %s Total, %s Wait, %s Doing;     Hours : %s Est., %s Cost, %s Left."; $lang->project->checkedSummary = " %total% Checked, %wait% Wait, %doing% Doing; Hours: %estimate% Est., %consumed% Cost, %left% Left."; From 235b242290de5aea2c268a234f5e0b5594cf939b Mon Sep 17 00:00:00 2001 From: wangyidong Date: Tue, 22 Jan 2019 14:29:05 +0800 Subject: [PATCH 104/442] * finish task #5203. --- db/standard/zentao11.1.sql | 969 +++++++++++++++++++++++ module/upgrade/control.php | 9 + module/upgrade/model.php | 823 +++++++++++++------ module/upgrade/view/consistency.html.php | 2 +- module/user/control.php | 2 +- 5 files changed, 1568 insertions(+), 237 deletions(-) create mode 100644 db/standard/zentao11.1.sql diff --git a/db/standard/zentao11.1.sql b/db/standard/zentao11.1.sql new file mode 100644 index 0000000000..d50ded5942 --- /dev/null +++ b/db/standard/zentao11.1.sql @@ -0,0 +1,969 @@ +CREATE TABLE `zt_action` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `objectType` varchar(30) NOT NULL DEFAULT '', + `objectID` mediumint(8) unsigned NOT NULL DEFAULT '0', + `product` varchar(255) NOT NULL, + `project` mediumint(9) NOT NULL, + `actor` varchar(30) NOT NULL DEFAULT '', + `action` varchar(30) NOT NULL DEFAULT '', + `date` datetime NOT NULL, + `comment` text NOT NULL, + `extra` text NOT NULL, + `read` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `date` (`date`), + KEY `actor` (`actor`), + KEY `project` (`project`), + KEY `objectID` (`objectID`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_block` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `module` varchar(20) NOT NULL, + `title` varchar(100) NOT NULL, + `source` varchar(20) NOT NULL, + `block` varchar(20) NOT NULL, + `params` text NOT NULL, + `order` tinyint(3) unsigned NOT NULL DEFAULT '0', + `grid` tinyint(3) unsigned NOT NULL DEFAULT '0', + `height` smallint(5) unsigned NOT NULL DEFAULT '0', + `hidden` tinyint(1) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `accountModuleOrder` (`account`,`module`,`order`), + KEY `account` (`account`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_branch` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `name` varchar(255) NOT NULL, + `order` smallint(5) unsigned NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_bug` ( + `id` mediumint(8) NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` mediumint(8) unsigned NOT NULL DEFAULT '0', + `project` mediumint(8) unsigned NOT NULL DEFAULT '0', + `plan` mediumint(8) unsigned NOT NULL DEFAULT '0', + `story` mediumint(8) unsigned NOT NULL DEFAULT '0', + `storyVersion` smallint(6) NOT NULL DEFAULT '1', + `task` mediumint(8) unsigned NOT NULL DEFAULT '0', + `toTask` mediumint(8) unsigned NOT NULL DEFAULT '0', + `toStory` mediumint(8) NOT NULL DEFAULT '0', + `title` varchar(255) NOT NULL, + `keywords` varchar(255) NOT NULL, + `severity` tinyint(4) NOT NULL DEFAULT '0', + `pri` tinyint(3) unsigned NOT NULL, + `type` varchar(30) NOT NULL DEFAULT '', + `os` varchar(30) NOT NULL DEFAULT '', + `browser` varchar(30) NOT NULL DEFAULT '', + `hardware` varchar(30) NOT NULL, + `found` varchar(30) NOT NULL DEFAULT '', + `steps` text NOT NULL, + `status` enum('active','resolved','closed') NOT NULL DEFAULT 'active', + `color` char(7) NOT NULL, + `confirmed` tinyint(1) NOT NULL DEFAULT '0', + `activatedCount` smallint(6) NOT NULL, + `activatedDate` datetime NOT NULL, + `mailto` text, + `openedBy` varchar(30) NOT NULL DEFAULT '', + `openedDate` datetime NOT NULL, + `openedBuild` varchar(255) NOT NULL, + `assignedTo` varchar(30) NOT NULL DEFAULT '', + `assignedDate` datetime NOT NULL, + `deadline` date NOT NULL, + `resolvedBy` varchar(30) NOT NULL DEFAULT '', + `resolution` varchar(30) NOT NULL DEFAULT '', + `resolvedBuild` varchar(30) NOT NULL DEFAULT '', + `resolvedDate` datetime NOT NULL, + `closedBy` varchar(30) NOT NULL DEFAULT '', + `closedDate` datetime NOT NULL, + `duplicateBug` mediumint(8) unsigned NOT NULL, + `linkBug` varchar(255) NOT NULL, + `case` mediumint(8) unsigned NOT NULL, + `caseVersion` smallint(6) NOT NULL DEFAULT '1', + `result` mediumint(8) unsigned NOT NULL, + `testtask` mediumint(8) unsigned NOT NULL, + `lastEditedBy` varchar(30) NOT NULL DEFAULT '', + `lastEditedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `project` (`project`), + KEY `status` (`status`), + KEY `plan` (`plan`), + KEY `story` (`story`), + KEY `case` (`case`), + KEY `assignedTo` (`assignedTo`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_build` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `project` mediumint(8) unsigned NOT NULL DEFAULT '0', + `name` char(150) NOT NULL, + `scmPath` char(255) NOT NULL, + `filePath` char(255) NOT NULL, + `date` date NOT NULL, + `stories` text NOT NULL, + `bugs` text NOT NULL, + `builder` char(30) NOT NULL DEFAULT '', + `desc` text NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `project` (`project`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_burn` ( + `project` mediumint(8) unsigned NOT NULL, + `date` date NOT NULL, + `estimate` float NOT NULL, + `left` float NOT NULL, + `consumed` float NOT NULL, + PRIMARY KEY (`project`,`date`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_case` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `lib` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` mediumint(8) unsigned NOT NULL DEFAULT '0', + `path` mediumint(8) unsigned NOT NULL DEFAULT '0', + `story` mediumint(30) unsigned NOT NULL DEFAULT '0', + `storyVersion` smallint(6) NOT NULL DEFAULT '1', + `title` varchar(255) NOT NULL, + `precondition` text NOT NULL, + `keywords` varchar(255) NOT NULL, + `pri` tinyint(3) unsigned NOT NULL DEFAULT '3', + `type` char(30) NOT NULL DEFAULT '1', + `stage` varchar(255) NOT NULL, + `howRun` varchar(30) NOT NULL, + `scriptedBy` varchar(30) NOT NULL, + `scriptedDate` date NOT NULL, + `scriptStatus` varchar(30) NOT NULL, + `scriptLocation` varchar(255) NOT NULL, + `status` char(30) NOT NULL DEFAULT '1', + `color` char(7) NOT NULL, + `frequency` enum('1','2','3') NOT NULL DEFAULT '1', + `order` tinyint(30) unsigned NOT NULL DEFAULT '0', + `openedBy` char(30) NOT NULL DEFAULT '', + `openedDate` datetime NOT NULL, + `reviewedBy` varchar(255) NOT NULL, + `reviewedDate` date NOT NULL, + `lastEditedBy` char(30) NOT NULL DEFAULT '', + `lastEditedDate` datetime NOT NULL, + `version` tinyint(3) unsigned NOT NULL DEFAULT '0', + `linkCase` varchar(255) NOT NULL, + `fromBug` mediumint(8) unsigned NOT NULL, + `fromCaseID` mediumint(8) unsigned NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + `lastRunner` varchar(30) NOT NULL, + `lastRunDate` datetime NOT NULL, + `lastRunResult` char(30) NOT NULL, + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `story` (`story`), + KEY `module` (`module`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_casestep` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `parent` mediumint(8) unsigned NOT NULL DEFAULT '0', + `case` mediumint(8) unsigned NOT NULL DEFAULT '0', + `version` smallint(3) unsigned NOT NULL DEFAULT '0', + `type` varchar(10) NOT NULL DEFAULT 'step', + `desc` text NOT NULL, + `expect` text NOT NULL, + PRIMARY KEY (`id`), + KEY `case` (`case`), + KEY `version` (`version`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_company` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` char(120) DEFAULT NULL, + `phone` char(20) DEFAULT NULL, + `fax` char(20) DEFAULT NULL, + `address` char(120) DEFAULT NULL, + `zipcode` char(10) DEFAULT NULL, + `website` char(120) DEFAULT NULL, + `backyard` char(120) DEFAULT NULL, + `guest` enum('1','0') NOT NULL DEFAULT '0', + `admins` char(255) DEFAULT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_config` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `owner` char(30) NOT NULL DEFAULT '', + `module` varchar(30) NOT NULL, + `section` char(30) NOT NULL DEFAULT '', + `key` char(30) NOT NULL DEFAULT '', + `value` text NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `unique` (`owner`,`module`,`section`,`key`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_cron` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `m` varchar(20) NOT NULL, + `h` varchar(20) NOT NULL, + `dom` varchar(20) NOT NULL, + `mon` varchar(20) NOT NULL, + `dow` varchar(20) NOT NULL, + `command` text NOT NULL, + `remark` varchar(255) NOT NULL, + `type` varchar(20) NOT NULL, + `buildin` tinyint(1) NOT NULL DEFAULT '0', + `status` varchar(20) NOT NULL, + `lastTime` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `lastTime` (`lastTime`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_dept` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` char(60) NOT NULL, + `parent` mediumint(8) unsigned NOT NULL DEFAULT '0', + `path` char(255) NOT NULL DEFAULT '', + `grade` tinyint(3) unsigned NOT NULL DEFAULT '0', + `order` tinyint(3) unsigned NOT NULL DEFAULT '0', + `position` char(30) NOT NULL DEFAULT '', + `function` char(255) NOT NULL DEFAULT '', + `manager` char(30) NOT NULL DEFAULT '', + PRIMARY KEY (`id`), + KEY `parent` (`parent`), + KEY `path` (`path`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_doc` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `project` mediumint(8) unsigned NOT NULL, + `lib` varchar(30) NOT NULL, + `module` varchar(30) NOT NULL, + `title` varchar(255) NOT NULL, + `keywords` varchar(255) NOT NULL, + `type` varchar(30) NOT NULL, + `views` smallint(5) unsigned NOT NULL, + `collector` text NOT NULL, + `addedBy` varchar(30) NOT NULL, + `addedDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `acl` varchar(10) NOT NULL DEFAULT 'open', + `groups` varchar(255) NOT NULL, + `users` text NOT NULL, + `version` smallint(5) unsigned NOT NULL DEFAULT '1', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `project` (`project`), + KEY `lib` (`lib`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_doccontent` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `doc` mediumint(8) unsigned NOT NULL, + `title` varchar(255) NOT NULL, + `digest` varchar(255) NOT NULL, + `content` text NOT NULL, + `files` text NOT NULL, + `type` varchar(10) NOT NULL, + `version` smallint(5) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `doc_version` (`doc`,`version`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_doclib` ( + `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT, + `type` varchar(30) NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `project` mediumint(8) unsigned NOT NULL, + `name` varchar(60) NOT NULL, + `acl` varchar(10) NOT NULL DEFAULT 'open', + `groups` varchar(255) NOT NULL, + `users` text NOT NULL, + `main` enum('0','1') NOT NULL DEFAULT '0', + `collector` text NOT NULL, + `order` tinyint(5) unsigned NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `project` (`project`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_effort` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `user` char(30) NOT NULL DEFAULT '', + `todo` enum('1','0') NOT NULL DEFAULT '1', + `date` date NOT NULL, + `begin` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `end` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `type` enum('1','2','3') NOT NULL DEFAULT '1', + `idvalue` mediumint(8) unsigned NOT NULL DEFAULT '0', + `name` char(30) NOT NULL DEFAULT '', + `desc` char(255) NOT NULL DEFAULT '', + `status` enum('1','2','3') NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + KEY `user` (`user`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_entry` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(50) NOT NULL, + `account` varchar(30) NOT NULL DEFAULT '', + `code` varchar(20) NOT NULL, + `key` varchar(32) NOT NULL, + `ip` varchar(100) NOT NULL, + `desc` text NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_extension` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(150) NOT NULL, + `code` varchar(30) NOT NULL, + `version` varchar(50) NOT NULL, + `author` varchar(100) NOT NULL, + `desc` text NOT NULL, + `license` text NOT NULL, + `type` varchar(20) NOT NULL DEFAULT 'extension', + `site` varchar(150) NOT NULL, + `zentaoCompatible` varchar(100) NOT NULL, + `installedTime` datetime NOT NULL, + `depends` varchar(100) NOT NULL, + `dirs` mediumtext NOT NULL, + `files` mediumtext NOT NULL, + `status` varchar(20) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `code` (`code`), + KEY `name` (`name`), + KEY `installedTime` (`installedTime`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_file` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `pathname` char(100) NOT NULL, + `title` char(255) NOT NULL, + `extension` char(30) NOT NULL, + `size` int(10) unsigned NOT NULL DEFAULT '0', + `objectType` char(30) NOT NULL, + `objectID` mediumint(9) NOT NULL, + `addedBy` char(30) NOT NULL DEFAULT '', + `addedDate` datetime NOT NULL, + `downloads` mediumint(8) unsigned NOT NULL DEFAULT '0', + `extra` varchar(255) NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `objectType` (`objectType`), + KEY `objectID` (`objectID`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_group` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` char(30) NOT NULL, + `role` char(30) NOT NULL DEFAULT '', + `desc` char(255) NOT NULL DEFAULT '', + `acl` text, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_grouppriv` ( + `group` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` char(30) NOT NULL DEFAULT '', + `method` char(30) NOT NULL DEFAULT '', + UNIQUE KEY `group` (`group`,`module`,`method`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_history` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `action` mediumint(8) unsigned NOT NULL DEFAULT '0', + `field` varchar(30) NOT NULL DEFAULT '', + `old` text NOT NULL, + `new` text NOT NULL, + `diff` mediumtext NOT NULL, + PRIMARY KEY (`id`), + KEY `action` (`action`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_im_chat` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `gid` char(40) NOT NULL DEFAULT '', + `name` varchar(60) NOT NULL DEFAULT '', + `type` varchar(20) NOT NULL DEFAULT 'group', + `admins` varchar(255) NOT NULL DEFAULT '', + `committers` varchar(255) NOT NULL DEFAULT '', + `subject` mediumint(8) unsigned NOT NULL DEFAULT '0', + `public` enum('0','1') NOT NULL DEFAULT '0', + `createdBy` varchar(30) NOT NULL DEFAULT '', + `createdDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `editedBy` varchar(30) NOT NULL DEFAULT '', + `editedDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `lastActiveTime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `dismissDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`id`), + KEY `gid` (`gid`), + KEY `name` (`name`), + KEY `type` (`type`), + KEY `public` (`public`), + KEY `createdBy` (`createdBy`), + KEY `editedBy` (`editedBy`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_im_chatuser` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `cgid` char(40) NOT NULL DEFAULT '', + `user` mediumint(8) NOT NULL DEFAULT '0', + `order` smallint(5) NOT NULL DEFAULT '0', + `star` enum('0','1') NOT NULL DEFAULT '0', + `hide` enum('0','1') NOT NULL DEFAULT '0', + `mute` enum('0','1') NOT NULL DEFAULT '0', + `join` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `quit` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `category` varchar(40) NOT NULL DEFAULT '', + PRIMARY KEY (`id`), + UNIQUE KEY `chatuser` (`cgid`,`user`), + KEY `cgid` (`cgid`), + KEY `user` (`user`), + KEY `order` (`order`), + KEY `star` (`star`), + KEY `hide` (`hide`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_im_message` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `gid` char(40) NOT NULL DEFAULT '', + `cgid` char(40) NOT NULL DEFAULT '', + `user` varchar(30) NOT NULL DEFAULT '', + `date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `order` bigint(8) unsigned NOT NULL, + `type` enum('normal','broadcast','notify') NOT NULL DEFAULT 'normal', + `content` text NOT NULL, + `contentType` enum('text','plain','emotion','image','file','object') NOT NULL DEFAULT 'text', + `data` text NOT NULL, + PRIMARY KEY (`id`), + KEY `mgid` (`gid`), + KEY `mcgid` (`cgid`), + KEY `muser` (`user`), + KEY `mtype` (`type`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_im_messagestatus` ( + `user` mediumint(8) NOT NULL DEFAULT '0', + `gid` char(40) NOT NULL DEFAULT '', + `status` enum('waiting','sent','readed','deleted') NOT NULL DEFAULT 'waiting', + UNIQUE KEY `user` (`user`,`gid`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_lang` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `lang` varchar(30) NOT NULL, + `module` varchar(30) NOT NULL, + `section` varchar(30) NOT NULL, + `key` varchar(60) NOT NULL, + `value` text NOT NULL, + `system` enum('0','1') NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + UNIQUE KEY `lang` (`lang`,`module`,`section`,`key`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_log` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `objectType` varchar(30) NOT NULL, + `objectID` mediumint(8) unsigned NOT NULL, + `action` mediumint(8) unsigned NOT NULL, + `date` datetime NOT NULL, + `url` varchar(255) NOT NULL, + `contentType` varchar(30) NOT NULL, + `data` text NOT NULL, + `result` text NOT NULL, + PRIMARY KEY (`id`), + KEY `objectType` (`objectType`), + KEY `obejctID` (`objectID`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_module` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `root` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `name` char(60) NOT NULL DEFAULT '', + `parent` mediumint(8) unsigned NOT NULL DEFAULT '0', + `path` char(255) NOT NULL DEFAULT '', + `grade` tinyint(3) unsigned NOT NULL DEFAULT '0', + `order` smallint(5) unsigned NOT NULL DEFAULT '0', + `type` char(30) NOT NULL, + `owner` varchar(30) NOT NULL, + `collector` text NOT NULL, + `short` varchar(30) NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `root` (`root`), + KEY `type` (`type`), + KEY `path` (`path`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_notify` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `objectType` varchar(50) NOT NULL, + `objectID` mediumint(8) unsigned NOT NULL, + `action` mediumint(9) NOT NULL, + `toList` varchar(255) NOT NULL, + `ccList` text NOT NULL, + `subject` varchar(255) NOT NULL, + `data` text NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `sendTime` datetime NOT NULL, + `status` varchar(10) NOT NULL DEFAULT 'wait', + `failReason` text NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_product` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(90) NOT NULL, + `code` varchar(45) NOT NULL, + `line` mediumint(8) NOT NULL, + `type` varchar(30) NOT NULL DEFAULT 'normal', + `status` varchar(30) NOT NULL DEFAULT '', + `desc` text NOT NULL, + `PO` varchar(30) NOT NULL, + `QD` varchar(30) NOT NULL, + `RD` varchar(30) NOT NULL, + `acl` enum('open','private','custom') NOT NULL DEFAULT 'open', + `whitelist` text NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `createdVersion` varchar(20) NOT NULL, + `order` mediumint(8) unsigned NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `order` (`order`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_productplan` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `branch` mediumint(8) unsigned NOT NULL, + `title` varchar(90) NOT NULL, + `desc` text NOT NULL, + `begin` date NOT NULL, + `end` date NOT NULL, + `order` text NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `end` (`end`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_project` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `isCat` enum('1','0') NOT NULL DEFAULT '0', + `catID` mediumint(8) unsigned NOT NULL, + `type` varchar(20) NOT NULL DEFAULT 'sprint', + `parent` mediumint(8) unsigned NOT NULL DEFAULT '0', + `name` varchar(90) NOT NULL, + `code` varchar(45) NOT NULL, + `begin` date NOT NULL, + `end` date NOT NULL, + `days` smallint(5) unsigned NOT NULL, + `status` varchar(10) NOT NULL, + `statge` enum('1','2','3','4','5') NOT NULL DEFAULT '1', + `pri` enum('1','2','3','4') NOT NULL DEFAULT '1', + `desc` text NOT NULL, + `openedBy` varchar(30) NOT NULL DEFAULT '', + `openedDate` datetime NOT NULL, + `openedVersion` varchar(20) NOT NULL, + `closedBy` varchar(30) NOT NULL DEFAULT '', + `closedDate` datetime NOT NULL, + `canceledBy` varchar(30) NOT NULL DEFAULT '', + `canceledDate` datetime NOT NULL, + `PO` varchar(30) NOT NULL DEFAULT '', + `PM` varchar(30) NOT NULL DEFAULT '', + `QD` varchar(30) NOT NULL DEFAULT '', + `RD` varchar(30) NOT NULL DEFAULT '', + `team` varchar(90) NOT NULL, + `acl` enum('open','private','custom') NOT NULL DEFAULT 'open', + `whitelist` text NOT NULL, + `order` mediumint(8) unsigned NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `parent` (`parent`), + KEY `begin` (`begin`), + KEY `end` (`end`), + KEY `status` (`status`), + KEY `order` (`order`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_projectproduct` ( + `project` mediumint(8) unsigned NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `branch` mediumint(8) unsigned NOT NULL, + `plan` mediumint(8) unsigned NOT NULL, + PRIMARY KEY (`project`,`product`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_projectstory` ( + `project` mediumint(8) unsigned NOT NULL DEFAULT '0', + `product` mediumint(8) unsigned NOT NULL, + `story` mediumint(8) unsigned NOT NULL DEFAULT '0', + `version` smallint(6) NOT NULL DEFAULT '1', + `order` smallint(6) unsigned NOT NULL, + UNIQUE KEY `project` (`project`,`story`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_release` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `build` mediumint(8) unsigned NOT NULL, + `name` char(30) NOT NULL DEFAULT '', + `marker` enum('0','1') NOT NULL DEFAULT '0', + `date` date NOT NULL, + `stories` text NOT NULL, + `bugs` text NOT NULL, + `leftBugs` text NOT NULL, + `desc` text NOT NULL, + `status` varchar(20) NOT NULL DEFAULT 'normal', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `build` (`build`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_score` ( + `id` bigint(12) unsigned NOT NULL AUTO_INCREMENT, + `account` varchar(30) NOT NULL, + `module` varchar(30) NOT NULL DEFAULT '', + `method` varchar(30) NOT NULL, + `desc` varchar(250) NOT NULL DEFAULT '', + `before` int(11) NOT NULL DEFAULT '0', + `score` int(11) NOT NULL DEFAULT '0', + `after` int(11) NOT NULL DEFAULT '0', + `time` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `account` (`account`), + KEY `model` (`module`), + KEY `method` (`method`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_story` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` mediumint(8) unsigned NOT NULL DEFAULT '0', + `plan` text, + `source` varchar(20) NOT NULL, + `sourceNote` varchar(255) NOT NULL, + `fromBug` mediumint(8) unsigned NOT NULL DEFAULT '0', + `title` varchar(255) NOT NULL, + `keywords` varchar(255) NOT NULL, + `type` varchar(30) NOT NULL DEFAULT '', + `pri` tinyint(3) unsigned NOT NULL DEFAULT '3', + `estimate` float unsigned NOT NULL, + `status` enum('','changed','active','draft','closed') NOT NULL DEFAULT '', + `color` char(7) NOT NULL, + `stage` enum('','wait','planned','projected','developing','developed','testing','tested','verified','released','closed') NOT NULL DEFAULT 'wait', + `mailto` text, + `openedBy` varchar(30) NOT NULL DEFAULT '', + `openedDate` datetime NOT NULL, + `assignedTo` varchar(30) NOT NULL DEFAULT '', + `assignedDate` datetime NOT NULL, + `lastEditedBy` varchar(30) NOT NULL DEFAULT '', + `lastEditedDate` datetime NOT NULL, + `reviewedBy` varchar(255) NOT NULL, + `reviewedDate` date NOT NULL, + `closedBy` varchar(30) NOT NULL DEFAULT '', + `closedDate` datetime NOT NULL, + `closedReason` varchar(30) NOT NULL, + `toBug` mediumint(9) NOT NULL, + `childStories` varchar(255) NOT NULL, + `linkStories` varchar(255) NOT NULL, + `duplicateStory` mediumint(8) unsigned NOT NULL, + `version` smallint(6) NOT NULL DEFAULT '1', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `status` (`status`), + KEY `assignedTo` (`assignedTo`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_storyspec` ( + `story` mediumint(9) NOT NULL, + `version` smallint(6) NOT NULL, + `title` varchar(255) NOT NULL, + `spec` text NOT NULL, + `verify` text NOT NULL, + UNIQUE KEY `story` (`story`,`version`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_storystage` ( + `story` mediumint(8) unsigned NOT NULL, + `branch` mediumint(8) unsigned NOT NULL, + `stage` varchar(50) NOT NULL, + KEY `story` (`story`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_suitecase` ( + `suite` mediumint(8) unsigned NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `case` mediumint(8) unsigned NOT NULL, + `version` smallint(5) unsigned NOT NULL, + UNIQUE KEY `suitecase` (`suite`,`case`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_task` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `parent` mediumint(8) NOT NULL DEFAULT '0', + `project` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` mediumint(8) unsigned NOT NULL DEFAULT '0', + `story` mediumint(8) unsigned NOT NULL DEFAULT '0', + `storyVersion` smallint(6) NOT NULL DEFAULT '1', + `fromBug` mediumint(8) unsigned NOT NULL DEFAULT '0', + `name` varchar(255) NOT NULL, + `type` varchar(20) NOT NULL, + `pri` tinyint(3) unsigned NOT NULL DEFAULT '0', + `estimate` float unsigned NOT NULL, + `consumed` float unsigned NOT NULL, + `left` float unsigned NOT NULL, + `deadline` date NOT NULL, + `status` enum('wait','doing','done','pause','cancel','closed') NOT NULL DEFAULT 'wait', + `color` char(7) NOT NULL, + `mailto` text, + `desc` text NOT NULL, + `openedBy` varchar(30) NOT NULL, + `openedDate` datetime NOT NULL, + `assignedTo` varchar(30) NOT NULL, + `assignedDate` datetime NOT NULL, + `estStarted` date NOT NULL, + `realStarted` date NOT NULL, + `finishedBy` varchar(30) NOT NULL, + `finishedDate` datetime NOT NULL, + `finishedList` text NOT NULL, + `canceledBy` varchar(30) NOT NULL, + `canceledDate` datetime NOT NULL, + `closedBy` varchar(30) NOT NULL, + `closedDate` datetime NOT NULL, + `closedReason` varchar(30) NOT NULL, + `lastEditedBy` varchar(30) NOT NULL, + `lastEditedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `project` (`project`), + KEY `story` (`story`), + KEY `assignedTo` (`assignedTo`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_taskestimate` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `task` mediumint(8) unsigned NOT NULL DEFAULT '0', + `date` date NOT NULL, + `left` float unsigned NOT NULL DEFAULT '0', + `consumed` float unsigned NOT NULL, + `account` char(30) NOT NULL DEFAULT '', + `work` text, + PRIMARY KEY (`id`), + KEY `task` (`task`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_team` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `root` mediumint(8) unsigned NOT NULL DEFAULT '0', + `type` enum('project','task') NOT NULL DEFAULT 'project', + `account` char(30) NOT NULL DEFAULT '', + `role` char(30) NOT NULL DEFAULT '', + `limited` char(8) NOT NULL DEFAULT 'no', + `join` date NOT NULL DEFAULT '0000-00-00', + `days` smallint(5) unsigned NOT NULL, + `hours` float(2,1) unsigned NOT NULL DEFAULT '0.0', + `estimate` decimal(12,2) unsigned NOT NULL DEFAULT '0.00', + `consumed` decimal(12,2) unsigned NOT NULL DEFAULT '0.00', + `left` decimal(12,2) unsigned NOT NULL DEFAULT '0.00', + `order` tinyint(3) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `team` (`root`,`type`,`account`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_testreport` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `project` mediumint(8) unsigned NOT NULL, + `tasks` varchar(255) NOT NULL, + `builds` varchar(255) NOT NULL, + `title` varchar(255) NOT NULL, + `begin` date NOT NULL, + `end` date NOT NULL, + `owner` char(30) NOT NULL, + `members` text NOT NULL, + `stories` text NOT NULL, + `bugs` text NOT NULL, + `cases` text NOT NULL, + `report` text NOT NULL, + `objectType` varchar(20) NOT NULL, + `objectID` mediumint(8) unsigned NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_testresult` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `run` mediumint(8) unsigned NOT NULL, + `case` mediumint(8) unsigned NOT NULL, + `version` smallint(5) unsigned NOT NULL, + `caseResult` char(30) NOT NULL, + `stepResults` text NOT NULL, + `lastRunner` varchar(30) NOT NULL, + `date` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `case` (`case`), + KEY `version` (`version`), + KEY `run` (`run`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_testrun` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `task` mediumint(8) unsigned NOT NULL DEFAULT '0', + `case` mediumint(8) unsigned NOT NULL DEFAULT '0', + `version` tinyint(3) unsigned NOT NULL DEFAULT '0', + `assignedTo` char(30) NOT NULL DEFAULT '', + `lastRunner` varchar(30) NOT NULL, + `lastRunDate` datetime NOT NULL, + `lastRunResult` char(30) NOT NULL, + `status` char(30) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `task` (`task`,`case`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_testsuite` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `name` varchar(255) NOT NULL, + `desc` text NOT NULL, + `type` varchar(20) NOT NULL, + `addedBy` char(30) NOT NULL, + `addedDate` datetime NOT NULL, + `lastEditedBy` char(30) NOT NULL, + `lastEditedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL, + PRIMARY KEY (`id`), + KEY `product` (`product`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_testtask` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` char(90) NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `project` mediumint(8) unsigned NOT NULL DEFAULT '0', + `build` char(30) NOT NULL, + `owner` varchar(30) NOT NULL, + `pri` tinyint(3) unsigned NOT NULL DEFAULT '0', + `begin` date NOT NULL, + `end` date NOT NULL, + `mailto` text, + `desc` text NOT NULL, + `report` text NOT NULL, + `status` enum('blocked','doing','wait','done') NOT NULL DEFAULT 'wait', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `build` (`build`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_todo` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `date` date NOT NULL, + `begin` smallint(4) unsigned zerofill NOT NULL, + `end` smallint(4) unsigned zerofill NOT NULL, + `type` char(10) NOT NULL, + `cycle` tinyint(3) unsigned NOT NULL DEFAULT '0', + `idvalue` mediumint(8) unsigned NOT NULL DEFAULT '0', + `pri` tinyint(3) unsigned NOT NULL, + `name` char(150) NOT NULL, + `desc` text NOT NULL, + `status` enum('wait','doing','done','closed') NOT NULL DEFAULT 'wait', + `private` tinyint(1) NOT NULL, + `config` varchar(255) NOT NULL, + `assignedTo` varchar(30) NOT NULL DEFAULT '', + `assignedBy` varchar(30) NOT NULL DEFAULT '', + `assignedDate` datetime NOT NULL, + `finishedBy` varchar(30) NOT NULL DEFAULT '', + `finishedDate` datetime NOT NULL, + `closedBy` varchar(30) NOT NULL DEFAULT '', + `closedDate` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `account` (`account`), + KEY `assignedTo` (`assignedTo`), + KEY `finishedBy` (`finishedBy`), + KEY `date` (`date`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_user` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `dept` mediumint(8) unsigned NOT NULL DEFAULT '0', + `account` char(30) NOT NULL DEFAULT '', + `password` char(32) NOT NULL DEFAULT '', + `role` char(10) NOT NULL DEFAULT '', + `realname` varchar(100) NOT NULL DEFAULT '', + `nickname` char(60) NOT NULL DEFAULT '', + `commiter` varchar(100) NOT NULL, + `avatar` char(30) NOT NULL DEFAULT '', + `birthday` date NOT NULL DEFAULT '0000-00-00', + `gender` enum('f','m') NOT NULL DEFAULT 'f', + `email` char(90) NOT NULL DEFAULT '', + `skype` char(90) NOT NULL DEFAULT '', + `qq` char(20) NOT NULL DEFAULT '', + `yahoo` char(90) NOT NULL DEFAULT '', + `gtalk` char(90) NOT NULL DEFAULT '', + `wangwang` char(90) NOT NULL DEFAULT '', + `mobile` char(11) NOT NULL DEFAULT '', + `phone` char(20) NOT NULL DEFAULT '', + `address` char(120) NOT NULL DEFAULT '', + `zipcode` char(10) NOT NULL DEFAULT '', + `join` date NOT NULL DEFAULT '0000-00-00', + `visits` mediumint(8) unsigned NOT NULL DEFAULT '0', + `ip` char(15) NOT NULL DEFAULT '', + `last` int(10) unsigned NOT NULL DEFAULT '0', + `fails` tinyint(5) NOT NULL DEFAULT '0', + `locked` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `ranzhi` char(30) NOT NULL DEFAULT '', + `score` int(11) NOT NULL DEFAULT '0', + `scoreLevel` int(11) NOT NULL DEFAULT '0', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + `clientStatus` enum('online','away','busy','offline') NOT NULL DEFAULT 'offline', + `clientLang` varchar(10) NOT NULL DEFAULT 'zh-cn', + PRIMARY KEY (`id`), + UNIQUE KEY `account` (`account`), + KEY `dept` (`dept`), + KEY `email` (`email`), + KEY `commiter` (`commiter`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_usercontact` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `listName` varchar(60) NOT NULL, + `userList` text NOT NULL, + PRIMARY KEY (`id`), + KEY `account` (`account`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_usergroup` ( + `account` char(30) NOT NULL DEFAULT '', + `group` mediumint(8) unsigned NOT NULL DEFAULT '0', + UNIQUE KEY `account` (`account`,`group`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_userquery` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `module` varchar(30) NOT NULL, + `title` varchar(90) NOT NULL, + `form` text NOT NULL, + `sql` text NOT NULL, + `shortcut` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `account` (`account`), + KEY `module` (`module`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_usertpl` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `type` char(30) NOT NULL, + `title` varchar(150) NOT NULL, + `content` text NOT NULL, + `public` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `account` (`account`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_userview` ( + `account` char(30) NOT NULL, + `products` mediumtext NOT NULL, + `projects` mediumtext NOT NULL, + UNIQUE KEY `account` (`account`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_webhook` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `type` varchar(10) NOT NULL DEFAULT 'default', + `name` varchar(50) NOT NULL, + `url` varchar(255) NOT NULL, + `domain` varchar(255) NOT NULL, + `contentType` varchar(30) NOT NULL DEFAULT 'application/json', + `sendType` enum('sync','async') NOT NULL DEFAULT 'sync', + `products` text NOT NULL, + `projects` text NOT NULL, + `params` varchar(100) NOT NULL, + `actions` text NOT NULL, + `desc` text NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; diff --git a/module/upgrade/control.php b/module/upgrade/control.php index f85ff42378..bd08951aeb 100644 --- a/module/upgrade/control.php +++ b/module/upgrade/control.php @@ -141,6 +141,14 @@ class upgrade extends control */ public function afterExec($fromVersion, $processed = 'no') { + $alterSQL = $this->upgrade->checkConsistency($this->config->version); + if(!empty($alterSQL)) + { + $this->view->title = $this->lang->upgrade->consistency; + $this->view->alterSQL = $alterSQL; + die($this->display('upgrade', 'consistency')); + } + if($processed == 'no') { $this->app->loadLang('install'); @@ -172,6 +180,7 @@ class upgrade extends control $alterSQL = $this->upgrade->checkConsistency(); if(empty($alterSQL)) $this->locate(inlink('checkExtension')); + $this->view->title = $this->lang->upgrade->consistency; $this->view->alterSQL = $alterSQL; $this->display(); } diff --git a/module/upgrade/model.php b/module/upgrade/model.php index d7edb10781..4e7cc7206f 100644 --- a/module/upgrade/model.php +++ b/module/upgrade/model.php @@ -39,223 +39,312 @@ class upgradeModel extends model set_time_limit(0); switch($fromVersion) { - case '0_3beta': $this->execSQL($this->getUpgradeFile('0.3')); - case '0_4beta': $this->execSQL($this->getUpgradeFile('0.4')); - case '0_5beta': $this->execSQL($this->getUpgradeFile('0.5')); - case '0_6beta': $this->execSQL($this->getUpgradeFile('0.6')); - case '1_0beta': - $this->execSQL($this->getUpgradeFile('1.0.beta')); - $this->updateCompany(); - case '1_0rc1': $this->execSQL($this->getUpgradeFile('1.0.rc1')); - case '1_0rc2': - case '1_0': - case '1_0_1': $this->execSQL($this->getUpgradeFile('1.0.1')); - case '1_1': $this->execSQL($this->getUpgradeFile('1.1')); - case '1_2': - $this->execSQL($this->getUpgradeFile('1.2')); - $this->updateUBB(); - $this->updateNL1_2(); - case '1_3': - $this->execSQL($this->getUpgradeFile('1.3')); - $this->updateNL1_3(); - $this->updateTasks(); - case '1_4': $this->execSQL($this->getUpgradeFile('1.4')); - case '1_5': $this->execSQL($this->getUpgradeFile('1.5')); - case '2_0': $this->execSQL($this->getUpgradeFile('2.0')); - case '2_1': $this->execSQL($this->getUpgradeFile('2.1')); - case '2_2': - $this->execSQL($this->getUpgradeFile('2.2')); - $this->updateCases(); - $this->updateActivatedCountOfBug(); - case '2_3': $this->execSQL($this->getUpgradeFile('2.3')); - case '2_4': $this->execSQL($this->getUpgradeFile('2.4')); - case '3_0_beta1': - $this->execSQL($this->getUpgradeFile('3.0.beta1')); - $this->updateAction(); - $this->setOrderData(); - case '3_0_beta2': - case '3_0': - case '3_1': $this->execSQL($this->getUpgradeFile('3.1')); - case '3_2': $this->execSQL($this->getUpgradeFile('3.2')); - case '3_2_1': $this->execSQL($this->getUpgradeFile('3.2.1')); - case '3_3': - $this->execSQL($this->getUpgradeFile('3.3')); - $this->updateTaskAssignedTo(); - case '4_0_beta1': $this->execSQL($this->getUpgradeFile('4.0.beta1')); - case '4_0_beta2': - $this->execSQL($this->getUpgradeFile('4.0.beta2')); - $this->updateProjectType(); - $this->updateEstimatePriv(); - case '4_0': - $this->execSQL($this->getUpgradeFile('4.0')); - case '4_0_1': - $this->execSQL($this->getUpgradeFile('4.0.1')); - $this->addPriv4_0_1(); - case '4_1': - $this->execSQL($this->getUpgradeFile('4.1')); - $this->addPriv4_1(); - $this->processTaskFinish(); - $this->deleteCompany(); - case '4_2_beta': - $this->execSQL($this->getUpgradeFile('4.2')); - case '4_3_beta': - $this->execSQL($this->getUpgradeFile('4.3')); - case '5_0_beta1': - case '5_0_beta2': - case '5_0': - case '5_1': - case '5_2': - case '5_2_1': - $this->mergeProjectGoalAndDesc(); - $this->execSQL($this->getUpgradeFile('5.2.1')); - case '5_3': - case '6_0_beta1': - $this->execSQL($this->getUpgradeFile('6.0.beta1')); - $this->toLowerTable(); - $this->fixBugOSInfo(); - $this->fixTaskFinishedBy(); - case '6_0': - $this->execSQL($this->getUpgradeFile('6.0')); - $this->fixDataIndex(); - case '6_1': - $this->execSQL($this->getUpgradeFile('6.1')); - case '6_2': - case '6_3': - case '6_4': - case '7_0': - $this->execSQL($this->getUpgradeFile('7.0')); - case '7_1': - $this->execSQL($this->getUpgradeFile('7.1')); - $this->initOrder(); - case '7_2': - case '7_2_4': - $this->execSQL($this->getUpgradeFile('7.2.4')); - case '7_2_5': - $this->adjustOrder7_3(); - case '7_3': - $this->execSQL($this->getUpgradeFile('7.3')); - $this->adjustPriv7_4_beta(); - case '7_4_beta': - $this->execSQL($this->getUpgradeFile('7.4.beta')); - case '8_0': - case '8_0_1': - $this->execSQL($this->getUpgradeFile('8.0.1')); - $this->addPriv8_1(); - case '8_1': - $this->execSQL($this->getUpgradeFile('8.1')); - case '8_1_3': - $this->execSQL($this->getUpgradeFile('8.1.3')); - $this->addPriv8_2_beta(); - $this->adjustConfigSectionAndKey(); - case '8_2_beta': - case '8_2': - case '8_2_1': - $this->execSQL($this->getUpgradeFile('8.2.1')); - case '8_2_2': - case '8_2_3': - case '8_2_4': - case '8_2_5': - case '8_2_6': - $this->execSQL($this->getUpgradeFile('8.2.6')); - $this->adjustDocModule(); - $this->moveDocContent(); - $this->adjustPriv8_3(); - case '8_3': - case '8_3_1': - $this->execSQL($this->getUpgradeFile('8.3.1')); - $this->renameMainLib(); - $this->adjustPriv8_4(); - case '8_4': - case '8_4_1': - $this->execSQL($this->getUpgradeFile('8.4.1')); - case '9_0_beta': - $this->execSQL($this->getUpgradeFile('9.0.beta')); - $this->adjustPriv9_0(); - case '9_0': - $this->fixProjectProductData(); - case '9_0_1': - $this->execSQL($this->getUpgradeFile('9.0.1')); - $this->addBugDeadlineToCustomFields(); - $this->adjustPriv9_0_1(); - case '9_1': - $this->execSQL($this->getUpgradeFile('9.1')); - case '9_1_1': - $this->execSQL($this->getUpgradeFile('9.1.1')); - case '9_1_2': - $this->execSQL($this->getUpgradeFile('9.1.2')); - $this->processCustomMenus(); - $this->adjustPriv9_2(); - case '9_2': - case '9_2_1': - case '9_3_beta': - $this->execSQL($this->getUpgradeFile('9.3.beta')); - case '9_4': - $this->execSQL($this->getUpgradeFile('9.4')); - $this->adjustPriv9_4(); - case '9_5': - $this->execSQL($this->getUpgradeFile('9.5')); - case '9_5_1': - $this->execSQL($this->getUpgradeFile('9.5.1')); - $this->initProjectStoryOrder(); - case '9_6': - $this->execSQL($this->getUpgradeFile('9.6')); - $this->fixDatatableColsConfig(); - case '9_6_1': - $this->addLimitedGroup(); - case '9_6_2': - case '9_6_3': - $this->execSQL($this->getUpgradeFile('9.6.3')); - $this->changeLimitedName(); - $this->adjustPriv9_7(); - $this->changeStoryWidth(); - case '9_7': - $this->execSQL($this->getUpgradeFile('9.7')); - $this->changeTeamFields(); - $this->moveData2Notify(); - case '9_8': - $this->fixTaskFinishedInfo(); - case '9_8_1': - $this->execSQL($this->getUpgradeFile('9.8.1')); - $this->fixTaskAssignedTo(); - $this->fixProjectClosedInfo(); - $this->resetProductLine(); - case '9_8_2': - $this->execSQL($this->getUpgradeFile('9.8.2')); - $this->addUniqueKeyToTeam(); - case '9_8_3': - $this->execSQL($this->getUpgradeFile('9.8.3')); - $this->adjustPriv10_0_alpha(); - case '10_0_alpha': - $this->execSQL($this->getUpgradeFile('10.0.alpha')); - $this->fixProjectStatisticBlock(); - case '10_0_beta': - $this->execSQL($this->getUpgradeFile('10.0.beta')); - case '10_0': - $this->execSQL($this->getUpgradeFile('10.0')); - $this->fixStorySpecTitle(); - $this->removeUnlinkPriv();//Remove unlink privilege for story, bug and testcase module. - case '10_1': - $xuanxuanSql = $this->app->getAppRoot() . 'db' . DS . 'xuanxuan.sql'; - $this->execSQL($xuanxuanSql); - case '10_2': - case '10_3': - case '10_3_1': - $this->execSQL($this->getUpgradeFile('10.3.1')); - $this->removeCustomMenu(); - $this->initUserView(); - case '10_4': - $this->execSQL($this->getUpgradeFile('10.4')); - $this->changeTaskParentValue(); - case '10_5': - case '10_5_1': - $this->execSQL($this->getUpgradeFile('10.5.1')); - case '10_6': - $xuanxuanSql = $this->app->getAppRoot() . 'db' . DS . 'upgradexuanxuan2.1.0.sql'; - $this->execSQL($xuanxuanSql); - $xuanxuanSql = $this->app->getAppRoot() . 'db' . DS . 'upgradexuanxuan2.2.0.sql'; - $this->execSQL($xuanxuanSql); - $this->initXuanxuan(); - case '11_0': + case '0_3beta': + $this->saveLogs('Execute 0_3beta'); + $this->execSQL($this->getUpgradeFile('0.3')); + case '0_4beta': + $this->saveLogs('Execute 0_4beta'); + $this->execSQL($this->getUpgradeFile('0.4')); + case '0_5beta': + $this->saveLogs('Execute 0_5beta'); + $this->execSQL($this->getUpgradeFile('0.5')); + case '0_6beta': + $this->saveLogs('Execute 0_6beta'); + $this->execSQL($this->getUpgradeFile('0.6')); + case '1_0beta': + $this->saveLogs('Execute 1_0beta'); + $this->execSQL($this->getUpgradeFile('1.0.beta')); + $this->updateCompany(); + case '1_0rc1': + $this->saveLogs('Execute 1_0rc1'); + $this->execSQL($this->getUpgradeFile('1.0.rc1')); + case '1_0rc2': $this->saveLogs('Execute 1_0rc2'); + case '1_0': $this->saveLogs('Execute 1_0'); + case '1_0_1': + $this->saveLogs('Execute 1_0_1'); + $this->execSQL($this->getUpgradeFile('1.0.1')); + case '1_1': + $this->saveLogs('Execute 1_1'); + $this->execSQL($this->getUpgradeFile('1.1')); + case '1_2': + $this->saveLogs('Execute 1_2'); + $this->execSQL($this->getUpgradeFile('1.2')); + $this->updateUBB(); + $this->updateNL1_2(); + case '1_3': + $this->saveLogs('Execute 1_3'); + $this->execSQL($this->getUpgradeFile('1.3')); + $this->updateNL1_3(); + $this->updateTasks(); + case '1_4': + $this->saveLogs('Execute 1_4'); + $this->execSQL($this->getUpgradeFile('1.4')); + case '1_5': + $this->saveLogs('Execute 1_5'); + $this->execSQL($this->getUpgradeFile('1.5')); + case '2_0': + $this->saveLogs('Execute 2_0'); + $this->execSQL($this->getUpgradeFile('2.0')); + case '2_1': + $this->saveLogs('Execute 2_1'); + $this->execSQL($this->getUpgradeFile('2.1')); + case '2_2': + $this->saveLogs('Execute 2_2'); + $this->execSQL($this->getUpgradeFile('2.2')); + $this->updateCases(); + $this->updateActivatedCountOfBug(); + case '2_3': + $this->saveLogs('Execute 2_3'); + $this->execSQL($this->getUpgradeFile('2.3')); + case '2_4': + $this->saveLogs('Execute 2_4'); + $this->execSQL($this->getUpgradeFile('2.4')); + case '3_0_beta1': + $this->saveLogs('Execute 3_0_beta1'); + $this->execSQL($this->getUpgradeFile('3.0.beta1')); + $this->updateAction(); + $this->setOrderData(); + case '3_0_beta2': $this->saveLogs('Execute 3_0_beta2'); + case '3_0': $this->saveLogs('Execute 3_0'); + case '3_1': + $this->saveLogs('Execute 3_1'); + $this->execSQL($this->getUpgradeFile('3.1')); + case '3_2': + $this->saveLogs('Execute 3_2'); + $this->execSQL($this->getUpgradeFile('3.2')); + case '3_2_1': + $this->saveLogs('Execute 3_2_1'); + $this->execSQL($this->getUpgradeFile('3.2.1')); + case '3_3': + $this->saveLogs('Execute 3_3'); + $this->execSQL($this->getUpgradeFile('3.3')); + $this->updateTaskAssignedTo(); + case '4_0_beta1': + $this->saveLogs('Execute 4_0_beta1'); + $this->execSQL($this->getUpgradeFile('4.0.beta1')); + case '4_0_beta2': + $this->saveLogs('Execute 4_0_beta2'); + $this->execSQL($this->getUpgradeFile('4.0.beta2')); + $this->updateProjectType(); + $this->updateEstimatePriv(); + case '4_0': + $this->saveLogs('Execute 4_0'); + $this->execSQL($this->getUpgradeFile('4.0')); + case '4_0_1': + $this->saveLogs('Execute 4_0_1'); + $this->execSQL($this->getUpgradeFile('4.0.1')); + $this->addPriv4_0_1(); + case '4_1': + $this->saveLogs('Execute 4_1'); + $this->execSQL($this->getUpgradeFile('4.1')); + $this->addPriv4_1(); + $this->processTaskFinish(); + $this->deleteCompany(); + case '4_2_beta': + $this->saveLogs('Execute 4_2_beta'); + $this->execSQL($this->getUpgradeFile('4.2')); + case '4_3_beta': + $this->saveLogs('Execute 4_3_beta'); + $this->execSQL($this->getUpgradeFile('4.3')); + case '5_0_beta1': $this->saveLogs('Execute 5_0_beta1'); + case '5_0_beta2': $this->saveLogs('Execute 5_0_beta2'); + case '5_0': $this->saveLogs('Execute 5_0'); + case '5_1': $this->saveLogs('Execute 5_1'); + case '5_2': $this->saveLogs('Execute 5_2'); + case '5_2_1': + $this->saveLogs('Execute 5_2_1'); + $this->mergeProjectGoalAndDesc(); + $this->execSQL($this->getUpgradeFile('5.2.1')); + case '5_3': $this->saveLogs('Execute 5_3'); + case '6_0_beta1': + $this->saveLogs('Execute 6_0_beta'); + $this->execSQL($this->getUpgradeFile('6.0.beta1')); + $this->toLowerTable(); + $this->fixBugOSInfo(); + $this->fixTaskFinishedBy(); + case '6_0': + $this->saveLogs('Execute 6_0'); + $this->execSQL($this->getUpgradeFile('6.0')); + $this->fixDataIndex(); + case '6_1': + $this->saveLogs('Execute 6_1'); + $this->execSQL($this->getUpgradeFile('6.1')); + case '6_2': $this->saveLogs('Execute 6_2'); + case '6_3': $this->saveLogs('Execute 6_3'); + case '6_4': $this->saveLogs('Execute 6_4'); + case '7_0': + $this->saveLogs('Execute 7_0'); + $this->execSQL($this->getUpgradeFile('7.0')); + case '7_1': + $this->saveLogs('Execute 7_1'); + $this->execSQL($this->getUpgradeFile('7.1')); + $this->initOrder(); + case '7_2': $this->saveLogs('Execute 7_2'); + case '7_2_4': + $this->saveLogs('Execute 7_2_4'); + $this->execSQL($this->getUpgradeFile('7.2.4')); + case '7_2_5': + $this->saveLogs('Execute 7_2_5'); + $this->adjustOrder7_3(); + case '7_3': + $this->saveLogs('Execute 7_3'); + $this->execSQL($this->getUpgradeFile('7.3')); + $this->adjustPriv7_4_beta(); + case '7_4_beta': + $this->saveLogs('Execute 7_4_beta'); + $this->execSQL($this->getUpgradeFile('7.4.beta')); + case '8_0': $this->saveLogs('Execute 8_0'); + case '8_0_1': + $this->saveLogs('Execute 8_0_1'); + $this->execSQL($this->getUpgradeFile('8.0.1')); + $this->addPriv8_1(); + case '8_1': + $this->saveLogs('Execute 8_1'); + $this->execSQL($this->getUpgradeFile('8.1')); + case '8_1_3': + $this->saveLogs('Execute 8_1_3'); + $this->execSQL($this->getUpgradeFile('8.1.3')); + $this->addPriv8_2_beta(); + $this->adjustConfigSectionAndKey(); + case '8_2_beta': $this->saveLogs('Execute 8_2_beta'); + case '8_2': $this->saveLogs('Execute 8_2'); + case '8_2_1': + $this->saveLogs('Execute 8_2_1'); + $this->execSQL($this->getUpgradeFile('8.2.1')); + case '8_2_2': $this->saveLogs('Execute 8_2_2'); + case '8_2_3': $this->saveLogs('Execute 8_2_3'); + case '8_2_4': $this->saveLogs('Execute 8_2_4'); + case '8_2_5': $this->saveLogs('Execute 8_2_5'); + case '8_2_6': + $this->saveLogs('Execute 8_2_6'); + $this->execSQL($this->getUpgradeFile('8.2.6')); + $this->adjustDocModule(); + $this->moveDocContent(); + $this->adjustPriv8_3(); + case '8_3': $this->saveLogs('Execute 8_3'); + case '8_3_1': + $this->saveLogs('Execute 8_3_1'); + $this->execSQL($this->getUpgradeFile('8.3.1')); + $this->renameMainLib(); + $this->adjustPriv8_4(); + case '8_4': $this->saveLogs('Execute 8_4'); + case '8_4_1': + $this->saveLogs('Execute 8_4_1'); + $this->execSQL($this->getUpgradeFile('8.4.1')); + case '9_0_beta': + $this->saveLogs('Execute 9_0_beta'); + $this->execSQL($this->getUpgradeFile('9.0.beta')); + $this->adjustPriv9_0(); + case '9_0': + $this->saveLogs('Execute 9_0'); + $this->fixProjectProductData(); + case '9_0_1': + $this->saveLogs('Execute 9_0_1'); + $this->execSQL($this->getUpgradeFile('9.0.1')); + $this->addBugDeadlineToCustomFields(); + $this->adjustPriv9_0_1(); + case '9_1': + $this->saveLogs('Execute 9_1'); + $this->execSQL($this->getUpgradeFile('9.1')); + case '9_1_1': + $this->saveLogs('Execute 9_1_1'); + $this->execSQL($this->getUpgradeFile('9.1.1')); + case '9_1_2': + $this->saveLogs('Execute 9_1_2'); + $this->execSQL($this->getUpgradeFile('9.1.2')); + $this->processCustomMenus(); + $this->adjustPriv9_2(); + case '9_2': $this->saveLogs('Execute 9_2'); + case '9_2_1': $this->saveLogs('Execute 9_2_1'); + case '9_3_beta': + $this->saveLogs('Execute 9_3_beta'); + $this->execSQL($this->getUpgradeFile('9.3.beta')); + case '9_4': + $this->saveLogs('Execute 9_4'); + $this->execSQL($this->getUpgradeFile('9.4')); + $this->adjustPriv9_4(); + case '9_5': + $this->saveLogs('Execute 9_5'); + $this->execSQL($this->getUpgradeFile('9.5')); + case '9_5_1': + $this->saveLogs('Execute 9_5_1'); + $this->execSQL($this->getUpgradeFile('9.5.1')); + $this->initProjectStoryOrder(); + case '9_6': + $this->saveLogs('Execute 9_6'); + $this->execSQL($this->getUpgradeFile('9.6')); + $this->fixDatatableColsConfig(); + case '9_6_1': + $this->saveLogs('Execute 9_6_1'); + $this->addLimitedGroup(); + case '9_6_2': $this->saveLogs('Execute 9_6_2'); + case '9_6_3': + $this->saveLogs('Execute 9_6_3'); + $this->execSQL($this->getUpgradeFile('9.6.3')); + $this->changeLimitedName(); + $this->adjustPriv9_7(); + $this->changeStoryWidth(); + case '9_7': + $this->saveLogs('Execute 9_7'); + $this->execSQL($this->getUpgradeFile('9.7')); + $this->changeTeamFields(); + $this->moveData2Notify(); + case '9_8': + $this->saveLogs('Execute 9_8'); + $this->fixTaskFinishedInfo(); + case '9_8_1': + $this->saveLogs('Execute 9_8_1'); + $this->execSQL($this->getUpgradeFile('9.8.1')); + $this->fixTaskAssignedTo(); + $this->fixProjectClosedInfo(); + $this->resetProductLine(); + case '9_8_2': + $this->saveLogs('Execute 9_8_2'); + $this->execSQL($this->getUpgradeFile('9.8.2')); + $this->addUniqueKeyToTeam(); + case '9_8_3': + $this->saveLogs('Execute 9_8_3'); + $this->execSQL($this->getUpgradeFile('9.8.3')); + $this->adjustPriv10_0_alpha(); + case '10_0_alpha': + $this->saveLogs('Execute 10_0_alpha'); + $this->execSQL($this->getUpgradeFile('10.0.alpha')); + $this->fixProjectStatisticBlock(); + case '10_0_beta': + $this->saveLogs('Execute 10_0_beta'); + $this->execSQL($this->getUpgradeFile('10.0.beta')); + case '10_0': + $this->saveLogs('Execute 10_0'); + $this->execSQL($this->getUpgradeFile('10.0')); + $this->fixStorySpecTitle(); + $this->removeUnlinkPriv();//Remove unlink privilege for story, bug and testcase module. + case '10_1': + $this->saveLogs('Execute 10_1'); + $xuanxuanSql = $this->app->getAppRoot() . 'db' . DS . 'xuanxuan.sql'; + $this->execSQL($xuanxuanSql); + case '10_2': $this->saveLogs('Execute 10_2'); + case '10_3': $this->saveLogs('Execute 10_3'); + case '10_3_1': + $this->saveLogs('Execute 10_3_1'); + $this->execSQL($this->getUpgradeFile('10.3.1')); + $this->removeCustomMenu(); + $this->initUserView(); + case '10_4': + $this->saveLogs('Execute 10_4'); + $this->execSQL($this->getUpgradeFile('10.4')); + $this->changeTaskParentValue(); + case '10_5': $this->saveLogs('Execute 10_5'); + case '10_5_1': + $this->saveLogs('Execute 10_5_1'); + $this->execSQL($this->getUpgradeFile('10.5.1')); + case '10_6': + $this->saveLogs('Execute 10_6'); + $xuanxuanSql = $this->app->getAppRoot() . 'db' . DS . 'upgradexuanxuan2.1.0.sql'; + $this->execSQL($xuanxuanSql); + $xuanxuanSql = $this->app->getAppRoot() . 'db' . DS . 'upgradexuanxuan2.2.0.sql'; + $this->execSQL($xuanxuanSql); + $this->initXuanxuan(); + case '11_0': $this->saveLogs('Execute 11_0'); } $this->deletePatch(); @@ -392,6 +481,8 @@ class upgradeModel extends model */ public function updateCompany() { + $this->saveLogs('Run Method ' . __FUNCTION__); + /* Get user defined constants. */ $constants = get_defined_constants(true); $userConstants = $constants['user']; @@ -414,13 +505,15 @@ class upgradeModel extends model /** * Check consistency. * + * @param string $version * @access public * @return string */ - public function checkConsistency() + public function checkConsistency($version = '') { + if(empty($version)) $version = $this->config->installedVersion; $alterSQL = ''; - $standardSQL = $this->app->getAppRoot() . 'db' . DS . 'standard' . DS . 'zentao' . $this->config->installedVersion . '.sql'; + $standardSQL = $this->app->getAppRoot() . 'db' . DS . 'standard' . DS . 'zentao' . $version . '.sql'; if(!file_exists($standardSQL)) return $alterSQL; $tableExists = true; @@ -514,6 +607,7 @@ class upgradeModel extends model */ public function updateUBB() { + $this->saveLogs('Run Method ' . __FUNCTION__); $this->app->loadClass('ubb', true); $bugs = $this->dao->select('id, steps')->from(TABLE_BUG)->fetchAll(); @@ -523,11 +617,13 @@ class upgradeModel extends model { $bug->steps = ubb::parseUBB($bug->steps); $this->dao->update(TABLE_BUG)->data($bug)->where('id')->eq($bug->id)->exec(); + $this->saveLogs($this->dao->get()); } foreach($userTemplates as $template) { $template->content = ubb::parseUBB($template->content); $this->dao->update($this->config->db->prefix . 'userTPL')->data($template)->where('id')->eq($template->id)->exec(); + $this->saveLogs($this->dao->get()); } } @@ -539,6 +635,7 @@ class upgradeModel extends model */ public function updateNL1_2() { + $this->saveLogs('Run Method ' . __FUNCTION__); $tasks = $this->dao->select('id, `desc`')->from(TABLE_TASK)->fetchAll(); $stories = $this->dao->select('story, version, spec')->from($this->config->db->prefix . 'storySpec')->fetchAll(); $todos = $this->dao->select('id, `desc`')->from(TABLE_TODO)->fetchAll(); @@ -548,23 +645,27 @@ class upgradeModel extends model { $task->desc = nl2br($task->desc); $this->dao->update(TABLE_TASK)->data($task)->where('id')->eq($task->id)->exec(); + $this->saveLogs($this->dao->get()); } foreach($stories as $story) { $story->spec = nl2br($story->spec); $this->dao->update($this->config->db->prefix . 'storySpec')->data($story)->where('story')->eq($story->story)->andWhere('version')->eq($story->version)->exec(); + $this->saveLogs($this->dao->get()); } foreach($todos as $todo) { $todo->desc = nl2br($todo->desc); $this->dao->update(TABLE_TODO)->data($todo)->where('id')->eq($todo->id)->exec(); + $this->saveLogs($this->dao->get()); } foreach($testTasks as $testtask) { $testtask->desc = nl2br($testtask->desc); $this->dao->update($this->config->db->prefix . 'testTask')->data($testtask)->where('id')->eq($testtask->id)->exec(); + $this->saveLogs($this->dao->get()); } } @@ -576,6 +677,7 @@ class upgradeModel extends model */ public function updateNL1_3() { + $this->saveLogs('Run Method ' . __FUNCTION__); $products = $this->dao->select('id, `desc`')->from(TABLE_PRODUCT)->fetchAll(); $plans = $this->dao->select('id, `desc`')->from($this->config->db->prefix . 'productPlan')->fetchAll(); $releases = $this->dao->select('id, `desc`')->from(TABLE_RELEASE)->fetchAll(); @@ -586,18 +688,21 @@ class upgradeModel extends model { $product->desc = nl2br($product->desc); $this->dao->update(TABLE_PRODUCT)->data($product)->where('id')->eq($product->id)->exec(); + $this->saveLogs($this->dao->get()); } foreach($plans as $plan) { $plan->desc = nl2br($plan->desc); $this->dao->update($this->config->db->prefix . 'productPlan')->data($plan)->where('id')->eq($plan->id)->exec(); + $this->saveLogs($this->dao->get()); } foreach($releases as $release) { $release->desc = nl2br($release->desc); $this->dao->update(TABLE_RELEASE)->data($release)->where('id')->eq($release->id)->exec(); + $this->saveLogs($this->dao->get()); } foreach($projects as $project) @@ -605,12 +710,14 @@ class upgradeModel extends model $project->desc = nl2br($project->desc); $project->goal = nl2br($project->goal); $this->dao->update(TABLE_PROJECT)->data($project)->where('id')->eq($project->id)->exec(); + $this->saveLogs($this->dao->get()); } foreach($builds as $build) { $build->desc = nl2br($build->desc); $this->dao->update(TABLE_BUILD)->data($build)->where('id')->eq($build->id)->exec(); + $this->saveLogs($this->dao->get()); } } @@ -622,6 +729,8 @@ class upgradeModel extends model */ public function updateTasks() { + $this->saveLogs('Run Method ' . __FUNCTION__); + /* Get all actions of tasks. */ $actions = $this->dao->select('*')->from(TABLE_ACTION) ->where('objectType')->eq('task') @@ -682,6 +791,7 @@ class upgradeModel extends model /* Update action type. */ $this->dao->update(TABLE_ACTION)->set('action')->eq($action->action)->where('id')->eq($action->id)->exec(); + $this->saveLogs($this->dao->get()); } } @@ -689,10 +799,13 @@ class upgradeModel extends model foreach($tasks as $task) { $this->dao->update(TABLE_TASK)->data($task)->where('id')->eq($task->id)->exec(); + $this->saveLogs($this->dao->get()); } $this->dao->update(TABLE_TASK)->set('assignedTo=openedBy, assignedDate = finishedDate')->where('status')->eq('done')->exec(); + $this->saveLogs($this->dao->get()); $this->dao->update(TABLE_TASK)->set('assignedTo=openedBy, assignedDate = canceledDate')->where('status')->eq('cancel')->exec(); + $this->saveLogs($this->dao->get()); /* Update action name. */ } @@ -705,6 +818,7 @@ class upgradeModel extends model */ public function updateActivatedCountOfBug() { + $this->saveLogs('Run Method ' . __FUNCTION__); $bugActivatedActions = $this->dao->select('*')->from(TABLE_ACTION)->where('action')->eq('activated')->andWhere('objectType')->eq('bug')->fetchAll(); if(!empty($bugActivatedActions)) { @@ -716,6 +830,7 @@ class upgradeModel extends model foreach($counts as $key => $count) { $this->dao->update(TABLE_BUG)->set('activatedCount')->eq($count)->where('id')->eq($key)->exec(); + $this->saveLogs($this->dao->get()); } } } @@ -728,6 +843,7 @@ class upgradeModel extends model */ public function updateCases() { + $this->saveLogs('Run Method ' . __FUNCTION__); $results = $this->dao->select('`case`, date, caseResult')->from($this->config->db->prefix . 'testResult')->orderBy('id desc')->fetchGroup('case'); foreach($results as $result) { @@ -736,6 +852,7 @@ class upgradeModel extends model ->set('lastResult')->eq($result[0]->caseResult) ->where('id')->eq($result[0]->case) ->exec(); + $this->saveLogs($this->dao->get()); } } @@ -747,8 +864,10 @@ class upgradeModel extends model */ public function updateProjectType() { + $this->saveLogs('Run Method ' . __FUNCTION__); $projects = $this->dao->select('root')->from(TABLE_MODULE)->where('type')->eq('task')->fetchPairs('root'); $this->dao->update(TABLE_PROJECT)->set('type')->eq('waterfall')->where('id')->in($projects)->exec(); + $this->saveLogs($this->dao->get()); return true; } @@ -760,6 +879,7 @@ class upgradeModel extends model */ public function updateEstimatePriv() { + $this->saveLogs('Run Method ' . __FUNCTION__); $privTable = $this->config->db->prefix . 'groupPriv'; $groups = $this->dao->select('*')->from($privTable) ->where('module')->eq('task') @@ -772,36 +892,42 @@ class upgradeModel extends model ->andWhere('module')->eq('task') ->andWhere('method')->eq('recordEstimate') ->exec(); + $this->saveLogs($this->dao->get()); $this->dao->insert($privTable) ->set('company')->eq($group->company) ->set('`group`')->eq($group->group) ->set('module')->eq('task') ->set('method')->eq('recordEstimate') ->exec(); + $this->saveLogs($this->dao->get()); $this->dao->delete()->from($privTable) ->where('`group`')->eq($group->group) ->andWhere('module')->eq('task') ->andWhere('method')->eq('editEstimate') ->exec(); + $this->saveLogs($this->dao->get()); $this->dao->insert($privTable) ->set('company')->eq($group->company) ->set('`group`')->eq($group->group) ->set('module')->eq('task') ->set('method')->eq('editEstimate') ->exec(); + $this->saveLogs($this->dao->get()); $this->dao->delete()->from($privTable) ->where('`group`')->eq($group->group) ->andWhere('module')->eq('task') ->andWhere('method')->eq('deleteEstimate') ->exec(); + $this->saveLogs($this->dao->get()); $this->dao->insert($privTable) ->set('company')->eq($group->company) ->set('`group`')->eq($group->group) ->set('module')->eq('task') ->set('method')->eq('deleteEstimate') ->exec(); + $this->saveLogs($this->dao->get()); } return true; } @@ -814,6 +940,8 @@ class upgradeModel extends model */ public function updateAction() { + $this->saveLogs('Run Method ' . __FUNCTION__); + /* Get projects and tasks from action table. */ $projects = $this->dao->select('id')->from(TABLE_PROJECT)->fetchPairs('id'); $tasks = $this->dao->select('id, project')->from(TABLE_TASK)->fetchPairs('id'); @@ -830,6 +958,7 @@ class upgradeModel extends model { $productList = isset($projectProducts[$projectID]) ? join(',', array_keys($projectProducts[$projectID])) : ''; $this->dao->update(TABLE_ACTION)->set('product')->eq($productList)->where('objectType')->eq('project')->andWhere('objectID')->eq($projectID)->exec(); + $this->saveLogs($this->dao->get()); } /* Process task actions. */ @@ -845,9 +974,11 @@ class upgradeModel extends model $productList = isset($projectProducts[$projectID]) ? join(',', array_keys($projectProducts[$projectID])) : ''; } $this->dao->update(TABLE_ACTION)->set('product')->eq($productList)->where('objectType')->eq('task')->andWhere('objectID')->eq($taskID)->andWhere('project')->eq($projectID)->exec(); + $this->saveLogs($this->dao->get()); } $this->dao->update(TABLE_ACTION)->set("product = concat(',',product,',')")->exec(); + $this->saveLogs($this->dao->get()); return true; } @@ -859,15 +990,19 @@ class upgradeModel extends model */ public function setOrderData() { + $this->saveLogs('Run Method ' . __FUNCTION__); + $products = $this->dao->select('*')->from(TABLE_PRODUCT)->where('deleted')->eq(0)->orderBy('code')->fetchAll('id'); foreach(array_keys($products) as $key => $productID) { $this->dao->update(TABLE_PRODUCT)->set('`order`')->eq(($key + 1) * 10)->where('id')->eq($productID)->exec(); + $this->saveLogs($this->dao->get()); } $projects = $this->dao->select('*')->from(TABLE_PROJECT)->where('iscat')->eq(0)->andWhere('deleted')->eq(0)->orderBy('status, id desc')->fetchAll('id'); foreach(array_keys($projects) as $key => $projectID) { $this->dao->update(TABLE_PROJECT)->set('`order`')->eq(($key + 1) * 10)->where('id')->eq($projectID)->exec(); + $this->saveLogs($this->dao->get()); } return true; } @@ -880,10 +1015,12 @@ class upgradeModel extends model */ public function updateTaskAssignedTo() { + $this->saveLogs('Run Method ' . __FUNCTION__); $this->dao->update(TABLE_TASK)->set('assignedTo')->eq('closed') ->where('status')->eq('closed') ->andWhere('assignedTo')->eq('') ->exec(); + $this->saveLogs($this->dao->get()); return true; } @@ -922,6 +1059,7 @@ class upgradeModel extends model { if(!file_exists($sqlFile)) return false; + $this->saveLogs('Run Method ' . __FUNCTION__); $mysqlVersion = $this->loadModel('install')->getMysqlVersion(); $ignoreCode = '|1050|1060|1091|1061|'; @@ -950,10 +1088,12 @@ class upgradeModel extends model $sql = str_replace('zt_', $this->config->db->prefix, $sql); try { + $this->saveLogs($sql); $this->dbh->exec($sql); } catch(PDOException $e) { + $this->saveLogs($e->getMessage()); $errorInfo = $e->errorInfo; $errorCode = $errorInfo[1]; if(strpos($ignoreCode, "|$errorCode|") === false) self::$errors[] = $e->getMessage() . "

          The sql is: $sql

          "; @@ -969,6 +1109,7 @@ class upgradeModel extends model */ public function addPriv4_0_1() { + $this->saveLogs('Run Method ' . __FUNCTION__); $privTable = $this->config->db->prefix . 'groupPriv'; $oldPriv = $this->dao->select('*')->from($privTable) ->where('module')->eq('company') @@ -983,6 +1124,7 @@ class upgradeModel extends model ->set('method')->eq('view') ->set('`group`')->eq($item->group) ->exec(); + $this->saveLogs($this->dao->get()); } $oldPriv = $this->dao->select('*')->from($privTable) @@ -998,6 +1140,7 @@ class upgradeModel extends model ->set('method')->eq('batchFinish') ->set('`group`')->eq($item->group) ->exec(); + $this->saveLogs($this->dao->get()); } return true; @@ -1011,6 +1154,7 @@ class upgradeModel extends model */ public function addPriv4_1() { + $this->saveLogs('Run Method ' . __FUNCTION__); $privTable = $this->config->db->prefix . 'groupPriv'; $oldPriv = $this->dao->select('*')->from($privTable) ->where('module')->eq('tree') @@ -1025,6 +1169,7 @@ class upgradeModel extends model ->set('method')->eq('browseTask') ->set('`group`')->eq($item->group) ->exec(); + $this->saveLogs($this->dao->get()); } return true; @@ -1038,6 +1183,7 @@ class upgradeModel extends model */ public function addPriv8_1() { + $this->saveLogs('Run Method ' . __FUNCTION__); $privTable = $this->config->db->prefix . 'grouppriv'; $oldPriv = $this->dao->select('*')->from($privTable) @@ -1051,11 +1197,13 @@ class upgradeModel extends model ->set('method')->eq('linkBugs') ->set('`group`')->eq($item->group) ->exec(); + $this->saveLogs($this->dao->get()); $this->dao->replace($privTable) ->set('module')->eq('bug') ->set('method')->eq('unlinkBug') ->set('`group`')->eq($item->group) ->exec(); + $this->saveLogs($this->dao->get()); } $oldPriv = $this->dao->select('*')->from($privTable) @@ -1069,11 +1217,13 @@ class upgradeModel extends model ->set('method')->eq('linkStory') ->set('`group`')->eq($item->group) ->exec(); + $this->saveLogs($this->dao->get()); $this->dao->replace($privTable) ->set('module')->eq('story') ->set('method')->eq('unlinkStory') ->set('`group`')->eq($item->group) ->exec(); + $this->saveLogs($this->dao->get()); } $oldPriv = $this->dao->select('*')->from($privTable) @@ -1087,11 +1237,13 @@ class upgradeModel extends model ->set('method')->eq('linkCases') ->set('`group`')->eq($item->group) ->exec(); + $this->saveLogs($this->dao->get()); $this->dao->replace($privTable) ->set('module')->eq('testcase') ->set('method')->eq('unlinkCase') ->set('`group`')->eq($item->group) ->exec(); + $this->saveLogs($this->dao->get()); } return true; @@ -1105,31 +1257,50 @@ class upgradeModel extends model */ public function addPriv8_2_beta() { + $this->saveLogs('Run Method ' . __FUNCTION__); $privTable = $this->config->db->prefix . 'grouppriv'; /* Change product-all priv. */ $groups = $this->dao->select('`group`')->from($privTable)->where('`module`')->eq('product')->andWhere('`method`')->eq('index')->fetchPairs('group', 'group'); - foreach($groups as $group) $this->dao->replace($privTable)->set('module')->eq('product')->set('method')->eq('all')->set('`group`')->eq($group)->exec(); + foreach($groups as $group) + { + $this->dao->replace($privTable)->set('module')->eq('product')->set('method')->eq('all')->set('`group`')->eq($group)->exec(); + $this->saveLogs($this->dao->get()); + } /* Change project-all priv. */ $groups = $this->dao->select('`group`')->from($privTable)->where('`module`')->eq('project')->andWhere('`method`')->eq('index')->fetchPairs('group', 'group'); - foreach($groups as $group) $this->dao->replace($privTable)->set('module')->eq('project')->set('method')->eq('all')->set('`group`')->eq($group)->exec(); + foreach($groups as $group) + { + $this->dao->replace($privTable)->set('module')->eq('project')->set('method')->eq('all')->set('`group`')->eq($group)->exec(); + $this->saveLogs($this->dao->get()); + } /* Add kanban and tree priv. */ $groups = $this->dao->select('`group`')->from($privTable)->where('`module`')->eq('project')->andWhere('`method`')->eq('task')->fetchPairs('group', 'group'); foreach($groups as $group) { $this->dao->replace($privTable)->set('module')->eq('project')->set('method')->eq('kanban')->set('`group`')->eq($group)->exec(); + $this->saveLogs($this->dao->get()); $this->dao->replace($privTable)->set('module')->eq('project')->set('method')->eq('tree')->set('`group`')->eq($group)->exec(); + $this->saveLogs($this->dao->get()); } /* Change manageContacts priv. */ $groups = $this->dao->select('`group`')->from($privTable)->where('`module`')->eq('user')->andWhere('`method`')->eq('manageContacts')->fetchPairs('group', 'group'); - foreach($groups as $group) $this->dao->replace($privTable)->set('module')->eq('my')->set('method')->eq('manageContacts')->set('`group`')->eq($group)->exec(); + foreach($groups as $group) + { + $this->dao->replace($privTable)->set('module')->eq('my')->set('method')->eq('manageContacts')->set('`group`')->eq($group)->exec(); + $this->saveLogs($this->dao->get()); + } /* Change deleteContacts priv. */ $groups = $this->dao->select('`group`')->from($privTable)->where('`module`')->eq('user')->andWhere('`method`')->eq('deleteContacts')->fetchPairs('group', 'group'); - foreach($groups as $group) $this->dao->replace($privTable)->set('module')->eq('my')->set('method')->eq('deleteContacts')->set('`group`')->eq($group)->exec(); + foreach($groups as $group) + { + $this->dao->replace($privTable)->set('module')->eq('my')->set('method')->eq('deleteContacts')->set('`group`')->eq($group)->exec(); + $this->saveLogs($this->dao->get()); + } /* Change batchChangeModule priv. */ $oldPriv = $this->dao->select('*')->from($privTable) @@ -1138,7 +1309,11 @@ class upgradeModel extends model ->orWhere("(`module`='bug' and `method`='edit')") ->orWhere("(`module`='testcase' and `method`='edit')") ->fetchAll(); - foreach($oldPriv as $item) $this->dao->replace($privTable)->set('module')->eq($item->module)->set('method')->eq('batchChangeModule')->set('`group`')->eq($item->group)->exec(); + foreach($oldPriv as $item) + { + $this->dao->replace($privTable)->set('module')->eq($item->module)->set('method')->eq('batchChangeModule')->set('`group`')->eq($item->group)->exec(); + $this->saveLogs($this->dao->get()); + } return true; } @@ -1151,13 +1326,20 @@ class upgradeModel extends model */ public function adjustConfigSectionAndKey() { + $this->saveLogs('Run Method ' . __FUNCTION__); $this->dao->update(TABLE_CONFIG)->set('`key`')->eq('productProject')->where('`key`')->eq('productproject')->andWhere('module')->eq('custom')->exec(); + $this->saveLogs($this->dao->get()); $this->dao->update(TABLE_CONFIG)->set('section')->eq('bugBrowse')->where('section')->eq('bugbrowse')->andWhere('module')->eq('datatable')->exec(); + $this->saveLogs($this->dao->get()); $this->dao->update(TABLE_CONFIG)->set('section')->eq('productBrowse')->where('section')->eq('productbrowse')->andWhere('module')->eq('datatable')->exec(); + $this->saveLogs($this->dao->get()); $this->dao->update(TABLE_CONFIG)->set('section')->eq('projectTask')->where('section')->eq('projecttask')->andWhere('module')->eq('datatable')->exec(); + $this->saveLogs($this->dao->get()); $this->dao->update(TABLE_CONFIG)->set('section')->eq('testcaseBrowse')->where('section')->eq('testcasebrowse')->andWhere('module')->eq('datatable')->exec(); + $this->saveLogs($this->dao->get()); $this->dao->update(TABLE_CONFIG)->set('section')->eq('testtaskCases')->where('section')->eq('testtaskcases')->andWhere('module')->eq('datatable')->exec(); + $this->saveLogs($this->dao->get()); return true; } @@ -1171,7 +1353,8 @@ class upgradeModel extends model */ public function toLowerTable($build = 'basic') { - $results = $this->dbh->query("show Variables like '%table_names'")->fetchAll(); + $this->saveLogs('Run Method ' . __FUNCTION__); + $results = $this->dao->query("show Variables like '%table_names'")->fetchAll(); $hasLowered = false; foreach($results as $result) { @@ -1187,7 +1370,7 @@ class upgradeModel extends model if($build == 'pro') $tables2Rename = $this->config->upgrade->lowerProTables; if(!isset($tables2Rename)) return false; - $tablesExists = $this->dbh->query('SHOW TABLES')->fetchAll(); + $tablesExists = $this->dao->query('SHOW TABLES')->fetchAll(); foreach($tablesExists as $key => $table) $tablesExists[$key] = current((array)$table); $tablesExists = array_flip($tablesExists); @@ -1196,12 +1379,22 @@ class upgradeModel extends model if(!isset($tablesExists[$oldTable])) continue; $upgradebak = $newTable . '_othertablebak'; - if(isset($tablesExists[$upgradebak])) $this->dbh->query("DROP TABLE `$upgradebak`"); - if(isset($tablesExists[$newTable])) $this->dbh->query("RENAME TABLE `$newTable` TO `$upgradebak`"); + if(isset($tablesExists[$upgradebak])) + { + $this->dao->query("DROP TABLE `$upgradebak`"); + $this->saveLogs($this->dao->get()); + } + if(isset($tablesExists[$newTable])) + { + $this->dao->query("RENAME TABLE `$newTable` TO `$upgradebak`"); + $this->saveLogs($this->dao->get()); + } $tempTable = $oldTable . '_zentaotmp'; - $this->dbh->query("RENAME TABLE `$oldTable` TO `$tempTable`"); - $this->dbh->query("RENAME TABLE `$tempTable` TO `$newTable`"); + $this->dao->query("RENAME TABLE `$oldTable` TO `$tempTable`"); + $this->saveLogs($this->dao->get()); + $this->dao->query("RENAME TABLE `$tempTable` TO `$newTable`"); + $this->saveLogs($this->dao->get()); } return true; @@ -1215,12 +1408,14 @@ class upgradeModel extends model */ public function processTaskFinish() { + $this->saveLogs('Run Method ' . __FUNCTION__); $this->dao->update(TABLE_TASK) ->set('finishedBy = lastEditedBy') ->set('finishedDate = lastEditedDate') ->where('status')->in('done,closed') ->andWhere('finishedBy')->eq('') ->exec(); + $this->saveLogs($this->dao->get()); return true; } @@ -1233,10 +1428,13 @@ class upgradeModel extends model */ public function deleteCompany() { + $this->saveLogs('Run Method ' . __FUNCTION__); $privTable = $this->config->db->prefix . 'groupPriv'; /* Delete priv that is not in this company. Prevent conflict when delete company's field.*/ $this->dao->delete()->from($privTable)->where('company')->ne($this->app->company->id)->exec(); - $this->dbh->exec("ALTER TABLE " . $privTable . " DROP `company`;"); + $this->saveLogs($this->dao->get()); + $this->dao->exec("ALTER TABLE " . $privTable . " DROP `company`;"); + $this->saveLogs($this->dao->get()); /* Delete config that don't conform to the rules. Prevent conflict when delete company's field.*/ $rows = $this->dao->select('*')->from(TABLE_CONFIG)->orderBy('id desc')->fetchAll('id'); @@ -1254,7 +1452,8 @@ class upgradeModel extends model } if($delList) $this->dao->delete()->from(TABLE_CONFIG)->where('id')->in($delList)->exec(); - $this->dbh->exec("ALTER TABLE " . TABLE_CONFIG . " DROP `company`;"); + $this->dao->exec("ALTER TABLE " . TABLE_CONFIG . " DROP `company`;"); + $this->saveLogs($this->dao->get()); return true; } @@ -1267,6 +1466,7 @@ class upgradeModel extends model */ public function mergeProjectGoalAndDesc() { + $this->saveLogs('Run Method ' . __FUNCTION__); $projects = $this->dao->select('*')->from(TABLE_PROJECT)->fetchAll('id'); foreach($projects as $id => $project) { @@ -1276,6 +1476,7 @@ class upgradeModel extends model ->set('`desc`')->eq($project->desc . '
          ' . $project->goal) ->where('id')->eq($id) ->exec(); + $this->saveLogs($this->dao->get()); } return true; } @@ -1288,8 +1489,11 @@ class upgradeModel extends model */ public function fixBugOSInfo() { + $this->saveLogs('Run Method ' . __FUNCTION__); $this->dao->update(TABLE_BUG)->set('os')->eq('android')->where('os')->eq('andriod')->exec(); + $this->saveLogs($this->dao->get()); $this->dao->update(TABLE_BUG)->set('os')->eq('osx')->where('os')->eq('mac')->exec(); + $this->saveLogs($this->dao->get()); } /** @@ -1300,6 +1504,7 @@ class upgradeModel extends model */ public function fixTaskFinishedBy() { + $this->saveLogs('Run Method ' . __FUNCTION__); $tasks = $this->dao->select('t1.id,t2.actor,t2.date')->from(TABLE_TASK)->alias('t1') ->leftJoin(TABLE_ACTION)->alias('t2') ->on('t1.id = t2.objectID') @@ -1319,6 +1524,7 @@ class upgradeModel extends model ->set('finishedDate')->eq($task->date) ->where('id')->eq($taskID) ->exec(); + $this->saveLogs($this->dao->get()); } } @@ -1330,6 +1536,7 @@ class upgradeModel extends model */ public function fixDataIndex() { + $this->saveLogs('Run Method ' . __FUNCTION__); $savePath = $this->loadModel('file')->savePath; foreach(glob($savePath . '*') as $childDir) { @@ -1346,13 +1553,22 @@ class upgradeModel extends model */ public function initOrder() { + $this->saveLogs('Run Method ' . __FUNCTION__); $dataList = $this->dao->select('id')->from(TABLE_PRODUCT)->orderBy('code_desc')->fetchAll(); $i = 1; - foreach($dataList as $data) $this->dao->update(TABLE_PRODUCT)->set('`order`')->eq($i++)->where('id')->eq($data->id)->exec(); + foreach($dataList as $data) + { + $this->dao->update(TABLE_PRODUCT)->set('`order`')->eq($i++)->where('id')->eq($data->id)->exec(); + $this->saveLogs($this->dao->get()); + } $dataList = $this->dao->select('id')->from(TABLE_PROJECT)->orderBy('code_desc')->fetchAll(); $i = 1; - foreach($dataList as $data) $this->dao->update(TABLE_PROJECT)->set('`order`')->eq($i++)->where('id')->eq($data->id)->exec(); + foreach($dataList as $data) + { + $this->dao->update(TABLE_PROJECT)->set('`order`')->eq($i++)->where('id')->eq($data->id)->exec(); + $this->saveLogs($this->dao->get()); + } return true; } @@ -1365,6 +1581,7 @@ class upgradeModel extends model */ public function adjustOrder7_3() { + $this->saveLogs('Run Method ' . __FUNCTION__); $this->loadModel('product')->fixOrder(); $this->loadModel('project')->fixOrder(); @@ -1379,6 +1596,7 @@ class upgradeModel extends model */ public function adjustPriv7_4_beta() { + $this->saveLogs('Run Method ' . __FUNCTION__); $groups = $this->dao->select('id')->from(TABLE_GROUP)->where('name')->ne('guest')->fetchPairs('id', 'id'); foreach($groups as $groupID) { @@ -1387,6 +1605,7 @@ class upgradeModel extends model $groupPriv->module = 'my'; $groupPriv->method = 'unbind'; $this->dao->replace(TABLE_GROUPPRIV)->data($groupPriv)->exec(); + $this->saveLogs($this->dao->get()); } return true; @@ -1400,6 +1619,7 @@ class upgradeModel extends model */ public function adjustDocModule() { + $this->saveLogs('Run Method ' . __FUNCTION__); $this->app->loadLang('doc'); $productDocModules = $this->dao->select('*')->from(TABLE_MODULE)->where('type')->eq('productdoc')->orderBy('grade,id')->fetchAll('id'); $allProductIdList = $this->dao->select('id,name,acl,whitelist,createdBy')->from(TABLE_PRODUCT)->where('deleted')->eq('0')->fetchAll('id'); @@ -1415,6 +1635,7 @@ class upgradeModel extends model $lib->users = $product->createdBy; if($product->acl == 'custom') $lib->groups = $product->whitelist; $this->dao->insert(TABLE_DOCLIB)->data($lib)->exec(); + $this->saveLogs($this->dao->get()); $libID = $this->dao->lastInsertID(); $relation = array(); @@ -1425,6 +1646,7 @@ class upgradeModel extends model $module->root = $libID; $module->type = 'doc'; $this->dao->insert(TABLE_MODULE)->data($module)->exec(); + $this->saveLogs($this->dao->get()); $newModuleID = $this->dao->lastInsertID(); $relation[$moduleID] = $newModuleID; @@ -1436,17 +1658,21 @@ class upgradeModel extends model $newPaths = join(',', $newPaths); $this->dao->update(TABLE_MODULE)->set('path')->eq($newPaths)->set('parent')->eq($relation[$module->parent])->where('id')->eq($newModuleID)->exec(); + $this->saveLogs($this->dao->get()); $this->dao->update(TABLE_DOC)->set('module')->eq($newModuleID)->where('product')->eq($productID)->andWhere('module')->eq($moduleID)->andWhere('lib')->eq('product')->exec(); + $this->saveLogs($this->dao->get()); } $this->dao->update(TABLE_DOC)->set('lib')->eq($libID)->where('product')->eq($productID)->exec(); } $this->dao->delete()->from(TABLE_MODULE)->where('id')->in(array_keys($productDocModules))->exec(); + $this->saveLogs($this->dao->get()); $projectDocModules = $this->dao->select('*')->from(TABLE_MODULE)->where('type')->eq('projectdoc')->orderBy('grade,id')->fetchAll('id'); $allProjectIdList = $this->dao->select('id,name,acl,whitelist')->from(TABLE_PROJECT)->where('deleted')->eq('0')->fetchAll('id'); foreach($allProjectIdList as $projectID => $project) { $this->dao->delete()->from(TABLE_DOCLIB)->where('project')->eq($projectID)->exec(); + $this->saveLogs($this->dao->get()); $lib = new stdclass(); $lib->project = $projectID; @@ -1458,6 +1684,7 @@ class upgradeModel extends model $lib->users = join(',', $teams); if($project->acl == 'custom') $lib->groups = $project->whitelist; $this->dao->insert(TABLE_DOCLIB)->data($lib)->exec(); + $this->saveLogs($this->dao->get()); $libID = $this->dao->lastInsertID(); $docLibs = $this->dao->select('id,users')->from(TABLE_DOCLIB)->alias('t1') @@ -1470,6 +1697,7 @@ class upgradeModel extends model $docUsers = $teams + explode(',', $lib->users); $docUsers = array_unique($docUsers); $this->dao->update(TABLE_DOCLIB)->set('users')->eq(join(',', $docUsers))->where('id')->eq($lib->id)->exec(); + $this->saveLogs($this->dao->get()); } $relation = array(); @@ -1479,6 +1707,7 @@ class upgradeModel extends model $module->root = $libID; $module->type = 'doc'; $this->dao->insert(TABLE_MODULE)->data($module)->exec(); + $this->saveLogs($this->dao->get()); $newModuleID = $this->dao->lastInsertID(); $relation[$moduleID] = $newModuleID; @@ -1491,11 +1720,15 @@ class upgradeModel extends model $newPaths = join(',', $newPaths); $newPaths = ",$newPaths,"; $this->dao->update(TABLE_MODULE)->set('path')->eq($newPaths)->where('id')->eq($newModuleID)->exec(); + $this->saveLogs($this->dao->get()); $this->dao->update(TABLE_DOC)->set('module')->eq($newModuleID)->where('project')->eq($projectID)->andWhere('module')->eq($moduleID)->exec(); + $this->saveLogs($this->dao->get()); } $this->dao->update(TABLE_DOC)->set('lib')->eq($libID)->where('project')->eq($projectID)->exec(); + $this->saveLogs($this->dao->get()); } $this->dao->delete()->from(TABLE_MODULE)->where('id')->in(array_keys($projectDocModules))->exec(); + $this->saveLogs($this->dao->get()); return true; } @@ -1521,6 +1754,7 @@ class upgradeModel extends model preg_match_all('/"data\/upload\/.*1\/([0-9]{6}\/[^"]+)"/', $action->comment, $output); foreach($output[1] as $path)$files[$path] = $path; $this->dao->update(TABLE_FILE)->set('objectType')->eq($action->objectType)->set('objectID')->eq($action->objectID)->set('extra')->eq('editor')->where('pathname')->in($files)->exec(); + $this->saveLogs($this->dao->get()); } if(count($comments) < $limit) { @@ -1580,7 +1814,11 @@ class upgradeModel extends model foreach($output[1] as $path)$files[$path] = $path; } } - if($files) $this->dao->update(TABLE_FILE)->set('objectType')->eq($type)->set('objectID')->eq($objectID)->set('extra')->eq('editor')->where('pathname')->in($files)->exec(); + if($files) + { + $this->dao->update(TABLE_FILE)->set('objectType')->eq($type)->set('objectID')->eq($objectID)->set('extra')->eq('editor')->where('pathname')->in($files)->exec(); + $this->saveLogs($this->dao->get()); + } } if(count($objects) < $limit) { @@ -1614,6 +1852,7 @@ class upgradeModel extends model */ public function moveDocContent() { + $this->saveLogs('Run Method ' . __FUNCTION__); $descDoc = $this->dao->query('DESC ' . TABLE_DOC)->fetchAll(); $processFields = 0; foreach($descDoc as $field) @@ -1623,6 +1862,7 @@ class upgradeModel extends model if($processFields < 3) return true; $this->dao->exec('TRUNCATE TABLE ' . TABLE_DOCCONTENT); + $this->saveLogs($this->dao->get()); $stmt = $this->dao->select('id,title,digest,content,url')->from(TABLE_DOC)->query(); $fileGroups = $this->dao->select('id,objectID')->from(TABLE_FILE)->where('objectType')->eq('doc')->fetchGroup('objectID', 'id'); while($doc = $stmt->fetch()) @@ -1638,10 +1878,14 @@ class upgradeModel extends model $docContent->type = 'html'; if(isset($fileGroups[$doc->id])) $docContent->files = join(',', array_keys($fileGroups[$doc->id])); $this->dao->insert(TABLE_DOCCONTENT)->data($docContent)->exec(); + $this->saveLogs($this->dao->get()); } $this->dao->exec('ALTER TABLE ' . TABLE_DOC . ' DROP `digest`'); + $this->saveLogs($this->dao->get()); $this->dao->exec('ALTER TABLE ' . TABLE_DOC . ' DROP `content`'); + $this->saveLogs($this->dao->get()); $this->dao->exec('ALTER TABLE ' . TABLE_DOC . ' DROP `url`'); + $this->saveLogs($this->dao->get()); return true; } @@ -1653,6 +1897,7 @@ class upgradeModel extends model */ public function adjustPriv8_3() { + $this->saveLogs('Run Method ' . __FUNCTION__); $docPrivGroups = $this->dao->select('`group`')->from(TABLE_GROUPPRIV)->where('module')->eq('doc')->andWhere('method')->eq('index')->fetchPairs('group', 'group'); foreach($docPrivGroups as $groupID) { @@ -1661,12 +1906,15 @@ class upgradeModel extends model $data->module = 'doc'; $data->method = 'allLibs'; $this->dao->replace(TABLE_GROUPPRIV)->data($data)->exec(); + $this->saveLogs($this->dao->get()); $data->method = 'showFiles'; $this->dao->replace(TABLE_GROUPPRIV)->data($data)->exec(); + $this->saveLogs($this->dao->get()); $data->method = 'objectLibs'; $this->dao->replace(TABLE_GROUPPRIV)->data($data)->exec(); + $this->saveLogs($this->dao->get()); } return true; } @@ -1679,9 +1927,12 @@ class upgradeModel extends model */ public function renameMainLib() { + $this->saveLogs('Run Method ' . __FUNCTION__); $this->app->loadLang('doc'); $this->dao->update(TABLE_DOCLIB)->set('name')->eq($this->lang->doclib->main['product'])->where('product')->gt(0)->andWhere('main')->eq(1)->exec(); + $this->saveLogs($this->dao->get()); $this->dao->update(TABLE_DOCLIB)->set('name')->eq($this->lang->doclib->main['project'])->where('project')->gt(0)->andWhere('main')->eq(1)->exec(); + $this->saveLogs($this->dao->get()); return true; } @@ -1693,6 +1944,7 @@ class upgradeModel extends model */ public function adjustPriv8_4() { + $this->saveLogs('Run Method ' . __FUNCTION__); $groups = $this->dao->select('`group`')->from(TABLE_GROUPPRIV)->where('module')->eq('branch')->andWhere('method')->eq('manage')->fetchPairs('group', 'group'); foreach($groups as $groupID) { @@ -1701,6 +1953,7 @@ class upgradeModel extends model $data->module = 'branch'; $data->method = 'sort'; $this->dao->replace(TABLE_GROUPPRIV)->data($data)->exec(); + $this->saveLogs($this->dao->get()); } $groups = $this->dao->select('`group`')->from(TABLE_GROUPPRIV)->where('module')->eq('story')->andWhere('method')->eq('tasks')->fetchPairs('group', 'group'); foreach($groups as $groupID) @@ -1710,9 +1963,11 @@ class upgradeModel extends model $data->module = 'story'; $data->method = 'bugs'; $this->dao->replace(TABLE_GROUPPRIV)->data($data)->exec(); + $this->saveLogs($this->dao->get()); $data->method = 'cases'; $this->dao->replace(TABLE_GROUPPRIV)->data($data)->exec(); + $this->saveLogs($this->dao->get()); } return true; } @@ -1725,6 +1980,7 @@ class upgradeModel extends model */ public function adjustPriv9_0() { + $this->saveLogs('Run Method ' . __FUNCTION__); $groups = $this->dao->select('`group`')->from(TABLE_GROUPPRIV)->where('module')->eq('testtask')->andWhere('method')->eq('results')->fetchPairs('group', 'group'); foreach($groups as $groupID) { @@ -1733,6 +1989,7 @@ class upgradeModel extends model $data->module = 'testcase'; $data->method = 'bugs'; $this->dao->replace(TABLE_GROUPPRIV)->data($data)->exec(); + $this->saveLogs($this->dao->get()); } $groups = $this->dao->select('`group`')->from(TABLE_GROUPPRIV)->where('module')->eq('mail')->andWhere('method')->eq('delete')->fetchPairs('group', 'group'); foreach($groups as $groupID) @@ -1742,6 +1999,7 @@ class upgradeModel extends model $data->module = 'mail'; $data->method = 'resend'; $this->dao->replace(TABLE_GROUPPRIV)->data($data)->exec(); + $this->saveLogs($this->dao->get()); } return true; } @@ -1755,6 +2013,7 @@ class upgradeModel extends model public function fixProjectProductData() { $this->dao->delete()->from(TABLE_PROJECTPRODUCT)->where('product')->eq(0)->exec(); + $this->saveLogs($this->dao->get()); return true; } @@ -1766,6 +2025,7 @@ class upgradeModel extends model */ public function addBugDeadlineToCustomFields() { + $this->saveLogs('Run Method ' . __FUNCTION__); $createFieldsItems = $this->dao->select('id, value')->from(TABLE_CONFIG) ->where('module')->eq('bug') ->andWhere('section')->eq('custom') @@ -1781,11 +2041,13 @@ class upgradeModel extends model { $value = empty($createFieldsItem->value) ? 'deadline' : $createFieldsItem->value . ",deadline"; $this->dao->update(TABLE_CONFIG)->set('value')->eq($value)->where('id')->eq($createFieldsItem->id)->exec(); + $this->saveLogs($this->dao->get()); } foreach($batchEditFieldsItems as $batchEditFieldsItem) { $value = empty($batchEditFieldsItem->value) ? 'deadline' : $batchEditFieldsItem->value . ",deadline"; $this->dao->update(TABLE_CONFIG)->set('value')->eq($value)->where('id')->eq($batchEditFieldsItem->id)->exec(); + $this->saveLogs($this->dao->get()); } return true; @@ -1799,6 +2061,7 @@ class upgradeModel extends model */ public function adjustPriv9_0_1() { + $this->saveLogs('Run Method ' . __FUNCTION__); $groups = $this->dao->select('`group`')->from(TABLE_GROUPPRIV)->where('module')->eq('testcase')->andWhere('method')->eq('edit')->fetchPairs('group', 'group'); foreach($groups as $groupID) { @@ -1810,6 +2073,7 @@ class upgradeModel extends model { $data->method = $method; $this->dao->replace(TABLE_GROUPPRIV)->data($data)->exec(); + $this->saveLogs($this->dao->get()); } $data->module = 'testsuite'; @@ -1818,6 +2082,7 @@ class upgradeModel extends model { $data->method = $method; $this->dao->replace(TABLE_GROUPPRIV)->data($data)->exec(); + $this->saveLogs($this->dao->get()); } } @@ -1832,6 +2097,7 @@ class upgradeModel extends model { $data->method = $method; $this->dao->replace(TABLE_GROUPPRIV)->data($data)->exec(); + $this->saveLogs($this->dao->get()); } } @@ -1846,6 +2112,7 @@ class upgradeModel extends model { $data->method = $method; $this->dao->replace(TABLE_GROUPPRIV)->data($data)->exec(); + $this->saveLogs($this->dao->get()); } } return true; @@ -1859,6 +2126,7 @@ class upgradeModel extends model */ public function adjustPriv9_2() { + $this->saveLogs('Run Method ' . __FUNCTION__); $groups = $this->dao->select('`group`')->from(TABLE_GROUPPRIV)->where('module')->eq('testsuite')->andWhere('method')->eq('createCase')->fetchPairs('group', 'group'); foreach($groups as $groupID) { @@ -1870,6 +2138,7 @@ class upgradeModel extends model { $data->method = $method; $this->dao->replace(TABLE_GROUPPRIV)->data($data)->exec(); + $this->saveLogs($this->dao->get()); } } @@ -1881,6 +2150,7 @@ class upgradeModel extends model $data->module = 'product'; $data->method = 'build'; $this->dao->replace(TABLE_GROUPPRIV)->data($data)->exec(); + $this->saveLogs($this->dao->get()); } $groups = $this->dao->select('`group`')->from(TABLE_GROUPPRIV)->where('module')->eq('custom')->andWhere('method')->eq('flow')->fetchPairs('group', 'group'); @@ -1891,6 +2161,7 @@ class upgradeModel extends model $data->module = 'custom'; $data->method = 'working'; $this->dao->replace(TABLE_GROUPPRIV)->data($data)->exec(); + $this->saveLogs($this->dao->get()); } return true; } @@ -1903,6 +2174,7 @@ class upgradeModel extends model */ public function adjustPriv9_4() { + $this->saveLogs('Run Method ' . __FUNCTION__); $groups = $this->dao->select('`group`')->from(TABLE_GROUPPRIV)->where('module')->eq('bug')->andWhere('method')->eq('activate')->fetchPairs('group', 'group'); foreach($groups as $groupID) { @@ -1911,6 +2183,7 @@ class upgradeModel extends model $data->module = 'bug'; $data->method = 'batchActivate'; $this->dao->replace(TABLE_GROUPPRIV)->data($data)->exec(); + $this->saveLogs($this->dao->get()); } return true; } @@ -1974,12 +2247,14 @@ class upgradeModel extends model */ public function processCustomMenus() { + $this->saveLogs('Run Method ' . __FUNCTION__); $this->loadModel('setting')->setItem('system.common.global.flow', 'full'); $customMenus = $this->dao->select('*')->from(TABLE_CONFIG)->where('section')->eq('customMenu')->fetchAll(); foreach($customMenus as $customMenu) { $this->dao->update(TABLE_CONFIG)->set('`key`')->eq("full_{$customMenu->key}")->where('id')->eq($customMenu->id)->exec(); + $this->saveLogs($this->dao->get()); } return !dao::isError(); @@ -1993,6 +2268,7 @@ class upgradeModel extends model */ public function initProjectStoryOrder() { + $this->saveLogs('Run Method ' . __FUNCTION__); $storyGroup = $this->dao->select('t1.*')->from(TABLE_PROJECTSTORY)->alias('t1') ->leftJoin(TABLE_STORY)->alias('t2')->on('t1.story=t2.id') ->orderBy('t2.pri_desc,t1.story_asc') @@ -2004,6 +2280,7 @@ class upgradeModel extends model foreach($stories as $storyID => $projectStory) { $this->dao->update(TABLE_PROJECTSTORY)->set('`order`')->eq($order)->where('project')->eq($projectID)->andWhere('story')->eq($storyID)->exec(); + $this->saveLogs($this->dao->get()); $order++; } } @@ -2018,6 +2295,7 @@ class upgradeModel extends model */ public function fixDatatableColsConfig() { + $this->saveLogs('Run Method ' . __FUNCTION__); $config = $this->dao->select('*')->from(TABLE_CONFIG) ->where('module')->eq('datatable') ->andWhere('section')->eq('projectTask') @@ -2033,6 +2311,7 @@ class upgradeModel extends model if($col->id == 'actions' and $col->width == 'auto') $col->width = '180px'; } $this->dao->update(TABLE_CONFIG)->set('value')->eq(json_encode($cols))->where('id')->eq($datatableCols->id)->exec(); + $this->saveLogs($this->dao->get()); } return true; @@ -2046,6 +2325,7 @@ class upgradeModel extends model */ public function addLimitedGroup() { + $this->saveLogs('Run Method ' . __FUNCTION__); $limitedGroup = $this->dao->select('*')->from(TABLE_GROUP)->where('`role`')->eq('limited')->fetch(); if(empty($limitedGroup)) { @@ -2054,6 +2334,7 @@ class upgradeModel extends model $group->role = 'limited'; $group->desc = 'For limited user'; $this->dao->insert(TABLE_GROUP)->data($group)->exec(); + $this->saveLogs($this->dao->get()); $groupID = $this->dao->lastInsertID(); } @@ -2067,11 +2348,13 @@ class upgradeModel extends model ->andWhere('method')->eq('limited') ->fetchPairs('group', 'group'); $this->dao->delete()->from(TABLE_GROUPPRIV)->where('module')->eq('my')->andWhere('method')->eq('limited')->exec(); + $this->saveLogs($this->dao->get()); $limitedUsers = $this->dao->select('account')->from(TABLE_USERGROUP)->where('`group`')->in($limitedGroups)->fetchPairs('account', 'account'); foreach($limitedUsers as $limitedUser) { $this->dao->replace(TABLE_USERGROUP)->set('account')->eq($limitedUser)->set('`group`')->eq($groupID)->exec(); + $this->saveLogs($this->dao->get()); } $groupPriv = new stdclass(); @@ -2079,6 +2362,7 @@ class upgradeModel extends model $groupPriv->module = 'my'; $groupPriv->method = 'limited'; $this->dao->replace(TABLE_GROUPPRIV)->data($groupPriv)->exec(); + $this->saveLogs($this->dao->get()); return true; } @@ -2091,11 +2375,13 @@ class upgradeModel extends model */ public function changeLimitedName() { + $this->saveLogs('Run Method ' . __FUNCTION__); $this->app->loadLang('install'); $this->dao->update(TABLE_GROUP)->set('name')->eq($this->lang->install->groupList['LIMITED']['name']) ->set('desc')->eq($this->lang->install->groupList['LIMITED']['desc']) ->where('role')->eq('limited') ->exec(); + $this->saveLogs($this->dao->get()); return true; } @@ -2108,6 +2394,7 @@ class upgradeModel extends model */ public function adjustPriv9_7() { + $this->saveLogs('Run Method ' . __FUNCTION__); $groups = $this->dao->select('*')->from(TABLE_GROUPPRIV)->where('method')->eq('edit')->andWhere('module')->in('story,task,bug,testcase')->fetchPairs('group', 'group'); foreach($groups as $groupID) { @@ -2116,6 +2403,7 @@ class upgradeModel extends model $groupPriv->module = 'action'; $groupPriv->method = 'comment'; $this->dao->replace(TABLE_GROUPPRIV)->data($groupPriv)->exec(); + $this->saveLogs($this->dao->get()); } return true; } @@ -2128,6 +2416,7 @@ class upgradeModel extends model */ public function changeStoryWidth() { + $this->saveLogs('Run Method ' . __FUNCTION__); $projectCustom = $this->dao->select('*')->from(TABLE_CONFIG)->where('section')->eq('projectTask')->andWhere('`key`')->in('cols,tablecols')->fetchAll('id'); foreach($projectCustom as $configID => $projectTask) { @@ -2137,6 +2426,7 @@ class upgradeModel extends model if($field->id == 'story') $field->width = '40px'; } $this->dao->update(TABLE_CONFIG)->set('value')->eq(json_encode($fields))->where('id')->eq($configID)->exec(); + $this->saveLogs($this->dao->get()); } return true; } @@ -2149,6 +2439,7 @@ class upgradeModel extends model */ public function changeTeamFields() { + $this->saveLogs('Run Method ' . __FUNCTION__); $desc = $this->dao->query('DESC ' . TABLE_TEAM)->fetchAll(); $fields = array(); foreach($desc as $field) @@ -2159,10 +2450,15 @@ class upgradeModel extends model if(isset($fields['root'])) return true; $this->dao->exec("ALTER TABLE " . TABLE_TEAM . " CHANGE `project` `root` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0'"); + $this->saveLogs($this->dao->get()); $this->dao->exec("ALTER TABLE " . TABLE_TEAM . " ADD `type` ENUM('project', 'task') NOT NULL DEFAULT 'project' AFTER `root`"); + $this->saveLogs($this->dao->get()); $this->dao->exec("UPDATE " . TABLE_TEAM . " SET `root` = `task`, `type` = 'task' WHERE `task` > '0'"); + $this->saveLogs($this->dao->get()); $this->dao->exec("ALTER TABLE " . TABLE_TEAM . " DROP PRIMARY KEY"); + $this->saveLogs($this->dao->get()); $this->dao->exec("ALTER TABLE " . TABLE_TEAM . " DROP `task`"); + $this->saveLogs($this->dao->get()); return true; } @@ -2174,7 +2470,9 @@ class upgradeModel extends model */ public function moveData2Notify() { + $this->saveLogs('Run Method ' . __FUNCTION__); $this->dao->exec('TRUNCATE TABLE ' . TABLE_NOTIFY); + $this->saveLogs($this->dao->get()); $mailQueueTable = '`' . $this->config->db->prefix . 'mailqueue`'; $stmt = $this->dao->select('*')->from($mailQueueTable)->query(); while($mailQueue = $stmt->fetch()) @@ -2191,6 +2489,7 @@ class upgradeModel extends model $notify->status = $mailQueue->status; $notify->failReason = $mailQueue->failReason; $this->dao->insert(TABLE_NOTIFY)->data($notify)->exec(); + $this->saveLogs($this->dao->get()); } $webhookDataTable = '`' . $this->config->db->prefix . 'webhookdatas`'; @@ -2206,6 +2505,7 @@ class upgradeModel extends model $notify->createdDate = $webhookData->createdDate; $notify->status = $webhookData->status; $this->dao->insert(TABLE_NOTIFY)->data($notify)->exec(); + $this->saveLogs($this->dao->get()); } return true; } @@ -2226,6 +2526,7 @@ class upgradeModel extends model $groupPriv->module = 'todo'; $groupPriv->method = 'createcycle'; $this->dao->replace(TABLE_GROUPPRIV)->data($groupPriv)->exec(); + $this->saveLogs($this->dao->get()); } $groups = $this->dao->select('*')->from(TABLE_GROUPPRIV)->where('module')->eq('mail')->orWhere('module')->eq('webhook')->fetchPairs('group', 'group'); @@ -2236,6 +2537,7 @@ class upgradeModel extends model $groupPriv->module = 'message'; $groupPriv->method = 'index'; $this->dao->replace(TABLE_GROUPPRIV)->data($groupPriv)->exec(); + $this->saveLogs($this->dao->get()); } $groups = $this->dao->select('*')->from(TABLE_GROUPPRIV)->where('module')->eq('project')->andWhere('method')->eq('linkStory')->fetchPairs('group', 'group'); @@ -2246,6 +2548,7 @@ class upgradeModel extends model $groupPriv->module = 'project'; $groupPriv->method = 'importPlanStories'; $this->dao->replace(TABLE_GROUPPRIV)->data($groupPriv)->exec(); + $this->saveLogs($this->dao->get()); } return true; } @@ -2258,6 +2561,7 @@ class upgradeModel extends model */ public function fixTaskFinishedInfo() { + $this->saveLogs('Run Method ' . __FUNCTION__); $stmt = $this->dao->select('t1.id as historID,t2.objectType,t2.objectID,t2.actor')->from(TABLE_HISTORY)->alias('t1') ->leftJoin(TABLE_ACTION)->alias('t2')->on('t1.action=t2.id') ->where('t1.field')->eq('finishedBy') @@ -2268,7 +2572,9 @@ class upgradeModel extends model while($action = $stmt->fetch()) { $this->dao->update(TABLE_HISTORY)->set('`new`')->eq($action->actor)->where('id')->eq($action->historID)->exec(); + $this->saveLogs($this->dao->get()); $this->dao->update(TABLE_TASK)->set('`finishedBy`')->eq($action->actor)->where('id')->eq($action->objectID)->exec(); + $this->saveLogs($this->dao->get()); } return true; } @@ -2281,6 +2587,7 @@ class upgradeModel extends model */ public function fixTaskAssignedTo() { + $this->saveLogs('Run Method ' . __FUNCTION__); $minParent = $this->dao->select('parent')->from(TABLE_TASK)->where('parent')->ne(0)->orderBy('parent')->limit(1)->fetch(); if(empty($minParent)) return true; @@ -2331,10 +2638,12 @@ class upgradeModel extends model $stmt = $this->dao->update(TABLE_TASK)->set('assignedTo')->eq('closed'); if($lastChild) $stmt->set('assignedDate')->eq($lastChild->assignedDate); $stmt->where('id')->eq($parentTask->id)->exec(); + $this->saveLogs($this->dao->get()); if(empty($parentTask->closedBy) && !empty($lastChild->closedBy)) { $this->dao->update(TABLE_TASK)->set('closedBy')->eq($lastChild->closedBy)->set('closedDate')->eq($lastChild->closedDate)->set('closedReason')->eq($lastChild->closedReason)->where('id')->eq($parentTask->id)->exec(); + $this->saveLogs($this->dao->get()); } } @@ -2353,10 +2662,12 @@ class upgradeModel extends model $stmt = $this->dao->update(TABLE_TASK)->set('assignedTo')->eq('closed'); if(!empty($parent)) $stmt->set('assignedDate')->eq($parent->assignedDate); $stmt->where('id')->eq($childTask->id)->exec(); + $this->saveLogs($this->dao->get()); if(empty($childTask->closedBy) && !empty($parent->closedBy)) { $this->dao->update(TABLE_TASK)->set('closedBy')->eq($parent->closedBy)->set('closedDate')->eq($parent->closedDate)->set('closedReason')->eq($parent->closedReason)->where('id')->eq($childTask->id)->exec(); + $this->saveLogs($this->dao->get()); } } } @@ -2372,6 +2683,7 @@ class upgradeModel extends model */ public function fixProjectClosedInfo() { + $this->saveLogs('Run Method ' . __FUNCTION__); $stmt = $this->dao->select('t1.id as historID, t2.id, t2.objectType,t2.objectID,t2.actor,t2.date')->from(TABLE_HISTORY)->alias('t1') ->leftJoin(TABLE_ACTION)->alias('t2')->on('t1.action=t2.id') ->where('t1.field')->eq('status') @@ -2382,8 +2694,11 @@ class upgradeModel extends model while($action = $stmt->fetch()) { $this->dao->insert(TABLE_HISTORY)->set('`new`')->eq($action->actor)->set('`field`')->eq('closedBy')->set('`action`')->eq($action->id)->exec(); + $this->saveLogs($this->dao->get()); $this->dao->insert(TABLE_HISTORY)->set('`new`')->eq($action->date)->set('`old`')->eq('0000-00-00 00:00:00')->set('`field`')->eq('closedDate')->set('`action`')->eq($action->id)->exec(); + $this->saveLogs($this->dao->get()); $this->dao->update(TABLE_HISTORY)->set('`new`')->eq('closed')->where('`action`')->eq($action->id)->andWhere('field')->eq('status')->exec(); + $this->saveLogs($this->dao->get()); $this->dao->update(TABLE_PROJECT) ->set('`status`')->eq('closed') ->set('`closedBy`')->eq($action->actor) @@ -2391,6 +2706,7 @@ class upgradeModel extends model ->where('id')->eq($action->objectID) ->andWhere('status')->eq('done') ->exec(); + $this->saveLogs($this->dao->get()); } return !dao::isError(); } @@ -2403,8 +2719,10 @@ class upgradeModel extends model */ public function resetProductLine() { + $this->saveLogs('Run Method ' . __FUNCTION__); $deletedLines = $this->dao->select('id')->from(TABLE_MODULE)->where('type')->eq('line')->andWhere('deleted')->eq('1')->fetchPairs('id', 'id'); $this->dao->update(TABLE_PRODUCT)->set('line')->eq(0)->where('line')->in($deletedLines)->exec(); + $this->saveLogs($this->dao->get()); return !dao::isError(); } @@ -2416,6 +2734,7 @@ class upgradeModel extends model */ public function addUniqueKeyToTeam() { + $this->saveLogs('Run Method ' . __FUNCTION__); $members = $this->dao->select('root, type, account')->from(TABLE_TEAM)->groupBy('root, type, account')->having('count(*)')->gt(1)->fetchAll(); foreach($members as $member) @@ -2432,8 +2751,10 @@ class upgradeModel extends model ->andWhere('account')->eq($member->account) ->andWhere('id')->ne($maxID) ->exec(); + $this->saveLogs($this->dao->get()); } $this->dao->exec("ALTER TABLE " . TABLE_TEAM . " ADD UNIQUE `team` (`root`, `type`, `account`)"); + $this->saveLogs($this->dao->get()); return !dao::isError(); } @@ -2445,6 +2766,7 @@ class upgradeModel extends model */ public function adjustPriv10_0_alpha() { + $this->saveLogs('Run Method ' . __FUNCTION__); $groups = $this->dao->select('*')->from(TABLE_GROUPPRIV)->where('module')->eq('my')->andWhere('method')->eq('todo')->fetchPairs('group', 'group'); foreach($groups as $groupID) { @@ -2453,6 +2775,7 @@ class upgradeModel extends model $groupPriv->module = 'my'; $groupPriv->method = 'calendar'; $this->dao->replace(TABLE_GROUPPRIV)->data($groupPriv)->exec(); + $this->saveLogs($this->dao->get()); } return true; } @@ -2465,6 +2788,7 @@ class upgradeModel extends model */ public function fixProjectStatisticBlock() { + $this->saveLogs('Run Method ' . __FUNCTION__); $block = $this->dao->select('*')->from(TABLE_BLOCK)->where('module')->eq('my')->andWhere('source')->eq('project')->andWhere('block')->eq('statistic')->fetch(); if($block) { @@ -2473,6 +2797,7 @@ class upgradeModel extends model { $blockParams->type = 'undone'; $this->dao->update(TABLE_BLOCK)->set('params')->eq(helper::jsonEncode($blockParams))->where('id')->eq($block->id)->exec(); + $this->saveLogs($this->dao->get()); return !dao::isError(); } } @@ -2487,6 +2812,7 @@ class upgradeModel extends model */ public function fixStorySpecTitle() { + $this->saveLogs('Run Method ' . __FUNCTION__); $stories = $this->dao->select('t1.id, t1.title')->from(TABLE_STORY)->alias('t1') ->leftJoin(TABLE_STORYSPEC)->alias('t2')->on('t1.id=t2.story && t1.title != t2.title && t1.version = t2.version') ->where('t2.version')->eq(1) @@ -2495,6 +2821,7 @@ class upgradeModel extends model foreach($stories as $story => $title) { $this->dao->update(TABLE_STORYSPEC)->set('title')->eq($title)->where('story')->eq($story)->andWhere('version')->eq(1)->exec(); + $this->saveLogs($this->dao->get()); } return !dao::isError(); @@ -2508,6 +2835,7 @@ class upgradeModel extends model */ public function removeUnlinkPriv() { + $this->saveLogs('Run Method ' . __FUNCTION__); $this->dao->delete()->from(TABLE_GROUPPRIV) ->where('((module')->eq('story') ->andWhere('method')->eq('unlinkStory') @@ -2519,6 +2847,7 @@ class upgradeModel extends model ->andWhere('method')->eq('unlinkCase') ->markRight(2) ->exec(); + $this->saveLogs($this->dao->get()); return !dao::isError(); } @@ -2529,10 +2858,12 @@ class upgradeModel extends model */ public function changeTaskParentValue() { + $this->saveLogs('Run Method ' . __FUNCTION__); $tasks = $this->dao->select('*')->from(TABLE_TASK)->where('parent')->gt(0)->fetchGroup('parent'); if($tasks) { $this->dao->update(TABLE_TASK)->set('parent')->eq('-1')->where('id')->in(array_keys($tasks))->exec(); + $this->saveLogs($this->dao->get()); } return !dao::isError(); } @@ -2545,6 +2876,7 @@ class upgradeModel extends model */ public function removeCustomMenu() { + $this->saveLogs('Run Method ' . __FUNCTION__); $customMenuMain = $this->dao->select('*')->from(TABLE_CONFIG)->where('module')->eq('common')->andWhere('section')->eq('customMenu')->andWhere("(`key`='full_main' OR `key`='onlyTask_main' OR `key`='onlyStory_main' OR `key`='onlyTest_main')")->fetchAll('id'); foreach($customMenuMain as $mainMenu) { @@ -2558,12 +2890,15 @@ class upgradeModel extends model ->andWhere('section')->eq('customMenu') ->andWhere('owner')->eq($mainMenu->owner) ->exec(); + $this->saveLogs($this->dao->get()); } } } $this->dao->delete()->from(TABLE_CONFIG)->where('module')->eq('common')->andWhere('section')->eq('customMenu')->andWhere('`key`')->eq('full_project')->exec(); + $this->saveLogs($this->dao->get()); $this->dao->delete()->from(TABLE_CONFIG)->where('module')->eq('common')->andWhere('section')->eq('customMenu')->andWhere('`key`')->eq('onlyTask_project')->exec(); + $this->saveLogs($this->dao->get()); return !dao::isError(); } @@ -2575,6 +2910,7 @@ class upgradeModel extends model */ public function initUserView() { + $this->saveLogs('Run Method ' . __FUNCTION__); $users = $this->dao->select('account')->from(TABLE_USER)->fetchAll(); $this->loadModel('user'); foreach($users as $user) $this->user->computeUserView($user->account, $force = true); @@ -2589,6 +2925,7 @@ class upgradeModel extends model */ public function initXuanxuan() { + $this->saveLogs('Run Method ' . __FUNCTION__); $this->loadModel('setting'); $keyID = $this->dao->select('id')->from(TABLE_CONFIG)->where('owner')->eq('system')->andWhere('module')->eq('xuanxuan')->andWhere('`key`')->eq('key')->fetch('id'); if($keyID) @@ -2597,10 +2934,26 @@ class upgradeModel extends model if($existKey) $this->dao->delete()->from(TABLE_CONFIG)->where('id')->eq($existKey)->exec(); $this->dao->update(TABLE_CONFIG)->set('module')->eq('common')->set('section')->eq('xuanxuan')->where('id')->eq($keyID)->exec(); + $this->saveLogs($this->dao->get()); $this->setting->setItem('system.common.xuanxuan.turnon', '1'); $this->setting->setItem('system.common.xxserver.noticed', '1'); } return true; } + + /** + * Save Logs. + * + * @param string $log + * @access public + * @return void + */ + public function saveLogs($log) + { + $logFile = $this->app->getTmpRoot() . 'log/upgrade.' . date('Ymd') . '.log.php'; + if(!file_exists($logFile)) file_put_contents($logFile, "\n"); + $log = date('Y-m-d H:i:s') . ' ' . trim($log) . "\n"; + file_put_contents($logFile, $log, FILE_APPEND); + } } diff --git a/module/upgrade/view/consistency.html.php b/module/upgrade/view/consistency.html.php index ba6c13c801..8f04a258fc 100644 --- a/module/upgrade/view/consistency.html.php +++ b/module/upgrade/view/consistency.html.php @@ -24,7 +24,7 @@

          - + diff --git a/module/user/control.php b/module/user/control.php index a698005d75..f9ea324cd4 100644 --- a/module/user/control.php +++ b/module/user/control.php @@ -711,7 +711,7 @@ class user extends control /* Authorize him and save to session. */ $user->rights = $this->user->authorize($user->account); $user->groups = $this->user->getGroups($user->account); - $user->view = $this->user->grantUserView($account, $user->rights['acls']); + $user->view = $this->user->grantUserView($user->account, $user->rights['acls']); $this->session->set('user', $user); $this->app->user = $this->session->user; $this->loadModel('action')->create('user', $user->id, 'login'); From 7ebc83744342724a5d5ed859dd6df0943674f76d Mon Sep 17 00:00:00 2001 From: Yagami Date: Tue, 22 Jan 2019 15:45:20 +0800 Subject: [PATCH 105/442] * Finish task #5213. --- module/product/model.php | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/module/product/model.php b/module/product/model.php index c971f6294f..8ea051a61a 100644 --- a/module/product/model.php +++ b/module/product/model.php @@ -291,14 +291,33 @@ class productModel extends model if(defined('TUTORIAL')) return $this->loadModel('tutorial')->getProductPairs(); $orderBy = !empty($this->config->product->orderBy) ? $this->config->product->orderBy : 'isClosed'; - $products = $this->dao->select('*, IF(INSTR(" closed", status) < 2, 0, 1) AS isClosed') + $products = $this->dao->select('id,name,line, IF(INSTR(" closed", status) < 2, 0, 1) AS isClosed') ->from(TABLE_PRODUCT) ->where('deleted')->eq(0) ->beginIF(strpos($mode, 'noclosed') !== false)->andWhere('status')->ne('closed')->fi() ->beginIF(!$this->app->user->admin)->andWhere('id')->in($this->app->user->view->products)->fi() - ->orderBy($orderBy) - ->fetchPairs('id', 'name'); - return $products; + ->orderBy('order_desc') + ->fetchAll('id'); + + $lines = $this->loadModel('tree')->getLinePairs(); + $linePairs = array(); + foreach($lines as $id => $name) + { + foreach($products as $key => $product) + { + if($product->line == $id) + { + $linePairs[$product->id] = $name . '/' . $product->name; + unset($products[$key]); + } + } + } + + $productPairs = array(); + foreach($products as $id => $product) $productPairs[$product->id] = $product->name; + $productPairs = $linePairs + $productPairs; + + return $productPairs; } /** From 057f9d8ece4b3d29be7a3b70d739f342de965fcd Mon Sep 17 00:00:00 2001 From: Yagami Date: Tue, 22 Jan 2019 15:58:32 +0800 Subject: [PATCH 106/442] * Finish task #5209. --- xuanxuan/module/chat/ext/model/xuanxuan.php | 33 +++++++++++++++++++ .../model/hook/loadConfigFromDB.xuanxuan.php | 2 +- 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/xuanxuan/module/chat/ext/model/xuanxuan.php b/xuanxuan/module/chat/ext/model/xuanxuan.php index dd3683e8b5..e99cb1744f 100644 --- a/xuanxuan/module/chat/ext/model/xuanxuan.php +++ b/xuanxuan/module/chat/ext/model/xuanxuan.php @@ -3,3 +3,36 @@ public function getExtensionList($userID) { return $this->loadExtension('xuanxuan')->getExtensionList($userID); } + +public function getUserListOutput($idList = array(), $userID) +{ + $output = new stdclass(); + $output->module = 'chat'; + $output->method = 'userGetList'; + + $users = $this->getUserList($status = '', $idList, $idAsKey = false); + if(dao::isError()) + { + $output->result = 'fail'; + $output->message = 'Get userlist failed.'; + } + else + { + $output->result = 'success'; + $output->users = !empty($userID) ? array($userID) : array(); + $output->data = $users; + + $this->app->loadLang('user', 'sys'); + $roles = $this->lang->user->roleList; + + $allDepts = $this->loadModel('dept')->getListByType('dept'); + $depts = array(); + foreach($allDepts as $id => $dept) + { + $depts[$id] = array('name' => $dept->name, 'order' => (int)$dept->order, 'parent' => (int)$dept->parent); + } + $output->roles = $roles; + $output->depts = $depts; + } + return $output; +} diff --git a/xuanxuan/module/common/ext/model/hook/loadConfigFromDB.xuanxuan.php b/xuanxuan/module/common/ext/model/hook/loadConfigFromDB.xuanxuan.php index a594607c2a..26e6034724 100644 --- a/xuanxuan/module/common/ext/model/hook/loadConfigFromDB.xuanxuan.php +++ b/xuanxuan/module/common/ext/model/hook/loadConfigFromDB.xuanxuan.php @@ -11,5 +11,5 @@ if(empty($xxConfig['key'])) if(!isset($xxConfig['chatPort'])) $this->setting->setItem('system.common.xuanxuan.chatPort', 11444); if(!isset($xxConfig['commonPort'])) $this->setting->setItem('system.common.xuanxuan.commonPort', 11443); if(!isset($xxConfig['ip'])) $this->setting->setItem('system.common.xuanxuan.ip', '0.0.0.0'); -if(!isset($xxConfig['isHttps'])) $this->setting->setItem('system.common.xuanxuan.isHttps', 0); +if(!isset($xxConfig['isHttps'])) $this->setting->setItem('system.common.xuanxuan.isHttps', 'off'); if(!isset($xxConfig['uploadFileSize'])) $this->setting->setItem('system.common.xuanxuan.uploadFileSize', 20); From 30fc17cb144906f0a9fdbdc3739f2110819cab5a Mon Sep 17 00:00:00 2001 From: wangyidong Date: Tue, 22 Jan 2019 16:26:45 +0800 Subject: [PATCH 107/442] * finish task #5207. --- module/dev/config.php | 18 ++++++++++++++++++ module/dev/lang/en.php | 6 ++++++ module/dev/lang/zh-cn.php | 6 ++++++ module/dev/model.php | 7 ++----- module/dev/view/api.html.php | 33 +++++++++++++++++++++++++++++++++ 5 files changed, 65 insertions(+), 5 deletions(-) diff --git a/module/dev/config.php b/module/dev/config.php index 503833d048..0a7c96ad59 100644 --- a/module/dev/config.php +++ b/module/dev/config.php @@ -98,3 +98,21 @@ $config->dev->tableMap['lang'] = 'custom'; $config->dev->tableMap['config'] = 'custom'; $config->dev->tableMap['module'] = 'tree'; $config->dev->tableMap['suitecase'] = 'testcase'; + +$config->dev->postParams['bug']['create']['product'] = 'int'; +$config->dev->postParams['bug']['create']['title'] = 'string'; +$config->dev->postParams['bug']['create']['openedBuild'] = 'int|trunk'; +$config->dev->postParams['bug']['create']['branch'] = 'int'; +$config->dev->postParams['bug']['create']['module'] = 'int'; +$config->dev->postParams['bug']['create']['project'] = 'int'; +$config->dev->postParams['bug']['create']['assignedTo'] = 'string'; +$config->dev->postParams['bug']['create']['deadline'] = 'date'; +$config->dev->postParams['bug']['create']['type'] = 'string'; +$config->dev->postParams['bug']['create']['os'] = 'string'; +$config->dev->postParams['bug']['create']['browser'] = 'string'; +$config->dev->postParams['bug']['create']['color'] = 'string'; +$config->dev->postParams['bug']['create']['severity'] = 'int'; +$config->dev->postParams['bug']['create']['pri'] = 'int'; +$config->dev->postParams['bug']['create']['steps'] = 'string'; +$config->dev->postParams['bug']['create']['mailto'] = 'string'; +$config->dev->postParams['bug']['create']['keywords'] = 'string'; diff --git a/module/dev/lang/en.php b/module/dev/lang/en.php index 9d73e73cb5..065afe5f3a 100644 --- a/module/dev/lang/en.php +++ b/module/dev/lang/en.php @@ -9,6 +9,12 @@ $lang->dev->params = 'Parameters'; $lang->dev->type = 'Type'; $lang->dev->desc = 'Description'; $lang->dev->noParams = 'No Parameters'; +$lang->dev->post = 'POST Parameters'; + +$lang->dev->paramRange = 'Range of values: %s'; +$lang->dev->paramDate = 'Date format: YY-mm-dd. such as 2019-01-01'; +$lang->dev->paramColor = 'Color format: #RGB. such as #3da7f5'; +$lang->dev->paramMailto = "Use account. Separate multiple accounts by ','."; $lang->dev->fields = array(); $lang->dev->fields['id'] = 'ID'; diff --git a/module/dev/lang/zh-cn.php b/module/dev/lang/zh-cn.php index 440d33a1d0..5455d60bdd 100644 --- a/module/dev/lang/zh-cn.php +++ b/module/dev/lang/zh-cn.php @@ -9,6 +9,12 @@ $lang->dev->params = '参数列表'; $lang->dev->type = '类型'; $lang->dev->desc = '描述'; $lang->dev->noParams = '无参数'; +$lang->dev->post = 'POST参数'; + +$lang->dev->paramRange = '取值范围:%s'; +$lang->dev->paramDate = '日期格式:YY-mm-dd,如:2019-01-01'; +$lang->dev->paramColor = '颜色格式:#RGB,如:#3da7f5'; +$lang->dev->paramMailto = "填写帐号,多个账号用','分隔。"; $lang->dev->fields = array(); $lang->dev->fields['id'] = '序号'; diff --git a/module/dev/model.php b/module/dev/model.php index f4049a8f0a..f86506eb45 100644 --- a/module/dev/model.php +++ b/module/dev/model.php @@ -134,17 +134,14 @@ class devModel extends model public function getAPIs($module) { $fileName = $this->app->getModuleRoot() . $module . DS . 'control.php'; - if($module != 'common' and $module != 'dev') - { - include $fileName; - } + if($module != 'common' and $module != 'dev') include $fileName; + $classReflect = new ReflectionClass($module); $methods = $classReflect->getMethods(); $apis = array(); foreach($methods as $method) { if($method->class == 'baseControl' or $method->class == 'control' or $method->name == '__construct') continue; - $api = array('name' => $method->name, 'post' => false, 'default' => array()); $methodReflect = new ReflectionMethod($module, $method->name); foreach($methodReflect->getParameters() as $key => $param) diff --git a/module/dev/view/api.html.php b/module/dev/view/api.html.php index 047325565b..6e2aae1da7 100644 --- a/module/dev/view/api.html.php +++ b/module/dev/view/api.html.php @@ -36,6 +36,7 @@
          {$lang->testcase->new}"; } echo html::hidden("product[$key]", $productID); + if(!empty($branches)) echo html::hidden("branch[$key]", (isset($case->branch) and $case->branch !== '') ? $case->branch : ((!empty($case->id) and isset($cases[$case->id]) and !empty($cases[$case->id]->branch)) ? $cases[$case->id]->branch : $branch)); + echo html::hidden("keywords[$key]", isset($case->keywords) ? $case->keywords : ""); ?> title, ENT_QUOTES), "class='form-control'")?>branch) and $case->branch !== '') ? $case->branch : ((!empty($case->id) and isset($cases[$case->id]) and !empty($cases[$case->id]->branch)) ? $cases[$case->id]->branch : $branch), "class='form-control chosen'")?>module) ? $case->module : ((!empty($case->id) and isset($cases[$case->id])) ? $cases[$case->id]->module : ''), "class='form-control chosen'")?>story) ? $case->story : ((!empty($case->id) and isset($cases[$case->id])) ? $cases[$case->id]->story : ''), "class='form-control chosen'")?>module) ? $case->module : ((!empty($case->id) and isset($cases[$case->id])) ? $cases[$case->id]->module : ''), "class='form-control chosen'")?>story) ? $case->story : ((!empty($case->id) and isset($cases[$case->id])) ? $cases[$case->id]->story : ''), "class='form-control chosen'")?> testcase->priList, isset($case->pri) ? $case->pri : ((!empty($case->id) and isset($cases[$case->id])) ? $cases[$case->id]->pri : ''), "class='form-control chosen'")?> testcase->typeList, $case->type, "class='form-control chosen'")?>testcase->stageList, !empty($case->stage) ? $case->stage : ((!empty($case->id) and isset($cases[$case->id])) ? $cases[$case->id]->stage : ''), "multiple='multiple' class='form-control chosen'")?>keywords) ? $case->keywords : "", "class='form-control' autocomplete='off'")?>testcase->stageList, !empty($case->stage) ? $case->stage : ((!empty($case->id) and isset($cases[$case->id])) ? $cases[$case->id]->stage : ''), "multiple='multiple' class='form-control chosen'")?> precondition) ? htmlspecialchars($case->precondition) : "", "class='form-control'")?> @@ -97,7 +91,7 @@
          + testcase->id?> testcase->title?>testcase->module?>testcase->pri?>testcase->type?>testcase->module?>testcase->pri?>testcase->type?> testcase->stage?> testcase->keywords?> testcase->precondition?>
          id)) @@ -55,10 +55,10 @@ ?> title, "class='form-control' style='margin-top:2px' autocomplete='off'")?>module) ? $case->module : (!empty($case->id) ? $cases[$case->id]->module : ''), "class='form-control chosen'")?>module) ? $case->module : (!empty($case->id) ? $cases[$case->id]->module : ''), "class='form-control chosen'")?> testcase->priList, isset($case->pri) ? $case->pri : (!empty($case->id) ? $cases[$case->id]->pri : ''), "class='form-control chosen'")?>testcase->typeList, isset($case->type) ? $case->type : (!empty($case->id) ? $cases[$case->id]->type : ''), "class='form-control chosen'")?>testcase->stageList, !empty($case->stage) ? $case->stage : (!empty($case->id) ? $cases[$case->id]->stage : ''), "multiple='multiple' class='form-control chosen'")?>testcase->typeList, isset($case->type) ? $case->type : (!empty($case->id) ? $cases[$case->id]->type : ''), "class='form-control chosen'")?>testcase->stageList, !empty($case->stage) ? $case->stage : (!empty($case->id) ? $cases[$case->id]->stage : ''), "multiple='multiple' class='form-control chosen'")?> keywords) ? $case->keywords : "", "class='form-control' autocomplete='off'")?> precondition) ? htmlspecialchars($case->precondition) : "", "class='form-control'")?> From aba75b1083cb131622c93cf2bde379fe7106ba61 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Thu, 3 Jan 2019 16:36:24 +0800 Subject: [PATCH 079/442] * adjust code. --- module/bug/model.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/bug/model.php b/module/bug/model.php index 68cb2ba965..09e61c1d6e 100644 --- a/module/bug/model.php +++ b/module/bug/model.php @@ -2690,7 +2690,7 @@ class bugModel extends model $history = $this->action->getHistory($actionID); $action->history = isset($history[$actionID]) ? $history[$actionID] : array(); $action->appendLink = ''; - if(strpos($action->extra, ':')!== false) + if(strpos($action->extra, ':') !== false) { list($extra, $id) = explode(':', $action->extra); $action->extra = $extra; From da39a96bd2613df3412d4ebf288cc6a2f4f34ec2 Mon Sep 17 00:00:00 2001 From: Yagami Date: Thu, 3 Jan 2019 16:37:47 +0800 Subject: [PATCH 080/442] * Delete feedback in open source. --- module/common/model.php | 1 - 1 file changed, 1 deletion(-) diff --git a/module/common/model.php b/module/common/model.php index c09dbe791a..39d6b1bb35 100644 --- a/module/common/model.php +++ b/module/common/model.php @@ -622,7 +622,6 @@ class commonModel extends model } } - if($moduleName == 'feedback') $active = ''; $menuItemHtml = "
        • " . html::a($link, $label, $target) . $subMenu . "
        • \n"; if($isMobile) $menuItemHtml = html::a($link, $menuItem->text, $target, "class='$class $active'") . "\n"; echo $menuItemHtml; From 3684846de8c9b00e21c57efd08ef24bf109181f5 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Thu, 3 Jan 2019 17:38:13 +0800 Subject: [PATCH 081/442] * finish task #7209. --- module/doc/model.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/doc/model.php b/module/doc/model.php index c13c496692..6370a6e9ce 100644 --- a/module/doc/model.php +++ b/module/doc/model.php @@ -1221,7 +1221,7 @@ class docModel extends model ->groupBy('root') ->fetchPairs(); - $docs = $this->dao->select("`id`,`lib`,`acl`,`users`,`groups`")->from(TABLE_DOC) + $docs = $this->dao->select("`id`,`addedBy`,`lib`,`acl`,`users`,`groups`")->from(TABLE_DOC) ->where('lib')->in($idList) ->andWhere('deleted')->eq(0) ->andWhere('module')->eq(0) From f4ec5d266e9e7d5c4c2349169b20586864f27448 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Fri, 4 Jan 2019 13:25:22 +0800 Subject: [PATCH 082/442] * change new version and upgrade. --- VERSION | 2 +- config/config.php | 2 +- db/standard/zentao10.6.sql | 968 +++++++++++++++++++++++++++++++ db/standard/zentao11.0.sql | 969 ++++++++++++++++++++++++++++++++ doc/CHANGELOG | 38 ++ module/common/lang/zh-tw.php | 2 + module/doc/model.php | 1 + module/misc/lang/en.php | 3 + module/misc/lang/zh-cn.php | 3 + module/misc/lang/zh-tw.php | 3 + module/report/lang/zh-tw.php | 1 - module/task/model.php | 19 +- module/testreport/control.php | 2 +- module/testreport/model.php | 6 +- module/upgrade/lang/version.php | 1 + module/upgrade/model.php | 2 + 16 files changed, 2004 insertions(+), 18 deletions(-) create mode 100644 db/standard/zentao10.6.sql create mode 100644 db/standard/zentao11.0.sql diff --git a/VERSION b/VERSION index b147b14d1a..3ab8e9b749 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -11.0.stable +11.1.stable diff --git a/config/config.php b/config/config.php index e395aac4ba..cade32ee6b 100644 --- a/config/config.php +++ b/config/config.php @@ -16,7 +16,7 @@ if(!class_exists('config')){class config{}} if(!function_exists('getWebRoot')){function getWebRoot(){}} /* 基本设置。Basic settings. */ -$config->version = '11.0'; // ZenTaoPHP的版本。 The version of ZenTaoPHP. Don't change it. +$config->version = '11.1'; // ZenTaoPHP的版本。 The version of ZenTaoPHP. Don't change it. $config->charset = 'UTF-8'; // ZenTaoPHP的编码。 The encoding of ZenTaoPHP. $config->cookieLife = time() + 2592000; // Cookie的生存时间。The cookie life time. $config->timezone = 'Asia/Shanghai'; // 时区设置。 The time zone setting, for more see http://www.php.net/manual/en/timezones.php. diff --git a/db/standard/zentao10.6.sql b/db/standard/zentao10.6.sql new file mode 100644 index 0000000000..74c06da860 --- /dev/null +++ b/db/standard/zentao10.6.sql @@ -0,0 +1,968 @@ +CREATE TABLE `zt_action` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `objectType` varchar(30) NOT NULL DEFAULT '', + `objectID` mediumint(8) unsigned NOT NULL DEFAULT '0', + `product` varchar(255) NOT NULL, + `project` mediumint(9) NOT NULL, + `actor` varchar(30) NOT NULL DEFAULT '', + `action` varchar(30) NOT NULL DEFAULT '', + `date` datetime NOT NULL, + `comment` text NOT NULL, + `extra` text NOT NULL, + `read` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `date` (`date`), + KEY `actor` (`actor`), + KEY `project` (`project`), + KEY `objectID` (`objectID`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_block` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `module` varchar(20) NOT NULL, + `title` varchar(100) NOT NULL, + `source` varchar(20) NOT NULL, + `block` varchar(20) NOT NULL, + `params` text NOT NULL, + `order` tinyint(3) unsigned NOT NULL DEFAULT '0', + `grid` tinyint(3) unsigned NOT NULL DEFAULT '0', + `height` smallint(5) unsigned NOT NULL DEFAULT '0', + `hidden` tinyint(1) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `accountModuleOrder` (`account`,`module`,`order`), + KEY `account` (`account`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_branch` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `name` varchar(255) NOT NULL, + `order` smallint(5) unsigned NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_bug` ( + `id` mediumint(8) NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` mediumint(8) unsigned NOT NULL DEFAULT '0', + `project` mediumint(8) unsigned NOT NULL DEFAULT '0', + `plan` mediumint(8) unsigned NOT NULL DEFAULT '0', + `story` mediumint(8) unsigned NOT NULL DEFAULT '0', + `storyVersion` smallint(6) NOT NULL DEFAULT '1', + `task` mediumint(8) unsigned NOT NULL DEFAULT '0', + `toTask` mediumint(8) unsigned NOT NULL DEFAULT '0', + `toStory` mediumint(8) NOT NULL DEFAULT '0', + `title` varchar(255) NOT NULL, + `keywords` varchar(255) NOT NULL, + `severity` tinyint(4) NOT NULL DEFAULT '0', + `pri` tinyint(3) unsigned NOT NULL, + `type` varchar(30) NOT NULL DEFAULT '', + `os` varchar(30) NOT NULL DEFAULT '', + `browser` varchar(30) NOT NULL DEFAULT '', + `hardware` varchar(30) NOT NULL, + `found` varchar(30) NOT NULL DEFAULT '', + `steps` text NOT NULL, + `status` enum('active','resolved','closed') NOT NULL DEFAULT 'active', + `color` char(7) NOT NULL, + `confirmed` tinyint(1) NOT NULL DEFAULT '0', + `activatedCount` smallint(6) NOT NULL, + `activatedDate` datetime NOT NULL, + `mailto` text, + `openedBy` varchar(30) NOT NULL DEFAULT '', + `openedDate` datetime NOT NULL, + `openedBuild` varchar(255) NOT NULL, + `assignedTo` varchar(30) NOT NULL DEFAULT '', + `assignedDate` datetime NOT NULL, + `deadline` date NOT NULL, + `resolvedBy` varchar(30) NOT NULL DEFAULT '', + `resolution` varchar(30) NOT NULL DEFAULT '', + `resolvedBuild` varchar(30) NOT NULL DEFAULT '', + `resolvedDate` datetime NOT NULL, + `closedBy` varchar(30) NOT NULL DEFAULT '', + `closedDate` datetime NOT NULL, + `duplicateBug` mediumint(8) unsigned NOT NULL, + `linkBug` varchar(255) NOT NULL, + `case` mediumint(8) unsigned NOT NULL, + `caseVersion` smallint(6) NOT NULL DEFAULT '1', + `result` mediumint(8) unsigned NOT NULL, + `testtask` mediumint(8) unsigned NOT NULL, + `lastEditedBy` varchar(30) NOT NULL DEFAULT '', + `lastEditedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `project` (`project`), + KEY `status` (`status`), + KEY `plan` (`plan`), + KEY `story` (`story`), + KEY `case` (`case`), + KEY `assignedTo` (`assignedTo`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_build` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `project` mediumint(8) unsigned NOT NULL DEFAULT '0', + `name` char(150) NOT NULL, + `scmPath` char(255) NOT NULL, + `filePath` char(255) NOT NULL, + `date` date NOT NULL, + `stories` text NOT NULL, + `bugs` text NOT NULL, + `builder` char(30) NOT NULL DEFAULT '', + `desc` text NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `project` (`project`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_burn` ( + `project` mediumint(8) unsigned NOT NULL, + `date` date NOT NULL, + `estimate` float NOT NULL, + `left` float NOT NULL, + `consumed` float NOT NULL, + PRIMARY KEY (`project`,`date`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_case` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `lib` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` mediumint(8) unsigned NOT NULL DEFAULT '0', + `path` mediumint(8) unsigned NOT NULL DEFAULT '0', + `story` mediumint(30) unsigned NOT NULL DEFAULT '0', + `storyVersion` smallint(6) NOT NULL DEFAULT '1', + `title` varchar(255) NOT NULL, + `precondition` text NOT NULL, + `keywords` varchar(255) NOT NULL, + `pri` tinyint(3) unsigned NOT NULL DEFAULT '3', + `type` char(30) NOT NULL DEFAULT '1', + `stage` varchar(255) NOT NULL, + `howRun` varchar(30) NOT NULL, + `scriptedBy` varchar(30) NOT NULL, + `scriptedDate` date NOT NULL, + `scriptStatus` varchar(30) NOT NULL, + `scriptLocation` varchar(255) NOT NULL, + `status` char(30) NOT NULL DEFAULT '1', + `color` char(7) NOT NULL, + `frequency` enum('1','2','3') NOT NULL DEFAULT '1', + `order` tinyint(30) unsigned NOT NULL DEFAULT '0', + `openedBy` char(30) NOT NULL DEFAULT '', + `openedDate` datetime NOT NULL, + `reviewedBy` varchar(255) NOT NULL, + `reviewedDate` date NOT NULL, + `lastEditedBy` char(30) NOT NULL DEFAULT '', + `lastEditedDate` datetime NOT NULL, + `version` tinyint(3) unsigned NOT NULL DEFAULT '0', + `linkCase` varchar(255) NOT NULL, + `fromBug` mediumint(8) unsigned NOT NULL, + `fromCaseID` mediumint(8) unsigned NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + `lastRunner` varchar(30) NOT NULL, + `lastRunDate` datetime NOT NULL, + `lastRunResult` char(30) NOT NULL, + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `story` (`story`), + KEY `module` (`module`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_casestep` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `parent` mediumint(8) unsigned NOT NULL DEFAULT '0', + `case` mediumint(8) unsigned NOT NULL DEFAULT '0', + `version` smallint(3) unsigned NOT NULL DEFAULT '0', + `type` varchar(10) NOT NULL DEFAULT 'step', + `desc` text NOT NULL, + `expect` text NOT NULL, + PRIMARY KEY (`id`), + KEY `case` (`case`), + KEY `version` (`version`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_company` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` char(120) DEFAULT NULL, + `phone` char(20) DEFAULT NULL, + `fax` char(20) DEFAULT NULL, + `address` char(120) DEFAULT NULL, + `zipcode` char(10) DEFAULT NULL, + `website` char(120) DEFAULT NULL, + `backyard` char(120) DEFAULT NULL, + `guest` enum('1','0') NOT NULL DEFAULT '0', + `admins` char(255) DEFAULT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_config` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `owner` char(30) NOT NULL DEFAULT '', + `module` varchar(30) NOT NULL, + `section` char(30) NOT NULL DEFAULT '', + `key` char(30) NOT NULL DEFAULT '', + `value` text NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `unique` (`owner`,`module`,`section`,`key`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_cron` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `m` varchar(20) NOT NULL, + `h` varchar(20) NOT NULL, + `dom` varchar(20) NOT NULL, + `mon` varchar(20) NOT NULL, + `dow` varchar(20) NOT NULL, + `command` text NOT NULL, + `remark` varchar(255) NOT NULL, + `type` varchar(20) NOT NULL, + `buildin` tinyint(1) NOT NULL DEFAULT '0', + `status` varchar(20) NOT NULL, + `lastTime` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `lastTime` (`lastTime`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_dept` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` char(60) NOT NULL, + `parent` mediumint(8) unsigned NOT NULL DEFAULT '0', + `path` char(255) NOT NULL DEFAULT '', + `grade` tinyint(3) unsigned NOT NULL DEFAULT '0', + `order` tinyint(3) unsigned NOT NULL DEFAULT '0', + `position` char(30) NOT NULL DEFAULT '', + `function` char(255) NOT NULL DEFAULT '', + `manager` char(30) NOT NULL DEFAULT '', + PRIMARY KEY (`id`), + KEY `parent` (`parent`), + KEY `path` (`path`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_doc` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `project` mediumint(8) unsigned NOT NULL, + `lib` varchar(30) NOT NULL, + `module` varchar(30) NOT NULL, + `title` varchar(255) NOT NULL, + `keywords` varchar(255) NOT NULL, + `type` varchar(30) NOT NULL, + `views` smallint(5) unsigned NOT NULL, + `collector` text NOT NULL, + `addedBy` varchar(30) NOT NULL, + `addedDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `acl` varchar(10) NOT NULL DEFAULT 'open', + `groups` varchar(255) NOT NULL, + `users` text NOT NULL, + `version` smallint(5) unsigned NOT NULL DEFAULT '1', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `project` (`project`), + KEY `lib` (`lib`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_doccontent` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `doc` mediumint(8) unsigned NOT NULL, + `title` varchar(255) NOT NULL, + `digest` varchar(255) NOT NULL, + `content` text NOT NULL, + `files` text NOT NULL, + `type` varchar(10) NOT NULL, + `version` smallint(5) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `doc_version` (`doc`,`version`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_doclib` ( + `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT, + `type` varchar(30) NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `project` mediumint(8) unsigned NOT NULL, + `name` varchar(60) NOT NULL, + `acl` varchar(10) NOT NULL DEFAULT 'open', + `groups` varchar(255) NOT NULL, + `users` text NOT NULL, + `main` enum('0','1') NOT NULL DEFAULT '0', + `collector` text NOT NULL, + `order` tinyint(5) unsigned NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `project` (`project`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_effort` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `user` char(30) NOT NULL DEFAULT '', + `todo` enum('1','0') NOT NULL DEFAULT '1', + `date` date NOT NULL, + `begin` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `end` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `type` enum('1','2','3') NOT NULL DEFAULT '1', + `idvalue` mediumint(8) unsigned NOT NULL DEFAULT '0', + `name` char(30) NOT NULL DEFAULT '', + `desc` char(255) NOT NULL DEFAULT '', + `status` enum('1','2','3') NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + KEY `user` (`user`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_entry` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(50) NOT NULL, + `account` varchar(30) NOT NULL DEFAULT '', + `code` varchar(20) NOT NULL, + `key` varchar(32) NOT NULL, + `ip` varchar(100) NOT NULL, + `desc` text NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_extension` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(150) NOT NULL, + `code` varchar(30) NOT NULL, + `version` varchar(50) NOT NULL, + `author` varchar(100) NOT NULL, + `desc` text NOT NULL, + `license` text NOT NULL, + `type` varchar(20) NOT NULL DEFAULT 'extension', + `site` varchar(150) NOT NULL, + `zentaoCompatible` varchar(100) NOT NULL, + `installedTime` datetime NOT NULL, + `depends` varchar(100) NOT NULL, + `dirs` mediumtext NOT NULL, + `files` mediumtext NOT NULL, + `status` varchar(20) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `code` (`code`), + KEY `name` (`name`), + KEY `installedTime` (`installedTime`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_file` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `pathname` char(100) NOT NULL, + `title` char(255) NOT NULL, + `extension` char(30) NOT NULL, + `size` int(10) unsigned NOT NULL DEFAULT '0', + `objectType` char(30) NOT NULL, + `objectID` mediumint(9) NOT NULL, + `addedBy` char(30) NOT NULL DEFAULT '', + `addedDate` datetime NOT NULL, + `downloads` mediumint(8) unsigned NOT NULL DEFAULT '0', + `extra` varchar(255) NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `objectType` (`objectType`), + KEY `objectID` (`objectID`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_group` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` char(30) NOT NULL, + `role` char(30) NOT NULL DEFAULT '', + `desc` char(255) NOT NULL DEFAULT '', + `acl` text, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_grouppriv` ( + `group` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` char(30) NOT NULL DEFAULT '', + `method` char(30) NOT NULL DEFAULT '', + UNIQUE KEY `group` (`group`,`module`,`method`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_history` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `action` mediumint(8) unsigned NOT NULL DEFAULT '0', + `field` varchar(30) NOT NULL DEFAULT '', + `old` text NOT NULL, + `new` text NOT NULL, + `diff` mediumtext NOT NULL, + PRIMARY KEY (`id`), + KEY `action` (`action`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_im_chat` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `gid` char(40) NOT NULL DEFAULT '', + `name` varchar(60) NOT NULL DEFAULT '', + `type` varchar(20) NOT NULL DEFAULT 'group', + `admins` varchar(255) NOT NULL DEFAULT '', + `committers` varchar(255) NOT NULL DEFAULT '', + `subject` mediumint(8) unsigned NOT NULL DEFAULT '0', + `public` enum('0','1') NOT NULL DEFAULT '0', + `createdBy` varchar(30) NOT NULL DEFAULT '', + `createdDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `editedBy` varchar(30) NOT NULL DEFAULT '', + `editedDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `lastActiveTime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `dismissDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`id`), + KEY `gid` (`gid`), + KEY `name` (`name`), + KEY `type` (`type`), + KEY `public` (`public`), + KEY `createdBy` (`createdBy`), + KEY `editedBy` (`editedBy`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_im_chatuser` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `cgid` char(40) NOT NULL DEFAULT '', + `user` mediumint(8) NOT NULL DEFAULT '0', + `order` smallint(5) NOT NULL DEFAULT '0', + `star` enum('0','1') NOT NULL DEFAULT '0', + `hide` enum('0','1') NOT NULL DEFAULT '0', + `mute` enum('0','1') NOT NULL DEFAULT '0', + `join` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `quit` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `category` varchar(40) NOT NULL DEFAULT '', + PRIMARY KEY (`id`), + UNIQUE KEY `chatuser` (`cgid`,`user`), + KEY `cgid` (`cgid`), + KEY `user` (`user`), + KEY `order` (`order`), + KEY `star` (`star`), + KEY `hide` (`hide`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_im_message` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `gid` char(40) NOT NULL DEFAULT '', + `cgid` char(40) NOT NULL DEFAULT '', + `user` varchar(30) NOT NULL DEFAULT '', + `date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `order` bigint(8) unsigned NOT NULL, + `type` enum('normal','broadcast','notify') NOT NULL DEFAULT 'normal', + `content` text NOT NULL, + `contentType` enum('text','plain','emotion','image','file','object') NOT NULL DEFAULT 'text', + `data` text NOT NULL, + PRIMARY KEY (`id`), + KEY `mgid` (`gid`), + KEY `mcgid` (`cgid`), + KEY `muser` (`user`), + KEY `mtype` (`type`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_im_messagestatus` ( + `user` mediumint(8) NOT NULL DEFAULT '0', + `gid` char(40) NOT NULL DEFAULT '', + `status` enum('waiting','sent','readed','deleted') NOT NULL DEFAULT 'waiting', + UNIQUE KEY `user` (`user`,`gid`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_lang` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `lang` varchar(30) NOT NULL, + `module` varchar(30) NOT NULL, + `section` varchar(30) NOT NULL, + `key` varchar(60) NOT NULL, + `value` text NOT NULL, + `system` enum('0','1') NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + UNIQUE KEY `lang` (`lang`,`module`,`section`,`key`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_log` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `objectType` varchar(30) NOT NULL, + `objectID` mediumint(8) unsigned NOT NULL, + `action` mediumint(8) unsigned NOT NULL, + `date` datetime NOT NULL, + `url` varchar(255) NOT NULL, + `contentType` varchar(30) NOT NULL, + `data` text NOT NULL, + `result` text NOT NULL, + PRIMARY KEY (`id`), + KEY `objectType` (`objectType`), + KEY `obejctID` (`objectID`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_module` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `root` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `name` char(60) NOT NULL DEFAULT '', + `parent` mediumint(8) unsigned NOT NULL DEFAULT '0', + `path` char(255) NOT NULL DEFAULT '', + `grade` tinyint(3) unsigned NOT NULL DEFAULT '0', + `order` smallint(5) unsigned NOT NULL DEFAULT '0', + `type` char(30) NOT NULL, + `owner` varchar(30) NOT NULL, + `collector` text NOT NULL, + `short` varchar(30) NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `root` (`root`), + KEY `type` (`type`), + KEY `path` (`path`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_notify` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `objectType` varchar(50) NOT NULL, + `objectID` mediumint(8) unsigned NOT NULL, + `action` mediumint(9) NOT NULL, + `toList` varchar(255) NOT NULL, + `ccList` text NOT NULL, + `subject` varchar(255) NOT NULL, + `data` text NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `sendTime` datetime NOT NULL, + `status` varchar(10) NOT NULL DEFAULT 'wait', + `failReason` text NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_product` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(90) NOT NULL, + `code` varchar(45) NOT NULL, + `line` mediumint(8) NOT NULL, + `type` varchar(30) NOT NULL DEFAULT 'normal', + `status` varchar(30) NOT NULL DEFAULT '', + `desc` text NOT NULL, + `PO` varchar(30) NOT NULL, + `QD` varchar(30) NOT NULL, + `RD` varchar(30) NOT NULL, + `acl` enum('open','private','custom') NOT NULL DEFAULT 'open', + `whitelist` text NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `createdVersion` varchar(20) NOT NULL, + `order` mediumint(8) unsigned NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `order` (`order`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_productplan` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `branch` mediumint(8) unsigned NOT NULL, + `title` varchar(90) NOT NULL, + `desc` text NOT NULL, + `begin` date NOT NULL, + `end` date NOT NULL, + `order` text NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `end` (`end`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_project` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `isCat` enum('1','0') NOT NULL DEFAULT '0', + `catID` mediumint(8) unsigned NOT NULL, + `type` varchar(20) NOT NULL DEFAULT 'sprint', + `parent` mediumint(8) unsigned NOT NULL DEFAULT '0', + `name` varchar(90) NOT NULL, + `code` varchar(45) NOT NULL, + `begin` date NOT NULL, + `end` date NOT NULL, + `days` smallint(5) unsigned NOT NULL, + `status` varchar(10) NOT NULL, + `statge` enum('1','2','3','4','5') NOT NULL DEFAULT '1', + `pri` enum('1','2','3','4') NOT NULL DEFAULT '1', + `desc` text NOT NULL, + `openedBy` varchar(30) NOT NULL DEFAULT '', + `openedDate` datetime NOT NULL, + `openedVersion` varchar(20) NOT NULL, + `closedBy` varchar(30) NOT NULL DEFAULT '', + `closedDate` datetime NOT NULL, + `canceledBy` varchar(30) NOT NULL DEFAULT '', + `canceledDate` datetime NOT NULL, + `PO` varchar(30) NOT NULL DEFAULT '', + `PM` varchar(30) NOT NULL DEFAULT '', + `QD` varchar(30) NOT NULL DEFAULT '', + `RD` varchar(30) NOT NULL DEFAULT '', + `team` varchar(90) NOT NULL, + `acl` enum('open','private','custom') NOT NULL DEFAULT 'open', + `whitelist` text NOT NULL, + `order` mediumint(8) unsigned NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `parent` (`parent`), + KEY `begin` (`begin`), + KEY `end` (`end`), + KEY `status` (`status`), + KEY `order` (`order`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_projectproduct` ( + `project` mediumint(8) unsigned NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `branch` mediumint(8) unsigned NOT NULL, + `plan` mediumint(8) unsigned NOT NULL, + PRIMARY KEY (`project`,`product`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_projectstory` ( + `project` mediumint(8) unsigned NOT NULL DEFAULT '0', + `product` mediumint(8) unsigned NOT NULL, + `story` mediumint(8) unsigned NOT NULL DEFAULT '0', + `version` smallint(6) NOT NULL DEFAULT '1', + `order` smallint(6) unsigned NOT NULL, + UNIQUE KEY `project` (`project`,`story`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_release` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `build` mediumint(8) unsigned NOT NULL, + `name` char(30) NOT NULL DEFAULT '', + `marker` enum('0','1') NOT NULL DEFAULT '0', + `date` date NOT NULL, + `stories` text NOT NULL, + `bugs` text NOT NULL, + `leftBugs` text NOT NULL, + `desc` text NOT NULL, + `status` varchar(20) NOT NULL DEFAULT 'normal', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `build` (`build`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_score` ( + `id` bigint(12) unsigned NOT NULL AUTO_INCREMENT, + `account` varchar(30) NOT NULL, + `module` varchar(30) NOT NULL DEFAULT '', + `method` varchar(30) NOT NULL, + `desc` varchar(250) NOT NULL DEFAULT '', + `before` int(11) NOT NULL DEFAULT '0', + `score` int(11) NOT NULL DEFAULT '0', + `after` int(11) NOT NULL DEFAULT '0', + `time` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `account` (`account`), + KEY `model` (`module`), + KEY `method` (`method`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_story` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` mediumint(8) unsigned NOT NULL DEFAULT '0', + `plan` text, + `source` varchar(20) NOT NULL, + `sourceNote` varchar(255) NOT NULL, + `fromBug` mediumint(8) unsigned NOT NULL DEFAULT '0', + `title` varchar(255) NOT NULL, + `keywords` varchar(255) NOT NULL, + `type` varchar(30) NOT NULL DEFAULT '', + `pri` tinyint(3) unsigned NOT NULL DEFAULT '3', + `estimate` float unsigned NOT NULL, + `status` enum('','changed','active','draft','closed') NOT NULL DEFAULT '', + `color` char(7) NOT NULL, + `stage` enum('','wait','planned','projected','developing','developed','testing','tested','verified','released','closed') NOT NULL DEFAULT 'wait', + `mailto` text, + `openedBy` varchar(30) NOT NULL DEFAULT '', + `openedDate` datetime NOT NULL, + `assignedTo` varchar(30) NOT NULL DEFAULT '', + `assignedDate` datetime NOT NULL, + `lastEditedBy` varchar(30) NOT NULL DEFAULT '', + `lastEditedDate` datetime NOT NULL, + `reviewedBy` varchar(255) NOT NULL, + `reviewedDate` date NOT NULL, + `closedBy` varchar(30) NOT NULL DEFAULT '', + `closedDate` datetime NOT NULL, + `closedReason` varchar(30) NOT NULL, + `toBug` mediumint(9) NOT NULL, + `childStories` varchar(255) NOT NULL, + `linkStories` varchar(255) NOT NULL, + `duplicateStory` mediumint(8) unsigned NOT NULL, + `version` smallint(6) NOT NULL DEFAULT '1', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `status` (`status`), + KEY `assignedTo` (`assignedTo`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_storyspec` ( + `story` mediumint(9) NOT NULL, + `version` smallint(6) NOT NULL, + `title` varchar(255) NOT NULL, + `spec` text NOT NULL, + `verify` text NOT NULL, + UNIQUE KEY `story` (`story`,`version`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_storystage` ( + `story` mediumint(8) unsigned NOT NULL, + `branch` mediumint(8) unsigned NOT NULL, + `stage` varchar(50) NOT NULL, + KEY `story` (`story`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_suitecase` ( + `suite` mediumint(8) unsigned NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `case` mediumint(8) unsigned NOT NULL, + `version` smallint(5) unsigned NOT NULL, + UNIQUE KEY `suitecase` (`suite`,`case`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_task` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `parent` mediumint(8) NOT NULL DEFAULT '0', + `project` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` mediumint(8) unsigned NOT NULL DEFAULT '0', + `story` mediumint(8) unsigned NOT NULL DEFAULT '0', + `storyVersion` smallint(6) NOT NULL DEFAULT '1', + `fromBug` mediumint(8) unsigned NOT NULL DEFAULT '0', + `name` varchar(255) NOT NULL, + `type` varchar(20) NOT NULL, + `pri` tinyint(3) unsigned NOT NULL DEFAULT '0', + `estimate` float unsigned NOT NULL, + `consumed` float unsigned NOT NULL, + `left` float unsigned NOT NULL, + `deadline` date NOT NULL, + `status` enum('wait','doing','done','pause','cancel','closed') NOT NULL DEFAULT 'wait', + `color` char(7) NOT NULL, + `mailto` text, + `desc` text NOT NULL, + `openedBy` varchar(30) NOT NULL, + `openedDate` datetime NOT NULL, + `assignedTo` varchar(30) NOT NULL, + `assignedDate` datetime NOT NULL, + `estStarted` date NOT NULL, + `realStarted` date NOT NULL, + `finishedBy` varchar(30) NOT NULL, + `finishedDate` datetime NOT NULL, + `finishedList` text NOT NULL, + `canceledBy` varchar(30) NOT NULL, + `canceledDate` datetime NOT NULL, + `closedBy` varchar(30) NOT NULL, + `closedDate` datetime NOT NULL, + `closedReason` varchar(30) NOT NULL, + `lastEditedBy` varchar(30) NOT NULL, + `lastEditedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `project` (`project`), + KEY `story` (`story`), + KEY `assignedTo` (`assignedTo`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_taskestimate` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `task` mediumint(8) unsigned NOT NULL DEFAULT '0', + `date` date NOT NULL, + `left` float unsigned NOT NULL DEFAULT '0', + `consumed` float unsigned NOT NULL, + `account` char(30) NOT NULL DEFAULT '', + `work` text, + PRIMARY KEY (`id`), + KEY `task` (`task`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_team` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `root` mediumint(8) unsigned NOT NULL DEFAULT '0', + `type` enum('project','task') NOT NULL DEFAULT 'project', + `account` char(30) NOT NULL DEFAULT '', + `role` char(30) NOT NULL DEFAULT '', + `limited` char(8) NOT NULL DEFAULT 'no', + `join` date NOT NULL DEFAULT '0000-00-00', + `days` smallint(5) unsigned NOT NULL, + `hours` float(2,1) unsigned NOT NULL DEFAULT '0.0', + `estimate` decimal(12,2) unsigned NOT NULL DEFAULT '0.00', + `consumed` decimal(12,2) unsigned NOT NULL DEFAULT '0.00', + `left` decimal(12,2) unsigned NOT NULL DEFAULT '0.00', + `order` tinyint(3) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `team` (`root`,`type`,`account`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_testreport` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `project` mediumint(8) unsigned NOT NULL, + `tasks` varchar(255) NOT NULL, + `builds` varchar(255) NOT NULL, + `title` varchar(255) NOT NULL, + `begin` date NOT NULL, + `end` date NOT NULL, + `owner` char(30) NOT NULL, + `members` text NOT NULL, + `stories` text NOT NULL, + `bugs` text NOT NULL, + `cases` text NOT NULL, + `report` text NOT NULL, + `objectType` varchar(20) NOT NULL, + `objectID` mediumint(8) unsigned NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_testresult` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `run` mediumint(8) unsigned NOT NULL, + `case` mediumint(8) unsigned NOT NULL, + `version` smallint(5) unsigned NOT NULL, + `caseResult` char(30) NOT NULL, + `stepResults` text NOT NULL, + `lastRunner` varchar(30) NOT NULL, + `date` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `case` (`case`), + KEY `version` (`version`), + KEY `run` (`run`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_testrun` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `task` mediumint(8) unsigned NOT NULL DEFAULT '0', + `case` mediumint(8) unsigned NOT NULL DEFAULT '0', + `version` tinyint(3) unsigned NOT NULL DEFAULT '0', + `assignedTo` char(30) NOT NULL DEFAULT '', + `lastRunner` varchar(30) NOT NULL, + `lastRunDate` datetime NOT NULL, + `lastRunResult` char(30) NOT NULL, + `status` char(30) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `task` (`task`,`case`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_testsuite` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `name` varchar(255) NOT NULL, + `desc` text NOT NULL, + `type` varchar(20) NOT NULL, + `addedBy` char(30) NOT NULL, + `addedDate` datetime NOT NULL, + `lastEditedBy` char(30) NOT NULL, + `lastEditedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL, + PRIMARY KEY (`id`), + KEY `product` (`product`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_testtask` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` char(90) NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `project` mediumint(8) unsigned NOT NULL DEFAULT '0', + `build` char(30) NOT NULL, + `owner` varchar(30) NOT NULL, + `pri` tinyint(3) unsigned NOT NULL DEFAULT '0', + `begin` date NOT NULL, + `end` date NOT NULL, + `mailto` text, + `desc` text NOT NULL, + `report` text NOT NULL, + `status` enum('blocked','doing','wait','done') NOT NULL DEFAULT 'wait', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `build` (`build`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_todo` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `date` date NOT NULL, + `begin` smallint(4) unsigned zerofill NOT NULL, + `end` smallint(4) unsigned zerofill NOT NULL, + `type` char(10) NOT NULL, + `cycle` tinyint(3) unsigned NOT NULL DEFAULT '0', + `idvalue` mediumint(8) unsigned NOT NULL DEFAULT '0', + `pri` tinyint(3) unsigned NOT NULL, + `name` char(150) NOT NULL, + `desc` text NOT NULL, + `status` enum('wait','doing','done','closed') NOT NULL DEFAULT 'wait', + `private` tinyint(1) NOT NULL, + `config` varchar(255) NOT NULL, + `assignedTo` varchar(30) NOT NULL DEFAULT '', + `assignedBy` varchar(30) NOT NULL DEFAULT '', + `assignedDate` datetime NOT NULL, + `finishedBy` varchar(30) NOT NULL DEFAULT '', + `finishedDate` datetime NOT NULL, + `closedBy` varchar(30) NOT NULL DEFAULT '', + `closedDate` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `account` (`account`), + KEY `assignedTo` (`assignedTo`), + KEY `finishedBy` (`finishedBy`), + KEY `date` (`date`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_user` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `dept` mediumint(8) unsigned NOT NULL DEFAULT '0', + `account` char(30) NOT NULL DEFAULT '', + `password` char(32) NOT NULL DEFAULT '', + `role` char(10) NOT NULL DEFAULT '', + `realname` varchar(100) NOT NULL DEFAULT '', + `nickname` char(60) NOT NULL DEFAULT '', + `commiter` varchar(100) NOT NULL, + `avatar` char(30) NOT NULL DEFAULT '', + `birthday` date NOT NULL DEFAULT '0000-00-00', + `gender` enum('f','m') NOT NULL DEFAULT 'f', + `email` char(90) NOT NULL DEFAULT '', + `skype` char(90) NOT NULL DEFAULT '', + `qq` char(20) NOT NULL DEFAULT '', + `yahoo` char(90) NOT NULL DEFAULT '', + `gtalk` char(90) NOT NULL DEFAULT '', + `wangwang` char(90) NOT NULL DEFAULT '', + `mobile` char(11) NOT NULL DEFAULT '', + `phone` char(20) NOT NULL DEFAULT '', + `address` char(120) NOT NULL DEFAULT '', + `zipcode` char(10) NOT NULL DEFAULT '', + `join` date NOT NULL DEFAULT '0000-00-00', + `visits` mediumint(8) unsigned NOT NULL DEFAULT '0', + `ip` char(15) NOT NULL DEFAULT '', + `last` int(10) unsigned NOT NULL DEFAULT '0', + `fails` tinyint(5) NOT NULL DEFAULT '0', + `locked` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `ranzhi` char(30) NOT NULL DEFAULT '', + `score` int(11) NOT NULL DEFAULT '0', + `scoreLevel` int(11) NOT NULL DEFAULT '0', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + `status` enum('online','away','busy','offline') NOT NULL DEFAULT 'offline', + PRIMARY KEY (`id`), + UNIQUE KEY `account` (`account`), + KEY `dept` (`dept`), + KEY `email` (`email`), + KEY `commiter` (`commiter`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_usercontact` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `listName` varchar(60) NOT NULL, + `userList` text NOT NULL, + PRIMARY KEY (`id`), + KEY `account` (`account`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_usergroup` ( + `account` char(30) NOT NULL DEFAULT '', + `group` mediumint(8) unsigned NOT NULL DEFAULT '0', + UNIQUE KEY `account` (`account`,`group`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_userquery` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `module` varchar(30) NOT NULL, + `title` varchar(90) NOT NULL, + `form` text NOT NULL, + `sql` text NOT NULL, + `shortcut` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `account` (`account`), + KEY `module` (`module`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_usertpl` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `type` char(30) NOT NULL, + `title` varchar(150) NOT NULL, + `content` text NOT NULL, + `public` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `account` (`account`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_userview` ( + `account` char(30) NOT NULL, + `products` mediumtext NOT NULL, + `projects` mediumtext NOT NULL, + UNIQUE KEY `account` (`account`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_webhook` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `type` varchar(10) NOT NULL DEFAULT 'default', + `name` varchar(50) NOT NULL, + `url` varchar(255) NOT NULL, + `domain` varchar(255) NOT NULL, + `contentType` varchar(30) NOT NULL DEFAULT 'application/json', + `sendType` enum('sync','async') NOT NULL DEFAULT 'sync', + `products` text NOT NULL, + `projects` text NOT NULL, + `params` varchar(100) NOT NULL, + `actions` text NOT NULL, + `desc` text NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; diff --git a/db/standard/zentao11.0.sql b/db/standard/zentao11.0.sql new file mode 100644 index 0000000000..d50ded5942 --- /dev/null +++ b/db/standard/zentao11.0.sql @@ -0,0 +1,969 @@ +CREATE TABLE `zt_action` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `objectType` varchar(30) NOT NULL DEFAULT '', + `objectID` mediumint(8) unsigned NOT NULL DEFAULT '0', + `product` varchar(255) NOT NULL, + `project` mediumint(9) NOT NULL, + `actor` varchar(30) NOT NULL DEFAULT '', + `action` varchar(30) NOT NULL DEFAULT '', + `date` datetime NOT NULL, + `comment` text NOT NULL, + `extra` text NOT NULL, + `read` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `date` (`date`), + KEY `actor` (`actor`), + KEY `project` (`project`), + KEY `objectID` (`objectID`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_block` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `module` varchar(20) NOT NULL, + `title` varchar(100) NOT NULL, + `source` varchar(20) NOT NULL, + `block` varchar(20) NOT NULL, + `params` text NOT NULL, + `order` tinyint(3) unsigned NOT NULL DEFAULT '0', + `grid` tinyint(3) unsigned NOT NULL DEFAULT '0', + `height` smallint(5) unsigned NOT NULL DEFAULT '0', + `hidden` tinyint(1) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `accountModuleOrder` (`account`,`module`,`order`), + KEY `account` (`account`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_branch` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `name` varchar(255) NOT NULL, + `order` smallint(5) unsigned NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_bug` ( + `id` mediumint(8) NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` mediumint(8) unsigned NOT NULL DEFAULT '0', + `project` mediumint(8) unsigned NOT NULL DEFAULT '0', + `plan` mediumint(8) unsigned NOT NULL DEFAULT '0', + `story` mediumint(8) unsigned NOT NULL DEFAULT '0', + `storyVersion` smallint(6) NOT NULL DEFAULT '1', + `task` mediumint(8) unsigned NOT NULL DEFAULT '0', + `toTask` mediumint(8) unsigned NOT NULL DEFAULT '0', + `toStory` mediumint(8) NOT NULL DEFAULT '0', + `title` varchar(255) NOT NULL, + `keywords` varchar(255) NOT NULL, + `severity` tinyint(4) NOT NULL DEFAULT '0', + `pri` tinyint(3) unsigned NOT NULL, + `type` varchar(30) NOT NULL DEFAULT '', + `os` varchar(30) NOT NULL DEFAULT '', + `browser` varchar(30) NOT NULL DEFAULT '', + `hardware` varchar(30) NOT NULL, + `found` varchar(30) NOT NULL DEFAULT '', + `steps` text NOT NULL, + `status` enum('active','resolved','closed') NOT NULL DEFAULT 'active', + `color` char(7) NOT NULL, + `confirmed` tinyint(1) NOT NULL DEFAULT '0', + `activatedCount` smallint(6) NOT NULL, + `activatedDate` datetime NOT NULL, + `mailto` text, + `openedBy` varchar(30) NOT NULL DEFAULT '', + `openedDate` datetime NOT NULL, + `openedBuild` varchar(255) NOT NULL, + `assignedTo` varchar(30) NOT NULL DEFAULT '', + `assignedDate` datetime NOT NULL, + `deadline` date NOT NULL, + `resolvedBy` varchar(30) NOT NULL DEFAULT '', + `resolution` varchar(30) NOT NULL DEFAULT '', + `resolvedBuild` varchar(30) NOT NULL DEFAULT '', + `resolvedDate` datetime NOT NULL, + `closedBy` varchar(30) NOT NULL DEFAULT '', + `closedDate` datetime NOT NULL, + `duplicateBug` mediumint(8) unsigned NOT NULL, + `linkBug` varchar(255) NOT NULL, + `case` mediumint(8) unsigned NOT NULL, + `caseVersion` smallint(6) NOT NULL DEFAULT '1', + `result` mediumint(8) unsigned NOT NULL, + `testtask` mediumint(8) unsigned NOT NULL, + `lastEditedBy` varchar(30) NOT NULL DEFAULT '', + `lastEditedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `project` (`project`), + KEY `status` (`status`), + KEY `plan` (`plan`), + KEY `story` (`story`), + KEY `case` (`case`), + KEY `assignedTo` (`assignedTo`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_build` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `project` mediumint(8) unsigned NOT NULL DEFAULT '0', + `name` char(150) NOT NULL, + `scmPath` char(255) NOT NULL, + `filePath` char(255) NOT NULL, + `date` date NOT NULL, + `stories` text NOT NULL, + `bugs` text NOT NULL, + `builder` char(30) NOT NULL DEFAULT '', + `desc` text NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `project` (`project`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_burn` ( + `project` mediumint(8) unsigned NOT NULL, + `date` date NOT NULL, + `estimate` float NOT NULL, + `left` float NOT NULL, + `consumed` float NOT NULL, + PRIMARY KEY (`project`,`date`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_case` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `lib` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` mediumint(8) unsigned NOT NULL DEFAULT '0', + `path` mediumint(8) unsigned NOT NULL DEFAULT '0', + `story` mediumint(30) unsigned NOT NULL DEFAULT '0', + `storyVersion` smallint(6) NOT NULL DEFAULT '1', + `title` varchar(255) NOT NULL, + `precondition` text NOT NULL, + `keywords` varchar(255) NOT NULL, + `pri` tinyint(3) unsigned NOT NULL DEFAULT '3', + `type` char(30) NOT NULL DEFAULT '1', + `stage` varchar(255) NOT NULL, + `howRun` varchar(30) NOT NULL, + `scriptedBy` varchar(30) NOT NULL, + `scriptedDate` date NOT NULL, + `scriptStatus` varchar(30) NOT NULL, + `scriptLocation` varchar(255) NOT NULL, + `status` char(30) NOT NULL DEFAULT '1', + `color` char(7) NOT NULL, + `frequency` enum('1','2','3') NOT NULL DEFAULT '1', + `order` tinyint(30) unsigned NOT NULL DEFAULT '0', + `openedBy` char(30) NOT NULL DEFAULT '', + `openedDate` datetime NOT NULL, + `reviewedBy` varchar(255) NOT NULL, + `reviewedDate` date NOT NULL, + `lastEditedBy` char(30) NOT NULL DEFAULT '', + `lastEditedDate` datetime NOT NULL, + `version` tinyint(3) unsigned NOT NULL DEFAULT '0', + `linkCase` varchar(255) NOT NULL, + `fromBug` mediumint(8) unsigned NOT NULL, + `fromCaseID` mediumint(8) unsigned NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + `lastRunner` varchar(30) NOT NULL, + `lastRunDate` datetime NOT NULL, + `lastRunResult` char(30) NOT NULL, + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `story` (`story`), + KEY `module` (`module`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_casestep` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `parent` mediumint(8) unsigned NOT NULL DEFAULT '0', + `case` mediumint(8) unsigned NOT NULL DEFAULT '0', + `version` smallint(3) unsigned NOT NULL DEFAULT '0', + `type` varchar(10) NOT NULL DEFAULT 'step', + `desc` text NOT NULL, + `expect` text NOT NULL, + PRIMARY KEY (`id`), + KEY `case` (`case`), + KEY `version` (`version`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_company` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` char(120) DEFAULT NULL, + `phone` char(20) DEFAULT NULL, + `fax` char(20) DEFAULT NULL, + `address` char(120) DEFAULT NULL, + `zipcode` char(10) DEFAULT NULL, + `website` char(120) DEFAULT NULL, + `backyard` char(120) DEFAULT NULL, + `guest` enum('1','0') NOT NULL DEFAULT '0', + `admins` char(255) DEFAULT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_config` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `owner` char(30) NOT NULL DEFAULT '', + `module` varchar(30) NOT NULL, + `section` char(30) NOT NULL DEFAULT '', + `key` char(30) NOT NULL DEFAULT '', + `value` text NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `unique` (`owner`,`module`,`section`,`key`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_cron` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `m` varchar(20) NOT NULL, + `h` varchar(20) NOT NULL, + `dom` varchar(20) NOT NULL, + `mon` varchar(20) NOT NULL, + `dow` varchar(20) NOT NULL, + `command` text NOT NULL, + `remark` varchar(255) NOT NULL, + `type` varchar(20) NOT NULL, + `buildin` tinyint(1) NOT NULL DEFAULT '0', + `status` varchar(20) NOT NULL, + `lastTime` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `lastTime` (`lastTime`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_dept` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` char(60) NOT NULL, + `parent` mediumint(8) unsigned NOT NULL DEFAULT '0', + `path` char(255) NOT NULL DEFAULT '', + `grade` tinyint(3) unsigned NOT NULL DEFAULT '0', + `order` tinyint(3) unsigned NOT NULL DEFAULT '0', + `position` char(30) NOT NULL DEFAULT '', + `function` char(255) NOT NULL DEFAULT '', + `manager` char(30) NOT NULL DEFAULT '', + PRIMARY KEY (`id`), + KEY `parent` (`parent`), + KEY `path` (`path`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_doc` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `project` mediumint(8) unsigned NOT NULL, + `lib` varchar(30) NOT NULL, + `module` varchar(30) NOT NULL, + `title` varchar(255) NOT NULL, + `keywords` varchar(255) NOT NULL, + `type` varchar(30) NOT NULL, + `views` smallint(5) unsigned NOT NULL, + `collector` text NOT NULL, + `addedBy` varchar(30) NOT NULL, + `addedDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `acl` varchar(10) NOT NULL DEFAULT 'open', + `groups` varchar(255) NOT NULL, + `users` text NOT NULL, + `version` smallint(5) unsigned NOT NULL DEFAULT '1', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `project` (`project`), + KEY `lib` (`lib`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_doccontent` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `doc` mediumint(8) unsigned NOT NULL, + `title` varchar(255) NOT NULL, + `digest` varchar(255) NOT NULL, + `content` text NOT NULL, + `files` text NOT NULL, + `type` varchar(10) NOT NULL, + `version` smallint(5) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `doc_version` (`doc`,`version`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_doclib` ( + `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT, + `type` varchar(30) NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `project` mediumint(8) unsigned NOT NULL, + `name` varchar(60) NOT NULL, + `acl` varchar(10) NOT NULL DEFAULT 'open', + `groups` varchar(255) NOT NULL, + `users` text NOT NULL, + `main` enum('0','1') NOT NULL DEFAULT '0', + `collector` text NOT NULL, + `order` tinyint(5) unsigned NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `project` (`project`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_effort` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `user` char(30) NOT NULL DEFAULT '', + `todo` enum('1','0') NOT NULL DEFAULT '1', + `date` date NOT NULL, + `begin` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `end` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `type` enum('1','2','3') NOT NULL DEFAULT '1', + `idvalue` mediumint(8) unsigned NOT NULL DEFAULT '0', + `name` char(30) NOT NULL DEFAULT '', + `desc` char(255) NOT NULL DEFAULT '', + `status` enum('1','2','3') NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + KEY `user` (`user`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_entry` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(50) NOT NULL, + `account` varchar(30) NOT NULL DEFAULT '', + `code` varchar(20) NOT NULL, + `key` varchar(32) NOT NULL, + `ip` varchar(100) NOT NULL, + `desc` text NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_extension` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(150) NOT NULL, + `code` varchar(30) NOT NULL, + `version` varchar(50) NOT NULL, + `author` varchar(100) NOT NULL, + `desc` text NOT NULL, + `license` text NOT NULL, + `type` varchar(20) NOT NULL DEFAULT 'extension', + `site` varchar(150) NOT NULL, + `zentaoCompatible` varchar(100) NOT NULL, + `installedTime` datetime NOT NULL, + `depends` varchar(100) NOT NULL, + `dirs` mediumtext NOT NULL, + `files` mediumtext NOT NULL, + `status` varchar(20) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `code` (`code`), + KEY `name` (`name`), + KEY `installedTime` (`installedTime`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_file` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `pathname` char(100) NOT NULL, + `title` char(255) NOT NULL, + `extension` char(30) NOT NULL, + `size` int(10) unsigned NOT NULL DEFAULT '0', + `objectType` char(30) NOT NULL, + `objectID` mediumint(9) NOT NULL, + `addedBy` char(30) NOT NULL DEFAULT '', + `addedDate` datetime NOT NULL, + `downloads` mediumint(8) unsigned NOT NULL DEFAULT '0', + `extra` varchar(255) NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `objectType` (`objectType`), + KEY `objectID` (`objectID`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_group` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` char(30) NOT NULL, + `role` char(30) NOT NULL DEFAULT '', + `desc` char(255) NOT NULL DEFAULT '', + `acl` text, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_grouppriv` ( + `group` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` char(30) NOT NULL DEFAULT '', + `method` char(30) NOT NULL DEFAULT '', + UNIQUE KEY `group` (`group`,`module`,`method`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_history` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `action` mediumint(8) unsigned NOT NULL DEFAULT '0', + `field` varchar(30) NOT NULL DEFAULT '', + `old` text NOT NULL, + `new` text NOT NULL, + `diff` mediumtext NOT NULL, + PRIMARY KEY (`id`), + KEY `action` (`action`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_im_chat` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `gid` char(40) NOT NULL DEFAULT '', + `name` varchar(60) NOT NULL DEFAULT '', + `type` varchar(20) NOT NULL DEFAULT 'group', + `admins` varchar(255) NOT NULL DEFAULT '', + `committers` varchar(255) NOT NULL DEFAULT '', + `subject` mediumint(8) unsigned NOT NULL DEFAULT '0', + `public` enum('0','1') NOT NULL DEFAULT '0', + `createdBy` varchar(30) NOT NULL DEFAULT '', + `createdDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `editedBy` varchar(30) NOT NULL DEFAULT '', + `editedDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `lastActiveTime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `dismissDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`id`), + KEY `gid` (`gid`), + KEY `name` (`name`), + KEY `type` (`type`), + KEY `public` (`public`), + KEY `createdBy` (`createdBy`), + KEY `editedBy` (`editedBy`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_im_chatuser` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `cgid` char(40) NOT NULL DEFAULT '', + `user` mediumint(8) NOT NULL DEFAULT '0', + `order` smallint(5) NOT NULL DEFAULT '0', + `star` enum('0','1') NOT NULL DEFAULT '0', + `hide` enum('0','1') NOT NULL DEFAULT '0', + `mute` enum('0','1') NOT NULL DEFAULT '0', + `join` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `quit` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `category` varchar(40) NOT NULL DEFAULT '', + PRIMARY KEY (`id`), + UNIQUE KEY `chatuser` (`cgid`,`user`), + KEY `cgid` (`cgid`), + KEY `user` (`user`), + KEY `order` (`order`), + KEY `star` (`star`), + KEY `hide` (`hide`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_im_message` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `gid` char(40) NOT NULL DEFAULT '', + `cgid` char(40) NOT NULL DEFAULT '', + `user` varchar(30) NOT NULL DEFAULT '', + `date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `order` bigint(8) unsigned NOT NULL, + `type` enum('normal','broadcast','notify') NOT NULL DEFAULT 'normal', + `content` text NOT NULL, + `contentType` enum('text','plain','emotion','image','file','object') NOT NULL DEFAULT 'text', + `data` text NOT NULL, + PRIMARY KEY (`id`), + KEY `mgid` (`gid`), + KEY `mcgid` (`cgid`), + KEY `muser` (`user`), + KEY `mtype` (`type`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_im_messagestatus` ( + `user` mediumint(8) NOT NULL DEFAULT '0', + `gid` char(40) NOT NULL DEFAULT '', + `status` enum('waiting','sent','readed','deleted') NOT NULL DEFAULT 'waiting', + UNIQUE KEY `user` (`user`,`gid`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_lang` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `lang` varchar(30) NOT NULL, + `module` varchar(30) NOT NULL, + `section` varchar(30) NOT NULL, + `key` varchar(60) NOT NULL, + `value` text NOT NULL, + `system` enum('0','1') NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + UNIQUE KEY `lang` (`lang`,`module`,`section`,`key`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_log` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `objectType` varchar(30) NOT NULL, + `objectID` mediumint(8) unsigned NOT NULL, + `action` mediumint(8) unsigned NOT NULL, + `date` datetime NOT NULL, + `url` varchar(255) NOT NULL, + `contentType` varchar(30) NOT NULL, + `data` text NOT NULL, + `result` text NOT NULL, + PRIMARY KEY (`id`), + KEY `objectType` (`objectType`), + KEY `obejctID` (`objectID`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_module` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `root` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `name` char(60) NOT NULL DEFAULT '', + `parent` mediumint(8) unsigned NOT NULL DEFAULT '0', + `path` char(255) NOT NULL DEFAULT '', + `grade` tinyint(3) unsigned NOT NULL DEFAULT '0', + `order` smallint(5) unsigned NOT NULL DEFAULT '0', + `type` char(30) NOT NULL, + `owner` varchar(30) NOT NULL, + `collector` text NOT NULL, + `short` varchar(30) NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `root` (`root`), + KEY `type` (`type`), + KEY `path` (`path`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_notify` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `objectType` varchar(50) NOT NULL, + `objectID` mediumint(8) unsigned NOT NULL, + `action` mediumint(9) NOT NULL, + `toList` varchar(255) NOT NULL, + `ccList` text NOT NULL, + `subject` varchar(255) NOT NULL, + `data` text NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `sendTime` datetime NOT NULL, + `status` varchar(10) NOT NULL DEFAULT 'wait', + `failReason` text NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_product` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(90) NOT NULL, + `code` varchar(45) NOT NULL, + `line` mediumint(8) NOT NULL, + `type` varchar(30) NOT NULL DEFAULT 'normal', + `status` varchar(30) NOT NULL DEFAULT '', + `desc` text NOT NULL, + `PO` varchar(30) NOT NULL, + `QD` varchar(30) NOT NULL, + `RD` varchar(30) NOT NULL, + `acl` enum('open','private','custom') NOT NULL DEFAULT 'open', + `whitelist` text NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `createdVersion` varchar(20) NOT NULL, + `order` mediumint(8) unsigned NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `order` (`order`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_productplan` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `branch` mediumint(8) unsigned NOT NULL, + `title` varchar(90) NOT NULL, + `desc` text NOT NULL, + `begin` date NOT NULL, + `end` date NOT NULL, + `order` text NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `end` (`end`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_project` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `isCat` enum('1','0') NOT NULL DEFAULT '0', + `catID` mediumint(8) unsigned NOT NULL, + `type` varchar(20) NOT NULL DEFAULT 'sprint', + `parent` mediumint(8) unsigned NOT NULL DEFAULT '0', + `name` varchar(90) NOT NULL, + `code` varchar(45) NOT NULL, + `begin` date NOT NULL, + `end` date NOT NULL, + `days` smallint(5) unsigned NOT NULL, + `status` varchar(10) NOT NULL, + `statge` enum('1','2','3','4','5') NOT NULL DEFAULT '1', + `pri` enum('1','2','3','4') NOT NULL DEFAULT '1', + `desc` text NOT NULL, + `openedBy` varchar(30) NOT NULL DEFAULT '', + `openedDate` datetime NOT NULL, + `openedVersion` varchar(20) NOT NULL, + `closedBy` varchar(30) NOT NULL DEFAULT '', + `closedDate` datetime NOT NULL, + `canceledBy` varchar(30) NOT NULL DEFAULT '', + `canceledDate` datetime NOT NULL, + `PO` varchar(30) NOT NULL DEFAULT '', + `PM` varchar(30) NOT NULL DEFAULT '', + `QD` varchar(30) NOT NULL DEFAULT '', + `RD` varchar(30) NOT NULL DEFAULT '', + `team` varchar(90) NOT NULL, + `acl` enum('open','private','custom') NOT NULL DEFAULT 'open', + `whitelist` text NOT NULL, + `order` mediumint(8) unsigned NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `parent` (`parent`), + KEY `begin` (`begin`), + KEY `end` (`end`), + KEY `status` (`status`), + KEY `order` (`order`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_projectproduct` ( + `project` mediumint(8) unsigned NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `branch` mediumint(8) unsigned NOT NULL, + `plan` mediumint(8) unsigned NOT NULL, + PRIMARY KEY (`project`,`product`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_projectstory` ( + `project` mediumint(8) unsigned NOT NULL DEFAULT '0', + `product` mediumint(8) unsigned NOT NULL, + `story` mediumint(8) unsigned NOT NULL DEFAULT '0', + `version` smallint(6) NOT NULL DEFAULT '1', + `order` smallint(6) unsigned NOT NULL, + UNIQUE KEY `project` (`project`,`story`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_release` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `build` mediumint(8) unsigned NOT NULL, + `name` char(30) NOT NULL DEFAULT '', + `marker` enum('0','1') NOT NULL DEFAULT '0', + `date` date NOT NULL, + `stories` text NOT NULL, + `bugs` text NOT NULL, + `leftBugs` text NOT NULL, + `desc` text NOT NULL, + `status` varchar(20) NOT NULL DEFAULT 'normal', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `build` (`build`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_score` ( + `id` bigint(12) unsigned NOT NULL AUTO_INCREMENT, + `account` varchar(30) NOT NULL, + `module` varchar(30) NOT NULL DEFAULT '', + `method` varchar(30) NOT NULL, + `desc` varchar(250) NOT NULL DEFAULT '', + `before` int(11) NOT NULL DEFAULT '0', + `score` int(11) NOT NULL DEFAULT '0', + `after` int(11) NOT NULL DEFAULT '0', + `time` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `account` (`account`), + KEY `model` (`module`), + KEY `method` (`method`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_story` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` mediumint(8) unsigned NOT NULL DEFAULT '0', + `plan` text, + `source` varchar(20) NOT NULL, + `sourceNote` varchar(255) NOT NULL, + `fromBug` mediumint(8) unsigned NOT NULL DEFAULT '0', + `title` varchar(255) NOT NULL, + `keywords` varchar(255) NOT NULL, + `type` varchar(30) NOT NULL DEFAULT '', + `pri` tinyint(3) unsigned NOT NULL DEFAULT '3', + `estimate` float unsigned NOT NULL, + `status` enum('','changed','active','draft','closed') NOT NULL DEFAULT '', + `color` char(7) NOT NULL, + `stage` enum('','wait','planned','projected','developing','developed','testing','tested','verified','released','closed') NOT NULL DEFAULT 'wait', + `mailto` text, + `openedBy` varchar(30) NOT NULL DEFAULT '', + `openedDate` datetime NOT NULL, + `assignedTo` varchar(30) NOT NULL DEFAULT '', + `assignedDate` datetime NOT NULL, + `lastEditedBy` varchar(30) NOT NULL DEFAULT '', + `lastEditedDate` datetime NOT NULL, + `reviewedBy` varchar(255) NOT NULL, + `reviewedDate` date NOT NULL, + `closedBy` varchar(30) NOT NULL DEFAULT '', + `closedDate` datetime NOT NULL, + `closedReason` varchar(30) NOT NULL, + `toBug` mediumint(9) NOT NULL, + `childStories` varchar(255) NOT NULL, + `linkStories` varchar(255) NOT NULL, + `duplicateStory` mediumint(8) unsigned NOT NULL, + `version` smallint(6) NOT NULL DEFAULT '1', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `status` (`status`), + KEY `assignedTo` (`assignedTo`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_storyspec` ( + `story` mediumint(9) NOT NULL, + `version` smallint(6) NOT NULL, + `title` varchar(255) NOT NULL, + `spec` text NOT NULL, + `verify` text NOT NULL, + UNIQUE KEY `story` (`story`,`version`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_storystage` ( + `story` mediumint(8) unsigned NOT NULL, + `branch` mediumint(8) unsigned NOT NULL, + `stage` varchar(50) NOT NULL, + KEY `story` (`story`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_suitecase` ( + `suite` mediumint(8) unsigned NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `case` mediumint(8) unsigned NOT NULL, + `version` smallint(5) unsigned NOT NULL, + UNIQUE KEY `suitecase` (`suite`,`case`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_task` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `parent` mediumint(8) NOT NULL DEFAULT '0', + `project` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` mediumint(8) unsigned NOT NULL DEFAULT '0', + `story` mediumint(8) unsigned NOT NULL DEFAULT '0', + `storyVersion` smallint(6) NOT NULL DEFAULT '1', + `fromBug` mediumint(8) unsigned NOT NULL DEFAULT '0', + `name` varchar(255) NOT NULL, + `type` varchar(20) NOT NULL, + `pri` tinyint(3) unsigned NOT NULL DEFAULT '0', + `estimate` float unsigned NOT NULL, + `consumed` float unsigned NOT NULL, + `left` float unsigned NOT NULL, + `deadline` date NOT NULL, + `status` enum('wait','doing','done','pause','cancel','closed') NOT NULL DEFAULT 'wait', + `color` char(7) NOT NULL, + `mailto` text, + `desc` text NOT NULL, + `openedBy` varchar(30) NOT NULL, + `openedDate` datetime NOT NULL, + `assignedTo` varchar(30) NOT NULL, + `assignedDate` datetime NOT NULL, + `estStarted` date NOT NULL, + `realStarted` date NOT NULL, + `finishedBy` varchar(30) NOT NULL, + `finishedDate` datetime NOT NULL, + `finishedList` text NOT NULL, + `canceledBy` varchar(30) NOT NULL, + `canceledDate` datetime NOT NULL, + `closedBy` varchar(30) NOT NULL, + `closedDate` datetime NOT NULL, + `closedReason` varchar(30) NOT NULL, + `lastEditedBy` varchar(30) NOT NULL, + `lastEditedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `project` (`project`), + KEY `story` (`story`), + KEY `assignedTo` (`assignedTo`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_taskestimate` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `task` mediumint(8) unsigned NOT NULL DEFAULT '0', + `date` date NOT NULL, + `left` float unsigned NOT NULL DEFAULT '0', + `consumed` float unsigned NOT NULL, + `account` char(30) NOT NULL DEFAULT '', + `work` text, + PRIMARY KEY (`id`), + KEY `task` (`task`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_team` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `root` mediumint(8) unsigned NOT NULL DEFAULT '0', + `type` enum('project','task') NOT NULL DEFAULT 'project', + `account` char(30) NOT NULL DEFAULT '', + `role` char(30) NOT NULL DEFAULT '', + `limited` char(8) NOT NULL DEFAULT 'no', + `join` date NOT NULL DEFAULT '0000-00-00', + `days` smallint(5) unsigned NOT NULL, + `hours` float(2,1) unsigned NOT NULL DEFAULT '0.0', + `estimate` decimal(12,2) unsigned NOT NULL DEFAULT '0.00', + `consumed` decimal(12,2) unsigned NOT NULL DEFAULT '0.00', + `left` decimal(12,2) unsigned NOT NULL DEFAULT '0.00', + `order` tinyint(3) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `team` (`root`,`type`,`account`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_testreport` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `project` mediumint(8) unsigned NOT NULL, + `tasks` varchar(255) NOT NULL, + `builds` varchar(255) NOT NULL, + `title` varchar(255) NOT NULL, + `begin` date NOT NULL, + `end` date NOT NULL, + `owner` char(30) NOT NULL, + `members` text NOT NULL, + `stories` text NOT NULL, + `bugs` text NOT NULL, + `cases` text NOT NULL, + `report` text NOT NULL, + `objectType` varchar(20) NOT NULL, + `objectID` mediumint(8) unsigned NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_testresult` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `run` mediumint(8) unsigned NOT NULL, + `case` mediumint(8) unsigned NOT NULL, + `version` smallint(5) unsigned NOT NULL, + `caseResult` char(30) NOT NULL, + `stepResults` text NOT NULL, + `lastRunner` varchar(30) NOT NULL, + `date` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `case` (`case`), + KEY `version` (`version`), + KEY `run` (`run`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_testrun` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `task` mediumint(8) unsigned NOT NULL DEFAULT '0', + `case` mediumint(8) unsigned NOT NULL DEFAULT '0', + `version` tinyint(3) unsigned NOT NULL DEFAULT '0', + `assignedTo` char(30) NOT NULL DEFAULT '', + `lastRunner` varchar(30) NOT NULL, + `lastRunDate` datetime NOT NULL, + `lastRunResult` char(30) NOT NULL, + `status` char(30) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `task` (`task`,`case`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_testsuite` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `name` varchar(255) NOT NULL, + `desc` text NOT NULL, + `type` varchar(20) NOT NULL, + `addedBy` char(30) NOT NULL, + `addedDate` datetime NOT NULL, + `lastEditedBy` char(30) NOT NULL, + `lastEditedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL, + PRIMARY KEY (`id`), + KEY `product` (`product`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_testtask` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` char(90) NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `project` mediumint(8) unsigned NOT NULL DEFAULT '0', + `build` char(30) NOT NULL, + `owner` varchar(30) NOT NULL, + `pri` tinyint(3) unsigned NOT NULL DEFAULT '0', + `begin` date NOT NULL, + `end` date NOT NULL, + `mailto` text, + `desc` text NOT NULL, + `report` text NOT NULL, + `status` enum('blocked','doing','wait','done') NOT NULL DEFAULT 'wait', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `build` (`build`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_todo` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `date` date NOT NULL, + `begin` smallint(4) unsigned zerofill NOT NULL, + `end` smallint(4) unsigned zerofill NOT NULL, + `type` char(10) NOT NULL, + `cycle` tinyint(3) unsigned NOT NULL DEFAULT '0', + `idvalue` mediumint(8) unsigned NOT NULL DEFAULT '0', + `pri` tinyint(3) unsigned NOT NULL, + `name` char(150) NOT NULL, + `desc` text NOT NULL, + `status` enum('wait','doing','done','closed') NOT NULL DEFAULT 'wait', + `private` tinyint(1) NOT NULL, + `config` varchar(255) NOT NULL, + `assignedTo` varchar(30) NOT NULL DEFAULT '', + `assignedBy` varchar(30) NOT NULL DEFAULT '', + `assignedDate` datetime NOT NULL, + `finishedBy` varchar(30) NOT NULL DEFAULT '', + `finishedDate` datetime NOT NULL, + `closedBy` varchar(30) NOT NULL DEFAULT '', + `closedDate` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `account` (`account`), + KEY `assignedTo` (`assignedTo`), + KEY `finishedBy` (`finishedBy`), + KEY `date` (`date`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_user` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `dept` mediumint(8) unsigned NOT NULL DEFAULT '0', + `account` char(30) NOT NULL DEFAULT '', + `password` char(32) NOT NULL DEFAULT '', + `role` char(10) NOT NULL DEFAULT '', + `realname` varchar(100) NOT NULL DEFAULT '', + `nickname` char(60) NOT NULL DEFAULT '', + `commiter` varchar(100) NOT NULL, + `avatar` char(30) NOT NULL DEFAULT '', + `birthday` date NOT NULL DEFAULT '0000-00-00', + `gender` enum('f','m') NOT NULL DEFAULT 'f', + `email` char(90) NOT NULL DEFAULT '', + `skype` char(90) NOT NULL DEFAULT '', + `qq` char(20) NOT NULL DEFAULT '', + `yahoo` char(90) NOT NULL DEFAULT '', + `gtalk` char(90) NOT NULL DEFAULT '', + `wangwang` char(90) NOT NULL DEFAULT '', + `mobile` char(11) NOT NULL DEFAULT '', + `phone` char(20) NOT NULL DEFAULT '', + `address` char(120) NOT NULL DEFAULT '', + `zipcode` char(10) NOT NULL DEFAULT '', + `join` date NOT NULL DEFAULT '0000-00-00', + `visits` mediumint(8) unsigned NOT NULL DEFAULT '0', + `ip` char(15) NOT NULL DEFAULT '', + `last` int(10) unsigned NOT NULL DEFAULT '0', + `fails` tinyint(5) NOT NULL DEFAULT '0', + `locked` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `ranzhi` char(30) NOT NULL DEFAULT '', + `score` int(11) NOT NULL DEFAULT '0', + `scoreLevel` int(11) NOT NULL DEFAULT '0', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + `clientStatus` enum('online','away','busy','offline') NOT NULL DEFAULT 'offline', + `clientLang` varchar(10) NOT NULL DEFAULT 'zh-cn', + PRIMARY KEY (`id`), + UNIQUE KEY `account` (`account`), + KEY `dept` (`dept`), + KEY `email` (`email`), + KEY `commiter` (`commiter`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_usercontact` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `listName` varchar(60) NOT NULL, + `userList` text NOT NULL, + PRIMARY KEY (`id`), + KEY `account` (`account`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_usergroup` ( + `account` char(30) NOT NULL DEFAULT '', + `group` mediumint(8) unsigned NOT NULL DEFAULT '0', + UNIQUE KEY `account` (`account`,`group`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_userquery` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `module` varchar(30) NOT NULL, + `title` varchar(90) NOT NULL, + `form` text NOT NULL, + `sql` text NOT NULL, + `shortcut` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `account` (`account`), + KEY `module` (`module`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_usertpl` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `type` char(30) NOT NULL, + `title` varchar(150) NOT NULL, + `content` text NOT NULL, + `public` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `account` (`account`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_userview` ( + `account` char(30) NOT NULL, + `products` mediumtext NOT NULL, + `projects` mediumtext NOT NULL, + UNIQUE KEY `account` (`account`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_webhook` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `type` varchar(10) NOT NULL DEFAULT 'default', + `name` varchar(50) NOT NULL, + `url` varchar(255) NOT NULL, + `domain` varchar(255) NOT NULL, + `contentType` varchar(30) NOT NULL DEFAULT 'application/json', + `sendType` enum('sync','async') NOT NULL DEFAULT 'sync', + `products` text NOT NULL, + `projects` text NOT NULL, + `params` varchar(100) NOT NULL, + `actions` text NOT NULL, + `desc` text NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; diff --git a/doc/CHANGELOG b/doc/CHANGELOG index 0d141f282a..ff123d3647 100644 --- a/doc/CHANGELOG +++ b/doc/CHANGELOG @@ -1,3 +1,41 @@ +2019-01-04 11.1.stable +解决的Bug +2362 后台自定义存在注入问题 +2361 客户端创建需求提示错误 +2358 新手教程功能异常 +2357 燃尽图没有统计到父子任务的工时信息 +2356 用例导出不能导出实际情况字段 +2352 任务列表指派后跳转页面异常 +2351 组织动态显示的数量异常 +2350 在平台批量提需求第二行后显示为所有平台 +2348 文档库分类排序后文档列表顺序错乱 +2346 地盘区块中的任务数量与列表中的数量不一致 +2345 php7.2版本代码兼容 +2344 多人任务修改团队顺序后不起作用 +2341 已删除的文档还会在文档分类下统计 +2336 父子任务状态同步问题 +2333 测试单的用例分组显示问题 +2328 编辑任务保存后预计剩余会自动清零 +2325 编辑器ie11兼容问题 +2324 项目任务列表统计规则问题 +2323 项目测试单生成测试报告问题 +2322 发布功能异常 +2319 app访问测试用例库报错 +2317 修改个人档案选择出生日年右上角关闭按钮消失 +2304 ie浏览器编辑器点击上传图片按钮页面不显示内容 +2301 测试管理工具中没有创建用例库的入口 +2300 甘特图插件中父子任务不显示 +2299 区块工时统计问题 +2297 ie浏览器录入任务工时,选择日期后工时输入框光标不显示 +2274 项目-需求列表用例覆盖率计算错误 +2273 用例列表隐藏模块功能异常 +2265 组织用户查看由某个用户完成的bug,数据不准确 +2251 项目任务下必填字段问题 +2249 看板高度问题 +2248 访问不存在的网址暴露服务器信息 +2232 修改用例后优先级会自动改变 +2186 用例执行失败转bug后跳转页面不对 + 2018-12-21 11.0.stable 完成的需求 3482 集成喧喧的广播接口 diff --git a/module/common/lang/zh-tw.php b/module/common/lang/zh-tw.php index fd664baecd..66872d8084 100644 --- a/module/common/lang/zh-tw.php +++ b/module/common/lang/zh-tw.php @@ -727,6 +727,8 @@ if(isset($config->global->flow) and $config->global->flow == 'onlyTest') /* Remove sub menu of project module. */ unset($lang->project->menu); unset($lang->project->menuOrder); + $lang->project->menu = new stdclass(); + $lang->project->menu->list = array('alias' => ''); /* Add bug, testcase and testtask module. */ $lang->menu->bug = 'Bug|bug|index'; diff --git a/module/doc/model.php b/module/doc/model.php index 6370a6e9ce..1be0ab67dc 100644 --- a/module/doc/model.php +++ b/module/doc/model.php @@ -785,6 +785,7 @@ class docModel extends model $docCounts= $this->dao->select("module, count(id) as docCount")->from(TABLE_DOC) ->where('module')->in(array_keys($modules)) ->andWhere('deleted')->eq(0) + ->groupBy('module') ->fetchPairs(); foreach($modules as $moduleID => $module) $modules[$moduleID]->docCount = isset($docCounts[$moduleID]) ? $docCounts[$moduleID] : 0; diff --git a/module/misc/lang/en.php b/module/misc/lang/en.php index bd11348a0c..852d21ce57 100644 --- a/module/misc/lang/en.php +++ b/module/misc/lang/en.php @@ -98,6 +98,7 @@ $lang->misc->feature = new stdclass(); $lang->misc->feature->lastest = 'Latest Version'; $lang->misc->feature->detailed = 'Details'; +$lang->misc->releaseDate['11.1.stable'] = '2019-01-04'; $lang->misc->releaseDate['11.0.stable'] = '2018-12-21'; $lang->misc->releaseDate['10.6.stable'] = '2018-11-20'; $lang->misc->releaseDate['10.5.stable'] = '2018-10-25'; @@ -119,6 +120,8 @@ $lang->misc->releaseDate['7.2.stable'] = '2015-05-22'; $lang->misc->releaseDate['7.1.stable'] = '2015-03-07'; $lang->misc->releaseDate['6.3.stable'] = '2014-11-07'; +$lang->misc->feature->all['11.1.stable'][] = array('title'=>'Fix Bug.'); + $lang->misc->feature->all['11.0.stable'][] = array('title'=>'Zentao integrate Xuanxuan'); $lang->misc->feature->all['10.6.stable'][] = array('title'=>'Adjust backup mechanism', 'desc' => '

          Increase backup settings and make backups more flexible

          Show backup progress

          Can change the backup directory

          '); diff --git a/module/misc/lang/zh-cn.php b/module/misc/lang/zh-cn.php index ea1dbd6738..fc9bf03f6f 100644 --- a/module/misc/lang/zh-cn.php +++ b/module/misc/lang/zh-cn.php @@ -98,6 +98,7 @@ $lang->misc->feature = new stdclass(); $lang->misc->feature->lastest = '最新版本'; $lang->misc->feature->detailed = '详情'; +$lang->misc->releaseDate['11.1.stable'] = '2019-01-04'; $lang->misc->releaseDate['11.0.stable'] = '2018-12-21'; $lang->misc->releaseDate['10.6.stable'] = '2018-11-20'; $lang->misc->releaseDate['10.5.stable'] = '2018-10-25'; @@ -119,6 +120,8 @@ $lang->misc->releaseDate['7.2.stable'] = '2015-05-22'; $lang->misc->releaseDate['7.1.stable'] = '2015-03-07'; $lang->misc->releaseDate['6.3.stable'] = '2014-11-07'; +$lang->misc->feature->all['11.1.stable'][] = array('title'=>'主要修复Bug。'); + $lang->misc->feature->all['11.0.stable'][] = array('title'=>'禅道集成喧喧'); $lang->misc->feature->all['10.6.stable'][] = array('title'=>'调整备份机制', 'desc' => '

          增加备份设置,备份更加灵活

          显示备份进度

          可以更改备份目录

          '); diff --git a/module/misc/lang/zh-tw.php b/module/misc/lang/zh-tw.php index c93c34c64b..805c2ec805 100644 --- a/module/misc/lang/zh-tw.php +++ b/module/misc/lang/zh-tw.php @@ -98,6 +98,7 @@ $lang->misc->feature = new stdclass(); $lang->misc->feature->lastest = '最新版本'; $lang->misc->feature->detailed = '詳情'; +$lang->misc->releaseDate['11.1.stable'] = '2019-01-04'; $lang->misc->releaseDate['11.0.stable'] = '2018-12-21'; $lang->misc->releaseDate['10.6.stable'] = '2018-11-20'; $lang->misc->releaseDate['10.5.stable'] = '2018-10-25'; @@ -119,6 +120,8 @@ $lang->misc->releaseDate['7.2.stable'] = '2015-05-22'; $lang->misc->releaseDate['7.1.stable'] = '2015-03-07'; $lang->misc->releaseDate['6.3.stable'] = '2014-11-07'; +$lang->misc->feature->all['11.1.stable'][] = array('title'=>'主要修復Bug。'); + $lang->misc->feature->all['11.0.stable'][] = array('title'=>'禪道整合喧喧'); $lang->misc->feature->all['10.6.stable'][] = array('title'=>'調整備份機制', 'desc' => '

          增加備份設置,備份更加靈活

          顯示備份進度

          可以更改備份目錄

          '); diff --git a/module/report/lang/zh-tw.php b/module/report/lang/zh-tw.php index 77fa9d9f05..736d219faa 100644 --- a/module/report/lang/zh-tw.php +++ b/module/report/lang/zh-tw.php @@ -43,7 +43,6 @@ $lang->report->bugAssign = 'Bug指派表'; $lang->report->workload = '員工負載表'; $lang->report->workloadAB = '工作負載'; $lang->report->bugOpenedDate = 'Bug創建時間'; -$lang->report->taskAssignedDate = '起止時間'; $lang->report->beginAndEnd = '起止時間'; $lang->report->dept = '部門'; $lang->report->deviationChart = $lang->projectCommon . '偏差曲綫'; diff --git a/module/task/model.php b/module/task/model.php index eaa61de718..ab18f58b34 100644 --- a/module/task/model.php +++ b/module/task/model.php @@ -29,16 +29,15 @@ class taskModel extends model ->setDefault('project', (int)$projectID) ->setDefault('estimate, left, story', 0) ->setDefault('status', 'wait') - ->setDefault('estimate',(float)$this->post->estimate) ->setIF($this->post->estimate != false, 'left', $this->post->estimate) ->setIF($this->post->story != false, 'storyVersion', $this->loadModel('story')->getVersion($this->post->story)) ->setDefault('estStarted', '0000-00-00') ->setDefault('deadline', '0000-00-00') ->setIF(strpos($this->config->task->create->requiredFields, 'estStarted') !== false, 'estStarted', $this->post->estStarted) ->setIF(strpos($this->config->task->create->requiredFields, 'deadline') !== false, 'deadline', $this->post->deadline) - ->setIF($this->post->estimate !== 0, 'estimate', (float)$this->post->estimate) - ->setIF($this->post->consumed !== 0, 'consumed', (float)$this->post->consumed) - ->setIF($this->post->left !== 0, 'left', (float)$this->post->left) + ->setIF(is_numeric($this->post->estimate), 'estimate', (float)$this->post->estimate) + ->setIF(is_numeric($this->post->consumed), 'consumed', (float)$this->post->consumed) + ->setIF(is_numeric($this->post->left), 'left', (float)$this->post->left) ->setDefault('openedBy', $this->app->user->account) ->setDefault('openedDate', helper::now()) ->stripTags($this->config->task->editor->create['id'], $this->config->allowedTags) @@ -586,9 +585,9 @@ class taskModel extends model ->setDefault('story, estimate, left, consumed', 0) ->setDefault('estStarted', '0000-00-00') ->setDefault('deadline', '0000-00-00') - ->setIF($this->post->estimate !== 0, 'estimate', (float)$this->post->estimate) - ->setIF($this->post->consumed !== 0, 'consumed', (float)$this->post->consumed) - ->setIF($this->post->left !== 0, 'left', (float)$this->post->left) + ->setIF(is_numeric($this->post->estimate), 'estimate', (float)$this->post->estimate) + ->setIF(is_numeric($this->post->consumed), 'consumed', (float)$this->post->consumed) + ->setIF(is_numeric($this->post->left), 'left', (float)$this->post->left) ->setIF($oldTask->parent == 0 && $this->post->parent == '', 'parent', 0) ->setIF(strpos($this->config->task->edit->requiredFields, 'estStarted') !== false, 'estStarted', $this->post->estStarted) ->setIF(strpos($this->config->task->edit->requiredFields, 'deadline') !== false, 'deadline', $this->post->deadline) @@ -1182,7 +1181,7 @@ class taskModel extends model } $task = fixer::input('post') - ->setIF($this->post->consumed !== 0, 'consumed', (float)$this->post->consumed) + ->setIF(is_numeric($this->post->consumed), 'consumed', (float)$this->post->consumed) ->setDefault('left', 0) ->setDefault('assignedTo', $oldTask->openedBy) ->setDefault('assignedDate', $now) @@ -1242,7 +1241,6 @@ class taskModel extends model } if($task->finishedDate == substr($now, 0, 10)) $task->finishedDate = $now; - $task->consumed = (int)$task->consumed; $this->dao->update(TABLE_TASK)->data($task) ->autoCheck() @@ -1363,7 +1361,7 @@ class taskModel extends model $oldTask = $this->getById($taskID); $task = fixer::input('post') - ->setIF($this->post->left !== 0, 'left', (float)$this->post->left) + ->setIF(is_numeric($this->post->left), 'left', (float)$this->post->left) ->setDefault('left', 0) ->setDefault('status', 'doing') ->setDefault('finishedBy, canceledBy, closedBy, closedReason', '') @@ -1666,7 +1664,6 @@ class taskModel extends model ->beginIF($type == 'assignedTo')->andWhere('t1.status')->ne('closed')->fi() ->beginIF($type == 'finishedBy') ->andWhere('t1.finishedby', 1)->eq($account) - ->andWhere('t1.status')->eq('done') ->orWhere('t1.finishedList')->like("%,{$account},%") ->markRight(1) ->fi() diff --git a/module/testreport/control.php b/module/testreport/control.php index 6e453cf469..b79605d370 100644 --- a/module/testreport/control.php +++ b/module/testreport/control.php @@ -195,7 +195,7 @@ class testreport extends control } $builds = $this->build->getByList($buildIdList); - $stories = !empty($this->testreport->getStories4Test($builds)) ? $this->testreport->getStories4Test($builds) : $this->story->getProjectStories($project->id);; + $stories = !empty($builds) ? $this->testreport->getStories4Test($builds) : $this->story->getProjectStories($project->id);; $begin = $project->begin; $end = $project->end; diff --git a/module/testreport/model.php b/module/testreport/model.php index 06540639e8..2626690128 100644 --- a/module/testreport/model.php +++ b/module/testreport/model.php @@ -419,11 +419,11 @@ class testreportModel extends model */ public function getStories4Test($builds) { - $bugIdList = ''; - foreach($builds as $build) $bugIdList .= $build->stories. ','; + $storyIdList = ''; + foreach($builds as $build) $storyIdList .= $build->stories . ','; return $this->dao->select('*')->from(TABLE_STORY)->where('deleted')->eq(0) - ->beginIF(is_array($builds))->andWhere('id')->in(trim($bugIdList, ','))->fi() + ->andWhere('id')->in(trim($storyIdList, ',')) ->fetchAll('id'); } } diff --git a/module/upgrade/lang/version.php b/module/upgrade/lang/version.php index 106a3dbae4..e26fe9d8b5 100644 --- a/module/upgrade/lang/version.php +++ b/module/upgrade/lang/version.php @@ -100,3 +100,4 @@ $lang->upgrade->fromVersions['10_4'] = '10.4'; $lang->upgrade->fromVersions['10_5'] = '10.5'; $lang->upgrade->fromVersions['10_5_1'] = '10.5.1'; $lang->upgrade->fromVersions['10_6'] = '10.6'; +$lang->upgrade->fromVersions['11_0'] = '11.0'; diff --git a/module/upgrade/model.php b/module/upgrade/model.php index d50e67aac3..d7edb10781 100644 --- a/module/upgrade/model.php +++ b/module/upgrade/model.php @@ -255,6 +255,7 @@ class upgradeModel extends model $xuanxuanSql = $this->app->getAppRoot() . 'db' . DS . 'upgradexuanxuan2.2.0.sql'; $this->execSQL($xuanxuanSql); $this->initXuanxuan(); + case '11_0': } $this->deletePatch(); @@ -376,6 +377,7 @@ class upgradeModel extends model case '10_6': $confirmContent .= file_get_contents($this->app->getAppRoot() . 'db' . DS . 'upgradexuanxuan2.1.0.sql'); $confirmContent .= file_get_contents($this->app->getAppRoot() . 'db' . DS . 'upgradexuanxuan2.2.0.sql'); + case '11_0': } return str_replace('zt_', $this->config->db->prefix, $confirmContent); } From 0b348c617ce55339782fa0fdcce411fbe6f486ec Mon Sep 17 00:00:00 2001 From: reneeteng Date: Fri, 4 Jan 2019 15:10:35 +0800 Subject: [PATCH 083/442] * Upgrade lang change. --- module/upgrade/lang/en.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/module/upgrade/lang/en.php b/module/upgrade/lang/en.php index baced88afc..9dbfff9295 100644 --- a/module/upgrade/lang/en.php +++ b/module/upgrade/lang/en.php @@ -14,7 +14,7 @@ $lang->upgrade->result = 'Result'; $lang->upgrade->fail = 'Failed'; $lang->upgrade->success = 'Upgraded'; $lang->upgrade->tohome = 'Visit ZenTao'; -$lang->upgrade->license = 'Zentao is under Z PUBLIC LICENSE(ZPL) 1.2.'; +$lang->upgrade->license = 'ZenTao is under Z PUBLIC LICENSE(ZPL) 1.2.'; $lang->upgrade->warnning= 'Warning!'; $lang->upgrade->checkExtension = 'Check Extension'; $lang->upgrade->consistency = 'Check Consistency'; @@ -28,14 +28,14 @@ $lang->upgrade->warnningContent = <<zentao.bak EOT; -$lang->upgrade->createFileWinCMD = 'Open command line and execute echo > %s'; +$lang->upgrade->createFileWinCMD = 'Open command line and execute echo > %s'; $lang->upgrade->createFileLinuxCMD = 'Execute command line: touch %s'; $lang->upgrade->setStatusFile = '

          Please finish the following actions

          • %s
          • Or delete "%s" and create ok.txt and leave it blank.
          -

          I have read and done as instructed above. Continue update.

          '; +

          I have read and done as instructed above. Continue upgrading.

          '; $lang->upgrade->selectVersion = 'Select Version'; $lang->upgrade->continue = 'Continue'; $lang->upgrade->noteVersion = "Select the compatible version, or it might cause data loss."; From 04312accd617417b6b8b911180bf1ef321aa2305 Mon Sep 17 00:00:00 2001 From: chenfeiCF Date: Mon, 7 Jan 2019 09:06:33 +0800 Subject: [PATCH 084/442] * Fix bug: When edit module tree should show product. --- module/tree/control.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/tree/control.php b/module/tree/control.php index a265c4a961..59e44fa43b 100644 --- a/module/tree/control.php +++ b/module/tree/control.php @@ -252,7 +252,7 @@ class tree extends control $this->view->module = $module; $this->view->type = $type; - $this->view->libs = $this->loadModel('doc')->getLibs($type = 'all', $extra = 'withObject'); + $this->view->libs = $this->loadModel('doc')->getLibs('all', $extra = 'withObject'); $this->view->branch = $branch; $this->view->users = $this->loadModel('user')->getPairs('noclosed|nodeleted', $module->owner); From 8d2e67a507fc40ff4b424cf3cb2c6699f4503270 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Wed, 9 Jan 2019 10:09:57 +0800 Subject: [PATCH 085/442] * fix for delete product and project. --- xuanxuan/module/chat/ext/model/class/xuanxuan.class.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/xuanxuan/module/chat/ext/model/class/xuanxuan.class.php b/xuanxuan/module/chat/ext/model/class/xuanxuan.class.php index bf4f2cc50d..f2b66442d3 100644 --- a/xuanxuan/module/chat/ext/model/class/xuanxuan.class.php +++ b/xuanxuan/module/chat/ext/model/class/xuanxuan.class.php @@ -78,10 +78,10 @@ class xuanxuanChat extends chatModel $this->session->set('user', $user); $this->app->user = $this->session->user; - $products = trim($this->app->user->view->products, ','); - $projects = trim($this->app->user->view->projects, ','); - $products = empty($products) ? array() : explode(',', $products); - $projects = empty($projects) ? array() : explode(',', $projects); + $products = $this->loadModel('product')->getPairs(); + $projects = $this->loadModel('project')->getPairs(); + $products = empty($products) ? array() : array_keys($products); + $projects = empty($projects) ? array() : array_keys($projects); $libIdList = array_keys($this->loadModel('doc')->getLibs('all')); $productID = isset($products[0]) ? $products[0] : 1; $projectID = isset($projects[0]) ? $projects[0] : 1; From b2d8a9537ff818448dbeaaac91a1395c7edc7e7c Mon Sep 17 00:00:00 2001 From: wangyidong Date: Wed, 9 Jan 2019 14:23:19 +0800 Subject: [PATCH 086/442] * fix bug #2345. --- lib/purifier/HTMLPurifier.autoload.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/purifier/HTMLPurifier.autoload.php b/lib/purifier/HTMLPurifier.autoload.php index 63193c3ee7..c3995b91f0 100644 --- a/lib/purifier/HTMLPurifier.autoload.php +++ b/lib/purifier/HTMLPurifier.autoload.php @@ -9,12 +9,12 @@ if (function_exists('spl_autoload_register') && function_exists('spl_autoload_unregister')) { // We need unregister for our pre-registering functionality HTMLPurifier_Bootstrap::registerAutoload(); - if (function_exists('__autoload')) { + if (function_exists('purifierAutoload')) { // Be polite and ensure that userland autoload gets retained - spl_autoload_register('__autoload'); + spl_autoload_register('purifierAutoload'); } -} elseif (!function_exists('__autoload')) { - function __autoload($class) +} elseif (!function_exists('purifierAutoload')) { + function purifierAutoload($class) { return HTMLPurifier_Bootstrap::autoload($class); } From b0e8cd02cb071a708534e82e0c5c181e55a92f8d Mon Sep 17 00:00:00 2001 From: reneeteng Date: Wed, 9 Jan 2019 15:35:10 +0800 Subject: [PATCH 087/442] * Lang change for 11.1. --- module/common/lang/en.php | 38 +++++++++++------------ module/entry/lang/en.php | 16 +++++----- module/misc/lang/en.php | 64 +++++++++++++++++++-------------------- module/report/lang/en.php | 8 ++--- 4 files changed, 63 insertions(+), 63 deletions(-) diff --git a/module/common/lang/en.php b/module/common/lang/en.php index 563ab074b6..e6a9f261ec 100644 --- a/module/common/lang/en.php +++ b/module/common/lang/en.php @@ -79,7 +79,7 @@ $lang->duplicate = '%s has the same title as that of a file existed.'; $lang->ipLimited = "Sorry, current IP Login has been restricted. PLease contact Admin to grant it."; $lang->unfold = '+'; $lang->fold = '-'; -$lang->homepage = 'Set as Home'; +$lang->homepage = 'Set Home'; $lang->tutorial = 'Tutorial'; $lang->changeLog = 'Change Log'; $lang->manual = 'Manual'; @@ -87,7 +87,7 @@ $lang->manualUrl = 'https://www.zentao.pm/book/zentaomanual/zentao-install $lang->customMenu = 'Custom Menu'; $lang->customField = 'Custom Field'; $lang->lineNumber = 'Line No.'; -$lang->tutorialConfirm = 'You are using tutorial. Do you want to exit right now?'; +$lang->tutorialConfirm = 'You are using tutorial. Do you want to quit right now?'; $lang->youCould = 'You could '; $lang->preShortcutKey = '[Shortcut:←]'; @@ -333,7 +333,7 @@ $lang->caselib->menu->caselib = array('link' => 'Case Library|testsuite|librar /* Doc menu settings. */ $lang->doc = new stdclass(); $lang->doc->menu = new stdclass(); -//$lang->doc->menu->createLib = array('link' => ' Add Doc Lib|doc|createLib', 'float' => 'right'); +//$lang->doc->menu->createLib = array('link' => ' Add Library|doc|createLib', 'float' => 'right'); /* Report menu settings. */ $lang->report = new stdclass(); @@ -465,28 +465,28 @@ $lang->menugroup->message = 'admin'; /* Error info. */ $lang->error = new stdclass(); $lang->error->companyNotFound = "The domain %s cannot be found!"; -$lang->error->length = array("『%s』Length Error. It should be『%s』", "『%s』length should be <=『%s』and >『%s』."); -$lang->error->reg = "『%s』Format Error. It should be『%s』."; -$lang->error->unique = "『%s』『%s』existed. Please go to Admin->Recycle to restore it, if you are sure it is deleted."; +$lang->error->length = array("『%s』length error. It should be『%s』", "『%s』length should be <=『%s』and >『%s』."); +$lang->error->reg = "『%s』format error. It should be『%s』."; +$lang->error->unique = "『%s』『%s』exists. Please go to Admin->Recycle to restore it, if you are sure it is deleted."; $lang->error->gt = "『%s』should be >『%s』."; $lang->error->ge = "『%s』should be >=『%s』."; $lang->error->notempty = "『%s』should not be blank."; $lang->error->empty = "『%s』should be null."; $lang->error->equal = "『%s』has to be『%s』."; $lang->error->int = array("『%s』should be numbers", "『%s』should be 『%s-%s』."); -$lang->error->float = "『%s』should be numbers, decimals included."; +$lang->error->float = "『%s』should have numbers, decimals."; $lang->error->email = "『%s』should be valid Email."; $lang->error->date = "『%s』should be valid date."; $lang->error->datetime = "『%s』should be valid date."; $lang->error->code = "『%s』should be letters or numbers."; $lang->error->account = "『%s』should be valid account."; $lang->error->passwordsame = "Passwords should be consistent."; -$lang->error->passwordrule = "Password should follow rules. It must be at least 6 characters."; +$lang->error->passwordrule = "Password should abide by rules. It should be at least 6 characters."; $lang->error->accessDenied = 'Access is denied.'; -$lang->error->pasteImg = 'Image is not allowed to be pasted in your browser!'; -$lang->error->noData = 'No Data'; +$lang->error->pasteImg = 'Image is not allowed to paste in your browser!'; +$lang->error->noData = 'No data.'; $lang->error->editedByOther = 'This record might have been changed. Please refresh and try to edit again!'; -$lang->error->tutorialData = 'No data can be imported in tutorial mode. Please exit tutorial first!'; +$lang->error->tutorialData = 'No data can be imported in tutorial mode. Please quit tutorial first!'; /* Page info. */ $lang->pager = new stdclass(); @@ -505,8 +505,8 @@ $lang->pager->summery = "%s-%s of %s."; $lang->proVersion = "ZenTao Pro   "; $lang->downNotify = "Download Desktop Notification"; $lang->downloadClient = "Download Desktop Client"; -$lang->clientHelp = "Client help manual"; -$lang->clientHelpLink = "http://www.zentao.net/book/zentaopmshelp/302.html#2"; +$lang->clientHelp = "Client Help"; +$lang->clientHelpLink = "https://www.zentao.pm/book/zentaomanual/scrum-tool-open-source-client-214.html"; $lang->website = "https://www.zentao.pm"; $lang->suhosinInfo = "Warning! Data is reaching the limit. Please change sohusin.post.max_vars and sohusin.request.max_vars (set larger %s value) in php.ini, then save and restart Apache or php-fpm, or some data will not be saved."; @@ -518,13 +518,13 @@ $lang->importAndCover = "Override"; $lang->importAndInsert = "Insert"; -$lang->noResultsMatch = "No results match!"; +$lang->noResultsMatch = "No results match found!"; $lang->searchMore = "More results:"; -$lang->chooseUsersToMail = "Choose users to be notified."; -$lang->browserNotice = 'Your current browser might not display the best effect. Use Chrome, Firefox, IE9+, Opera or Safari.'; +$lang->chooseUsersToMail = "Choose users to be notified"; +$lang->browserNotice = 'Your browser might not display the best effect. Use Chrome, Firefox, IE9+, Opera or Safari.'; $lang->noticePasteImg = "Paste images here"; -$lang->pasteImgFail = "Paste image fail, try again later."; -$lang->pasteImgUploading = "Please wait. Uploading..."; +$lang->pasteImgFail = "Pasting image failed. Try again later."; +$lang->pasteImgUploading = "Uploading..."; /* Time formats settings. */ if(!defined('DT_DATETIME1')) define('DT_DATETIME1', 'Y-m-d H:i:s'); @@ -760,7 +760,7 @@ if(isset($config->global->flow) and $config->global->flow == 'onlyTest') $lang->bug->subMenu->more->unconfirmed = 'Unconfirmed|bug|browse|productID=%s&branch=%s&browseType=unconfirmed¶m=%s'; $lang->bug->subMenu->more->assigntonull = 'Unassigned|bug|browse|productID=%s&branch=%s&browseType=assigntonull¶m=%s'; $lang->bug->subMenu->more->longlifebugs = 'Pending|bug|browse|productID=%s&branch=%s&browseType=longlifebugs¶m=%s'; - $lang->bug->subMenu->more->postponedbugs = 'PostPoned|bug|browse|productID=%s&branch=%s&browseType=postponedbugs¶m=%s'; + $lang->bug->subMenu->more->postponedbugs = 'Postponed|bug|browse|productID=%s&branch=%s&browseType=postponedbugs¶m=%s'; $lang->bug->subMenu->more->overduebugs = 'Overdue|bug|browse|productID=%s&branch=%s&browseType=overduebugs¶m=%s'; $lang->bug->subMenu->more->needconfirm = 'ToConfirm|bug|browse|productID=%s&branch=%s&browseType=needconfirm¶m=%s'; diff --git a/module/entry/lang/en.php b/module/entry/lang/en.php index 083c9a2a92..52e324f99d 100644 --- a/module/entry/lang/en.php +++ b/module/entry/lang/en.php @@ -20,29 +20,29 @@ $lang->entry->key = 'Key'; $lang->entry->ip = 'IP'; $lang->entry->desc = 'Desc'; $lang->entry->createdBy = 'Created By'; -$lang->entry->createdDate = 'Created Date'; +$lang->entry->createdDate = 'Created'; $lang->entry->editedby = 'Edited By'; -$lang->entry->editedDate = 'Edited Date'; +$lang->entry->editedDate = 'Edited'; $lang->entry->date = 'Request Time'; $lang->entry->url = 'Request URL'; -$lang->entry->confirmDelete = 'Are you sure delete this entry?'; +$lang->entry->confirmDelete = 'Do you want to delete this entry?'; $lang->entry->help = 'Help'; $lang->entry->notify = 'Notify'; $lang->entry->note = new stdClass(); $lang->entry->note->name = 'Name'; -$lang->entry->note->code = 'Code, should be english and number.'; -$lang->entry->note->ip = "Use comma between two IPs. IP segment is supported, e.g. 192.168.1.*"; +$lang->entry->note->code = 'Alias should be letters and numbers.'; +$lang->entry->note->ip = "Use comma to seperate IPs. IP segment is supported, e.g. 192.168.1.*"; $lang->entry->note->allIP = 'All'; $lang->entry->note->account = 'Account for entry.'; $lang->entry->errmsg['PARAM_CODE_MISSING'] = 'Param code is missing.'; $lang->entry->errmsg['PARAM_TOKEN_MISSING'] = 'Param token is missing.'; $lang->entry->errmsg['SESSION_CODE_MISSING'] = 'Session code is missing.'; -$lang->entry->errmsg['EMPTY_KEY'] = 'Key of entry is missing.'; +$lang->entry->errmsg['EMPTY_KEY'] = 'Entry key is missing.'; $lang->entry->errmsg['INVALID_TOKEN'] = 'Invalid token.'; $lang->entry->errmsg['SESSION_VERIFY_FAILED'] = 'Session verification failed.'; $lang->entry->errmsg['IP_DENIED'] = 'IP is denied.'; -$lang->entry->errmsg['ACCOUNT_UNBOUND'] = 'Account unbound.'; -$lang->entry->errmsg['EMPTY_ENTRY'] = 'Key of entry is missing.'; +$lang->entry->errmsg['ACCOUNT_UNBOUND'] = 'Account is not bound.'; +$lang->entry->errmsg['EMPTY_ENTRY'] = 'Entry key is missing.'; diff --git a/module/misc/lang/en.php b/module/misc/lang/en.php index 852d21ce57..80483f5d65 100644 --- a/module/misc/lang/en.php +++ b/module/misc/lang/en.php @@ -20,9 +20,9 @@ $lang->misc->client->version = 'Client Version'; $lang->misc->client->os = 'Select OS'; $lang->misc->client->download = 'Download'; $lang->misc->client->downloading = 'Downloading:'; -$lang->misc->client->downloaded = 'Downloaded successful!'; -$lang->misc->client->setting = 'Setting config info.'; -$lang->misc->client->setted = 'Set config info successful!'; +$lang->misc->client->downloaded = 'Downloaded!'; +$lang->misc->client->setting = 'Configure'; +$lang->misc->client->setted = 'Configuration is done!'; $lang->misc->client->osList['win64'] = 'Windows 64'; $lang->misc->client->osList['win32'] = 'Windows 32'; @@ -32,10 +32,10 @@ $lang->misc->client->osList['mac'] = 'Mac'; $lang->misc->client->errorInfo = new stdclass(); $lang->misc->client->errorInfo->downloadError = 'Failed to download package!'; -$lang->misc->client->errorInfo->configError = 'Failed to set config info!'; +$lang->misc->client->errorInfo->configError = 'Failed to configure!'; $lang->misc->client->errorInfo->manualOpt = 'Please get client package from %s .'; -$lang->misc->client->errorInfo->dirNotExist = 'The dir %s is not exist, please make it.'; -$lang->misc->client->errorInfo->dirNotWritable = 'The dir %s is not writable.
          Please exec:sudo chmod 777 %s under linux os.'; +$lang->misc->client->errorInfo->dirNotExist = 'The dir %s does not exist. Create it.'; +$lang->misc->client->errorInfo->dirNotWritable = 'The dir %s is not writable.
          Please exec:sudo chmod 777 %s in Linux.'; $lang->misc->zentao = new stdclass(); $lang->misc->zentao->version = 'Version %s'; @@ -75,23 +75,23 @@ $lang->misc->zentao->cowin['cowinmore'] = "More"; $lang->misc->zentao->service['servicemore']= 'More'; $lang->misc->mobile = "Mobile Access"; -$lang->misc->noGDLib = "Please use the browser on your phone to visit %s"; -$lang->misc->copyright = "© 2009 - 2018 Nature Easy Soft Network Technology Co,LTD Email Max@easysoft.ltd"; +$lang->misc->noGDLib = "Please visit %s in the browser of your phone."; +$lang->misc->copyright = "© 2009 - 2019 Nature Easy Soft Email Renee@easysoft.ltd"; $lang->misc->checkTable = "Check Data Table"; $lang->misc->needRepair = "Repair Table"; -$lang->misc->repairTable = "Database table is damaged due to power outage. Please chech and repair!"; -$lang->misc->repairFail = "Failed to repair. Please go to the database data directory, try to perform myisamchk -r -f %s.MYI repair."; +$lang->misc->repairTable = "Database table is damaged due to power outage. Please check and repair!"; +$lang->misc->repairFail = "Failed to repair. Please go to the database data directory, and try to execute myisamchk -r -f %s.MYI repair."; $lang->misc->connectFail = "Failed to connect to database. Error: %s,
          Please check the MySQL error log and troubleshoot."; $lang->misc->tableName = "Table Name"; $lang->misc->tableStatus = "Status"; -$lang->misc->novice = "First time to ZenTao? Do you want to start rookie mode?"; +$lang->misc->novice = "New to ZenTao? Do you want to start ZenTao Tutorial?"; -$lang->misc->noticeRepair = "
          If you are not Administrator, please contact Administrator to repair table.
          -
          If you are, please login into your Zentao host and create a file named %s.
          +$lang->misc->noticeRepair = "
          If you are not Administrator, please contact your ZenTao Administrator to repair tables.
          +
          If you are, please login your Zentao host and create a file named %s.

          Note:

          1. Keep the file empty.
          2. -
          3. If the file exists, remove it and create one again.
          4. +
          5. If the file exists, remove it and create a new one.
          "; $lang->misc->feature = new stdclass(); @@ -122,34 +122,34 @@ $lang->misc->releaseDate['6.3.stable'] = '2014-11-07'; $lang->misc->feature->all['11.1.stable'][] = array('title'=>'Fix Bug.'); -$lang->misc->feature->all['11.0.stable'][] = array('title'=>'Zentao integrate Xuanxuan'); +$lang->misc->feature->all['11.0.stable'][] = array('title'=>'ZenTao integrate Xuanxuan'); -$lang->misc->feature->all['10.6.stable'][] = array('title'=>'Adjust backup mechanism', 'desc' => '

          Increase backup settings and make backups more flexible

          Show backup progress

          Can change the backup directory

          '); -$lang->misc->feature->all['10.6.stable'][] = array('title'=>'Optimize and adjust menus', 'desc' => '

          Adjust admin menus

          Adjust the secondary menu of my and project

          '); +$lang->misc->feature->all['10.6.stable'][] = array('title'=>'Adjust backup mechanism', 'desc' => '

          Increase backup settings and make backup more flexible

          Show backup progress

          Change the backup directory

          '); +$lang->misc->feature->all['10.6.stable'][] = array('title'=>'Optimize and adjust menu', 'desc' => '

          Adjust admin menu

          Adjust the secondary menu of My and Project

          '); -$lang->misc->feature->all['10.5.stable'][] = array('title'=>'Adjust document display', 'desc' => "

          Adjust the layout method on the left side of the document library.

          Adding filter conditions to the bottom of the document library's navigation bottom.

          "); -$lang->misc->feature->all['10.5.stable'][] = array('title'=>'Adjust the sub task logic and optimize the display of father child task.', 'desc' => ''); +$lang->misc->feature->all['10.5.stable'][] = array('title'=>'Adjust document layout', 'desc' => "

          Adjust the layout method on the left side of the document library.

          Add filter conditions at the bottom of the document library menu.

          "); +$lang->misc->feature->all['10.5.stable'][] = array('title'=>'Adjust the child task logic and optimize the display of parent-child task.', 'desc' => ''); -$lang->misc->feature->all['10.4.stable'][] = array('title'=>'Optimizing and adjusting new interface', 'desc' => '

          Details page restore our previous layout.

          Refactoring forms to add user pages

          When use cases are executed, do not update the use case state if the user manually chooses to pass through and write the results.

          '); -$lang->misc->feature->all['10.4.stable'][] = array('title'=>'After the user machine hibernate login fails, the session is refreshed again.', 'desc' => ''); -$lang->misc->feature->all['10.4.stable'][] = array('title'=>'Upgrading existing interface mechanisms', 'desc' => ''); +$lang->misc->feature->all['10.4.stable'][] = array('title'=>'Optimize and adjust new interface', 'desc' => '

          Detail page restore to the previous layout.

          Refactore forms to add user pages

          When use cases are executed, do not update the use case stause if the user manually chooses to pass and write the results.

          '); +$lang->misc->feature->all['10.4.stable'][] = array('title'=>'After the user machine hibernate and the login fails, the session will be refreshed again.', 'desc' => ''); +$lang->misc->feature->all['10.4.stable'][] = array('title'=>'Upgrade existing interface mechanisms', 'desc' => ''); $lang->misc->feature->all['10.3.stable'][] = array('title'=>'Fix Bug.', 'desc' => ''); $lang->misc->feature->all['10.2.stable'][] = array('title'=>'Xuan.im is integrated!', 'desc' => ''); $lang->misc->feature->all['10.0.stable'][] = array('title'=>'New UI/UX and new experience', 'desc' => '
          1. My Dashboard
          2. Dynamic
          3. Product Home
          4. Product overview
          5. Roadmap
          6. Project Home
          7. Project overview
          8. QA Home
          9. Document Home
          10. Added work report on My Dashboard
          11. Add/Edit/Finish todos on My Dashboard
          12. Add prodcut report on Product Home
          13. Add prodcut overview on Product Home
          14. Add project report on Project Home
          15. Add project overview on Project Home
          16. Add QA report on QA Home
          17. All Product/product Home/All Project/Project Home/QA Home is moved from the right of the secondary Narbar to the left.
          18. Kanban/Burndown/Tree/ByGroup of Project/Task has been moved from the third Navbar to the secondary one; Tree/ByGroup/Task Liat has been integrated to a drop-down.
          19. Bug/Build of Project on the secondary Navbar has been integrated to a drop-down.
          20. Display build and list by group, which is more reasonable.
          21. Added tree to display docuemnt on the left of the page.
          22. Added quick entry to document, including Last Update, My Doc and My Favorite
          23. Added My Favorite to Doc module.
          '); -$lang->misc->feature->all['9.8.stable'][] = array('title'=>'Message centralized management', 'desc' => '

          Centring Mail,SMS,webhook into Message

          '); -$lang->misc->feature->all['9.8.stable'][] = array('title'=>'Add Periodic Todo function', 'desc' => ''); -$lang->misc->feature->all['9.8.stable'][] = array('title'=>"Add Block of 'Assigned to Me'", 'desc' => ''); -$lang->misc->feature->all['9.8.stable'][] = array('title'=>'Support Generating TestStatements of TestBuilds', 'desc' => ''); +$lang->misc->feature->all['9.8.stable'][] = array('title'=>'Message centralized management', 'desc' => '

          Gather Mail,SMS,webhook into Message

          '); +$lang->misc->feature->all['9.8.stable'][] = array('title'=>'Add recuured Todo', 'desc' => ''); +$lang->misc->feature->all['9.8.stable'][] = array('title'=>"Add Block of 'AssignToMe'", 'desc' => ''); +$lang->misc->feature->all['9.8.stable'][] = array('title'=>'Support generating reports of TestBuilds', 'desc' => ''); -$lang->misc->feature->all['9.7.stable'][] = array('title'=>'optimize International package,Added Demo data。', 'desc' => ''); +$lang->misc->feature->all['9.7.stable'][] = array('title'=>'Optimize International package. Added Demo data.', 'desc' => ''); -$lang->misc->feature->all['9.6.stable'][] = array('title'=>'added Webhook Interface feature', 'desc' => 'support communication with BearyChat,dingding'); -$lang->misc->feature->all['9.6.stable'][] = array('title'=>'added Score feature', 'desc' => 'More skilled Use, More score'); -$lang->misc->feature->all['9.6.stable'][] = array('title'=>'added Multiplayer task and subTask to project tasks', 'desc' => ''); -$lang->misc->feature->all['9.6.stable'][] = array('title'=>'added Product line management to Product View', 'desc' => ''); +$lang->misc->feature->all['9.6.stable'][] = array('title'=>'Added Webhook Interface feature', 'desc' => 'Support communication with BearyChat, Dingding'); +$lang->misc->feature->all['9.6.stable'][] = array('title'=>'Added Point', 'desc' => 'More skilled application, more score'); +$lang->misc->feature->all['9.6.stable'][] = array('title'=>'Added multiple user task and child tasks to Project', 'desc' => ''); +$lang->misc->feature->all['9.6.stable'][] = array('title'=>'Added Product line management to Product View', 'desc' => ''); $lang->misc->feature->all['9.5.1'][] = array('title'=>'added Restricted Operatio', 'desc' => ''); @@ -169,7 +169,7 @@ $lang->misc->feature->all['8.2.stable'][] = array('title'=>'Batch Add/Edit Custo $lang->misc->feature->all['8.2.stable'][] = array('title'=>'Custom Story/Task/Bug/Case', 'desc' => '

          You can custom fileds when add a Story/Task/Bug/Case.

          '); $lang->misc->feature->all['8.2.stable'][] = array('title'=>'Custom Export', 'desc' => '

          You can custom fileds when export a Story/Task/Bug/Case pages. You can also save it as template for next export.

          '); $lang->misc->feature->all['8.2.stable'][] = array('title'=>'Story/Task/Bug/Case Search ', 'desc' => '

          On Story/Task/Bug/Case List page, you can do a combined search on Modules and Tabs.

          '); -$lang->misc->feature->all['8.2.stable'][] = array('title'=>"Rookie's Tutorial", 'desc' => '

          Tutorial for Rookies is added for first-time users to know how to use ZenTao.

          '); +$lang->misc->feature->all['8.2.stable'][] = array('title'=>"Rookie's Tutorial", 'desc' => '

          Tutorial for rookies is added for first-time users to know how to use ZenTao.

          '); $lang->misc->feature->all['7.4.beta'][] = array('title'=>'Product branch feature is added.', 'desc' => '

          Product branch/platform is added, and its related Story/Plan/Bug/Case/Module has Branch added too.

          '); $lang->misc->feature->all['7.4.beta'][] = array('title'=>'Release Module is improved.', 'desc' => '

          Stop action has been added. If Stop to manage it, the Release will not show when Report Bug.

          Bugs that have been omitted in the Release will be related manually.

          '); diff --git a/module/report/lang/en.php b/module/report/lang/en.php index d31b10f098..778c2197a1 100644 --- a/module/report/lang/en.php +++ b/module/report/lang/en.php @@ -49,8 +49,8 @@ $lang->report->deviationChart = $lang->projectCommon . ' Deviation Chart'; $lang->reportList->project->lists[10] = $lang->projectCommon . ' Deviation|report|projectdeviation'; $lang->reportList->product->lists[10] = $lang->productCommon . ' Summary|report|productsummary'; -$lang->reportList->test->lists[10] = 'Bugs Reported|report|bugcreate'; -$lang->reportList->test->lists[13] = 'Bugs Assigned|report|bugassign'; +$lang->reportList->test->lists[10] = 'Bug Reported|report|bugcreate'; +$lang->reportList->test->lists[13] = 'Bug Assigned|report|bugassign'; $lang->reportList->staff->lists[10] = 'Team Workload|report|workload'; $lang->report->id = 'ID'; @@ -88,7 +88,7 @@ $lang->report->idAB = 'ID'; $lang->report->bugTitle = 'Bug Name'; $lang->report->taskName = 'Task Name'; $lang->report->todoName = 'Todo Name'; -$lang->report->testTaskName = 'TestTask Name'; +$lang->report->testTaskName = 'Test Name'; $lang->report->deadline = 'Deadline'; $lang->report->mailTitle = new stdclass(); @@ -96,7 +96,7 @@ $lang->report->mailTitle->begin = 'Notice: You have'; $lang->report->mailTitle->bug = " Bug (%s),"; $lang->report->mailTitle->task = " Task (%s),"; $lang->report->mailTitle->todo = " Todo (%s),"; -$lang->report->mailTitle->testTask = " Test Task (%s),"; +$lang->report->mailTitle->testTask = " Test (%s),"; $lang->report->proVersion = 'Try ZenTao Pro for more!'; $lang->report->proVersionEn = 'Try ZenTao Pro for more!'; From cada6c243b72b67a2e9f7dbeb99c0f4384f8c728 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Fri, 11 Jan 2019 15:57:01 +0800 Subject: [PATCH 088/442] * adjust for showDeleted custom. --- module/custom/control.php | 2 +- module/project/model.php | 1 + module/task/model.php | 2 +- module/user/model.php | 1 + 4 files changed, 4 insertions(+), 2 deletions(-) diff --git a/module/custom/control.php b/module/custom/control.php index 059ef2d5ec..2d494bf029 100644 --- a/module/custom/control.php +++ b/module/custom/control.php @@ -75,7 +75,7 @@ class custom extends control } if($module == 'user' and $field == 'deleted') { - $this->loadModel('user'); + $this->app->loadConfig('user'); $this->view->showDeleted = isset($this->config->user->showDeleted) ? $this->config->user->showDeleted : '0'; } diff --git a/module/project/model.php b/module/project/model.php index c541d70df7..67c0b7a743 100644 --- a/module/project/model.php +++ b/module/project/model.php @@ -1686,6 +1686,7 @@ class projectModel extends model public function getTeamMemberPairs($projectID, $params = '') { if(defined('TUTORIAL')) return $this->loadModel('tutorial')->getTeamMembersPairs(); + $this->app->loadConfig('user'); $users = $this->dao->select('t1.account, t2.realname')->from(TABLE_TEAM)->alias('t1') ->leftJoin(TABLE_USER)->alias('t2')->on('t1.account = t2.account') ->where('t1.root')->eq((int)$projectID) diff --git a/module/task/model.php b/module/task/model.php index ab18f58b34..a94af1c135 100644 --- a/module/task/model.php +++ b/module/task/model.php @@ -1428,7 +1428,7 @@ class taskModel extends model if($task->parent > 0) $task->parentName = $this->dao->findById($task->parent)->from(TABLE_TASK)->fetch('name'); $task->team = $this->dao->select('*')->from(TABLE_TEAM)->where('root')->eq($taskID)->andWhere('type')->eq('task')->orderBy('order')->fetchAll('account'); - foreach($children as $child) $child->team = isset($teams[$child->id]) ? $teams[$child->id] : array(); + foreach($children as $child) $child->team = array(); $task = $this->loadModel('file')->replaceImgURL($task, 'desc'); if($setImgSize) $task->desc = $this->file->setImgSize($task->desc); diff --git a/module/user/model.php b/module/user/model.php index 26ebdc716e..458b8aedd2 100644 --- a/module/user/model.php +++ b/module/user/model.php @@ -87,6 +87,7 @@ class userModel extends model $orderBy = strpos($params, 'first') !== false ? 'roleOrder DESC, account' : 'account'; /* Get raw records. */ + $this->app->loadConfig('user'); $users = $this->dao->select($fields)->from(TABLE_USER) ->where('1') ->beginIF(strpos($params, 'nodeleted') !== false or empty($this->config->user->showDeleted))->andWhere('deleted')->eq('0')->fi() From ee4766e6990ec491e7ef1a6658a4dda5ef2059a5 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Tue, 15 Jan 2019 10:03:38 +0800 Subject: [PATCH 089/442] * Adjust for copy story desc when batch create task. --- module/task/js/batchcreate.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/task/js/batchcreate.js b/module/task/js/batchcreate.js index 906da94e8a..4111017729 100755 --- a/module/task/js/batchcreate.js +++ b/module/task/js/batchcreate.js @@ -63,7 +63,7 @@ function copyStoryTitle(num) $('#name\\[' + num + '\\]').val(storyTitle); $('#estimate\\[' + num + '\\]').val($('#storyEstimate' + num).val()); - $('#desc\\[' + num + '\\]').val(($('#storyDesc' + num).val()).replace(/<[^>]+>/g,'')); + $('#desc\\[' + num + '\\]').val(($('#storyDesc' + num).val()).replace(/<[^>]+>/g,'').replace(/(\n)+\n/g, "\n").replace(/^\n/g, '')); var storyPri = $('#storyPri' + num).val(); if(storyPri == 0) $('#pri' + num ).val('3'); From 7418523c136857a2b01857e86903e3af3d8d4170 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Tue, 15 Jan 2019 10:20:54 +0800 Subject: [PATCH 090/442] * adjust code. --- module/common/model.php | 2 +- module/tree/model.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/module/common/model.php b/module/common/model.php index 39d6b1bb35..b93cb7b4ea 100644 --- a/module/common/model.php +++ b/module/common/model.php @@ -1491,7 +1491,7 @@ EOD; */ public function checkIP($ipWhiteList = '') { - $ip = $this->server->remote_addr; + $ip = helper::getRemoteIp(); if(!$ipWhiteList) $ipWhiteList = $this->config->ipWhiteList; diff --git a/module/tree/model.php b/module/tree/model.php index b382ea1169..a78b4652ce 100644 --- a/module/tree/model.php +++ b/module/tree/model.php @@ -34,7 +34,7 @@ class treeModel extends model * @access public * @return void */ - public function buildMenuQuery($rootID, $type, $startModule, $branch = 0) + public function buildMenuQuery($rootID, $type, $startModule = 0, $branch = 0) { /* Set the start module. */ $startModulePath = ''; From 29659ce40f364ff94c00aa4c5ac851df44b497bd Mon Sep 17 00:00:00 2001 From: Yagami Date: Tue, 15 Jan 2019 14:24:48 +0800 Subject: [PATCH 091/442] * Delete chat/downloadxxd.php. --- .../module/chat/ext/control/downloadxxd.php | 17 ----------------- 1 file changed, 17 deletions(-) delete mode 100644 xuanxuan/module/chat/ext/control/downloadxxd.php diff --git a/xuanxuan/module/chat/ext/control/downloadxxd.php b/xuanxuan/module/chat/ext/control/downloadxxd.php deleted file mode 100644 index e984cc0cfa..0000000000 --- a/xuanxuan/module/chat/ext/control/downloadxxd.php +++ /dev/null @@ -1,17 +0,0 @@ -get(); - $result = $this->loadModel('setting')->setItems('system.common.xxd', $setting); - $this->chat->downloadXXD($setting); - } - - if(!isset($this->config->xxd)) $this->config->xxd = new stdclass(); - $this->view->title = $this->lang->chat->downloadXXD; - $this->display(); - } -} From 4b33485a7fed7013f01807e450942ba0993f4ad2 Mon Sep 17 00:00:00 2001 From: Yagami Date: Wed, 16 Jan 2019 15:05:00 +0800 Subject: [PATCH 092/442] * Change xuanxuan lang file. --- xuanxuan/module/chat/ext/lang/en/xuanxuan.php | 10 +++++----- xuanxuan/module/chat/ext/lang/zh-cn/xuanxuan.php | 7 +++---- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/xuanxuan/module/chat/ext/lang/en/xuanxuan.php b/xuanxuan/module/chat/ext/lang/en/xuanxuan.php index 1e56490a24..c115071f16 100644 --- a/xuanxuan/module/chat/ext/lang/en/xuanxuan.php +++ b/xuanxuan/module/chat/ext/lang/en/xuanxuan.php @@ -1,7 +1,7 @@ chat->common = 'Xuanxuan'; $lang->chat->turnon = 'On'; -$lang->chat->downloadXXD = 'Download XXD'; +$lang->chat->help = 'Help'; $lang->chat->settings = 'Settings'; $lang->chat->turnonList = array(); @@ -10,7 +10,7 @@ $lang->chat->turnonList[0] = 'Off'; $lang->chat->status = 'Status'; $lang->chat->xxdServer = 'Zentao Server'; -$lang->chat->downloadXXD = 'Download XXD'; +$lang->chat->downloadXXD = 'Download Xuanxuan Server'; $lang->chat->listenIP = 'Listen IP'; $lang->chat->chatPort = 'Chat Port'; $lang->chat->uploadFileSize = 'File Size'; @@ -31,9 +31,9 @@ $lang->chat->statusList[0] = 'Disable'; $lang->chat->httpsOptions[1] = 'Enable'; $lang->chat->httpsOptions[0] = 'Disable'; -$lang->chat->xxdServerTip = 'XXD server address contains protocol and host and port,such as http://192.168.1.35 or http://pms.zentao.com. that can not be 127.0.0.1.'; -$lang->chat->xxdServerEmpty = 'XXD server address is empty.'; -$lang->chat->xxdServerError = 'XXD server address can not be 127.0.0.1.'; +$lang->chat->xxdServerTip = 'Zentao server address contains protocol and host and port,such as http://192.168.1.35 or http://pms.zentao.com. that can not be 127.0.0.1.'; +$lang->chat->xxdServerEmpty = 'Zentao server address is empty.'; +$lang->chat->xxdServerError = 'Zentao server address can not be 127.0.0.1.'; $lang->chat->xxdSchemeError = 'Server address should started with http:// or https://.'; $lang->chat->xxdPortError = 'Server address should contain valid port and the default is 11443.'; $lang->chat->xxClientConfirm = 'Click to download new zentao client!'; diff --git a/xuanxuan/module/chat/ext/lang/zh-cn/xuanxuan.php b/xuanxuan/module/chat/ext/lang/zh-cn/xuanxuan.php index f41c3c890a..a7f2ade892 100644 --- a/xuanxuan/module/chat/ext/lang/zh-cn/xuanxuan.php +++ b/xuanxuan/module/chat/ext/lang/zh-cn/xuanxuan.php @@ -1,7 +1,6 @@ chat->common = '客户端'; $lang->chat->turnon = '是否打开'; -$lang->chat->downloadXXD = '下载XXD服务端'; $lang->chat->help = '使用说明'; $lang->chat->settings = '服务器设置'; @@ -29,9 +28,9 @@ $lang->chat->createTodo = '创建待办'; $lang->chat->statusList[1] = '启用'; $lang->chat->statusList[0] = '不启用'; -$lang->chat->xxdServerTip = 'XXD服务器地址为完整的协议+地址+端口,示例:http://192.168.1.35 或 http://pms.zentao.com ,不能使用127.0.0.1。'; -$lang->chat->xxdServerEmpty = 'XXD服务器地址为空。'; -$lang->chat->xxdServerError = 'XXD服务器地址不能为 127.0.0.1。'; +$lang->chat->xxdServerTip = '禅道服务器地址为完整的协议+地址+端口,示例:http://192.168.1.35 或 http://pms.zentao.com ,不能使用127.0.0.1。'; +$lang->chat->xxdServerEmpty = '禅道服务器地址为空。'; +$lang->chat->xxdServerError = '禅道服务器地址不能为 127.0.0.1。'; $lang->chat->xxdSchemeError = '服务器地址应该以http://或https://开头。'; $lang->chat->xxdPortError = '服务器地址应该包含有效的端口号,默认为11443。'; $lang->chat->zentaoClient = '新增禅道客户端!'; From cd3422f865a83dac858cf9556829e26a9acaf6ea Mon Sep 17 00:00:00 2001 From: chenfeiCF Date: Wed, 16 Jan 2019 16:50:41 +0800 Subject: [PATCH 093/442] * Modified Makefile. --- Makefile | 105 +++++++++++++++++++++++++++++-------------------------- 1 file changed, 56 insertions(+), 49 deletions(-) diff --git a/Makefile b/Makefile index a2fe4b3397..fbd5159d48 100644 --- a/Makefile +++ b/Makefile @@ -11,7 +11,7 @@ clean: rm -fr api* rm -fr build/linux/lampp rm -fr lampp -pms: +common: mkdir zentaopms cp -fr bin zentaopms/ cp -fr config zentaopms/ && rm -fr zentaopms/config/my.php @@ -39,44 +39,43 @@ pms: find zentaopms -name tests |xargs rm -fr # notify.zip. mkdir zentaopms/www/data/notify/ +zentaoxx: #xuanxuan - mkdir -p buildxx/config/ext - mkdir -p buildxx/lib - mkdir -p buildxx/module - mkdir -p buildxx/framework - mkdir -p buildxx/db - mkdir -p buildxx/www - mkdir -p buildxx/module/common/ext/model/ + mkdir -p zentaoxx/config/ext + mkdir -p zentaoxx/lib + mkdir -p zentaoxx/module + mkdir -p zentaoxx/framework + mkdir -p zentaoxx/db + mkdir -p zentaoxx/www + mkdir -p zentaoxx/module/common/ext/model/ svn export https://github.com/easysoft/xuanxuan.git/branches/master/ranzhi/ - cp ranzhi/config/ext/xuanxuan.php buildxx/config/ext/ - cp -r ranzhi/lib/phpaes buildxx/lib/ - cp -r ranzhi/framework/xuanxuan.class.php buildxx/framework/ - cp -r ranzhi/db/*.sql buildxx/db/ - cp -r ranzhi/app/sys/chat buildxx/module/ - cp -r ranzhi/app/sys/common/ext/model/hook buildxx/module/common/ext/model/ - cp -r ranzhi/app/sys/action buildxx/module/ - cp -r xuanxuan/config/* buildxx/config/ - cp -r xuanxuan/module/* buildxx/module/ - cp -r xuanxuan/www/* buildxx/www/ - sed -i 's/site,//' buildxx/module/chat/model.php - sed -i 's/admin, g/g/' buildxx/module/chat/model.php - sed -i '/password = md5/d' buildxx/module/chat/control.php - sed -i '/getSignedTime/d' buildxx/module/chat/control.php - sed -i 's/tree/dept/' buildxx/module/chat/control.php - sed -i "s/, 'sys'//" buildxx/module/chat/control.php - sed -i 's/system.sys/system/' buildxx/module/chat/control.php - sed -i 's/&app=sys//' buildxx/module/chat/control.php - sed -i 's/file->createdBy/file->addedBy/' buildxx/module/chat/control.php - sed -i 's/file->createdDate/file->addedDate/' buildxx/module/chat/control.php - sed -i 's/im_/zt_im_/' buildxx/db/*.sql - sed -i 's/sys_user/zt_user/' buildxx/db/*.sql - sed -i 's/sys_file/zt_file/' buildxx/db/*.sql - sed -i '/sys_entry/d' buildxx/db/*.sql - zip -rqm -9 xuanxuan.zentao.$(VERSION).zip buildxx/* - rm -rf buildxx/ - unzip xuanxuan.zentao.*.zip -d zentaoxx - cp zentaoxx/buildxx/* zentaopms/ -r - cat zentaoxx/buildxx/db/xuanxuan.sql >> zentaopms/db/zentao.sql + cp ranzhi/config/ext/xuanxuan.php zentaoxx/config/ext/ + cp -r ranzhi/lib/phpaes zentaoxx/lib/ + cp -r ranzhi/framework/xuanxuan.class.php zentaoxx/framework/ + cp -r ranzhi/db/*.sql zentaoxx/db/ + cp -r ranzhi/app/sys/chat zentaoxx/module/ + cp -r ranzhi/app/sys/common/ext/model/hook zentaoxx/module/common/ext/model/ + cp -r ranzhi/app/sys/action zentaoxx/module/ + cp -r xuanxuan/config/* zentaoxx/config/ + cp -r xuanxuan/module/* zentaoxx/module/ + cp -r xuanxuan/www/* zentaoxx/www/ + sed -i 's/site,//' zentaoxx/module/chat/model.php + sed -i 's/admin, g/g/' zentaoxx/module/chat/model.php + sed -i '/password = md5/d' zentaoxx/module/chat/control.php + sed -i '/getSignedTime/d' zentaoxx/module/chat/control.php + sed -i 's/tree/dept/' zentaoxx/module/chat/control.php + sed -i "s/, 'sys'//" zentaoxx/module/chat/control.php + sed -i 's/system.sys/system/' zentaoxx/module/chat/control.php + sed -i 's/&app=sys//' zentaoxx/module/chat/control.php + sed -i 's/file->createdBy/file->addedBy/' zentaoxx/module/chat/control.php + sed -i 's/file->createdDate/file->addedDate/' zentaoxx/module/chat/control.php + sed -i 's/im_/zt_im_/' zentaoxx/db/*.sql + sed -i 's/sys_user/zt_user/' zentaoxx/db/*.sql + sed -i 's/sys_file/zt_file/' zentaoxx/db/*.sql + sed -i '/sys_entry/d' zentaoxx/db/*.sql + zip -rqm -9 zentaoxx.$(VERSION).zip zentaoxx/* + rm -rf ranzhi zentaoxx +package: # change mode. chmod -R 777 zentaopms/tmp/ chmod -R 777 zentaopms/www/data @@ -88,8 +87,27 @@ pms: for module in `ls zentaopms/module/`; do if [ ! -d "zentaopms/module/$$module/ext" ]; then mkdir zentaopms/module/$$module/ext; fi done find zentaopms/ -name ext |xargs chmod -R 777 tools/cn2tw.php +pms: + make common + make zentaoxx + unzip zentaoxx.*.zip + cp zentaoxx/* zentaopms/ -r + cat zentaoxx/db/xuanxuan.sql >> zentaopms/db/zentao.sql + make package zip -rq -9 ZenTaoPMS.$(VERSION).zip zentaopms - rm -fr zentaopms ranzhi buildxx zentaoxx xuanxuan.zentao.*.zip + rm -fr zentaopms zentaoxx zentaoxx.*.zip +en: + make common + cd zentaopms/; grep -rl 'zentao.net'|xargs sed -i 's/zentao.net/zentao.pm/g'; + cd zentaopms/; grep -rl 'http://www.zentao.pm'|xargs sed -i 's/http:\/\/www.zentao.pm/https:\/\/www.zentao.pm/g'; + cd zentaopms/config/; echo >> config.php; echo '$$config->isINT = true;' >> config.php + make package + zip -r -9 ZenTaoPMS.$(VERSION).int.zip zentaopms + rm -fr zentaopms + echo $(VERSION).int > VERSION + make deb + make rpm + echo $(VERSION) > VERSION deb: mkdir buildroot cp -r build/debian/DEBIAN buildroot @@ -117,17 +135,6 @@ rpm: rpmbuild -ba ~/rpmbuild/SPECS/zentaopms.spec cp ~/rpmbuild/RPMS/noarch/zentaopms-${VERSION}-1.noarch.rpm ./ rm -rf ~/rpmbuild -en: - unzip ZenTaoPMS.${VERSION}.zip - cd zentaopms/; grep -rl 'zentao.net'|xargs sed -i 's/zentao.net/zentao.pm/g'; - cd zentaopms/; grep -rl 'http://www.zentao.pm'|xargs sed -i 's/http:\/\/www.zentao.pm/https:\/\/www.zentao.pm/g'; - cd zentaopms/config/; echo >> config.php; echo '$$config->isINT = true;' >> config.php - zip -r -9 ZenTaoPMS.$(VERSION).int.zip zentaopms - rm -fr zentaopms - echo $(VERSION).int > VERSION - make deb - make rpm - echo $(VERSION) > VERSION patchphpdoc: sudo cp misc/doc/phpdoc/*.tpl /usr/share/php/data/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/ phpdoc: From 2b2fb9840f3e66750825cdeb172523a0d8c7e7cb Mon Sep 17 00:00:00 2001 From: Yagami Date: Wed, 16 Jan 2019 16:52:18 +0800 Subject: [PATCH 094/442] * Fix chat lang. --- xuanxuan/module/chat/ext/lang/en/xuanxuan.php | 40 +++++++++++++------ 1 file changed, 27 insertions(+), 13 deletions(-) diff --git a/xuanxuan/module/chat/ext/lang/en/xuanxuan.php b/xuanxuan/module/chat/ext/lang/en/xuanxuan.php index c115071f16..e4675a6808 100644 --- a/xuanxuan/module/chat/ext/lang/en/xuanxuan.php +++ b/xuanxuan/module/chat/ext/lang/en/xuanxuan.php @@ -1,7 +1,8 @@ chat->common = 'Xuanxuan'; $lang->chat->turnon = 'On'; -$lang->chat->help = 'Help'; +$lang->chat->downloadXXD = 'Download XXD'; +$lang->chat->help = 'Help'; $lang->chat->settings = 'Settings'; $lang->chat->turnonList = array(); @@ -10,7 +11,7 @@ $lang->chat->turnonList[0] = 'Off'; $lang->chat->status = 'Status'; $lang->chat->xxdServer = 'Zentao Server'; -$lang->chat->downloadXXD = 'Download Xuanxuan Server'; +$lang->chat->downloadXXD = 'Download XXD'; $lang->chat->listenIP = 'Listen IP'; $lang->chat->chatPort = 'Chat Port'; $lang->chat->uploadFileSize = 'File Size'; @@ -28,14 +29,12 @@ $lang->chat->createTodo = 'Create Todo'; $lang->chat->statusList[1] = 'Enable'; $lang->chat->statusList[0] = 'Disable'; -$lang->chat->httpsOptions[1] = 'Enable'; -$lang->chat->httpsOptions[0] = 'Disable'; - -$lang->chat->xxdServerTip = 'Zentao server address contains protocol and host and port,such as http://192.168.1.35 or http://pms.zentao.com. that can not be 127.0.0.1.'; -$lang->chat->xxdServerEmpty = 'Zentao server address is empty.'; -$lang->chat->xxdServerError = 'Zentao server address can not be 127.0.0.1.'; +$lang->chat->xxdServerTip = 'XXD server address contains protocol and host and port,such as http://192.168.1.35 or http://pms.zentao.com. that can not be 127.0.0.1.'; +$lang->chat->xxdServerEmpty = 'XXD server address is empty.'; +$lang->chat->xxdServerError = 'XXD server address can not be 127.0.0.1.'; $lang->chat->xxdSchemeError = 'Server address should started with http:// or https://.'; $lang->chat->xxdPortError = 'Server address should contain valid port and the default is 11443.'; +$lang->chat->zentaoClient = 'ZenTao Client is added!'; $lang->chat->xxClientConfirm = 'Click to download new zentao client!'; $lang->chat->xxServerConfirm = 'Click to download new zentao client server!'; $lang->chat->info = "ZenTao client is powered by Xuan, a secure and open source Instant Messenger by Nature Easy Soft. It is a self-hosted and cross-platform tool with numerous plug-ins and robust features. In Xuan, you can code your own plug-ins. Click HERE for more."; @@ -47,12 +46,27 @@ $lang->chat->xxd->chatPort = 'Chat Port'; $lang->chat->xxd->commonPort = 'Common Port'; $lang->chat->xxd->isHttps = 'Ishttps'; $lang->chat->xxd->uploadFileSize = 'File Size'; +$lang->chat->xxd->maxOnlineUser = 'Max. Online'; $lang->chat->xxd->sslcrt = 'SSL Crt'; $lang->chat->xxd->sslkey = 'SSL Key'; -$lang->chat->xxd->max = 'Max'; +$lang->chat->xxd->max = 'Max.'; -$lang->chat->osList['win_i386'] = 'Windows 32位'; -$lang->chat->osList['win_x86_64'] = 'Windows 64位'; -$lang->chat->osList['linux_i386'] = 'Linux 32位'; -$lang->chat->osList['linux_x86_64'] = 'Linux 64位'; +$lang->chat->httpsOptions[1] = 'On'; +$lang->chat->httpsOptions[0] = 'Off'; + +$lang->chat->placeholder = new stdclass(); +$lang->chat->placeholder->xxd = new stdclass(); +$lang->chat->placeholder->xxd->ip = 'Listen the IP of the server. Enter 0.0.0.0 if it is not set.'; +$lang->chat->placeholder->xxd->chatPort = 'Port for communications with the client.'; +$lang->chat->placeholder->xxd->commonPort = 'Common port for client user login authentication and file upload/download.'; +$lang->chat->placeholder->xxd->isHttps = 'Use HTTPS'; +$lang->chat->placeholder->xxd->uploadFileSize = 'File size for the uploaded.'; +$lang->chat->placeholder->xxd->maxOnlineUser = 'Maximum number of users online.'; +$lang->chat->placeholder->xxd->sslcrt = 'Copy and paste certificate here.'; +$lang->chat->placeholder->xxd->sslkey = 'Copy and paste key here.'; + +$lang->chat->osList['win_i386'] = 'Windows 32-bit'; +$lang->chat->osList['win_x86_64'] = 'Windows 64-bit'; +$lang->chat->osList['linux_i386'] = 'Linux 32-bit'; +$lang->chat->osList['linux_x86_64'] = 'Linux 64-bit'; $lang->chat->osList['darwin_x86_64'] = 'macOS'; From 885dbd44b07f27b362d2c2f7bf3a1d8d028efc90 Mon Sep 17 00:00:00 2001 From: reneeteng Date: Thu, 17 Jan 2019 09:52:15 +0800 Subject: [PATCH 095/442] * Lang change. --- module/common/lang/en.php | 2 +- module/misc/lang/en.php | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/module/common/lang/en.php b/module/common/lang/en.php index e6a9f261ec..57e60dd25e 100644 --- a/module/common/lang/en.php +++ b/module/common/lang/en.php @@ -75,7 +75,7 @@ $lang->pasteText = 'Paste'; $lang->uploadImages = 'Upload'; $lang->timeout = 'Timeout. Pease check your connection, or try it again!'; $lang->repairTable = 'Database table might be damaged. Please use phpmyadmin or myisamchk to fix it.'; -$lang->duplicate = '%s has the same title as that of a file existed.'; +$lang->duplicate = '%s has the same title as a file title existed.'; $lang->ipLimited = "Sorry, current IP Login has been restricted. PLease contact Admin to grant it."; $lang->unfold = '+'; $lang->fold = '-'; diff --git a/module/misc/lang/en.php b/module/misc/lang/en.php index 80483f5d65..58f3cc5233 100644 --- a/module/misc/lang/en.php +++ b/module/misc/lang/en.php @@ -21,8 +21,8 @@ $lang->misc->client->os = 'Select OS'; $lang->misc->client->download = 'Download'; $lang->misc->client->downloading = 'Downloading:'; $lang->misc->client->downloaded = 'Downloaded!'; -$lang->misc->client->setting = 'Configure'; -$lang->misc->client->setted = 'Configuration is done!'; +$lang->misc->client->setting = 'Setting'; +$lang->misc->client->setted = 'Setting is done!'; $lang->misc->client->osList['win64'] = 'Windows 64'; $lang->misc->client->osList['win32'] = 'Windows 32'; @@ -32,7 +32,7 @@ $lang->misc->client->osList['mac'] = 'Mac'; $lang->misc->client->errorInfo = new stdclass(); $lang->misc->client->errorInfo->downloadError = 'Failed to download package!'; -$lang->misc->client->errorInfo->configError = 'Failed to configure!'; +$lang->misc->client->errorInfo->configError = 'Failed to set up!'; $lang->misc->client->errorInfo->manualOpt = 'Please get client package from %s .'; $lang->misc->client->errorInfo->dirNotExist = 'The dir %s does not exist. Create it.'; $lang->misc->client->errorInfo->dirNotWritable = 'The dir %s is not writable.
          Please exec:sudo chmod 777 %s in Linux.'; @@ -56,7 +56,7 @@ $lang->misc->zentao->about['license'] = "License"; -$lang->misc->zentao->support['vip'] = "VIP Technical Support"; +$lang->misc->zentao->support['vip'] = "VIP Support"; $lang->misc->zentao->support['manual'] = "User Manual"; @@ -80,8 +80,8 @@ $lang->misc->copyright = "© 2009 - 2019 misc->checkTable = "Check Data Table"; $lang->misc->needRepair = "Repair Table"; $lang->misc->repairTable = "Database table is damaged due to power outage. Please check and repair!"; -$lang->misc->repairFail = "Failed to repair. Please go to the database data directory, and try to execute myisamchk -r -f %s.MYI repair."; -$lang->misc->connectFail = "Failed to connect to database. Error: %s,
          Please check the MySQL error log and troubleshoot."; +$lang->misc->repairFail = "Failed to repair. Please go to the data directory of your database, and try to execute myisamchk -r -f %s.MYI repair."; +$lang->misc->connectFail = "Failed to connect to the database. Error: %s,
          Please check the MySQL error log and troubleshoot."; $lang->misc->tableName = "Table Name"; $lang->misc->tableStatus = "Status"; $lang->misc->novice = "New to ZenTao? Do you want to start ZenTao Tutorial?"; From 608257fdb0f36dfbed3a38df8ae054017b89fb30 Mon Sep 17 00:00:00 2001 From: Yagami Date: Thu, 17 Jan 2019 10:30:18 +0800 Subject: [PATCH 096/442] * Delete some file which move to xuanxuan. --- .../module/admin/ext/control/downloadxxd.php | 4 +- .../module/admin/ext/control/xuanxuan.php | 2 +- xuanxuan/module/chat/ext/lang/en/xuanxuan.php | 73 +++--------------- .../module/chat/ext/lang/zh-cn/xuanxuan.php | 64 ++-------------- .../module/chat/ext/lang/zh-tw/xuanxuan.php | 2 - .../chat/ext/model/class/xuanxuan.class.php | 73 +----------------- xuanxuan/module/chat/ext/model/xuanxuan.php | 15 ---- .../module/chat/ext/view/downloadxxd.html.php | 76 ------------------- xuanxuan/module/entry/ext/control/visit.php | 2 +- .../ext/model/class/xuanxuan.class.php | 2 +- 10 files changed, 24 insertions(+), 289 deletions(-) delete mode 100644 xuanxuan/module/chat/ext/lang/zh-tw/xuanxuan.php delete mode 100644 xuanxuan/module/chat/ext/view/downloadxxd.html.php diff --git a/xuanxuan/module/admin/ext/control/downloadxxd.php b/xuanxuan/module/admin/ext/control/downloadxxd.php index 4a7ee6c908..c3c605ce4e 100644 --- a/xuanxuan/module/admin/ext/control/downloadxxd.php +++ b/xuanxuan/module/admin/ext/control/downloadxxd.php @@ -6,12 +6,12 @@ class admin extends control if(in_array($type, array('config', 'package'))) { $this->loadModel('chat'); - $server = $this->chat->getServer(); + $server = $this->chat->getServer('zentao'); if(strpos($server, '127.0.0.1') !== false) die(js::alert($this->lang->chat->xxdServerError)); $setting = $this->config->xuanxuan; $setting->os = $os; - $this->chat->downloadXXD($setting, $type); + $this->chat->downloadXXD('zentao', $setting, $type); } die("Params error."); } diff --git a/xuanxuan/module/admin/ext/control/xuanxuan.php b/xuanxuan/module/admin/ext/control/xuanxuan.php index fade5a15ff..c342ef46c0 100644 --- a/xuanxuan/module/admin/ext/control/xuanxuan.php +++ b/xuanxuan/module/admin/ext/control/xuanxuan.php @@ -43,7 +43,7 @@ class admin extends control $this->view->adminList = $this->loadModel('user')->getPairs('admin'); $this->view->os = $os . '_' . php_uname('m'); $this->view->type = $type; - $this->view->domain = $this->loadModel('chat')->getServer(); + $this->view->domain = $this->loadModel('chat')->getServer('zentao'); $this->view->turnon = isset($this->config->xuanxuan->turnon) ? $this->config->xuanxuan->turnon : 1; $this->view->isHttps = $this->config->xuanxuan->isHttps ? $this->config->xuanxuan->isHttps : 0; $this->display(); diff --git a/xuanxuan/module/chat/ext/lang/en/xuanxuan.php b/xuanxuan/module/chat/ext/lang/en/xuanxuan.php index e4675a6808..a58182e5a0 100644 --- a/xuanxuan/module/chat/ext/lang/en/xuanxuan.php +++ b/xuanxuan/module/chat/ext/lang/en/xuanxuan.php @@ -1,72 +1,21 @@ chat->common = 'Xuanxuan'; -$lang->chat->turnon = 'On'; -$lang->chat->downloadXXD = 'Download XXD'; -$lang->chat->help = 'Help'; -$lang->chat->settings = 'Settings'; - -$lang->chat->turnonList = array(); -$lang->chat->turnonList[1] = 'On'; -$lang->chat->turnonList[0] = 'Off'; - -$lang->chat->status = 'Status'; +$lang->chat->common = 'Xuanxuan'; +$lang->chat->turnon = 'On'; +$lang->chat->help = 'Help'; +$lang->chat->settings = 'Settings'; $lang->chat->xxdServer = 'Zentao Server'; $lang->chat->downloadXXD = 'Download XXD'; -$lang->chat->listenIP = 'Listen IP'; -$lang->chat->chatPort = 'Chat Port'; -$lang->chat->uploadFileSize = 'File Size'; -$lang->chat->downloadPackage = 'Full Package'; -$lang->chat->downloadConfig = 'Only Config'; $lang->chat->zentaoIntegrate = 'Zentao Integrated'; -$lang->chat->changeSetting = 'Change Setting'; +$lang->chat->zentaoClient = 'ZenTao Client is added!'; -$lang->chat->createBug = 'Create Bug'; -$lang->chat->createDoc = 'Create Doc'; -$lang->chat->createStory = 'Create Story'; -$lang->chat->createTask = 'Create Task'; -$lang->chat->createTodo = 'Create Todo'; +$lang->chat->turnonList = array(); +$lang->chat->turnonList[1] = 'Enable'; +$lang->chat->turnonList[0] = 'Disable'; -$lang->chat->statusList[1] = 'Enable'; -$lang->chat->statusList[0] = 'Disable'; +$lang->chat->info = "ZenTao client is powered by
          Xuan, a secure and open source Instant Messenger by Nature Easy Soft. It is a self-hosted and cross-platform tool with numerous plug-ins and robust features. In Xuan, you can code your own plug-ins. Click HERE for more."; +$lang->chat->xxClientConfirm = 'Click the lower right icon to download new zentao client!'; +$lang->chat->xxServerConfirm = 'Go to Admin-Integrate-Xuanxuan download new zentao client server!'; $lang->chat->xxdServerTip = 'XXD server address contains protocol and host and port,such as http://192.168.1.35 or http://pms.zentao.com. that can not be 127.0.0.1.'; $lang->chat->xxdServerEmpty = 'XXD server address is empty.'; $lang->chat->xxdServerError = 'XXD server address can not be 127.0.0.1.'; -$lang->chat->xxdSchemeError = 'Server address should started with http:// or https://.'; -$lang->chat->xxdPortError = 'Server address should contain valid port and the default is 11443.'; -$lang->chat->zentaoClient = 'ZenTao Client is added!'; -$lang->chat->xxClientConfirm = 'Click to download new zentao client!'; -$lang->chat->xxServerConfirm = 'Click to download new zentao client server!'; -$lang->chat->info = "ZenTao client is powered by Xuan, a secure and open source Instant Messenger by Nature Easy Soft. It is a self-hosted and cross-platform tool with numerous plug-ins and robust features. In Xuan, you can code your own plug-ins. Click HERE for more."; - -$lang->chat->xxd = new stdclass(); -$lang->chat->xxd->os = 'OS'; -$lang->chat->xxd->ip = 'Listen IP'; -$lang->chat->xxd->chatPort = 'Chat Port'; -$lang->chat->xxd->commonPort = 'Common Port'; -$lang->chat->xxd->isHttps = 'Ishttps'; -$lang->chat->xxd->uploadFileSize = 'File Size'; -$lang->chat->xxd->maxOnlineUser = 'Max. Online'; -$lang->chat->xxd->sslcrt = 'SSL Crt'; -$lang->chat->xxd->sslkey = 'SSL Key'; -$lang->chat->xxd->max = 'Max.'; - -$lang->chat->httpsOptions[1] = 'On'; -$lang->chat->httpsOptions[0] = 'Off'; - -$lang->chat->placeholder = new stdclass(); -$lang->chat->placeholder->xxd = new stdclass(); -$lang->chat->placeholder->xxd->ip = 'Listen the IP of the server. Enter 0.0.0.0 if it is not set.'; -$lang->chat->placeholder->xxd->chatPort = 'Port for communications with the client.'; -$lang->chat->placeholder->xxd->commonPort = 'Common port for client user login authentication and file upload/download.'; -$lang->chat->placeholder->xxd->isHttps = 'Use HTTPS'; -$lang->chat->placeholder->xxd->uploadFileSize = 'File size for the uploaded.'; -$lang->chat->placeholder->xxd->maxOnlineUser = 'Maximum number of users online.'; -$lang->chat->placeholder->xxd->sslcrt = 'Copy and paste certificate here.'; -$lang->chat->placeholder->xxd->sslkey = 'Copy and paste key here.'; - -$lang->chat->osList['win_i386'] = 'Windows 32-bit'; -$lang->chat->osList['win_x86_64'] = 'Windows 64-bit'; -$lang->chat->osList['linux_i386'] = 'Linux 32-bit'; -$lang->chat->osList['linux_x86_64'] = 'Linux 64-bit'; -$lang->chat->osList['darwin_x86_64'] = 'macOS'; diff --git a/xuanxuan/module/chat/ext/lang/zh-cn/xuanxuan.php b/xuanxuan/module/chat/ext/lang/zh-cn/xuanxuan.php index a7f2ade892..07d368f73d 100644 --- a/xuanxuan/module/chat/ext/lang/zh-cn/xuanxuan.php +++ b/xuanxuan/module/chat/ext/lang/zh-cn/xuanxuan.php @@ -3,69 +3,19 @@ $lang->chat->common = '客户端'; $lang->chat->turnon = '是否打开'; $lang->chat->help = '使用说明'; $lang->chat->settings = '服务器设置'; +$lang->chat->xxdServer = '禅道服务器'; +$lang->chat->downloadXXD = '下载喧喧服务端'; +$lang->chat->zentaoIntegrate = '禅道集成'; +$lang->chat->zentaoClient = '新增禅道客户端!'; $lang->chat->turnonList = array(); $lang->chat->turnonList[1] = '是'; $lang->chat->turnonList[0] = '否'; -$lang->chat->status = '状态'; -$lang->chat->xxdServer = '禅道服务器'; -$lang->chat->downloadXXD = '下载喧喧服务端'; -$lang->chat->listenIP = '监听IP'; -$lang->chat->chatPort = '客户端通讯端口'; -$lang->chat->uploadFileSize = '上传文件大小'; -$lang->chat->downloadPackage = '下载完整包'; -$lang->chat->downloadConfig = '只下载配置文件'; -$lang->chat->zentaoIntegrate = '禅道集成'; -$lang->chat->changeSetting = '修改配置'; - -$lang->chat->createBug = '创建 Bug'; -$lang->chat->createDoc = '创建文档'; -$lang->chat->createStory = '创建需求'; -$lang->chat->createTask = '创建任务'; -$lang->chat->createTodo = '创建待办'; - -$lang->chat->statusList[1] = '启用'; -$lang->chat->statusList[0] = '不启用'; +$lang->chat->info = "禅道客户端由易软天创旗下另外一款免费、开源、安全的IM产品喧喧驱动,支持私有部署,跨平台操作,内置大量插件,功能丰富,在喧喧里,您甚至还可以为自己编写个性化的插件,点击查看。"; +$lang->chat->xxClientConfirm = '与禅道深度集成,支持成员沟通,小组讨论,文件传输,任务指派,更加方便的项目管理,更加流畅的团队协作!点击界面右下角下载禅道客户端。'; +$lang->chat->xxServerConfirm = '与禅道深度集成,支持成员沟通,小组讨论,文件传输,任务指派,更加方便的项目管理,更加流畅的团队协作!进入后台-集成-客户端集成进行下载配置。'; $lang->chat->xxdServerTip = '禅道服务器地址为完整的协议+地址+端口,示例:http://192.168.1.35 或 http://pms.zentao.com ,不能使用127.0.0.1。'; $lang->chat->xxdServerEmpty = '禅道服务器地址为空。'; $lang->chat->xxdServerError = '禅道服务器地址不能为 127.0.0.1。'; -$lang->chat->xxdSchemeError = '服务器地址应该以http://或https://开头。'; -$lang->chat->xxdPortError = '服务器地址应该包含有效的端口号,默认为11443。'; -$lang->chat->zentaoClient = '新增禅道客户端!'; -$lang->chat->xxClientConfirm = '与禅道深度集成,支持成员沟通,小组讨论,文件传输,任务指派,更加方便的项目管理,更加流畅的团队协作!点击界面右下角下载禅道客户端。'; -$lang->chat->xxServerConfirm = '与禅道深度集成,支持成员沟通,小组讨论,文件传输,任务指派,更加方便的项目管理,更加流畅的团队协作!进入后台-集成-客户端集成进行下载配置。'; -$lang->chat->info = "禅道客户端由易软天创旗下另外一款免费、开源、安全的IM产品喧喧驱动,支持私有部署,跨平台操作,内置大量插件,功能丰富,在喧喧里,您甚至还可以为自己编写个性化的插件,点击查看。"; - -$lang->chat->xxd = new stdclass(); -$lang->chat->xxd->os = '操作系统'; -$lang->chat->xxd->ip = '监听IP'; -$lang->chat->xxd->chatPort = '客户端通讯端口'; -$lang->chat->xxd->commonPort = '通用端口'; -$lang->chat->xxd->isHttps = '启用https'; -$lang->chat->xxd->uploadFileSize = '上传文件大小'; -$lang->chat->xxd->maxOnlineUser = '最大在线人数'; -$lang->chat->xxd->sslcrt = '证书内容'; -$lang->chat->xxd->sslkey = '证书私钥'; -$lang->chat->xxd->max = '最大'; - -$lang->chat->httpsOptions[1] = '启用'; -$lang->chat->httpsOptions[0] = '不启用'; - -$lang->chat->placeholder = new stdclass(); -$lang->chat->placeholder->xxd = new stdclass(); -$lang->chat->placeholder->xxd->ip = '监听的服务器ip地址,没有特殊需要直接填写0.0.0.0'; -$lang->chat->placeholder->xxd->chatPort = '与聊天客户端通讯的端口'; -$lang->chat->placeholder->xxd->commonPort = '通用端口,该端口用于客户端登录时验证,以及文件上传下载使用'; -$lang->chat->placeholder->xxd->isHttps = '启用https'; -$lang->chat->placeholder->xxd->uploadFileSize = '上传文件的大小'; -$lang->chat->placeholder->xxd->maxOnlineUser = '最大在线人数'; -$lang->chat->placeholder->xxd->sslcrt = '请将证书内容复制到此处'; -$lang->chat->placeholder->xxd->sslkey = '请将证书密钥复制到此处'; - -$lang->chat->osList['win_i386'] = 'Windows 32位'; -$lang->chat->osList['win_x86_64'] = 'Windows 64位'; -$lang->chat->osList['linux_i386'] = 'Linux 32位'; -$lang->chat->osList['linux_x86_64'] = 'Linux 64位'; -$lang->chat->osList['darwin_x86_64'] = 'macOS'; diff --git a/xuanxuan/module/chat/ext/lang/zh-tw/xuanxuan.php b/xuanxuan/module/chat/ext/lang/zh-tw/xuanxuan.php deleted file mode 100644 index 182a73f176..0000000000 --- a/xuanxuan/module/chat/ext/lang/zh-tw/xuanxuan.php +++ /dev/null @@ -1,2 +0,0 @@ -chat->common = '喧喧'; diff --git a/xuanxuan/module/chat/ext/model/class/xuanxuan.class.php b/xuanxuan/module/chat/ext/model/class/xuanxuan.class.php index f2b66442d3..04d2de620b 100644 --- a/xuanxuan/module/chat/ext/model/class/xuanxuan.class.php +++ b/xuanxuan/module/chat/ext/model/class/xuanxuan.class.php @@ -1,72 +1,10 @@ uploadFileSize = $setting->uploadFileSize; - $data->isHttps = $setting->isHttps; - $data->sslcrt = $setting->sslcrt; - $data->sslkey = $setting->sslkey; - $data->ip = $setting->ip; - $data->chatPort = $setting->chatPort; - $data->commonPort = $setting->commonPort; - $data->maxOnlineUser = isset($setting->maxOnlineUser) ? $setting->maxOnlineUser : 0; - $data->key = $this->config->xuanxuan->key; - $data->os = $setting->os; - $data->version = $this->config->xuanxuan->version; - $data->downloadType = $type; - - $server = $this->getServer(); - $data->server = $server; - $data->host = trim($server, '/') . getWebRoot(); - - $url = "https://www.chanzhi.org/license-downloadxxd-zentao.html"; - $result = common::http($url, $data); - - if($type == 'config') - { - $this->sendDownHeader('xxd.conf', 'conf', $result, strlen($result)); - } - else - { - header("Location: $result"); - } - - $this->loadModel('setting')->setItem('system.common.xxserver.installed', 1); - exit; - } - - public function sendDownHeader($fileName, $fileType, $content, $fileSize = 0) - { - /* Set the downloading cookie, thus the export form page can use it to judge whether to close the window or not. */ - setcookie('downloading', 1, 0, '', '', false, true); - - /* Append the extension name auto. */ - $extension = '.' . $fileType; - if(strpos($fileName, $extension) === false) $fileName .= $extension; - - /* urlencode the fileName for ie. */ - $isIE11 = (strpos($this->server->http_user_agent, 'Trident') !== false and strpos($this->server->http_user_agent, 'rv:11.0') !== false); - if(strpos($this->server->http_user_agent, 'MSIE') !== false or $isIE11) $fileName = urlencode($fileName); - - /* Judge the content type. */ - $mimes = $this->config->chat->mimes; - $contentType = isset($mimes[$fileType]) ? $mimes[$fileType] : $mimes['default']; - if(empty($fileSize) and $content) $fileSize = strlen($content); - - header("Content-type: $contentType"); - header("Content-Disposition: attachment; filename=\"$fileName\""); - header("Content-length: {$fileSize}"); - header("Pragma: no-cache"); - header("Expires: 0"); - die($content); - } - public function getExtensionList($userID) { $entries = array(); - $baseURL = $this->getServer(); + $baseURL = $this->getServer('zentao'); $this->loadModel('user'); $user = $this->dao->select('*')->from(TABLE_USER)->where('id')->eq($userID)->fetch(); @@ -127,13 +65,4 @@ class xuanxuanChat extends chatModel unset($_SESSION['user']); return $entries; } - - public function getServer() - { - $this->app->loadConfig('mail'); - $server = empty($this->config->mail->domain) ? commonModel::getSysURL() : $this->config->mail->domain; - if(!empty($this->config->xuanxuan->server)) $server = $this->config->xuanxuan->server; - - return $server; - } } diff --git a/xuanxuan/module/chat/ext/model/xuanxuan.php b/xuanxuan/module/chat/ext/model/xuanxuan.php index 25a659fbb1..dd3683e8b5 100644 --- a/xuanxuan/module/chat/ext/model/xuanxuan.php +++ b/xuanxuan/module/chat/ext/model/xuanxuan.php @@ -1,20 +1,5 @@ loadExtension('xuanxuan')->downloadXXD($setting, $type); -} - public function getExtensionList($userID) { return $this->loadExtension('xuanxuan')->getExtensionList($userID); } - -public function sendDownHeader($fileName, $fileType, $content, $fileSize = 0) -{ - return $this->loadExtension('xuanxuan')->sendDownHeader($fileName, $fileType, $content, $fileSize); -} - -public function getServer() -{ - return $this->loadExtension('xuanxuan')->getServer(); -} diff --git a/xuanxuan/module/chat/ext/view/downloadxxd.html.php b/xuanxuan/module/chat/ext/view/downloadxxd.html.php deleted file mode 100644 index 4a7d5d1b29..0000000000 --- a/xuanxuan/module/chat/ext/view/downloadxxd.html.php +++ /dev/null @@ -1,76 +0,0 @@ - - * @package chart - * @version $Id$ - * @link http://www.zentao.net - */ -?> -
          ' method='post' target='_blank'> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          chat->xxd->os;?>chat->osList, zget($this->config->xxd, 'os', 'linux64'), "class='form-control chosen'");?>
          chat->xxd->ip;?>config->xxd, 'ip', '0.0.0.0'), "class='form-control' placeholder='{$lang->chat->placeholder->xxd->ip}'");?>
          chat->xxd->chatPort;?>config->xxd, 'chatPort', 11444), "placeholder='{$lang->chat->placeholder->xxd->chatPort}' class='form-control'");?>
          chat->xxd->commonPort;?>config->xxd, 'commonPort', 11443), "placeholder='{$lang->chat->placeholder->xxd->commonPort}' class='form-control'");?>
          chat->xxd->isHttps;?>chat->httpsOptions, zget($this->config->xxd, 'isHttps', '1'), "class='checkbox'");?>
          chat->xxd->sslcrt;?>config->xxd, 'sslcrt', ''), "placeholder='{$lang->chat->placeholder->xxd->sslcrt}' class='form-control'");?>
          chat->xxd->sslkey;?>config->xxd, 'sslkey', ''), "placeholder='{$lang->chat->placeholder->xxd->sslkey}' class='form-control'");?>
          chat->xxd->uploadFileSize;?> -
          - config->xxd, 'uploadFileSize', 20), "class='form-control' placeholder='{$lang->chat->placeholder->xxd->chatPort}' ");?> - M -
          -
          - chat->downloadConfig, '', "class='btn btn-primary btn-download' data-type='config'");?> - chat->downloadPackage, '', "class='btn btn-primary btn-download' data-type='package'");?> - - -
          -
          - diff --git a/xuanxuan/module/entry/ext/control/visit.php b/xuanxuan/module/entry/ext/control/visit.php index 15f93f9145..608bf4e307 100644 --- a/xuanxuan/module/entry/ext/control/visit.php +++ b/xuanxuan/module/entry/ext/control/visit.php @@ -14,7 +14,7 @@ class entry extends control if(RUN_MODE != 'xuanxuan') die(); $referer = !empty($_GET['referer']) ? $this->get->referer : $referer; - $server = $this->loadModel('chat')->getServer(); + $server = $this->loadModel('chat')->getServer('zentao'); if(empty($referer)) $referer = $server . str_replace('/xuanxuan.php', '/index.php', $this->createLink('my', 'index', '', 'html')); $output = new stdclass(); diff --git a/xuanxuan/module/message/ext/model/class/xuanxuan.class.php b/xuanxuan/module/message/ext/model/class/xuanxuan.class.php index acf0b7aeef..298029e3bc 100644 --- a/xuanxuan/module/message/ext/model/class/xuanxuan.class.php +++ b/xuanxuan/module/message/ext/model/class/xuanxuan.class.php @@ -16,7 +16,7 @@ class xuanxuanMessage extends messageModel $title = $this->app->user->realname . $this->lang->action->label->$actionType . $this->lang->action->objectTypes[$objectType]; $text = $title . ' ' . "[#{$objectID}::{$object->$field}]"; - $server = $this->loadModel('chat')->getServer(); + $server = $this->loadModel('chat')->getServer('zentao'); $onlybody = isset($_GET['onlybody']) ? $_GET['onlybody'] : ''; unset($_GET['onlybody']); $url = $server . helper::createLink($objectType, 'view', "id=$objectID", 'html'); From 28f014d766453c4b44601e5fe6befaa0aa943876 Mon Sep 17 00:00:00 2001 From: chenfeiCF Date: Thu, 17 Jan 2019 13:35:50 +0800 Subject: [PATCH 097/442] * Adjust Makefile. --- Makefile | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/Makefile b/Makefile index fbd5159d48..8b25a6594f 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,6 @@ -VERSION=$(shell head -n 1 VERSION) +VERSION = $(shell head -n 1 VERSION) +XUANPATH = $(shell head -n 1 XUANPATH) +XUANVERSION = $(shell head -n 1 XUANVERSION) all: pms clean: @@ -48,14 +50,16 @@ zentaoxx: mkdir -p zentaoxx/db mkdir -p zentaoxx/www mkdir -p zentaoxx/module/common/ext/model/ - svn export https://github.com/easysoft/xuanxuan.git/branches/master/ranzhi/ - cp ranzhi/config/ext/xuanxuan.php zentaoxx/config/ext/ - cp -r ranzhi/lib/phpaes zentaoxx/lib/ - cp -r ranzhi/framework/xuanxuan.class.php zentaoxx/framework/ - cp -r ranzhi/db/*.sql zentaoxx/db/ - cp -r ranzhi/app/sys/chat zentaoxx/module/ - cp -r ranzhi/app/sys/common/ext/model/hook zentaoxx/module/common/ext/model/ - cp -r ranzhi/app/sys/action zentaoxx/module/ + cd $(XUANPATH); git archive --format=zip --prefix=xuan/ $(XUANVERSION) > xuan.zip + mv $(XUANPATH)/xuan.zip . + unzip xuan.zip + cp xuan/ranzhi/config/ext/xuanxuan.php zentaoxx/config/ext/ + cp -r xuan/ranzhi/lib/phpaes zentaoxx/lib/ + cp -r xuan/ranzhi/framework/xuanxuan.class.php zentaoxx/framework/ + cp -r xuan/ranzhi/db/*.sql zentaoxx/db/ + cp -r xuan/ranzhi/app/sys/chat zentaoxx/module/ + cp -r xuan/ranzhi/app/sys/common/ext/model/hook zentaoxx/module/common/ext/model/ + cp -r xuan/ranzhi/app/sys/action zentaoxx/module/ cp -r xuanxuan/config/* zentaoxx/config/ cp -r xuanxuan/module/* zentaoxx/module/ cp -r xuanxuan/www/* zentaoxx/www/ @@ -74,7 +78,7 @@ zentaoxx: sed -i 's/sys_file/zt_file/' zentaoxx/db/*.sql sed -i '/sys_entry/d' zentaoxx/db/*.sql zip -rqm -9 zentaoxx.$(VERSION).zip zentaoxx/* - rm -rf ranzhi zentaoxx + rm -rf xuan.zip xuan zentaoxx package: # change mode. chmod -R 777 zentaopms/tmp/ From 91bb4a4ae23d55843eb23974b64f7604e7b1e44c Mon Sep 17 00:00:00 2001 From: wangyidong Date: Fri, 18 Jan 2019 10:33:06 +0800 Subject: [PATCH 098/442] * change init lang of svn and git to common. --- db/update11.1.sql | 1 + module/common/lang/zh-cn.php | 3 +++ module/git/lang/zh-cn.php | 1 - module/svn/lang/zh-cn.php | 1 - module/user/model.php | 2 +- 5 files changed, 5 insertions(+), 3 deletions(-) create mode 100644 db/update11.1.sql diff --git a/db/update11.1.sql b/db/update11.1.sql new file mode 100644 index 0000000000..53bb4617fc --- /dev/null +++ b/db/update11.1.sql @@ -0,0 +1 @@ +ALTER TABLE `zt_release` CHANGE `name` `name` varchar(255) COLLATE 'utf8_general_ci' NOT NULL DEFAULT '' AFTER `build`; diff --git a/module/common/lang/zh-cn.php b/module/common/lang/zh-cn.php index a3df969873..8e15177fbe 100644 --- a/module/common/lang/zh-cn.php +++ b/module/common/lang/zh-cn.php @@ -335,6 +335,9 @@ $lang->doc = new stdclass(); $lang->doc->menu = new stdclass(); //$lang->doc->menu->createLib = array('link' => ' 添加文件夹|doc|createLib', 'float' => 'right'); +$lang->svn = new stdclass(); +$lang->git = new stdclass(); + /* 统计视图菜单设置。*/ $lang->report = new stdclass(); $lang->report->menu = new stdclass(); diff --git a/module/git/lang/zh-cn.php b/module/git/lang/zh-cn.php index c8f983cc8e..e5181335cc 100644 --- a/module/git/lang/zh-cn.php +++ b/module/git/lang/zh-cn.php @@ -10,7 +10,6 @@ * @link http://www.zentao.net */ /* 方法列表。*/ -$lang->git = new stdclass(); $lang->git->common = 'Git'; $lang->git->cat = '查看源代码'; $lang->git->diff = '比较源代码'; diff --git a/module/svn/lang/zh-cn.php b/module/svn/lang/zh-cn.php index 46cfa99cfd..510abc1109 100644 --- a/module/svn/lang/zh-cn.php +++ b/module/svn/lang/zh-cn.php @@ -10,7 +10,6 @@ * @link http://www.zentao.net */ /* 方法列表。*/ -$lang->svn = new stdclass(); $lang->svn->common = 'Subversion'; $lang->svn->cat = '查看源代码'; $lang->svn->diff = '比较源代码'; diff --git a/module/user/model.php b/module/user/model.php index 458b8aedd2..6bc8284d09 100644 --- a/module/user/model.php +++ b/module/user/model.php @@ -336,7 +336,7 @@ class userModel extends model $group = new stdClass(); $group->account = $user->account; $group->group = $user->group; - $this->dao->insert(TABLE_USERGROUP)->data($group)->exec(); + $this->dao->replace(TABLE_USERGROUP)->data($group)->exec(); } unset($user->group); $this->dao->insert(TABLE_USER)->data($user)->autoCheck()->exec(); From 2ba3fbfa8ad03b5bf8affb36c45ab108eba7642e Mon Sep 17 00:00:00 2001 From: reneeteng Date: Fri, 18 Jan 2019 10:44:50 +0800 Subject: [PATCH 099/442] *Change lang. --- module/sso/lang/en.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/sso/lang/en.php b/module/sso/lang/en.php index a993644ba9..8390dbef2c 100644 --- a/module/sso/lang/en.php +++ b/module/sso/lang/en.php @@ -12,7 +12,7 @@ $lang->sso = new stdclass(); $lang->sso->settings = 'Settings'; $lang->sso->turnon = 'On'; -$lang->sso->redirect = 'Redirect ranzhi'; +$lang->sso->redirect = 'Jump to Zdoo'; $lang->sso->code = 'Alias'; $lang->sso->key = 'Key'; $lang->sso->addr = 'Address'; From ad15fff7eec1c9aa48f65bb3dc89e713fc1c3c7c Mon Sep 17 00:00:00 2001 From: Yagami Date: Mon, 21 Jan 2019 15:08:33 +0800 Subject: [PATCH 100/442] * Finish task #5217. --- module/bug/model.php | 1 - 1 file changed, 1 deletion(-) diff --git a/module/bug/model.php b/module/bug/model.php index 09e61c1d6e..a86dc4f60c 100644 --- a/module/bug/model.php +++ b/module/bug/model.php @@ -502,7 +502,6 @@ class bugModel extends model { return $this->dao->select('*')->from(TABLE_BUG) ->where('status')->eq('active') - ->andWhere('toTask')->eq(0) ->andWhere('tostory')->eq(0) ->beginIF(!empty($products))->andWhere('product')->in($products)->fi() ->beginIF($branch)->andWhere('branch')->in("0,$branch")->fi() From 042f217f27a54540e2387d5ce7f209ec918bfa5d Mon Sep 17 00:00:00 2001 From: Yagami Date: Mon, 21 Jan 2019 15:31:22 +0800 Subject: [PATCH 101/442] * Finish task #5214. --- module/release/view/browse.html.php | 7 ++++++- module/release/view/view.html.php | 3 ++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/module/release/view/browse.html.php b/module/release/view/browse.html.php index 8ad64a3430..ebe663e5b0 100644 --- a/module/release/view/browse.html.php +++ b/module/release/view/browse.html.php @@ -53,7 +53,12 @@
          id"), sprintf('%03d', $release->id));?>id"), $release->name);?> + marker ? "" . $release->name : $release->name; + echo html::a(inlink('view', "release=$release->id"), $releaseName); + ?> + createLink('build', 'view', "buildID=$release->buildID"), $release->buildName);?> branch];?> dev->noParams?>
          + dev->postParams[$selectedModule][$methodName])):?> + app->loadLang($selectedModule); + $this->app->loadConfig($selectedModule); + ?> + + + + + + + + dev->postParams[$selectedModule][$methodName] as $paramName => $paramType):?> + + + + $selectedModule->$paramName)) $paramDesc .= $lang->$selectedModule->$paramName . ' '; + if(isset($lang->$selectedModule->$listKey)) $paramDesc .= sprintf($lang->dev->paramRange, join(' | ', array_keys($lang->$selectedModule->$listKey))); + if($paramType == 'date') $paramDesc .= $lang->dev->paramDate; + if($paramName == 'color') $paramDesc .= $lang->dev->paramColor; + if(isset($config->$selectedModule->$methodName->requiredFields) and strpos($config->$selectedModule->$methodName->requiredFields, $paramName) !== false) $paramDesc .= "*{$lang->required}"; + if($paramName == 'product') $paramDesc .= "*{$lang->required}"; + if($paramName == 'mailto') $paramDesc .= $lang->dev->paramMailto; + ?> + + + +
          dev->post;?>
          dev->params?>dev->type?>dev->desc?>
          + From 71e04e17ae413c4c0fa7d3d55868310c8a8a3717 Mon Sep 17 00:00:00 2001 From: Yagami Date: Wed, 23 Jan 2019 08:59:04 +0800 Subject: [PATCH 108/442] * Finish task #5211. --- module/common/lang/en.php | 2 +- module/common/lang/zh-cn.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/module/common/lang/en.php b/module/common/lang/en.php index 9788e7f037..4454234b3b 100644 --- a/module/common/lang/en.php +++ b/module/common/lang/en.php @@ -479,7 +479,7 @@ $lang->error->email = "『%s』should be valid Email."; $lang->error->date = "『%s』should be valid date."; $lang->error->datetime = "『%s』should be valid date."; $lang->error->code = "『%s』should be letters or numbers."; -$lang->error->account = "『%s』should be valid account."; +$lang->error->account = "『%s』should be letters or numbers of three or more."; $lang->error->passwordsame = "Passwords should be consistent."; $lang->error->passwordrule = "Password should abide by rules. It should be at least 6 characters."; $lang->error->accessDenied = 'Access is denied.'; diff --git a/module/common/lang/zh-cn.php b/module/common/lang/zh-cn.php index 8e15177fbe..f88b2841b0 100644 --- a/module/common/lang/zh-cn.php +++ b/module/common/lang/zh-cn.php @@ -482,7 +482,7 @@ $lang->error->email = "『%s』应当为合法的EMAIL。"; $lang->error->date = "『%s』应当为合法的日期。"; $lang->error->datetime = "『%s』应当为合法的日期。"; $lang->error->code = "『%s』应当为字母或数字的组合。"; -$lang->error->account = "『%s』应当为合法的用户名。"; +$lang->error->account = "『%s』只能是字母和数字的组合三位以上。"; $lang->error->passwordsame = "两次密码应当相等。"; $lang->error->passwordrule = "密码应该符合规则,长度至少为六位。"; $lang->error->accessDenied = '您没有访问权限'; From bace517b74b88f9e283c15356dde812f4fa84506 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Wed, 23 Jan 2019 09:14:36 +0800 Subject: [PATCH 109/442] * adjust code for saveLogs. --- module/upgrade/model.php | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/module/upgrade/model.php b/module/upgrade/model.php index 4e7cc7206f..2f0a5ab8a0 100644 --- a/module/upgrade/model.php +++ b/module/upgrade/model.php @@ -1118,7 +1118,7 @@ class upgradeModel extends model foreach($oldPriv as $item) { - $this->dao->insert($privTable) + $this->dao->replace($privTable) ->set('company')->eq($item->company) ->set('module')->eq('company') ->set('method')->eq('view') @@ -1134,7 +1134,7 @@ class upgradeModel extends model foreach($oldPriv as $item) { - $this->dao->insert($privTable) + $this->dao->replace($privTable) ->set('company')->eq($item->company) ->set('module')->eq('todo') ->set('method')->eq('batchFinish') @@ -1163,7 +1163,7 @@ class upgradeModel extends model foreach($oldPriv as $item) { - $this->dao->insert($privTable) + $this->dao->replace($privTable) ->set('company')->eq($item->company) ->set('module')->eq('tree') ->set('method')->eq('browseTask') @@ -2952,8 +2952,11 @@ class upgradeModel extends model public function saveLogs($log) { $logFile = $this->app->getTmpRoot() . 'log/upgrade.' . date('Ymd') . '.log.php'; - if(!file_exists($logFile)) file_put_contents($logFile, "\n"); - $log = date('Y-m-d H:i:s') . ' ' . trim($log) . "\n"; - file_put_contents($logFile, $log, FILE_APPEND); + $log = date('Y-m-d H:i:s') . ' ' . trim($log) . "\n"; + if(!file_exists($logFile)) $log = "\n" . $log; + + static $fh; + if(empty($fh)) $fh = fopen($logFile, 'a'); + fwrite($fh, $log); } } From 7a5e06ba65d9261097a1b87c79892a5140853c94 Mon Sep 17 00:00:00 2001 From: reneeteng Date: Wed, 23 Jan 2019 09:54:00 +0800 Subject: [PATCH 110/442] *Lang chane. --- module/custom/lang/en.php | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/module/custom/lang/en.php b/module/custom/lang/en.php index b60ffa1fba..b82a96bed9 100644 --- a/module/custom/lang/en.php +++ b/module/custom/lang/en.php @@ -5,18 +5,18 @@ $lang->custom->set = 'Customize'; $lang->custom->restore = 'Reset to Default'; $lang->custom->key = 'Key'; $lang->custom->value = 'Value'; -$lang->custom->flow = 'Mode'; -$lang->custom->working = 'WorkStyle'; +$lang->custom->flow = 'Workflow'; +$lang->custom->working = 'Work Mode'; $lang->custom->select = 'Select Workflow'; -$lang->custom->branch = 'Multi Branch'; +$lang->custom->branch = 'Multi-Branch'; $lang->custom->owner = 'Owner'; $lang->custom->module = 'Module'; $lang->custom->section = 'Section'; $lang->custom->lang = 'Language'; $lang->custom->setPublic = 'Set Public'; $lang->custom->required = 'Required'; -$lang->custom->score = 'Score'; -$lang->custom->scoreReset = 'Reset Score'; +$lang->custom->score = 'Point'; +$lang->custom->scoreReset = 'Reset Point'; $lang->custom->object['story'] = 'Story'; $lang->custom->object['task'] = 'Task'; @@ -41,7 +41,7 @@ $lang->custom->task->fields['priList'] = 'Priority'; $lang->custom->task->fields['typeList'] = 'Type'; $lang->custom->task->fields['reasonList'] = 'Close Reason'; $lang->custom->task->fields['statusList'] = 'Status'; -$lang->custom->task->fields['hours'] = 'Man-hours'; +$lang->custom->task->fields['hours'] = 'Effort'; $lang->custom->bug = new stdClass(); $lang->custom->bug->fields['priList'] = 'Priority'; @@ -51,12 +51,12 @@ $lang->custom->bug->fields['browserList'] = 'Browser'; $lang->custom->bug->fields['typeList'] = 'Type'; $lang->custom->bug->fields['resolutionList'] = 'Solution'; $lang->custom->bug->fields['statusList'] = 'Status'; -$lang->custom->bug->fields['longlife'] = 'Shelved Days'; +$lang->custom->bug->fields['longlife'] = 'Longlife days'; $lang->custom->testcase = new stdClass(); $lang->custom->testcase->fields['priList'] = 'Priority'; $lang->custom->testcase->fields['typeList'] = 'Type'; -$lang->custom->testcase->fields['stageList'] = 'Phase'; +$lang->custom->testcase->fields['stageList'] = 'Stage'; $lang->custom->testcase->fields['resultList'] = 'Result'; $lang->custom->testcase->fields['statusList'] = 'Status'; $lang->custom->testcase->fields['review'] = 'Review Required'; @@ -73,7 +73,7 @@ $lang->custom->todo->fields['statusList'] = 'Status'; $lang->custom->user = new stdClass(); $lang->custom->user->fields['roleList'] = 'Role'; $lang->custom->user->fields['statusList'] = 'Status'; -$lang->custom->user->fields['deleted'] = 'Show deleted user'; +$lang->custom->user->fields['deleted'] = 'Deleted User'; $lang->custom->block->fields['closed'] = 'Closed Block'; @@ -83,12 +83,12 @@ $lang->custom->allLang = 'All Language'; $lang->custom->confirmRestore = 'Do you want to reset to Default?'; $lang->custom->notice = new stdclass(); -$lang->custom->notice->canNotAdd = 'These items are parameters of calculation, so customized creation is not enabled.'; +$lang->custom->notice->canNotAdd = 'It will be calculated, so customization is not enabled.'; $lang->custom->notice->forceReview = '%s Review is required for certain submitters.'; $lang->custom->notice->forceNotReview = "%s Review is NOT required for certain submitters."; -$lang->custom->notice->longlife = 'Define shelved bugs.'; -$lang->custom->notice->invalidNumberKey = 'Priority list key should be a natural and not greater than 255.'; -$lang->custom->notice->invalidStringKey = 'The key should be a combination of lowercase English letters, numbers or underscores'; +$lang->custom->notice->longlife = 'Define longlife bugs.'; +$lang->custom->notice->invalidNumberKey = 'The key should be =< 255.'; +$lang->custom->notice->invalidStringKey = 'The key should be a combination of lowercase letters, numbers or underlines.'; $lang->custom->notice->indexPage['product'] = "ZenTao 8.2+ has Product Homepage. Do you want to go to Product Homepage?"; $lang->custom->notice->indexPage['project'] = "ZenTao 8.2+ has Project Homepage. Do you want to go to Project Homepage?"; @@ -118,7 +118,7 @@ $lang->custom->productProject->relation['0_0'] = 'Product - Project'; $lang->custom->productProject->relation['0_1'] = 'Product - Sprint'; $lang->custom->productProject->relation['1_1'] = 'Project - Sprint'; -$lang->custom->productProject->notice = 'Please select according to your team.'; +$lang->custom->productProject->notice = 'Select according to your team'; $lang->custom->workingList['full'] = 'Application Lifecycle Management'; $lang->custom->workingList['onlyTest'] = 'Test Management'; From 42e8537e0f532a05cf6d0612087aef7f23eede64 Mon Sep 17 00:00:00 2001 From: Yagami Date: Wed, 23 Jan 2019 09:55:41 +0800 Subject: [PATCH 111/442] * Finish task #5206. --- module/dev/config.php | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/module/dev/config.php b/module/dev/config.php index 0a7c96ad59..77413fc0d6 100644 --- a/module/dev/config.php +++ b/module/dev/config.php @@ -116,3 +116,38 @@ $config->dev->postParams['bug']['create']['pri'] = 'int'; $config->dev->postParams['bug']['create']['steps'] = 'string'; $config->dev->postParams['bug']['create']['mailto'] = 'string'; $config->dev->postParams['bug']['create']['keywords'] = 'string'; + +$config->dev->postParams['task']['create']['project'] = 'int'; +$config->dev->postParams['task']['create']['type'] = 'string'; +$config->dev->postParams['task']['create']['name'] = 'string'; +$config->dev->postParams['task']['create']['module'] = 'int'; +$config->dev->postParams['task']['create']['assignedTo'] = 'string'; +$config->dev->postParams['task']['create']['story'] = 'int'; +$config->dev->postParams['task']['create']['pri'] = 'int'; +$config->dev->postParams['task']['create']['color'] = 'string'; +$config->dev->postParams['task']['create']['desc'] = 'string'; +$config->dev->postParams['task']['create']['mailto'] = 'string'; + +$config->dev->postParams['task']['edit']['project'] = 'int'; +$config->dev->postParams['task']['edit']['type'] = 'string'; +$config->dev->postParams['task']['edit']['name'] = 'string'; +$config->dev->postParams['task']['edit']['module'] = 'int'; +$config->dev->postParams['task']['edit']['assignedTo'] = 'string'; +$config->dev->postParams['task']['edit']['story'] = 'int'; +$config->dev->postParams['task']['edit']['pri'] = 'int'; +$config->dev->postParams['task']['edit']['color'] = 'string'; +$config->dev->postParams['task']['edit']['desc'] = 'string'; +$config->dev->postParams['task']['edit']['mailto'] = 'string'; +$config->dev->postParams['task']['edit']['status'] = 'string'; +$config->dev->postParams['task']['edit']['estStarted'] = 'date'; +$config->dev->postParams['task']['edit']['realStarted'] = 'date'; +$config->dev->postParams['task']['edit']['deadline'] = 'date'; +$config->dev->postParams['task']['edit']['estimate'] = 'date'; +$config->dev->postParams['task']['edit']['left'] = 'date'; +$config->dev->postParams['task']['edit']['finishedBy'] = 'string'; +$config->dev->postParams['task']['edit']['finishedDate'] = 'date'; +$config->dev->postParams['task']['edit']['canceledBy'] = 'string'; +$config->dev->postParams['task']['edit']['canceledDate'] = 'date'; +$config->dev->postParams['task']['edit']['closedBy'] = 'string'; +$config->dev->postParams['task']['edit']['closedDate'] = 'date'; +$config->dev->postParams['task']['edit']['closedReason'] = 'string'; From 8e566448b1ed305c5b5c639ed1d1e49a35abcf31 Mon Sep 17 00:00:00 2001 From: Yagami Date: Wed, 23 Jan 2019 10:43:46 +0800 Subject: [PATCH 112/442] * Finish task #5205. --- module/dev/config.php | 39 +++++++++++++++------------------------ 1 file changed, 15 insertions(+), 24 deletions(-) diff --git a/module/dev/config.php b/module/dev/config.php index 77413fc0d6..8388e8b150 100644 --- a/module/dev/config.php +++ b/module/dev/config.php @@ -99,6 +99,21 @@ $config->dev->tableMap['config'] = 'custom'; $config->dev->tableMap['module'] = 'tree'; $config->dev->tableMap['suitecase'] = 'testcase'; +$config->dev->postParams['story']['create']['product'] = 'int'; +$config->dev->postParams['story']['create']['title'] = 'string'; +$config->dev->postParams['story']['create']['module'] = 'int'; +$config->dev->postParams['story']['create']['plan'] = 'int'; +$config->dev->postParams['story']['create']['source'] = 'string'; +$config->dev->postParams['story']['create']['sourceNote'] = 'string'; +$config->dev->postParams['story']['create']['reviewedBy'] = 'string'; +$config->dev->postParams['story']['create']['pri'] = 'string'; +$config->dev->postParams['story']['create']['estimate'] = 'date'; +$config->dev->postParams['story']['create']['spec'] = 'string'; +$config->dev->postParams['story']['create']['verify'] = 'string'; +$config->dev->postParams['story']['create']['color'] = 'string'; +$config->dev->postParams['story']['create']['mailto'] = 'string'; +$config->dev->postParams['story']['create']['keywords'] = 'string'; + $config->dev->postParams['bug']['create']['product'] = 'int'; $config->dev->postParams['bug']['create']['title'] = 'string'; $config->dev->postParams['bug']['create']['openedBuild'] = 'int|trunk'; @@ -127,27 +142,3 @@ $config->dev->postParams['task']['create']['pri'] = 'int'; $config->dev->postParams['task']['create']['color'] = 'string'; $config->dev->postParams['task']['create']['desc'] = 'string'; $config->dev->postParams['task']['create']['mailto'] = 'string'; - -$config->dev->postParams['task']['edit']['project'] = 'int'; -$config->dev->postParams['task']['edit']['type'] = 'string'; -$config->dev->postParams['task']['edit']['name'] = 'string'; -$config->dev->postParams['task']['edit']['module'] = 'int'; -$config->dev->postParams['task']['edit']['assignedTo'] = 'string'; -$config->dev->postParams['task']['edit']['story'] = 'int'; -$config->dev->postParams['task']['edit']['pri'] = 'int'; -$config->dev->postParams['task']['edit']['color'] = 'string'; -$config->dev->postParams['task']['edit']['desc'] = 'string'; -$config->dev->postParams['task']['edit']['mailto'] = 'string'; -$config->dev->postParams['task']['edit']['status'] = 'string'; -$config->dev->postParams['task']['edit']['estStarted'] = 'date'; -$config->dev->postParams['task']['edit']['realStarted'] = 'date'; -$config->dev->postParams['task']['edit']['deadline'] = 'date'; -$config->dev->postParams['task']['edit']['estimate'] = 'date'; -$config->dev->postParams['task']['edit']['left'] = 'date'; -$config->dev->postParams['task']['edit']['finishedBy'] = 'string'; -$config->dev->postParams['task']['edit']['finishedDate'] = 'date'; -$config->dev->postParams['task']['edit']['canceledBy'] = 'string'; -$config->dev->postParams['task']['edit']['canceledDate'] = 'date'; -$config->dev->postParams['task']['edit']['closedBy'] = 'string'; -$config->dev->postParams['task']['edit']['closedDate'] = 'date'; -$config->dev->postParams['task']['edit']['closedReason'] = 'string'; From dfb6a386dd2f8ac0d88dec4c87152abc9938ae95 Mon Sep 17 00:00:00 2001 From: Yagami Date: Wed, 23 Jan 2019 13:07:37 +0800 Subject: [PATCH 113/442] * Finish task #5208. --- module/dev/config.php | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/module/dev/config.php b/module/dev/config.php index 8388e8b150..1cde5d1427 100644 --- a/module/dev/config.php +++ b/module/dev/config.php @@ -142,3 +142,17 @@ $config->dev->postParams['task']['create']['pri'] = 'int'; $config->dev->postParams['task']['create']['color'] = 'string'; $config->dev->postParams['task']['create']['desc'] = 'string'; $config->dev->postParams['task']['create']['mailto'] = 'string'; + +$config->dev->postParams['testcase']['create']['product'] = 'int'; +$config->dev->postParams['testcase']['create']['title'] = 'string'; +$config->dev->postParams['testcase']['create']['type'] = 'string'; +$config->dev->postParams['testcase']['create']['module'] = 'int'; +$config->dev->postParams['testcase']['create']['story'] = 'int'; +$config->dev->postParams['testcase']['create']['stage'] = 'string'; +$config->dev->postParams['testcase']['create']['pri'] = 'int'; +$config->dev->postParams['testcase']['create']['color'] = 'string'; +$config->dev->postParams['testcase']['create']['precondition'] = 'string'; +$config->dev->postParams['testcase']['create']['steps'] = 'string'; +$config->dev->postParams['testcase']['create']['expect'] = 'string'; +$config->dev->postParams['testcase']['create']['mailto'] = 'string'; +$config->dev->postParams['testcase']['create']['keywords'] = 'string'; From eff13683fb93b30d30449ec1c753ac95678f7ba3 Mon Sep 17 00:00:00 2001 From: Yagami Date: Wed, 23 Jan 2019 13:44:49 +0800 Subject: [PATCH 114/442] * Finish task #5223. --- module/tree/model.php | 1 + 1 file changed, 1 insertion(+) diff --git a/module/tree/model.php b/module/tree/model.php index a78b4652ce..89d5e06b10 100644 --- a/module/tree/model.php +++ b/module/tree/model.php @@ -1335,6 +1335,7 @@ class treeModel extends model { $this->dao->update(TABLE_MODULE)->set('root')->eq($module->root)->where('id')->in($childs)->exec(); $this->dao->update(TABLE_MODULE)->set('branch')->eq(0)->where('id')->in($childs)->exec(); + if($self->type == 'doc') $this->dao->update(TABLE_DOC)->set('`lib`')->eq($module->root)->where('module')->eq($moduleID)->exec(); } $this->fixModulePath(isset($module->root) ? $module->root : $self->root, $self->type); if(isset($module->root) and $module->root != $self->root) $this->changeRoot($moduleID, $self->root, $module->root, $self->type); From 068773ddf418a27a23a179919a3315f931a06119 Mon Sep 17 00:00:00 2001 From: Yagami Date: Wed, 23 Jan 2019 14:58:53 +0800 Subject: [PATCH 115/442] * Fix release marker bug. --- module/release/model.php | 1 + module/task/css/create.css | 1 + module/task/js/create.js | 2 ++ 3 files changed, 4 insertions(+) diff --git a/module/release/model.php b/module/release/model.php index b84cd02dfa..bb22044618 100644 --- a/module/release/model.php +++ b/module/release/model.php @@ -195,6 +195,7 @@ class releaseModel extends model $release = fixer::input('post')->stripTags($this->config->release->editor->edit['id'], $this->config->allowedTags) ->add('branch', (int)$branch) + ->setIF(!$this->post->marker, 'marker', 0) ->cleanInt('product') ->remove('files,labels,allchecker,uid') ->get(); diff --git a/module/task/css/create.css b/module/task/css/create.css index d9e30cfcb3..d63830043b 100644 --- a/module/task/css/create.css +++ b/module/task/css/create.css @@ -2,6 +2,7 @@ .title-group.required:after {display: none;} .title-group.required > .required:after {display: block; right: 29px; top: 5px;} +#copyStory-input:after {display: block; right: 85px; top: 5px;} #pri + .chosen-container > .chosen-single {border-top-left-radius: 0!important; border-bottom-left-radius: 0!important;} .pri-selector > .btn {padding: 5px 8px!important; width: 100%;} diff --git a/module/task/js/create.js b/module/task/js/create.js index 576d6d7545..0c67732bcd 100644 --- a/module/task/js/create.js +++ b/module/task/js/create.js @@ -146,6 +146,7 @@ function setPreview() $('#preview').addClass('hidden'); $('#copyButton').addClass('hidden'); $('div.colorpicker').css('right', '1px');//Adjust for task #4151; + $('.title-group.required > div').removeAttr('id', 'copyStory-input').addClass('.required'); } else { @@ -155,6 +156,7 @@ function setPreview() $('#preview').removeClass('hidden'); $('#preview a').attr('href', storyLink); $('#copyButton').removeClass('hidden'); + $('.title-group.required > div').attr('id', 'copyStory-input').removeClass('.required'); $('div.colorpicker').css('right', '57px');//Adjust for task #4151; } From a97b9deca2590d802b02afd6a810aff99d60f538 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Wed, 23 Jan 2019 15:21:49 +0800 Subject: [PATCH 116/442] * finish task #5219. --- module/user/view/login.html.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/user/view/login.html.php b/module/user/view/login.html.php index bff9d427cf..44a212fce3 100644 --- a/module/user/view/login.html.php +++ b/module/user/view/login.html.php @@ -83,7 +83,7 @@ if(empty($config->notMd5Pwd))js::import($jsRoot . 'md5.js');
          checkVersion):?> - +
          From 353fa681cd903905b614c16aa11b8eba4d5e1caf Mon Sep 17 00:00:00 2001 From: Yagami Date: Wed, 23 Jan 2019 15:27:37 +0800 Subject: [PATCH 117/442] * Finish task #5213. --- module/bug/control.php | 6 +++++- module/product/model.php | 27 ++++----------------------- module/story/control.php | 4 +++- 3 files changed, 12 insertions(+), 25 deletions(-) diff --git a/module/bug/control.php b/module/bug/control.php index 3cb4c63b8a..ee1dd6f651 100644 --- a/module/bug/control.php +++ b/module/bug/control.php @@ -22,13 +22,17 @@ class bug extends control public function __construct($moduleName = '', $methodName = '') { parent::__construct($moduleName, $methodName); + $products = array(); $this->loadModel('product'); $this->loadModel('tree'); $this->loadModel('user'); $this->loadModel('action'); $this->loadModel('story'); $this->loadModel('task'); - $this->view->products = $this->products = $this->product->getPairs('nocode'); + + $productList = $this->loadModel('block')->getProducts('noclosed', ''); + foreach($productList as $product) $products[$product->id] = $product->name; + $this->view->products = $this->products = $products; if($this->config->global->flow == 'onlyTest') { diff --git a/module/product/model.php b/module/product/model.php index 8ea051a61a..c971f6294f 100644 --- a/module/product/model.php +++ b/module/product/model.php @@ -291,33 +291,14 @@ class productModel extends model if(defined('TUTORIAL')) return $this->loadModel('tutorial')->getProductPairs(); $orderBy = !empty($this->config->product->orderBy) ? $this->config->product->orderBy : 'isClosed'; - $products = $this->dao->select('id,name,line, IF(INSTR(" closed", status) < 2, 0, 1) AS isClosed') + $products = $this->dao->select('*, IF(INSTR(" closed", status) < 2, 0, 1) AS isClosed') ->from(TABLE_PRODUCT) ->where('deleted')->eq(0) ->beginIF(strpos($mode, 'noclosed') !== false)->andWhere('status')->ne('closed')->fi() ->beginIF(!$this->app->user->admin)->andWhere('id')->in($this->app->user->view->products)->fi() - ->orderBy('order_desc') - ->fetchAll('id'); - - $lines = $this->loadModel('tree')->getLinePairs(); - $linePairs = array(); - foreach($lines as $id => $name) - { - foreach($products as $key => $product) - { - if($product->line == $id) - { - $linePairs[$product->id] = $name . '/' . $product->name; - unset($products[$key]); - } - } - } - - $productPairs = array(); - foreach($products as $id => $product) $productPairs[$product->id] = $product->name; - $productPairs = $linePairs + $productPairs; - - return $productPairs; + ->orderBy($orderBy) + ->fetchPairs('id', 'name'); + return $products; } /** diff --git a/module/story/control.php b/module/story/control.php index 5f98473209..051f144440 100644 --- a/module/story/control.php +++ b/module/story/control.php @@ -141,7 +141,9 @@ class story extends control } else { - $products = $this->product->getPairs('noclosed'); + $products = array(); + $productList = $this->loadModel('block')->getProducts('noclosed', ''); + foreach($productList as $product) $products[$product->id] = $product->name; $product = $this->product->getById($productID ? $productID : key($products)); if(!isset($products[$product->id])) $products[$product->id] = $product->name; } From 2ced50d58a154c38f8fbc3594812bb85978bfa22 Mon Sep 17 00:00:00 2001 From: Yagami Date: Wed, 23 Jan 2019 15:37:22 +0800 Subject: [PATCH 118/442] * Move xuanxuan method. --- .../chat/ext/model/class/xuanxuan.class.php | 33 +++++++++++++++++++ xuanxuan/module/chat/ext/model/xuanxuan.php | 31 ++--------------- 2 files changed, 35 insertions(+), 29 deletions(-) diff --git a/xuanxuan/module/chat/ext/model/class/xuanxuan.class.php b/xuanxuan/module/chat/ext/model/class/xuanxuan.class.php index 04d2de620b..34238f806b 100644 --- a/xuanxuan/module/chat/ext/model/class/xuanxuan.class.php +++ b/xuanxuan/module/chat/ext/model/class/xuanxuan.class.php @@ -65,4 +65,37 @@ class xuanxuanChat extends chatModel unset($_SESSION['user']); return $entries; } + + public function getUserListOutput($idList = array(), $userID) + { + $output = new stdclass(); + $output->module = 'chat'; + $output->method = 'userGetList'; + + $users = $this->getUserList($status = '', $idList, $idAsKey = false); + if(dao::isError()) + { + $output->result = 'fail'; + $output->message = 'Get userlist failed.'; + } + else + { + $output->result = 'success'; + $output->users = !empty($userID) ? array($userID) : array(); + $output->data = $users; + + $this->app->loadLang('user', 'sys'); + $roles = $this->lang->user->roleList; + + $allDepts = $this->loadModel('dept')->getListByType('dept'); + $depts = array(); + foreach($allDepts as $id => $dept) + { + $depts[$id] = array('name' => $dept->name, 'order' => (int)$dept->order, 'parent' => (int)$dept->parent); + } + $output->roles = $roles; + $output->depts = $depts; + } + return $output; + } } diff --git a/xuanxuan/module/chat/ext/model/xuanxuan.php b/xuanxuan/module/chat/ext/model/xuanxuan.php index e99cb1744f..72adc1b3bd 100644 --- a/xuanxuan/module/chat/ext/model/xuanxuan.php +++ b/xuanxuan/module/chat/ext/model/xuanxuan.php @@ -6,33 +6,6 @@ public function getExtensionList($userID) public function getUserListOutput($idList = array(), $userID) { - $output = new stdclass(); - $output->module = 'chat'; - $output->method = 'userGetList'; - - $users = $this->getUserList($status = '', $idList, $idAsKey = false); - if(dao::isError()) - { - $output->result = 'fail'; - $output->message = 'Get userlist failed.'; - } - else - { - $output->result = 'success'; - $output->users = !empty($userID) ? array($userID) : array(); - $output->data = $users; - - $this->app->loadLang('user', 'sys'); - $roles = $this->lang->user->roleList; - - $allDepts = $this->loadModel('dept')->getListByType('dept'); - $depts = array(); - foreach($allDepts as $id => $dept) - { - $depts[$id] = array('name' => $dept->name, 'order' => (int)$dept->order, 'parent' => (int)$dept->parent); - } - $output->roles = $roles; - $output->depts = $depts; - } - return $output; + return $this->loadExtension('xuanxuan')->getUserListOutput($idList, $userID); } + From 9fef22ee4c368470de4da5c7fda89efe2a94d421 Mon Sep 17 00:00:00 2001 From: Yagami Date: Wed, 23 Jan 2019 15:56:03 +0800 Subject: [PATCH 119/442] * Fix makefile. --- Makefile | 1 + .../chat/ext/model/class/xuanxuan.class.php | 33 ------------------- xuanxuan/module/chat/ext/model/xuanxuan.php | 6 ---- 3 files changed, 1 insertion(+), 39 deletions(-) diff --git a/Makefile b/Makefile index 8b25a6594f..2626ff6ff6 100644 --- a/Makefile +++ b/Makefile @@ -68,6 +68,7 @@ zentaoxx: sed -i '/password = md5/d' zentaoxx/module/chat/control.php sed -i '/getSignedTime/d' zentaoxx/module/chat/control.php sed -i 's/tree/dept/' zentaoxx/module/chat/control.php + sed -i 's/tree/dept/' zentaoxx/module/chat/model.php sed -i "s/, 'sys'//" zentaoxx/module/chat/control.php sed -i 's/system.sys/system/' zentaoxx/module/chat/control.php sed -i 's/&app=sys//' zentaoxx/module/chat/control.php diff --git a/xuanxuan/module/chat/ext/model/class/xuanxuan.class.php b/xuanxuan/module/chat/ext/model/class/xuanxuan.class.php index 34238f806b..04d2de620b 100644 --- a/xuanxuan/module/chat/ext/model/class/xuanxuan.class.php +++ b/xuanxuan/module/chat/ext/model/class/xuanxuan.class.php @@ -65,37 +65,4 @@ class xuanxuanChat extends chatModel unset($_SESSION['user']); return $entries; } - - public function getUserListOutput($idList = array(), $userID) - { - $output = new stdclass(); - $output->module = 'chat'; - $output->method = 'userGetList'; - - $users = $this->getUserList($status = '', $idList, $idAsKey = false); - if(dao::isError()) - { - $output->result = 'fail'; - $output->message = 'Get userlist failed.'; - } - else - { - $output->result = 'success'; - $output->users = !empty($userID) ? array($userID) : array(); - $output->data = $users; - - $this->app->loadLang('user', 'sys'); - $roles = $this->lang->user->roleList; - - $allDepts = $this->loadModel('dept')->getListByType('dept'); - $depts = array(); - foreach($allDepts as $id => $dept) - { - $depts[$id] = array('name' => $dept->name, 'order' => (int)$dept->order, 'parent' => (int)$dept->parent); - } - $output->roles = $roles; - $output->depts = $depts; - } - return $output; - } } diff --git a/xuanxuan/module/chat/ext/model/xuanxuan.php b/xuanxuan/module/chat/ext/model/xuanxuan.php index 72adc1b3bd..dd3683e8b5 100644 --- a/xuanxuan/module/chat/ext/model/xuanxuan.php +++ b/xuanxuan/module/chat/ext/model/xuanxuan.php @@ -3,9 +3,3 @@ public function getExtensionList($userID) { return $this->loadExtension('xuanxuan')->getExtensionList($userID); } - -public function getUserListOutput($idList = array(), $userID) -{ - return $this->loadExtension('xuanxuan')->getUserListOutput($idList, $userID); -} - From 2678ec3433272af4520978f563f4ed5c1c648dca Mon Sep 17 00:00:00 2001 From: Yagami Date: Wed, 23 Jan 2019 16:06:18 +0800 Subject: [PATCH 120/442] * Fix xuanxuan https options. --- xuanxuan/module/admin/ext/js/xuanxuan/xuanxuan.js | 2 +- xuanxuan/module/admin/ext/view/xuanxuan.html.php | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/xuanxuan/module/admin/ext/js/xuanxuan/xuanxuan.js b/xuanxuan/module/admin/ext/js/xuanxuan/xuanxuan.js index cc3ced59ba..8130ee9223 100644 --- a/xuanxuan/module/admin/ext/js/xuanxuan/xuanxuan.js +++ b/xuanxuan/module/admin/ext/js/xuanxuan/xuanxuan.js @@ -22,7 +22,7 @@ $(function() { var value = $(this).val(); $('#isHttps').val(value); - if(value == 1) + if(value == 'on') { $('.sslTR').show(); } diff --git a/xuanxuan/module/admin/ext/view/xuanxuan.html.php b/xuanxuan/module/admin/ext/view/xuanxuan.html.php index cb5974b3cb..2505783ecc 100644 --- a/xuanxuan/module/admin/ext/view/xuanxuan.html.php +++ b/xuanxuan/module/admin/ext/view/xuanxuan.html.php @@ -87,12 +87,12 @@
          chat->xxd->sslcrt;?> xuanxuan, 'sslcrt', ''), "placeholder='{$lang->chat->placeholder->xxd->sslcrt}' class='form-control'");?>
          chat->xxd->sslkey;?> xuanxuan, 'sslkey', ''), "placeholder='{$lang->chat->placeholder->xxd->sslkey}' class='form-control'");?>
          ').addClass(i.attr("class")).append(n.clone())).insertAfter(i)),h){var c=l[0].getBoundingClientRect();r.css({left:c.left,width:l.width()}),r.find(".fixed-header-copy").css({left:o.left-c.left,position:"relative",minWidth:i.width()}),l.data("fixHeaderScroll")||l.data("fixHeaderScroll",1).on("scroll",function(){e.fixHeader()})}else r.css({left:o.left,width:o.width});var d=r.find("th");n.find("th").each(function(e){d.eq(e).css("width",t(this).outerWidth())})}else r.remove()},s.prototype.fixFooter=function(){var e,i=this,n=i.getTable(),o=i.$.find(".table-footer");if(i.isDataTable)e=n[0].getBoundingClientRect();else{var s=n.find("tbody");if(!s.length)return;e=s[0].getBoundingClientRect(),e=s[0].getBoundingClientRect()}var a=i.options.fixFooter;o.toggleClass("fixed-footer",!!r);var r=t.isFunction(a)?a(e,o):e.bottom>window.innerHeight-50-("number"==typeof a?a:i.pageFooterHeight||5);o.toggleClass("fixed-footer",!!r),n.toggleClass("with-footer-fixed",!!r),n.trigger("fixFooter",r);var l=t("body"),h=l.hasClass("body-modal");if(r){var c=n.parent(),d=c.is(".table-responsive");o.css({bottom:i.pageFooterHeight||0,left:d?c[0].getBoundingClientRect().left:e.left,width:d?c.width():e.width}),h&&l.css("padding-bottom",40)}else o.css({width:"",left:0,bottom:0}),h&&l.css("padding-bottom",0)},s.prototype.checkAll=function(e){var i=this,n=i.$.find(i.isDataTable?".fixed-left tbody>tr":"tbody>tr");n.each(function(){i.checkRow(t(this),e,!0)}),i.updateCheckUI()},s.prototype.checkRow=function(t,i,n){var o=this;o.isDataTable&&!t.is(".datatable-row-left")&&(t=o.getTable().find('.datatable-row-left[data-index="'+t.data("index")+'"]'));var s=t.find('input[type="checkbox"]');s.length&&(i===e&&(i=!s.is(":checked")),o.isDataTable?o.getTable().find('.datatable-row[data-index="'+t.data("index")+'"]').toggleClass("checked",i):t.toggleClass("checked",i),this.checkItems[t.data("id")]=i,s.prop("checked",i).trigger("change"),n||o.updateCheckUI())},s.prototype.updateCheckUI=function(){var e=this,i=e.getTable(),n=i.find(e.isDataTable?".fixed-left tbody>tr":"tbody>tr").not(".group-summary"),o=!1,s=null,a=0,r=!1,l=n.length;n.each(function(n){var h=t(this),c=h.find('input[type="checkbox"]');r=c.is(":checked");var d=e.isDataTable?i.find('.datatable-row[data-index="'+h.data("index")+'"]'):h;d.toggleClass("checked",r),d.toggleClass("row-check-begin",r&&!o),s&&s.toggleClass("row-check-end",!r&&o),r&&(a+=1),s=d,o=r,l===n+1&&d.toggleClass("row-check-end",r)}),e.$.toggleClass("has-row-checked",a>0).find(".check-all").toggleClass("checked",!(!l||a!==l)),e.updateStatistic(),e.options.onCheckChange&&e.options.onCheckChange()},s.DEFAULTS={checkable:!0,ajaxForm:!1,selectable:!0,fixHeader:!0,fixFooter:!0,iframeWidth:900,replaceId:"self",hot:!1,iframeModalTrigger:".iframe"},t.fn.table=function(e){return this.each(function(){var n=t(this),o=n.data(i),a="object"==typeof e&&e;o||n.data(i,o=new s(this,a)),"string"==typeof e&&o[e]()})},s.NAME=i,t.fn.table.Constructor=s,t(function(){t('[data-ride="table"]').table()})}(jQuery,void 0),function(t,e,i){t.fn._ajaxForm=t.fn.ajaxForm;var n={timeout:e.config?e.config.timeout:0,dataType:"json",method:"post"},o="";t.fn.enableForm=function(e,n,o){return e===i&&(e=!0),this.each(function(){var i=t(this);n||i.find('[type="submit"]').attr("disabled",e?null:"disabled"),!o&&i.hasClass("load-indicator")&&i.toggleClass("loading",!e),i.toggleClass("form-disabled",!e)})},t.enableForm=function(e,i,n){e===!1?t("form").enableForm(e,i,n):t("form.form-disabled").enableForm(!0,i,n)};var s=function(e,i,n){"string"==typeof i&&(n=i,i=null),n=n||"show",t.zui.messager?t.zui.messager[n](e,i):alert(e)};t.ajaxForm=function(a,r){var l=t(a);if(l.length>1)return l.each(function(){t.ajaxForm(this,r)});t.isFunction(r)&&(r={complete:r}),r=t.extend({},n,l.data(),r);var h=r.beforeSubmit,c=r.error,d=r.success,u=r.finish;delete r.finish,delete r.success,delete r.onError,delete r.beforeSubmit,r=t.extend({beforeSubmit:function(n,s,a){if(l.enableForm(!1),(h&&h(n,s,a))!==!1){var r={},c=s.find('[type="file"]');r.fileapi=c.length&&c[0].files!==i,r.formdata=e.FormData!==i;var d=r.fileapi&&s.find('input[type="file"]:enabled').filter(function(){return""!==t(this).val()}),u=d.length,p="multipart/form-data",f=s.attr("enctype")==p||s.attr("encoding")==p,g=r.fileapi&&r.formdata,m=(u||f)&&!g;m&&(""==o&&(o=a.url),a.url!=o&&(a.url=o),a.url=a.url.indexOf("&")>=0?a.url+"&HTTP_X_REQUESTED_WITH=XMLHttpRequest":a.url+"?HTTP_X_REQUESTED_WITH=XMLHttpRequest"); -}},success:function(i,n,o){if((d&&d(i,n,o,l))!==!1){try{"string"==typeof i&&(i=JSON.parse(i))}catch(a){}if(null===i||"object"!=typeof i)return i?alert(i):s("No response.","danger");var h=r.responser?t(r.responser):l.find(".form-responser");h.length||(h=t("#responser"));var c=i.message,p=function(){var n=i.callback;if(n){var o=n.indexOf("("),s=(o>0?n.substr(0,o):n).split("."),a=e,r=s[0];s.length>1&&(r=s[1],"top"===s[0]?a=e.top:"parent"===s[0]&&(a=e.parent));var h=a[r];if(t.isFunction(h)){var c=[];return o>0&&")"==n[n.length-1]&&(c=t.parseJSON("["+n.substring(o+1,n.length-1)+"]")),c.push(i),h.apply(l,c)}}};if("success"===i.result){if(l.enableForm(!0,1),c){var f=l.find('[type="submit"]'),g=!1;f.length&&(f.popover({container:"body",trigger:"manual",content:c,tipClass:"popover-in-modal popover-success popover-form-result",placement:i.placement||r.popoverPlacement||"right"}).popover("show"),setTimeout(function(){f.popover("destroy")},r.popoverTime||2e3),g=!0),h.length&&(h.html(''+c+"").show().delay(3e3).fadeOut(100),g=!0),g||s(c,"success")}if(u)return u(i,!0,l);if((r.closeModal||i.closeModal)&&setTimeout(t.zui.closeModal,r.closeModalTime||2e3),p()===!1)return;var m=r.locate||i.locate;if(m)if("loadInModal"==m){var v=t(".modal");setTimeout(function(){v.load(v.attr("ref"),function(){t(this).find(".modal-dialog").css("width",t(this).data("width")),t.zui.ajustModalPosition()})},1e3)}else{var y="reload"==m?e.location.href:m;setTimeout(function(){e.location.href=y},1200)}var b=r.ajaxReload||i.ajaxReload;if(b){var w=t(b);w.length&&w.load(e.location.href+" "+b,function(){w.find('[data-toggle="modal"]').modalTrigger()})}}else{if(l.enableForm(),"string"==typeof c)h.length?h.html(''+c+"").show().delay(3e3).fadeOut(100):s(c,"danger");else if("object"==typeof c){var x=!1,C=[];t.each(c,function(e,i){var n=t.isArray(i)?i.join(";"):i,o=t("#"+e);if(!o.length)return void C.push(n);var s=e+"Label",a=t("#"+s);if(!a.length){var r=o.closest(".input-group").length,l=o.closest("td").length;a=t('
          ').appendTo(l?o.closest("td"):r?o.closest(".input-group").parent():o.parent())}a.empty().append(n),o.addClass("has-error");var h=function(){var e=t("#"+s);if(e.length)return e.remove(),o.removeClass("has-error"),!0};o.on("change input mousedown",h);var c=t("#"+e+"_chosen");c.length&&c.find(".chosen-single,.chosen-choices").addClass("has-error").on("mousedown",function(){h()===!0&&t(this).removeClass("has-error")}),x||(o.focus(),x=!0)}),C.length&&s(C.join(";"),"danger")}if(u)return u(i,!1,l);if(p()===!1)return}}},error:function(t,i,n){if((c&&c(t,i,n,l))!==!1){l.enableForm();var o="timeout"==i||"error"==i?e.lang?e.lang.timeout:i:t.responseText+i+n;s(o,"danger")}}},r),l._ajaxForm(r).data("zui.ajaxform",!0),l.on("click","[data-form-action]",function(){l.attr("action",t(this).data("formAction")).submit()})},t.fn.ajaxForm=function(e){return this.each(function(){t.ajaxForm(this,e)})},t.fn.setInputRequired=function(){return this.each(function(){var e=t(this),i=e.parent();i.is(".input-control,td")?i.addClass("required"):e.is(".chosen")?e.attr("required",null).next(".chosen-container").addClass("required"):i.addClass("required"),e.attr("required",null);var n=i.closest(".input-group");n.length&&1===n.find(".required,input[required],select[required]").length&&n.addClass("required")})},t(function(){t('.form-ajax,form[data-type="ajax"]').ajaxForm(),setTimeout(function(){var i=e.config.requiredFields,n=t("form");i&&(i=i.split(",")),i&&i.length&&t.each(i,function(t,e){n.find("#"+e).attr("required","required")}),n.find("input[required],select[required],textarea[required]").setInputRequired()},400),t("#hiddenwin"),t('form[target="hiddenwin"]').on("submit",function(){var e=t(this);e.data("zui.ajaxform")||e.enableForm(!1).data("disabledTime",(new Date).getTime())}).on("click",function(){var e=t(this),i=e.data("disabledTime");i&&(new Date).getTime()-i>1e4&&e.enableForm(!0).data("disabledTime",null)})})}(jQuery,window,void 0),function(t){"use strict";var e="zui.searchList",i=function(t,e){if(t&&t.length)for(var i=0;i
          ').append(a)),i.$menu.append(a),i.$menu.removeClass("loading"),i.isLoaded=!0,e&&e(!0)},error:function(){i.$menu.removeClass("loading").append('
          '+(n.errorText||window.lang&&window.lang.timeout)+"
          "),e&&e(!1)}},n.ajax))},n.prototype.scrollTo=function(t){t.length&&t[0].scrollIntoView({behavior:"smooth"})},n.prototype.getItems=function(){return this.$.find(this.options.selector).addClass("search-list-item")},n.prototype.getActiveItem=function(){return this.getItems().filter(".active:first")},n.prototype.search=function(e){var n=this,o=void 0===e||null===e||""===e,s=n.getItems().removeClass("active");if(o)s.removeClass("hidden");else{var a=t.trim(e).split(" ");s.each(function(){var e=t(this),n=e.text()+" "+(e.data("key")||e.data("filter"));e.toggleClass("hidden",!i(a,n))})}n.scrollTo(s.not(".hidden").first().addClass("active"))},n.DEFAULTS={selector:".list-group a",searchBox:".search-box",onSelectItem:null},t.fn.searchList=function(i){return this.each(function(){var o=t(this),s=o.data(e),a="object"==typeof i&&i;s||o.data(e,s=new n(this,a)),"string"==typeof i&&s[i]()})},n.NAME=e,t.fn.searchList.Constructor=n,t(function(){t('[data-ride="searchList"]').searchList()})}(jQuery),function(t){"use strict";var e="zui.labelSelector",i=function(n,o){var s=this;s.name=e,s.$=t(n),o=s.options=t.extend({},i.DEFAULTS,this.$.data(),o),s.$.hide(),s.update()};i.prototype.select=function(t){t+="",this.$wrapper.find(".label.active").removeClass("active"),this.$wrapper.find('.label[data-value="'+t+'"]').addClass("active"),this.$.val(t).trigger("change")},i.prototype.update=function(){var e=this,i=e.options,n=e.$wrapper;if(!n){if(i.wrapper)n=t(i.wrapper);else{var o=e.$.next();n=o.hasClass(".label-selector")?o:t('
          ')}n.parent().length||e.$.after(n),e.$wrapper=n,n.on("click",".label",function(i){var n=e.$.val(),o=t(this).data("value");e.hasEmptyValue!==!1&&o==n&&(o=e.hasEmptyValue),e.select(o),i.preventDefault()})}n.empty();var s=e.$.val();e.hasEmptyValue=!1,e.$.children("option").each(function(){var e=t(this),o={label:e.text(),value:e.val()},a=""===o.value||"0"===o.value,r=t(i.labelTemplate||'');i.labelClass&&!a&&r.addClass(i.labelClass),i.labelCreator?r=i.labelCreator(r):(r.data("option",o).attr("data-value",o.value),a&&!o.label?r.addClass("empty").append(''):r.text(o.label).toggleClass("active",s===o.value)),n.append(r)})},i.DEFAULTS={},t.fn.labelSelector=function(n){return this.each(function(){var o=t(this),s=o.data(e),a="object"==typeof n&&n;s||o.data(e,s=new i(this,a)),"string"==typeof n&&s[n]()})},i.NAME=e,t.fn.labelSelector.Constructor=i,t(function(){t('[data-provide="labelSelector"]').labelSelector()})}(jQuery),function(t){"use strict";var e="zui.fileInput",i=t.BYTE_UNITS={B:1,KB:1024,MB:1048576,GB:1073741824,TB:1099511627776},n=t.formatBytes=function(t,e,n){return void 0===e&&(e=2),n||(n=ta.fileMaxSize&&(h.val(""),(window.bootbox||window).alert(a.fileSizeError.format(n(a.fileMaxSize)))),r.update()}),r.update()};s.prototype.getFile=function(){var t=this.$input.prop("files");return t&&t[0]},s.prototype.update=function(t){var e=this,i=e.$,o=e.getFile(),s=!o;i.toggleClass("normal",!s).toggleClass("empty",s),o?(e.oldName=o.name,i.find(".file-title").text(o.name).attr("title",o.name),i.find(".file-size").text(n(o.size)),i.find(".file-editbox").val(o.name).attr("size",o.name.length),e.options.onSelect&&e.options.onSelect(o,e)):i.find(".file-editbox").val("")},s.DEFAULTS={fileMaxSize:0,fileSizeError:"无法上传大于 {0} 的文件。"},t.fn.fileInput=function(i){return this.each(function(){var n=t(this),o=n.data(e),a="object"==typeof i&&i;o||n.data(e,o=new s(this,a)),"string"==typeof i&&o[i]()})},s.NAME=e,t.fn.fileInput.Constructor=s,t(function(){t('[data-provide="fileInput"]').fileInput()});var a="zui.fileInputList",r=function(e,i){var n=this;n.name=a;var o=n.$=t(e);i=n.options=t.extend({},r.DEFAULTS,this.$.data(),i),n.$template=o.find(".file-input").detach(),n.add()};r.prototype.add=function(){var t=this,e=t.options,i=t.$template.clone();"before"===e.appendWay?t.$.prepend(i):t.$.append(i),i.fileInput({fileMaxSize:e.eachFileMaxSize,fileSizeError:e.fileSizeError,onDelete:function(e){e.$.remove(),t.options.onDelete&&t.options.onDelete(e,t)},onSelect:function(e,i){t.add(),t.options.onSelect&&t.options.onSelect(e,i,t)}})},r.DEFAULTS={fileMaxSize:0,eachFileMaxSize:0,appendWay:"after",fileSizeError:"无法上传大于 {0} 的文件。"},t.fn.fileInputList=function(e){return this.each(function(){var i=t(this),n=i.data(a),o="object"==typeof e&&e;n||i.data(a,n=new r(this,o)),"string"==typeof e&&n[e]()})},r.NAME=a,t.fn.fileInputList.Constructor=r,t(function(){t('[data-provide="fileInputList"]').fileInputList()})}(jQuery),function(t){window.config||(window.config={}),t.createLink=window.createLink=function(t,e,n,o,s){if(o||(o=config.defaultView),s||(s=!1),n)for(n=n.split("&"),i=0;i'+d+"")}}t.val()||(time=e(s.format("hh:mm")),time=time-time%10+10,t.val(n(time)))};t.fn.timeSpanControl=function(i){return this.each(function(){var a=t(this),r=t.extend({},i,a.data()),l=a.find('[name="begin"],.control-time-begin'),h=a.find('[name="end"],.control-time-end'),c=function(){var t=l.val();if(a.find(".hide-empty-begin").toggleClass("hide",!t),t){var i=n(e(t)+30);h.find('option[value="'+i+'"]').length&&h.val(i),r.onChange&&r.onChange(h,i)}};if(a.data("timeSpanControlInit")){if(r.begin){var d=o(r.begin).format("hh:mm");l.find('option[value="'+d+'"]').length&&l.val(d),r.onChange&&r.onChange(l,d)}if(r.end){var u=o(r.end).format("hh:mm");h.find('option[value="'+u+'"]').length&&h.val(u),r.onChange&&r.onChange(h,u)}}else l.on("change",c),s(l,r.begin),s(h,r.end),a.data("timeSpanControlInit",!0);r.end||c()})},t.timeSpanControl={convertTimeToNum:e,convertNumToTime:n,initTimeSelect:s,createTime:o};var a=t.setSearchType=function(e,i){var n=t("#searchType");e||(e=n.val()),e=e||"bug",n.val(e);var o=t("#searchTypeMenu");o.find("li.selected").removeClass("selected");var s=o.find('a[data-value="'+e+'"]'),a=s.text();s.parent().addClass("selected"),t("#searchTypeName").text(a),i||t("#searchInput").focus()};t.gotoObject=function(e,i){e||(e=t("#searchType").val()),i||(i=t("#searchInput").val()),i&&e&&(window.location.href=t.createLink(e,"testsuite"===e?"library":"view","id="+i))},t(function(){a(null,!0),t(document).on("keydown",function(e){e.ctrlKey&&71===e.keyCode&&(t("#searchInput").val("").focus(),e.stopPropagation(),e.preventDefault())})}),t.removeAnchor=window.removeAnchor=function(t){var e=t.lastIndexOf("#");return e>-1?t.substr(0,e):t},t.refreshPage=function(){location.href=removeAnchor(location.href)},t.selectLang=window.selectLang=function(e){t.cookie("lang",e,{expires:config.cookieLife,path:config.webRoot}),t.ajaxSendScore("selectLang"),t.refreshPage()},t.selectTheme=window.selectTheme=function(e){t.cookie("theme",e,{expires:config.cookieLife,path:config.webRoot}),t.ajaxSendScore("selectTheme"),t.refreshPage()},t.chosenDefaultOptions={middle_highlight:!0,disable_search_threshold:1,compact_search:!0,allow_single_deselect:!0,placeholder_text_single:" ",placeholder_text_multiple:" ",search_contains:!0,drop_direction:function(){var e=t(this.container).closest(".table-responsive:not(.scroll-none)");if(e.length){if(this.drop_directionFixed)return this.drop_directionFixed;var i="down",n=this.container.find(".chosen-drop"),o=this.container.position(),s=n.outerHeight();return o.top>=s&&o.top+s{page}/{totalPage}
          ',"next_icon","last_icon"],onPageChange:function(e,i){e.recPerPage!==i.recPerPage&&t.cookie(this.options.pageCookie,e.recPerPage,{expires:config.cookieLife,path:config.webRoot}),e.recPerPage!==i.recPerPage&&(window.location.href=this.createLink())}}),t.zui.Messager.DEFAULTS.cssClass="messagger-zt",t.fn.reverseOrder=function(){return this.each(function(){var e=t(this);e.prependTo(e.parent())})};var r=function(e,i){var n=t(e);i=t.extend({},n.data(),i);var o=n.find(".histories-list"),s=!0,a=!1;n.on("click",".btn-reverse",function(){o.children("li").reverseOrder(),s=!s,t(this).find(".icon").toggleClass("icon-arrow-up",s).toggleClass("icon-arrow-down",!s)}).on("click",".btn-expand-all",function(){var e=t(this).find(".icon");a=!a,e.toggleClass("icon-plus",!a).toggleClass("icon-minus",a),o.children("li").toggleClass("show-changes",a)}).on("click",".btn-expand",function(){t(this).closest("li").toggleClass("show-changes")}).on("click",".btn-strip",function(){var e=t(this),n=e.find(".icon"),o=n.hasClass("icon-code");n.toggleClass("icon-code",!o).toggleClass("icon-text",o),e.attr("title",o?i.original:i.textdiff),e.closest("li").toggleClass("show-original",o)}),o.find(".btn-strip").attr("title",i.original);var r=n.find(".modal-comment").modal({show:!1}).on("shown.zui.modal",function(){var t=r.find("#comment");t.length&&(t.focus(),window.editor&&window.editor.comment&&window.editor.comment.focus())}).on("show.zui.modal",function(){var e=r.find("#comment");e.length&&!e.data("keditor")&&t.fn.kindeditor&&e.kindeditor()});n.on("click",".btn-comment",function(t){r.modal("toggle"),t.preventDefault()}).on("click",".btn-edit-comment,.btn-hide-form",function(){t(this).closest("li").toggleClass("show-form")});var l=n.find(".comment-edit-form");l.ajaxForm({success:function(t,e,i,n){setTimeout(function(){l.closest("li").removeClass("show-form")},2e3)}})};t.fn.histories=function(t){return this.each(function(){r(this,t)})},t(function(){t(".histories").histories()});var l=0,h=0;t.toggleSidebar=function(e){var i=t("#sidebar");if(i.length){var n=t("main");if(void 0===e)e=n.hasClass("hide-sidebar");else if(e&&!n.hasClass("hide-sidebar"))return;n.toggleClass("hide-sidebar",!e),clearTimeout(l),t.zui.store.set(h,e);var o=i.children(".cell"),s={overflow:"visible",maxHeight:"initial"};e?(i.addClass("showing"),l=setTimeout(function(){i.removeClass("showing"),i.trigger("sidebar.toggle",e)},210)):(i.trigger("sidebar.toggle",e),t(window).width()<1900&&(s={overflow:"hidden",maxHeight:t(window).height()-45})),o.css(s)}};var c=t.initSidebar=function(){var e=t("#sidebar");if(e.length){if(e.data("init"))return!0;h="sidebar:"+(e.data("id")||config.currentModule+"/"+config.currentMethod);var i=t("main");i.on("click",".sidebar-toggle",function(){t.toggleSidebar(i.hasClass("hide-sidebar"))});var n=t.zui.store.get(h,e.data("hide")!==!1);n===!1&&e.addClass("no-animate"),t.toggleSidebar(n),n===!1&&setTimeout(function(){e.removeClass("no-animate")},500);var o=function(){var i=e.find(".sidebar-toggle");if(i.length){var n=i[0].getBoundingClientRect(),o=t(window).height(),s=Math.max(0,Math.floor(Math.min(o-40,n.top+n.height)-Math.max(n.top,0))/2)+(n.top<0?0-n.top:0);i.find(".icon").css("top",s)}};return o(),e.on("sidebar.toggle",o),t(window).on("resize",o).on("scroll",o),e.data("init",1),!0}};c()||t(c),t.toggleQueryBox=function(e,i){var n=t(i||"#queryBox");n.length&&(void 0===e&&(e=!n.hasClass("show")),n.toggleClass("show",!!e),n.data("init")||(n.addClass("load-indicator loading").data("init",1),t.get(t.createLink("search","buildForm"),function(t){n.html(t).removeClass("loading")})),t(".querybox-toggle").toggleClass("querybox-opened",e))},t(function(){var e=t("#queryBox");e.length&&(t(document).on("click",".querybox-toggle",function(){t.toggleQueryBox()}),e.hasClass("show")&&t.toggleQueryBox(!0))}),t.extend(t.fn.colorPicker.Constructor.DEFAULTS,{colors:["#3DA7F5","#75C941","#2DBDB2","#797EC9","#FFAF38","#FF4E3E"]}),window.setCheckedCookie=function(){var e=[],i=t('#mainContent .main-table tbody>tr input[type="checkbox"]:checked');i.each(function(){var i=parseInt(t(this).val(),10);NaN!==i&&e.push(i)}),t.cookie("checkedItem",e.join(","),{expires:config.cookieLife,path:config.webRoot})},t.extend(t.fn.modal.bs.Constructor.DEFAULTS,{scrollInside:!0,backdrop:"static",headerHeight:100}),t.extend(t.zui.ModalTrigger.DEFAULTS,{scrollInside:!0,backdrop:"static",headerHeight:40}),t.fn.initIframeModal=function(){return this.each(function(){var e=t(this);if(!e.parents('[data-ride="table"],.skip-iframe-modal').length){var i={type:"iframe"};e.hasClass("export")&&t.extend(i,{width:800,shown:setCheckedCookie},e.data()),e.modalTrigger(i)}})},t(function(){t("a.iframe,.export").initIframeModal()});var d=function(){var e,i,n=t(this),o=t.extend({limitSize:40,suffix:"…"},n.data()),s=n.text();if(s.length>o.limitSize){e=s,i=s.substr(0,o.limitSize)+o.suffix,n.text(i).addClass("limit-text-on");var a=o.toggleBtn?t(o.toggleBtn):n.next(".text-limit-toggle");a.text(a.data("textExpand")),a.on("click",function(){var t=n.toggleClass("limit-text-on").hasClass("limit-text-on");n.text(t?i:e),a.text(a.data(t?"textExpand":"textCollapse"))})}else(o.toggleBtn?t(o.toggleBtn):n.next(".text-limit-toggle")).hide()};t.fn.textLimit=function(){return this.each(d)},t(function(){t(".text-limit").textLimit()}),t.fixedTableHead=window.fixedTableHead=function(e,i){var n=t(e);if(n.is("table")||(n=n.find("table")),n.length){var o=t(i||window),s=null,a=function(){var e=n.children("thead"),i=e[0].getBoundingClientRect(),o=n.next(".fixed-head-table");if(i.top<0){var a=e.width();if(o.length){if(s!==a){s=a;var r=o.find("th");e.find("th").each(function(e){r.eq(e).width(t(this).width())})}}else{var o=t("
          ").addClass(n.attr("class")),l=e.clone(),r=l.find("th");e.find("th").each(function(e){r.eq(e).width(t(this).width())}),o.append(l).insertAfter(n)}o.css({left:i.left,width:i.width}).show()}else o.hide()};o.on("scroll",a).on("resize",a),a()}},t(document).on("click","tr[data-url]",function(){var e=t(this),i=e.data("href")||e.data("url");i&&(window.location.href=i)}),"yes"===config.onlybody&&self===parent&&(window.location.href=window.location.href.replace("?onlybody=yes","").replace("&onlybody=yes","")),t(function(){t("body").addClass("m-{currentModule}-{currentMethod}".format(config))});var u,p,f,g,m,v=function(){u||(u=t("#subNavbar"),p=t("#pageNav"),f=t("#pageActions"),g=u.children(".nav"),m=g.outerWidth());var e=u.outerWidth(),i=p.outerWidth()||0,n=f.outerWidth()||0;if(i=i?i+15:0,n=n?n+15:0,!i&&!n)return void g.css({maxWidth:null,left:null,position:"static"});var o=Math.max(300,e-i-n),s=Math.min(o,m),a=(e-s)/2,r=i&&a.btn-toolbar");if(e.length){var i,n,o=!1,s=null,a=e.children(),r=a.length;for(a.each(function(e){i=t(this),n=i.is(".divider"),n&&!s&&i.hide(),o||n||(o=!0),s=n?null:i,!n||e!==r-1&&0!==e||i.hide()});i.length&&i.is(".divider");)i=i.hide().prev();o||e.hide()}};t(function(){t(".input-group,.btn-group").fixInputGroup(),k()}),window.holders&&t.each(window.holders,function(e){var i=t("#"+e);i.length&&i.is("input")&&i.attr("placeholder",window.holders[e])});var T=function(){var e,i="en"==config.clientLang?"http://www.zentao.pm/book/zentaomanual/8.html?fullScreen=zentao":"http://www.zentao.net/book/zentaopmshelp.html?fullScreen=zentao",n=t("#navbar > .nav").first(),o=1e4,s=function(){clearTimeout(e),t("#helpContent").removeClass("show-error")},a=t.openHelp=function(){s(),n.children("li.active:not(#helpMenuItem)").removeClass("active").addClass("close-help-tab"),t("#helpMenuItem").addClass("active");var a=t("#helpContent");if(a.length){if(t("body").hasClass("show-help-tab"))return void t("#helpIframe").get(0).contentWindow.location.replace(i)}else{a=t('

          '+lang.timeout+'

          '+i+'

          '),t("#header").after(a);var r=t("#helpIframe").get(0);e=setTimeout(function(){t("#helpContent").addClass("show-error")},o),r.onload=r.onreadystatechange=function(){this.readyState&&"complete"!=this.readyState||s()}}t("body").addClass("show-help-tab")},r=t.closeHelp=function(){t("body").removeClass("show-help-tab"),t("#helpMenuItem").removeClass("active"),n.find("li.close-help-tab").removeClass("close-help-tab").addClass("active").find("a").focus()};t(document).on("click",".open-help-tab",function(e){var i=t("#helpMenuItem");i.length||(i=t('
        • '+t(this).text()+'
        • '),n.append('
        • ').append(i)),a(),e.preventDefault()}).on("click",".close-help-tab",function(t){r(),t.stopPropagation(),t.preventDefault()})};t(T),t(function(){var e=t(".table-responsive"),i=function(){e.each(function(){this.scrollHeight-3<=this.clientHeight&&this.scrollWidth-3<=this.clientWidth?t(this).addClass("scroll-none").css("overflow","visible"):t(this).removeClass("scroll-none").css("overflow","auto")})};e.length&&(i(),t(window).on("resize",i))});var S=function(){var e=this.value?this.scrollHeight+2+"px":"32px";this.style.height="auto",this.style.height=e,t(this).closest("tr").find("textarea").each(function(){this.style.height=e})};t.autoResizeTextarea=function(e){t(e).each(S)},t(function(){t("textarea.autosize").each(S),t(document).on("input keyup paste change","textarea.autosize",S)}),t(function(){var e=t("#dropMenu");e.length&&e.on("click",".toggle-right-col",function(t){e.toggleClass("show-right-col"),t.stopPropagation(),t.preventDefault()})});var D="undefined"!=typeof InstallTrigger;t.zui.browser.firefox=D,t("html").toggleClass("is-firefox",D).toggleClass("not-firefox",!D),t(function(){var e=t("#mainContent>.main-col"),i=e.children(".main-actions"),n=i.prev();if(i.length&&n.length){t('
          ').css("height",i.outerHeight()).insertAfter(i);var o=function(){var e=n[0].getBoundingClientRect(),o=e.top+e.height+120>t(window).height();t("body").toggleClass("main-actions-fixed",o),o&&i.width(n.width())};t.resetToolbarPosition=o,o(),t(window).on("resize scroll",o)}}),t(document).on("show.zui.modal",function(e){t("body.body-modal").length&&window.parent&&window.parent!==window&&t(e.target).is(".modal")&&window.parent.$("body").addClass("hide-modal-close")}).on("hidden.zui.modal",function(){t("body.body-modal").length&&window.parent&&window.parent!==window&&window.parent.$("body").removeClass("hide-modal-close")})}(jQuery); \ No newline at end of file +}},success:function(i,n,o){if((d&&d(i,n,o,l))!==!1){try{"string"==typeof i&&(i=JSON.parse(i))}catch(a){}if(null===i||"object"!=typeof i)return i?alert(i):s("No response.","danger");var h=r.responser?t(r.responser):l.find(".form-responser");h.length||(h=t("#responser"));var c=i.message,p=function(){var n=i.callback;if(n){var o=n.indexOf("("),s=(o>0?n.substr(0,o):n).split("."),a=e,r=s[0];s.length>1&&(r=s[1],"top"===s[0]?a=e.top:"parent"===s[0]&&(a=e.parent));var h=a[r];if(t.isFunction(h)){var c=[];return o>0&&")"==n[n.length-1]&&(c=t.parseJSON("["+n.substring(o+1,n.length-1)+"]")),c.push(i),h.apply(l,c)}}};if("success"===i.result){if(l.enableForm(!0,1),c){var f=l.find('[type="submit"]'),g=!1;f.length&&(f.popover({container:"body",trigger:"manual",content:c,tipClass:"popover-in-modal popover-success popover-form-result",placement:i.placement||r.popoverPlacement||"right"}).popover("show"),setTimeout(function(){f.popover("destroy")},r.popoverTime||2e3),g=!0),h.length&&(h.html(''+c+"").show().delay(3e3).fadeOut(100),g=!0),g||s(c,"success")}if(u)return u(i,!0,l);if((r.closeModal||i.closeModal)&&setTimeout(t.zui.closeModal,r.closeModalTime||2e3),p()===!1)return;var m=r.locate||i.locate;if(m)if("loadInModal"==m){var v=t(".modal");setTimeout(function(){v.load(v.attr("ref"),function(){t(this).find(".modal-dialog").css("width",t(this).data("width")),t.zui.ajustModalPosition()})},1e3)}else{var y="reload"==m?e.location.href:m;setTimeout(function(){e.location.href=y},1200)}var b=r.ajaxReload||i.ajaxReload;if(b){var w=t(b);w.length&&w.load(e.location.href+" "+b,function(){w.find('[data-toggle="modal"]').modalTrigger()})}}else{if(l.enableForm(),"string"==typeof c)h.length?h.html(''+c+"").show().delay(3e3).fadeOut(100):s(c,"danger");else if("object"==typeof c){var x=!1,C=[];t.each(c,function(e,i){var n=t.isArray(i)?i.join(";"):i,o=t("#"+e);if(!o.length)return void C.push(n);var s=e+"Label",a=t("#"+s);if(!a.length){var r=o.closest(".input-group").length,l=o.closest("td").length;a=t('
          ').appendTo(l?o.closest("td"):r?o.closest(".input-group").parent():o.parent())}a.empty().append(n),o.addClass("has-error");var h=function(){var e=t("#"+s);if(e.length)return e.remove(),o.removeClass("has-error"),!0};o.on("change input mousedown",h);var c=t("#"+e+"_chosen");c.length&&c.find(".chosen-single,.chosen-choices").addClass("has-error").on("mousedown",function(){h()===!0&&t(this).removeClass("has-error")}),x||(o.focus(),x=!0)}),C.length&&s(C.join(";"),"danger")}if(u)return u(i,!1,l);if(p()===!1)return}}},error:function(t,i,n){if((c&&c(t,i,n,l))!==!1){l.enableForm();var o="timeout"==i||"error"==i?e.lang?e.lang.timeout:i:t.responseText+i+n;s(o,"danger")}}},r),l._ajaxForm(r).data("zui.ajaxform",!0),l.on("click","[data-form-action]",function(){l.attr("action",t(this).data("formAction")).submit()})},t.fn.ajaxForm=function(e){return this.each(function(){t.ajaxForm(this,e)})},t.fn.setInputRequired=function(){return this.each(function(){var e=t(this),i=e.parent();i.is(".input-control,td")?i.addClass("required"):e.is(".chosen")?e.attr("required",null).next(".chosen-container").addClass("required"):i.addClass("required"),e.attr("required",null);var n=i.closest(".input-group");n.length&&1===n.find(".required,input[required],select[required]").length&&n.addClass("required")})},t(function(){t('.form-ajax,form[data-type="ajax"]').ajaxForm(),setTimeout(function(){var i=e.config.requiredFields,n=t("form");i&&(i=i.split(",")),i&&i.length&&t.each(i,function(t,e){n.find("#"+e).attr("required","required")}),n.find("input[required],select[required],textarea[required]").setInputRequired()},400),t("#hiddenwin"),t('form[target="hiddenwin"]').on("submit",function(){var e=t(this);e.data("zui.ajaxform")||e.enableForm(!1).data("disabledTime",(new Date).getTime())}).on("click",function(){var e=t(this),i=e.data("disabledTime");i&&(new Date).getTime()-i>1e4&&e.enableForm(!0).data("disabledTime",null)})})}(jQuery,window,void 0),function(t){"use strict";var e="zui.searchList",i=function(t,e){if(t&&t.length)for(var i=0;i
          ').append(a)),i.$menu.append(a),i.$menu.removeClass("loading"),i.isLoaded=!0,e&&e(!0)},error:function(){i.$menu.removeClass("loading").append('
          '+(n.errorText||window.lang&&window.lang.timeout)+"
          "),e&&e(!1)}},n.ajax))},n.prototype.scrollTo=function(t){t.length&&t[0].scrollIntoView({behavior:"smooth"})},n.prototype.getItems=function(){return this.$.find(this.options.selector).addClass("search-list-item")},n.prototype.getActiveItem=function(){return this.getItems().filter(".active:first")},n.prototype.search=function(e){var n=this,o=void 0===e||null===e||""===e;n.$.toggleClass("has-search-text",!o);var s=n.getItems().removeClass("active");if(o)s.removeClass("hidden");else{var a=t.trim(e).split(" ");s.each(function(){var e=t(this),n=e.text()+" "+(e.data("key")||e.data("filter"));e.toggleClass("hidden",!i(a,n))})}n.scrollTo(s.not(".hidden").first().addClass("active"))},n.DEFAULTS={selector:".list-group a:not(.not-list-item)",searchBox:".search-box",onSelectItem:null},t.fn.searchList=function(i){return this.each(function(){var o=t(this),s=o.data(e),a="object"==typeof i&&i;s||o.data(e,s=new n(this,a)),"string"==typeof i&&s[i]()})},n.NAME=e,t.fn.searchList.Constructor=n,t(function(){t('[data-ride="searchList"]').searchList()})}(jQuery),function(t){"use strict";var e="zui.labelSelector",i=function(n,o){var s=this;s.name=e,s.$=t(n),o=s.options=t.extend({},i.DEFAULTS,this.$.data(),o),s.$.hide(),s.update()};i.prototype.select=function(t){t+="",this.$wrapper.find(".label.active").removeClass("active"),this.$wrapper.find('.label[data-value="'+t+'"]').addClass("active"),this.$.val(t).trigger("change")},i.prototype.update=function(){var e=this,i=e.options,n=e.$wrapper;if(!n){if(i.wrapper)n=t(i.wrapper);else{var o=e.$.next();n=o.hasClass(".label-selector")?o:t('
          ')}n.parent().length||e.$.after(n),e.$wrapper=n,n.on("click",".label",function(i){var n=e.$.val(),o=t(this).data("value");e.hasEmptyValue!==!1&&o==n&&(o=e.hasEmptyValue),e.select(o),i.preventDefault()})}n.empty();var s=e.$.val();e.hasEmptyValue=!1,e.$.children("option").each(function(){var e=t(this),o={label:e.text(),value:e.val()},a=""===o.value||"0"===o.value,r=t(i.labelTemplate||'');i.labelClass&&!a&&r.addClass(i.labelClass),i.labelCreator?r=i.labelCreator(r):(r.data("option",o).attr("data-value",o.value),a&&!o.label?r.addClass("empty").append(''):r.text(o.label).toggleClass("active",s===o.value)),n.append(r)})},i.DEFAULTS={},t.fn.labelSelector=function(n){return this.each(function(){var o=t(this),s=o.data(e),a="object"==typeof n&&n;s||o.data(e,s=new i(this,a)),"string"==typeof n&&s[n]()})},i.NAME=e,t.fn.labelSelector.Constructor=i,t(function(){t('[data-provide="labelSelector"]').labelSelector()})}(jQuery),function(t){"use strict";var e="zui.fileInput",i=t.BYTE_UNITS={B:1,KB:1024,MB:1048576,GB:1073741824,TB:1099511627776},n=t.formatBytes=function(t,e,n){return void 0===e&&(e=2),n||(n=ta.fileMaxSize&&(h.val(""),(window.bootbox||window).alert(a.fileSizeError.format(n(a.fileMaxSize)))),r.update()}),r.update()};s.prototype.getFile=function(){var t=this.$input.prop("files");return t&&t[0]},s.prototype.update=function(t){var e=this,i=e.$,o=e.getFile(),s=!o;i.toggleClass("normal",!s).toggleClass("empty",s),o?(e.oldName=o.name,i.find(".file-title").text(o.name).attr("title",o.name),i.find(".file-size").text(n(o.size)),i.find(".file-editbox").val(o.name).attr("size",o.name.length),e.options.onSelect&&e.options.onSelect(o,e)):i.find(".file-editbox").val("")},s.DEFAULTS={fileMaxSize:0,fileSizeError:"无法上传大于 {0} 的文件。"},t.fn.fileInput=function(i){return this.each(function(){var n=t(this),o=n.data(e),a="object"==typeof i&&i;o||n.data(e,o=new s(this,a)),"string"==typeof i&&o[i]()})},s.NAME=e,t.fn.fileInput.Constructor=s,t(function(){t('[data-provide="fileInput"]').fileInput()});var a="zui.fileInputList",r=function(e,i){var n=this;n.name=a;var o=n.$=t(e);i=n.options=t.extend({},r.DEFAULTS,this.$.data(),i),n.$template=o.find(".file-input").detach(),n.add()};r.prototype.add=function(){var t=this,e=t.options,i=t.$template.clone();"before"===e.appendWay?t.$.prepend(i):t.$.append(i),i.fileInput({fileMaxSize:e.eachFileMaxSize,fileSizeError:e.fileSizeError,onDelete:function(e){e.$.remove(),t.options.onDelete&&t.options.onDelete(e,t)},onSelect:function(e,i){t.add(),t.options.onSelect&&t.options.onSelect(e,i,t)}})},r.DEFAULTS={fileMaxSize:0,eachFileMaxSize:0,appendWay:"after",fileSizeError:"无法上传大于 {0} 的文件。"},t.fn.fileInputList=function(e){return this.each(function(){var i=t(this),n=i.data(a),o="object"==typeof e&&e;n||i.data(a,n=new r(this,o)),"string"==typeof e&&n[e]()})},r.NAME=a,t.fn.fileInputList.Constructor=r,t(function(){t('[data-provide="fileInputList"]').fileInputList()})}(jQuery),function(t){window.config||(window.config={}),t.createLink=window.createLink=function(t,e,n,o,s){if(o||(o=config.defaultView),s||(s=!1),n)for(n=n.split("&"),i=0;i'+d+"")}}t.val()||(time=e(s.format("hh:mm")),time=time-time%10+10,t.val(n(time)))};t.fn.timeSpanControl=function(i){return this.each(function(){var a=t(this),r=t.extend({},i,a.data()),l=a.find('[name="begin"],.control-time-begin'),h=a.find('[name="end"],.control-time-end'),c=function(){var t=l.val();if(a.find(".hide-empty-begin").toggleClass("hide",!t),t){var i=n(e(t)+30);h.find('option[value="'+i+'"]').length&&h.val(i),r.onChange&&r.onChange(h,i)}};if(a.data("timeSpanControlInit")){if(r.begin){var d=o(r.begin).format("hh:mm");l.find('option[value="'+d+'"]').length&&l.val(d),r.onChange&&r.onChange(l,d)}if(r.end){var u=o(r.end).format("hh:mm");h.find('option[value="'+u+'"]').length&&h.val(u),r.onChange&&r.onChange(h,u)}}else l.on("change",c),s(l,r.begin),s(h,r.end),a.data("timeSpanControlInit",!0);r.end||c()})},t.timeSpanControl={convertTimeToNum:e,convertNumToTime:n,initTimeSelect:s,createTime:o};var a=t.setSearchType=function(e,i){var n=t("#searchType");e||(e=n.val()),e=e||"bug",n.val(e);var o=t("#searchTypeMenu");o.find("li.selected").removeClass("selected");var s=o.find('a[data-value="'+e+'"]'),a=s.text();s.parent().addClass("selected"),t("#searchTypeName").text(a),i||t("#searchInput").focus()};t.gotoObject=function(e,i){e||(e=t("#searchType").val()),i||(i=t("#searchInput").val()),i&&e&&(window.location.href=t.createLink(e,"testsuite"===e?"library":"view","id="+i))},t(function(){a(null,!0),t(document).on("keydown",function(e){e.ctrlKey&&71===e.keyCode&&(t("#searchInput").val("").focus(),e.stopPropagation(),e.preventDefault())})}),t.removeAnchor=window.removeAnchor=function(t){var e=t.lastIndexOf("#");return e>-1?t.substr(0,e):t},t.refreshPage=function(){location.href=removeAnchor(location.href)},t.selectLang=window.selectLang=function(e){t.cookie("lang",e,{expires:config.cookieLife,path:config.webRoot}),t.ajaxSendScore("selectLang"),t.refreshPage()},t.selectTheme=window.selectTheme=function(e){t.cookie("theme",e,{expires:config.cookieLife,path:config.webRoot}),t.ajaxSendScore("selectTheme"),t.refreshPage()},t.chosenDefaultOptions={middle_highlight:!0,disable_search_threshold:1,compact_search:!0,allow_single_deselect:!0,placeholder_text_single:" ",placeholder_text_multiple:" ",search_contains:!0,drop_direction:function(){var e=t(this.container).closest(".table-responsive:not(.scroll-none)");if(e.length){if(this.drop_directionFixed)return this.drop_directionFixed;var i="down",n=this.container.find(".chosen-drop"),o=this.container.position(),s=n.outerHeight();return o.top>=s&&o.top+s{page}/{totalPage}
          ',"next_icon","last_icon"],onPageChange:function(e,i){e.recPerPage!==i.recPerPage&&t.cookie(this.options.pageCookie,e.recPerPage,{expires:config.cookieLife,path:config.webRoot}),e.recPerPage!==i.recPerPage&&(window.location.href=this.createLink())}}),t.zui.Messager.DEFAULTS.cssClass="messagger-zt",t.fn.reverseOrder=function(){return this.each(function(){var e=t(this);e.prependTo(e.parent())})};var r=function(e,i){var n=t(e);i=t.extend({},n.data(),i);var o=n.find(".histories-list"),s=!0,a=!1;n.on("click",".btn-reverse",function(){o.children("li").reverseOrder(),s=!s,t(this).find(".icon").toggleClass("icon-arrow-up",s).toggleClass("icon-arrow-down",!s)}).on("click",".btn-expand-all",function(){var e=t(this).find(".icon");a=!a,e.toggleClass("icon-plus",!a).toggleClass("icon-minus",a),o.children("li").toggleClass("show-changes",a)}).on("click",".btn-expand",function(){t(this).closest("li").toggleClass("show-changes")}).on("click",".btn-strip",function(){var e=t(this),n=e.find(".icon"),o=n.hasClass("icon-code");n.toggleClass("icon-code",!o).toggleClass("icon-text",o),e.attr("title",o?i.original:i.textdiff),e.closest("li").toggleClass("show-original",o)}),o.find(".btn-strip").attr("title",i.original);var r=n.find(".modal-comment").modal({show:!1}).on("shown.zui.modal",function(){var t=r.find("#comment");t.length&&(t.focus(),window.editor&&window.editor.comment&&window.editor.comment.focus())}).on("show.zui.modal",function(){var e=r.find("#comment");e.length&&!e.data("keditor")&&t.fn.kindeditor&&e.kindeditor()});n.on("click",".btn-comment",function(t){r.modal("toggle"),t.preventDefault()}).on("click",".btn-edit-comment,.btn-hide-form",function(){t(this).closest("li").toggleClass("show-form")});var l=n.find(".comment-edit-form");l.ajaxForm({success:function(t,e,i,n){setTimeout(function(){l.closest("li").removeClass("show-form")},2e3)}})};t.fn.histories=function(t){return this.each(function(){r(this,t)})},t(function(){t(".histories").histories()});var l=0,h=0;t.toggleSidebar=function(e){var i=t("#sidebar");if(i.length){var n=t("main");if(void 0===e)e=n.hasClass("hide-sidebar");else if(e&&!n.hasClass("hide-sidebar"))return;n.toggleClass("hide-sidebar",!e),clearTimeout(l),t.zui.store.set(h,e);var o=i.children(".cell"),s={overflow:"visible",maxHeight:"initial"};e?(i.addClass("showing"),l=setTimeout(function(){i.removeClass("showing"),i.trigger("sidebar.toggle",e)},210)):(i.trigger("sidebar.toggle",e),t(window).width()<1900&&(s={overflow:"hidden",maxHeight:t(window).height()-45})),o.css(s)}};var c=t.initSidebar=function(){var e=t("#sidebar");if(e.length){if(e.data("init"))return!0;h="sidebar:"+(e.data("id")||config.currentModule+"/"+config.currentMethod);var i=t("main");i.on("click",".sidebar-toggle",function(){t.toggleSidebar(i.hasClass("hide-sidebar"))});var n=t.zui.store.get(h,e.data("hide")!==!1);n===!1&&e.addClass("no-animate"),t.toggleSidebar(n),n===!1&&setTimeout(function(){e.removeClass("no-animate")},500);var o=function(){var i=e.find(".sidebar-toggle");if(i.length){var n=i[0].getBoundingClientRect(),o=t(window).height(),s=Math.max(0,Math.floor(Math.min(o-40,n.top+n.height)-Math.max(n.top,0))/2)+(n.top<0?0-n.top:0);i.find(".icon").css("top",s)}};return o(),e.on("sidebar.toggle",o),t(window).on("resize",o).on("scroll",o),e.data("init",1),!0}};c()||t(c),t.toggleQueryBox=function(e,i){var n=t(i||"#queryBox");n.length&&(void 0===e&&(e=!n.hasClass("show")),n.toggleClass("show",!!e),n.data("init")||(n.addClass("load-indicator loading").data("init",1),t.get(t.createLink("search","buildForm"),function(t){n.html(t).removeClass("loading")})),t(".querybox-toggle").toggleClass("querybox-opened",e))},t(function(){var e=t("#queryBox");e.length&&(t(document).on("click",".querybox-toggle",function(){t.toggleQueryBox()}),e.hasClass("show")&&t.toggleQueryBox(!0))}),t.extend(t.fn.colorPicker.Constructor.DEFAULTS,{colors:["#3DA7F5","#75C941","#2DBDB2","#797EC9","#FFAF38","#FF4E3E"]}),window.setCheckedCookie=function(){var e=[],i=t('#mainContent .main-table tbody>tr input[type="checkbox"]:checked');i.each(function(){var i=parseInt(t(this).val(),10);NaN!==i&&e.push(i)}),t.cookie("checkedItem",e.join(","),{expires:config.cookieLife,path:config.webRoot})},t.extend(t.fn.modal.bs.Constructor.DEFAULTS,{scrollInside:!0,backdrop:"static",headerHeight:100}),t.extend(t.zui.ModalTrigger.DEFAULTS,{scrollInside:!0,backdrop:"static",headerHeight:40}),t.fn.initIframeModal=function(){return this.each(function(){var e=t(this);if(!e.parents('[data-ride="table"],.skip-iframe-modal').length){var i={type:"iframe"};e.hasClass("export")&&t.extend(i,{width:800,shown:setCheckedCookie},e.data()),e.modalTrigger(i)}})},t(function(){t("a.iframe,.export").initIframeModal()});var d=function(){var e,i,n=t(this),o=t.extend({limitSize:40,suffix:"…"},n.data()),s=n.text();if(s.length>o.limitSize){e=s,i=s.substr(0,o.limitSize)+o.suffix,n.text(i).addClass("limit-text-on");var a=o.toggleBtn?t(o.toggleBtn):n.next(".text-limit-toggle");a.text(a.data("textExpand")),a.on("click",function(){var t=n.toggleClass("limit-text-on").hasClass("limit-text-on");n.text(t?i:e),a.text(a.data(t?"textExpand":"textCollapse"))})}else(o.toggleBtn?t(o.toggleBtn):n.next(".text-limit-toggle")).hide()};t.fn.textLimit=function(){return this.each(d)},t(function(){t(".text-limit").textLimit()}),t.fixedTableHead=window.fixedTableHead=function(e,i){var n=t(e);if(n.is("table")||(n=n.find("table")),n.length){var o=t(i||window),s=null,a=function(){var e=n.children("thead"),i=e[0].getBoundingClientRect(),o=n.next(".fixed-head-table");if(i.top<0){var a=e.width();if(o.length){if(s!==a){s=a;var r=o.find("th");e.find("th").each(function(e){r.eq(e).width(t(this).width())})}}else{var o=t("
          ").addClass(n.attr("class")),l=e.clone(),r=l.find("th");e.find("th").each(function(e){r.eq(e).width(t(this).width())}),o.append(l).insertAfter(n)}o.css({left:i.left,width:i.width}).show()}else o.hide()};o.on("scroll",a).on("resize",a),a()}},t(document).on("click","tr[data-url]",function(){var e=t(this),i=e.data("href")||e.data("url");i&&(window.location.href=i)}),"yes"===config.onlybody&&self===parent&&(window.location.href=window.location.href.replace("?onlybody=yes","").replace("&onlybody=yes","")),t(function(){t("body").addClass("m-{currentModule}-{currentMethod}".format(config))});var u,p,f,g,m,v=function(){u||(u=t("#subNavbar"),p=t("#pageNav"),f=t("#pageActions"),g=u.children(".nav"),m=g.outerWidth());var e=u.outerWidth(),i=p.outerWidth()||0,n=f.outerWidth()||0;if(i=i?i+15:0,n=n?n+15:0,!i&&!n)return void g.css({maxWidth:null,left:null,position:"static"});var o=Math.max(300,e-i-n),s=Math.min(o,m),a=(e-s)/2,r=i&&a.btn-toolbar");if(e.length){var i,n,o=!1,s=null,a=e.children(),r=a.length;for(a.each(function(e){i=t(this),n=i.is(".divider"),n&&!s&&i.hide(),o||n||(o=!0),s=n?null:i,!n||e!==r-1&&0!==e||i.hide()});i.length&&i.is(".divider");)i=i.hide().prev();o||e.hide()}};t(function(){t(".input-group,.btn-group").fixInputGroup(),k()}),window.holders&&t.each(window.holders,function(e){var i=t("#"+e);i.length&&i.is("input")&&i.attr("placeholder",window.holders[e])});var T=function(){var e,i="en"==config.clientLang?"http://www.zentao.pm/book/zentaomanual/8.html?fullScreen=zentao":"http://www.zentao.net/book/zentaopmshelp.html?fullScreen=zentao",n=t("#navbar > .nav").first(),o=1e4,s=function(){clearTimeout(e),t("#helpContent").removeClass("show-error")},a=t.openHelp=function(){s(),n.children("li.active:not(#helpMenuItem)").removeClass("active").addClass("close-help-tab"),t("#helpMenuItem").addClass("active");var a=t("#helpContent");if(a.length){if(t("body").hasClass("show-help-tab"))return void t("#helpIframe").get(0).contentWindow.location.replace(i)}else{a=t('

          '+lang.timeout+'

          '+i+'

          '),t("#header").after(a);var r=t("#helpIframe").get(0);e=setTimeout(function(){t("#helpContent").addClass("show-error")},o),r.onload=r.onreadystatechange=function(){this.readyState&&"complete"!=this.readyState||s()}}t("body").addClass("show-help-tab")},r=t.closeHelp=function(){t("body").removeClass("show-help-tab"),t("#helpMenuItem").removeClass("active"),n.find("li.close-help-tab").removeClass("close-help-tab").addClass("active").find("a").focus()};t(document).on("click",".open-help-tab",function(e){var i=t("#helpMenuItem");i.length||(i=t('
        • '+t(this).text()+'
        • '),n.append('
        • ').append(i)),a(),e.preventDefault()}).on("click",".close-help-tab",function(t){r(),t.stopPropagation(),t.preventDefault()})};t(T),t(function(){var e=t(".table-responsive"),i=function(){e.each(function(){this.scrollHeight-3<=this.clientHeight&&this.scrollWidth-3<=this.clientWidth?t(this).addClass("scroll-none").css("overflow","visible"):t(this).removeClass("scroll-none").css("overflow","auto")})};e.length&&(i(),t(window).on("resize",i))});var S=function(){var e=this.value?this.scrollHeight+2+"px":"32px";this.style.height="auto",this.style.height=e,t(this).closest("tr").find("textarea").each(function(){this.style.height=e})};t.autoResizeTextarea=function(e){t(e).each(S)},t(function(){t("textarea.autosize").each(S),t(document).on("input keyup paste change","textarea.autosize",S)}),t(function(){var e=t("#dropMenu");e.length&&e.on("click",".toggle-right-col",function(t){e.toggleClass("show-right-col"),t.stopPropagation(),t.preventDefault()})});var D="undefined"!=typeof InstallTrigger;t.zui.browser.firefox=D,t("html").toggleClass("is-firefox",D).toggleClass("not-firefox",!D),t(function(){var e=t("#mainContent>.main-col"),i=e.children(".main-actions"),n=i.prev();if(i.length&&n.length){t('
          ').css("height",i.outerHeight()).insertAfter(i);var o=function(){var e=n[0].getBoundingClientRect(),o=e.top+e.height+120>t(window).height();t("body").toggleClass("main-actions-fixed",o),o&&i.width(n.width())};t.resetToolbarPosition=o,o(),t(window).on("resize scroll",o)}}),t(document).on("show.zui.modal",function(e){t("body.body-modal").length&&window.parent&&window.parent!==window&&t(e.target).is(".modal")&&window.parent.$("body").addClass("hide-modal-close")}).on("hidden.zui.modal",function(){t("body.body-modal").length&&window.parent&&window.parent!==window&&window.parent.$("body").removeClass("hide-modal-close")})}(jQuery); \ No newline at end of file diff --git a/www/theme/zui/css/min.css b/www/theme/zui/css/min.css index 3340c0eb05..ac195cee7e 100644 --- a/www/theme/zui/css/min.css +++ b/www/theme/zui/css/min.css @@ -1,9 +1,9 @@ /*! - * ZUI: Zentao template - v1.8.1 - 2018-12-26 + * ZUI: Zentao template - v1.8.1 - 2019-01-25 * http://zui.sexy * GitHub: https://github.com/easysoft/zui.git - * Copyright (c) 2018 cnezsoft.com; Licensed MIT - *//*! normalize.css v2.1.3 | MIT License | git.io/normalize */article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,video{display:inline-block}audio:not([controls]){display:none;height:0}[hidden],template{display:none}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}a{background:0 0}a:focus{outline:thin dotted}a:active,a:hover{outline:0}h1{margin:.67em 0;font-size:2em}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}mark{color:#000;background:#ff0}code,kbd,pre,samp{font-family:monospace,serif;font-size:1em}pre{white-space:pre-wrap}q{quotes:"\201C" "\201D" "\2018" "\2019"}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:0}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}button,input,select,textarea{margin:0;font-family:inherit;font-size:100%}button,input{line-height:normal}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}textarea{overflow:auto;vertical-align:top}table{border-spacing:0;border-collapse:collapse}#userMenu:after,#userMenu:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fixed-md:after,.container-fixed-md:before,.container-fixed-sm:after,.container-fixed-sm:before,.container-fixed-xs:after,.container-fixed-xs:before,.container-fixed:after,.container-fixed:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.dl-inline:after,.dl-inline:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager-justify:after,.pager-justify:before,.pager-loose:after,.pager-loose:before,.row:after,.row:before,.table-footer:after,.table-footer:before{display:table;content:" "}#userMenu:after,.btn-toolbar:after,.clearfix:after,.container-fixed-md:after,.container-fixed-sm:after,.container-fixed-xs:after,.container-fixed:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.dl-inline:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager-justify:after,.pager-loose:after,.row:after,.table-footer:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none}.showing{display:block}.hidden{display:none!important;visibility:hidden!important}.show{display:block!important;visibility:visible!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.affix{position:fixed}.with-padding{padding:5px 12px}.no-padding{padding:0!important}.no-margin{margin:0!important}.inline-block.visible-xs,.inline.visible-xs,.visible-xs,td.visible-xs,th.visible-xs,tr.visible-xs{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}.inline.visible-xs{display:inline!important}.inline-block.visible-xs{display:inline-block!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-xs.visible-sm{display:block!important}.inline.visible-xs.visible-sm{display:inline!important}.inline-block.visible-xs.visible-sm{display:inline-block!important}tr.visible-xs.visible-sm{display:table-row!important}td.visible-xs.visible-sm,th.visible-xs.visible-sm{display:table-cell!important}}@media (min-width:992px) and (max-width:1799px){.visible-xs.visible-md{display:block!important}.inline.visible-xs.visible-md{display:inline!important}.inline-block.visible-xs.visible-md{display:inline-block!important}tr.visible-xs.visible-md{display:table-row!important}td.visible-xs.visible-md,th.visible-xs.visible-md{display:table-cell!important}}@media (min-width:1800px){.visible-xs.visible-lg{display:block!important}.inline.visible-xs.visible-lg{display:inline!important}.inline-block.visible-xs.visible-lg{display:inline-block!important}tr.visible-xs.visible-lg{display:table-row!important}td.visible-xs.visible-lg,th.visible-xs.visible-lg{display:table-cell!important}}.inline-block.visible-sm,.inline.visible-sm,.visible-sm,td.visible-sm,th.visible-sm,tr.visible-sm{display:none!important}@media (max-width:767px){.visible-sm.visible-xs{display:block!important}.inline.visible-sm.visible-xs{display:inline!important}.inline-block.visible-sm.visible-xs{display:inline-block!important}tr.visible-sm.visible-xs{display:table-row!important}td.visible-sm.visible-xs,th.visible-sm.visible-xs{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}.inline.visible-sm{display:inline!important}.inline-block.visible-sm{display:inline-block!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:992px) and (max-width:1799px){.visible-sm.visible-md{display:block!important}.inline.visible-sm.visible-md{display:inline!important}.inline-block.visible-sm.visible-md{display:inline-block!important}tr.visible-sm.visible-md{display:table-row!important}td.visible-sm.visible-md,th.visible-sm.visible-md{display:table-cell!important}}@media (min-width:1800px){.visible-sm.visible-lg{display:block!important}.inline.visible-sm.visible-lg{display:inline!important}.inline-block.visible-sm.visible-lg{display:inline-block!important}tr.visible-sm.visible-lg{display:table-row!important}td.visible-sm.visible-lg,th.visible-sm.visible-lg{display:table-cell!important}}.inline-block.visible-md,.inline.visible-md,.visible-md,td.visible-md,th.visible-md,tr.visible-md{display:none!important}@media (max-width:767px){.visible-md.visible-xs{display:block!important}.inline.visible-md.visible-xs{display:inline!important}.inline-block.visible-md.visible-xs{display:inline-block!important}tr.visible-md.visible-xs{display:table-row!important}td.visible-md.visible-xs,th.visible-md.visible-xs{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-md.visible-sm{display:block!important}.inline.visible-md.visible-sm{display:inline!important}.inline-block.visible-md.visible-sm{display:inline-block!important}tr.visible-md.visible-sm{display:table-row!important}td.visible-md.visible-sm,th.visible-md.visible-sm{display:table-cell!important}}@media (min-width:992px) and (max-width:1799px){.visible-md{display:block!important}.inline.visible-md{display:inline!important}.inline-block.visible-md{display:inline-block!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:1800px){.visible-md.visible-lg{display:block!important}.inline.visible-md.visible-lg{display:inline!important}.inline-block.visible-md.visible-lg{display:inline-block!important}tr.visible-md.visible-lg{display:table-row!important}td.visible-md.visible-lg,th.visible-md.visible-lg{display:table-cell!important}}.inline-block.visible-lg,.inline.visible-lg,.visible-lg,td.visible-lg,th.visible-lg,tr.visible-lg{display:none!important}@media (max-width:767px){.visible-lg.visible-xs{display:block!important}.inline.visible-lg.visible-xs{display:inline!important}.inline-block.visible-lg.visible-xs{display:inline-block!important}tr.visible-lg.visible-xs{display:table-row!important}td.visible-lg.visible-xs,th.visible-lg.visible-xs{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-lg.visible-sm{display:block!important}.inline.visible-lg.visible-sm{display:inline!important}.inline-block.visible-lg.visible-sm{display:inline-block!important}tr.visible-lg.visible-sm{display:table-row!important}td.visible-lg.visible-sm,th.visible-lg.visible-sm{display:table-cell!important}}@media (min-width:992px) and (max-width:1799px){.visible-lg.visible-md{display:block!important}.inline.visible-lg.visible-md{display:inline!important}.inline-block.visible-lg.visible-md{display:inline-block!important}tr.visible-lg.visible-md{display:table-row!important}td.visible-lg.visible-md,th.visible-lg.visible-md{display:table-cell!important}}@media (min-width:1800px){.visible-lg{display:block!important}.inline.visible-lg{display:inline!important}.inline-block.visible-lg{display:inline-block!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}.hidden-xs{display:block!important}.inline.hidden-xs{display:inline!important}.inline-block.hidden-xs{display:inline-block!important}tr.hidden-xs{display:table-row!important}td.hidden-xs,th.hidden-xs{display:table-cell!important}@media (max-width:767px){.hidden-xs,.inline-block.hidden-xs,.inline.hidden-xs,td.hidden-xs,th.hidden-xs,tr.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-xs.hidden-sm,.inline-block.hidden-xs.hidden-sm,.inline.hidden-xs.hidden-sm,td.hidden-xs.hidden-sm,th.hidden-xs.hidden-sm,tr.hidden-xs.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1799px){.hidden-xs.hidden-md,.inline-block.hidden-xs.hidden-md,.inline.hidden-xs.hidden-md,td.hidden-xs.hidden-md,th.hidden-xs.hidden-md,tr.hidden-xs.hidden-md{display:none!important}}@media (min-width:1800px){.hidden-xs.hidden-lg,.inline-block.hidden-xs.hidden-lg,.inline.hidden-xs.hidden-lg,td.hidden-xs.hidden-lg,th.hidden-xs.hidden-lg,tr.hidden-xs.hidden-lg{display:none!important}}.hidden-sm{display:block!important}.inline.hidden-sm{display:inline!important}.inline-block.hidden-sm{display:inline-block!important}tr.hidden-sm{display:table-row!important}td.hidden-sm,th.hidden-sm{display:table-cell!important}@media (max-width:767px){.hidden-sm.hidden-xs,.inline-block.hidden-sm.hidden-xs,.inline.hidden-sm.hidden-xs,td.hidden-sm.hidden-xs,th.hidden-sm.hidden-xs,tr.hidden-sm.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm,.inline-block.hidden-sm,.inline.hidden-sm,td.hidden-sm,th.hidden-sm,tr.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1799px){.hidden-sm.hidden-md,.inline-block.hidden-sm.hidden-md,.inline.hidden-sm.hidden-md,td.hidden-sm.hidden-md,th.hidden-sm.hidden-md,tr.hidden-sm.hidden-md{display:none!important}}@media (min-width:1800px){.hidden-sm.hidden-lg,.inline-block.hidden-sm.hidden-lg,.inline.hidden-sm.hidden-lg,td.hidden-sm.hidden-lg,th.hidden-sm.hidden-lg,tr.hidden-sm.hidden-lg{display:none!important}}.hidden-md{display:block!important}.inline.hidden-md{display:inline!important}.inline-block.hidden-md{display:inline-block!important}tr.hidden-md{display:table-row!important}td.hidden-md,th.hidden-md{display:table-cell!important}@media (max-width:767px){.hidden-md.hidden-xs,.inline-block.hidden-md.hidden-xs,.inline.hidden-md.hidden-xs,td.hidden-md.hidden-xs,th.hidden-md.hidden-xs,tr.hidden-md.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-md.hidden-sm,.inline-block.hidden-md.hidden-sm,.inline.hidden-md.hidden-sm,td.hidden-md.hidden-sm,th.hidden-md.hidden-sm,tr.hidden-md.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1799px){.hidden-md,.inline-block.hidden-md,.inline.hidden-md,td.hidden-md,th.hidden-md,tr.hidden-md{display:none!important}}@media (min-width:1800px){.hidden-md.hidden-lg,.inline-block.hidden-md.hidden-lg,.inline.hidden-md.hidden-lg,td.hidden-md.hidden-lg,th.hidden-md.hidden-lg,tr.hidden-md.hidden-lg{display:none!important}}.hidden-lg{display:block!important}.inline.hidden-lg{display:inline!important}.inline-block.hidden-lg{display:inline-block!important}tr.hidden-lg{display:table-row!important}td.hidden-lg,th.hidden-lg{display:table-cell!important}@media (max-width:767px){.hidden-lg.hidden-xs,.inline-block.hidden-lg.hidden-xs,.inline.hidden-lg.hidden-xs,td.hidden-lg.hidden-xs,th.hidden-lg.hidden-xs,tr.hidden-lg.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-lg.hidden-sm,.inline-block.hidden-lg.hidden-sm,.inline.hidden-lg.hidden-sm,td.hidden-lg.hidden-sm,th.hidden-lg.hidden-sm,tr.hidden-lg.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1799px){.hidden-lg.hidden-md,.inline-block.hidden-lg.hidden-md,.inline.hidden-lg.hidden-md,td.hidden-lg.hidden-md,th.hidden-lg.hidden-md,tr.hidden-lg.hidden-md{display:none!important}}@media (min-width:1800px){.hidden-lg,.inline-block.hidden-lg,.inline.hidden-lg,td.hidden-lg,th.hidden-lg,tr.hidden-lg{display:none!important}}.inline-block.visible-print,.inline.visible-print,.visible-print,td.visible-print,th.visible-print,tr.visible-print{display:none!important}@media print{.visible-print{display:block!important}.inline.visible-print{display:inline!important}.inline-block.visible-print{display:inline-block!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}.hidden-print,.inline-block.hidden-print,.inline.hidden-print,td.hidden-print,th.hidden-print,tr.hidden-print{display:none!important}}*,:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,Tahoma,'Microsoft Yahei','PingFang SC','Hiragino Sans GB','WenQuanYi Micro Hei',sans-serif;font-size:13px;line-height:1.42857143;color:#3c4353;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#3c4353;text-decoration:none;cursor:pointer;-webkit-transition:.4s cubic-bezier(.175,.885,.32,1);-o-transition:.4s cubic-bezier(.175,.885,.32,1);transition:.4s cubic-bezier(.175,.885,.32,1);-webkit-transition-property:color,background,opacity,left,top,right,bottom,-webkit-transform;-o-transition-property:color,background,opacity,left,top,right,bottom,-o-transform;transition-property:color,background,opacity,left,top,right,bottom,-webkit-transform;transition-property:color,background,transform,opacity,left,top,right,bottom;transition-property:color,background,transform,opacity,left,top,right,bottom,-webkit-transform,-o-transform}a:focus,a:hover{color:#0c64eb;text-decoration:none}a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}a.disabled,a.disabled:focus,a.disabled:hover,a[disabled],a[disabled]:focus,a[disabled]:hover{color:#aaa;text-decoration:none;cursor:default}audio,canvas,img,video{max-width:100%;vertical-align:middle}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);border:0}::-moz-selection{text-shadow:none;background:#b3d4fc}::selection{text-shadow:none;background:#b3d4fc}fieldset{padding:0;margin:0;border:0}textarea{resize:vertical}ol,ul{padding-left:20px}.container,.container-fixed,.container-fixed-md,.container-fixed-sm,.container-fixed-xs,.container-fluid{padding-right:10px;padding-left:10px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{max-width:972px}}@media (min-width:992px){.container{max-width:1760px}}@media (min-width:1800px){.container{max-width:1760px}}.container-fixed{width:1760px}.container-fixed-md{width:1760px}.container-fixed-sm{width:972px}.container-fixed-xs{width:748px}.row{margin-right:-10px;margin-left:-10px}.col,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:10px;padding-left:10px}.col,.col-xs,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-1,.col-xs-1{width:8.33333333%}.col-2,.col-xs-2{width:16.66666667%}.col-3,.col-xs-3{width:25%}.col-4,.col-xs-4{width:33.33333333%}.col-5,.col-xs-5{width:41.66666667%}.col-6,.col-xs-6{width:50%}.col-7,.col-xs-7{width:58.33333333%}.col-8,.col-xs-8{width:66.66666667%}.col-9,.col-xs-9{width:75%}.col-10,.col-xs-10{width:83.33333333%}.col-11,.col-xs-11{width:91.66666667%}.col-12,.col-xs-12{width:100%}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-1{width:8.33333333%}.col-sm-2{width:16.66666667%}.col-sm-3{width:25%}.col-sm-4{width:33.33333333%}.col-sm-5{width:41.66666667%}.col-sm-6{width:50%}.col-sm-7{width:58.33333333%}.col-sm-8{width:66.66666667%}.col-sm-9{width:75%}.col-sm-10{width:83.33333333%}.col-sm-11{width:91.66666667%}.col-sm-12{width:100%}.col-sm-push-1{left:8.33333333%}.col-sm-push-2{left:16.66666667%}.col-sm-push-3{left:25%}.col-sm-push-4{left:33.33333333%}.col-sm-push-5{left:41.66666667%}.col-sm-push-6{left:50%}.col-sm-push-7{left:58.33333333%}.col-sm-push-8{left:66.66666667%}.col-sm-push-9{left:75%}.col-sm-push-10{left:83.33333333%}.col-sm-push-11{left:91.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-3{right:25%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-6{right:50%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-9{right:75%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-11{right:91.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-11{margin-left:91.66666667%}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-1{width:8.33333333%}.col-md-2{width:16.66666667%}.col-md-3{width:25%}.col-md-4{width:33.33333333%}.col-md-5{width:41.66666667%}.col-md-6{width:50%}.col-md-7{width:58.33333333%}.col-md-8{width:66.66666667%}.col-md-9{width:75%}.col-md-10{width:83.33333333%}.col-md-11{width:91.66666667%}.col-md-12{width:100%}.col-md-push-0{left:auto}.col-md-push-1{left:8.33333333%}.col-md-push-2{left:16.66666667%}.col-md-push-3{left:25%}.col-md-push-4{left:33.33333333%}.col-md-push-5{left:41.66666667%}.col-md-push-6{left:50%}.col-md-push-7{left:58.33333333%}.col-md-push-8{left:66.66666667%}.col-md-push-9{left:75%}.col-md-push-10{left:83.33333333%}.col-md-push-11{left:91.66666667%}.col-md-pull-0{right:auto}.col-md-pull-1{right:8.33333333%}.col-md-pull-2{right:16.66666667%}.col-md-pull-3{right:25%}.col-md-pull-4{right:33.33333333%}.col-md-pull-5{right:41.66666667%}.col-md-pull-6{right:50%}.col-md-pull-7{right:58.33333333%}.col-md-pull-8{right:66.66666667%}.col-md-pull-9{right:75%}.col-md-pull-10{right:83.33333333%}.col-md-pull-11{right:91.66666667%}.col-md-offset-0{margin-left:0}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-3{margin-left:25%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-6{margin-left:50%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-9{margin-left:75%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-11{margin-left:91.66666667%}}@media (min-width:1800px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-1{width:8.33333333%}.col-lg-2{width:16.66666667%}.col-lg-3{width:25%}.col-lg-4{width:33.33333333%}.col-lg-5{width:41.66666667%}.col-lg-6{width:50%}.col-lg-7{width:58.33333333%}.col-lg-8{width:66.66666667%}.col-lg-9{width:75%}.col-lg-10{width:83.33333333%}.col-lg-11{width:91.66666667%}.col-lg-12{width:100%}.col-lg-push-0{left:auto}.col-lg-push-1{left:8.33333333%}.col-lg-push-2{left:16.66666667%}.col-lg-push-3{left:25%}.col-lg-push-4{left:33.33333333%}.col-lg-push-5{left:41.66666667%}.col-lg-push-6{left:50%}.col-lg-push-7{left:58.33333333%}.col-lg-push-8{left:66.66666667%}.col-lg-push-9{left:75%}.col-lg-push-10{left:83.33333333%}.col-lg-push-11{left:91.66666667%}.col-lg-pull-0{right:auto}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-3{right:25%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-6{right:50%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-9{right:75%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-11{right:91.66666667%}.col-lg-offset-0{margin-left:0}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-11{margin-left:91.66666667%}}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:14px;line-height:1.4}@media (min-width:768px){.lead{font-size:19.5px}}.small,small{font-size:85%}cite{font-style:normal}.text-gray,.text-muted{color:#838a9d}.text-gray a,.text-muted a{color:#757d92}.text-gray a:active,.text-gray a:hover,.text-muted a:active,.text-muted a:hover{color:#3c4353}.text-primary{color:#0c64eb}.text-warning,.text-yellow{color:#ff9800}.text-danger,.text-red{color:#ff5d5d}.text-green,.text-success{color:#00da88}.text-blue,.text-info{color:#2196f3}.text-brown,.text-important{color:#bd7b46}.text-purple,.text-special{color:#8666b8}.text-link{color:#3c4353}.text-link:active,.text-link:hover{color:#3c4353}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.nobr,.text-nowrap{overflow:hidden;white-space:nowrap}.text-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}dl{margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}.dl-inline dt{display:inline-block}.dl-inline dd{display:inline-block;padding-right:1em}.dl-inline dd:last-child{padding-right:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}blockquote{padding:10px 20px;margin:0 0 20px;font-size:16.25px;border-left:5px solid #eee}blockquote ol,blockquote p,blockquote ul{font-weight:300}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote small{display:block;line-height:1.42857143;color:#838a9d}blockquote small:before{content:'\2014 \00A0'}blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}blockquote.pull-right small:before{content:''}blockquote.pull-right small:after{content:'\00A0 \2014'}.ol-pd-2{padding-left:40px}.ol-pd-3{padding-left:60px}.ol-pd-4{padding-left:80px}.bg-black,.bg-default{color:#fff;background-color:#3c4353}.bg-primary{color:#fff;background-color:#0c64eb}.bg-green,.bg-success{color:#fff;background-color:#00da88}.bg-blue,.bg-info{color:#fff;background-color:#2196f3}.bg-warning,.bg-yellow{color:#fff;background-color:#ff9800}.bg-danger,.bg-red{color:#fff;background-color:#ff5d5d}.bg-brown,.bg-important{color:#fff;background-color:#bd7b46}.bg-purple,.bg-special{color:#fff;background-color:#8666b8}.hl-default,.hl-gray{background-color:#f1f1f1}.hl-primary{background-color:#e9f2fb}.hl-green,.hl-success{background-color:#e8f5e9}.hl-blue,.hl-info{background-color:#e3f2fd}.hl-warning,.hl-yellow{background-color:#fff3e0}.hl-danger,.hl-red{background-color:#ffebee}.hl-brown,.hl-important{background-color:#efebe9}.hl-purple,.hl-special{background-color:#f3e5f5}.header-dividing,.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}h1,h2,h3,h4,h5,h6{font-family:"Helvetica Neue",Helvetica,Arial,Tahoma,'Microsoft Yahei','PingFang SC','Hiragino Sans GB','WenQuanYi Micro Hei',sans-serif;font-weight:700;line-height:1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:400;line-height:1;color:#838a9d}h1,h2,h3{margin-top:20px;margin-bottom:10px}h1 small,h2 small,h3 small{font-size:65%}h4,h5,h6{margin-top:10px;margin-bottom:10px}h4 small,h5 small,h6 small{font-size:75%}h1{font-size:24px}h2{font-size:20px}h3{font-size:18px}h4{font-size:14px}h5{font-size:13px}h6{font-size:12px}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}hr.divider-sm{margin-top:10px;margin-bottom:10px}hr.divider{margin:0}.label{display:inline;padding:.2em .6em .2em;font-size:85.71428571%;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#838a9d;border-radius:.25em}.label[href]:focus,.label[href]:hover{color:#fff;background-color:#697084}.label.label-outline{color:#838a9d;background:0 0;border:1px solid #838a9d}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.label-badge{display:inline-block;min-width:18px;padding:3px 7px;font-size:12px;line-height:1;border-radius:9px}.label-dot{display:inline-block;width:8px;height:8px;padding:0;line-height:20px;text-indent:-9999em;border-radius:50%}.label-dot:empty{display:inline-block}.label-primary{background-color:#0c64eb}.label-primary[href]:focus,.label-primary[href]:hover{color:#fff;background-color:#0a4fba}.label-primary.label-outline{color:#0c64eb;background:0 0;border:1px solid #0c64eb}.label-success{background-color:#00da88}.label-success[href]:focus,.label-success[href]:hover{color:#fff;background-color:#00a768}.label-success.label-outline{color:#00da88;background:0 0;border:1px solid #00da88}.label-info{background-color:#2196f3}.label-info[href]:focus,.label-info[href]:hover{color:#fff;background-color:#0c7cd5}.label-info.label-outline{color:#2196f3;background:0 0;border:1px solid #2196f3}.label-warning{background-color:#ff9800}.label-warning[href]:focus,.label-warning[href]:hover{color:#fff;background-color:#cc7a00}.label-warning.label-outline{color:#ff9800;background:0 0;border:1px solid #ff9800}.label-danger{background-color:#ff5d5d}.label-danger[href]:focus,.label-danger[href]:hover{color:#fff;background-color:#ff2a2a}.label-danger.label-outline{color:#ff5d5d;background:0 0;border:1px solid #ff5d5d}.btn .label,.nav-primary>li>a>.label{position:relative;top:-1px}.btn-danger .label,.btn-info .label,.btn-primary .label,.btn-success .label,.btn-warning .label{background-color:rgba(0,0,0,.2)}.list-group-item.active>.label,.nav-pills>.active>a>.label,.nav-primary>.active>a>.label{color:#3c4353;background-color:#fff}.nav>li>a>.label{margin-left:3px}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#838a9d}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:8px;margin-bottom:20px;overflow:hidden;background-color:#e9f2fb;border-radius:3px}.progress-bar{float:left;width:0;height:100%;font-size:12px;color:#fff;text-align:center;background-color:#0c64eb;border-radius:3px;-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#00da88}.progress-bar-info{background-color:#2196f3}.progress-bar-warning{background-color:#ff9800}.progress-bar-danger{background-color:#ff5d5d}.avatar{position:relative;display:block;width:30px;height:30px;overflow:hidden;line-height:30px;text-align:center;background-position:center;-webkit-background-size:cover;background-size:cover;border-radius:4px}.avatar img{display:block;width:100%;height:100%;margin:0}.avatar-sm{width:20px;height:20px;font-size:12px;line-height:20px}.avatar-lg{width:40px;height:40px;font-size:20px;line-height:40px}.avatar-lg>.icon{font-size:20px}.avatar-xl{width:70px;height:70px;font-size:35px;line-height:70px}.avatar-xl>.icon{font-size:35px}.avatar-circle{border-radius:50%}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:19.5px;line-height:inherit;color:#3c4353;border:0;border-bottom:1px solid #eee}label{display:inline-block;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:5px 0 0;margin-top:0\9;line-height:normal}input[type=file]{display:block}select[multiple],select[size]{height:auto}select:-moz-focusring{color:transparent;text-shadow:0 0 0 #000}select optgroup{font-family:inherit;font-size:inherit;font-style:inherit}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}.form-control::-webkit-input-placeholder{color:#838a9d}.form-control::-moz-placeholder{color:#838a9d}.form-control::placeholder{color:#838a9d}.form-control{display:block;width:100%;height:32px;padding:5px 8px;font-size:13px;line-height:1.42857143;color:#222;vertical-align:middle;background-color:#fff;border:1px solid #dcdcdc;border-radius:2px;-webkit-box-shadow:none;box-shadow:none;-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s,-webkit-box-shadow ease-in-out .15s}.form-control.focus,.form-control:focus{border-color:#0c64eb;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(12,100,235,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(12,100,235,.6)}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#f5f5f5}.form-control[readonly]{cursor:default}textarea.form-control{height:auto;min-height:32px}.form-group{margin-bottom:10px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:3px;margin-top:4px\9;margin-left:-20px}.os-android .checkbox input[type=checkbox],.os-android .checkbox-inline input[type=checkbox],.os-android .radio input[type=radio],.os-android .radio-inline input[type=radio]{margin-top:0}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.input-sm{height:24px;padding:2px 8px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:24px;line-height:24px}textarea.input-sm{height:auto}.input-lg{height:39px;padding:10px 16px;font-size:14px;line-height:1.25;border-radius:6px}select.input-lg{height:39px;line-height:39px}textarea.input-lg{height:auto}.has-warning .help-block,.has-warning>label{color:#ff9800}.has-warning .form-control{border-color:#ff9800;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#cc7a00;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ffc166;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ffc166}.has-warning .input-group-addon{color:#ff9800;background-color:#fff3e0;border-color:#ff9800}.has-error .help-block,.has-error>label{color:#ff5d5d}.has-error .form-control{border-color:#ff5d5d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#ff2a2a;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ffc3c3;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ffc3c3}.has-error .input-group-addon{color:#ff5d5d;background-color:#ffebee;border-color:#ff5d5d}.has-success .help-block,.has-success>label{color:#00da88}.has-success .form-control{border-color:#00da88;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#00a768;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #41ffb8;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #41ffb8}.has-success .input-group-addon{color:#00da88;background-color:#e8f5e9;border-color:#00da88}.form-control-static{min-height:33px;padding-top:6px;padding-bottom:6px;margin-bottom:0}.help-block{display:block;margin:5px 0;color:#74809b}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;padding-left:0;margin-top:0;margin-bottom:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{float:none;margin-left:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .form-group>label,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:6px;margin-top:0;margin-bottom:0}.form-horizontal .form-group{margin-right:-10px;margin-left:-10px}@media (min-width:768px){.form-horizontal .form-group>label{text-align:right}}.required{position:relative}.required:after{position:absolute;top:0;right:-10px;display:inline-block;font-size:14px;color:#ff5d5d;content:'*'}.form-horizontal .required:after{top:5px;right:-1px}.form-condensed .form-group{margin-bottom:10px}.form-condensed .form-control{height:24px;padding:2px 8px;font-size:12px;line-height:1.5;border-radius:3px}select.form-condensed .form-control{height:24px;line-height:24px}textarea.form-condensed .form-control{height:auto}.form-condensed textarea.form-control{height:auto}.form-condensed .btn{padding:3px 8px;font-size:12px;line-height:18px;border-radius:4px}.form-condensed .input-group>.form-control,.form-condensed .input-group>.input-group-addon,.form-condensed .input-group>.input-group-btn>.btn{padding:2px 8px;font-size:12px;border-radius:3px}.form-condensed .input-group .form-control:first-child,.form-condensed .input-group-addon:first-child,.form-condensed .input-group-btn:first-child>.btn,.form-condensed .input-group-btn:first-child>.btn-group>.btn,.form-condensed .input-group-btn:first-child>.dropdown-toggle,.form-condensed .input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.form-condensed .input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.form-condensed .input-group .form-control:last-child,.form-condensed .input-group-addon:last-child,.form-condensed .input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.form-condensed .input-group-btn:first-child>.btn:not(:first-child),.form-condensed .input-group-btn:last-child>.btn,.form-condensed .input-group-btn:last-child>.btn-group>.btn,.form-condensed .input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.form-condensed .input-group-addon:first-child{border-right:0}.form-condensed .input-group-addon:last-child{border-left:0}.form-condensed .input-group-addon.fix-border,.form-condensed .input-group-btn.fix-border>.btn{border-right:0;border-left:0;border-radius:0}.form-condensed.form-horizontal .checkbox,.form-condensed.form-horizontal .checkbox-inline,.form-condensed.form-horizontal .form-group>label,.form-condensed.form-horizontal .radio,.form-condensed.form-horizontal .radio-inline{padding-top:1px}.close{float:right;font-size:19.5px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.load-indicator{position:relative}.load-indicator:after,.load-indicator:before{position:absolute;color:#838a9d;text-align:center;visibility:hidden;opacity:0;-webkit-transition:.2s cubic-bezier(.175,.885,.32,1);-o-transition:.2s cubic-bezier(.175,.885,.32,1);transition:.2s cubic-bezier(.175,.885,.32,1);-webkit-transition-property:visibility,opacity;-o-transition-property:visibility,opacity;transition-property:visibility,opacity}.load-indicator:before{top:0;right:0;bottom:0;left:0;z-index:10;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding-top:50px;font-size:12px;content:attr(data-loading);background-color:rgba(255,255,255,.65);-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.load-indicator:after{top:50%;left:50%;z-index:11;display:block;width:30px;height:30px;margin-top:-15px;margin-left:-15px;font-family:ZentaoIcon;font-size:18px;font-size:24px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;line-height:30px;text-transform:none;content:"\e982";-webkit-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;animation:spin 2s infinite linear;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.load-indicator.loading:after,.load-indicator.loading:before{visibility:visible;opacity:1}table{max-width:100%;background-color:transparent}caption{padding:8px 10px;color:#838a9d;text-align:left}th{text-align:left}.table{width:100%;margin-bottom:20px}.table td,.table th{padding:8px 10px;line-height:1.42857143;vertical-align:top;border-bottom:1px solid #cbd0db;-webkit-transition:background .2s cubic-bezier(.175,.885,.32,1);-o-transition:background .2s cubic-bezier(.175,.885,.32,1);transition:background .2s cubic-bezier(.175,.885,.32,1)}.table>thead>tr>th{font-weight:700;color:#3c4353;vertical-align:bottom;background-color:transparent;border-bottom:1px solid #cbd0db}.table>tbody+tbody{border-top:2px solid #cbd0db}.table-fixed{table-layout:fixed}.table-fixed td,.table-fixed th{overflow:hidden;white-space:nowrap}.table-fixed .nofixed,.table-fixed tfoot>tr>td,.table-fixed tfoot>tr>th{overflow:visible}.table-borderless td,.table-borderless th,.table-borderless thead>tr>th{border:none}.table-auto{width:auto;max-width:100%}.table-condensed td,.table-condensed th{padding:5px}.table-bordered{border:1px solid #cbd0db}.table-bordered td,.table-bordered th{border:1px solid #cbd0db}.table-striped>tbody>tr:nth-child(odd)>td,.table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#e9f2fb}table col[class*=col-]{display:table-column;float:none}table td[class*=col-],table th[class*=col-]{display:table-cell;float:none}.table tr.active>td,.table tr.active>th,.table tr>td.active,.table tr>th.active{background-color:#ffe9c6}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#e8f5e9;border-color:#c7e6c4}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d6edd8;border-color:#b7deb3}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#ffebee;border-color:#ffd1e0}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ffd1d8;border-color:#ffb8ce}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fff3e0;border-color:#ffe0c6}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#ffe9c6;border-color:#ffd2ad}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #cbd0db}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered th{border-top:none}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}.alert{padding:15px;margin-bottom:20px;color:#313744;background-color:#f1f1f1;border-radius:3px;-webkit-transition:all .4s cubic-bezier(.175,.885,.32,1);-o-transition:all .4s cubic-bezier(.175,.885,.32,1);transition:all .4s cubic-bezier(.175,.885,.32,1)}.alert hr{border-top-color:#e4e4e4}.alert .alert-link{color:#22262f}.alert h4{margin-top:0;color:inherit}.alert hr{margin:10px 0}.alert p,.alert ul{margin-bottom:0}.alert p+p{margin-top:5px}.alert-link{font-weight:700}.alert>[class*=icon-]{float:left;margin-top:-5px;font-size:42px;opacity:.6;-webkit-transition:opacity .2s cubic-bezier(.175,.885,.32,1);-o-transition:opacity .2s cubic-bezier(.175,.885,.32,1);transition:opacity .2s cubic-bezier(.175,.885,.32,1)}.alert>[class*=icon-]+.content{min-height:30px;margin-left:64px}.alert.with-icon{display:table;width:100%}.alert.with-icon>[class*=icon-],.alert.with-icon>[class*=icon-]+.content{display:table-cell;float:none;min-height:0;margin:0;vertical-align:middle}.alert.with-icon>[class*=icon-]{width:48px;text-align:center}.alert.with-icon>[class*=icon-]+.content{padding-left:1em}.alert-block{margin:0;border-radius:0}.alert-dismissable{padding-right:35px}.alert-dismissable .close{position:relative;top:-6px;right:-21px;color:inherit}.alert-primary{color:#313744;background-color:#e9f2fb}.alert-primary hr{border-top-color:#cbe0f6}.alert-primary .alert-link{color:#22262f}.alert-success{color:#00c178;background-color:#e8f5e9}.alert-success hr{border-top-color:#c7e6c4}.alert-success .alert-link{color:#009d62}.alert-info{color:#0d8aee;background-color:#e3f2fd}.alert-info hr{border-top-color:#9ce0f8}.alert-info .alert-link{color:#0b76cc}.alert-warning{color:#e68900;background-color:#fff3e0}.alert-warning hr{border-top-color:#ffe0c6}.alert-warning .alert-link{color:#c27400}.alert-danger{color:#ff4343;background-color:#ffebee}.alert-danger hr{border-top-color:#ffd1e0}.alert-danger .alert-link{color:#ff2020}.alert-inverse{color:#fff;background-color:#3c4353;border-color:#3c4353}.alert-inverse hr{border-top-color:#cbd0db;border-top-color:rgba(203,208,219,.25)}.alert-inverse .alert-link{color:rgba(255,255,255,.8)}.alert-primary-inverse{color:#fff;background-color:#0c64eb;border-color:#0c64eb}.alert-primary-inverse hr{border-top-color:#cbd0db;border-top-color:rgba(203,208,219,.25)}.alert-primary-inverse .alert-link{color:rgba(255,255,255,.8)}.alert-success-inverse{color:#fff;background-color:#00da88;border-color:#00da88}.alert-success-inverse hr{border-top-color:#cbd0db;border-top-color:rgba(203,208,219,.25)}.alert-success-inverse .alert-link{color:rgba(255,255,255,.8)}.alert-info-inverse{color:#fff;background-color:#2196f3;border-color:#2196f3}.alert-info-inverse hr{border-top-color:#cbd0db;border-top-color:rgba(203,208,219,.25)}.alert-info-inverse .alert-link{color:rgba(255,255,255,.8)}.alert-warning-inverse{color:#fff;background-color:#ff9800;border-color:#ff9800}.alert-warning-inverse hr{border-top-color:#cbd0db;border-top-color:rgba(203,208,219,.25)}.alert-warning-inverse .alert-link{color:rgba(255,255,255,.8)}.alert-danger-inverse{color:#fff;background-color:#ff5d5d;border-color:#ff5d5d}.alert-danger-inverse hr{border-top-color:#cbd0db;border-top-color:rgba(203,208,219,.25)}.alert-danger-inverse .alert-link{color:rgba(255,255,255,.8)}.input-control-icon-left,.input-control-icon-right,.input-control-label-left,.input-control-label-right{position:absolute;top:1px;z-index:5;height:30px;line-height:30px;opacity:.5}.input-control-icon-left,.input-control-icon-right{width:30px;text-align:center}.input-control-icon-left,.input-control-label-left{left:1px}.input-control-icon-right,.input-control-label-right{right:1px}.input-control-label-left,.input-control-label-right{width:70px;padding:0 8px;overflow:hidden;text-overflow:ellipsis}.has-label-left-sm>.input-control-label-left,.has-label-left-sm>.input-control-label-right{width:55px}.has-label-left-lg>.input-control-label-left,.has-label-left-lg>.input-control-label-right{width:95px}.input-control{position:relative}.input-control.has-icon-left>.form-control{padding-left:30px}.input-control.has-icon-right>.form-control{padding-right:30px}.input-control.has-label-left>.form-control{padding-left:70px}.input-control.has-label-right>.form-control{padding-right:70px}.input-control.has-label-left-sm>.form-control{padding-left:55px}.input-control.has-label-right-sm>.form-control{padding-right:55px}.input-control.has-label-left-lg>.form-control{padding-left:95px}.input-control.has-label-right-lg>.form-control{padding-right:95px}.input-control>a:hover{background-color:#f1f1f1;opacity:1}.form-control:focus+[class^=input-control-],.form-control:focus+[class^=input-control-]+[class^=input-control-]{opacity:1}.form-control:focus+.input-control-label-left{color:#16a8f8}.empty+.search-clear-btn,.empty+.search-icon+.search-clear-btn{opacity:0!important}input:placeholder-shown+.search-clear-btn,input:placeholder-shown+.search-icon+.search-clear-btn{opacity:0!important}.search-box-circle .input-control-icon-left,.search-box-circle .input-control-icon-right,.search-box-circle>.form-control{border-radius:16px}.search-box-circle+.input-group-btn>.btn{border-radius:0 16px 16px 0}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:5px 12px;font-size:13px;font-weight:400;line-height:1;color:#3c4353;text-align:center;background-color:#eee;border:1px solid #dcdcdc;border-radius:4px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group-addon.fix-border{border-right:0;border-left:0}.input-group-addon:empty{width:1px;padding:0}.input-group-addon.fix-padding{width:1px;padding:0}.input-group-btn.fix-border>.btn{border-right:0;border-left:0;border-radius:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:first-child{border-right:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:39px;padding:10px 16px;font-size:14px;line-height:1.25;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:39px;line-height:39px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:24px;padding:2px 8px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:24px;line-height:24px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon.input-sm{padding:2px 8px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:14px;border-radius:6px}.code,code,kbd,pre,samp{font-family:Monaco,Menlo,Consolas,"Courier New",monospace}code,kbd{padding:2px 4px;font-size:90%;color:#37474f;background-color:#f3f5f7;border-radius:4px}kbd{padding:1px 4px;font-weight:700;color:#666;background-color:#f1f1f1;border:1px solid #d8d8d8;border-bottom-width:2px}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:12px;line-height:1.38461538;color:#3c4353;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;margin:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.com{color:#93a1a1}.lit{color:#195f91}.clo,.opn,.pun{color:#93a1a1}.fun{color:#dc322f}.atv,.str{color:#d14}.kwd,.prettyprint .tag{color:#1e347b}.atn,.dec,.typ,.var{color:teal}.pln{color:#48484c}.prettyprint.linenums{-webkit-box-shadow:inset 40px 0 0 #fbfbfc,inset 41px 0 0 #ececf0;box-shadow:inset 40px 0 0 #fbfbfc,inset 41px 0 0 #ececf0}.prettyprint ol.linenums{padding-left:35px;margin-bottom:0;line-height:20px;color:#bebec5;text-shadow:0 1px 0 #fff}.pager{display:inline-block;padding-left:0;margin:20px 0;list-style:none}.pager>li{display:inline}.pager>li>a,.pager>li>span{position:relative;float:left;padding:5px 12px;margin-left:-1px;line-height:1.42857143;text-decoration:none;background-color:#fff;border:1px solid #cbd0db}.pager>li:first-child>a,.pager>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pager>li:last-child>a,.pager>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pager>li>a:focus,.pager>li>a:hover,.pager>li>span:focus,.pager>li>span:hover{z-index:2;background-color:#eee}.pager>li.active>a,.pager>li.active>a:hover,.pager>li.active>span,.pager>li.active>span:hover{z-index:3;color:#fff;cursor:default;background-color:#0c64eb;border-color:#0c64eb}.pager>li.disabled>a,.pager>li.disabled>a:focus,.pager>li.disabled>a:hover,.pager>li.disabled>span,.pager>li.disabled>span:focus,.pager>li.disabled>span:hover{color:#cbd0db;pointer-events:none;cursor:not-allowed;background-color:#fff;border-color:#cbd0db}.pager-justify{display:block}.pager-justify .next>a,.pager-justify .next>span{float:right;border-radius:4px}.pager-justify .previous>a,.pager-justify .previous>span{float:left;border-radius:4px}.pager-goto{width:100px;text-align:center}.pager>li>div{float:left}.pager>li .pager-goto,.pager>li .pager-size-menu,.pager>li.space{margin:0 5px}.pager-label{position:relative;float:left;padding:5px 4px;margin-left:-1px;line-height:1.42857143;text-decoration:none;border:1px solid transparent}.pager-item-left>a{border-top-left-radius:4px;border-bottom-left-radius:4px}.pager-item-right>a{border-top-right-radius:4px;border-bottom-right-radius:4px}.pager-lg>li>a,.pager-lg>li>span{padding:10px 16px;font-size:14px}.pager-lg>li:first-child>a,.pager-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pager-lg>li:last-child>a,.pager-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pager-sm>li>a,.pager-sm>li>span{padding:2px 8px;font-size:12px}.pager-sm>li:first-child>a,.pager-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pager-sm>li:last-child>a,.pager-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager-pills>li:first-child>a,.pager-pills>li:first-child>span{border-radius:16px 0 0 16px}.pager-pills>li:last-child>a,.pager-pills>li:last-child>span{border-radius:0 16px 16px 0}.pager-pills.pager-justify>li>a,.pager-pills.pager-justify>li>span{border-radius:16px}.pager-loose{display:block;margin:20px 0}.pager-loose.pager-pills>li>a,.pager-loose.pager-pills>li>span{border-radius:16px}.pager-loose>li>a,.pager-loose>li>span{margin-left:5px;border-radius:4px}.pager-loose>li:first-child>a,.pager-loose>li:first-child>span{margin-left:0}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>.nav-heading{padding:8px 15px;font-weight:700;color:#838a9d}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:8px 15px;color:#3c4353}.nav>li>a:focus,.nav>li>a:hover{color:#0c64eb;text-decoration:none;background-color:#f1f1f1}.nav>li.disabled>a{color:#cbd0db}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#cbd0db;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#f1f1f1;border-color:#3c4353}.nav>li>a>img{max-width:none}.nav-default>li{float:left}.nav-default>li>a{border-radius:4px}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:20px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#0c64eb}.nav-primary>li{float:left;margin-left:-1px}.nav-primary>li:first-child>a{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.nav-primary>li:last-child>a{border-top-right-radius:4px;border-bottom-right-radius:4px}.nav-primary>li>a{border:1px solid #cbd0db}.nav-primary>li.active>a,.nav-primary>li.active>a:focus,.nav-primary>li.active>a:hover{color:#fff;background-color:#0c64eb;border-color:#0c64eb}.nav-secondary>li{float:left}.nav-secondary>li>a{border-bottom:2px solid #eee}.nav-secondary>li.active>a,.nav-secondary>li.active>a:focus,.nav-secondary>li.active>a:hover{color:#0c64eb;border-bottom-color:#0c64eb}.nav-secondary>li.nav-heading{border-bottom:2px solid #eee}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-stacked.nav-primary>li,.nav-stacked.nav-primary>li>a{margin-left:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.nav-stacked.nav-primary>li+li{margin-top:-1px}.nav-stacked.nav-primary>li:first-child{margin-top:0}.nav-stacked.nav-primary>li:first-child.nav-heading,.nav-stacked.nav-primary>li:first-child>a{margin-left:0;border-top-left-radius:4px;border-top-right-radius:4px}.nav-stacked.nav-primary>li:last-child>a{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.nav-stacked.nav-primary>li.nav-heading{background-color:#f1f1f1;border:1px solid #cbd0db}.nav-stacked.nav-secondary>li>a{border:none;border-top-right-radius:4px;border-bottom-right-radius:4px;-webkit-box-shadow:inset 2px 0 0 #f5f5f5;box-shadow:inset 2px 0 0 #f5f5f5}.nav-stacked.nav-secondary>li>a:hover{-webkit-box-shadow:inset 2px 0 0 #eee;box-shadow:inset 2px 0 0 #eee}.nav-stacked.nav-secondary>li+li{margin-top:-1px}.nav-stacked.nav-secondary>li:first-child{margin-top:0}.nav-stacked.nav-secondary>li.active>a,.nav-stacked.nav-secondary>li.active>a:focus,.nav-stacked.nav-secondary>li.active>a:hover{background-color:#f5f5f5;-webkit-box-shadow:inset 2px 0 0 #0c64eb;box-shadow:inset 2px 0 0 #0c64eb}.nav-stacked.nav-secondary>li.nav-heading{border-bottom:1px solid #cbd0db}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{padding-right:0;padding-left:0;margin-bottom:5px;text-align:center}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}.nav-justified.nav-primary>li+li>a{border-left:0}}.nav-tabs{border-bottom:1px solid #cbd0db}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #cbd0db}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#838a9d;cursor:default;background-color:#fff;border:1px solid #cbd0db;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{padding-right:0;padding-left:0;margin-bottom:5px;text-align:center}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}.nav-tabs.nav-justified.nav-primary>li+li>a{border-left:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #cbd0db}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #cbd0db;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}@-moz-document url-prefix(){.nav-tabs>li.active>a:focus .nav-tabs>li>a:focus{outline:0}}.nav-tabs.nav-stacked{border-right:1px solid #cbd0db;border-bottom:none}.nav-tabs.nav-stacked>li{float:none;margin-right:-1px;margin-bottom:0}.nav-tabs.nav-stacked>li>a{margin-right:0;border-radius:4px 0 0 4px}.nav-tabs.nav-stacked>li.active>a,.nav-tabs.nav-stacked>li.active>a:focus,.nav-tabs.nav-stacked>li.active>a:hover{border:1px solid #cbd0db;border-right-color:transparent}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #cbd0db}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #cbd0db;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:40px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:10px;padding-left:10px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-10px;margin-left:-10px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:40px;padding:10px 15px;font-size:14px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-10px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:3px;margin-right:3px;margin-bottom:3px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:5px -10px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px}.navbar-nav.nav-justified>li{float:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-nav.pull-right>li>.dropdown-menu,.navbar-nav>li>.dropdown-menu.pull-right{right:0;left:auto}.navbar-btn{margin-top:4px;margin-bottom:4px}.navbar-text{float:left;margin-top:10px;margin-bottom:10px}@media (min-width:768px){.navbar-text{margin-right:10px;margin-left:10px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-10px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f7f7f7;border-color:#dedede}.navbar-default .navbar-brand{color:#3c4353}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#272b35;background-color:transparent}.navbar-default .navbar-text{color:#3c4353}.navbar-default .navbar-nav>li>a{color:#3c4353}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#222;background-color:#eee}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#cbd0db}.navbar-default .navbar-toggle .icon-bar{background-color:#838a9d}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#dedede}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#3c4353}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#222;background-color:#eee}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#3c4353}.navbar-default .navbar-link:hover{color:#222}.navbar-default .btn-link{color:#3c4353}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#222}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#16a8f8;border-color:#068cd5}.navbar-inverse .navbar-brand{color:#cbd0db}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#cbd0db}.navbar-inverse .navbar-nav>li>a{color:#cbd0db}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:#34b3f9}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#48baf9}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#079ced}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#0795e3}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#48baf9}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#068cd5}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#068cd5}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#cbd0db}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:#34b3f9}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#48baf9}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#cbd0db}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-form{padding:10px 10px;margin-top:4px;margin-right:-10px;margin-bottom:4px;margin-left:-10px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;padding-left:0;margin-top:0;margin-bottom:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{float:none;margin-left:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.scale{-webkit-transition:all .15s ease;-o-transition:all .15s ease;transition:all .15s ease;-webkit-transform:scale(.8);-ms-transform:scale(.8);-o-transform:scale(.8);transform:scale(.8)}.scale.in{-webkit-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.scrollbar-hover::-webkit-scrollbar,.scrollbar-hover::-webkit-scrollbar-button,.scrollbar-hover::-webkit-scrollbar-thumb,.scrollbar-hover::-webkit-scrollbar-track{visibility:hidden}.scrollbar-hover:hover::-webkit-scrollbar,.scrollbar-hover:hover::-webkit-scrollbar-button,.scrollbar-hover:hover::-webkit-scrollbar-thumb,.scrollbar-hover:hover::-webkit-scrollbar-track{visibility:visible}@media (min-width:768px){::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-button{width:0;height:0}::-webkit-scrollbar-button:end:increment,::-webkit-scrollbar-button:start:decrement{display:block}::-webkit-scrollbar-button:vertical:end:decrement,::-webkit-scrollbar-button:vertical:start:increment{display:none}::-webkit-scrollbar-thumb:horizontal,::-webkit-scrollbar-thumb:vertical,::-webkit-scrollbar-track:horizontal,::-webkit-scrollbar-track:vertical{border-color:transparent;border-style:solid}::-webkit-scrollbar-track:vertical::-webkit-scrollbar-track:horizontal{background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box}::-webkit-scrollbar-thumb{min-height:28px;padding-top:100;background-color:rgba(0,0,0,.2);-webkit-background-clip:padding-box;background-clip:padding-box;border-radius:2px;-webkit-box-shadow:inset 1px 1px 0 rgba(0,0,0,.1),inset 0 -1px 0 rgba(0,0,0,.07)}::-webkit-scrollbar-thumb:hover{background-color:rgba(0,0,0,.4);-webkit-box-shadow:inset 1px 1px 1px rgba(0,0,0,.25)}::-webkit-scrollbar-thumb:active{background-color:rgba(0,0,0,.5);-webkit-box-shadow:inset 1px 1px 3px rgba(0,0,0,.35)}::-webkit-scrollbar-thumb:horizontal,::-webkit-scrollbar-thumb:vertical,::-webkit-scrollbar-track:horizontal,::-webkit-scrollbar-track:vertical{border-width:0}::-webkit-scrollbar-track:hover{background-color:rgba(0,0,0,.05);-webkit-box-shadow:inset 1px 0 0 rgba(0,0,0,.1)}::-webkit-scrollbar-track:active{background-color:rgba(0,0,0,.05);-webkit-box-shadow:inset 1px 0 0 rgba(0,0,0,.14),inset -1px -1px 0 rgba(0,0,0,.07)}}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out,-o-transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal>.loader{display:none}.modal.modal-loading .modal-dialog{opacity:0}.modal.modal-loading .loader{position:absolute;top:35%;left:50%;display:block;width:80px;margin-left:-40px;font-size:56px;color:#fff;text-align:center}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-iframe .modal-body{overflow:hidden!important}.modal-iframe .modal-body>iframe{border-radius:0 0 6px 6px}.modal-dialog{position:relative;width:auto;margin:0 auto;pointer-events:initial;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-dialog.modal-moveable{position:absolute;margin:0}.modal-dialog.modal-moveable .modal-header{cursor:move}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{min-height:16.43px;padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.modal-fullscreen{position:relative;width:100%!important;height:100%!important;margin:0;border-radius:0}.modal-fullscreen .modal-body{position:absolute;top:52px;right:0;bottom:0;left:0;overflow-y:auto}.body-modal-scroll-inside{overflow:auto}.tooltip{position:absolute;z-index:1030;display:block;font-size:12px;line-height:1.4;visibility:visible;filter:alpha(opacity=0);opacity:0}.tooltip.in{filter:alpha(opacity=100);opacity:1}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#3c4353;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#3c4353}.tooltip.top-left .tooltip-arrow{bottom:0;left:5px;border-width:5px 5px 0;border-top-color:#3c4353}.tooltip.top-right .tooltip-arrow{right:5px;bottom:0;border-width:5px 5px 0;border-top-color:#3c4353}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#3c4353}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#3c4353}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#3c4353}.tooltip.bottom-left .tooltip-arrow{top:0;left:5px;border-width:0 5px 5px;border-bottom-color:#3c4353}.tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-width:0 5px 5px;border-bottom-color:#3c4353}.tooltip-primary .tooltip-inner{background-color:#0c64eb}.tooltip-primary.tooltip.top .tooltip-arrow{border-top-color:#0c64eb}.tooltip-primary.tooltip.top-left .tooltip-arrow{border-top-color:#0c64eb}.tooltip-primary.tooltip.top-right .tooltip-arrow{border-top-color:#0c64eb}.tooltip-primary.tooltip.right .tooltip-arrow{border-right-color:#0c64eb}.tooltip-primary.tooltip.left .tooltip-arrow{border-left-color:#0c64eb}.tooltip-primary.tooltip.bottom .tooltip-arrow{border-bottom-color:#0c64eb}.tooltip-primary.tooltip.bottom-left .tooltip-arrow{border-bottom-color:#0c64eb}.tooltip-primary.tooltip.bottom-right .tooltip-arrow{border-bottom-color:#0c64eb}.tooltip-success .tooltip-inner{background-color:#00da88}.tooltip-success.tooltip.top .tooltip-arrow{border-top-color:#00da88}.tooltip-success.tooltip.top-left .tooltip-arrow{border-top-color:#00da88}.tooltip-success.tooltip.top-right .tooltip-arrow{border-top-color:#00da88}.tooltip-success.tooltip.right .tooltip-arrow{border-right-color:#00da88}.tooltip-success.tooltip.left .tooltip-arrow{border-left-color:#00da88}.tooltip-success.tooltip.bottom .tooltip-arrow{border-bottom-color:#00da88}.tooltip-success.tooltip.bottom-left .tooltip-arrow{border-bottom-color:#00da88}.tooltip-success.tooltip.bottom-right .tooltip-arrow{border-bottom-color:#00da88}.tooltip-info .tooltip-inner{background-color:#2196f3}.tooltip-info.tooltip.top .tooltip-arrow{border-top-color:#2196f3}.tooltip-info.tooltip.top-left .tooltip-arrow{border-top-color:#2196f3}.tooltip-info.tooltip.top-right .tooltip-arrow{border-top-color:#2196f3}.tooltip-info.tooltip.right .tooltip-arrow{border-right-color:#2196f3}.tooltip-info.tooltip.left .tooltip-arrow{border-left-color:#2196f3}.tooltip-info.tooltip.bottom .tooltip-arrow{border-bottom-color:#2196f3}.tooltip-info.tooltip.bottom-left .tooltip-arrow{border-bottom-color:#2196f3}.tooltip-info.tooltip.bottom-right .tooltip-arrow{border-bottom-color:#2196f3}.tooltip-warning .tooltip-inner{background-color:#ff9800}.tooltip-warning.tooltip.top .tooltip-arrow{border-top-color:#ff9800}.tooltip-warning.tooltip.top-left .tooltip-arrow{border-top-color:#ff9800}.tooltip-warning.tooltip.top-right .tooltip-arrow{border-top-color:#ff9800}.tooltip-warning.tooltip.right .tooltip-arrow{border-right-color:#ff9800}.tooltip-warning.tooltip.left .tooltip-arrow{border-left-color:#ff9800}.tooltip-warning.tooltip.bottom .tooltip-arrow{border-bottom-color:#ff9800}.tooltip-warning.tooltip.bottom-left .tooltip-arrow{border-bottom-color:#ff9800}.tooltip-warning.tooltip.bottom-right .tooltip-arrow{border-bottom-color:#ff9800}.tooltip-danger .tooltip-inner{background-color:#ff5d5d}.tooltip-danger.tooltip.top .tooltip-arrow{border-top-color:#ff5d5d}.tooltip-danger.tooltip.top-left .tooltip-arrow{border-top-color:#ff5d5d}.tooltip-danger.tooltip.top-right .tooltip-arrow{border-top-color:#ff5d5d}.tooltip-danger.tooltip.right .tooltip-arrow{border-right-color:#ff5d5d}.tooltip-danger.tooltip.left .tooltip-arrow{border-left-color:#ff5d5d}.tooltip-danger.tooltip.bottom .tooltip-arrow{border-bottom-color:#ff5d5d}.tooltip-danger.tooltip.bottom-left .tooltip-arrow{border-bottom-color:#ff5d5d}.tooltip-danger.tooltip.bottom-right .tooltip-arrow{border-bottom-color:#ff5d5d}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:300px;text-align:left;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:4px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover.no-arrow.top{margin-top:0}.popover.no-arrow.right{margin-left:0}.popover.no-arrow.bottom{margin-top:0}.popover.no-arrow.left{margin-left:0}.modal .popover,.popover-in-modal{z-index:1050}.popover-title{padding:8px 14px;margin:0;font-size:13px;font-weight:400;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:4px 4px 0 0}.popover-content{padding:9px 14px}.popover .arrow,.popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover .arrow{border-width:11px}.popover .arrow:after{content:"";border-width:10px}.popover.top .arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top .arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right .arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom .arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom .arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left .arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.popover-primary{border-color:#0c64eb}.popover-primary .popover-title{color:#fff;background-color:#0c64eb}.popover-primary.popover.top .arrow{border-top-color:#0c64eb}.popover-primary.popover.right .arrow{border-right-color:#0c64eb}.popover-primary.popover.left .arrow{border-left-color:#0c64eb}.popover-primary.popover.bottom .arrow,.popover-primary.popover.bottom .arrow:after{border-bottom-color:#0c64eb}.popover-success{border-color:#00da88}.popover-success .popover-title{color:#fff;background-color:#00da88}.popover-success.popover.top .arrow{border-top-color:#00da88}.popover-success.popover.right .arrow{border-right-color:#00da88}.popover-success.popover.left .arrow{border-left-color:#00da88}.popover-success.popover.bottom .arrow,.popover-success.popover.bottom .arrow:after{border-bottom-color:#00da88}.popover-info{border-color:#2196f3}.popover-info .popover-title{color:#fff;background-color:#2196f3}.popover-info.popover.top .arrow{border-top-color:#2196f3}.popover-info.popover.right .arrow{border-right-color:#2196f3}.popover-info.popover.left .arrow{border-left-color:#2196f3}.popover-info.popover.bottom .arrow,.popover-info.popover.bottom .arrow:after{border-bottom-color:#2196f3}.popover-warning{border-color:#ff9800}.popover-warning .popover-title{color:#fff;background-color:#ff9800}.popover-warning.popover.top .arrow{border-top-color:#ff9800}.popover-warning.popover.right .arrow{border-right-color:#ff9800}.popover-warning.popover.left .arrow{border-left-color:#ff9800}.popover-warning.popover.bottom .arrow,.popover-warning.popover.bottom .arrow:after{border-bottom-color:#ff9800}.popover-danger{border-color:#ff5d5d}.popover-danger .popover-title{color:#fff;background-color:#ff5d5d}.popover-danger.popover.top .arrow{border-top-color:#ff5d5d}.popover-danger.popover.right .arrow{border-right-color:#ff5d5d}.popover-danger.popover.left .arrow{border-left-color:#ff5d5d}.popover-danger.popover.bottom .arrow,.popover-danger.popover.bottom .arrow:after{border-bottom-color:#ff5d5d}.caret{display:inline-block;width:0;height:0;margin-bottom:2px;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:100px;padding:5px 0;margin:2px 0 0;font-size:13px;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #b6bdcc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#eee}.dropdown-menu>li>a{display:block;padding:5px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#3c4353;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#fff;text-decoration:none;background-color:#0c64eb}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#0c64eb;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#cbd0db}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.dropdown-hover .dropdown-menu{margin:-1px 0}.dropdown-hover:hover>.dropdown-menu,.open>.dropdown-menu{display:block}.dropdown-hover:hover>a,.open>a{outline:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;font-weight:700;line-height:1.42857143;color:#838a9d}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0 dotted;border-bottom:4px solid}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}}.dropdown-submenu{position:relative}.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;border-radius:4px}.dropdown-submenu.open>.dropdown-menu,.dropdown-submenu:hover>.dropdown-menu{display:block}.dropup .dropdown-submenu>.dropdown-menu{top:auto;bottom:0;margin-top:0;margin-bottom:-2px;border-radius:4px}.dropdown-submenu>a:after{display:block;float:right;width:0;height:0;margin-top:5px;margin-right:-10px;content:" ";border-color:transparent;border-style:solid;border-width:5px 0 5px 5px;border-left-color:#ccc}.dropdown-submenu:hover>a:after{border-left-color:#fff}.dropdown-submenu>a{min-width:100px}.dropdown-submenu>.dropdown-menu.pull-left{right:100%;left:auto}.dropdown-submenu:focus>a,.dropdown-submenu:hover>a{color:#fff;text-decoration:none;background-color:#0c64eb}.messager{display:table;margin:10px;overflow:hidden;color:#fff;pointer-events:auto;background-color:#3c4353;background-color:rgba(0,0,0,.8);border-radius:20px;-webkit-transition-property:opacity,-webkit-transform!important;-o-transition-property:opacity,-o-transform!important;transition-property:opacity,-webkit-transform!important;transition-property:opacity,transform!important;transition-property:opacity,transform,-webkit-transform,-o-transform!important}.messager-content{display:table-cell;padding:10px 15px;vertical-align:top}.messager-content>[class^=icon-]{display:inline-block;margin-right:8px}.messager-actions{display:table-cell;vertical-align:top}.messager-actions>.action{min-width:40px;height:40px;padding:0 12px;color:#fafafa;color:rgba(255,255,255,.6);text-align:center;text-shadow:none;background:0 0;border:none}.messager-actions>.action.close{padding-bottom:5px;font-size:20px;font-weight:400;opacity:1}.messager-actions>.action:hover{color:#fff;background:rgba(0,0,0,.1)}.messager-actions .action-icon+.action-text{margin-left:8px}.messagers-holder{position:fixed;z-index:99999;padding:10px;pointer-events:none}.messagers-holder.top{top:0}.messagers-holder.top-left{top:0;left:0}.messagers-holder.top-right{top:0;right:0}.messagers-holder.bottom{bottom:0}.messagers-holder.bottom-left{bottom:0;left:0}.messagers-holder.bottom-right{right:0;bottom:0}.messagers-holder.bottom-right .messager,.messagers-holder.top-right .messager{margin-left:auto}.messagers-holder.center{top:0}.messagers-holder.bottom,.messagers-holder.center,.messagers-holder.top{right:0;left:0}.messagers-holder.bottom .messager,.messagers-holder.center .messager,.messagers-holder.top .messager{margin:10px auto}.messager-primary{background-color:#0c64eb}.messager-success{background-color:#00da88}.messager-info{background-color:#2196f3}.messager-warning{background-color:#ff9800}.messager-danger{background-color:#ff5d5d}.messager-important{background-color:#bd7b46}.messager-special{background-color:#8666b8}.article{padding:20px}.article>header h1,.article>header h2,.article>header h3{margin-bottom:20px;line-height:1.5}.article>header>.abstract,.article>header>dl{padding:10px 15px;font-size:12px;color:#67738e;background-color:#f1f1f1}.article>header>.abstract>p:last-child,.article>header>dl>p:last-child{margin-bottom:0}.article>header>dl{margin:0;border-bottom:1px solid #e9e9e9}.article>header>dl.pull-right{background-color:transparent;border:none}.article>footer{border-top:1px dashed #d8d8d8}.article>footer>p{padding:10px 15px}.article-content,.article>.content{padding:20px 0;font-size:14px;line-height:1.57142857}.article-content h1,.article>.content h1{font-size:20px}.article-content h2,.article>.content h2{font-size:18px}.article-content h3,.article>.content h3{font-size:16px}.article-content h4,.article>.content h4{margin-top:15px;font-size:14px}.article-content h5,.article>.content h5{margin-top:15px;font-size:13px}.article-content h6,.article>.content h6{margin-top:15px;font-size:11px}.article-content img,.article>.content img{margin:10px 0}.article-content p>img+img,.article>.content p>img+img{margin-left:10px}.article-content p>img[align=right],.article>.content p>img[align=right]{margin-left:10px}.article-content dl,.article>.content dl{padding-right:2em;padding-left:2em}.article-content table,.article>.content table{margin-bottom:20px}.article-content table td,.article-content table th,.article>.content table td,.article>.content table th{padding:8px 10px;line-height:1.42857143;vertical-align:top;border-bottom:1px solid #cbd0db}.article-content table>thead>tr>th,.article>.content table>thead>tr>th{vertical-align:bottom;background-color:transparent;border-bottom:1px solid #cbd0db}.article-content p{margin-bottom:0}.article-content table{width:100%}.article>.content table td,.article>.content table th,.article>.content table>thead>tr>th{border:1px solid #cbd0db}body.article-content{padding:8px}.article-condensed{padding:20px 0}.article-condensed>header{padding:0 20px}.article-condensed>header>.abstract,.article-condensed>header>dl{padding:10px 15px;margin:0 -20px}.article-condensed>.article-content,.article-condensed>.content{padding:20px}.article-condensed>.article-content>img,.article-condensed>.article-content>pre,.article-condensed>.content>img,.article-condensed>.content>pre{margin-right:-20px;margin-left:-20px;border-radius:0}.article-condensed>.article-content>pre,.article-condensed>.content>pre{border-right:none;border-left:none}.article-condensed>footer{border-top:1px dashed #d8d8d8}.article-condensed>footer>p{padding:10px 15px}.article-condensed>footer>.pager-justify>.previous>a{border-left:none;border-radius:0}.article-condensed>footer>.pager-justify>.next>a{border-right:none;border-radius:0}/*! + * Copyright (c) 2019 cnezsoft.com; Licensed MIT + *//*! normalize.css v2.1.3 | MIT License | git.io/normalize */article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,video{display:inline-block}audio:not([controls]){display:none;height:0}[hidden],template{display:none}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}a{background:0 0}a:focus{outline:thin dotted}a:active,a:hover{outline:0}h1{margin:.67em 0;font-size:2em}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}mark{color:#000;background:#ff0}code,kbd,pre,samp{font-family:monospace,serif;font-size:1em}pre{white-space:pre-wrap}q{quotes:"\201C" "\201D" "\2018" "\2019"}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:0}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}button,input,select,textarea{margin:0;font-family:inherit;font-size:100%}button,input{line-height:normal}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}textarea{overflow:auto;vertical-align:top}table{border-spacing:0;border-collapse:collapse}#userMenu:after,#userMenu:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fixed-md:after,.container-fixed-md:before,.container-fixed-sm:after,.container-fixed-sm:before,.container-fixed-xs:after,.container-fixed-xs:before,.container-fixed:after,.container-fixed:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.dl-inline:after,.dl-inline:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager-justify:after,.pager-justify:before,.pager-loose:after,.pager-loose:before,.row:after,.row:before,.table-footer:after,.table-footer:before{display:table;content:" "}#userMenu:after,.btn-toolbar:after,.clearfix:after,.container-fixed-md:after,.container-fixed-sm:after,.container-fixed-xs:after,.container-fixed:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.dl-inline:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager-justify:after,.pager-loose:after,.row:after,.table-footer:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none}.showing{display:block}.hidden{display:none!important;visibility:hidden!important}.show{display:block!important;visibility:visible!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.affix{position:fixed}.with-padding{padding:5px 12px}.no-padding{padding:0!important}.no-margin{margin:0!important}.inline-block.visible-xs,.inline.visible-xs,.visible-xs,td.visible-xs,th.visible-xs,tr.visible-xs{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}.inline.visible-xs{display:inline!important}.inline-block.visible-xs{display:inline-block!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-xs.visible-sm{display:block!important}.inline.visible-xs.visible-sm{display:inline!important}.inline-block.visible-xs.visible-sm{display:inline-block!important}tr.visible-xs.visible-sm{display:table-row!important}td.visible-xs.visible-sm,th.visible-xs.visible-sm{display:table-cell!important}}@media (min-width:992px) and (max-width:1799px){.visible-xs.visible-md{display:block!important}.inline.visible-xs.visible-md{display:inline!important}.inline-block.visible-xs.visible-md{display:inline-block!important}tr.visible-xs.visible-md{display:table-row!important}td.visible-xs.visible-md,th.visible-xs.visible-md{display:table-cell!important}}@media (min-width:1800px){.visible-xs.visible-lg{display:block!important}.inline.visible-xs.visible-lg{display:inline!important}.inline-block.visible-xs.visible-lg{display:inline-block!important}tr.visible-xs.visible-lg{display:table-row!important}td.visible-xs.visible-lg,th.visible-xs.visible-lg{display:table-cell!important}}.inline-block.visible-sm,.inline.visible-sm,.visible-sm,td.visible-sm,th.visible-sm,tr.visible-sm{display:none!important}@media (max-width:767px){.visible-sm.visible-xs{display:block!important}.inline.visible-sm.visible-xs{display:inline!important}.inline-block.visible-sm.visible-xs{display:inline-block!important}tr.visible-sm.visible-xs{display:table-row!important}td.visible-sm.visible-xs,th.visible-sm.visible-xs{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}.inline.visible-sm{display:inline!important}.inline-block.visible-sm{display:inline-block!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:992px) and (max-width:1799px){.visible-sm.visible-md{display:block!important}.inline.visible-sm.visible-md{display:inline!important}.inline-block.visible-sm.visible-md{display:inline-block!important}tr.visible-sm.visible-md{display:table-row!important}td.visible-sm.visible-md,th.visible-sm.visible-md{display:table-cell!important}}@media (min-width:1800px){.visible-sm.visible-lg{display:block!important}.inline.visible-sm.visible-lg{display:inline!important}.inline-block.visible-sm.visible-lg{display:inline-block!important}tr.visible-sm.visible-lg{display:table-row!important}td.visible-sm.visible-lg,th.visible-sm.visible-lg{display:table-cell!important}}.inline-block.visible-md,.inline.visible-md,.visible-md,td.visible-md,th.visible-md,tr.visible-md{display:none!important}@media (max-width:767px){.visible-md.visible-xs{display:block!important}.inline.visible-md.visible-xs{display:inline!important}.inline-block.visible-md.visible-xs{display:inline-block!important}tr.visible-md.visible-xs{display:table-row!important}td.visible-md.visible-xs,th.visible-md.visible-xs{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-md.visible-sm{display:block!important}.inline.visible-md.visible-sm{display:inline!important}.inline-block.visible-md.visible-sm{display:inline-block!important}tr.visible-md.visible-sm{display:table-row!important}td.visible-md.visible-sm,th.visible-md.visible-sm{display:table-cell!important}}@media (min-width:992px) and (max-width:1799px){.visible-md{display:block!important}.inline.visible-md{display:inline!important}.inline-block.visible-md{display:inline-block!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:1800px){.visible-md.visible-lg{display:block!important}.inline.visible-md.visible-lg{display:inline!important}.inline-block.visible-md.visible-lg{display:inline-block!important}tr.visible-md.visible-lg{display:table-row!important}td.visible-md.visible-lg,th.visible-md.visible-lg{display:table-cell!important}}.inline-block.visible-lg,.inline.visible-lg,.visible-lg,td.visible-lg,th.visible-lg,tr.visible-lg{display:none!important}@media (max-width:767px){.visible-lg.visible-xs{display:block!important}.inline.visible-lg.visible-xs{display:inline!important}.inline-block.visible-lg.visible-xs{display:inline-block!important}tr.visible-lg.visible-xs{display:table-row!important}td.visible-lg.visible-xs,th.visible-lg.visible-xs{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-lg.visible-sm{display:block!important}.inline.visible-lg.visible-sm{display:inline!important}.inline-block.visible-lg.visible-sm{display:inline-block!important}tr.visible-lg.visible-sm{display:table-row!important}td.visible-lg.visible-sm,th.visible-lg.visible-sm{display:table-cell!important}}@media (min-width:992px) and (max-width:1799px){.visible-lg.visible-md{display:block!important}.inline.visible-lg.visible-md{display:inline!important}.inline-block.visible-lg.visible-md{display:inline-block!important}tr.visible-lg.visible-md{display:table-row!important}td.visible-lg.visible-md,th.visible-lg.visible-md{display:table-cell!important}}@media (min-width:1800px){.visible-lg{display:block!important}.inline.visible-lg{display:inline!important}.inline-block.visible-lg{display:inline-block!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}.hidden-xs{display:block!important}.inline.hidden-xs{display:inline!important}.inline-block.hidden-xs{display:inline-block!important}tr.hidden-xs{display:table-row!important}td.hidden-xs,th.hidden-xs{display:table-cell!important}@media (max-width:767px){.hidden-xs,.inline-block.hidden-xs,.inline.hidden-xs,td.hidden-xs,th.hidden-xs,tr.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-xs.hidden-sm,.inline-block.hidden-xs.hidden-sm,.inline.hidden-xs.hidden-sm,td.hidden-xs.hidden-sm,th.hidden-xs.hidden-sm,tr.hidden-xs.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1799px){.hidden-xs.hidden-md,.inline-block.hidden-xs.hidden-md,.inline.hidden-xs.hidden-md,td.hidden-xs.hidden-md,th.hidden-xs.hidden-md,tr.hidden-xs.hidden-md{display:none!important}}@media (min-width:1800px){.hidden-xs.hidden-lg,.inline-block.hidden-xs.hidden-lg,.inline.hidden-xs.hidden-lg,td.hidden-xs.hidden-lg,th.hidden-xs.hidden-lg,tr.hidden-xs.hidden-lg{display:none!important}}.hidden-sm{display:block!important}.inline.hidden-sm{display:inline!important}.inline-block.hidden-sm{display:inline-block!important}tr.hidden-sm{display:table-row!important}td.hidden-sm,th.hidden-sm{display:table-cell!important}@media (max-width:767px){.hidden-sm.hidden-xs,.inline-block.hidden-sm.hidden-xs,.inline.hidden-sm.hidden-xs,td.hidden-sm.hidden-xs,th.hidden-sm.hidden-xs,tr.hidden-sm.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm,.inline-block.hidden-sm,.inline.hidden-sm,td.hidden-sm,th.hidden-sm,tr.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1799px){.hidden-sm.hidden-md,.inline-block.hidden-sm.hidden-md,.inline.hidden-sm.hidden-md,td.hidden-sm.hidden-md,th.hidden-sm.hidden-md,tr.hidden-sm.hidden-md{display:none!important}}@media (min-width:1800px){.hidden-sm.hidden-lg,.inline-block.hidden-sm.hidden-lg,.inline.hidden-sm.hidden-lg,td.hidden-sm.hidden-lg,th.hidden-sm.hidden-lg,tr.hidden-sm.hidden-lg{display:none!important}}.hidden-md{display:block!important}.inline.hidden-md{display:inline!important}.inline-block.hidden-md{display:inline-block!important}tr.hidden-md{display:table-row!important}td.hidden-md,th.hidden-md{display:table-cell!important}@media (max-width:767px){.hidden-md.hidden-xs,.inline-block.hidden-md.hidden-xs,.inline.hidden-md.hidden-xs,td.hidden-md.hidden-xs,th.hidden-md.hidden-xs,tr.hidden-md.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-md.hidden-sm,.inline-block.hidden-md.hidden-sm,.inline.hidden-md.hidden-sm,td.hidden-md.hidden-sm,th.hidden-md.hidden-sm,tr.hidden-md.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1799px){.hidden-md,.inline-block.hidden-md,.inline.hidden-md,td.hidden-md,th.hidden-md,tr.hidden-md{display:none!important}}@media (min-width:1800px){.hidden-md.hidden-lg,.inline-block.hidden-md.hidden-lg,.inline.hidden-md.hidden-lg,td.hidden-md.hidden-lg,th.hidden-md.hidden-lg,tr.hidden-md.hidden-lg{display:none!important}}.hidden-lg{display:block!important}.inline.hidden-lg{display:inline!important}.inline-block.hidden-lg{display:inline-block!important}tr.hidden-lg{display:table-row!important}td.hidden-lg,th.hidden-lg{display:table-cell!important}@media (max-width:767px){.hidden-lg.hidden-xs,.inline-block.hidden-lg.hidden-xs,.inline.hidden-lg.hidden-xs,td.hidden-lg.hidden-xs,th.hidden-lg.hidden-xs,tr.hidden-lg.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-lg.hidden-sm,.inline-block.hidden-lg.hidden-sm,.inline.hidden-lg.hidden-sm,td.hidden-lg.hidden-sm,th.hidden-lg.hidden-sm,tr.hidden-lg.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1799px){.hidden-lg.hidden-md,.inline-block.hidden-lg.hidden-md,.inline.hidden-lg.hidden-md,td.hidden-lg.hidden-md,th.hidden-lg.hidden-md,tr.hidden-lg.hidden-md{display:none!important}}@media (min-width:1800px){.hidden-lg,.inline-block.hidden-lg,.inline.hidden-lg,td.hidden-lg,th.hidden-lg,tr.hidden-lg{display:none!important}}.inline-block.visible-print,.inline.visible-print,.visible-print,td.visible-print,th.visible-print,tr.visible-print{display:none!important}@media print{.visible-print{display:block!important}.inline.visible-print{display:inline!important}.inline-block.visible-print{display:inline-block!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}.hidden-print,.inline-block.hidden-print,.inline.hidden-print,td.hidden-print,th.hidden-print,tr.hidden-print{display:none!important}}*,:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,Tahoma,'Microsoft Yahei','PingFang SC','Hiragino Sans GB','WenQuanYi Micro Hei',sans-serif;font-size:13px;line-height:1.42857143;color:#3c4353;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#3c4353;text-decoration:none;cursor:pointer;-webkit-transition:.4s cubic-bezier(.175,.885,.32,1);-o-transition:.4s cubic-bezier(.175,.885,.32,1);transition:.4s cubic-bezier(.175,.885,.32,1);-webkit-transition-property:color,background,opacity,left,top,right,bottom,-webkit-transform;-o-transition-property:color,background,opacity,left,top,right,bottom,-o-transform;transition-property:color,background,opacity,left,top,right,bottom,-webkit-transform;transition-property:color,background,transform,opacity,left,top,right,bottom;transition-property:color,background,transform,opacity,left,top,right,bottom,-webkit-transform,-o-transform}a:focus,a:hover{color:#0c64eb;text-decoration:none}a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}a.disabled,a.disabled:focus,a.disabled:hover,a[disabled],a[disabled]:focus,a[disabled]:hover{color:#aaa;text-decoration:none;cursor:default}audio,canvas,img,video{max-width:100%;vertical-align:middle}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);border:0}::-moz-selection{text-shadow:none;background:#b3d4fc}::selection{text-shadow:none;background:#b3d4fc}fieldset{padding:0;margin:0;border:0}textarea{resize:vertical}ol,ul{padding-left:20px}.container,.container-fixed,.container-fixed-md,.container-fixed-sm,.container-fixed-xs,.container-fluid{padding-right:10px;padding-left:10px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{max-width:972px}}@media (min-width:992px){.container{max-width:1760px}}@media (min-width:1800px){.container{max-width:1760px}}.container-fixed{width:1760px}.container-fixed-md{width:1760px}.container-fixed-sm{width:972px}.container-fixed-xs{width:748px}.row{margin-right:-10px;margin-left:-10px}.col,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:10px;padding-left:10px}.col,.col-xs,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-1,.col-xs-1{width:8.33333333%}.col-2,.col-xs-2{width:16.66666667%}.col-3,.col-xs-3{width:25%}.col-4,.col-xs-4{width:33.33333333%}.col-5,.col-xs-5{width:41.66666667%}.col-6,.col-xs-6{width:50%}.col-7,.col-xs-7{width:58.33333333%}.col-8,.col-xs-8{width:66.66666667%}.col-9,.col-xs-9{width:75%}.col-10,.col-xs-10{width:83.33333333%}.col-11,.col-xs-11{width:91.66666667%}.col-12,.col-xs-12{width:100%}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-1{width:8.33333333%}.col-sm-2{width:16.66666667%}.col-sm-3{width:25%}.col-sm-4{width:33.33333333%}.col-sm-5{width:41.66666667%}.col-sm-6{width:50%}.col-sm-7{width:58.33333333%}.col-sm-8{width:66.66666667%}.col-sm-9{width:75%}.col-sm-10{width:83.33333333%}.col-sm-11{width:91.66666667%}.col-sm-12{width:100%}.col-sm-push-1{left:8.33333333%}.col-sm-push-2{left:16.66666667%}.col-sm-push-3{left:25%}.col-sm-push-4{left:33.33333333%}.col-sm-push-5{left:41.66666667%}.col-sm-push-6{left:50%}.col-sm-push-7{left:58.33333333%}.col-sm-push-8{left:66.66666667%}.col-sm-push-9{left:75%}.col-sm-push-10{left:83.33333333%}.col-sm-push-11{left:91.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-3{right:25%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-6{right:50%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-9{right:75%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-11{right:91.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-11{margin-left:91.66666667%}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-1{width:8.33333333%}.col-md-2{width:16.66666667%}.col-md-3{width:25%}.col-md-4{width:33.33333333%}.col-md-5{width:41.66666667%}.col-md-6{width:50%}.col-md-7{width:58.33333333%}.col-md-8{width:66.66666667%}.col-md-9{width:75%}.col-md-10{width:83.33333333%}.col-md-11{width:91.66666667%}.col-md-12{width:100%}.col-md-push-0{left:auto}.col-md-push-1{left:8.33333333%}.col-md-push-2{left:16.66666667%}.col-md-push-3{left:25%}.col-md-push-4{left:33.33333333%}.col-md-push-5{left:41.66666667%}.col-md-push-6{left:50%}.col-md-push-7{left:58.33333333%}.col-md-push-8{left:66.66666667%}.col-md-push-9{left:75%}.col-md-push-10{left:83.33333333%}.col-md-push-11{left:91.66666667%}.col-md-pull-0{right:auto}.col-md-pull-1{right:8.33333333%}.col-md-pull-2{right:16.66666667%}.col-md-pull-3{right:25%}.col-md-pull-4{right:33.33333333%}.col-md-pull-5{right:41.66666667%}.col-md-pull-6{right:50%}.col-md-pull-7{right:58.33333333%}.col-md-pull-8{right:66.66666667%}.col-md-pull-9{right:75%}.col-md-pull-10{right:83.33333333%}.col-md-pull-11{right:91.66666667%}.col-md-offset-0{margin-left:0}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-3{margin-left:25%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-6{margin-left:50%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-9{margin-left:75%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-11{margin-left:91.66666667%}}@media (min-width:1800px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-1{width:8.33333333%}.col-lg-2{width:16.66666667%}.col-lg-3{width:25%}.col-lg-4{width:33.33333333%}.col-lg-5{width:41.66666667%}.col-lg-6{width:50%}.col-lg-7{width:58.33333333%}.col-lg-8{width:66.66666667%}.col-lg-9{width:75%}.col-lg-10{width:83.33333333%}.col-lg-11{width:91.66666667%}.col-lg-12{width:100%}.col-lg-push-0{left:auto}.col-lg-push-1{left:8.33333333%}.col-lg-push-2{left:16.66666667%}.col-lg-push-3{left:25%}.col-lg-push-4{left:33.33333333%}.col-lg-push-5{left:41.66666667%}.col-lg-push-6{left:50%}.col-lg-push-7{left:58.33333333%}.col-lg-push-8{left:66.66666667%}.col-lg-push-9{left:75%}.col-lg-push-10{left:83.33333333%}.col-lg-push-11{left:91.66666667%}.col-lg-pull-0{right:auto}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-3{right:25%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-6{right:50%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-9{right:75%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-11{right:91.66666667%}.col-lg-offset-0{margin-left:0}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-11{margin-left:91.66666667%}}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:14px;line-height:1.4}@media (min-width:768px){.lead{font-size:19.5px}}.small,small{font-size:85%}cite{font-style:normal}.text-gray,.text-muted{color:#838a9d}.text-gray a,.text-muted a{color:#757d92}.text-gray a:active,.text-gray a:hover,.text-muted a:active,.text-muted a:hover{color:#3c4353}.text-primary{color:#0c64eb}.text-warning,.text-yellow{color:#ff9800}.text-danger,.text-red{color:#ff5d5d}.text-green,.text-success{color:#00da88}.text-blue,.text-info{color:#2196f3}.text-brown,.text-important{color:#bd7b46}.text-purple,.text-special{color:#8666b8}.text-link{color:#3c4353}.text-link:active,.text-link:hover{color:#3c4353}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.nobr,.text-nowrap{overflow:hidden;white-space:nowrap}.text-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}dl{margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}.dl-inline dt{display:inline-block}.dl-inline dd{display:inline-block;padding-right:1em}.dl-inline dd:last-child{padding-right:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}blockquote{padding:10px 20px;margin:0 0 20px;font-size:16.25px;border-left:5px solid #eee}blockquote ol,blockquote p,blockquote ul{font-weight:300}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote small{display:block;line-height:1.42857143;color:#838a9d}blockquote small:before{content:'\2014 \00A0'}blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}blockquote.pull-right small:before{content:''}blockquote.pull-right small:after{content:'\00A0 \2014'}.ol-pd-2{padding-left:40px}.ol-pd-3{padding-left:60px}.ol-pd-4{padding-left:80px}.bg-black,.bg-default{color:#fff;background-color:#3c4353}.bg-primary{color:#fff;background-color:#0c64eb}.bg-green,.bg-success{color:#fff;background-color:#00da88}.bg-blue,.bg-info{color:#fff;background-color:#2196f3}.bg-warning,.bg-yellow{color:#fff;background-color:#ff9800}.bg-danger,.bg-red{color:#fff;background-color:#ff5d5d}.bg-brown,.bg-important{color:#fff;background-color:#bd7b46}.bg-purple,.bg-special{color:#fff;background-color:#8666b8}.hl-default,.hl-gray{background-color:#f1f1f1}.hl-primary{background-color:#e9f2fb}.hl-green,.hl-success{background-color:#e8f5e9}.hl-blue,.hl-info{background-color:#e3f2fd}.hl-warning,.hl-yellow{background-color:#fff3e0}.hl-danger,.hl-red{background-color:#ffebee}.hl-brown,.hl-important{background-color:#efebe9}.hl-purple,.hl-special{background-color:#f3e5f5}.header-dividing,.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}h1,h2,h3,h4,h5,h6{font-family:"Helvetica Neue",Helvetica,Arial,Tahoma,'Microsoft Yahei','PingFang SC','Hiragino Sans GB','WenQuanYi Micro Hei',sans-serif;font-weight:700;line-height:1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:400;line-height:1;color:#838a9d}h1,h2,h3{margin-top:20px;margin-bottom:10px}h1 small,h2 small,h3 small{font-size:65%}h4,h5,h6{margin-top:10px;margin-bottom:10px}h4 small,h5 small,h6 small{font-size:75%}h1{font-size:24px}h2{font-size:20px}h3{font-size:18px}h4{font-size:14px}h5{font-size:13px}h6{font-size:12px}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}hr.divider-sm{margin-top:10px;margin-bottom:10px}hr.divider{margin:0}.label{display:inline;padding:.2em .6em .2em;font-size:85.71428571%;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#838a9d;border-radius:.25em}.label[href]:focus,.label[href]:hover{color:#fff;background-color:#697084}.label.label-outline{color:#838a9d;background:0 0;border:1px solid #838a9d}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.label-badge{display:inline-block;min-width:18px;padding:3px 7px;font-size:12px;line-height:1;border-radius:9px}.label-dot{display:inline-block;width:8px;height:8px;padding:0;line-height:20px;text-indent:-9999em;border-radius:50%}.label-dot:empty{display:inline-block}.label-primary{background-color:#0c64eb}.label-primary[href]:focus,.label-primary[href]:hover{color:#fff;background-color:#0a4fba}.label-primary.label-outline{color:#0c64eb;background:0 0;border:1px solid #0c64eb}.label-success{background-color:#00da88}.label-success[href]:focus,.label-success[href]:hover{color:#fff;background-color:#00a768}.label-success.label-outline{color:#00da88;background:0 0;border:1px solid #00da88}.label-info{background-color:#2196f3}.label-info[href]:focus,.label-info[href]:hover{color:#fff;background-color:#0c7cd5}.label-info.label-outline{color:#2196f3;background:0 0;border:1px solid #2196f3}.label-warning{background-color:#ff9800}.label-warning[href]:focus,.label-warning[href]:hover{color:#fff;background-color:#cc7a00}.label-warning.label-outline{color:#ff9800;background:0 0;border:1px solid #ff9800}.label-danger{background-color:#ff5d5d}.label-danger[href]:focus,.label-danger[href]:hover{color:#fff;background-color:#ff2a2a}.label-danger.label-outline{color:#ff5d5d;background:0 0;border:1px solid #ff5d5d}.btn .label,.nav-primary>li>a>.label{position:relative;top:-1px}.btn-danger .label,.btn-info .label,.btn-primary .label,.btn-success .label,.btn-warning .label{background-color:rgba(0,0,0,.2)}.list-group-item.active>.label,.nav-pills>.active>a>.label,.nav-primary>.active>a>.label{color:#3c4353;background-color:#fff}.nav>li>a>.label{margin-left:3px}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#838a9d}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:8px;margin-bottom:20px;overflow:hidden;background-color:#e9f2fb;border-radius:3px}.progress-bar{float:left;width:0;height:100%;font-size:12px;color:#fff;text-align:center;background-color:#0c64eb;border-radius:3px;-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#00da88}.progress-bar-info{background-color:#2196f3}.progress-bar-warning{background-color:#ff9800}.progress-bar-danger{background-color:#ff5d5d}.avatar{position:relative;display:block;width:30px;height:30px;overflow:hidden;line-height:30px;text-align:center;background-position:center;-webkit-background-size:cover;background-size:cover;border-radius:4px}.avatar img{display:block;width:100%;height:100%;margin:0}.avatar-sm{width:20px;height:20px;font-size:12px;line-height:20px}.avatar-lg{width:40px;height:40px;font-size:20px;line-height:40px}.avatar-lg>.icon{font-size:20px}.avatar-xl{width:70px;height:70px;font-size:35px;line-height:70px}.avatar-xl>.icon{font-size:35px}.avatar-circle{border-radius:50%}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:19.5px;line-height:inherit;color:#3c4353;border:0;border-bottom:1px solid #eee}label{display:inline-block;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:5px 0 0;margin-top:0\9;line-height:normal}input[type=file]{display:block}select[multiple],select[size]{height:auto}select:-moz-focusring{color:transparent;text-shadow:0 0 0 #000}select optgroup{font-family:inherit;font-size:inherit;font-style:inherit}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}.form-control::-webkit-input-placeholder{color:#838a9d}.form-control::-moz-placeholder{color:#838a9d}.form-control::placeholder{color:#838a9d}.form-control{display:block;width:100%;height:32px;padding:5px 8px;font-size:13px;line-height:1.42857143;color:#222;vertical-align:middle;background-color:#fff;border:1px solid #dcdcdc;border-radius:2px;-webkit-box-shadow:none;box-shadow:none;-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s,-webkit-box-shadow ease-in-out .15s}.form-control.focus,.form-control:focus{border-color:#0c64eb;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(12,100,235,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(12,100,235,.6)}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#f5f5f5}.form-control[readonly]{cursor:default}textarea.form-control{height:auto;min-height:32px}.form-group{margin-bottom:10px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:3px;margin-top:4px\9;margin-left:-20px}.os-android .checkbox input[type=checkbox],.os-android .checkbox-inline input[type=checkbox],.os-android .radio input[type=radio],.os-android .radio-inline input[type=radio]{margin-top:0}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.input-sm{height:24px;padding:2px 8px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:24px;line-height:24px}textarea.input-sm{height:auto}.input-lg{height:39px;padding:10px 16px;font-size:14px;line-height:1.25;border-radius:6px}select.input-lg{height:39px;line-height:39px}textarea.input-lg{height:auto}.has-warning .help-block,.has-warning>label{color:#ff9800}.has-warning .form-control{border-color:#ff9800;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#cc7a00;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ffc166;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ffc166}.has-warning .input-group-addon{color:#ff9800;background-color:#fff3e0;border-color:#ff9800}.has-error .help-block,.has-error>label{color:#ff5d5d}.has-error .form-control{border-color:#ff5d5d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#ff2a2a;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ffc3c3;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ffc3c3}.has-error .input-group-addon{color:#ff5d5d;background-color:#ffebee;border-color:#ff5d5d}.has-success .help-block,.has-success>label{color:#00da88}.has-success .form-control{border-color:#00da88;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#00a768;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #41ffb8;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #41ffb8}.has-success .input-group-addon{color:#00da88;background-color:#e8f5e9;border-color:#00da88}.form-control-static{min-height:33px;padding-top:6px;padding-bottom:6px;margin-bottom:0}.help-block{display:block;margin:5px 0;color:#74809b}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;padding-left:0;margin-top:0;margin-bottom:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{float:none;margin-left:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .form-group>label,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:6px;margin-top:0;margin-bottom:0}.form-horizontal .form-group{margin-right:-10px;margin-left:-10px}@media (min-width:768px){.form-horizontal .form-group>label{text-align:right}}.required{position:relative}.required:after{position:absolute;top:0;right:-10px;display:inline-block;font-size:14px;color:#ff5d5d;content:'*'}.form-horizontal .required:after{top:5px;right:-1px}.form-condensed .form-group{margin-bottom:10px}.form-condensed .form-control{height:24px;padding:2px 8px;font-size:12px;line-height:1.5;border-radius:3px}select.form-condensed .form-control{height:24px;line-height:24px}textarea.form-condensed .form-control{height:auto}.form-condensed textarea.form-control{height:auto}.form-condensed .btn{padding:3px 8px;font-size:12px;line-height:18px;border-radius:4px}.form-condensed .input-group>.form-control,.form-condensed .input-group>.input-group-addon,.form-condensed .input-group>.input-group-btn>.btn{padding:2px 8px;font-size:12px;border-radius:3px}.form-condensed .input-group .form-control:first-child,.form-condensed .input-group-addon:first-child,.form-condensed .input-group-btn:first-child>.btn,.form-condensed .input-group-btn:first-child>.btn-group>.btn,.form-condensed .input-group-btn:first-child>.dropdown-toggle,.form-condensed .input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.form-condensed .input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.form-condensed .input-group .form-control:last-child,.form-condensed .input-group-addon:last-child,.form-condensed .input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.form-condensed .input-group-btn:first-child>.btn:not(:first-child),.form-condensed .input-group-btn:last-child>.btn,.form-condensed .input-group-btn:last-child>.btn-group>.btn,.form-condensed .input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.form-condensed .input-group-addon:first-child{border-right:0}.form-condensed .input-group-addon:last-child{border-left:0}.form-condensed .input-group-addon.fix-border,.form-condensed .input-group-btn.fix-border>.btn{border-right:0;border-left:0;border-radius:0}.form-condensed.form-horizontal .checkbox,.form-condensed.form-horizontal .checkbox-inline,.form-condensed.form-horizontal .form-group>label,.form-condensed.form-horizontal .radio,.form-condensed.form-horizontal .radio-inline{padding-top:1px}.close{float:right;font-size:19.5px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.load-indicator{position:relative}.load-indicator:after,.load-indicator:before{position:absolute;color:#838a9d;text-align:center;visibility:hidden;opacity:0;-webkit-transition:.2s cubic-bezier(.175,.885,.32,1);-o-transition:.2s cubic-bezier(.175,.885,.32,1);transition:.2s cubic-bezier(.175,.885,.32,1);-webkit-transition-property:visibility,opacity;-o-transition-property:visibility,opacity;transition-property:visibility,opacity}.load-indicator:before{top:0;right:0;bottom:0;left:0;z-index:10;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding-top:50px;font-size:12px;content:attr(data-loading);background-color:rgba(255,255,255,.65);-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.load-indicator:after{top:50%;left:50%;z-index:11;display:block;width:30px;height:30px;margin-top:-15px;margin-left:-15px;font-family:ZentaoIcon;font-size:18px;font-size:24px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;line-height:30px;text-transform:none;content:"\e982";-webkit-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;animation:spin 2s infinite linear;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.load-indicator.loading:after,.load-indicator.loading:before{visibility:visible;opacity:1}table{max-width:100%;background-color:transparent}caption{padding:8px 10px;color:#838a9d;text-align:left}th{text-align:left}.table{width:100%;margin-bottom:20px}.table td,.table th{padding:8px 10px;line-height:1.42857143;vertical-align:top;border-bottom:1px solid #cbd0db;-webkit-transition:background .2s cubic-bezier(.175,.885,.32,1);-o-transition:background .2s cubic-bezier(.175,.885,.32,1);transition:background .2s cubic-bezier(.175,.885,.32,1)}.table>thead>tr>th{font-weight:700;color:#3c4353;vertical-align:bottom;background-color:transparent;border-bottom:1px solid #cbd0db}.table>tbody+tbody{border-top:2px solid #cbd0db}.table-fixed{table-layout:fixed}.table-fixed td,.table-fixed th{overflow:hidden;white-space:nowrap}.table-fixed .nofixed,.table-fixed tfoot>tr>td,.table-fixed tfoot>tr>th{overflow:visible}.table-borderless td,.table-borderless th,.table-borderless thead>tr>th{border:none}.table-auto{width:auto;max-width:100%}.table-condensed td,.table-condensed th{padding:5px}.table-bordered{border:1px solid #cbd0db}.table-bordered td,.table-bordered th{border:1px solid #cbd0db}.table-striped>tbody>tr:nth-child(odd)>td,.table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#e9f2fb}table col[class*=col-]{display:table-column;float:none}table td[class*=col-],table th[class*=col-]{display:table-cell;float:none}.table tr.active>td,.table tr.active>th,.table tr>td.active,.table tr>th.active{background-color:#ffe9c6}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#e8f5e9;border-color:#c7e6c4}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d6edd8;border-color:#b7deb3}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#ffebee;border-color:#ffd1e0}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ffd1d8;border-color:#ffb8ce}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fff3e0;border-color:#ffe0c6}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#ffe9c6;border-color:#ffd2ad}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #cbd0db}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered th{border-top:none}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}.alert{padding:15px;margin-bottom:20px;color:#313744;background-color:#f1f1f1;border-radius:3px;-webkit-transition:all .4s cubic-bezier(.175,.885,.32,1);-o-transition:all .4s cubic-bezier(.175,.885,.32,1);transition:all .4s cubic-bezier(.175,.885,.32,1)}.alert hr{border-top-color:#e4e4e4}.alert .alert-link{color:#22262f}.alert h4{margin-top:0;color:inherit}.alert hr{margin:10px 0}.alert p,.alert ul{margin-bottom:0}.alert p+p{margin-top:5px}.alert-link{font-weight:700}.alert>[class*=icon-]{float:left;margin-top:-5px;font-size:42px;opacity:.6;-webkit-transition:opacity .2s cubic-bezier(.175,.885,.32,1);-o-transition:opacity .2s cubic-bezier(.175,.885,.32,1);transition:opacity .2s cubic-bezier(.175,.885,.32,1)}.alert>[class*=icon-]+.content{min-height:30px;margin-left:64px}.alert.with-icon{display:table;width:100%}.alert.with-icon>[class*=icon-],.alert.with-icon>[class*=icon-]+.content{display:table-cell;float:none;min-height:0;margin:0;vertical-align:middle}.alert.with-icon>[class*=icon-]{width:48px;text-align:center}.alert.with-icon>[class*=icon-]+.content{padding-left:1em}.alert-block{margin:0;border-radius:0}.alert-dismissable{padding-right:35px}.alert-dismissable .close{position:relative;top:-6px;right:-21px;color:inherit}.alert-primary{color:#313744;background-color:#e9f2fb}.alert-primary hr{border-top-color:#cbe0f6}.alert-primary .alert-link{color:#22262f}.alert-success{color:#00c178;background-color:#e8f5e9}.alert-success hr{border-top-color:#c7e6c4}.alert-success .alert-link{color:#009d62}.alert-info{color:#0d8aee;background-color:#e3f2fd}.alert-info hr{border-top-color:#9ce0f8}.alert-info .alert-link{color:#0b76cc}.alert-warning{color:#e68900;background-color:#fff3e0}.alert-warning hr{border-top-color:#ffe0c6}.alert-warning .alert-link{color:#c27400}.alert-danger{color:#ff4343;background-color:#ffebee}.alert-danger hr{border-top-color:#ffd1e0}.alert-danger .alert-link{color:#ff2020}.alert-inverse{color:#fff;background-color:#3c4353;border-color:#3c4353}.alert-inverse hr{border-top-color:#cbd0db;border-top-color:rgba(203,208,219,.25)}.alert-inverse .alert-link{color:rgba(255,255,255,.8)}.alert-primary-inverse{color:#fff;background-color:#0c64eb;border-color:#0c64eb}.alert-primary-inverse hr{border-top-color:#cbd0db;border-top-color:rgba(203,208,219,.25)}.alert-primary-inverse .alert-link{color:rgba(255,255,255,.8)}.alert-success-inverse{color:#fff;background-color:#00da88;border-color:#00da88}.alert-success-inverse hr{border-top-color:#cbd0db;border-top-color:rgba(203,208,219,.25)}.alert-success-inverse .alert-link{color:rgba(255,255,255,.8)}.alert-info-inverse{color:#fff;background-color:#2196f3;border-color:#2196f3}.alert-info-inverse hr{border-top-color:#cbd0db;border-top-color:rgba(203,208,219,.25)}.alert-info-inverse .alert-link{color:rgba(255,255,255,.8)}.alert-warning-inverse{color:#fff;background-color:#ff9800;border-color:#ff9800}.alert-warning-inverse hr{border-top-color:#cbd0db;border-top-color:rgba(203,208,219,.25)}.alert-warning-inverse .alert-link{color:rgba(255,255,255,.8)}.alert-danger-inverse{color:#fff;background-color:#ff5d5d;border-color:#ff5d5d}.alert-danger-inverse hr{border-top-color:#cbd0db;border-top-color:rgba(203,208,219,.25)}.alert-danger-inverse .alert-link{color:rgba(255,255,255,.8)}.input-control-icon-left,.input-control-icon-right,.input-control-label-left,.input-control-label-right{position:absolute;top:1px;z-index:5;height:30px;line-height:30px;opacity:.5}.input-control-icon-left,.input-control-icon-right{width:30px;text-align:center}.input-control-icon-left,.input-control-label-left{left:1px}.input-control-icon-right,.input-control-label-right{right:1px}.input-control-label-left,.input-control-label-right{width:70px;padding:0 8px;overflow:hidden;text-overflow:ellipsis}.has-label-left-sm>.input-control-label-left,.has-label-left-sm>.input-control-label-right{width:55px}.has-label-left-lg>.input-control-label-left,.has-label-left-lg>.input-control-label-right{width:95px}.input-control{position:relative}.input-control.has-icon-left>.form-control{padding-left:30px}.input-control.has-icon-right>.form-control{padding-right:30px}.input-control.has-label-left>.form-control{padding-left:70px}.input-control.has-label-right>.form-control{padding-right:70px}.input-control.has-label-left-sm>.form-control{padding-left:55px}.input-control.has-label-right-sm>.form-control{padding-right:55px}.input-control.has-label-left-lg>.form-control{padding-left:95px}.input-control.has-label-right-lg>.form-control{padding-right:95px}.input-control>a:hover{background-color:#f1f1f1;opacity:1}.form-control:focus+[class^=input-control-],.form-control:focus+[class^=input-control-]+[class^=input-control-]{opacity:1}.form-control:focus+.input-control-label-left{color:#16a8f8}.empty+.search-clear-btn,.empty+.search-icon+.search-clear-btn{opacity:0!important}input:placeholder-shown+.search-clear-btn,input:placeholder-shown+.search-icon+.search-clear-btn{opacity:0!important}.search-box-circle .input-control-icon-left,.search-box-circle .input-control-icon-right,.search-box-circle>.form-control{border-radius:16px}.search-box-circle+.input-group-btn>.btn{border-radius:0 16px 16px 0}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:5px 12px;font-size:13px;font-weight:400;line-height:1;color:#3c4353;text-align:center;background-color:#eee;border:1px solid #dcdcdc;border-radius:4px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group-addon.fix-border{border-right:0;border-left:0}.input-group-addon:empty{width:1px;padding:0}.input-group-addon.fix-padding{width:1px;padding:0}.input-group-btn.fix-border>.btn{border-right:0;border-left:0;border-radius:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:first-child{border-right:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:39px;padding:10px 16px;font-size:14px;line-height:1.25;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:39px;line-height:39px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:24px;padding:2px 8px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:24px;line-height:24px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon.input-sm{padding:2px 8px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:14px;border-radius:6px}.code,code,kbd,pre,samp{font-family:Monaco,Menlo,Consolas,"Courier New",monospace}code,kbd{padding:2px 4px;font-size:90%;color:#37474f;background-color:#f3f5f7;border-radius:4px}kbd{padding:1px 4px;font-weight:700;color:#666;background-color:#f1f1f1;border:1px solid #d8d8d8;border-bottom-width:2px}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:12px;line-height:1.38461538;color:#3c4353;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;margin:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.com{color:#93a1a1}.lit{color:#195f91}.clo,.opn,.pun{color:#93a1a1}.fun{color:#dc322f}.atv,.str{color:#d14}.kwd,.prettyprint .tag{color:#1e347b}.atn,.dec,.typ,.var{color:teal}.pln{color:#48484c}.prettyprint.linenums{-webkit-box-shadow:inset 40px 0 0 #fbfbfc,inset 41px 0 0 #ececf0;box-shadow:inset 40px 0 0 #fbfbfc,inset 41px 0 0 #ececf0}.prettyprint ol.linenums{padding-left:35px;margin-bottom:0;line-height:20px;color:#bebec5;text-shadow:0 1px 0 #fff}.pager{display:inline-block;padding-left:0;margin:20px 0;list-style:none}.pager>li{display:inline}.pager>li>a,.pager>li>span{position:relative;float:left;padding:5px 12px;margin-left:-1px;line-height:1.42857143;text-decoration:none;background-color:#fff;border:1px solid #cbd0db}.pager>li:first-child>a,.pager>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pager>li:last-child>a,.pager>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pager>li>a:focus,.pager>li>a:hover,.pager>li>span:focus,.pager>li>span:hover{z-index:2;background-color:#eee}.pager>li.active>a,.pager>li.active>a:hover,.pager>li.active>span,.pager>li.active>span:hover{z-index:3;color:#fff;cursor:default;background-color:#0c64eb;border-color:#0c64eb}.pager>li.disabled>a,.pager>li.disabled>a:focus,.pager>li.disabled>a:hover,.pager>li.disabled>span,.pager>li.disabled>span:focus,.pager>li.disabled>span:hover{color:#cbd0db;pointer-events:none;cursor:not-allowed;background-color:#fff;border-color:#cbd0db}.pager-justify{display:block}.pager-justify .next>a,.pager-justify .next>span{float:right;border-radius:4px}.pager-justify .previous>a,.pager-justify .previous>span{float:left;border-radius:4px}.pager-goto{width:100px;text-align:center}.pager>li>div{float:left}.pager>li .pager-goto,.pager>li .pager-size-menu,.pager>li.space{margin:0 5px}.pager-label{position:relative;float:left;padding:5px 4px;margin-left:-1px;line-height:1.42857143;text-decoration:none;border:1px solid transparent}.pager-item-left>a{border-top-left-radius:4px;border-bottom-left-radius:4px}.pager-item-right>a{border-top-right-radius:4px;border-bottom-right-radius:4px}.pager-lg>li>a,.pager-lg>li>span{padding:10px 16px;font-size:14px}.pager-lg>li:first-child>a,.pager-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pager-lg>li:last-child>a,.pager-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pager-sm>li>a,.pager-sm>li>span{padding:2px 8px;font-size:12px}.pager-sm>li:first-child>a,.pager-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pager-sm>li:last-child>a,.pager-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager-pills>li:first-child>a,.pager-pills>li:first-child>span{border-radius:16px 0 0 16px}.pager-pills>li:last-child>a,.pager-pills>li:last-child>span{border-radius:0 16px 16px 0}.pager-pills.pager-justify>li>a,.pager-pills.pager-justify>li>span{border-radius:16px}.pager-loose{display:block;margin:20px 0}.pager-loose.pager-pills>li>a,.pager-loose.pager-pills>li>span{border-radius:16px}.pager-loose>li>a,.pager-loose>li>span{margin-left:5px;border-radius:4px}.pager-loose>li:first-child>a,.pager-loose>li:first-child>span{margin-left:0}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>.nav-heading{padding:8px 15px;font-weight:700;color:#838a9d}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:8px 15px;color:#3c4353}.nav>li>a:focus,.nav>li>a:hover{color:#0c64eb;text-decoration:none;background-color:#f1f1f1}.nav>li.disabled>a{color:#cbd0db}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#cbd0db;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#f1f1f1;border-color:#3c4353}.nav>li>a>img{max-width:none}.nav-default>li{float:left}.nav-default>li>a{border-radius:4px}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:20px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#0c64eb}.nav-primary>li{float:left;margin-left:-1px}.nav-primary>li:first-child>a{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.nav-primary>li:last-child>a{border-top-right-radius:4px;border-bottom-right-radius:4px}.nav-primary>li>a{border:1px solid #cbd0db}.nav-primary>li.active>a,.nav-primary>li.active>a:focus,.nav-primary>li.active>a:hover{color:#fff;background-color:#0c64eb;border-color:#0c64eb}.nav-secondary>li{float:left}.nav-secondary>li>a{border-bottom:2px solid #eee}.nav-secondary>li.active>a,.nav-secondary>li.active>a:focus,.nav-secondary>li.active>a:hover{color:#0c64eb;border-bottom-color:#0c64eb}.nav-secondary>li.nav-heading{border-bottom:2px solid #eee}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-stacked.nav-primary>li,.nav-stacked.nav-primary>li>a{margin-left:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.nav-stacked.nav-primary>li+li{margin-top:-1px}.nav-stacked.nav-primary>li:first-child{margin-top:0}.nav-stacked.nav-primary>li:first-child.nav-heading,.nav-stacked.nav-primary>li:first-child>a{margin-left:0;border-top-left-radius:4px;border-top-right-radius:4px}.nav-stacked.nav-primary>li:last-child>a{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.nav-stacked.nav-primary>li.nav-heading{background-color:#f1f1f1;border:1px solid #cbd0db}.nav-stacked.nav-secondary>li>a{border:none;border-top-right-radius:4px;border-bottom-right-radius:4px;-webkit-box-shadow:inset 2px 0 0 #f5f5f5;box-shadow:inset 2px 0 0 #f5f5f5}.nav-stacked.nav-secondary>li>a:hover{-webkit-box-shadow:inset 2px 0 0 #eee;box-shadow:inset 2px 0 0 #eee}.nav-stacked.nav-secondary>li+li{margin-top:-1px}.nav-stacked.nav-secondary>li:first-child{margin-top:0}.nav-stacked.nav-secondary>li.active>a,.nav-stacked.nav-secondary>li.active>a:focus,.nav-stacked.nav-secondary>li.active>a:hover{background-color:#f5f5f5;-webkit-box-shadow:inset 2px 0 0 #0c64eb;box-shadow:inset 2px 0 0 #0c64eb}.nav-stacked.nav-secondary>li.nav-heading{border-bottom:1px solid #cbd0db}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{padding-right:0;padding-left:0;margin-bottom:5px;text-align:center}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}.nav-justified.nav-primary>li+li>a{border-left:0}}.nav-tabs{border-bottom:1px solid #cbd0db}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #cbd0db}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#838a9d;cursor:default;background-color:#fff;border:1px solid #cbd0db;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{padding-right:0;padding-left:0;margin-bottom:5px;text-align:center}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}.nav-tabs.nav-justified.nav-primary>li+li>a{border-left:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #cbd0db}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #cbd0db;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}@-moz-document url-prefix(){.nav-tabs>li.active>a:focus .nav-tabs>li>a:focus{outline:0}}.nav-tabs.nav-stacked{border-right:1px solid #cbd0db;border-bottom:none}.nav-tabs.nav-stacked>li{float:none;margin-right:-1px;margin-bottom:0}.nav-tabs.nav-stacked>li>a{margin-right:0;border-radius:4px 0 0 4px}.nav-tabs.nav-stacked>li.active>a,.nav-tabs.nav-stacked>li.active>a:focus,.nav-tabs.nav-stacked>li.active>a:hover{border:1px solid #cbd0db;border-right-color:transparent}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #cbd0db}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #cbd0db;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:40px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:10px;padding-left:10px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-10px;margin-left:-10px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:40px;padding:10px 15px;font-size:14px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-10px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:3px;margin-right:3px;margin-bottom:3px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:5px -10px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px}.navbar-nav.nav-justified>li{float:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-nav.pull-right>li>.dropdown-menu,.navbar-nav>li>.dropdown-menu.pull-right{right:0;left:auto}.navbar-btn{margin-top:4px;margin-bottom:4px}.navbar-text{float:left;margin-top:10px;margin-bottom:10px}@media (min-width:768px){.navbar-text{margin-right:10px;margin-left:10px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-10px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f7f7f7;border-color:#dedede}.navbar-default .navbar-brand{color:#3c4353}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#272b35;background-color:transparent}.navbar-default .navbar-text{color:#3c4353}.navbar-default .navbar-nav>li>a{color:#3c4353}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#222;background-color:#eee}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#cbd0db}.navbar-default .navbar-toggle .icon-bar{background-color:#838a9d}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#dedede}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#3c4353}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#222;background-color:#eee}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#3c4353}.navbar-default .navbar-link:hover{color:#222}.navbar-default .btn-link{color:#3c4353}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#222}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#16a8f8;border-color:#068cd5}.navbar-inverse .navbar-brand{color:#cbd0db}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#cbd0db}.navbar-inverse .navbar-nav>li>a{color:#cbd0db}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:#34b3f9}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#48baf9}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#079ced}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#0795e3}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#48baf9}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#068cd5}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#068cd5}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#cbd0db}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:#34b3f9}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#48baf9}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#cbd0db}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-form{padding:10px 10px;margin-top:4px;margin-right:-10px;margin-bottom:4px;margin-left:-10px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;padding-left:0;margin-top:0;margin-bottom:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{float:none;margin-left:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.scale{-webkit-transition:all .15s ease;-o-transition:all .15s ease;transition:all .15s ease;-webkit-transform:scale(.8);-ms-transform:scale(.8);-o-transform:scale(.8);transform:scale(.8)}.scale.in{-webkit-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.scrollbar-hover::-webkit-scrollbar,.scrollbar-hover::-webkit-scrollbar-button,.scrollbar-hover::-webkit-scrollbar-thumb,.scrollbar-hover::-webkit-scrollbar-track{visibility:hidden}.scrollbar-hover:hover::-webkit-scrollbar,.scrollbar-hover:hover::-webkit-scrollbar-button,.scrollbar-hover:hover::-webkit-scrollbar-thumb,.scrollbar-hover:hover::-webkit-scrollbar-track{visibility:visible}@media (min-width:768px){::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-button{width:0;height:0}::-webkit-scrollbar-button:end:increment,::-webkit-scrollbar-button:start:decrement{display:block}::-webkit-scrollbar-button:vertical:end:decrement,::-webkit-scrollbar-button:vertical:start:increment{display:none}::-webkit-scrollbar-thumb:horizontal,::-webkit-scrollbar-thumb:vertical,::-webkit-scrollbar-track:horizontal,::-webkit-scrollbar-track:vertical{border-color:transparent;border-style:solid}::-webkit-scrollbar-track:vertical::-webkit-scrollbar-track:horizontal{background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box}::-webkit-scrollbar-thumb{min-height:28px;background-color:rgba(0,0,0,.2);-webkit-background-clip:padding-box;background-clip:padding-box;border-radius:2px;-webkit-box-shadow:inset 1px 1px 0 rgba(0,0,0,.1),inset 0 -1px 0 rgba(0,0,0,.07)}::-webkit-scrollbar-thumb:hover{background-color:rgba(0,0,0,.4);-webkit-box-shadow:inset 1px 1px 1px rgba(0,0,0,.25)}::-webkit-scrollbar-thumb:active{background-color:rgba(0,0,0,.5);-webkit-box-shadow:inset 1px 1px 3px rgba(0,0,0,.35)}::-webkit-scrollbar-thumb:horizontal,::-webkit-scrollbar-thumb:vertical,::-webkit-scrollbar-track:horizontal,::-webkit-scrollbar-track:vertical{border-width:0}::-webkit-scrollbar-track:hover{background-color:rgba(0,0,0,.05);-webkit-box-shadow:inset 1px 0 0 rgba(0,0,0,.1)}::-webkit-scrollbar-track:active{background-color:rgba(0,0,0,.05);-webkit-box-shadow:inset 1px 0 0 rgba(0,0,0,.14),inset -1px -1px 0 rgba(0,0,0,.07)}}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out,-o-transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal>.loader{display:none}.modal.modal-loading .modal-dialog{opacity:0}.modal.modal-loading .loader{position:absolute;top:35%;left:50%;display:block;width:80px;margin-left:-40px;font-size:56px;color:#fff;text-align:center}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-iframe .modal-body{overflow:hidden!important}.modal-iframe .modal-body>iframe{border-radius:0 0 6px 6px}.modal-dialog{position:relative;width:auto;margin:0 auto;pointer-events:initial;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-dialog.modal-moveable{position:absolute;margin:0}.modal-dialog.modal-moveable .modal-header{cursor:move}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{min-height:16.43px;padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.modal-fullscreen{position:relative;width:100%!important;height:100%!important;margin:0;border-radius:0}.modal-fullscreen .modal-body{position:absolute;top:52px;right:0;bottom:0;left:0;overflow-y:auto}.body-modal-scroll-inside{overflow:auto}.tooltip{position:absolute;z-index:1030;display:block;font-size:12px;line-height:1.4;visibility:visible;filter:alpha(opacity=0);opacity:0}.tooltip.in{filter:alpha(opacity=100);opacity:1}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#3c4353;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#3c4353}.tooltip.top-left .tooltip-arrow{bottom:0;left:5px;border-width:5px 5px 0;border-top-color:#3c4353}.tooltip.top-right .tooltip-arrow{right:5px;bottom:0;border-width:5px 5px 0;border-top-color:#3c4353}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#3c4353}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#3c4353}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#3c4353}.tooltip.bottom-left .tooltip-arrow{top:0;left:5px;border-width:0 5px 5px;border-bottom-color:#3c4353}.tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-width:0 5px 5px;border-bottom-color:#3c4353}.tooltip-primary .tooltip-inner{background-color:#0c64eb}.tooltip-primary.tooltip.top .tooltip-arrow{border-top-color:#0c64eb}.tooltip-primary.tooltip.top-left .tooltip-arrow{border-top-color:#0c64eb}.tooltip-primary.tooltip.top-right .tooltip-arrow{border-top-color:#0c64eb}.tooltip-primary.tooltip.right .tooltip-arrow{border-right-color:#0c64eb}.tooltip-primary.tooltip.left .tooltip-arrow{border-left-color:#0c64eb}.tooltip-primary.tooltip.bottom .tooltip-arrow{border-bottom-color:#0c64eb}.tooltip-primary.tooltip.bottom-left .tooltip-arrow{border-bottom-color:#0c64eb}.tooltip-primary.tooltip.bottom-right .tooltip-arrow{border-bottom-color:#0c64eb}.tooltip-success .tooltip-inner{background-color:#00da88}.tooltip-success.tooltip.top .tooltip-arrow{border-top-color:#00da88}.tooltip-success.tooltip.top-left .tooltip-arrow{border-top-color:#00da88}.tooltip-success.tooltip.top-right .tooltip-arrow{border-top-color:#00da88}.tooltip-success.tooltip.right .tooltip-arrow{border-right-color:#00da88}.tooltip-success.tooltip.left .tooltip-arrow{border-left-color:#00da88}.tooltip-success.tooltip.bottom .tooltip-arrow{border-bottom-color:#00da88}.tooltip-success.tooltip.bottom-left .tooltip-arrow{border-bottom-color:#00da88}.tooltip-success.tooltip.bottom-right .tooltip-arrow{border-bottom-color:#00da88}.tooltip-info .tooltip-inner{background-color:#2196f3}.tooltip-info.tooltip.top .tooltip-arrow{border-top-color:#2196f3}.tooltip-info.tooltip.top-left .tooltip-arrow{border-top-color:#2196f3}.tooltip-info.tooltip.top-right .tooltip-arrow{border-top-color:#2196f3}.tooltip-info.tooltip.right .tooltip-arrow{border-right-color:#2196f3}.tooltip-info.tooltip.left .tooltip-arrow{border-left-color:#2196f3}.tooltip-info.tooltip.bottom .tooltip-arrow{border-bottom-color:#2196f3}.tooltip-info.tooltip.bottom-left .tooltip-arrow{border-bottom-color:#2196f3}.tooltip-info.tooltip.bottom-right .tooltip-arrow{border-bottom-color:#2196f3}.tooltip-warning .tooltip-inner{background-color:#ff9800}.tooltip-warning.tooltip.top .tooltip-arrow{border-top-color:#ff9800}.tooltip-warning.tooltip.top-left .tooltip-arrow{border-top-color:#ff9800}.tooltip-warning.tooltip.top-right .tooltip-arrow{border-top-color:#ff9800}.tooltip-warning.tooltip.right .tooltip-arrow{border-right-color:#ff9800}.tooltip-warning.tooltip.left .tooltip-arrow{border-left-color:#ff9800}.tooltip-warning.tooltip.bottom .tooltip-arrow{border-bottom-color:#ff9800}.tooltip-warning.tooltip.bottom-left .tooltip-arrow{border-bottom-color:#ff9800}.tooltip-warning.tooltip.bottom-right .tooltip-arrow{border-bottom-color:#ff9800}.tooltip-danger .tooltip-inner{background-color:#ff5d5d}.tooltip-danger.tooltip.top .tooltip-arrow{border-top-color:#ff5d5d}.tooltip-danger.tooltip.top-left .tooltip-arrow{border-top-color:#ff5d5d}.tooltip-danger.tooltip.top-right .tooltip-arrow{border-top-color:#ff5d5d}.tooltip-danger.tooltip.right .tooltip-arrow{border-right-color:#ff5d5d}.tooltip-danger.tooltip.left .tooltip-arrow{border-left-color:#ff5d5d}.tooltip-danger.tooltip.bottom .tooltip-arrow{border-bottom-color:#ff5d5d}.tooltip-danger.tooltip.bottom-left .tooltip-arrow{border-bottom-color:#ff5d5d}.tooltip-danger.tooltip.bottom-right .tooltip-arrow{border-bottom-color:#ff5d5d}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:300px;text-align:left;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:4px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover.no-arrow.top{margin-top:0}.popover.no-arrow.right{margin-left:0}.popover.no-arrow.bottom{margin-top:0}.popover.no-arrow.left{margin-left:0}.modal .popover,.popover-in-modal{z-index:1050}.popover-title{padding:8px 14px;margin:0;font-size:13px;font-weight:400;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:4px 4px 0 0}.popover-content{padding:9px 14px}.popover .arrow,.popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover .arrow{border-width:11px}.popover .arrow:after{content:"";border-width:10px}.popover.top .arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top .arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right .arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom .arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom .arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left .arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.popover-primary{border-color:#0c64eb}.popover-primary .popover-title{color:#fff;background-color:#0c64eb}.popover-primary.popover.top .arrow{border-top-color:#0c64eb}.popover-primary.popover.right .arrow{border-right-color:#0c64eb}.popover-primary.popover.left .arrow{border-left-color:#0c64eb}.popover-primary.popover.bottom .arrow,.popover-primary.popover.bottom .arrow:after{border-bottom-color:#0c64eb}.popover-success{border-color:#00da88}.popover-success .popover-title{color:#fff;background-color:#00da88}.popover-success.popover.top .arrow{border-top-color:#00da88}.popover-success.popover.right .arrow{border-right-color:#00da88}.popover-success.popover.left .arrow{border-left-color:#00da88}.popover-success.popover.bottom .arrow,.popover-success.popover.bottom .arrow:after{border-bottom-color:#00da88}.popover-info{border-color:#2196f3}.popover-info .popover-title{color:#fff;background-color:#2196f3}.popover-info.popover.top .arrow{border-top-color:#2196f3}.popover-info.popover.right .arrow{border-right-color:#2196f3}.popover-info.popover.left .arrow{border-left-color:#2196f3}.popover-info.popover.bottom .arrow,.popover-info.popover.bottom .arrow:after{border-bottom-color:#2196f3}.popover-warning{border-color:#ff9800}.popover-warning .popover-title{color:#fff;background-color:#ff9800}.popover-warning.popover.top .arrow{border-top-color:#ff9800}.popover-warning.popover.right .arrow{border-right-color:#ff9800}.popover-warning.popover.left .arrow{border-left-color:#ff9800}.popover-warning.popover.bottom .arrow,.popover-warning.popover.bottom .arrow:after{border-bottom-color:#ff9800}.popover-danger{border-color:#ff5d5d}.popover-danger .popover-title{color:#fff;background-color:#ff5d5d}.popover-danger.popover.top .arrow{border-top-color:#ff5d5d}.popover-danger.popover.right .arrow{border-right-color:#ff5d5d}.popover-danger.popover.left .arrow{border-left-color:#ff5d5d}.popover-danger.popover.bottom .arrow,.popover-danger.popover.bottom .arrow:after{border-bottom-color:#ff5d5d}.caret{display:inline-block;width:0;height:0;margin-bottom:2px;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:100px;padding:5px 0;margin:2px 0 0;font-size:13px;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #b6bdcc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#eee}.dropdown-menu>li>a{display:block;padding:5px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#3c4353;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#fff;text-decoration:none;background-color:#0c64eb}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#0c64eb;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#cbd0db}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.dropdown-hover .dropdown-menu{margin:-1px 0}.dropdown-hover:hover>.dropdown-menu,.open>.dropdown-menu{display:block}.dropdown-hover:hover>a,.open>a{outline:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;font-weight:700;line-height:1.42857143;color:#838a9d}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0 dotted;border-bottom:4px solid}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}}.dropdown-submenu{position:relative}.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;border-radius:4px}.dropdown-submenu.open>.dropdown-menu,.dropdown-submenu:hover>.dropdown-menu{display:block}.dropup .dropdown-submenu>.dropdown-menu{top:auto;bottom:0;margin-top:0;margin-bottom:-2px;border-radius:4px}.dropdown-submenu>a:after{display:block;float:right;width:0;height:0;margin-top:5px;margin-right:-10px;content:" ";border-color:transparent;border-style:solid;border-width:5px 0 5px 5px;border-left-color:#ccc}.dropdown-submenu:hover>a:after{border-left-color:#fff}.dropdown-submenu>a{min-width:100px}.dropdown-submenu>.dropdown-menu.pull-left{right:100%;left:auto}.dropdown-submenu:focus>a,.dropdown-submenu:hover>a{color:#fff;text-decoration:none;background-color:#0c64eb}.messager{display:table;margin:10px;overflow:hidden;color:#fff;pointer-events:auto;background-color:#3c4353;background-color:rgba(0,0,0,.8);border-radius:20px;-webkit-transition-property:opacity,-webkit-transform!important;-o-transition-property:opacity,-o-transform!important;transition-property:opacity,-webkit-transform!important;transition-property:opacity,transform!important;transition-property:opacity,transform,-webkit-transform,-o-transform!important}.messager-content{display:table-cell;padding:10px 15px;vertical-align:top}.messager-content>[class^=icon-]{display:inline-block;margin-right:8px}.messager-actions{display:table-cell;vertical-align:top}.messager-actions>.action{min-width:40px;height:40px;padding:0 12px;color:#fafafa;color:rgba(255,255,255,.6);text-align:center;text-shadow:none;background:0 0;border:none}.messager-actions>.action.close{padding-bottom:5px;font-size:20px;font-weight:400;opacity:1}.messager-actions>.action:hover{color:#fff;background:rgba(0,0,0,.1)}.messager-actions .action-icon+.action-text{margin-left:8px}.messagers-holder{position:fixed;z-index:99999;padding:10px;pointer-events:none}.messagers-holder.top{top:0}.messagers-holder.top-left{top:0;left:0}.messagers-holder.top-right{top:0;right:0}.messagers-holder.bottom{bottom:0}.messagers-holder.bottom-left{bottom:0;left:0}.messagers-holder.bottom-right{right:0;bottom:0}.messagers-holder.bottom-right .messager,.messagers-holder.top-right .messager{margin-left:auto}.messagers-holder.center{top:0}.messagers-holder.bottom,.messagers-holder.center,.messagers-holder.top{right:0;left:0}.messagers-holder.bottom .messager,.messagers-holder.center .messager,.messagers-holder.top .messager{margin:10px auto}.messager-primary{background-color:#0c64eb}.messager-success{background-color:#00da88}.messager-info{background-color:#2196f3}.messager-warning{background-color:#ff9800}.messager-danger{background-color:#ff5d5d}.messager-important{background-color:#bd7b46}.messager-special{background-color:#8666b8}.article{padding:20px}.article>header h1,.article>header h2,.article>header h3{margin-bottom:20px;line-height:1.5}.article>header>.abstract,.article>header>dl{padding:10px 15px;font-size:12px;color:#67738e;background-color:#f1f1f1}.article>header>.abstract>p:last-child,.article>header>dl>p:last-child{margin-bottom:0}.article>header>dl{margin:0;border-bottom:1px solid #e9e9e9}.article>header>dl.pull-right{background-color:transparent;border:none}.article>footer{border-top:1px dashed #d8d8d8}.article>footer>p{padding:10px 15px}.article-content,.article>.content{padding:20px 0;font-size:14px;line-height:1.57142857}.article-content h1,.article>.content h1{font-size:20px}.article-content h2,.article>.content h2{font-size:18px}.article-content h3,.article>.content h3{font-size:16px}.article-content h4,.article>.content h4{margin-top:15px;font-size:14px}.article-content h5,.article>.content h5{margin-top:15px;font-size:13px}.article-content h6,.article>.content h6{margin-top:15px;font-size:11px}.article-content img,.article>.content img{margin:10px 0}.article-content p>img+img,.article>.content p>img+img{margin-left:10px}.article-content p>img[align=right],.article>.content p>img[align=right]{margin-left:10px}.article-content dl,.article>.content dl{padding-right:2em;padding-left:2em}.article-content table,.article>.content table{margin-bottom:20px}.article-content table td,.article-content table th,.article>.content table td,.article>.content table th{padding:8px 10px;line-height:1.42857143;vertical-align:top;border-bottom:1px solid #cbd0db}.article-content table>thead>tr>th,.article>.content table>thead>tr>th{vertical-align:bottom;background-color:transparent;border-bottom:1px solid #cbd0db}.article-content p{margin-bottom:0}.article-content table{width:100%}.article>.content table td,.article>.content table th,.article>.content table>thead>tr>th{border:1px solid #cbd0db}body.article-content{padding:8px}.article-condensed{padding:20px 0}.article-condensed>header{padding:0 20px}.article-condensed>header>.abstract,.article-condensed>header>dl{padding:10px 15px;margin:0 -20px}.article-condensed>.article-content,.article-condensed>.content{padding:20px}.article-condensed>.article-content>img,.article-condensed>.article-content>pre,.article-condensed>.content>img,.article-condensed>.content>pre{margin-right:-20px;margin-left:-20px;border-radius:0}.article-condensed>.article-content>pre,.article-condensed>.content>pre{border-right:none;border-left:none}.article-condensed>footer{border-top:1px dashed #d8d8d8}.article-condensed>footer>p{padding:10px 15px}.article-condensed>footer>.pager-justify>.previous>a{border-left:none;border-radius:0}.article-condensed>footer>.pager-justify>.next>a{border-right:none;border-radius:0}/*! * Datetimepicker for Bootstrap * Copyright 2012 Stefan Petre * Licensed under the Apache License v2.0 @@ -13,4 +13,4 @@ * * Copyright (c) 2011-2016 Harvest http://getharvest.com * MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md -*/.chosen-container{position:relative;display:inline-block;font-size:13px;vertical-align:middle;zoom:1;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;*display:inline}.chosen-container .chosen-drop{position:absolute;top:100%;z-index:1010;display:none;width:100%;background:#fff;border:1px solid #b6bdcc;border:1px solid rgba(0,0,0,.15);border-top:0;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.chosen-container .chosen-drop.chosen-drop-size-limited{border-top:1px solid rgba(0,0,0,.15)}.chosen-container.chosen-with-drop .chosen-drop{display:block}.chosen-container a{cursor:pointer}.chosen-container.chosen-up .chosen-drop{top:inherit;bottom:100%;margin-top:auto;margin-bottom:-1px;border-radius:2px 2px 0 0;-webkit-box-shadow:0 -3px 5px rgba(0,0,0,.175);box-shadow:0 -3px 5px rgba(0,0,0,.175)}.chosen-container-single .chosen-single{display:block;width:100%;height:32px;padding:5px 8px;overflow:hidden;line-height:1.42857143;color:#222;text-decoration:none;white-space:nowrap;vertical-align:middle;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #dcdcdc;border-radius:2px;-webkit-box-shadow:none;box-shadow:none;-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s,-webkit-box-shadow ease-in-out .15s}.chosen-container-single .chosen-default{color:#838a9d}.chosen-container-single .chosen-single>span{display:block;margin-right:26px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.chosen-container-single .chosen-single-with-deselect span{margin-right:38px}.chosen-container-single .chosen-single abbr{position:absolute;top:7px;right:24px;display:block;width:20px;height:20px;font-size:19.5px;font-weight:700;line-height:14px;color:#000;text-align:center;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.chosen-container-single .chosen-single abbr:before{content:'×'}.chosen-container-single .chosen-single abbr:focus,.chosen-container-single .chosen-single abbr:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}.chosen-container-single .chosen-single div{position:absolute;top:0;right:0;display:block;height:100%;padding:5px 8px}.chosen-container-single .chosen-single div b{display:inline-block;width:0;height:0;margin-bottom:2px;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.chosen-container-single .chosen-search{position:relative;z-index:1010;padding:3px 4px;margin:0;white-space:nowrap}.chosen-container-single .chosen-search input[type=text]{width:100%;height:27px;padding:2px 26px 2px 8px;margin:1px 0;font-size:12px;line-height:1.5;background-color:#fff;border:1px solid #dcdcdc;border-radius:2px;outline:0}.chosen-container-single .chosen-search input[type=text]:focus{border-color:#0c64eb}.chosen-container-single .chosen-search:before{position:absolute;top:10px;right:10px;display:block;font-family:ZentaoIcon;font-size:18px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;color:#838a9d;text-transform:none;content:"\e928";speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.chosen-container-single .chosen-drop{margin-top:-1px;-webkit-background-clip:padding-box;background-clip:padding-box;border-radius:0 0 4px 4px}.chosen-container-single.chosen-container-single-nosearch .chosen-search{position:absolute;left:-9999px}.chosen-container .chosen-results{position:relative;max-height:240px;padding:0;margin:0;overflow-x:hidden;overflow-y:auto;-webkit-overflow-scrolling:touch}.chosen-container .chosen-results li{display:none;padding:5px 10px;margin:0;line-height:15px;list-style:none;-webkit-transition:background-color .2s cubic-bezier(.175,.885,.32,1);-o-transition:background-color .2s cubic-bezier(.175,.885,.32,1);transition:background-color .2s cubic-bezier(.175,.885,.32,1);-webkit-touch-callout:none}.chosen-container .chosen-results li.active-result{display:list-item;cursor:pointer}.chosen-container .chosen-results li.disabled-result{display:list-item;color:#ccc;cursor:default}.chosen-container .chosen-results li.highlighted{color:#fff;background-color:#0c64eb}.chosen-container .chosen-results li.no-results{display:list-item;background:#f4f4f4}.chosen-container .chosen-results li.group-result{display:list-item;font-weight:700;cursor:default}.chosen-container .chosen-results li.group-option{padding-left:15px}.chosen-container .chosen-results li em{font-style:normal;text-decoration:underline}.chosen-container-multi .chosen-choices{position:relative;width:100%;min-height:32px;min-height:30px\9;padding:0;margin:0;overflow:hidden;cursor:text;background-color:#fff;border:1px solid #dcdcdc;border-radius:2px;-webkit-box-shadow:none;box-shadow:none;-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s,-webkit-box-shadow ease-in-out .15s}.chosen-container-multi .chosen-choices:after,.chosen-container-multi .chosen-choices:before{display:table;content:" "}.chosen-container-multi .chosen-choices:after{clear:both}.chosen-container-multi .chosen-choices li{display:block;float:left;padding:0 6px;margin:5px 0 0 6px;list-style:none}.chosen-container-multi .chosen-choices li.search-field{padding:0;margin-bottom:4px;white-space:nowrap}.chosen-container-multi .chosen-choices li.search-field input[type=text]{height:20px;font-size:100%;color:#838a9d;background:0 0!important;border:0!important;border-radius:0;outline:0;-webkit-box-shadow:none;box-shadow:none}.chosen-container-multi .chosen-choices li.search-field .default{color:#999}.chosen-container-multi .chosen-choices li.search-field:before{position:absolute;right:8px;bottom:8px;display:block;font-family:ZentaoIcon;font-size:18px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;color:#838a9d;text-transform:none;content:"\e928";opacity:0;-webkit-transition:opacity .2s cubic-bezier(.175,.885,.32,1);-o-transition:opacity .2s cubic-bezier(.175,.885,.32,1);transition:opacity .2s cubic-bezier(.175,.885,.32,1);speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.chosen-container-multi .chosen-choices li.search-choice{position:relative;padding:3px 20px 3px 5px;line-height:12px;cursor:default;background-color:#f1f1f1;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #cbd0db;border-radius:3px;-webkit-box-shadow:0 0 2px #fff inset,0 1px 0 rgba(0,0,0,.05);box-shadow:0 0 2px #fff inset,0 1px 0 rgba(0,0,0,.05);-webkit-transition:all .4s cubic-bezier(.175,.885,.32,1);-o-transition:all .4s cubic-bezier(.175,.885,.32,1);transition:all .4s cubic-bezier(.175,.885,.32,1)}.chosen-container-multi .chosen-choices li.search-choice:hover{background-color:#fff;border-color:#adb5c6;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 0 rgba(0,0,0,.1)}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close{position:absolute;top:0;right:0;display:block;width:20px;height:20px;font-size:15.6px;font-weight:700;line-height:14px;color:#000;text-align:center;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:before{content:'×'}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:focus,.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}.chosen-container-multi .chosen-choices li.search-choice-disabled{padding-right:5px;color:#666;background-color:#e4e4e4;border:1px solid #ccc}.chosen-container-multi .chosen-choices li.search-choice-focus{background:#d4d4d4}.chosen-container-multi .chosen-choices li.search-choice-focus .search-choice-close{background-position:-42px -10px}.chosen-container-multi .chosen-results{padding:5px 0;margin:0}.chosen-container-multi .chosen-drop .result-selected{display:list-item;color:#ccc;cursor:default}.chosen-container-active .chosen-single{border-color:#0c64eb;-webkit-box-shadow:none,0 0 8px rgba(12,100,235,.6);box-shadow:none,0 0 8px rgba(12,100,235,.6)}.chosen-container-active.chosen-with-drop .chosen-single{border:1px solid #b6bdcc;border:1px solid rgba(0,0,0,.15);border-bottom-right-radius:0;border-bottom-left-radius:0;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.chosen-container-active.chosen-with-drop .chosen-single div{background:0 0;border-left:none}.chosen-container-active.chosen-with-drop .chosen-single div b{content:"";border-top:0 dotted;border-bottom:4px solid}.chosen-container-active.chosen-with-drop.chosen-up .chosen-single{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:2px;border-bottom-left-radius:2px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.chosen-container-active .chosen-choices{border-color:#0c64eb;-webkit-box-shadow:none,0 0 8px rgba(12,100,235,.6);box-shadow:none,0 0 8px rgba(12,100,235,.6)}.chosen-container-active .chosen-choices li.search-field input[type=text]{color:#111!important}.chosen-container-active .chosen-choices li.search-field:before{opacity:1}.chosen-disabled{cursor:default;opacity:.5!important}.chosen-disabled .chosen-single{cursor:default}.chosen-disabled .chosen-choices .search-choice .search-choice-close{cursor:default}.chosen-container-single .chosen-single>.chosen-search{left:0;display:none;padding:3px 4px;opacity:0}.chosen-container-single .chosen-single>.chosen-search>input{height:25px;padding:2px 26px 2px 4px;font-size:inherit}.chosen-container-single .chosen-single>.chosen-search:before{top:9px}.chosen-with-search.chosen-with-drop .chosen-single>.chosen-search{display:block;opacity:1}.container,.container-fixed,.container-fluid{position:relative}.container{max-width:1800px!important}body{padding-bottom:40px;background-color:#efefef}body.article-content,body.body-modal{background:0 0}body.body-modal{padding:0}a:active,a:focus,button:active,button:focus{outline:0!important}em{font-style:normal}.strong{font-weight:700}.font-normal{font-weight:400!important}.text-middle{vertical-align:middle!important}.text-bottom{vertical-align:bottom!important}.text-top{vertical-align:top!important}.inline-block{display:inline-block!important}.layer{border-radius:4px;-webkit-box-shadow:0 0 20px 0 #bdc9d8;box-shadow:0 0 20px 0 #bdc9d8}.space{margin-bottom:20px}.space-lg{margin-bottom:30px}.space-sm{margin-bottom:10px}.muted{opacity:.5}.text-muted em{color:#3c4353}.no-animate{-webkit-transition:none!important;-o-transition:none!important;transition:none!important}.template{display:none!important}.text-left{text-align:left!important}.text-yellow.icon-folder{color:#ffe066}.table-row{display:table;width:100%;table-layout:fixed}.table-col,.table-row>.col,.table-row>[class*=col-],.table-row>[class*="-col"]{display:table-cell;float:none;vertical-align:top}.side-col{width:200px;padding-right:20px}.side-col.col-4{width:33.3333333%}.col-lg{width:260px}.col-xl{width:320px}.col-sm{width:150px}.col-xs{width:100px}.main-col+.side-col{padding-right:0;padding-left:20px}.row-grid>[class*=col-],.row-grid>[class*="-col"]{padding-top:6px;padding-bottom:6px}hr.space{margin:10px 0;border:none}hr.space-sm{margin:5px 0;border:none}.text-secondary{color:#16a8f8}a.text-primary{color:#0c64eb}.nav-primary>li>a{min-width:100px;padding:5px 8px;color:#838a9d;border-color:#e7f1fc}.nav-primary>li.active>a{color:#0c64eb;background-color:#e7f1fc;border-color:#e7f1fc}.nav-primary>li.active>a:hover{color:#0c64eb;background-color:#c3dcf7;border-color:#c3dcf7}.end-marker{margin-bottom:20px;color:#cbd0db;text-align:center}@-webkit-keyframes highlight{0%{background:#fff;outline:1px solid transparent}100%{background:#fff0d5;outline:2px solid #ffdcbc}}@-o-keyframes highlight{0%{background:#fff;outline:1px solid transparent}100%{background:#fff0d5;outline:2px solid #ffdcbc}}@keyframes highlight{0%{background:#fff;outline:1px solid transparent}100%{background:#fff0d5;outline:2px solid #ffdcbc}}.highlight{-webkit-animation:highlight .5s linear 0s 2 alternate;-o-animation:highlight .5s linear 0s 2 alternate;animation:highlight .5s linear 0s 2 alternate}.progress.inline-block{width:100px;margin:0}.w-p5{width:5%!important}.w-p10{width:10%!important}.w-p15{width:15%!important}.w-p20{width:20%!important}.w-p25{width:25%!important}.w-p30{width:30%!important}.w-p35{width:35%!important}.w-p40{width:40%!important}.w-p45{width:45%!important}.w-p50{width:50%!important}.w-p55{width:55%!important}.w-p60{width:60%!important}.w-p65{width:65%!important}.w-p70{width:70%!important}.w-p75{width:75%!important}.w-p80{width:80%!important}.w-p85{width:85%!important}.w-p90{width:90%!important}.w-p94{width:94%!important}.w-p95{width:95%!important}.w-p98{width:98%!important}.w-p99{width:99%!important}.w-p100{width:100%!important}.w-auto{width:auto!important}.w-10px{width:10px!important}.w-20px{width:20px!important}.w-30px{width:30px!important}.w-35px{width:35px!important}.w-40px{width:40px!important}.w-45px{width:45px!important}.w-50px{width:50px!important}.w-60px{width:60px!important}.w-70px{width:70px!important}.w-80px{width:80px!important}.w-90px{width:90px!important}.w-100px{width:100px!important}.w-110px{width:110px!important}.w-120px{width:120px!important}.w-130px{width:130px!important}.w-140px{width:140px!important}.w-150px{width:150px!important}.w-160px{width:160px!important}.w-180px{width:180px!important}.w-200px{width:200px!important}.w-230px{width:230px!important}.w-250px{width:250px!important}.w-300px{width:300px!important}.w-400px{width:400px!important}.w-500px{width:500px!important}.w-600px{width:600px!important}.w-700px{width:700px!important}.w-800px{width:800px!important}.w-900px{width:900px!important}.mw-200px{max-width:200px!important}.mw-300px{max-width:300px!important}.mw-400px{max-width:400px!important}.mw-500px{max-width:500px!important}.mw-600px{max-width:600px!important}.mw-700px{max-width:700px!important}.mw-800px{max-width:800px!important}.mw-900px{max-width:900px!important}.mw-1400px{max-width:1400px!important}.w-id{width:70px!important}.w-pri{width:40px!important}.w-severity{width:50px!important}.w-hour{width:57px!important}.w-date{width:90px!important}.w-status{width:60px!important}.w-resolution,.w-type,.w-user{width:80px!important}.w-p15-f{width:15%!important;min-width:120px!important}.w-p25-f{width:25%!important;min-width:200px!important}.w-p35-f{width:35%!important;min-width:300px!important}.w-p45-f{width:45%!important;min-width:400px!important}.h-5px{height:5px!important}.h-10px{height:10px!important}.h-20px{height:20px!important}.h-30px{height:30px!important}.h-35px{height:35px!important}.h-40px{height:40px!important}.h-45px{height:45px!important}.h-50px{height:50px!important}.h-60px{height:60px!important}.h-70px{height:70px!important}.h-80px{height:80px!important}.h-100px{height:100px!important}.h-120px{height:120px!important}.h-130px{height:130px!important}.h-140px{height:140px!important}.h-150px{height:150px!important}.h-200px{height:200px!important}.pd-0{padding:0!important}.mg-0{margin:0!important}.mgb-20{margin-bottom:20px!important}.mgb-10{margin-bottom:10px!important}.pdb-20{padding-bottom:20px!important}.pdt-20{padding-top:20px!important}.br-0{border-radius:0!important}.bd-0,.bd-none,.borderless{border:none!important}.bg-none{background:0 0!important}.red{color:#ff5d5d!important}.icon-pro-version{font-size:14px!important}.icon-pro-version:before{position:relative;top:-1px;font-size:14px;color:#ff5d5d;content:"\e92b"}.bg-primary{color:#fff;background:#1183fb -webkit-gradient(linear,right top,left top,from(#0a48d1),to(#1183fb));background:#1183fb -webkit-linear-gradient(right,#0a48d1 0,#1183fb 100%);background:#1183fb -o-linear-gradient(right,#0a48d1 0,#1183fb 100%);background:#1183fb linear-gradient(-90deg,#0a48d1 0,#1183fb 100%);background-color:#00b1fd}.bg-secondary{color:#fff;background:#16a8f8}.hl-tutorial{position:relative!important;z-index:1010!important;-webkit-box-shadow:0 0 0 0 #000!important;box-shadow:0 0 0 0 #000!important;-webkit-transition:-webkit-box-shadow 1s!important;-o-transition:box-shadow 1s!important;transition:-webkit-box-shadow 1s!important;transition:box-shadow 1s!important;transition:box-shadow 1s,-webkit-box-shadow 1s!important}.hl-tutorial.hl-in{-webkit-box-shadow:0 0 20px 0 #ffff8d,0 0 0 2px #ffd180,0 0 0 2000px rgba(0,0,0,.2)!important;box-shadow:0 0 20px 0 #ffff8d,0 0 0 2px #ffd180,0 0 0 2000px rgba(0,0,0,.2)!important}.btn.tooltip-tutorial,.hl-tutorial.hl-in:hover{-webkit-box-shadow:0 0 30px 0 #ffff8d,0 0 0 5px #ffd180,0 0 0 2000px rgba(0,0,0,.3)!important;box-shadow:0 0 30px 0 #ffff8d,0 0 0 5px #ffd180,0 0 0 2000px rgba(0,0,0,.3)!important}.tooltip-max .tooltip-inner{max-width:1000px;padding:8px 10px}.transition-all *{-webkit-transition:all .2s!important;-o-transition:all .2s!important;transition:all .2s!important}.scroll-x{overflow-x:auto!important}.scroll-y{overflow-y:auto!important}.divider+.divider{display:none}@font-face{font-family:ZentaoIcon;font-style:normal;font-weight:400;src:url(../fonts/ZentaoIcon.eot?v=1.1.0);src:url(../fonts/ZentaoIcon.eot?#iefix&v=1.1.0) format('embedded-opentype'),url(../fonts/ZentaoIcon.woff?v=1.1.0) format('woff'),url(../fonts/ZentaoIcon.ttf?v=1.1.0) format('truetype'),url(../fonts/ZentaoIcon.svg#regular?v=1.1.0) format('svg')}.icon,[class*=" icon-"],[class^=icon-]{font-family:ZentaoIcon;font-size:18px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;text-transform:none;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon:before{display:inline-block;min-width:18px;text-align:center}a .icon,a [class*=" icon-"],a [class^=icon-]{display:inline}.icon-lg:before{font-size:1.33333333em;vertical-align:-10%}.icon-2x{font-size:36px}.icon-3x{font-size:54px}.icon-4x{font-size:72px}.icon-5x{font-size:90px}.icon-spin{display:inline-block;-webkit-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;animation:spin 2s infinite linear}a .icon-spin{display:inline-block;text-decoration:none}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0);transform:rotate(0)}100%{-o-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes spin{0%{-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);-o-transform:rotate(359deg);transform:rotate(359deg)}}.icon-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.icon-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.icon-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.icon-flip-horizontal{-webkit-transform:scale(-1,1);-ms-transform:scale(-1,1);-o-transform:scale(-1,1);transform:scale(-1,1)}.icon-flip-vertical{-webkit-transform:scale(1,-1);-ms-transform:scale(1,-1);-o-transform:scale(1,-1);transform:scale(1,-1)}.icon.icon-flip-horizontal,.icon.icon-flip-vertical,.icon.icon-rotate-180,.icon.icon-rotate-270,.icon.icon-rotate-90{display:inline-block}.icon-book:before{content:"\f02d"}.icon-treemap-alt:before{content:"\e971"}.icon-collapse-alt:before{content:"\e6f2"}.icon-expand-alt:before{content:"\e6f1"}.icon-more:before{content:"\e744"}.icon-angle-double-right:before{content:"\f101"}.icon-certificate:before{content:"\f0a3"}.icon-bell:before{content:"\e7f5"}.icon-format-bold:before{content:"\e953"}.icon-format-header-pound:before{content:"\e954"}.icon-format-italic:before{content:"\e955"}.icon-format-list-bulleted:before{content:"\e956"}.icon-format-list-numbers:before{content:"\e969"}.icon-format-quote-close:before{content:"\e96a"}.icon-fullscreen:before{content:"\e96b"}.icon-fullscreen-exit:before{content:"\e972"}.icon-image:before{content:"\e96c"}.icon-table-large:before{content:"\e96d"}.icon-columns:before{content:"\f0db"}.icon-cancel:before{content:"\e951"}.icon-ban-circle:before{content:"\e951"}.icon-persons:before{content:"\e94d"}.icon-eye:before{content:"\e94e"}.icon-unlock:before{content:"\e94f"}.icon-eye-off:before{content:"\e96e"}.icon-lock:before{content:"\e950"}.icon-move:before{content:"\e94c"}.icon-help:before{content:"\e968"}.icon-folder-account:before{content:"\e942"}.icon-folder-move:before{content:"\e960"}.icon-folder-plus:before{content:"\e961"}.icon-folder-upload:before{content:"\e962"}.icon-folder-star:before{content:"\e963"}.icon-folder-edit:before{content:"\e964"}.icon-folder-download:before{content:"\e965"}.icon-folder-outline:before{content:"\e966"}.icon-restart:before{content:"\e95e"}.icon-history:before{content:"\e95f"}.icon-home:before{content:"\e958"}.icon-pencil:before{content:"\e254"}.icon-angle-down:before{content:"\e313"}.icon-angle-left:before{content:"\e314"}.icon-angle-right:before{content:"\e315"}.icon-angle-top:before{content:"\e316"}.icon-first-page:before{content:"\e5dc"}.icon-last-page:before{content:"\e5dd"}.icon-caret-down:before{content:"\f0d7"}.icon-caret-up:before{content:"\f0d8"}.icon-caret-left:before{content:"\f0d9"}.icon-caret-right:before{content:"\f0da"}.icon-sort:before{content:"\f0dc"}.icon-sort-down:before{content:"\f0dd"}.icon-sort-up:before{content:"\f0de"}.icon-zentao-alt:before{content:"\e900"}.icon-zentao:before{content:"\e901"}.icon-severity:before{content:"\e973"}.icon-severity-solid:before{content:"\e902"}.icon-bar-chart:before{content:"\e903"}.icon-import:before{content:"\e904"}.icon-export:before{content:"\e905"}.icon-printer:before{content:"\e906"}.icon-hand-right:before{content:"\e907"}.icon-hand-right-alt:before{content:"\e96f"}.icon-checked:before{content:"\e908"}.icon-off:before{content:"\e909"}.icon-start:before{content:"\e90a"}.icon-play:before{content:"\e90a"}.icon-time:before{content:"\e90b"}.icon-edit:before{content:"\e90c"}.icon-trash:before{content:"\e90d"}.icon-link:before{content:"\e90e"}.icon-unlink:before{content:"\e90f"}.icon-bullhorn:before{content:"\e910"}.icon-bug:before{content:"\e911"}.icon-list-alt:before{content:"\e912"}.icon-fork:before{content:"\e913"}.icon-change:before{content:"\e970"}.icon-glasses:before{content:"\e914"}.icon-sitemap:before{content:"\e915"}.icon-plus-sign:before{content:"\e916"}.icon-pluses:before{content:"\e917"}.icon-flag-alt:before{content:"\e918"}.icon-magic:before{content:"\e919"}.icon-treemap:before{content:"\e91a"}.icon-confirm:before{content:"\e91b"}.icon-lightbulb:before{content:"\e91c"}.icon-delay:before{content:"\e91d"}.icon-calendar:before{content:"\e91d"}.icon-pause:before{content:"\e91e"}.icon-ban:before{content:"\e91f"}.icon-plus-bold:before{content:"\e920"}.icon-copy:before{content:"\e921"}.icon-refresh:before{content:"\e922"}.icon-arrow-up:before{content:"\e923"}.icon-arrow-down:before{content:"\e924"}.icon-arrow-left:before{content:"\e952"}.icon-arrow-right:before{content:"\e93e"}.icon-plus:before{content:"\e925"}.icon-minus:before{content:"\e926"}.icon-exchange:before{content:"\e927"}.icon-search:before{content:"\e928"}.icon-envelope-o:before{content:"\e92a"}.icon-check:before{content:"\e5ca"}.icon-circle:before{content:"\e836"}.icon-up-circle:before{content:"\e92b"}.icon-right-circle:before{content:"\e92c"}.icon-down-circle:before{content:"\e92d"}.icon-left-circle:before{content:"\e92e"}.icon-check-circle:before{content:"\e92f"}.icon-exclamation-sign:before{content:"\e930"}.icon-unfold-all:before{content:"\e931"}.icon-fold-all:before{content:"\e932"}.icon-plus-sm:before{content:"\e933"}.icon-chevron-left:before{content:"\e934"}.icon-chevron-right:before{content:"\e935"}.icon-close:before{content:"\e936"}.icon-flag:before{content:"\e937"}.icon-check-sign:before{content:"\e938"}.icon-minus-sign:before{content:"\e939"}.icon-bars-sign:before{content:"\e93a"}.icon-cog:before{content:"\e93b"}.icon-color:before{content:"\e93c"}.icon-paper-clip:before{content:"\e93d"}.icon-back:before{content:"\e93f"}.icon-chat-line:before{content:"\e940"}.icon-person:before{content:"\e941"}.icon-stack:before{content:"\e943"}.icon-cube:before{content:"\e967"}.icon-folder:before{content:"\e944"}.icon-folder-o:before{content:"\e945"}.icon-folder-open-o:before{content:"\e946"}.icon-folder-open:before{content:"\e947"}.icon-bars:before{content:"\e948"}.icon-cards-view:before{content:"\e949"}.icon-star-empty:before{content:"\e94a"}.icon-star:before{content:"\e94b"}.icon-ellipsis-v:before{content:"\e5d4"}.icon-spinner-indicator:before{content:"\e982"}.icon-text:before{content:"\e929"}.icon-code:before{content:"\e957"}.icon-chevron-double-up:before{content:"\e959"}.icon-chevron-double-down:before{content:"\e95a"}.icon-chart-pie:before{content:"\e95b"}.icon-chart-line:before{content:"\e95c"}.icon-chart-bar:before{content:"\e95d"}.icon-globe:before{content:"\f0ac"}.icon-file:before{content:"\f016"}.icon-file-empty:before{content:"\f016"}.icon-file-text:before{content:"\f0f6"}.icon-file-alt:before{content:"\f15b"}.icon-file-text-alt:before{content:"\f15c"}.icon-file-pdf:before{content:"\f1c1"}.icon-file-word:before{content:"\f1c2"}.icon-file-excel:before{content:"\f1c3"}.icon-file-powerpoint:before{content:"\f1c4"}.icon-file-image:before{content:"\f1c5"}.icon-file-archive:before{content:"\f1c6"}.icon-file-audio:before{content:"\f1c7"}.icon-file-video:before{content:"\f1c8"}.icon-file-code:before{content:"\f1c9"}.icon-sm:before{font-size:14px;vertical-align:10%}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:13px;font-weight:400;line-height:18px;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;border-radius:4px;-webkit-transition:.4s cubic-bezier(.175,.885,.32,1);-o-transition:.4s cubic-bezier(.175,.885,.32,1);transition:.4s cubic-bezier(.175,.885,.32,1);-webkit-transition-property:background,border,outline,opacity,-webkit-box-shadow;-o-transition-property:background,border,box-shadow,outline,opacity;transition-property:background,border,outline,opacity,-webkit-box-shadow;transition-property:background,border,box-shadow,outline,opacity;transition-property:background,border,box-shadow,outline,opacity,-webkit-box-shadow}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:focus,.btn:hover{color:#3c4353;text-decoration:none}.btn:active{text-decoration:none;background-image:none;outline:0;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.1)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;filter:grayscale(1);-webkit-box-shadow:none;box-shadow:none;opacity:.5;-webkit-filter:grayscale(1)}.btn{color:#3c4353;background-color:#fff;border-color:#d6dae3}.btn.active,.btn.hover,.btn:active,.btn:focus,.btn:hover,.open .dropdown-toggle.btn{color:#3c4353;background-color:rgba(255,255,255,.8);border-color:#b8bfce}.btn.active,.btn:active,.open .dropdown-toggle.btn{background-color:#f2f2f2;background-image:none;border-color:#b8bfce}.btn.disabled,.btn.disabled.active,.btn.disabled:active,.btn.disabled:focus,.btn.disabled:hover,.btn[disabled],.btn[disabled].active,.btn[disabled]:active,.btn[disabled]:focus,.btn[disabled]:hover,fieldset[disabled] .btn,fieldset[disabled] .btn.active,fieldset[disabled] .btn:active,fieldset[disabled] .btn:focus,fieldset[disabled] .btn:hover{color:rgba(60,67,83,.3);background-color:#fff;border-color:#d6dae3}.btn-gray{color:#82899f;background-color:#f1f1f1;border-color:#f1f1f1}.btn-gray.active,.btn-gray.hover,.btn-gray:active,.btn-gray:focus,.btn-gray:hover,.open .dropdown-toggle.btn-gray{color:#82899f;background-color:rgba(241,241,241,.8);border-color:#d8d8d8}.btn-gray.active,.btn-gray:active,.open .dropdown-toggle.btn-gray{background-color:#e4e4e4;background-image:none;border-color:#d8d8d8}.btn-gray.disabled,.btn-gray.disabled.active,.btn-gray.disabled:active,.btn-gray.disabled:focus,.btn-gray.disabled:hover,.btn-gray[disabled],.btn-gray[disabled].active,.btn-gray[disabled]:active,.btn-gray[disabled]:focus,.btn-gray[disabled]:hover,fieldset[disabled] .btn-gray,fieldset[disabled] .btn-gray.active,fieldset[disabled] .btn-gray:active,fieldset[disabled] .btn-gray:focus,fieldset[disabled] .btn-gray:hover{color:rgba(130,137,159,.3);background-color:#f1f1f1;border-color:#f1f1f1}.btn-primary{color:#fff;background-color:#0c64eb;border-color:transparent}.btn-primary.active,.btn-primary.hover,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.open .dropdown-toggle.btn-primary{color:#fff;background-color:rgba(12,100,235,.8);border-color:rgba(0,0,0,0)}.btn-primary.active,.btn-primary:active,.open .dropdown-toggle.btn-primary{background-color:#0b5ad3;background-image:none;border-color:rgba(0,0,0,0)}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{color:rgba(255,255,255,.3);background-color:#0c64eb;border-color:transparent}.btn-secondary{color:#fff;background-color:#16a8f8;border-color:transparent}.btn-secondary.active,.btn-secondary.hover,.btn-secondary:active,.btn-secondary:focus,.btn-secondary:hover,.open .dropdown-toggle.btn-secondary{color:#fff;background-color:rgba(22,168,248,.8);border-color:rgba(0,0,0,0)}.btn-secondary.active,.btn-secondary:active,.open .dropdown-toggle.btn-secondary{background-color:#079ced;background-image:none;border-color:rgba(0,0,0,0)}.btn-secondary.disabled,.btn-secondary.disabled.active,.btn-secondary.disabled:active,.btn-secondary.disabled:focus,.btn-secondary.disabled:hover,.btn-secondary[disabled],.btn-secondary[disabled].active,.btn-secondary[disabled]:active,.btn-secondary[disabled]:focus,.btn-secondary[disabled]:hover,fieldset[disabled] .btn-secondary,fieldset[disabled] .btn-secondary.active,fieldset[disabled] .btn-secondary:active,fieldset[disabled] .btn-secondary:focus,fieldset[disabled] .btn-secondary:hover{color:rgba(255,255,255,.3);background-color:#16a8f8;border-color:transparent}.btn-warning{color:#fff;background-color:#ff9800;border-color:transparent}.btn-warning.active,.btn-warning.hover,.btn-warning:active,.btn-warning:focus,.btn-warning:hover,.open .dropdown-toggle.btn-warning{color:#fff;background-color:rgba(255,152,0,.8);border-color:rgba(0,0,0,0)}.btn-warning.active,.btn-warning:active,.open .dropdown-toggle.btn-warning{background-color:#e68900;background-image:none;border-color:rgba(0,0,0,0)}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{color:rgba(255,255,255,.3);background-color:#ff9800;border-color:transparent}.btn-danger{color:#fff;background-color:#ff5d5d;border-color:transparent}.btn-danger.active,.btn-danger.hover,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,.open .dropdown-toggle.btn-danger{color:#fff;background-color:rgba(255,93,93,.8);border-color:rgba(0,0,0,0)}.btn-danger.active,.btn-danger:active,.open .dropdown-toggle.btn-danger{background-color:#ff4343;background-image:none;border-color:rgba(0,0,0,0)}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{color:rgba(255,255,255,.3);background-color:#ff5d5d;border-color:transparent}.btn-success{color:#fff;background-color:#00da88;border-color:transparent}.btn-success.active,.btn-success.hover,.btn-success:active,.btn-success:focus,.btn-success:hover,.open .dropdown-toggle.btn-success{color:#fff;background-color:rgba(0,218,136,.8);border-color:rgba(0,0,0,0)}.btn-success.active,.btn-success:active,.open .dropdown-toggle.btn-success{background-color:#00c178;background-image:none;border-color:rgba(0,0,0,0)}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{color:rgba(255,255,255,.3);background-color:#00da88;border-color:transparent}.btn-info{color:#0c64eb;background-color:#e9f2fb;border-color:transparent}.btn-info.active,.btn-info.hover,.btn-info:active,.btn-info:focus,.btn-info:hover,.open .dropdown-toggle.btn-info{color:#0c64eb;background-color:rgba(233,242,251,.8);border-color:rgba(0,0,0,0)}.btn-info.active,.btn-info:active,.open .dropdown-toggle.btn-info{background-color:#d3e5f7;background-image:none;border-color:rgba(0,0,0,0)}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{color:rgba(12,100,235,.3);background-color:#e9f2fb;border-color:transparent}.btn-link{padding-right:6px;padding-left:6px;font-weight:400;color:#3c4353;text-shadow:none;cursor:pointer;background:0 0;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover,.btn-link[disabled],fieldset[disabled] .btn-link{border-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link:focus,.btn-link:hover{color:#222;background:#f1f1f1;background:rgba(0,0,0,.075)}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#cbd0db;text-decoration:none}.btn-lg{padding:11px 16px;font-size:14px;line-height:18px;border-radius:4px}.btn-mini,.btn-sm{padding:3px 8px;font-size:12px;line-height:18px;border-radius:4px}.btn-mini,.btn-xs{padding:0 5px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.btn-wide{min-width:120px}.btn-limit{max-width:180px;padding-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.btn-limit>.caret{position:absolute;top:14px;right:8px}.btn-circle{border-radius:17px}.btn>.label-icon{top:3px;padding:3px;margin:-2px;background-color:rgba(0,0,0,.2);border-radius:12px}.btn>.label-icon>.icon{font-size:16px;line-height:18px}.btn>.icon+.text{margin-left:5px}.btn.btn-sm.btn-circle{border-radius:12px}.btn.btn-sm>.label-icon{top:2px;width:20px;height:20px;padding:1px;line-height:20px}.btn.btn-sm>.label-icon>.icon{position:relative;top:-1px;display:inline-block;font-size:14px;line-height:18px}.btn-icon-left{position:relative;padding-left:35px;overflow:hidden;text-align:right}.btn-icon-left>.label-icon{position:absolute;left:5px;margin:0}.btn-icon-left>.icon{position:absolute;top:0;bottom:0;left:0;display:block;width:30px;line-height:30px;color:#16a8f8;text-align:center;background:#e9f2fb}.btn-icon-left.btn-sm{padding-left:28px}.btn-icon-left.btn-sm>.label-icon{left:2px}.btn-icon-left.btn-sm>.icon{width:24px;line-height:24px}.btn-icon-right{position:relative;padding-right:35px;text-align:left}.btn-icon-right>.label-icon{position:absolute;right:5px;margin:0}.btn-icon-right.btn-sm{padding-right:28px}.btn-icon-right.btn-sm>.label-icon{right:2px}.btn-icon{min-width:32px;padding-right:0;padding-left:0}.btn-icon.btn-sm{width:24px;min-width:24px;height:24px}.btn-group{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group>.btn-group{float:left}.btn-group>.btn{border-radius:0}.btn-group>.btn:first-child{border-top-left-radius:2px;border-bottom-left-radius:2px}.btn-group>.btn:last-child{border-top-right-radius:2px;border-bottom-right-radius:2px}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.dropdown{float:left;margin-right:10px}.btn-toolbar>.btn-group:last-child,.btn-toolbar>.btn:last-child,.btn-toolbar>.dropdown:last-child{margin-right:0}.btn-toolbar>.divider{float:left;height:20px;margin:7px 5px 4px 10px;border-left:1px solid rgba(0,0,0,.1)}.btn-toolbar .space{float:left;min-height:1px;margin:0 10px 0 10px}.btn-toolbar .input-control{float:left;width:120px}.btn-toolbar .page-title{float:left;line-height:34px}.btn-toolbar .page-title .text{font-size:14px;font-weight:700}.btn-toolbar .page-title .label{top:-2px;margin-right:10px}.btn-toolbar .divider+.page-title{margin-left:15px}.btn-active-line{position:relative;font-weight:700;color:#0c64eb}.btn-active-line:after{position:absolute;right:5px;bottom:1px;left:5px;display:block;content:' ';border-bottom:2px solid #0c64eb}.btn-active-line:hover{color:#0c64eb}.btn-active-text .text{position:relative;top:-1px;display:inline-block;font-weight:700;color:#0c64eb}.btn-active-text .text:after{position:absolute;bottom:-5px;display:block;width:100%;content:' ';border-bottom:2px solid #0c64eb}.angle-btn{position:relative;padding:1px;background:#fff;border:1px solid #cbd0db;border-right:none}.btn-toolbar>.angle-btn{margin-right:8px}.angle-btn:after,.angle-btn:before{position:absolute;top:-1px;right:-8px;display:block;width:0;height:0;content:' ';border-color:transparent transparent transparent #cbd0db;border-style:solid;border-width:17px 0 17px 8px}.angle-btn:after{right:-7px;border-color:transparent transparent transparent #fff;border-width:17px 0 17px 8px}.angle-btn .btn{padding:6px;font-weight:700;background:#fff;border:none;border-radius:4px!important}.angle-btn .btn.btn-limit{padding-right:16px}.angle-btn .btn.btn-limit>.caret{right:4px}.angle-btn+.angle-btn{border-left:none}.angle-btn+.angle-btn>.btn-group:first-child{padding-left:8px}.angle-btn+.angle-btn>.btn-group:first-child:after,.angle-btn+.angle-btn>.btn-group:first-child:before{position:absolute;top:-2px;left:0;display:block;width:0;height:0;content:' ';border-color:transparent transparent transparent #cbd0db;border-style:solid;border-width:17px 0 17px 8px}.angle-btn+.angle-btn>.btn-group:first-child:after{left:-1px;border-color:transparent transparent transparent #fff;border-width:17px 0 17px 8px}.btn-toolbar>.angle-btn.active,.btn-toolbar>.angle-btn:last-child{border-color:#0c64eb}.btn-toolbar>.angle-btn.active .btn,.btn-toolbar>.angle-btn:last-child .btn{color:#0c64eb}.btn-toolbar>.angle-btn.active:after,.btn-toolbar>.angle-btn.active:before,.btn-toolbar>.angle-btn:last-child:after,.btn-toolbar>.angle-btn:last-child:before{border-color:transparent transparent transparent #0c64eb}.btn-toolbar>.angle-btn.active:after,.btn-toolbar>.angle-btn:last-child:after{border-color:transparent transparent transparent #fff}.btn-toolbar>.angle-btn+.angle-btn:last-child>.btn-group:first-child:after,.btn-toolbar>.angle-btn+.angle-btn:last-child>.btn-group:first-child:before,.btn-toolbar>.angle-btn.active+.angle-btn>.btn-group:first-child:after,.btn-toolbar>.angle-btn.active+.angle-btn>.btn-group:first-child:before{border-color:transparent transparent transparent #0c64eb}.btn-toolbar>.angle-btn+.angle-btn:last-child>.btn-group:first-child:after,.btn-toolbar>.angle-btn.active+.angle-btn>.btn-group:first-child:after{border-color:transparent transparent transparent #fff}.btn-toolbar>.angle-btn.active+.angle-btn,.btn-toolbar>.angle-btn.normal{border-color:#cbd0db}.btn-toolbar>.angle-btn.active+.angle-btn .btn,.btn-toolbar>.angle-btn.normal .btn{color:#3c4353}.btn-toolbar>.angle-btn.active+.angle-btn:after,.btn-toolbar>.angle-btn.active+.angle-btn:before,.btn-toolbar>.angle-btn.normal:after,.btn-toolbar>.angle-btn.normal:before{border-color:transparent transparent transparent #cbd0db}.btn-toolbar>.angle-btn.active+.angle-btn:after,.btn-toolbar>.angle-btn.normal:after{border-color:transparent transparent transparent #fff}.btn-toolbar>.angle-btn.active+.angle-btn>.btn-group:first-child:before,.btn-toolbar>.angle-btn.normal>.btn-group:first-child:before{border-color:transparent transparent transparent #cbd0db!important}.nav>li>.btn.btn-primary{color:#fff}.nav>li>.btn.btn-primary:focus,.nav>li>.btn.btn-primary:hover{background:rgba(12,100,235,.8)}.label{position:relative;display:inline-block;padding:3px 5px;font-size:12px;font-weight:400;vertical-align:middle;border-radius:2px}.label+.label{margin-left:4px}.label-pale{background:#bed8f3!important}.label-badge{border-radius:9px}.label-light{color:#3c4353;background-color:#ddd}.label-primary{background:#0c64eb!important}.label-gray{color:#878da0;background:#e8ebef}.label-outline.label-danger{color:#ff5d5d;background:#ffebee;border-color:rgba(255,93,93,.25)}.label-outline.label-light{color:#838a9d;background:#f2f5fb;border-color:#e1e5ee}.label-primary.label-outline{background:#e9f2fb!important;border-color:rgba(12,100,235,.25)}.label-outline.label-success{background:#e8f5e9;border-color:rgba(0,218,136,.25)}.label-dot{position:relative;top:-1px;padding:0;border-radius:50%}.label-dot+.status-text{display:inline-block;margin-left:5px}.label-icon{min-width:18px;padding:0;line-height:18px;border-radius:10px}.label-id{display:inline-block;min-width:30px;padding:0 5px;font-size:12px;line-height:16px;color:#838a9d;text-align:center;vertical-align:middle;background-color:transparent;border:1px solid #838a9d;border-radius:2px}.pri-1,.todo-pri-1{color:#ff5d5d}[class*=" status-"],[class^=status-]{color:#3c4353}.status-changed,.status-delayed,.status-doing,.status-fail,.status-investigate{color:#ff5d5d}.status-changed>.label-dot,.status-delayed>.label-dot,.status-doing>.label-dot,.status-fail>.label-dot,.status-investigate>.label-dot{background-color:#ff5d5d}.status-wait{color:#838a9d}.status-wait>.label-dot{background-color:#7ec5ff}.status-unclosed{color:#838a9d}.status-unclosed>.label-dot{background-color:#0c64eb}.status-done,.status-normal,.status-pass,.status-resolved{color:#43a047}.status-done>.label-dot,.status-normal>.label-dot,.status-pass>.label-dot,.status-resolved>.label-dot{background-color:#00da88}.status-postpone{color:#838a9d}.status-postpone>.label-dot{background-color:#ff5d5d}.status-blocked{position:relative;left:-5px;display:inline-block;padding:0 5px;line-height:20px;color:#3c4353;background:#fff3e0;border-radius:10px}.status-blocked>.label-dot{background-color:#ff9800}.status-pause,.status-suspended{color:#ff9800}.status-pause>.label-dot,.status-suspended>.label-dot{background-color:#ff9800}.status-active.status-bug,.status-draft{color:#8666b8}.status-active.status-bug>.label-dot,.status-draft>.label-dot{background-color:#8666b8}.status-closed,.status-terminate{color:#838a9d}.status-closed>.label-dot,.status-terminate>.label-dot{background-color:#838a9d}.status-cancel{color:#838a9d}.status-cancel>.label-dot{background-color:#cbd0db}.label-pri{display:inline-block;min-width:20px;max-width:67px;height:20px;padding:0 4px;overflow:hidden;line-height:17px;color:#838a9d;text-align:center;text-overflow:ellipsis;white-space:nowrap;vertical-align:middle;border:2px solid #838a9d;border-radius:10px}.label-selector>.label-pri,[class*=label-pri-]{color:#158af1;border-color:#2098ee}.label-pri-1,.label-selector>.label-pri[data-value="1"]{color:#d50000;border-color:#d50000}.label-pri-2,.label-selector>.label-pri[data-value="2"]{color:#ff9800;border-color:#ff9800}.label-pri-3,.label-selector>.label-pri[data-value="3"]{color:#2098ee;border-color:#2098ee}.label-pri-4,.label-selector>.label-pri[data-value="4"]{color:#009688;border-color:#009688}.label-pri-5,.label-selector>.label-pri[data-value="5"]{color:#838a9d;border-color:#838a9d}.label-pri-0,.label-selector>.label-pri.active[data-value="0"]{color:#d5d9df;border-color:#d5d9df}.label-severity{position:relative;display:inline-block;width:24px;height:20px;text-align:center;vertical-align:middle}.label-severity:before{position:absolute;top:-3px;left:0;z-index:0;display:block;font-family:ZentaoIcon;font-size:18px;font-size:24px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;color:inherit;text-transform:none;content:"\e973";speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.label-severity:after{position:absolute;top:7px;left:0;z-index:1;display:block;width:24px;font-size:12px;line-height:12px;text-align:center;content:attr(data-severity)}.label-severity[data-severity],.label-severity[data-value]{color:#ccc}.label-severity[data-severity="0"],.label-severity[data-value="0"]{color:#ccc}.label-severity[data-severity="0"]:after,.label-severity[data-value="0"]:after{display:none}.label-severity[data-severity="1"],.label-severity[data-value="1"]{color:#c62828}.label-severity[data-severity="2"],.label-severity[data-value="2"]{color:#e65100}.label-severity[data-severity="3"],.label-severity[data-value="3"]{color:#ffa000}.label-severity[data-severity="4"],.label-severity[data-value="4"]{color:#fdd835}.label-severity[data-severity="5"],.label-severity[data-value="5"]{color:#8bc34a}.label-severity-custom[data-severity]{color:#d5d9df}.label-severity-custom[data-severity="1"]{color:#c62828}.label-severity-custom[data-severity="2"]{color:#e65100}.label-severity-custom[data-severity="3"]{color:#ffa000}.label-severity-custom[data-severity="4"]{color:#fdd835}.label-severity-custom[data-severity="5"]{color:#cddc39}.label-selector>.label{display:inline-block;min-width:24px;height:24px;padding:0 5px;font-size:14px;line-height:20px;text-align:center;cursor:pointer;background:0 0;border:2px solid #d5d9df;border-radius:15px}.label-selector>.label+.label{margin-left:10px}.label-selector>.label.empty{border-color:transparent}.label-selector>.label.label-severity{font-size:12px;line-height:28px;border-color:transparent}.label-selector>.label.label-severity:before{top:-2px;left:-2px}.label-selector>.label.label-severity:after{display:none}.label-selector>.label.label-severity.active{background:0 0;filter:none;-webkit-filter:none}.checkbox-primary,.radio-primary{position:relative;display:block;vertical-align:middle}.checkbox-primary.inline-block,.radio-primary.inline-block{display:inline-block}.checkbox-primary.inline-block+.inline-block,.radio-primary.inline-block+.inline-block{margin-left:15px}.checkbox-primary>input,.radio-primary>input{position:absolute;top:0;left:0;z-index:3;width:100%;height:100%;margin:0;opacity:0}.checkbox-primary>label,.radio-primary>label{display:block;height:20px;padding-left:30px;margin:0;font-weight:400;line-height:20px;cursor:pointer}.checkbox-primary>label:after,.checkbox-primary>label:before,.radio-primary>label:after,.radio-primary>label:before{position:absolute;top:1px;right:0;left:0;display:block;width:18px;height:18px;line-height:18px;text-align:center;content:' ';border-radius:3px}.checkbox-primary>label:after,.radio-primary>label:after{z-index:1;border:2px solid #eee;border-color:rgba(0,0,0,.15);-webkit-transition:.4s cubic-bezier(.175,.885,.32,1);-o-transition:.4s cubic-bezier(.175,.885,.32,1);transition:.4s cubic-bezier(.175,.885,.32,1);-webkit-transition-property:border,background-color;-o-transition-property:border,background-color;transition-property:border,background-color}.checkbox-primary>label:before,.radio-primary>label:before{top:3px;z-index:2;font-family:ZentaoIcon;font-size:18px;font-size:14px;font-style:normal;font-weight:400;font-weight:900;font-variant:normal;line-height:1;text-transform:none;content:"\e5ca";opacity:0;-webkit-transition:.2s cubic-bezier(.175,.885,.32,1);-o-transition:.2s cubic-bezier(.175,.885,.32,1);transition:.2s cubic-bezier(.175,.885,.32,1);-webkit-transition-property:opacity,-webkit-transform;-o-transition-property:opacity,-o-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform,-o-transform;-webkit-transform:scale(0);-ms-transform:scale(0);-o-transform:scale(0);transform:scale(0);speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.checkbox-primary.checked>label:after,.checkbox-primary>input:checked+label:after,.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{background-color:#00da88;border-color:#00da88;border-width:4px}.checkbox-primary.checked>label:before,.checkbox-primary>input:checked+label:before,.radio-primary.checked>label:before,.radio-primary>input:checked+label:before{color:#fff;opacity:1;-webkit-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}.checkbox-primary.focus>label:after,.checkbox-primary>input:focus+label:after,.radio-primary.focus>label:after,.radio-primary>input:focus+label:after{border-color:#00da88;-webkit-box-shadow:0 0 0 3px rgba(0,218,136,.2);box-shadow:0 0 0 3px rgba(0,218,136,.2)}.checkbox-primary:hover>label:after,.radio-primary:hover>label:after{border-color:#00da88}.checkbox-primary.checkbox-right>label,.radio-primary.checkbox-right>label{padding:0 30px 0 0}.checkbox-primary.checkbox-right>label:after,.checkbox-primary.checkbox-right>label:before,.radio-primary.checkbox-right>label:after,.radio-primary.checkbox-right>label:before{right:0;left:auto}.checkbox-primary input:disabled+label:after,.checkbox-primary.disabled>label:after,.radio-primary input:disabled+label:after,.radio-primary.disabled>label:after{background-color:#e5e5e5!important;border-color:#bbb!important}.checkbox-primary input:disabled:checked+label:after,.checkbox-primary.checked.disabled>label:after,.radio-primary input:disabled:checked+label:after,.radio-primary.checked.disabled>label:after{background-color:#bbb!important}.radio-primary>label:after{border-radius:50%}.radio-primary>label:before{top:7px;left:6px;width:6px;height:6px;content:' ';border:none;border-radius:50%}.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{background-color:transparent;border-color:#00da88;border-width:2px}.radio-primary.checked>label:before,.radio-primary>input:checked+label:before{background-color:#00da88}.radio-primary input:disabled:checked+label:after,.radio-primary.checked.disabled>label:after{background-color:transparent;border-color:#bbb}.radio-primary input:disabled:checked+label:before,.radio-primary.checked.disabled>label:before{background-color:#bbb}.panel{position:relative;margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045);box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045)}.panel-body{padding:20px}.panel-body.has-table{padding:10px}.panel-body.has-table .table{margin-bottom:0;table-layout:fixed}.panel-heading{padding:12px 48px 12px 20px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading+.panel-body{padding-top:0}.panel-title{font-size:14px;font-weight:700;line-height:20px}.panel-title .label{top:-1px}.panel-actions{position:absolute;top:0;right:0;padding:7px 8px}.panel:hover .panel-actions{z-index:10}.panel-actions>li>a{display:inline-block;min-width:30px;padding:0 5px;line-height:30px;color:#a6aab8}.panel-actions>li>a:hover{color:#3c4353;text-decoration:initial;background-color:#f1f1f1}.panel-actions .btn-icon{color:#a6aab8}.panel-actions .btn.text-primary{color:#0c64eb}.panel .empty-tip{padding:30px 10px 50px;font-size:14px;color:#838a9d;text-align:center}.progress-text-left{position:relative;margin:7px 0;margin-left:35px;overflow:visible}.progress-text-left .progress-text{position:absolute;top:-7px;left:-35px;display:block;width:35px;height:20px;padding-right:5px;line-height:20px;color:#838a9d;text-align:right}.chart-color{width:20px}.chart-color-dot{display:inline-block;width:10px;height:10px;border-radius:50%}.chart-row{margin-top:10px}.chart-row+.chart-row{padding-top:10px;border-top:1px solid #eee}.chart-wrapper{padding:10px 5px;background:#eee}.chart-wrapper>h4{margin:5px 0 10px}.table-wrapper{max-height:250px;overflow:auto}.table-wrapper .table{margin:0}.progress-pie{position:relative}.progress-pie .progress-info{position:absolute;top:0;left:0;width:100%;height:100%;padding-top:25px;text-align:center}.progress-pie .progress-info>small{display:block;line-height:14px;color:#a6aab8}.progress-pie .progress-info>strong{display:block;font-size:36px;line-height:40px}.progress-pie .progress-info>strong>small{font-size:20px}.progress-pie-120 .progress-info{padding-top:30px}.progress-pie-120 .progress-info>small{line-height:18px}.progress-pie-50 .progress-info{padding-top:4px}.progress-pie-50 .progress-info>strong{font-size:20px;font-weight:400}.progress-pie-50 .progress-info>strong>small{font-size:14px}.progress-pie[data-value="100"] .progress-info>strong{-webkit-transform:scale(.7);-ms-transform:scale(.7);-o-transform:scale(.7);transform:scale(.7)}.status-bars{display:table;width:100%;height:140px;padding:5px;padding-top:50px;margin:0;overflow:hidden}.status-bars>li{position:relative;display:table-cell;text-align:center;vertical-align:bottom}.status-bars .bar{position:absolute;bottom:20px;left:50%;display:block;width:10px;margin-left:-5px;background:#0c64eb;border-radius:5px 5px 0 0}.status-bars .bar:after{position:absolute;right:-50px;bottom:0;left:-50px;display:block;height:1px;content:' ';background:#eee}.status-bars .title{font-size:12px;font-weight:400;color:#a6a8b6}.status-bars .value{position:relative;top:-20px;left:-20px;display:inline-block;width:50px;font-size:16px;font-weight:700;text-align:center}.status-bars-h{display:block;padding-right:50px;padding-left:60px;list-style:none}.status-bars-h>li{position:relative;height:40px;border-left:1px solid #eee}.status-bars-h .bar{position:relative;top:15px;display:block;height:10px;line-height:20px;background:#0c64eb;border-radius:0 5px 5px 0}.status-bars-h .title{position:absolute;top:-5px;left:-60px;width:60px;padding-right:10px;font-size:12px;color:#a6a8b6;text-align:right}.status-bars-h .value{position:absolute;top:-5px;right:-50px;display:block;width:40px;font-size:14px;font-weight:700;text-align:left;white-space:nowrap}.messager{border-radius:4px;-webkit-box-shadow:0 4px 16px rgba(0,0,0,.2),0 2px 8px rgba(0,0,0,.1);box-shadow:0 4px 16px rgba(0,0,0,.2),0 2px 8px rgba(0,0,0,.1)}.messager-content{padding:18px 20px;font-size:18px;line-height:30px}.messager-content>.icon{font-size:28px;line-height:30px}.messager-actions{vertical-align:middle}.messagger-zt{color:#3c4353;background-color:#fff}.messagger-zt .messager-content>.icon{color:#0c64eb}.messagger-zt .messager-actions>.action{color:#838a9d}.messagger-zt.messager-success .messager-content>.icon{color:#00da88}.messagger-zt.messager-danger .messager-content>.icon{color:#ff5d5d}.messagger-zt.messager-warning .messager-content>.icon{color:#ff9800}.messagger-zt.messager-info .messager-content>.icon{color:#2196f3}.tree{padding-left:0;overflow:hidden}.tree ul{position:relative;display:none;padding-left:0}.tree li{position:relative;padding:2px 0 2px 15px;list-style:none}.tree li.heading{padding-left:5px;color:#3c4353}.tree li>a{display:block;max-width:90%;padding:2px 6px;color:#3c4353;word-break:break-all}.tree li>a:hover{color:#3c4353}.tree li>a.tree-toggle:hover{background:0 0}.tree li.active>a{position:relative;font-weight:700;color:#0c64eb}.tree li>.list-toggle{position:absolute;top:1px;left:1px;z-index:10;width:20px;font-size:14px;line-height:22px;color:#cbd0db;text-align:center;cursor:pointer;-webkit-transition:all .2s;-o-transition:all .2s;transition:all .2s}.tree li>.list-toggle:before{content:"\f0da"}.tree li>.list-toggle:active,.tree li>.list-toggle:hover{color:#0c64eb}.tree li.has-active-item>.list-toggle{color:#3c4353}.tree li.has-list.open>ul{display:block}.tree li.has-list.open>.list-toggle{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.tree li.has-list.open:before{position:absolute;top:16px;bottom:-5px;left:10px;display:block;content:' ';border-left:1px solid #d8d8d8}.tree-actions{display:inline-block;margin-left:5px;vertical-align:middle}.tree-actions a{display:inline-block;margin-left:5px;font-size:13px;opacity:.6}.tree-actions a:hover{opacity:1}.tree li>.module-name{color:#3c4353;vertical-align:middle}.tree li>.module-name:hover{background-color:#f0f2f5}.tree li>.module-name:hover>a{color:#3c4353}.treemap-node-fold-icon:before{position:relative;left:-4px;min-width:18px}.dropdown-menu{padding:5px 0;border-color:rgba(0,0,0,.1)}.dropdown-menu>li{padding:0 10px}.dropdown-menu>li>a{padding:2px 10px;margin:5px 0;border-radius:3px}.dropdown-menu>li>a>.icon{position:relative;left:-5px;opacity:.5}.dropdown-menu>li.active>a,.dropdown-menu>li.selected>a{position:relative;color:#fff;background-color:#16a8f8}.dropdown-menu>li.selected>a:after{position:absolute;top:2px;right:4px;display:block;font-family:ZentaoIcon;font-size:18px;font-size:14px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;line-height:20px;text-transform:none;content:"\e5ca";speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.dropdown-menu>li.divider{margin:10px}.dropdown-submenu>a:after{margin-right:-5px}.dropdown-submenu>.dropdown-menu.pull-left{margin-left:-1px}.dropdown-submenu:focus>a,.dropdown-submenu:hover>a{color:#3c4353;background-color:#e9f2fb}.dropdown-submenu:hover>a:after{border-left-color:#0c64eb}.dropdown-submenu>a:hover:after{border-left-color:#fff}.pager .btn{padding:3px 10px}.pager .btn .caret{opacity:.7}.pager>li>.pager-label{padding:2px;line-height:20px}.pager>li>.pager-item{min-width:20px;padding:1px;margin:2px 0;font-size:16px;line-height:20px;text-align:center;background:0 0;border-color:transparent}.pager>li>.pager-item:hover{background-color:rgba(0,0,0,.1)}.pager>li>.pager-item>.icon{position:relative;top:-1px}.pager>li>.btn:hover,.pager>li>a:hover{background:rgba(0,0,0,.1)}.pager>li.disabled>a.pager-item{background:0 0;border-color:transparent;opacity:.5}.pager>li.active>a{background-color:#16a8f8}.pager>li .btn-group .btn{padding:1px;margin:2px 0;border-radius:4px}.pager .dropdown-menu{width:200px}.pager .dropdown-menu>li{float:left;width:33.333333%}.modal-dialog{width:900px;max-width:1360px;border:none;border-radius:0;-webkit-box-shadow:0 0 20px 0 rgba(0,0,0,.25);box-shadow:0 0 20px 0 rgba(0,0,0,.25)}.modal-dialog.modal-md{width:700px}.modal-dialog.modal-xs{width:400px}.modal-dialog.modal-sm{width:500px}.modal-dialog.modal-lg{width:1200px}.modal-dialog.modal-fullscreen{position:fixed;max-width:initial}.modal-header{padding:20px 0;margin:0 20px}.modal-header>.close{color:#838a9d;text-shadow:0 1px 0 rgba(255,255,255,.85);opacity:1}.modal-header>.close:hover{color:#222}.modal-footer{padding:20px 0;margin:0 20px}.modal-title{font-size:16px;font-weight:400;line-height:20px}.modal-actions{position:absolute;top:16px;right:16px}.modal-actions .divider{position:relative;top:5px;display:inline-block;width:0;height:20px;margin:0 10px;border-left:#eee 1px solid}.modal-actions>.dropdown{display:inline-block}.modal-body{padding:20px}.modal-iframe .modal-body>iframe{border-radius:0}.modal.fade .modal-dialog{-webkit-transform:translate(0,-3%);-ms-transform:translate(0,-3%);-o-transform:translate(0,-3%);transform:translate(0,-3%)}.modal.fade.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-simple .modal-footer{padding-top:0;border-top:none}.modal-iframe .modal-header{position:relative;z-index:10;min-height:0;padding:0;border:none}.modal-iframe .modal-title{display:none}.modal-iframe .modal-header .close{position:absolute;top:12px;right:10px;font-size:32px;font-weight:200}.modal-iframe .modal-dialog{overflow:hidden}.modal-inverse .modal-header>.close{color:rgba(255,255,255,.7);text-shadow:none}.modal-inverse .modal-header>.close:hover{color:#fff}.modal-scroll-inside>.modal-dialog{max-height:100%}.hide-modal-close .modal-iframe .modal-header .close{display:none}.tile{text-align:center}.tile-title{line-height:20px;color:#3c4353}.tile-amount{font-size:32px;font-weight:700;line-height:56px}.timeline>li{position:relative;list-style:none}.timeline>li:before,.timeline>li>a:after,.timeline>li>div:after{position:absolute;left:-20px;display:block;width:15px;height:15px;content:' ';border-radius:50%}.timeline>li:before{top:12px;left:-16px;z-index:3;width:7px;height:7px;background-color:#cbd0db;border:none;border:1px solid #cbd0db}.timeline>li>a:after,.timeline>li>div:after{top:11px;left:-17px;z-index:3;width:9px;height:9px;background-color:#0c64eb;border-radius:50%;opacity:0}.timeline>li+li:after{position:absolute;top:-12px;bottom:20px;left:-13px;z-index:1;display:block;content:' ';border-left:1px solid #eee}.timeline>li.active>a:after,.timeline>li.active>div:after{opacity:1}.timeline>li.active:before{top:8px;left:-20px;width:15px;height:15px;background-color:rgba(12,100,235,.2);border:none}.timeline>li>a,.timeline>li>div{display:block;padding:5px;line-height:20px}.timeline>li.active>a{color:#3c4353}.timeline-tag{position:absolute;top:5px;left:-115px;font-size:12px}.timeline-tag-left{padding-left:115px}.timeline-sm{font-size:12px}.timeline-sm>li:before,.timeline-sm>li>a:after,.timeline-sm>li>div:after{top:10px;left:-20px;width:11px;height:11px}.timeline-sm>li.active:before,.timeline-sm>li:before{top:10px;left:-18px;width:11px;height:11px;background:0 0;border:1px solid #eee}.timeline-sm>li>a,.timeline-sm>li>div{line-height:20px}.timeline-sm>li>a:after,.timeline-sm>li>div:after{top:13px;left:-15px;width:5px;height:5px}.form-control{-webkit-box-shadow:none;box-shadow:none}.form-horizontal .form-group>label{padding-right:0}.form-actions{margin-top:20px;margin-bottom:0}.form-actions .btn{margin-right:10px}form label{font-weight:400;color:#3c4353}.form-group .btn+.btn{margin-left:5px}.table-form{margin-bottom:0;table-layout:fixed}.table-form>thead>tr>th.required:after{position:relative;top:3px;right:auto;left:4px;display:inline-block;vertical-align:middle}.table-form>tbody>tr>td,.table-form>tbody>tr>th,.table-form>tfoot>tr>td,.table-form>thead>tr>th{padding:7px;vertical-align:middle;border-bottom:none}.table-form>tfoot>tr>td{padding:20px 7px 10px}.table-form>tbody>tr>th{width:100px;font-weight:700;text-align:right}.table-form .input-group{width:100%}.table-form textarea.form-control{height:32px}.chosen-container-single .chosen-single{position:relative}.chosen-container-single .chosen-single>span{height:20px;line-height:20px;white-space:normal}.chosen-container-single .chosen-single div b{position:relative;top:1px;color:#cbd0db}.chosen-container-single .chosen-search:before{top:8px;right:15px}.chosen-container-multi .chosen-choices li.search-choice{font-size:13px;background:#eee;border-color:#cbd0db;-webkit-box-shadow:none;box-shadow:none}.chosen-container-single .chosen-search input[type=text]{height:30px;padding:3px 25px 3px 5px}.chosen-container-single .chosen-search{padding:3px 10px 0}.chosen-container-single .chosen-single{overflow:visible}.chosen-container-single .chosen-single>.chosen-search{top:-2px;right:-1px;bottom:-1px;left:-1px;display:none;height:auto;padding:0;opacity:0}.chosen-container-single .chosen-single>.chosen-search>input{height:31px;padding:5px 26px 5px 8px;font-size:inherit;line-height:20px}.chosen-container-single .chosen-single>.chosen-search:before{top:7px;right:8px}.chosen-container .chosen-results{padding:10px}.chosen-container .chosen-results>li{border-radius:4px}.chosen-container .chosen-results li.highlighted em{color:#fff}.table-responsive .chosen-container .chosen-results{max-height:200px}.datetimepicker{padding:10px}.datetimepicker td.day.today{background-color:#f77}.datetimepicker td.day.active{background-color:#16a8f8}.datetimepicker tfoot th,.datetimepicker thead th{color:#838a9d}.input-control .colorpicker{top:0;z-index:auto;opacity:1}.input-control .colorpicker .btn{padding:5px}.input-control .input-control-icon-right.btn{top:0}.colorpicker .dropdown-menu{min-width:232px;padding:5px 10px 10px 10px}.colorpicker .dropdown-menu>li{display:block;float:left;padding:5px}.colorpicker .dropdown-menu>li.heading{width:100%;margin-bottom:5px;font-size:16px;font-weight:700;text-align:left}.colorpicker .dropdown-menu>li.heading>.icon-close{position:relative;top:4px;float:right;cursor:pointer;opacity:.6}.colorpicker .dropdown-menu>li>a{position:relative;display:block;width:100%;height:100%;padding:0;margin:0;font-family:ZentaoIcon;font-size:18px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;text-align:center;text-transform:none;border:1px solid transparent;border-radius:50%;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.colorpicker .dropdown-menu>li>a:before{position:absolute;top:0;display:block;width:100%;height:20px;line-height:18px}.colorpicker .dropdown-menu>li>a:hover{-webkit-box-shadow:0 1px 4px rgba(0,0,0,.25);box-shadow:0 1px 4px rgba(0,0,0,.25)}.colorpicker .dropdown-menu>li>a.active:before{font-size:14px;content:"\e5ca"}.colorpicker .dropdown-menu>li>a.empty{color:#666;background:#fff}.colorpicker .dropdown-menu>li>a.empty:before{content:"\e90d"}.colorpicker .btn{position:relative}.colorpicker .btn .color-bar{position:absolute;right:5px;bottom:3px;left:5px;height:3px}.colorpicker .btn .color-bar[style*='background: ']+.ic{position:relative;top:-2px}.colorpicker .btn .ic{color:#cbd0db}.colorpicker .btn:hover .ic{color:#838a9d}.input-group .colorpicker{z-index:3}.input-group .chosen-container{display:table-cell}.input-group-addon{border-right-width:0;border-left-width:0}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin:0}.input-group-cell{display:table-cell;width:1%;padding:0 12px;white-space:nowrap;vertical-align:middle}.ke-container{border-color:#dcdcdc!important;border-radius:2px!important}.ke-container.focus{border-color:#0c64eb!important}.ke-toolbar{border-color:#dcdcdc!important}.required:after{top:6px;right:-10px;font-size:20px}td.required:after{top:12px;right:-5px}.input-group>.chosen-container.required:after,.input-group>.input-control.required:after{top:1px;right:1px;z-index:2}.input-group.required .required:after{display:none}.file-input{position:relative}.file-input .input-group{width:auto}.file-input .input-group>.input-group-cell:first-child{padding-right:0;padding-left:7px}.file-input input[type=file]{position:absolute;width:0;height:0;opacity:0}.file-input .file-title{display:inline-block;max-width:400px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:middle}.file-input .file-editbox{min-width:200px;max-width:100%}.file-input .file-size{display:inline-block;vertical-align:middle}.edit .file-input-empty,.file-input-edit,.file-input-normal,.normal .file-input-empty{display:none}.edit .file-input-edit,.normal .file-input-normal{display:block}.edit .file-input-edit.input-group,.normal .file-input-normal.input-group{display:table}.edit .file-input-normal{display:none!important}.file-input-normal>.input-group-btn{width:auto}.input-group .chosen-container-active .chosen-choices{border-color:#0c64eb!important}.input-group .chosen-container{min-width:100px}.input-group .input-group-btn .btn>.icon{line-height:17px}.os-mac select.form-control{-webkit-appearance:none;background-image:url(data:image/gif;base64,R0lGODlhCQAFAIAAAMvQ2////yH5BAEAAAEALAAAAAAJAAUAAAIKhH+BGYoNGWxgFgA7);background-image:url(data:image/gif;base64,R0lGODlhBwAEAIAAAMvQ2////yH5BAEAAAEALAAAAAAHAAQAAAIIhA+BGWoNWSgAOw==);background-repeat:no-repeat;background-position:right 5px top 12px;-moz-appearance:none}input::-webkit-contacts-auto-fill-button{position:absolute;right:0;display:none!important;pointer-events:none;visibility:hidden}.chosen-choices.has-error,.chosen-single.has-error,.form-control.has-error{border-color:#ff5d5d!important;-webkit-box-shadow:0 0 6px #ffc3c3!important;box-shadow:0 0 6px #ffc3c3!important}.popover-success.popover-form-result{font-weight:700;color:#fff;background:#00da88}.popover-success.popover-form-result.popover.right .arrow:after{border-right-color:#00da88}#mainHeader{height:50px;color:#fff;background:#1183fb -webkit-gradient(linear,right top,left top,from(#0a48d1),to(#1183fb));background:#1183fb -webkit-linear-gradient(right,#0a48d1 0,#1183fb 100%);background:#1183fb -o-linear-gradient(right,#0a48d1 0,#1183fb 100%);background:#1183fb linear-gradient(-90deg,#0a48d1 0,#1183fb 100%);background-color:#1183fb;border-top-color:#0c64eb;border-bottom-color:#e9f2fb}#mainHeader>.container{min-width:1200px;padding:0}#heading{position:absolute;top:10px;left:20px}@media (min-width:1400px){#heading{left:40px}}#heading h1{float:left;max-width:250px;margin:0;overflow:hidden;font-size:20px;font-weight:400;line-height:30px;text-overflow:ellipsis;white-space:nowrap}#heading h1 a{color:inherit;text-decoration:inherit}#heading h1.long-name{position:relative;top:-5px;display:table-cell;font-size:16px;line-height:20px;word-break:break-all;white-space:normal}#heading .btn{display:block;float:left;height:20px;padding:1px 5px;margin:0;margin:5px 0 0 10px;font-size:12px;font-weight:lighter;line-height:18px;background-color:rgba(255,255,255,.2);border:none}#heading .btn:hover{background-color:rgba(0,0,0,.1)}#navbar{margin:0 auto;font-size:15px;text-align:center}#navbar .nav{display:inline-block}#navbar .nav>li>a{padding:10px 15px;line-height:30px;color:#fff;border-radius:0;opacity:.9}@media (max-width:992px){#navbar .nav>li>a{padding:10px}}#navbar .nav>li>a:focus,#navbar .nav>li>a:hover{background:rgba(0,0,0,.15);opacity:1}#navbar .nav>li.active>a{font-weight:700;background:rgba(0,0,0,.1);opacity:1}#navbar .nav>li.divider{display:block;width:2px;height:20px;margin:15px;background:rgba(255,255,255,.4)}#navbar .nav>li.divider:last-child{display:none}#toolbar{position:absolute;top:12px;right:20px;font-size:12px;color:#fff}@media (min-width:1400px){#toolbar{right:40px}}#extraNav{text-align:right}#extraNav>li{display:inline-block;float:none;text-align:left}#extraNav>li>a{display:block;padding:0;color:#fff;opacity:.75}#extraNav>li>a:hover{text-decoration:unset;background-color:rgba(0,0,0,.1);opacity:1}#extraNav>li.open>a{background-color:rgba(0,0,0,.1)}#extraNav>li+li{margin-left:10px}#searchbox{position:relative;float:left;width:150px}#searchbox .input-group-btn .btn{position:relative;padding:1px 4px;font-size:12px;line-height:20px;color:#fff;background-color:rgba(255,255,255,.15);border-right:none;border-radius:2px}#searchbox .input-group-btn .btn:after{position:absolute;top:3px;right:0;bottom:3px;display:block;width:1px;content:' ';background-color:rgba(255,255,255,.15)}#searchbox .input-group-btn .btn:hover{background-color:rgba(255,255,255,.25)}#searchGo{position:absolute;top:0;right:-1px;z-index:9;min-width:24px;height:24px;padding:2px 3px;font-size:12px;line-height:20px;color:#fff;background-color:#6a9afd;border-radius:2px}#searchGo:hover{color:#fff!important;background-color:#0c64eb}#searchInput{height:24px;padding:2px 30px 2px 5px;color:#fff;text-align:left;background:rgba(255,255,255,.15);border-color:transparent;border-radius:0 12px 12px 0;-webkit-transition:background .2s,border .2s;-o-transition:background .2s,border .2s;transition:background .2s,border .2s}#searchInput:hover{background:rgba(255,255,255,.25)}#searchInput:focus{color:#333;background:#fff}#searchInput::-webkit-input-placeholder{font-size:12px;color:#fff;color:rgba(255,255,255,.5)}#searchInput::-moz-placeholder{font-size:12px;color:#fff;color:rgba(255,255,255,.5)}#searchInput::placeholder{font-size:12px;color:#fff;color:rgba(255,255,255,.5)}#searchInput:focus::-webkit-input-placeholder{color:#838a9d}#searchInput:focus::-moz-placeholder{color:#838a9d}#searchInput:focus::placeholder{color:#838a9d}#searchTypeMenu{min-width:220px}#searchTypeMenu>li{float:left;width:50%}#searchTypeMenu>li>a{margin:4px 0}#userNav{float:right;margin:0 -6px 0 10px}#userNav .avatar{display:inline-block;vertical-align:middle}#userNav>li>a{padding:2px 6px;margin-left:3px;line-height:20px;color:#fff;opacity:.9}#userNav>li>a .user-name{max-width:100px;overflow:hidden;font-size:15px;text-overflow:ellipsis;white-space:nowrap}#userNav>li>a:hover{background-color:rgba(0,0,0,.1);opacity:1}#userNav>li>a span{display:inline-block;vertical-align:middle}#userNav>li.open>a{background-color:rgba(0,0,0,.1)}#userNav>li.has-new-items>a{position:relative}#userNav>li.has-new-items>a:before{position:absolute;top:3px;right:-1px;display:block;width:4px;height:4px;content:' ';background-color:#ff5d5d;border-radius:50%}#userNav .dropdown-menu{min-width:150px}#userNav .dropdown-menu>li>a>.icon{position:absolute;top:10px;right:5px;display:block;width:20px;height:20px;line-height:20px;text-align:center}#userNav .user-profile-item>a{position:relative;padding-left:45px}#userNav .user-profile-item .avatar{position:absolute;top:6px;left:5px}#userNav .user-profile-name{font-size:16px}#userNav .user-profile-role{font-size:12px;color:#a9abb8}#userNav .no-role .user-profile-role{display:none}#userNav .no-role .user-profile-name{line-height:40px}#subHeader{min-height:50px;background:#fff}#subHeader>.container{padding:0 20px}@media (min-width:1400px){#subHeader>.container{padding:0 40px}}#pageNav{position:absolute;top:8px;left:0;left:20px}@media (min-width:1400px){#pageNav{left:40px}}#subNavbar{margin-top:5px;font-size:14px;text-align:center}#subNavbar .nav{display:inline-block}#subNavbar .nav>li>a{padding:8px 12px;line-height:24px;color:#3c4353}#subNavbar .nav>li>a:hover{color:#3c4353;background-color:rgba(0,0,0,.075)}#subNavbar .nav>li.active>a{font-weight:700;color:#0c64eb}#subNavbar .nav>li.divider{display:block;width:2px;height:20px;margin:9px 5px;background-color:rgba(0,0,0,.05)}#subNavbar .dropdown-menu{text-align:left}#pageActions{position:absolute;top:9px;right:20px}@media (min-width:1400px){#pageActions{right:40px}}.cell{padding:10px;background-color:#fff;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045);box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045)}.cell+.cell{margin-top:10px}.cell>.panel{margin:0;-webkit-box-shadow:none;box-shadow:none}.cell>.panel>.panel-heading{padding:5px 5px 10px}.cell>.panel>.panel-heading .panel-actions{padding:0}.cell>.panel>.panel-body{padding:5px}.cell>.table{margin:0}#main{padding:20px 0}#main>.container{padding:0 20px}@media (min-width:1400px){#main>.container{padding:0 40px}}#header,#header+#main{min-width:1200px}#mainMenu{margin:-10px 0 8px}.main-content{padding:20px;background-color:#fff;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045);box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045)}@media (min-width:1400px){.main-content>.center-block{max-width:1350px;padding:20px;border:1px solid #eee}.main-content>.center-block .main-header{background-color:#f1f1f1}}.main-content>h2{margin:0 0 20px}.main-content .cell{-webkit-box-shadow:none;box-shadow:none}.main-header{padding:5px 20px;border-bottom:1px solid #eee}.main-header:after,.main-header:before{display:table;content:" "}.main-header:after{clear:both}.main-header>h2{display:block;float:left;margin:0 10px 0 0;font-size:14px;line-height:34px}.main-header>h2 .label-id{margin-right:5px}.main-header>h2 small{font-size:14px;font-weight:400}.main-content .main-header{margin:-20px -20px 10px}.main-header .label{top:-1px}.main-row{display:table;width:100%;table-layout:fixed}.main-row>*{display:table-cell;vertical-align:top}@media (max-width:720px){.main-row{display:block}.main-row>*{display:block;width:100%}.main-row .side-col{width:100%;padding:0}.main-row .main-col+.side-col,.main-row .side-col+.main-col{margin-top:10px}}.main-row.hide-side .side-col{display:none}@media (min-width:720px){.main-content>.center-block .main-form{padding-right:20px}}#main .side-col .tabs{padding:5px}#main .side-col .nav-tabs{margin:0 5px 5px 5px;border-bottom:1px solid #ddd}#main .side-col .nav-tabs>li{margin:0}#main .side-col .nav-tabs>li+li{margin-left:10px}#main .side-col .nav-tabs>li>a{position:relative;padding:8px 5px;border:none;border-radius:2px!important}#main .side-col .nav-tabs>li.active>a{font-weight:700;color:#3c4353}#main .side-col .nav-tabs>li.active>a:before{position:absolute;right:0;bottom:-1px;left:0;display:block;height:2px;content:' ';background:#0c64eb}#main .side-col .tab-content .tab-pane table{border:none}.main-actions .btn-toolbar{display:inline-block;padding:4px 15px;color:#fff;pointer-events:auto;background:#717171;background-color:rgba(90,90,90,.85);border-radius:4px}.main-actions .btn-toolbar .divider{margin-right:15px;margin-left:15px;border-color:rgba(255,255,255,.1)}.main-actions .btn-toolbar .btn{padding-right:10px;padding-left:10px;margin-right:0;color:#fff;background-color:transparent;border:none}.main-actions .btn-toolbar .btn+.btn{margin-left:10px}.main-actions .btn-toolbar .btn:focus,.main-actions .btn-toolbar .btn:hover{background-color:rgba(255,255,255,.2)}.main-actions .btn-toolbar .btn.btn-icon{min-width:32px;padding-right:0;padding-left:0}.main-actions .btn-toolbar .btn+.btn-group{margin-right:0;margin-left:10px}#mainContent .main-col>.main-actions{padding:30px 0 0 0;text-align:center}#mainContent .main-col>.main-actions>.btn-toolbar{visibility:visible;opacity:1;-webkit-transition:opacity .2s;-o-transition:opacity .2s;transition:opacity .2s}#mainActions{position:fixed;top:0;right:0;bottom:0;left:0;text-align:center;pointer-events:none}#mainActions .btn-toolbar{position:relative;top:-90px}#mainActions .dropdown-menu{text-align:left}#mainActions>.container{height:100%}.main-actions-holder{display:none}.main-actions-fixed .main-actions-holder{display:block}.main-actions-fixed #mainContent .main-col>.main-actions{position:fixed;bottom:50px}.main-actions-fixed.body-modal #mainContent .main-col>.main-actions{bottom:20px}#nextPage,#prevPage{position:absolute;top:50%;left:-10px;width:40px;height:60px;padding:10px 0;margin-top:-30px;line-height:40px;color:#fff;text-align:center;pointer-events:auto;background:#717171;background-color:rgba(90,90,90,.85);-webkit-box-shadow:0 2px 15px 2px rgba(0,0,0,.05);box-shadow:0 2px 15px 2px rgba(0,0,0,.05)}#nextPage:hover,#prevPage:hover{-webkit-box-shadow:0 2px 15px 2px rgba(0,0,0,.15);box-shadow:0 2px 15px 2px rgba(0,0,0,.15)}#nextPage>.icon,#prevPage>.icon{display:block;font-size:36px;line-height:36px}#nextPage{right:-10px;left:auto}@media (max-width:1800px){#prevPage{left:-3px}#nextPage{right:-3px}}#sidebarHeader{position:relative;float:left;width:180px;height:34px;padding-right:20px;margin-right:20px;background:#fff;border-left:4px solid #0c64eb;border-radius:4px 2px 2px 4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045);box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045)}#sidebarHeader:after{position:absolute;top:-1px;right:-8px;display:block;width:0;height:0;content:' ';border-color:transparent transparent transparent #fff;border-style:solid;border-width:18px 0 18px 8px}#sidebarHeader .title{padding:0 5px;overflow:hidden;font-size:14px;font-weight:700;line-height:32px;color:#0c64eb;text-align:center;text-overflow:ellipsis;white-space:nowrap}#sidebarHeader .title>a{position:absolute;top:0;right:0;width:20px;opacity:.5}#sidebarHeader .title>a:hover{opacity:1}#sidebar{position:relative;-webkit-transition:width .2s,padding .2s;-o-transition:width .2s,padding .2s;transition:width .2s,padding .2s}#sidebar>.sidebar-toggle{position:absolute;top:0;right:5px;bottom:0;width:10px;cursor:pointer;background:0 0;border-radius:5px;-webkit-transition:background-color .2s;-o-transition:background-color .2s;transition:background-color .2s}#sidebar>.sidebar-toggle>.icon{position:absolute;top:50%;left:-1px;width:12px;height:30px;margin-top:-10px;line-height:30px;color:#fff;text-align:center;background:#79cdfb;border-radius:6px}#sidebar>.sidebar-toggle>.icon:before{position:relative;left:-3px}#sidebar>.sidebar-toggle:before{position:absolute;top:0;right:-5px;bottom:0;left:-5px;display:block;content:' '}#sidebar>.sidebar-toggle:hover{background:rgba(0,0,0,.075)}#sidebar>.cell{position:relative;left:0;width:180px;-webkit-transition:left .2s,opacity .2s;-o-transition:left .2s,opacity .2s;transition:left .2s,opacity .2s}#sidebar.no-animate>.cell{display:none;-webkit-transition:none;-o-transition:none;transition:none}.hide-sidebar #sidebar>.cell{position:absolute;left:-200px;opacity:0}.hide-sidebar #sidebar{position:relative;width:0;padding:0}.hide-sidebar #sidebar>.sidebar-toggle>.icon:before{content:"\e315"}@media (max-width:720px){#sidebar>.cell{width:100%}}#queryBox{max-height:0;padding:0;overflow:hidden;-webkit-transition:cubic-bezier(.175,.885,.32,1) .2s;-o-transition:cubic-bezier(.175,.885,.32,1) .2s;transition:cubic-bezier(.175,.885,.32,1) .2s;-webkit-transition-property:padding,max-height,margin;-o-transition-property:padding,max-height,margin;transition-property:padding,max-height,margin}#queryBox>form{visibility:hidden;-webkit-transition:visibility .2s .2s;-o-transition:visibility .2s .2s;transition:visibility .2s .2s}#queryBox.loading{height:50px}#queryBox.show{min-height:110px;max-height:300px;margin-bottom:10px;overflow:visible}#queryBox.show>form{visibility:visible}#queryBox.divider{border-bottom:1px solid #eee}#main .querybox-toggle.querybox-opened{position:relative;color:#0c64eb;background:0 0;border:none}#main .querybox-toggle.querybox-opened:before{position:absolute;bottom:-14px;left:50%;width:0;height:0;content:' ';border-color:transparent transparent #fff transparent;border-style:solid;border-width:0 10px 10px 10px}#contentNav{padding:5px;background:#fff;border-bottom:1px solid #eee}#contentNav .nav>li>a{position:relative;padding:6px 10px;color:#838a9d}#contentNav .nav>li.active>a{font-weight:700;color:#0c64eb}#contentNav .nav>li.active>a:before{position:absolute;right:10px;bottom:3px;left:10px;display:block;height:2px;content:' ';background:#0c64eb}.body-modal{padding-bottom:0}.body-modal #main,.body-modal .container{min-width:0!important}.body-modal #main{padding:0}.body-modal .main-header{position:fixed;top:0;right:20px;left:20px;z-index:100;padding:13px 48px 13px 0;margin:0;background:#fff}.body-modal #mainContent{padding-top:70px}.body-modal .main-header>h2{max-width:100%;overflow:hidden;font-size:14px;text-overflow:ellipsis;white-space:nowrap}.body-modal .cell,.body-modal .main-content{-webkit-box-shadow:none;box-shadow:none}.body-modal #mainMenu{position:fixed;top:0;right:0;left:0;z-index:100;padding:12px 60px 12px 10px;margin:0;background:#fff}.body-modal #mainMenu>.btn-toolbar.pull-left.divider{display:none}.body-modal #mainMenu>.btn-toolbar{max-width:100%;margin-left:20px}.body-modal #mainMenu>.btn-toolbar>.divider:first-child{display:none}.body-modal #mainMenu>.btn-toolbar .page-title{max-width:100%;margin-left:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.body-modal #mainMenu+#mainContent.main-row{padding:60px 10px 0}.body-modal #mainMenu+#mainContent.main-row .cell{border:1px solid #efefef;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045);box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045)}.body-modal #mainActions{top:auto}.body-modal #mainActions .btn-toolbar{top:auto;bottom:10px}.body-modal.m-bug-view,.body-modal.m-story-view,.body-modal.m-task-view,.body-modal.m-testcase-view,.body-modal.m-testtask-view,.body-modal.m-todo-view{padding-bottom:20px;border-radius:3px}#tabsNav{position:relative}#tabsNav .tab-pane>.actions{position:absolute;top:-8px;right:0}#tabsNav .tab-pane>.cell,#tabsNav .tab-pane>.main-table{padding:0;border:1px solid #cbd0db;border-top:none;border-radius:0 0 4px 4px}#tabsNav .tab-pane>.cell .detail-title{padding-left:5px}#helpContent{position:fixed;top:50px;right:0;bottom:40px;left:0;display:none;background-color:#fff}#helpContent .load-error{display:none;padding:20px}#helpContent .show-error .load-error{display:block}.show-help-tab{overflow:hidden}.show-help-tab #main{display:none}.show-help-tab #helpContent{display:block}#navbar .nav>li>a.open-help-tab>.icon-close{display:none;opacity:.5}#navbar .nav>li>a.open-help-tab>.icon-close:hover{background:rgba(0,0,0,.1);opacity:1}.show-help-tab #navbar .nav>li>a.open-help-tab>.icon-close{display:inline}.text-middle td,.text-middle th{vertical-align:middle}.text-center td,.text-center th{text-align:center}.c-sm{width:40px}.c-id{width:90px}.c-id-sm{width:70px}.c-id-xs{width:55px}.c-date{width:100px}.c-num,.c-pri,.c-type{width:80px;overflow:hidden}.c-begin,.c-end,.c-time{width:65px}.c-hours{width:60px}.c-actions-1{width:50px}.c-actions-2{width:75px}.c-actions-3{width:102px}.c-actions,.c-actions-4{width:128px}.c-actions-5{width:155px}.c-actions-6{width:180px}.c-product,.c-project{width:180px}.c-plan{width:130px}.c-datetime{width:120px}.c-stage,.c-status,.c-user{width:80px}.c-side{width:200px;border-right:10px solid #efefef}.c-assign,.c-assignedTo,.c-openedBy{width:130px}.c-progress{width:155px}.c-assign,.c-assignedTo,.c-openedBy,.c-product,.c-project,.c-status,.c-url,.c-user{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}td.c-name,td.c-title{overflow:hidden;text-align:left!important;text-overflow:ellipsis;white-space:nowrap}td.c-actions{position:relative;padding-top:0;padding-bottom:0;overflow:hidden;white-space:nowrap;vertical-align:middle}td.c-actions .btn{display:inline-block;width:26px;padding:2px;overflow:hidden;line-height:20px;color:#16a8f8;background:0 0;border-color:transparent}td.c-actions .btn .icon{font-size:18px}td.c-actions .btn:hover{color:#0c64eb;background-color:#d3e5f7}td.c-actions .btn+.btn{margin-left:-4px}td.c-actions .btn-link{color:#3c4353;background:0 0}td.c-actions .btn-link:hover{color:#0c64eb;background:#e9f2fb}td.c-actions .more{position:absolute;top:50%;right:100%;display:none;padding-right:4px;padding-left:20px;margin-top:-15px;margin-right:-6px;white-space:nowrap;background-color:#fafafa;-webkit-transition:opacity .3s,margin.3s;-o-transition:opacity .3s,margin.3s;transition:opacity .3s,margin.3s}tr:hover td.c-actions .more{display:block}td:hover+td.c-actions>.more{margin-right:-15px;pointer-events:none;opacity:.15}tr[data-url]{cursor:pointer}.table tbody>tr>td,.table thead>tr>th{vertical-align:middle}.table tbody>tr>td.has-btn,.table thead>tr>th.has-btn{padding-top:1px;padding-bottom:1px;overflow:visible}.table tbody>tr>td .progress,.table thead>tr>th .progress{height:6px}.table .em,.table em{color:#3c4353}.table .divider{border-bottom:10px solid #efefef}.table .divider-top{border-top:10px solid #efefef}.table .btn-icon-left{max-width:100%;padding-left:20px;overflow:hidden;line-height:18px;text-align:left;text-overflow:ellipsis;background:0 0;border-color:#eaf3fc}.table .btn-icon-left>.icon{width:20px;font-size:14px;background:0 0!important;opacity:0}.table .btn-icon-left.btn-sm{height:26px;font-size:13px}.table .btn-icon-left:active,.table .btn-icon-left:focus,.table .btn-icon-left:hover{border-color:rgba(0,0,0,.2)}.table .btn-icon-left:active>.icon,.table .btn-icon-left:focus>.icon,.table .btn-icon-left:hover>.icon{opacity:1}.table .btn-icon-left>.text{padding-left:25px}.table thead>tr>th.c-assign,.table thead>tr>th.c-assignedTo{padding-left:29px}.table a{vertical-align:middle}.table tbody>tr:last-child{border-bottom:none}.table caption{margin-bottom:5px;background:#f1f1f1;border:none}.is-firefox .table .btn-icon-left>.icon{line-height:22px}.main-table{border-radius:4px}.main-table>.table,.main-table>.table-footer,.main-table>.table-header,.main-table>.table-responsive{-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045);box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045)}.main-table .table{font-size:13px;table-layout:fixed;background-color:#fff;border-radius:4px 4px 0 0}.main-table .table.table-lg{font-size:14px}.main-table .table .btn-icon-left{border-color:transparent}.main-table .table .btn-icon-left>.icon{background:0 0;border-radius:4px}.main-table .table .btn-icon-left.btn-sm{height:26px}.main-table .table .btn-icon-left:hover{border-color:rgba(0,0,0,.2)}.main-table .table .btn-icon-left:hover>.icon{background:#e9f2fb;border-radius:4px 0 0 4px}.main-table tbody>tr>td,.main-table thead>tr>th{min-height:36px;padding:2px 8px;line-height:30px}.main-table tbody>tr>td:first-child,.main-table thead>tr>th:first-child{padding-left:15px}.main-table thead>tr>th{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-bottom:1px solid #ddd}.main-table tbody>tr:nth-child(odd){background-color:#f5f5f5}.main-table tbody>tr:last-child>td{border-bottom:1px solid #ddd}.main-table tbody>tr>td{position:relative;border-bottom:none;border-bottom:1px solid #eee}.main-table tbody>tr>td .label{max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.main-table tbody>tr>td>a{line-height:28px;color:#0c60e1}.main-table tbody>tr>td>a:not(.btn):visited{color:#082999;opacity:.9}.main-table tbody>tr>td>a:hover,.main-table tbody>tr>td>a:visited:hover{color:#0c64eb}.main-table tbody>tr>td.c-actions{padding-right:10px}.main-table tbody>tr>td.c-side+td:before,.main-table tbody>tr>td:first-child:before{position:absolute;top:0;bottom:0;left:0;display:block;width:0;content:'';background:#0c64eb;opacity:0;-webkit-transition:.2s linear;-o-transition:.2s linear;transition:.2s linear;-webkit-transition-property:width,opacity,border-radius;-o-transition-property:width,opacity,border-radius;transition-property:width,opacity,border-radius}@-moz-document url-prefix(){.main-table tbody>tr>td.c-side+td:before,.main-table tbody>tr>td:first-child:before{bottom:-1px}}.main-table tbody>tr>td.c-side:before{display:none}.main-table tbody>tr{-webkit-transition:.2s cubic-bezier(.175,.885,.32,1);-o-transition:.2s cubic-bezier(.175,.885,.32,1);transition:.2s cubic-bezier(.175,.885,.32,1);-webkit-transition-property:background-color,-webkit-box-shadow;-o-transition-property:box-shadow,background-color;transition-property:background-color,-webkit-box-shadow;transition-property:box-shadow,background-color;transition-property:box-shadow,background-color,-webkit-box-shadow}.main-table tbody>tr:hover{background:#e9f2fb}.main-table .table-grouped tbody>tr:hover{background:#f2f7fd;-webkit-box-shadow:none;box-shadow:none}.main-table .table-grouped tbody>tr:hover td.c-actions .more{background:#f2f7fd}.main-table tbody>tr.checked{background:#fff3e0}.main-table tbody>tr.checked:hover{background:#ffebbc}.main-table tbody>tr.checked>td.c-side+td:before,.main-table tbody>tr.checked>td:first-child:before{width:4px;opacity:1}.main-table tbody>tr.checked.row-check-begin{border-top-left-radius:4px;border-top-right-radius:2px}.main-table tbody>tr.checked.row-check-begin>td:first-child:before{border-top-left-radius:4px}.main-table tbody>tr.checked.row-check-end{border-bottom-right-radius:2px;border-bottom-left-radius:4px}.main-table tbody>tr.checked.row-check-end>td:first-child:before{border-bottom-left-radius:4px}.main-table .checkbox-primary{display:inline-block;line-height:20px}.main-table .checkbox-primary label{margin:0}.main-table .table{margin:0}.table-header{padding:4px 0 12px}.table-header .table-statistic{color:#838a9d}.table-header .table-statistic strong{font-size:15px;color:#3c4353}.table-header .btn-toolbar{margin-top:-28px}.table-header.fixed-right{position:relative;z-index:5;padding:0}.table-header.fixed-right>.btn-toolbar{position:absolute;top:0;right:0;z-index:1;padding:1px;margin:0;background:#fff;border-radius:4px}.table-header.fixed-right>.btn-toolbar .btn{opacity:.65}.table-header.fixed-right>.btn-toolbar .btn:hover{opacity:1}.table-footer{position:relative;min-height:40px;padding:6px 15px;background:#fff;border-radius:0 0 4px 4px}.body-modal .table-footer{margin-bottom:20px}.talbe-lg+.table-footer{padding:11px 15px}.table-footer .btn-toolbar,.table-footer .checkbox-primary{float:left}.table-footer .btn-toolbar+.btn-toolbar{margin-left:8px}.table-footer .checkbox-primary{margin:5px 20px 0 0}.table-footer .checkbox-primary.checked label:after{border-color:#00da88!important}.table-footer .btn{padding:3px 10px;line-height:20px}.table-footer .pager{position:absolute;top:0;right:0;z-index:4;height:40px;padding:6px 5px 6px 10px;margin:0;background:#fff;opacity:1;-webkit-transition:opacity .4s;-o-transition:opacity .4s;transition:opacity .4s}.table-footer .pager:before{position:absolute;top:0;bottom:0;left:-50px;display:block;width:50px;content:' ';background:-webkit-gradient(linear,left top,right top,from(rgba(255,255,255,0)),to(#fff));background:-webkit-linear-gradient(left,rgba(255,255,255,0) 0,#fff 100%);background:-o-linear-gradient(left,rgba(255,255,255,0) 0,#fff 100%);background:linear-gradient(to right,rgba(255,255,255,0) 0,#fff 100%)}.table-footer .pager .btn,.table-footer .pager>li>.pager-item,.table-footer .pager>li>.pager-label{color:#838a9d;background:0 0;border-color:transparent}.table-footer .pager .btn,.table-footer .pager>li>a{border-radius:3px}.table-footer .pager .btn:hover,.table-footer .pager>li>a:hover{background:rgba(0,0,0,.1)}.table-footer .pager>li.disabled>a.pager-item{opacity:1}.table-footer .form-control{height:28px;padding:3px 8px}.table-footer .table-statistic{position:relative;z-index:2;float:left;padding-right:30px;line-height:28px;color:#838a9d;background:#fff}.table-footer .table-statistic:hover{z-index:4}.table-footer .table-statistic:hover+.pager{z-index:2;opacity:.3}.table-footer .btn-toolbar+.table-statistic{margin-left:10px}.table-footer .text{line-height:28px}.table-footer.fixed-footer{position:fixed;z-index:10;margin:0;background:rgba(75,75,75,.85);border-top-color:transparent}.table-footer.fixed-footer .checkbox-primary label{color:#fff}.table-footer.fixed-footer .checkbox-primary label:after{border-color:rgba(255,255,255,.8)}.table-footer.fixed-footer .table-statistic{color:#fff;background:#666}.table-footer.fixed-footer .pager{background:#666}.table-footer.fixed-footer .pager:before{background:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,0)),to(#666));background:-webkit-linear-gradient(left,rgba(0,0,0,0) 0,#666 100%);background:-o-linear-gradient(left,rgba(0,0,0,0) 0,#666 100%);background:linear-gradient(to right,rgba(0,0,0,0) 0,#666 100%)}.table-footer.fixed-footer .pager .btn,.table-footer.fixed-footer .pager>li>.pager-item,.table-footer.fixed-footer .pager>li>.pager-label{color:#fff}.table-footer.fixed-footer .pager .btn:hover,.table-footer.fixed-footer .pager>li>a:hover{background:rgba(255,255,255,.3)}.table-footer.fixed-footer .pager>li.disabled>a.pager-item{opacity:.5}.table-actions{width:0;height:28px;visibility:hidden;opacity:0;-webkit-transition:opacity cubic-bezier(.175,.885,.32,1) .8s;-o-transition:opacity cubic-bezier(.175,.885,.32,1) .8s;transition:opacity cubic-bezier(.175,.885,.32,1) .8s}.table-actions.show-always{width:auto;pointer-events:none;cursor:not-allowed;visibility:visible;opacity:.75}.has-row-checked .table-actions{width:auto;pointer-events:auto!important;cursor:default;visibility:visible;opacity:1}.table-lg tbody>tr>td{padding:9px 10px}.table-lg tbody>tr>td .btn+.btn{margin-left:5px}.table.has-sort-head thead>tr>th{padding-right:0}.table.has-sort-head thead>tr>th>a{position:relative;display:inline-block;padding-right:16px;color:#3c4353}.table.has-sort-head thead>tr>th>a:after,.table.has-sort-head thead>tr>th>a:before{position:absolute;top:0;right:0;font-family:ZentaoIcon;font-size:18px;font-size:14px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;line-height:30px;color:#3c4353;text-transform:none;content:"\f0de";opacity:.5;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.table.has-sort-head thead>tr>th>a:after{content:"\f0dd"}.table.has-sort-head thead>tr>th>a.sort-down,.table.has-sort-head thead>tr>th>a.sort-up{color:#000;text-decoration:none}.table.has-sort-head thead>tr>th>a:hover,.table.has-sort-head thead>tr>th>a:hover:after,.table.has-sort-head thead>tr>th>a:hover:before{color:#0c64eb;opacity:1}.table.has-sort-head thead>tr>th>a.sort-down:after,.table.has-sort-head thead>tr>th>a.sort-up:before{color:#000;opacity:1}.head-fixed .datatable-head-span .table,.table.fixed-header-copy{z-index:10;color:#fff;background:rgba(75,75,75,.85)}.head-fixed .datatable-head-span .table thead>tr>th,.table.fixed-header-copy thead>tr>th{color:#eee}.head-fixed .datatable-head-span .table thead>tr>th>a,.table.fixed-header-copy thead>tr>th>a{color:#eee}.head-fixed .datatable-head-span .table thead>tr>th>a:hover,.table.fixed-header-copy thead>tr>th>a:hover{color:#fff}.head-fixed .datatable-head-span .table thead>tr>th>a:after,.head-fixed .datatable-head-span .table thead>tr>th>a:before,.table.fixed-header-copy thead>tr>th>a:after,.table.fixed-header-copy thead>tr>th>a:before{color:#eee}.head-fixed .datatable-head-span .table thead>tr>th>a.sort-down,.head-fixed .datatable-head-span .table thead>tr>th>a.sort-down:after,.head-fixed .datatable-head-span .table thead>tr>th>a.sort-up,.head-fixed .datatable-head-span .table thead>tr>th>a.sort-up:before,.head-fixed .datatable-head-span .table thead>tr>th>a:hover,.head-fixed .datatable-head-span .table thead>tr>th>a:hover:after,.head-fixed .datatable-head-span .table thead>tr>th>a:hover:before,.table.fixed-header-copy thead>tr>th>a.sort-down,.table.fixed-header-copy thead>tr>th>a.sort-down:after,.table.fixed-header-copy thead>tr>th>a.sort-up,.table.fixed-header-copy thead>tr>th>a.sort-up:before,.table.fixed-header-copy thead>tr>th>a:hover,.table.fixed-header-copy thead>tr>th>a:hover:after,.table.fixed-header-copy thead>tr>th>a:hover:before{color:#fff}.head-fixed .datatable-head-span .table .checkbox-primary,.table.fixed-header-copy .checkbox-primary{z-index:1}.head-fixed .datatable-head-span .table .checkbox-primary label,.table.fixed-header-copy .checkbox-primary label{color:#fff}.head-fixed .datatable-head-span .table .checkbox-primary label:after,.table.fixed-header-copy .checkbox-primary label:after{border-color:rgba(255,255,255,.8)}.head-fixed .datatable-head-span .table .checkbox-primary.checked label:after,.table.fixed-header-copy .checkbox-primary.checked label:after{border-color:#00da88!important}.table-data{margin:0;table-layout:fixed}.table-data tbody>tr>td,.table-data tbody>tr>th{padding:6px 8px;word-break:break-all;border:none}.table-data tbody>tr>th{width:70px;padding-left:0;font-weight:400;color:#838a9d;text-align:right;vertical-align:middle}.table-data tbody>tr>td{padding-right:0}.table-data tbody>tr>td>a{color:#0c60e1}.table-data tbody>tr>td>a:not(.btn):visited{color:#082999}.table-data tbody>tr>td>a:hover,.table-data tbody>tr>td>a:visited:hover{color:#0c64eb}.table-data ol,.table-data ul{margin:0}.fixed-head-table{background:rgba(0,0,0,.7);border-bottom:1px solid #ddd}.fixed-head-table thead>tr>th{color:#fff}.table-empty-tip{padding:80px 10px;text-align:center;background:#fff}.not-firefox .table-grouped>tbody>tr>td.c-side{background:#fff!important}.table-grouped .group-toggle{cursor:pointer}.table-grouped .group-toggle.group-summary{border-top:10px solid #efefef}.table-grouped tbody>tr>td:first-child,.table-grouped thead>tr>th:first-child{padding-left:8px}.group-expand-all,.table-group-collapsed .group-collapse-all{display:none}.table-group-collapsed .group-expand-all{display:inline-block}.table-auto{table-layout:auto}.datatable .table>tbody>tr.checked.hover>td,.datatable .table>tbody>tr.checked>td.col-hover{background:#ffebbc}body.has-fixed-footer{padding-bottom:60px}.table.with-footer-fixed{margin-bottom:20px}.article-content{overflow:auto}.article-content img{margin-top:0}.article-content table{margin:10px 0}.article-content table td,.article-content table th{border:1px solid #cbd0db}.article-content table th{background:#eee}.article-content,.article>.content{word-wrap:break-word}.detail{padding:10px 0;margin:0 10px}.detail+.detail{padding-top:25px;border-top:1px solid #eee}.detail-title{font-size:14px;font-weight:700;line-height:20px}.detail-title>.pull-right{position:relative;top:-8px}h2.detail-title{margin:0;font-size:15px;font-weight:700}h2.detail-title .label,h2.detail-title .label-id{position:relative;top:-1px}.detail-content{padding:0;margin-top:10px}.detail-content em{font-style:normal;color:#3c4353}.detail-content .list-unstyled>li+li{margin-top:5px}.side-col .detail-content{padding-left:0}details.detail{padding:10px 0}details.detail summary{position:relative;cursor:pointer;outline:0}details.detail summary::-webkit-details-marker{display:none}details.detail summary:after{position:absolute;top:0;right:0;font-family:ZentaoIcon;font-size:18px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;text-transform:none;content:"\e316";opacity:.4;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}details.detail[open] summary:after{content:"\e313"}.files-list{padding-left:0;list-style:none}.files-list>li>a{display:block;line-height:24px}.files-list>li>a>.icon{display:inline-block;margin-right:5px;opacity:.7}.files-list>li>a:hover{color:#0c64eb}.files-list>li>.right-icon{opacity:0;-webkit-transition:opacity .2s;-o-transition:opacity .2s;transition:opacity .2s}.files-list>li:hover>.right-icon{opacity:1}.histories-list{padding-left:15px;margin-bottom:0}.histories-list .btn-mini{position:relative;top:1px}.histories-list>li{position:relative}.histories-list>li+li{margin-top:5px}.histories-list>li strong{color:#3c4353}.histories-list .comment,.histories-list .show-form .comment-edit-form{padding:5px 5px 5px 10px;margin:5px 0 0;background-color:rgba(0,0,0,.025);border:1px solid #eee}.histories-list .btn-edit-comment{position:absolute;top:28px;right:2px}.histories-list .comment-edit-form,.histories-list .show-form .btn-edit-comment,.histories-list .show-form .comment{display:none}.histories-list .show-form .comment-edit-form{display:block;padding:10px;border:1px solid #eee}.histories .btn-mini{width:16px;min-width:16px;height:16px;overflow:hidden;line-height:16px;color:#cbd0db;vertical-align:-8%;border-radius:1px}.histories .btn-mini>.icon{position:relative;top:-2px;left:-2px}.histories .btn-mini:focus,.histories .btn-mini:hover{color:#0c64eb;border-color:#0c64eb}.histories .show-changes .btn-expand>.icon:before{content:"\e926"}.histories .btn-strip{display:none}.histories .show-changes .btn-strip{display:inline-block}.history-changes{display:none;padding:5px;margin-bottom:-5px;margin-left:5px;font-size:12px;line-height:20px}.history-changes blockquote{padding:5px 5px 5px 10px;margin:5px 0 0;font-size:12px;background-color:rgba(0,0,0,.05);border-left:3px solid #eee}.history-changes blockquote.original{display:none}.show-changes .history-changes,.show-original .history-changes blockquote.original{display:block}.show-original .history-changes blockquote.textdiff{display:none}.syntaxhighlighter{overflow:auto}.search-list{min-width:200px;max-width:300px;padding:0}.search-list .search-box{float:none;width:auto;margin:10px}.search-list .search-box .icon-search{opacity:.5}.search-list .list-group{max-height:248px;padding:5px 10px;margin:5px 0}.dropup .search-list .search-box+.list-group{height:171px;padding-top:0}.search-list .search-input{height:30px}.search-list .input-control-icon-right{height:28px;line-height:28px}.list-group{overflow-y:auto}.list-group>a{display:block;padding:2px 10px 2px 5px;overflow:hidden;line-height:20px;text-overflow:ellipsis;white-space:nowrap;border-radius:4px}.list-group>a+a{margin-top:5px}.list-group>a>.icon{display:inline-block;margin-right:3px;opacity:.5}.list-group>a.selected{color:#e9f2fb;background-color:#0c64eb}.list-group>a.active{color:#0c64eb;background-color:#e9f2fb}.list-group>a.active:hover,.list-group>a:hover{color:#fff;background-color:#0c64eb}.list-group>.heading{padding:2px 5px;line-height:20px;color:#838a9d}.list-group>a+.heading{margin-top:4px}.dropup .search-box-sink{padding-top:5px;padding-bottom:45px}.dropup .search-box-sink .search-box{position:absolute;right:10px;bottom:10px;left:10px;margin:0}.dropup .search-box-sink .search-box+.list-group{height:auto;max-height:171px}#dropMenu>.search-box{max-width:188px}#dropMenu .input-control-icon-left{top:0}#dropMenu .list-group{width:199px;max-width:199px;max-height:300px;padding-top:0}#dropMenu .table-row .list-group{margin:0 -10px}#dropMenu .col-right{display:none}#dropMenu .col-left{width:100%}#dropMenu .col-left .list-group{max-height:250px;margin-bottom:35px}#dropMenu .col-footer{position:absolute;bottom:10px;left:10px;width:180px;padding-top:10px;padding-left:5px;margin-top:5px;border-top:1px solid #eee}#dropMenu .col-footer>a{opacity:.8}#dropMenu .col-footer>a:hover{opacity:1}#dropMenu.show-right-col{width:402px;max-width:402px}#dropMenu.show-right-col>.list-group{width:400px;max-width:400px}#dropMenu.show-right-col .col-left,#dropMenu.show-right-col .col-right{display:table-cell;width:50%}#dropMenu.show-right-col .col-left>.list-group{width:200px;max-width:200px;margin-right:0}#dropMenu.show-right-col .col-right{border-left:1px solid #eee}#dropMenu.show-right-col .col-right>.list-group{width:199px;max-height:285px;margin:0}#dropMenu.show-right-col .col-right>.list-group>a{opacity:.7}#dropMenu.show-right-col .col-right>.list-group>a:hover{opacity:1}#dropMenu.show-right-col .toggle-right-col>.icon-angle-right:before{content:"\e314"}.release-path{overflow:hidden}.release-line{display:table;width:100%;padding:0;table-layout:fixed}.release-line>li{display:table-cell;list-style:none}.release-line>li>a{position:relative;display:block}.release-line>li>a:before{position:absolute;left:0;display:block;width:13px;height:13px;content:' ';background:#fff;border:2px solid #838a9d;border-radius:50%}.release-line>li>a:after{position:absolute;left:5px;display:block;width:2px;height:30px;content:' ';background:#cbe0f6}.release-line>li>a>.icon{position:absolute;left:4px;font-size:24px}.release-line>li>a .title{display:block;font-size:14px;white-space:nowrap}.release-line>li>a .date,.release-line>li>a .info{display:block;max-height:18px;overflow:hidden;font-size:12px;color:#838a9d;text-overflow:ellipsis;white-space:nowrap}.release-line>li>a:hover:before{background-color:#e9f2fb}.release-line>li>a:hover:after{background-color:#838a9d}.release-line>li>a:hover .title{color:#0c64eb}.release-line>li>a:hover .date,.release-line>li>a:hover .info{color:#838a9d}.release-line>li:nth-child(odd){padding-top:80px;vertical-align:top}.release-line>li:nth-child(odd)>a{height:85px;padding-top:36px;border-top:5px solid #cbe0f6}.release-line>li:nth-child(odd)>a:before{top:-9px}.release-line>li:nth-child(odd)>a:after{top:6px}.release-line>li:nth-child(odd)>a>.icon{top:-26px}.release-line>li:nth-child(even){padding-bottom:80px;vertical-align:bottom}.release-line>li:nth-child(even)>a{height:85px;padding-bottom:36px;border-bottom:5px solid #cbe0f6}.release-line>li:nth-child(even)>a:before{bottom:-9px}.release-line>li:nth-child(even)>a:after{bottom:6px}.release-line>li:nth-child(even)>a>.icon{bottom:-2px}.release-line>li:last-child>a{border-color:transparent}.release-line>li.active>a:before{border-color:#0c64eb}.release-line>li+li>a>.date,.release-line>li+li>a>.info,.release-line>li+li>a>.title{position:relative;left:-36%}#footer{position:fixed;right:0;bottom:0;left:0;z-index:1010;height:40px;background:#fff;border-top:1px solid #eff1f7}#footer .breadcrumb{padding:10px 0;margin:0}#footer .breadcrumb>li{max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#footer .breadcrumb>.active,#footer .breadcrumb>li>a{color:#838a9e}#footer .breadcrumb>.active:hover,#footer .breadcrumb>li>a:hover{color:#16a8f8}#footer .breadcrumb>li+li:before{content:'>'}#footer>.container{padding:0 20px}@media (min-width:1400px){#footer>.container{padding:0 40px}}#poweredBy{position:absolute;top:4px;right:0;padding:5px 10px}#poweredBy .icon-zentao{color:#0097fd}#poweredBy a{color:#3c4353}#poweredBy a:hover{color:#0c64eb}#poweredBy a:hover .icon-zentao{color:#0c64eb}#poweredBy a.text-important{color:#bd7b46}#poweredBy a.text-important:hover{color:#ff5d5d}#poweredBy a.text-primary{color:#0c64eb}#poweredBy a.text-primary:hover{color:#16a8f8}#poweredBy #aiux{color:#cbd0dc}#noticeBox .alert{-webkit-box-shadow:rgba(0,0,0,.15) 0 3px 10px,rgba(0,0,0,.25) 0 3px 10px;box-shadow:rgba(0,0,0,.15) 0 3px 10px,rgba(0,0,0,.25) 0 3px 10px} \ No newline at end of file +*/.chosen-container{position:relative;display:inline-block;font-size:13px;vertical-align:middle;zoom:1;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;*display:inline}.chosen-container .chosen-drop{position:absolute;top:100%;z-index:1010;display:none;width:100%;background:#fff;border:1px solid #b6bdcc;border:1px solid rgba(0,0,0,.15);border-top:0;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.chosen-container .chosen-drop.chosen-drop-size-limited{border-top:1px solid rgba(0,0,0,.15)}.chosen-container.chosen-with-drop .chosen-drop{display:block}.chosen-container a{cursor:pointer}.chosen-container.chosen-up .chosen-drop{top:inherit;bottom:100%;margin-top:auto;margin-bottom:-1px;border-radius:2px 2px 0 0;-webkit-box-shadow:0 -3px 5px rgba(0,0,0,.175);box-shadow:0 -3px 5px rgba(0,0,0,.175)}.chosen-container-single .chosen-single{display:block;width:100%;height:32px;padding:5px 8px;overflow:hidden;line-height:1.42857143;color:#222;text-decoration:none;white-space:nowrap;vertical-align:middle;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #dcdcdc;border-radius:2px;-webkit-box-shadow:none;box-shadow:none;-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s,-webkit-box-shadow ease-in-out .15s}.chosen-container-single .chosen-default{color:#838a9d}.chosen-container-single .chosen-single>span{display:block;margin-right:26px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.chosen-container-single .chosen-single-with-deselect span{margin-right:38px}.chosen-container-single .chosen-single abbr{position:absolute;top:7px;right:24px;display:block;width:20px;height:20px;font-size:19.5px;font-weight:700;line-height:14px;color:#000;text-align:center;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.chosen-container-single .chosen-single abbr:before{content:'×'}.chosen-container-single .chosen-single abbr:focus,.chosen-container-single .chosen-single abbr:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}.chosen-container-single .chosen-single div{position:absolute;top:0;right:0;display:block;height:100%;padding:5px 8px}.chosen-container-single .chosen-single div b{display:inline-block;width:0;height:0;margin-bottom:2px;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.chosen-container-single .chosen-search{position:relative;z-index:1010;padding:3px 4px;margin:0;white-space:nowrap}.chosen-container-single .chosen-search input[type=text]{width:100%;height:27px;padding:2px 26px 2px 8px;margin:1px 0;font-size:12px;line-height:1.5;background-color:#fff;border:1px solid #dcdcdc;border-radius:2px;outline:0}.chosen-container-single .chosen-search input[type=text]:focus{border-color:#0c64eb}.chosen-container-single .chosen-search:before{position:absolute;top:10px;right:10px;display:block;font-family:ZentaoIcon;font-size:18px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;color:#838a9d;text-transform:none;content:"\e928";speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.chosen-container-single .chosen-drop{margin-top:-1px;-webkit-background-clip:padding-box;background-clip:padding-box;border-radius:0 0 4px 4px}.chosen-container-single.chosen-container-single-nosearch .chosen-search{position:absolute;left:-9999px}.chosen-container .chosen-results{position:relative;max-height:240px;padding:0;margin:0;overflow-x:hidden;overflow-y:auto;-webkit-overflow-scrolling:touch}.chosen-container .chosen-results li{display:none;padding:5px 10px;margin:0;line-height:15px;list-style:none;-webkit-transition:background-color .2s cubic-bezier(.175,.885,.32,1);-o-transition:background-color .2s cubic-bezier(.175,.885,.32,1);transition:background-color .2s cubic-bezier(.175,.885,.32,1);-webkit-touch-callout:none}.chosen-container .chosen-results li.active-result{display:list-item;cursor:pointer}.chosen-container .chosen-results li.disabled-result{display:list-item;color:#ccc;cursor:default}.chosen-container .chosen-results li.highlighted{color:#fff;background-color:#0c64eb}.chosen-container .chosen-results li.no-results{display:list-item;background:#f4f4f4}.chosen-container .chosen-results li.group-result{display:list-item;font-weight:700;cursor:default}.chosen-container .chosen-results li.group-option{padding-left:15px}.chosen-container .chosen-results li em{font-style:normal;text-decoration:underline}.chosen-container-multi .chosen-choices{position:relative;width:100%;min-height:32px;min-height:30px\9;padding:0;margin:0;overflow:hidden;cursor:text;background-color:#fff;border:1px solid #dcdcdc;border-radius:2px;-webkit-box-shadow:none;box-shadow:none;-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s,-webkit-box-shadow ease-in-out .15s}.chosen-container-multi .chosen-choices:after,.chosen-container-multi .chosen-choices:before{display:table;content:" "}.chosen-container-multi .chosen-choices:after{clear:both}.chosen-container-multi .chosen-choices li{display:block;float:left;padding:0 6px;margin:5px 0 0 6px;list-style:none}.chosen-container-multi .chosen-choices li.search-field{padding:0;margin-bottom:4px;white-space:nowrap}.chosen-container-multi .chosen-choices li.search-field input[type=text]{height:20px;font-size:100%;color:#838a9d;background:0 0!important;border:0!important;border-radius:0;outline:0;-webkit-box-shadow:none;box-shadow:none}.chosen-container-multi .chosen-choices li.search-field .default{color:#999}.chosen-container-multi .chosen-choices li.search-field:before{position:absolute;right:8px;bottom:8px;display:block;font-family:ZentaoIcon;font-size:18px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;color:#838a9d;text-transform:none;content:"\e928";opacity:0;-webkit-transition:opacity .2s cubic-bezier(.175,.885,.32,1);-o-transition:opacity .2s cubic-bezier(.175,.885,.32,1);transition:opacity .2s cubic-bezier(.175,.885,.32,1);speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.chosen-container-multi .chosen-choices li.search-choice{position:relative;padding:3px 20px 3px 5px;line-height:12px;cursor:default;background-color:#f1f1f1;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #cbd0db;border-radius:3px;-webkit-box-shadow:0 0 2px #fff inset,0 1px 0 rgba(0,0,0,.05);box-shadow:0 0 2px #fff inset,0 1px 0 rgba(0,0,0,.05);-webkit-transition:all .4s cubic-bezier(.175,.885,.32,1);-o-transition:all .4s cubic-bezier(.175,.885,.32,1);transition:all .4s cubic-bezier(.175,.885,.32,1)}.chosen-container-multi .chosen-choices li.search-choice:hover{background-color:#fff;border-color:#adb5c6;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 0 rgba(0,0,0,.1)}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close{position:absolute;top:0;right:0;display:block;width:20px;height:20px;font-size:15.6px;font-weight:700;line-height:14px;color:#000;text-align:center;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:before{content:'×'}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:focus,.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}.chosen-container-multi .chosen-choices li.search-choice-disabled{padding-right:5px;color:#666;background-color:#e4e4e4;border:1px solid #ccc}.chosen-container-multi .chosen-choices li.search-choice-focus{background:#d4d4d4}.chosen-container-multi .chosen-choices li.search-choice-focus .search-choice-close{background-position:-42px -10px}.chosen-container-multi .chosen-results{padding:5px 0;margin:0}.chosen-container-multi .chosen-drop .result-selected{display:list-item;color:#ccc;cursor:default}.chosen-container-active .chosen-single{border-color:#0c64eb;-webkit-box-shadow:none,0 0 8px rgba(12,100,235,.6);box-shadow:none,0 0 8px rgba(12,100,235,.6)}.chosen-container-active.chosen-with-drop .chosen-single{border:1px solid #b6bdcc;border:1px solid rgba(0,0,0,.15);border-bottom-right-radius:0;border-bottom-left-radius:0;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.chosen-container-active.chosen-with-drop .chosen-single div{background:0 0;border-left:none}.chosen-container-active.chosen-with-drop .chosen-single div b{content:"";border-top:0 dotted;border-bottom:4px solid}.chosen-container-active.chosen-with-drop.chosen-up .chosen-single{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:2px;border-bottom-left-radius:2px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.chosen-container-active .chosen-choices{border-color:#0c64eb;-webkit-box-shadow:none,0 0 8px rgba(12,100,235,.6);box-shadow:none,0 0 8px rgba(12,100,235,.6)}.chosen-container-active .chosen-choices li.search-field input[type=text]{color:#111!important}.chosen-container-active .chosen-choices li.search-field:before{opacity:1}.chosen-disabled{cursor:default;opacity:.5!important}.chosen-disabled .chosen-single{cursor:default}.chosen-disabled .chosen-choices .search-choice .search-choice-close{cursor:default}.chosen-container-single .chosen-single>.chosen-search{left:0;display:none;padding:3px 4px;opacity:0}.chosen-container-single .chosen-single>.chosen-search>input{height:25px;padding:2px 26px 2px 4px;font-size:inherit}.chosen-container-single .chosen-single>.chosen-search:before{top:9px}.chosen-with-search.chosen-with-drop .chosen-single>.chosen-search{display:block;opacity:1}.container,.container-fixed,.container-fluid{position:relative}.container{max-width:1800px!important}body{padding-bottom:40px;background-color:#efefef}body.article-content,body.body-modal{background:0 0}body.body-modal{padding:0}a:active,a:focus,button:active,button:focus{outline:0!important}em{font-style:normal}.strong{font-weight:700}.font-normal{font-weight:400!important}.text-middle{vertical-align:middle!important}.text-bottom{vertical-align:bottom!important}.text-top{vertical-align:top!important}.inline-block{display:inline-block!important}.layer{border-radius:4px;-webkit-box-shadow:0 0 20px 0 #bdc9d8;box-shadow:0 0 20px 0 #bdc9d8}.space{margin-bottom:20px}.space-lg{margin-bottom:30px}.space-sm{margin-bottom:10px}.muted{opacity:.5}.text-muted em{color:#3c4353}.no-animate{-webkit-transition:none!important;-o-transition:none!important;transition:none!important}.template{display:none!important}.text-left{text-align:left!important}.text-yellow.icon-folder{color:#ffe066}.table-row{display:table;width:100%;table-layout:fixed}.table-col,.table-row>.col,.table-row>[class*=col-],.table-row>[class*="-col"]{display:table-cell;float:none;vertical-align:top}.side-col{width:200px;padding-right:20px}.side-col.col-4{width:33.3333333%}.col-lg{width:260px}.col-xl{width:320px}.col-sm{width:150px}.col-xs{width:100px}.main-col+.side-col{padding-right:0;padding-left:20px}.row-grid>[class*=col-],.row-grid>[class*="-col"]{padding-top:6px;padding-bottom:6px}hr.space{margin:10px 0;border:none}hr.space-sm{margin:5px 0;border:none}.text-secondary{color:#16a8f8}a.text-primary{color:#0c64eb}.nav-primary>li>a{min-width:100px;padding:5px 8px;color:#838a9d;border-color:#e7f1fc}.nav-primary>li.active>a{color:#0c64eb;background-color:#e7f1fc;border-color:#e7f1fc}.nav-primary>li.active>a:hover{color:#0c64eb;background-color:#c3dcf7;border-color:#c3dcf7}.end-marker{margin-bottom:20px;color:#cbd0db;text-align:center}@-webkit-keyframes highlight{0%{background:#fff;outline:1px solid transparent}100%{background:#fff0d5;outline:2px solid #ffdcbc}}@-o-keyframes highlight{0%{background:#fff;outline:1px solid transparent}100%{background:#fff0d5;outline:2px solid #ffdcbc}}@keyframes highlight{0%{background:#fff;outline:1px solid transparent}100%{background:#fff0d5;outline:2px solid #ffdcbc}}.highlight{-webkit-animation:highlight .5s linear 0s 2 alternate;-o-animation:highlight .5s linear 0s 2 alternate;animation:highlight .5s linear 0s 2 alternate}.progress.inline-block{width:100px;margin:0}.w-p5{width:5%!important}.w-p10{width:10%!important}.w-p15{width:15%!important}.w-p20{width:20%!important}.w-p25{width:25%!important}.w-p30{width:30%!important}.w-p35{width:35%!important}.w-p40{width:40%!important}.w-p45{width:45%!important}.w-p50{width:50%!important}.w-p55{width:55%!important}.w-p60{width:60%!important}.w-p65{width:65%!important}.w-p70{width:70%!important}.w-p75{width:75%!important}.w-p80{width:80%!important}.w-p85{width:85%!important}.w-p90{width:90%!important}.w-p94{width:94%!important}.w-p95{width:95%!important}.w-p98{width:98%!important}.w-p99{width:99%!important}.w-p100{width:100%!important}.w-auto{width:auto!important}.w-10px{width:10px!important}.w-20px{width:20px!important}.w-30px{width:30px!important}.w-35px{width:35px!important}.w-40px{width:40px!important}.w-45px{width:45px!important}.w-50px{width:50px!important}.w-60px{width:60px!important}.w-70px{width:70px!important}.w-80px{width:80px!important}.w-90px{width:90px!important}.w-100px{width:100px!important}.w-110px{width:110px!important}.w-120px{width:120px!important}.w-130px{width:130px!important}.w-140px{width:140px!important}.w-150px{width:150px!important}.w-160px{width:160px!important}.w-180px{width:180px!important}.w-200px{width:200px!important}.w-230px{width:230px!important}.w-250px{width:250px!important}.w-300px{width:300px!important}.w-400px{width:400px!important}.w-500px{width:500px!important}.w-600px{width:600px!important}.w-700px{width:700px!important}.w-800px{width:800px!important}.w-900px{width:900px!important}.mw-200px{max-width:200px!important}.mw-300px{max-width:300px!important}.mw-400px{max-width:400px!important}.mw-500px{max-width:500px!important}.mw-600px{max-width:600px!important}.mw-700px{max-width:700px!important}.mw-800px{max-width:800px!important}.mw-900px{max-width:900px!important}.mw-1400px{max-width:1400px!important}.w-id{width:70px!important}.w-pri{width:40px!important}.w-severity{width:50px!important}.w-hour{width:57px!important}.w-date{width:90px!important}.w-status{width:60px!important}.w-resolution,.w-type,.w-user{width:80px!important}.w-p15-f{width:15%!important;min-width:120px!important}.w-p25-f{width:25%!important;min-width:200px!important}.w-p35-f{width:35%!important;min-width:300px!important}.w-p45-f{width:45%!important;min-width:400px!important}.h-5px{height:5px!important}.h-10px{height:10px!important}.h-20px{height:20px!important}.h-30px{height:30px!important}.h-35px{height:35px!important}.h-40px{height:40px!important}.h-45px{height:45px!important}.h-50px{height:50px!important}.h-60px{height:60px!important}.h-70px{height:70px!important}.h-80px{height:80px!important}.h-100px{height:100px!important}.h-120px{height:120px!important}.h-130px{height:130px!important}.h-140px{height:140px!important}.h-150px{height:150px!important}.h-200px{height:200px!important}.pd-0{padding:0!important}.mg-0{margin:0!important}.mgb-20{margin-bottom:20px!important}.mgb-10{margin-bottom:10px!important}.pdb-20{padding-bottom:20px!important}.pdt-20{padding-top:20px!important}.br-0{border-radius:0!important}.bd-0,.bd-none,.borderless{border:none!important}.bg-none{background:0 0!important}.red{color:#ff5d5d!important}.icon-pro-version{font-size:14px!important}.icon-pro-version:before{position:relative;top:-1px;font-size:14px;color:#ff5d5d;content:"\e92b"}.bg-primary{color:#fff;background:#1183fb -webkit-gradient(linear,right top,left top,from(#0a48d1),to(#1183fb));background:#1183fb -webkit-linear-gradient(right,#0a48d1 0,#1183fb 100%);background:#1183fb -o-linear-gradient(right,#0a48d1 0,#1183fb 100%);background:#1183fb linear-gradient(-90deg,#0a48d1 0,#1183fb 100%);background-color:#00b1fd}.bg-secondary{color:#fff;background:#16a8f8}.hl-tutorial{position:relative!important;z-index:1010!important;-webkit-box-shadow:0 0 0 0 #000!important;box-shadow:0 0 0 0 #000!important;-webkit-transition:-webkit-box-shadow 1s!important;-o-transition:box-shadow 1s!important;transition:-webkit-box-shadow 1s!important;transition:box-shadow 1s!important;transition:box-shadow 1s,-webkit-box-shadow 1s!important}.hl-tutorial.hl-in{-webkit-box-shadow:0 0 20px 0 #ffff8d,0 0 0 2px #ffd180,0 0 0 2000px rgba(0,0,0,.2)!important;box-shadow:0 0 20px 0 #ffff8d,0 0 0 2px #ffd180,0 0 0 2000px rgba(0,0,0,.2)!important}.btn.tooltip-tutorial,.hl-tutorial.hl-in:hover{-webkit-box-shadow:0 0 30px 0 #ffff8d,0 0 0 5px #ffd180,0 0 0 2000px rgba(0,0,0,.3)!important;box-shadow:0 0 30px 0 #ffff8d,0 0 0 5px #ffd180,0 0 0 2000px rgba(0,0,0,.3)!important}.tooltip-max .tooltip-inner{max-width:1000px;padding:8px 10px}.transition-all *{-webkit-transition:all .2s!important;-o-transition:all .2s!important;transition:all .2s!important}.scroll-x{overflow-x:auto!important}.scroll-y{overflow-y:auto!important}.divider+.divider{display:none}@font-face{font-family:ZentaoIcon;font-style:normal;font-weight:400;src:url(../fonts/ZentaoIcon.eot?v=1.1.0);src:url(../fonts/ZentaoIcon.eot?#iefix&v=1.1.0) format('embedded-opentype'),url(../fonts/ZentaoIcon.woff?v=1.1.0) format('woff'),url(../fonts/ZentaoIcon.ttf?v=1.1.0) format('truetype'),url(../fonts/ZentaoIcon.svg#regular?v=1.1.0) format('svg')}.icon,[class*=" icon-"],[class^=icon-]{font-family:ZentaoIcon;font-size:18px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;text-transform:none;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon:before{display:inline-block;min-width:18px;text-align:center}a .icon,a [class*=" icon-"],a [class^=icon-]{display:inline}.icon-lg:before{font-size:1.33333333em;vertical-align:-10%}.icon-2x{font-size:36px}.icon-3x{font-size:54px}.icon-4x{font-size:72px}.icon-5x{font-size:90px}.icon-spin{display:inline-block;-webkit-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;animation:spin 2s infinite linear}a .icon-spin{display:inline-block;text-decoration:none}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0);transform:rotate(0)}100%{-o-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes spin{0%{-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);-o-transform:rotate(359deg);transform:rotate(359deg)}}.icon-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.icon-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.icon-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.icon-flip-horizontal{-webkit-transform:scale(-1,1);-ms-transform:scale(-1,1);-o-transform:scale(-1,1);transform:scale(-1,1)}.icon-flip-vertical{-webkit-transform:scale(1,-1);-ms-transform:scale(1,-1);-o-transform:scale(1,-1);transform:scale(1,-1)}.icon.icon-flip-horizontal,.icon.icon-flip-vertical,.icon.icon-rotate-180,.icon.icon-rotate-270,.icon.icon-rotate-90{display:inline-block}.icon-book:before{content:"\f02d"}.icon-treemap-alt:before{content:"\e971"}.icon-collapse-alt:before{content:"\e6f2"}.icon-expand-alt:before{content:"\e6f1"}.icon-more:before{content:"\e744"}.icon-angle-double-right:before{content:"\f101"}.icon-certificate:before{content:"\f0a3"}.icon-bell:before{content:"\e7f5"}.icon-format-bold:before{content:"\e953"}.icon-format-header-pound:before{content:"\e954"}.icon-format-italic:before{content:"\e955"}.icon-format-list-bulleted:before{content:"\e956"}.icon-format-list-numbers:before{content:"\e969"}.icon-format-quote-close:before{content:"\e96a"}.icon-fullscreen:before{content:"\e96b"}.icon-fullscreen-exit:before{content:"\e972"}.icon-image:before{content:"\e96c"}.icon-table-large:before{content:"\e96d"}.icon-columns:before{content:"\f0db"}.icon-cancel:before{content:"\e951"}.icon-ban-circle:before{content:"\e951"}.icon-persons:before{content:"\e94d"}.icon-eye:before{content:"\e94e"}.icon-unlock:before{content:"\e94f"}.icon-eye-off:before{content:"\e96e"}.icon-lock:before{content:"\e950"}.icon-move:before{content:"\e94c"}.icon-help:before{content:"\e968"}.icon-folder-account:before{content:"\e942"}.icon-folder-move:before{content:"\e960"}.icon-folder-plus:before{content:"\e961"}.icon-folder-upload:before{content:"\e962"}.icon-folder-star:before{content:"\e963"}.icon-folder-edit:before{content:"\e964"}.icon-folder-download:before{content:"\e965"}.icon-folder-outline:before{content:"\e966"}.icon-restart:before{content:"\e95e"}.icon-history:before{content:"\e95f"}.icon-home:before{content:"\e958"}.icon-pencil:before{content:"\e254"}.icon-angle-down:before{content:"\e313"}.icon-angle-left:before{content:"\e314"}.icon-angle-right:before{content:"\e315"}.icon-angle-top:before{content:"\e316"}.icon-first-page:before{content:"\e5dc"}.icon-last-page:before{content:"\e5dd"}.icon-caret-down:before{content:"\f0d7"}.icon-caret-up:before{content:"\f0d8"}.icon-caret-left:before{content:"\f0d9"}.icon-caret-right:before{content:"\f0da"}.icon-sort:before{content:"\f0dc"}.icon-sort-down:before{content:"\f0dd"}.icon-sort-up:before{content:"\f0de"}.icon-zentao-alt:before{content:"\e900"}.icon-zentao:before{content:"\e901"}.icon-severity:before{content:"\e973"}.icon-severity-solid:before{content:"\e902"}.icon-bar-chart:before{content:"\e903"}.icon-import:before{content:"\e904"}.icon-export:before{content:"\e905"}.icon-printer:before{content:"\e906"}.icon-hand-right:before{content:"\e907"}.icon-hand-right-alt:before{content:"\e96f"}.icon-checked:before{content:"\e908"}.icon-off:before{content:"\e909"}.icon-start:before{content:"\e90a"}.icon-play:before{content:"\e90a"}.icon-time:before{content:"\e90b"}.icon-edit:before{content:"\e90c"}.icon-trash:before{content:"\e90d"}.icon-link:before{content:"\e90e"}.icon-unlink:before{content:"\e90f"}.icon-bullhorn:before{content:"\e910"}.icon-bug:before{content:"\e911"}.icon-list-alt:before{content:"\e912"}.icon-fork:before{content:"\e913"}.icon-change:before{content:"\e970"}.icon-glasses:before{content:"\e914"}.icon-sitemap:before{content:"\e915"}.icon-plus-sign:before{content:"\e916"}.icon-pluses:before{content:"\e917"}.icon-flag-alt:before{content:"\e918"}.icon-magic:before{content:"\e919"}.icon-treemap:before{content:"\e91a"}.icon-confirm:before{content:"\e91b"}.icon-lightbulb:before{content:"\e91c"}.icon-delay:before{content:"\e91d"}.icon-calendar:before{content:"\e91d"}.icon-pause:before{content:"\e91e"}.icon-ban:before{content:"\e91f"}.icon-plus-bold:before{content:"\e920"}.icon-copy:before{content:"\e921"}.icon-refresh:before{content:"\e922"}.icon-arrow-up:before{content:"\e923"}.icon-arrow-down:before{content:"\e924"}.icon-arrow-left:before{content:"\e952"}.icon-arrow-right:before{content:"\e93e"}.icon-plus:before{content:"\e925"}.icon-minus:before{content:"\e926"}.icon-exchange:before{content:"\e927"}.icon-search:before{content:"\e928"}.icon-envelope-o:before{content:"\e92a"}.icon-check:before{content:"\e5ca"}.icon-circle:before{content:"\e836"}.icon-up-circle:before{content:"\e92b"}.icon-right-circle:before{content:"\e92c"}.icon-down-circle:before{content:"\e92d"}.icon-left-circle:before{content:"\e92e"}.icon-check-circle:before{content:"\e92f"}.icon-exclamation-sign:before{content:"\e930"}.icon-unfold-all:before{content:"\e931"}.icon-fold-all:before{content:"\e932"}.icon-plus-sm:before{content:"\e933"}.icon-chevron-left:before{content:"\e934"}.icon-chevron-right:before{content:"\e935"}.icon-close:before{content:"\e936"}.icon-flag:before{content:"\e937"}.icon-check-sign:before{content:"\e938"}.icon-minus-sign:before{content:"\e939"}.icon-bars-sign:before{content:"\e93a"}.icon-cog:before{content:"\e93b"}.icon-color:before{content:"\e93c"}.icon-paper-clip:before{content:"\e93d"}.icon-back:before{content:"\e93f"}.icon-chat-line:before{content:"\e940"}.icon-person:before{content:"\e941"}.icon-stack:before{content:"\e943"}.icon-cube:before{content:"\e967"}.icon-folder:before{content:"\e944"}.icon-folder-o:before{content:"\e945"}.icon-folder-open-o:before{content:"\e946"}.icon-folder-open:before{content:"\e947"}.icon-bars:before{content:"\e948"}.icon-cards-view:before{content:"\e949"}.icon-star-empty:before{content:"\e94a"}.icon-star:before{content:"\e94b"}.icon-ellipsis-v:before{content:"\e5d4"}.icon-spinner-indicator:before{content:"\e982"}.icon-text:before{content:"\e929"}.icon-code:before{content:"\e957"}.icon-chevron-double-up:before{content:"\e959"}.icon-chevron-double-down:before{content:"\e95a"}.icon-chart-pie:before{content:"\e95b"}.icon-chart-line:before{content:"\e95c"}.icon-chart-bar:before{content:"\e95d"}.icon-globe:before{content:"\f0ac"}.icon-file:before{content:"\f016"}.icon-file-empty:before{content:"\f016"}.icon-file-text:before{content:"\f0f6"}.icon-file-alt:before{content:"\f15b"}.icon-file-text-alt:before{content:"\f15c"}.icon-file-pdf:before{content:"\f1c1"}.icon-file-word:before{content:"\f1c2"}.icon-file-excel:before{content:"\f1c3"}.icon-file-powerpoint:before{content:"\f1c4"}.icon-file-image:before{content:"\f1c5"}.icon-file-archive:before{content:"\f1c6"}.icon-file-audio:before{content:"\f1c7"}.icon-file-video:before{content:"\f1c8"}.icon-file-code:before{content:"\f1c9"}.icon-sm:before{font-size:14px;vertical-align:10%}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:13px;font-weight:400;line-height:18px;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;border-radius:4px;-webkit-transition:.4s cubic-bezier(.175,.885,.32,1);-o-transition:.4s cubic-bezier(.175,.885,.32,1);transition:.4s cubic-bezier(.175,.885,.32,1);-webkit-transition-property:background,border,outline,opacity,-webkit-box-shadow;-o-transition-property:background,border,box-shadow,outline,opacity;transition-property:background,border,outline,opacity,-webkit-box-shadow;transition-property:background,border,box-shadow,outline,opacity;transition-property:background,border,box-shadow,outline,opacity,-webkit-box-shadow}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:focus,.btn:hover{color:#3c4353;text-decoration:none}.btn:active{text-decoration:none;background-image:none;outline:0;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.1)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;filter:grayscale(1);-webkit-box-shadow:none;box-shadow:none;opacity:.5;-webkit-filter:grayscale(1)}.btn{color:#3c4353;background-color:#fff;border-color:#d6dae3}.btn.active,.btn.hover,.btn:active,.btn:focus,.btn:hover,.open .dropdown-toggle.btn{color:#3c4353;background-color:rgba(255,255,255,.8);border-color:#b8bfce}.btn.active,.btn:active,.open .dropdown-toggle.btn{background-color:#f2f2f2;background-image:none;border-color:#b8bfce}.btn.disabled,.btn.disabled.active,.btn.disabled:active,.btn.disabled:focus,.btn.disabled:hover,.btn[disabled],.btn[disabled].active,.btn[disabled]:active,.btn[disabled]:focus,.btn[disabled]:hover,fieldset[disabled] .btn,fieldset[disabled] .btn.active,fieldset[disabled] .btn:active,fieldset[disabled] .btn:focus,fieldset[disabled] .btn:hover{color:rgba(60,67,83,.3);background-color:#fff;border-color:#d6dae3}.btn-gray{color:#82899f;background-color:#f1f1f1;border-color:#f1f1f1}.btn-gray.active,.btn-gray.hover,.btn-gray:active,.btn-gray:focus,.btn-gray:hover,.open .dropdown-toggle.btn-gray{color:#82899f;background-color:rgba(241,241,241,.8);border-color:#d8d8d8}.btn-gray.active,.btn-gray:active,.open .dropdown-toggle.btn-gray{background-color:#e4e4e4;background-image:none;border-color:#d8d8d8}.btn-gray.disabled,.btn-gray.disabled.active,.btn-gray.disabled:active,.btn-gray.disabled:focus,.btn-gray.disabled:hover,.btn-gray[disabled],.btn-gray[disabled].active,.btn-gray[disabled]:active,.btn-gray[disabled]:focus,.btn-gray[disabled]:hover,fieldset[disabled] .btn-gray,fieldset[disabled] .btn-gray.active,fieldset[disabled] .btn-gray:active,fieldset[disabled] .btn-gray:focus,fieldset[disabled] .btn-gray:hover{color:rgba(130,137,159,.3);background-color:#f1f1f1;border-color:#f1f1f1}.btn-primary{color:#fff;background-color:#0c64eb;border-color:transparent}.btn-primary.active,.btn-primary.hover,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.open .dropdown-toggle.btn-primary{color:#fff;background-color:rgba(12,100,235,.8);border-color:rgba(0,0,0,0)}.btn-primary.active,.btn-primary:active,.open .dropdown-toggle.btn-primary{background-color:#0b5ad3;background-image:none;border-color:rgba(0,0,0,0)}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{color:rgba(255,255,255,.3);background-color:#0c64eb;border-color:transparent}.btn-secondary{color:#fff;background-color:#16a8f8;border-color:transparent}.btn-secondary.active,.btn-secondary.hover,.btn-secondary:active,.btn-secondary:focus,.btn-secondary:hover,.open .dropdown-toggle.btn-secondary{color:#fff;background-color:rgba(22,168,248,.8);border-color:rgba(0,0,0,0)}.btn-secondary.active,.btn-secondary:active,.open .dropdown-toggle.btn-secondary{background-color:#079ced;background-image:none;border-color:rgba(0,0,0,0)}.btn-secondary.disabled,.btn-secondary.disabled.active,.btn-secondary.disabled:active,.btn-secondary.disabled:focus,.btn-secondary.disabled:hover,.btn-secondary[disabled],.btn-secondary[disabled].active,.btn-secondary[disabled]:active,.btn-secondary[disabled]:focus,.btn-secondary[disabled]:hover,fieldset[disabled] .btn-secondary,fieldset[disabled] .btn-secondary.active,fieldset[disabled] .btn-secondary:active,fieldset[disabled] .btn-secondary:focus,fieldset[disabled] .btn-secondary:hover{color:rgba(255,255,255,.3);background-color:#16a8f8;border-color:transparent}.btn-warning{color:#fff;background-color:#ff9800;border-color:transparent}.btn-warning.active,.btn-warning.hover,.btn-warning:active,.btn-warning:focus,.btn-warning:hover,.open .dropdown-toggle.btn-warning{color:#fff;background-color:rgba(255,152,0,.8);border-color:rgba(0,0,0,0)}.btn-warning.active,.btn-warning:active,.open .dropdown-toggle.btn-warning{background-color:#e68900;background-image:none;border-color:rgba(0,0,0,0)}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{color:rgba(255,255,255,.3);background-color:#ff9800;border-color:transparent}.btn-danger{color:#fff;background-color:#ff5d5d;border-color:transparent}.btn-danger.active,.btn-danger.hover,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,.open .dropdown-toggle.btn-danger{color:#fff;background-color:rgba(255,93,93,.8);border-color:rgba(0,0,0,0)}.btn-danger.active,.btn-danger:active,.open .dropdown-toggle.btn-danger{background-color:#ff4343;background-image:none;border-color:rgba(0,0,0,0)}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{color:rgba(255,255,255,.3);background-color:#ff5d5d;border-color:transparent}.btn-success{color:#fff;background-color:#00da88;border-color:transparent}.btn-success.active,.btn-success.hover,.btn-success:active,.btn-success:focus,.btn-success:hover,.open .dropdown-toggle.btn-success{color:#fff;background-color:rgba(0,218,136,.8);border-color:rgba(0,0,0,0)}.btn-success.active,.btn-success:active,.open .dropdown-toggle.btn-success{background-color:#00c178;background-image:none;border-color:rgba(0,0,0,0)}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{color:rgba(255,255,255,.3);background-color:#00da88;border-color:transparent}.btn-info{color:#0c64eb;background-color:#e9f2fb;border-color:transparent}.btn-info.active,.btn-info.hover,.btn-info:active,.btn-info:focus,.btn-info:hover,.open .dropdown-toggle.btn-info{color:#0c64eb;background-color:rgba(233,242,251,.8);border-color:rgba(0,0,0,0)}.btn-info.active,.btn-info:active,.open .dropdown-toggle.btn-info{background-color:#d3e5f7;background-image:none;border-color:rgba(0,0,0,0)}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{color:rgba(12,100,235,.3);background-color:#e9f2fb;border-color:transparent}.btn-link{padding-right:6px;padding-left:6px;font-weight:400;color:#3c4353;text-shadow:none;cursor:pointer;background:0 0;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover,.btn-link[disabled],fieldset[disabled] .btn-link{border-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link:focus,.btn-link:hover{color:#222;background:#f1f1f1;background:rgba(0,0,0,.075)}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#cbd0db;text-decoration:none}.btn-lg{padding:11px 16px;font-size:14px;line-height:18px;border-radius:4px}.btn-mini,.btn-sm{padding:3px 8px;font-size:12px;line-height:18px;border-radius:4px}.btn-mini,.btn-xs{padding:0 5px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.btn-wide{min-width:120px}.btn-limit{max-width:180px;padding-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.btn-limit>.caret{position:absolute;top:14px;right:8px}.btn-circle{border-radius:17px}.btn>.label-icon{top:3px;padding:3px;margin:-2px;background-color:rgba(0,0,0,.2);border-radius:12px}.btn>.label-icon>.icon{font-size:16px;line-height:18px}.btn>.icon+.text{margin-left:5px}.btn.btn-sm.btn-circle{border-radius:12px}.btn.btn-sm>.label-icon{top:2px;width:20px;height:20px;padding:1px;line-height:20px}.btn.btn-sm>.label-icon>.icon{position:relative;top:-1px;display:inline-block;font-size:14px;line-height:18px}.btn-icon-left{position:relative;padding-left:35px;overflow:hidden;text-align:right}.btn-icon-left>.label-icon{position:absolute;left:5px;margin:0}.btn-icon-left>.icon{position:absolute;top:0;bottom:0;left:0;display:block;width:30px;line-height:30px;color:#16a8f8;text-align:center;background:#e9f2fb}.btn-icon-left.btn-sm{padding-left:28px}.btn-icon-left.btn-sm>.label-icon{left:2px}.btn-icon-left.btn-sm>.icon{width:24px;line-height:24px}.btn-icon-right{position:relative;padding-right:35px;text-align:left}.btn-icon-right>.label-icon{position:absolute;right:5px;margin:0}.btn-icon-right.btn-sm{padding-right:28px}.btn-icon-right.btn-sm>.label-icon{right:2px}.btn-icon{min-width:32px;padding-right:0;padding-left:0}.btn-icon.btn-sm{width:24px;min-width:24px;height:24px}.btn-group{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group>.btn-group{float:left}.btn-group>.btn{border-radius:0}.btn-group>.btn:first-child{border-top-left-radius:2px;border-bottom-left-radius:2px}.btn-group>.btn:last-child{border-top-right-radius:2px;border-bottom-right-radius:2px}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.dropdown{float:left;margin-right:10px}.btn-toolbar>.btn-group:last-child,.btn-toolbar>.btn:last-child,.btn-toolbar>.dropdown:last-child{margin-right:0}.btn-toolbar>.divider{float:left;height:20px;margin:7px 5px 4px 10px;border-left:1px solid rgba(0,0,0,.1)}.btn-toolbar .space{float:left;min-height:1px;margin:0 10px 0 10px}.btn-toolbar .input-control{float:left;width:120px}.btn-toolbar .page-title{float:left;line-height:34px}.btn-toolbar .page-title .text{font-size:14px;font-weight:700}.btn-toolbar .page-title .label{top:-2px;margin-right:10px}.btn-toolbar .divider+.page-title{margin-left:15px}.btn-active-line{position:relative;font-weight:700;color:#0c64eb}.btn-active-line:after{position:absolute;right:5px;bottom:1px;left:5px;display:block;content:' ';border-bottom:2px solid #0c64eb}.btn-active-line:hover{color:#0c64eb}.btn-active-text .text{position:relative;top:-1px;display:inline-block;font-weight:700;color:#0c64eb}.btn-active-text .text:after{position:absolute;bottom:-5px;display:block;width:100%;content:' ';border-bottom:2px solid #0c64eb}.angle-btn{position:relative;padding:1px;background:#fff;border:1px solid #cbd0db;border-right:none}.btn-toolbar>.angle-btn{margin-right:8px}.angle-btn:after,.angle-btn:before{position:absolute;top:-1px;right:-8px;display:block;width:0;height:0;content:' ';border-color:transparent transparent transparent #cbd0db;border-style:solid;border-width:17px 0 17px 8px}.angle-btn:after{right:-7px;border-color:transparent transparent transparent #fff;border-width:17px 0 17px 8px}.angle-btn .btn{padding:6px;font-weight:700;background:#fff;border:none;border-radius:4px!important}.angle-btn .btn.btn-limit{padding-right:16px}.angle-btn .btn.btn-limit>.caret{right:4px}.angle-btn+.angle-btn{border-left:none}.angle-btn+.angle-btn>.btn-group:first-child{padding-left:8px}.angle-btn+.angle-btn>.btn-group:first-child:after,.angle-btn+.angle-btn>.btn-group:first-child:before{position:absolute;top:-2px;left:0;display:block;width:0;height:0;content:' ';border-color:transparent transparent transparent #cbd0db;border-style:solid;border-width:17px 0 17px 8px}.angle-btn+.angle-btn>.btn-group:first-child:after{left:-1px;border-color:transparent transparent transparent #fff;border-width:17px 0 17px 8px}.btn-toolbar>.angle-btn.active,.btn-toolbar>.angle-btn:last-child{border-color:#0c64eb}.btn-toolbar>.angle-btn.active .btn,.btn-toolbar>.angle-btn:last-child .btn{color:#0c64eb}.btn-toolbar>.angle-btn.active:after,.btn-toolbar>.angle-btn.active:before,.btn-toolbar>.angle-btn:last-child:after,.btn-toolbar>.angle-btn:last-child:before{border-color:transparent transparent transparent #0c64eb}.btn-toolbar>.angle-btn.active:after,.btn-toolbar>.angle-btn:last-child:after{border-color:transparent transparent transparent #fff}.btn-toolbar>.angle-btn+.angle-btn:last-child>.btn-group:first-child:after,.btn-toolbar>.angle-btn+.angle-btn:last-child>.btn-group:first-child:before,.btn-toolbar>.angle-btn.active+.angle-btn>.btn-group:first-child:after,.btn-toolbar>.angle-btn.active+.angle-btn>.btn-group:first-child:before{border-color:transparent transparent transparent #0c64eb}.btn-toolbar>.angle-btn+.angle-btn:last-child>.btn-group:first-child:after,.btn-toolbar>.angle-btn.active+.angle-btn>.btn-group:first-child:after{border-color:transparent transparent transparent #fff}.btn-toolbar>.angle-btn.active+.angle-btn,.btn-toolbar>.angle-btn.normal{border-color:#cbd0db}.btn-toolbar>.angle-btn.active+.angle-btn .btn,.btn-toolbar>.angle-btn.normal .btn{color:#3c4353}.btn-toolbar>.angle-btn.active+.angle-btn:after,.btn-toolbar>.angle-btn.active+.angle-btn:before,.btn-toolbar>.angle-btn.normal:after,.btn-toolbar>.angle-btn.normal:before{border-color:transparent transparent transparent #cbd0db}.btn-toolbar>.angle-btn.active+.angle-btn:after,.btn-toolbar>.angle-btn.normal:after{border-color:transparent transparent transparent #fff}.btn-toolbar>.angle-btn.active+.angle-btn>.btn-group:first-child:before,.btn-toolbar>.angle-btn.normal>.btn-group:first-child:before{border-color:transparent transparent transparent #cbd0db!important}.nav>li>.btn.btn-primary{color:#fff}.nav>li>.btn.btn-primary:focus,.nav>li>.btn.btn-primary:hover{background:rgba(12,100,235,.8)}.label{position:relative;display:inline-block;padding:3px 5px;font-size:12px;font-weight:400;vertical-align:middle;border-radius:2px}.label+.label{margin-left:4px}.label-pale{background:#bed8f3!important}.label-badge{border-radius:9px}.label-light{color:#3c4353;background-color:#ddd}.label-primary{background:#0c64eb!important}.label-gray{color:#878da0;background:#e8ebef}.label-outline.label-danger{color:#ff5d5d;background:#ffebee;border-color:rgba(255,93,93,.25)}.label-outline.label-light{color:#838a9d;background:#f2f5fb;border-color:#e1e5ee}.label-primary.label-outline{background:#e9f2fb!important;border-color:rgba(12,100,235,.25)}.label-outline.label-success{background:#e8f5e9;border-color:rgba(0,218,136,.25)}.label-dot{position:relative;top:-1px;padding:0;border-radius:50%}.label-dot+.status-text{display:inline-block;margin-left:5px}.label-icon{min-width:18px;padding:0;line-height:18px;border-radius:10px}.label-id{display:inline-block;min-width:30px;padding:0 5px;font-size:12px;line-height:16px;color:#838a9d;text-align:center;vertical-align:middle;background-color:transparent;border:1px solid #838a9d;border-radius:2px}.pri-1,.todo-pri-1{color:#ff5d5d}[class*=" status-"],[class^=status-]{color:#3c4353}.status-changed,.status-delayed,.status-doing,.status-fail,.status-investigate{color:#ff5d5d}.status-changed>.label-dot,.status-delayed>.label-dot,.status-doing>.label-dot,.status-fail>.label-dot,.status-investigate>.label-dot{background-color:#ff5d5d}.status-wait{color:#838a9d}.status-wait>.label-dot{background-color:#7ec5ff}.status-unclosed{color:#838a9d}.status-unclosed>.label-dot{background-color:#0c64eb}.status-done,.status-normal,.status-pass,.status-resolved{color:#43a047}.status-done>.label-dot,.status-normal>.label-dot,.status-pass>.label-dot,.status-resolved>.label-dot{background-color:#00da88}.status-postpone{color:#838a9d}.status-postpone>.label-dot{background-color:#ff5d5d}.status-blocked{position:relative;left:-5px;display:inline-block;padding:0 5px;line-height:20px;color:#3c4353;background:#fff3e0;border-radius:10px}.status-blocked>.label-dot{background-color:#ff9800}.status-pause,.status-suspended{color:#ff9800}.status-pause>.label-dot,.status-suspended>.label-dot{background-color:#ff9800}.status-active.status-bug,.status-draft{color:#8666b8}.status-active.status-bug>.label-dot,.status-draft>.label-dot{background-color:#8666b8}.status-closed,.status-terminate{color:#838a9d}.status-closed>.label-dot,.status-terminate>.label-dot{background-color:#838a9d}.status-cancel{color:#838a9d}.status-cancel>.label-dot{background-color:#cbd0db}.label-pri{display:inline-block;min-width:20px;max-width:67px;height:20px;padding:0 4px;overflow:hidden;line-height:17px;color:#838a9d;text-align:center;text-overflow:ellipsis;white-space:nowrap;vertical-align:middle;border:2px solid #838a9d;border-radius:10px}.label-selector>.label-pri,[class*=label-pri-]{color:#158af1;border-color:#2098ee}.label-pri-1,.label-selector>.label-pri[data-value="1"]{color:#d50000;border-color:#d50000}.label-pri-2,.label-selector>.label-pri[data-value="2"]{color:#ff9800;border-color:#ff9800}.label-pri-3,.label-selector>.label-pri[data-value="3"]{color:#2098ee;border-color:#2098ee}.label-pri-4,.label-selector>.label-pri[data-value="4"]{color:#009688;border-color:#009688}.label-pri-5,.label-selector>.label-pri[data-value="5"]{color:#838a9d;border-color:#838a9d}.label-pri-0,.label-selector>.label-pri.active[data-value="0"]{color:#d5d9df;border-color:#d5d9df}.label-severity{position:relative;display:inline-block;width:24px;height:20px;text-align:center;vertical-align:middle}.label-severity:before{position:absolute;top:-3px;left:0;z-index:0;display:block;font-family:ZentaoIcon;font-size:18px;font-size:24px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;color:inherit;text-transform:none;content:"\e973";speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.label-severity:after{position:absolute;top:7px;left:0;z-index:1;display:block;width:24px;font-size:12px;line-height:12px;text-align:center;content:attr(data-severity)}.label-severity[data-severity],.label-severity[data-value]{color:#ccc}.label-severity[data-severity="0"],.label-severity[data-value="0"]{color:#ccc}.label-severity[data-severity="0"]:after,.label-severity[data-value="0"]:after{display:none}.label-severity[data-severity="1"],.label-severity[data-value="1"]{color:#c62828}.label-severity[data-severity="2"],.label-severity[data-value="2"]{color:#e65100}.label-severity[data-severity="3"],.label-severity[data-value="3"]{color:#ffa000}.label-severity[data-severity="4"],.label-severity[data-value="4"]{color:#fdd835}.label-severity[data-severity="5"],.label-severity[data-value="5"]{color:#8bc34a}.label-severity-custom[data-severity]{color:#d5d9df}.label-severity-custom[data-severity="1"]{color:#c62828}.label-severity-custom[data-severity="2"]{color:#e65100}.label-severity-custom[data-severity="3"]{color:#ffa000}.label-severity-custom[data-severity="4"]{color:#fdd835}.label-severity-custom[data-severity="5"]{color:#cddc39}.label-selector>.label{display:inline-block;min-width:24px;height:24px;padding:0 5px;font-size:14px;line-height:20px;text-align:center;cursor:pointer;background:0 0;border:2px solid #d5d9df;border-radius:15px}.label-selector>.label+.label{margin-left:10px}.label-selector>.label.empty{border-color:transparent}.label-selector>.label.label-severity{font-size:12px;line-height:28px;border-color:transparent}.label-selector>.label.label-severity:before{top:-2px;left:-2px}.label-selector>.label.label-severity:after{display:none}.label-selector>.label.label-severity.active{background:0 0;filter:none;-webkit-filter:none}.checkbox-primary,.radio-primary{position:relative;display:block;vertical-align:middle}.checkbox-primary.inline-block,.radio-primary.inline-block{display:inline-block}.checkbox-primary.inline-block+.inline-block,.radio-primary.inline-block+.inline-block{margin-left:15px}.checkbox-primary>input,.radio-primary>input{position:absolute;top:0;left:0;z-index:3;width:100%;height:100%;margin:0;opacity:0}.checkbox-primary>label,.radio-primary>label{display:block;height:20px;padding-left:30px;margin:0;font-weight:400;line-height:20px;cursor:pointer}.checkbox-primary>label:after,.checkbox-primary>label:before,.radio-primary>label:after,.radio-primary>label:before{position:absolute;top:1px;right:0;left:0;display:block;width:18px;height:18px;line-height:18px;text-align:center;content:' ';border-radius:3px}.checkbox-primary>label:after,.radio-primary>label:after{z-index:1;border:2px solid #eee;border-color:rgba(0,0,0,.15);-webkit-transition:.4s cubic-bezier(.175,.885,.32,1);-o-transition:.4s cubic-bezier(.175,.885,.32,1);transition:.4s cubic-bezier(.175,.885,.32,1);-webkit-transition-property:border,background-color;-o-transition-property:border,background-color;transition-property:border,background-color}.checkbox-primary>label:before,.radio-primary>label:before{top:3px;z-index:2;font-family:ZentaoIcon;font-size:18px;font-size:14px;font-style:normal;font-weight:400;font-weight:900;font-variant:normal;line-height:1;text-transform:none;content:"\e5ca";opacity:0;-webkit-transition:.2s cubic-bezier(.175,.885,.32,1);-o-transition:.2s cubic-bezier(.175,.885,.32,1);transition:.2s cubic-bezier(.175,.885,.32,1);-webkit-transition-property:opacity,-webkit-transform;-o-transition-property:opacity,-o-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform,-o-transform;-webkit-transform:scale(0);-ms-transform:scale(0);-o-transform:scale(0);transform:scale(0);speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.checkbox-primary.checked>label:after,.checkbox-primary>input:checked+label:after,.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{background-color:#00da88;border-color:#00da88;border-width:4px}.checkbox-primary.checked>label:before,.checkbox-primary>input:checked+label:before,.radio-primary.checked>label:before,.radio-primary>input:checked+label:before{color:#fff;opacity:1;-webkit-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}.checkbox-primary.focus>label:after,.checkbox-primary>input:focus+label:after,.radio-primary.focus>label:after,.radio-primary>input:focus+label:after{border-color:#00da88;-webkit-box-shadow:0 0 0 3px rgba(0,218,136,.2);box-shadow:0 0 0 3px rgba(0,218,136,.2)}.checkbox-primary:hover>label:after,.radio-primary:hover>label:after{border-color:#00da88}.checkbox-primary.checkbox-right>label,.radio-primary.checkbox-right>label{padding:0 30px 0 0}.checkbox-primary.checkbox-right>label:after,.checkbox-primary.checkbox-right>label:before,.radio-primary.checkbox-right>label:after,.radio-primary.checkbox-right>label:before{right:0;left:auto}.checkbox-primary input:disabled+label:after,.checkbox-primary.disabled>label:after,.radio-primary input:disabled+label:after,.radio-primary.disabled>label:after{background-color:#e5e5e5!important;border-color:#bbb!important}.checkbox-primary input:disabled:checked+label:after,.checkbox-primary.checked.disabled>label:after,.radio-primary input:disabled:checked+label:after,.radio-primary.checked.disabled>label:after{background-color:#bbb!important}.radio-primary>label:after{border-radius:50%}.radio-primary>label:before{top:7px;left:6px;width:6px;height:6px;content:' ';border:none;border-radius:50%}.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{background-color:transparent;border-color:#00da88;border-width:2px}.radio-primary.checked>label:before,.radio-primary>input:checked+label:before{background-color:#00da88}.radio-primary input:disabled:checked+label:after,.radio-primary.checked.disabled>label:after{background-color:transparent;border-color:#bbb}.radio-primary input:disabled:checked+label:before,.radio-primary.checked.disabled>label:before{background-color:#bbb}.panel{position:relative;margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045);box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045)}.panel-body{padding:20px}.panel-body.has-table{padding:10px}.panel-body.has-table .table{margin-bottom:0;table-layout:fixed}.panel-heading{padding:12px 48px 12px 20px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading+.panel-body{padding-top:0}.panel-title{font-size:14px;font-weight:700;line-height:20px}.panel-title .label{top:-1px}.panel-actions{position:absolute;top:0;right:0;padding:7px 8px}.panel:hover .panel-actions{z-index:10}.panel-actions>li>a{display:inline-block;min-width:30px;padding:0 5px;line-height:30px;color:#a6aab8}.panel-actions>li>a:hover{color:#3c4353;text-decoration:initial;background-color:#f1f1f1}.panel-actions .btn-icon{color:#a6aab8}.panel-actions .btn.text-primary{color:#0c64eb}.panel .empty-tip{padding:30px 10px 50px;font-size:14px;color:#838a9d;text-align:center}.progress-text-left{position:relative;margin:7px 0;margin-left:35px;overflow:visible}.progress-text-left .progress-text{position:absolute;top:-7px;left:-35px;display:block;width:35px;height:20px;padding-right:5px;line-height:20px;color:#838a9d;text-align:right}.chart-color{width:20px}.chart-color-dot{display:inline-block;width:10px;height:10px;border-radius:50%}.chart-row{margin-top:10px}.chart-row+.chart-row{padding-top:10px;border-top:1px solid #eee}.chart-wrapper{padding:10px 5px;background:#eee}.chart-wrapper>h4{margin:5px 0 10px}.table-wrapper{max-height:250px;overflow:auto}.table-wrapper .table{margin:0}.progress-pie{position:relative}.progress-pie .progress-info{position:absolute;top:0;left:0;width:100%;height:100%;padding-top:25px;text-align:center}.progress-pie .progress-info>small{display:block;line-height:14px;color:#a6aab8}.progress-pie .progress-info>strong{display:block;font-size:36px;line-height:40px}.progress-pie .progress-info>strong>small{font-size:20px}.progress-pie-120 .progress-info{padding-top:30px}.progress-pie-120 .progress-info>small{line-height:18px}.progress-pie-50 .progress-info{padding-top:4px}.progress-pie-50 .progress-info>strong{font-size:20px;font-weight:400}.progress-pie-50 .progress-info>strong>small{font-size:14px}.progress-pie[data-value="100"] .progress-info>strong{-webkit-transform:scale(.7);-ms-transform:scale(.7);-o-transform:scale(.7);transform:scale(.7)}.status-bars{display:table;width:100%;height:140px;padding:5px;padding-top:50px;margin:0;overflow:hidden}.status-bars>li{position:relative;display:table-cell;text-align:center;vertical-align:bottom}.status-bars .bar{position:absolute;bottom:20px;left:50%;display:block;width:10px;margin-left:-5px;background:#0c64eb;border-radius:5px 5px 0 0}.status-bars .bar:after{position:absolute;right:-50px;bottom:0;left:-50px;display:block;height:1px;content:' ';background:#eee}.status-bars .title{font-size:12px;font-weight:400;color:#a6a8b6}.status-bars .value{position:relative;top:-20px;left:-20px;display:inline-block;width:50px;font-size:16px;font-weight:700;text-align:center}.status-bars-h{display:block;padding-right:50px;padding-left:60px;list-style:none}.status-bars-h>li{position:relative;height:40px;border-left:1px solid #eee}.status-bars-h .bar{position:relative;top:15px;display:block;height:10px;line-height:20px;background:#0c64eb;border-radius:0 5px 5px 0}.status-bars-h .title{position:absolute;top:-5px;left:-60px;width:60px;padding-right:10px;font-size:12px;color:#a6a8b6;text-align:right}.status-bars-h .value{position:absolute;top:-5px;right:-50px;display:block;width:40px;font-size:14px;font-weight:700;text-align:left;white-space:nowrap}.messager{border-radius:4px;-webkit-box-shadow:0 4px 16px rgba(0,0,0,.2),0 2px 8px rgba(0,0,0,.1);box-shadow:0 4px 16px rgba(0,0,0,.2),0 2px 8px rgba(0,0,0,.1)}.messager-content{padding:18px 20px;font-size:18px;line-height:30px}.messager-content>.icon{font-size:28px;line-height:30px}.messager-actions{vertical-align:middle}.messagger-zt{color:#3c4353;background-color:#fff}.messagger-zt .messager-content>.icon{color:#0c64eb}.messagger-zt .messager-actions>.action{color:#838a9d}.messagger-zt.messager-success .messager-content>.icon{color:#00da88}.messagger-zt.messager-danger .messager-content>.icon{color:#ff5d5d}.messagger-zt.messager-warning .messager-content>.icon{color:#ff9800}.messagger-zt.messager-info .messager-content>.icon{color:#2196f3}.tree{padding-left:0;overflow:hidden}.tree ul{position:relative;display:none;padding-left:0}.tree li{position:relative;padding:2px 0 2px 15px;list-style:none}.tree li.heading{padding-left:5px;color:#3c4353}.tree li>a{display:block;max-width:90%;padding:2px 6px;color:#3c4353;word-break:break-all}.tree li>a:hover{color:#3c4353}.tree li>a.tree-toggle:hover{background:0 0}.tree li.active>a{position:relative;font-weight:700;color:#0c64eb}.tree li>.list-toggle{position:absolute;top:1px;left:1px;z-index:10;width:20px;font-size:14px;line-height:22px;color:#cbd0db;text-align:center;cursor:pointer;-webkit-transition:all .2s;-o-transition:all .2s;transition:all .2s}.tree li>.list-toggle:before{content:"\f0da"}.tree li>.list-toggle:active,.tree li>.list-toggle:hover{color:#0c64eb}.tree li.has-active-item>.list-toggle{color:#3c4353}.tree li.has-list.open>ul{display:block}.tree li.has-list.open>.list-toggle{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.tree li.has-list.open:before{position:absolute;top:16px;bottom:-5px;left:10px;display:block;content:' ';border-left:1px solid #d8d8d8}.tree-actions{display:inline-block;margin-left:5px;vertical-align:middle}.tree-actions a{display:inline-block;margin-left:5px;font-size:13px;opacity:.6}.tree-actions a:hover{opacity:1}.tree li>.module-name{color:#3c4353;vertical-align:middle}.tree li>.module-name:hover{background-color:#f0f2f5}.tree li>.module-name:hover>a{color:#3c4353}.treemap-node-fold-icon:before{position:relative;left:-4px;min-width:18px}.dropdown-menu{padding:5px 0;border-color:rgba(0,0,0,.1)}.dropdown-menu>li{padding:0 10px}.dropdown-menu>li>a{padding:2px 10px;margin:5px 0;border-radius:3px}.dropdown-menu>li>a>.icon{position:relative;left:-5px;opacity:.5}.dropdown-menu>li.active>a,.dropdown-menu>li.selected>a{position:relative;color:#fff;background-color:#16a8f8}.dropdown-menu>li.selected>a:after{position:absolute;top:2px;right:4px;display:block;font-family:ZentaoIcon;font-size:18px;font-size:14px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;line-height:20px;text-transform:none;content:"\e5ca";speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.dropdown-menu>li.divider{margin:10px}.dropdown-submenu>a:after{margin-right:-5px}.dropdown-submenu>.dropdown-menu.pull-left{margin-left:-1px}.dropdown-submenu:focus>a,.dropdown-submenu:hover>a{color:#3c4353;background-color:#e9f2fb}.dropdown-submenu:hover>a:after{border-left-color:#0c64eb}.dropdown-submenu>a:hover:after{border-left-color:#fff}.pager .btn{padding:3px 10px}.pager .btn .caret{opacity:.7}.pager>li>.pager-label{padding:2px;line-height:20px}.pager>li>.pager-item{min-width:20px;padding:1px;margin:2px 0;font-size:16px;line-height:20px;text-align:center;background:0 0;border-color:transparent}.pager>li>.pager-item:hover{background-color:rgba(0,0,0,.1)}.pager>li>.pager-item>.icon{position:relative;top:-1px}.pager>li>.btn:hover,.pager>li>a:hover{background:rgba(0,0,0,.1)}.pager>li.disabled>a.pager-item{background:0 0;border-color:transparent;opacity:.5}.pager>li.active>a{background-color:#16a8f8}.pager>li .btn-group .btn{padding:1px;margin:2px 0;border-radius:4px}.pager .dropdown-menu{width:200px}.pager .dropdown-menu>li{float:left;width:33.333333%}.modal-dialog{width:900px;max-width:1360px;border:none;border-radius:0;-webkit-box-shadow:0 0 20px 0 rgba(0,0,0,.25);box-shadow:0 0 20px 0 rgba(0,0,0,.25)}.modal-dialog.modal-md{width:700px}.modal-dialog.modal-xs{width:400px}.modal-dialog.modal-sm{width:500px}.modal-dialog.modal-lg{width:1200px}.modal-dialog.modal-fullscreen{position:fixed;max-width:initial}.modal-header{padding:20px 0;margin:0 20px}.modal-header>.close{color:#838a9d;text-shadow:0 1px 0 rgba(255,255,255,.85);opacity:1}.modal-header>.close:hover{color:#222}.modal-footer{padding:20px 0;margin:0 20px}.modal-title{font-size:16px;font-weight:400;line-height:20px}.modal-actions{position:absolute;top:16px;right:16px}.modal-actions .divider{position:relative;top:5px;display:inline-block;width:0;height:20px;margin:0 10px;border-left:#eee 1px solid}.modal-actions>.dropdown{display:inline-block}.modal-body{padding:20px}.modal-iframe .modal-body>iframe{border-radius:0}.modal.fade .modal-dialog{-webkit-transform:translate(0,-3%);-ms-transform:translate(0,-3%);-o-transform:translate(0,-3%);transform:translate(0,-3%)}.modal.fade.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-simple .modal-footer{padding-top:0;border-top:none}.modal-iframe .modal-header{position:relative;z-index:10;min-height:0;padding:0;border:none}.modal-iframe .modal-title{display:none}.modal-iframe .modal-header .close{position:absolute;top:12px;right:10px;font-size:32px;font-weight:200}.modal-iframe .modal-dialog{overflow:hidden}.modal-inverse .modal-header>.close{color:rgba(255,255,255,.7);text-shadow:none}.modal-inverse .modal-header>.close:hover{color:#fff}.modal-scroll-inside>.modal-dialog{max-height:100%}.hide-modal-close .modal-iframe .modal-header .close{display:none}.tile{text-align:center}.tile-title{line-height:20px;color:#3c4353}.tile-amount{font-size:32px;font-weight:700;line-height:56px}.timeline>li{position:relative;list-style:none}.timeline>li:before,.timeline>li>a:after,.timeline>li>div:after{position:absolute;left:-20px;display:block;width:15px;height:15px;content:' ';border-radius:50%}.timeline>li:before{top:12px;left:-16px;z-index:3;width:7px;height:7px;background-color:#cbd0db;border:none;border:1px solid #cbd0db}.timeline>li>a:after,.timeline>li>div:after{top:11px;left:-17px;z-index:3;width:9px;height:9px;background-color:#0c64eb;border-radius:50%;opacity:0}.timeline>li+li:after{position:absolute;top:-12px;bottom:20px;left:-13px;z-index:1;display:block;content:' ';border-left:1px solid #eee}.timeline>li.active>a:after,.timeline>li.active>div:after{opacity:1}.timeline>li.active:before{top:8px;left:-20px;width:15px;height:15px;background-color:rgba(12,100,235,.2);border:none}.timeline>li>a,.timeline>li>div{display:block;padding:5px;line-height:20px}.timeline>li.active>a{color:#3c4353}.timeline-tag{position:absolute;top:5px;left:-115px;font-size:12px}.timeline-tag-left{padding-left:115px}.timeline-sm{font-size:12px}.timeline-sm>li:before,.timeline-sm>li>a:after,.timeline-sm>li>div:after{top:10px;left:-20px;width:11px;height:11px}.timeline-sm>li.active:before,.timeline-sm>li:before{top:10px;left:-18px;width:11px;height:11px;background:0 0;border:1px solid #eee}.timeline-sm>li>a,.timeline-sm>li>div{line-height:20px}.timeline-sm>li>a:after,.timeline-sm>li>div:after{top:13px;left:-15px;width:5px;height:5px}.form-control{-webkit-box-shadow:none;box-shadow:none}.form-horizontal .form-group>label{padding-right:0}.form-actions{margin-top:20px;margin-bottom:0}.form-actions .btn{margin-right:10px}form label{font-weight:400;color:#3c4353}.form-group .btn+.btn{margin-left:5px}.table-form{margin-bottom:0;table-layout:fixed}.table-form>thead>tr>th.required:after{position:relative;top:3px;right:auto;left:4px;display:inline-block;vertical-align:middle}.table-form>tbody>tr>td,.table-form>tbody>tr>th,.table-form>tfoot>tr>td,.table-form>thead>tr>th{padding:7px;vertical-align:middle;border-bottom:none}.table-form>tfoot>tr>td{padding:20px 7px 10px}.table-form>tbody>tr>th{width:100px;font-weight:700;text-align:right}.table-form .input-group{width:100%}.table-form textarea.form-control{height:32px}.chosen-container-single .chosen-single{position:relative}.chosen-container-single .chosen-single>span{height:20px;line-height:20px;white-space:normal}.chosen-container-single .chosen-single div b{position:relative;top:1px;color:#cbd0db}.chosen-container-single .chosen-search:before{top:8px;right:15px}.chosen-container-multi .chosen-choices li.search-choice{font-size:13px;background:#eee;border-color:#cbd0db;-webkit-box-shadow:none;box-shadow:none}.chosen-container-single .chosen-search input[type=text]{height:30px;padding:3px 25px 3px 5px}.chosen-container-single .chosen-search{padding:3px 10px 0}.chosen-container-single .chosen-single{overflow:visible}.chosen-container-single .chosen-single>.chosen-search{top:-2px;right:-1px;bottom:-1px;left:-1px;display:none;height:auto;padding:0;opacity:0}.chosen-container-single .chosen-single>.chosen-search>input{height:31px;padding:5px 26px 5px 8px;font-size:inherit;line-height:20px}.chosen-container-single .chosen-single>.chosen-search:before{top:7px;right:8px}.chosen-container .chosen-results{padding:10px}.chosen-container .chosen-results>li{border-radius:4px}.chosen-container .chosen-results li.highlighted em{color:#fff}.table-responsive .chosen-container .chosen-results{max-height:200px}.datetimepicker{padding:10px}.datetimepicker td.day.today{background-color:#f77}.datetimepicker td.day.active{background-color:#16a8f8}.datetimepicker tfoot th,.datetimepicker thead th{color:#838a9d}.input-control .colorpicker{top:0;z-index:auto;opacity:1}.input-control .colorpicker .btn{padding:5px}.input-control .input-control-icon-right.btn{top:0}.colorpicker .dropdown-menu{min-width:232px;padding:5px 10px 10px 10px}.colorpicker .dropdown-menu>li{display:block;float:left;padding:5px}.colorpicker .dropdown-menu>li.heading{width:100%;margin-bottom:5px;font-size:16px;font-weight:700;text-align:left}.colorpicker .dropdown-menu>li.heading>.icon-close{position:relative;top:4px;float:right;cursor:pointer;opacity:.6}.colorpicker .dropdown-menu>li>a{position:relative;display:block;width:100%;height:100%;padding:0;margin:0;font-family:ZentaoIcon;font-size:18px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;text-align:center;text-transform:none;border:1px solid transparent;border-radius:50%;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.colorpicker .dropdown-menu>li>a:before{position:absolute;top:0;display:block;width:100%;height:20px;line-height:18px}.colorpicker .dropdown-menu>li>a:hover{-webkit-box-shadow:0 1px 4px rgba(0,0,0,.25);box-shadow:0 1px 4px rgba(0,0,0,.25)}.colorpicker .dropdown-menu>li>a.active:before{font-size:14px;content:"\e5ca"}.colorpicker .dropdown-menu>li>a.empty{color:#666;background:#fff}.colorpicker .dropdown-menu>li>a.empty:before{content:"\e90d"}.colorpicker .btn{position:relative}.colorpicker .btn .color-bar{position:absolute;right:5px;bottom:3px;left:5px;height:3px}.colorpicker .btn .color-bar[style*='background: ']+.ic{position:relative;top:-2px}.colorpicker .btn .ic{color:#cbd0db}.colorpicker .btn:hover .ic{color:#838a9d}.input-group .colorpicker{z-index:3}.input-group .chosen-container{display:table-cell}.input-group-addon{border-right-width:0;border-left-width:0}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin:0}.input-group-cell{display:table-cell;width:1%;padding:0 12px;white-space:nowrap;vertical-align:middle}.ke-container{border-color:#dcdcdc!important;border-radius:2px!important}.ke-container.focus{border-color:#0c64eb!important}.ke-toolbar{border-color:#dcdcdc!important}.required:after{top:6px;right:-10px;font-size:20px}td.required:after{top:12px;right:-5px}.input-group>.chosen-container.required:after,.input-group>.input-control.required:after{top:1px;right:1px;z-index:2}.input-group.required .required:after{display:none}.file-input{position:relative}.file-input .input-group{width:auto}.file-input .input-group>.input-group-cell:first-child{padding-right:0;padding-left:7px}.file-input input[type=file]{position:absolute;width:0;height:0;opacity:0}.file-input .file-title{display:inline-block;max-width:400px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:middle}.file-input .file-editbox{min-width:200px;max-width:100%}.file-input .file-size{display:inline-block;vertical-align:middle}.edit .file-input-empty,.file-input-edit,.file-input-normal,.normal .file-input-empty{display:none}.edit .file-input-edit,.normal .file-input-normal{display:block}.edit .file-input-edit.input-group,.normal .file-input-normal.input-group{display:table}.edit .file-input-normal{display:none!important}.file-input-normal>.input-group-btn{width:auto}.input-group .chosen-container-active .chosen-choices{border-color:#0c64eb!important}.input-group .chosen-container{min-width:100px}.input-group .input-group-btn .btn>.icon{line-height:17px}.os-mac select.form-control{-webkit-appearance:none;background-image:url(data:image/gif;base64,R0lGODlhCQAFAIAAAMvQ2////yH5BAEAAAEALAAAAAAJAAUAAAIKhH+BGYoNGWxgFgA7);background-image:url(data:image/gif;base64,R0lGODlhBwAEAIAAAMvQ2////yH5BAEAAAEALAAAAAAHAAQAAAIIhA+BGWoNWSgAOw==);background-repeat:no-repeat;background-position:right 5px top 12px;-moz-appearance:none}input::-webkit-contacts-auto-fill-button{position:absolute;right:0;display:none!important;pointer-events:none;visibility:hidden}.chosen-choices.has-error,.chosen-single.has-error,.form-control.has-error{border-color:#ff5d5d!important;-webkit-box-shadow:0 0 6px #ffc3c3!important;box-shadow:0 0 6px #ffc3c3!important}.popover-success.popover-form-result{font-weight:700;color:#fff;background:#00da88}.popover-success.popover-form-result.popover.right .arrow:after{border-right-color:#00da88}#mainHeader{height:50px;color:#fff;background:#1183fb -webkit-gradient(linear,right top,left top,from(#0a48d1),to(#1183fb));background:#1183fb -webkit-linear-gradient(right,#0a48d1 0,#1183fb 100%);background:#1183fb -o-linear-gradient(right,#0a48d1 0,#1183fb 100%);background:#1183fb linear-gradient(-90deg,#0a48d1 0,#1183fb 100%);background-color:#1183fb;border-top-color:#0c64eb;border-bottom-color:#e9f2fb}#mainHeader>.container{min-width:1200px;padding:0}#heading{position:absolute;top:10px;left:20px}@media (min-width:1400px){#heading{left:40px}}#heading h1{float:left;max-width:250px;margin:0;overflow:hidden;font-size:20px;font-weight:400;line-height:30px;text-overflow:ellipsis;white-space:nowrap}#heading h1 a{color:inherit;text-decoration:inherit}#heading h1.long-name{position:relative;top:-5px;display:table-cell;font-size:16px;line-height:20px;word-break:break-all;white-space:normal}#heading .btn{display:block;float:left;height:20px;padding:1px 5px;margin:0;margin:5px 0 0 10px;font-size:12px;font-weight:lighter;line-height:18px;background-color:rgba(255,255,255,.2);border:none}#heading .btn:hover{background-color:rgba(0,0,0,.1)}#navbar{margin:0 auto;font-size:15px;text-align:center}#navbar .nav{display:inline-block}#navbar .nav>li>a{padding:10px 15px;line-height:30px;color:#fff;border-radius:0;opacity:.9}@media (max-width:992px){#navbar .nav>li>a{padding:10px}}#navbar .nav>li>a:focus,#navbar .nav>li>a:hover{background:rgba(0,0,0,.15);opacity:1}#navbar .nav>li.active>a{font-weight:700;background:rgba(0,0,0,.1);opacity:1}#navbar .nav>li.divider{display:block;width:2px;height:20px;margin:15px;background:rgba(255,255,255,.4)}#navbar .nav>li.divider:last-child{display:none}#toolbar{position:absolute;top:12px;right:20px;font-size:12px;color:#fff}@media (min-width:1400px){#toolbar{right:40px}}#extraNav{text-align:right}#extraNav>li{display:inline-block;float:none;text-align:left}#extraNav>li>a{display:block;padding:0;color:#fff;opacity:.75}#extraNav>li>a:hover{text-decoration:unset;background-color:rgba(0,0,0,.1);opacity:1}#extraNav>li.open>a{background-color:rgba(0,0,0,.1)}#extraNav>li+li{margin-left:10px}#searchbox{position:relative;float:left;width:150px}#searchbox .input-group-btn .btn{position:relative;padding:1px 4px;font-size:12px;line-height:20px;color:#fff;background-color:rgba(255,255,255,.15);border-right:none;border-radius:2px}#searchbox .input-group-btn .btn:after{position:absolute;top:3px;right:0;bottom:3px;display:block;width:1px;content:' ';background-color:rgba(255,255,255,.15)}#searchbox .input-group-btn .btn:hover{background-color:rgba(255,255,255,.25)}#searchGo{position:absolute;top:0;right:-1px;z-index:9;min-width:24px;height:24px;padding:2px 3px;font-size:12px;line-height:20px;color:#fff;background-color:#6a9afd;border-radius:2px}#searchGo:hover{color:#fff!important;background-color:#0c64eb}#searchInput{height:24px;padding:2px 30px 2px 5px;color:#fff;text-align:left;background:rgba(255,255,255,.15);border-color:transparent;border-radius:0 12px 12px 0;-webkit-transition:background .2s,border .2s;-o-transition:background .2s,border .2s;transition:background .2s,border .2s}#searchInput:hover{background:rgba(255,255,255,.25)}#searchInput:focus{color:#333;background:#fff}#searchInput::-webkit-input-placeholder{font-size:12px;color:#fff;color:rgba(255,255,255,.5)}#searchInput::-moz-placeholder{font-size:12px;color:#fff;color:rgba(255,255,255,.5)}#searchInput::placeholder{font-size:12px;color:#fff;color:rgba(255,255,255,.5)}#searchInput:focus::-webkit-input-placeholder{color:#838a9d}#searchInput:focus::-moz-placeholder{color:#838a9d}#searchInput:focus::placeholder{color:#838a9d}#searchTypeMenu{min-width:220px}#searchTypeMenu>li{float:left;width:50%}#searchTypeMenu>li>a{margin:4px 0}#userNav{float:right;margin:0 -6px 0 10px}#userNav .avatar{display:inline-block;vertical-align:middle}#userNav>li>a{padding:2px 6px;margin-left:3px;line-height:20px;color:#fff;opacity:.9}#userNav>li>a .user-name{max-width:100px;overflow:hidden;font-size:15px;text-overflow:ellipsis;white-space:nowrap}#userNav>li>a:hover{background-color:rgba(0,0,0,.1);opacity:1}#userNav>li>a span{display:inline-block;vertical-align:middle}#userNav>li.open>a{background-color:rgba(0,0,0,.1)}#userNav>li.has-new-items>a{position:relative}#userNav>li.has-new-items>a:before{position:absolute;top:3px;right:-1px;display:block;width:4px;height:4px;content:' ';background-color:#ff5d5d;border-radius:50%}#userNav .dropdown-menu{min-width:150px}#userNav .dropdown-menu>li>a>.icon{position:absolute;top:10px;right:5px;display:block;width:20px;height:20px;line-height:20px;text-align:center}#userNav .user-profile-item>a{position:relative;padding-left:45px}#userNav .user-profile-item .avatar{position:absolute;top:6px;left:5px}#userNav .user-profile-name{font-size:16px}#userNav .user-profile-role{font-size:12px;color:#a9abb8}#userNav .no-role .user-profile-role{display:none}#userNav .no-role .user-profile-name{line-height:40px}#subHeader{min-height:50px;background:#fff}#subHeader>.container{padding:0 20px}@media (min-width:1400px){#subHeader>.container{padding:0 40px}}#pageNav{position:absolute;top:8px;left:0;left:20px}@media (min-width:1400px){#pageNav{left:40px}}#subNavbar{margin-top:5px;font-size:14px;text-align:center}#subNavbar .nav{display:inline-block}#subNavbar .nav>li>a{padding:8px 12px;line-height:24px;color:#3c4353}#subNavbar .nav>li>a:hover{color:#3c4353;background-color:rgba(0,0,0,.075)}#subNavbar .nav>li.active>a{font-weight:700;color:#0c64eb}#subNavbar .nav>li.divider{display:block;width:2px;height:20px;margin:9px 5px;background-color:rgba(0,0,0,.05)}#subNavbar .dropdown-menu{text-align:left}#pageActions{position:absolute;top:9px;right:20px}@media (min-width:1400px){#pageActions{right:40px}}.cell{padding:10px;background-color:#fff;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045);box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045)}.cell+.cell{margin-top:10px}.cell>.panel{margin:0;-webkit-box-shadow:none;box-shadow:none}.cell>.panel>.panel-heading{padding:5px 5px 10px}.cell>.panel>.panel-heading .panel-actions{padding:0}.cell>.panel>.panel-body{padding:5px}.cell>.table{margin:0}#main{padding:20px 0}#main>.container{padding:0 20px}@media (min-width:1400px){#main>.container{padding:0 40px}}#header,#header+#main{min-width:1200px}#mainMenu{margin:-10px 0 8px}.main-content{padding:20px;background-color:#fff;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045);box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045)}@media (min-width:1400px){.main-content>.center-block{max-width:1350px;padding:20px;border:1px solid #eee}.main-content>.center-block .main-header{background-color:#f1f1f1}}.main-content>h2{margin:0 0 20px}.main-content .cell{-webkit-box-shadow:none;box-shadow:none}.main-header{padding:5px 20px;border-bottom:1px solid #eee}.main-header:after,.main-header:before{display:table;content:" "}.main-header:after{clear:both}.main-header>h2{display:block;float:left;margin:0 10px 0 0;font-size:14px;line-height:34px}.main-header>h2 .label-id{margin-right:5px}.main-header>h2 small{font-size:14px;font-weight:400}.main-content .main-header{margin:-20px -20px 10px}.main-header .label{top:-1px}.main-row{display:table;width:100%;table-layout:fixed}.main-row>*{display:table-cell;vertical-align:top}@media (max-width:720px){.main-row{display:block}.main-row>*{display:block;width:100%}.main-row .side-col{width:100%;padding:0}.main-row .main-col+.side-col,.main-row .side-col+.main-col{margin-top:10px}}.main-row.hide-side .side-col{display:none}@media (min-width:720px){.main-content>.center-block .main-form{padding-right:20px}}#main .side-col .tabs{padding:5px}#main .side-col .nav-tabs{margin:0 5px 5px 5px;border-bottom:1px solid #ddd}#main .side-col .nav-tabs>li{margin:0}#main .side-col .nav-tabs>li+li{margin-left:10px}#main .side-col .nav-tabs>li>a{position:relative;padding:8px 5px;border:none;border-radius:2px!important}#main .side-col .nav-tabs>li.active>a{font-weight:700;color:#3c4353}#main .side-col .nav-tabs>li.active>a:before{position:absolute;right:0;bottom:-1px;left:0;display:block;height:2px;content:' ';background:#0c64eb}#main .side-col .tab-content .tab-pane table{border:none}.main-actions .btn-toolbar{display:inline-block;padding:4px 15px;color:#fff;pointer-events:auto;background:#717171;background-color:rgba(90,90,90,.85);border-radius:4px}.main-actions .btn-toolbar .divider{margin-right:15px;margin-left:15px;border-color:rgba(255,255,255,.1)}.main-actions .btn-toolbar .btn{padding-right:10px;padding-left:10px;margin-right:0;color:#fff;background-color:transparent;border:none}.main-actions .btn-toolbar .btn+.btn{margin-left:10px}.main-actions .btn-toolbar .btn:focus,.main-actions .btn-toolbar .btn:hover{background-color:rgba(255,255,255,.2)}.main-actions .btn-toolbar .btn.btn-icon{min-width:32px;padding-right:0;padding-left:0}.main-actions .btn-toolbar .btn+.btn-group{margin-right:0;margin-left:10px}#mainContent .main-col>.main-actions{padding:30px 0 0 0;text-align:center}#mainContent .main-col>.main-actions>.btn-toolbar{visibility:visible;opacity:1;-webkit-transition:opacity .2s;-o-transition:opacity .2s;transition:opacity .2s}#mainActions{position:fixed;top:0;right:0;bottom:0;left:0;text-align:center;pointer-events:none}#mainActions .btn-toolbar{position:relative;top:-90px}#mainActions .dropdown-menu{text-align:left}#mainActions>.container{height:100%}.main-actions-holder{display:none}.main-actions-fixed .main-actions-holder{display:block}.main-actions-fixed #mainContent .main-col>.main-actions{position:fixed;bottom:50px}.main-actions-fixed.body-modal #mainContent .main-col>.main-actions{bottom:20px}#nextPage,#prevPage{position:absolute;top:50%;left:-10px;width:40px;height:60px;padding:10px 0;margin-top:-30px;line-height:40px;color:#fff;text-align:center;pointer-events:auto;background:#717171;background-color:rgba(90,90,90,.85);-webkit-box-shadow:0 2px 15px 2px rgba(0,0,0,.05);box-shadow:0 2px 15px 2px rgba(0,0,0,.05)}#nextPage:hover,#prevPage:hover{-webkit-box-shadow:0 2px 15px 2px rgba(0,0,0,.15);box-shadow:0 2px 15px 2px rgba(0,0,0,.15)}#nextPage>.icon,#prevPage>.icon{display:block;font-size:36px;line-height:36px}#nextPage{right:-10px;left:auto}@media (max-width:1800px){#prevPage{left:-3px}#nextPage{right:-3px}}#sidebarHeader{position:relative;float:left;width:180px;height:34px;padding-right:20px;margin-right:20px;background:#fff;border-left:4px solid #0c64eb;border-radius:4px 2px 2px 4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045);box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045)}#sidebarHeader:after{position:absolute;top:-1px;right:-8px;display:block;width:0;height:0;content:' ';border-color:transparent transparent transparent #fff;border-style:solid;border-width:18px 0 18px 8px}#sidebarHeader .title{padding:0 5px;overflow:hidden;font-size:14px;font-weight:700;line-height:32px;color:#0c64eb;text-align:center;text-overflow:ellipsis;white-space:nowrap}#sidebarHeader .title>a{position:absolute;top:0;right:0;width:20px;opacity:.5}#sidebarHeader .title>a:hover{opacity:1}#sidebar{position:relative;-webkit-transition:width .2s,padding .2s;-o-transition:width .2s,padding .2s;transition:width .2s,padding .2s}#sidebar>.sidebar-toggle{position:absolute;top:0;right:5px;bottom:0;width:10px;cursor:pointer;background:0 0;border-radius:5px;-webkit-transition:background-color .2s;-o-transition:background-color .2s;transition:background-color .2s}#sidebar>.sidebar-toggle>.icon{position:absolute;top:50%;left:-1px;width:12px;height:30px;margin-top:-10px;line-height:30px;color:#fff;text-align:center;background:#79cdfb;border-radius:6px}#sidebar>.sidebar-toggle>.icon:before{position:relative;left:-3px}#sidebar>.sidebar-toggle:before{position:absolute;top:0;right:-5px;bottom:0;left:-5px;display:block;content:' '}#sidebar>.sidebar-toggle:hover{background:rgba(0,0,0,.075)}#sidebar>.cell{position:relative;left:0;width:180px;-webkit-transition:left .2s,opacity .2s;-o-transition:left .2s,opacity .2s;transition:left .2s,opacity .2s}#sidebar.no-animate>.cell{display:none;-webkit-transition:none;-o-transition:none;transition:none}.hide-sidebar #sidebar>.cell{position:absolute;left:-200px;opacity:0}.hide-sidebar #sidebar{position:relative;width:0;padding:0}.hide-sidebar #sidebar>.sidebar-toggle>.icon:before{content:"\e315"}@media (max-width:720px){#sidebar>.cell{width:100%}}#queryBox{max-height:0;padding:0;overflow:hidden;-webkit-transition:cubic-bezier(.175,.885,.32,1) .2s;-o-transition:cubic-bezier(.175,.885,.32,1) .2s;transition:cubic-bezier(.175,.885,.32,1) .2s;-webkit-transition-property:padding,max-height,margin;-o-transition-property:padding,max-height,margin;transition-property:padding,max-height,margin}#queryBox>form{visibility:hidden;-webkit-transition:visibility .2s .2s;-o-transition:visibility .2s .2s;transition:visibility .2s .2s}#queryBox.loading{height:50px}#queryBox.show{min-height:110px;max-height:300px;margin-bottom:10px;overflow:visible}#queryBox.show>form{visibility:visible}#queryBox.divider{border-bottom:1px solid #eee}#main .querybox-toggle.querybox-opened{position:relative;color:#0c64eb;background:0 0;border:none}#main .querybox-toggle.querybox-opened:before{position:absolute;bottom:-14px;left:50%;width:0;height:0;content:' ';border-color:transparent transparent #fff transparent;border-style:solid;border-width:0 10px 10px 10px}#contentNav{padding:5px;background:#fff;border-bottom:1px solid #eee}#contentNav .nav>li>a{position:relative;padding:6px 10px;color:#838a9d}#contentNav .nav>li.active>a{font-weight:700;color:#0c64eb}#contentNav .nav>li.active>a:before{position:absolute;right:10px;bottom:3px;left:10px;display:block;height:2px;content:' ';background:#0c64eb}.body-modal{padding-bottom:0}.body-modal #main,.body-modal .container{min-width:0!important}.body-modal #main{padding:0}.body-modal .main-header{position:fixed;top:0;right:20px;left:20px;z-index:100;padding:13px 48px 13px 0;margin:0;background:#fff}.body-modal #mainContent{padding-top:70px}.body-modal .main-header>h2{max-width:100%;overflow:hidden;font-size:14px;text-overflow:ellipsis;white-space:nowrap}.body-modal .cell,.body-modal .main-content{-webkit-box-shadow:none;box-shadow:none}.body-modal #mainMenu{position:fixed;top:0;right:0;left:0;z-index:100;padding:12px 60px 12px 10px;margin:0;background:#fff}.body-modal #mainMenu>.btn-toolbar.pull-left.divider{display:none}.body-modal #mainMenu>.btn-toolbar{max-width:100%;margin-left:20px}.body-modal #mainMenu>.btn-toolbar>.divider:first-child{display:none}.body-modal #mainMenu>.btn-toolbar .page-title{max-width:100%;margin-left:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.body-modal #mainMenu+#mainContent.main-row{padding:60px 10px 0}.body-modal #mainMenu+#mainContent.main-row .cell{border:1px solid #efefef;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045);box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045)}.body-modal #mainActions{top:auto}.body-modal #mainActions .btn-toolbar{top:auto;bottom:10px}.body-modal.m-bug-view,.body-modal.m-story-view,.body-modal.m-task-view,.body-modal.m-testcase-view,.body-modal.m-testtask-view,.body-modal.m-todo-view{padding-bottom:20px;border-radius:3px}#tabsNav{position:relative}#tabsNav .tab-pane>.actions{position:absolute;top:-8px;right:0}#tabsNav .tab-pane>.cell,#tabsNav .tab-pane>.main-table{padding:0;border:1px solid #cbd0db;border-top:none;border-radius:0 0 4px 4px}#tabsNav .tab-pane>.cell .detail-title{padding-left:5px}#helpContent{position:fixed;top:50px;right:0;bottom:40px;left:0;display:none;background-color:#fff}#helpContent .load-error{display:none;padding:20px}#helpContent .show-error .load-error{display:block}.show-help-tab{overflow:hidden}.show-help-tab #main{display:none}.show-help-tab #helpContent{display:block}#navbar .nav>li>a.open-help-tab>.icon-close{display:none;opacity:.5}#navbar .nav>li>a.open-help-tab>.icon-close:hover{background:rgba(0,0,0,.1);opacity:1}.show-help-tab #navbar .nav>li>a.open-help-tab>.icon-close{display:inline}.text-middle td,.text-middle th{vertical-align:middle}.text-center td,.text-center th{text-align:center}.c-sm{width:40px}.c-id{width:90px}.c-id-sm{width:70px}.c-id-xs{width:55px}.c-date{width:100px}.c-num,.c-pri,.c-type{width:80px;overflow:hidden}.c-begin,.c-end,.c-time{width:65px}.c-hours{width:60px}.c-actions-1{width:50px}.c-actions-2{width:75px}.c-actions-3{width:102px}.c-actions,.c-actions-4{width:128px}.c-actions-5{width:155px}.c-actions-6{width:180px}.c-product,.c-project{width:180px}.c-plan{width:130px}.c-datetime{width:120px}.c-stage,.c-status,.c-user{width:80px}.c-side{width:200px;border-right:10px solid #efefef}.c-assign,.c-assignedTo,.c-openedBy{width:130px}.c-progress{width:155px}.c-assign,.c-assignedTo,.c-openedBy,.c-product,.c-project,.c-status,.c-url,.c-user{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}td.c-name,td.c-title{overflow:hidden;text-align:left!important;text-overflow:ellipsis;white-space:nowrap}td.c-actions{position:relative;padding-top:0;padding-bottom:0;overflow:hidden;white-space:nowrap;vertical-align:middle}td.c-actions .btn{display:inline-block;width:26px;padding:2px;overflow:hidden;line-height:20px;color:#16a8f8;background:0 0;border-color:transparent}td.c-actions .btn .icon{font-size:18px}td.c-actions .btn:hover{color:#0c64eb;background-color:#d3e5f7}td.c-actions .btn+.btn{margin-left:-4px}td.c-actions .btn-link{color:#3c4353;background:0 0}td.c-actions .btn-link:hover{color:#0c64eb;background:#e9f2fb}td.c-actions .more{position:absolute;top:50%;right:100%;display:none;padding-right:4px;padding-left:20px;margin-top:-15px;margin-right:-6px;white-space:nowrap;background-color:#fafafa;-webkit-transition:opacity .3s,margin.3s;-o-transition:opacity .3s,margin.3s;transition:opacity .3s,margin.3s}tr:hover td.c-actions .more{display:block}td:hover+td.c-actions>.more{margin-right:-15px;pointer-events:none;opacity:.15}tr[data-url]{cursor:pointer}.table tbody>tr>td,.table thead>tr>th{vertical-align:middle}.table tbody>tr>td.has-btn,.table thead>tr>th.has-btn{padding-top:1px;padding-bottom:1px;overflow:visible}.table tbody>tr>td .progress,.table thead>tr>th .progress{height:6px}.table .em,.table em{color:#3c4353}.table .divider{border-bottom:10px solid #efefef}.table .divider-top{border-top:10px solid #efefef}.table .btn-icon-left{max-width:100%;padding-left:20px;overflow:hidden;line-height:18px;text-align:left;text-overflow:ellipsis;background:0 0;border-color:#eaf3fc}.table .btn-icon-left>.icon{width:20px;font-size:14px;background:0 0!important;opacity:0}.table .btn-icon-left.btn-sm{height:26px;font-size:13px}.table .btn-icon-left:active,.table .btn-icon-left:focus,.table .btn-icon-left:hover{border-color:rgba(0,0,0,.2)}.table .btn-icon-left:active>.icon,.table .btn-icon-left:focus>.icon,.table .btn-icon-left:hover>.icon{opacity:1}.table .btn-icon-left>.text{padding-left:25px}.table thead>tr>th.c-assign,.table thead>tr>th.c-assignedTo{padding-left:29px}.table a{vertical-align:middle}.table tbody>tr:last-child{border-bottom:none}.table caption{margin-bottom:5px;background:#f1f1f1;border:none}.is-firefox .table .btn-icon-left>.icon{line-height:22px}.main-table{border-radius:4px}.main-table>.table,.main-table>.table-footer,.main-table>.table-header,.main-table>.table-responsive{-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045);box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045)}.main-table .table{font-size:13px;table-layout:fixed;background-color:#fff;border-radius:4px 4px 0 0}.main-table .table.table-lg{font-size:14px}.main-table .table .btn-icon-left{border-color:transparent}.main-table .table .btn-icon-left>.icon{background:0 0;border-radius:4px}.main-table .table .btn-icon-left.btn-sm{height:26px}.main-table .table .btn-icon-left:hover{border-color:rgba(0,0,0,.2)}.main-table .table .btn-icon-left:hover>.icon{background:#e9f2fb;border-radius:4px 0 0 4px}.main-table tbody>tr>td,.main-table thead>tr>th{min-height:36px;padding:2px 8px;line-height:30px}.main-table tbody>tr>td:first-child,.main-table thead>tr>th:first-child{padding-left:15px}.main-table thead>tr>th{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-bottom:1px solid #ddd}.main-table tbody>tr:nth-child(odd){background-color:#f5f5f5}.main-table tbody>tr:last-child>td{border-bottom:1px solid #ddd}.main-table tbody>tr>td{position:relative;border-bottom:none;border-bottom:1px solid #eee}.main-table tbody>tr>td .label{max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.main-table tbody>tr>td>a{line-height:28px;color:#0c60e1}.main-table tbody>tr>td>a:not(.btn):visited{color:#082999;opacity:.9}.main-table tbody>tr>td>a:hover,.main-table tbody>tr>td>a:visited:hover{color:#0c64eb}.main-table tbody>tr>td.c-actions{padding-right:10px}.main-table tbody>tr>td.c-side+td:before,.main-table tbody>tr>td:first-child:before{position:absolute;top:0;bottom:0;left:0;display:block;width:0;content:'';background:#0c64eb;opacity:0;-webkit-transition:.2s linear;-o-transition:.2s linear;transition:.2s linear;-webkit-transition-property:width,opacity,border-radius;-o-transition-property:width,opacity,border-radius;transition-property:width,opacity,border-radius}@-moz-document url-prefix(){.main-table tbody>tr>td.c-side+td:before,.main-table tbody>tr>td:first-child:before{bottom:-1px}}.main-table tbody>tr>td.c-side:before{display:none}.main-table tbody>tr{-webkit-transition:.2s cubic-bezier(.175,.885,.32,1);-o-transition:.2s cubic-bezier(.175,.885,.32,1);transition:.2s cubic-bezier(.175,.885,.32,1);-webkit-transition-property:background-color,-webkit-box-shadow;-o-transition-property:box-shadow,background-color;transition-property:background-color,-webkit-box-shadow;transition-property:box-shadow,background-color;transition-property:box-shadow,background-color,-webkit-box-shadow}.main-table tbody>tr:hover{background:#e9f2fb}.main-table .table-grouped tbody>tr:hover{background:#f2f7fd;-webkit-box-shadow:none;box-shadow:none}.main-table .table-grouped tbody>tr:hover td.c-actions .more{background:#f2f7fd}.main-table tbody>tr.checked{background:#fff3e0}.main-table tbody>tr.checked:hover{background:#ffebbc}.main-table tbody>tr.checked>td.c-side+td:before,.main-table tbody>tr.checked>td:first-child:before{width:4px;opacity:1}.main-table tbody>tr.checked.row-check-begin{border-top-left-radius:4px;border-top-right-radius:2px}.main-table tbody>tr.checked.row-check-begin>td:first-child:before{border-top-left-radius:4px}.main-table tbody>tr.checked.row-check-end{border-bottom-right-radius:2px;border-bottom-left-radius:4px}.main-table tbody>tr.checked.row-check-end>td:first-child:before{border-bottom-left-radius:4px}.main-table .checkbox-primary{display:inline-block;line-height:20px}.main-table .checkbox-primary label{margin:0}.main-table .table{margin:0}.table-header{padding:4px 0 12px}.table-header .table-statistic{color:#838a9d}.table-header .table-statistic strong{font-size:15px;color:#3c4353}.table-header .btn-toolbar{margin-top:-28px}.table-header.fixed-right{position:relative;z-index:5;padding:0}.table-header.fixed-right>.btn-toolbar{position:absolute;top:0;right:0;z-index:1;padding:1px;margin:0;background:#fff;border-radius:4px}.table-header.fixed-right>.btn-toolbar .btn{opacity:.65}.table-header.fixed-right>.btn-toolbar .btn:hover{opacity:1}.table-footer{position:relative;min-height:40px;padding:6px 15px;background:#fff;border-radius:0 0 4px 4px}.body-modal .table-footer{margin-bottom:20px}.talbe-lg+.table-footer{padding:11px 15px}.table-footer .btn-toolbar,.table-footer .checkbox-primary{float:left}.table-footer .btn-toolbar+.btn-toolbar{margin-left:8px}.table-footer .checkbox-primary{margin:5px 20px 0 0}.table-footer .checkbox-primary.checked label:after{border-color:#00da88!important}.table-footer .btn{padding:3px 10px;line-height:20px}.table-footer .pager{position:absolute;top:0;right:0;z-index:4;height:40px;padding:6px 5px 6px 10px;margin:0;background:#fff;opacity:1;-webkit-transition:opacity .4s;-o-transition:opacity .4s;transition:opacity .4s}.table-footer .pager:before{position:absolute;top:0;bottom:0;left:-50px;display:block;width:50px;content:' ';background:-webkit-gradient(linear,left top,right top,from(rgba(255,255,255,0)),to(#fff));background:-webkit-linear-gradient(left,rgba(255,255,255,0) 0,#fff 100%);background:-o-linear-gradient(left,rgba(255,255,255,0) 0,#fff 100%);background:linear-gradient(to right,rgba(255,255,255,0) 0,#fff 100%)}.table-footer .pager .btn,.table-footer .pager>li>.pager-item,.table-footer .pager>li>.pager-label{color:#838a9d;background:0 0;border-color:transparent}.table-footer .pager .btn,.table-footer .pager>li>a{border-radius:3px}.table-footer .pager .btn:hover,.table-footer .pager>li>a:hover{background:rgba(0,0,0,.1)}.table-footer .pager>li.disabled>a.pager-item{opacity:1}.table-footer .form-control{height:28px;padding:3px 8px}.table-footer .table-statistic{position:relative;z-index:2;float:left;padding-right:30px;line-height:28px;color:#838a9d;background:#fff}.table-footer .table-statistic:hover{z-index:4}.table-footer .table-statistic:hover+.pager{z-index:2;opacity:.3}.table-footer .btn-toolbar+.table-statistic{margin-left:10px}.table-footer .text{line-height:28px}.table-footer.fixed-footer{position:fixed;z-index:10;margin:0;background:rgba(75,75,75,.85);border-top-color:transparent}.table-footer.fixed-footer .checkbox-primary label{color:#fff}.table-footer.fixed-footer .checkbox-primary label:after{border-color:rgba(255,255,255,.8)}.table-footer.fixed-footer .table-statistic{color:#fff;background:#666}.table-footer.fixed-footer .pager{background:#666}.table-footer.fixed-footer .pager:before{background:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,0)),to(#666));background:-webkit-linear-gradient(left,rgba(0,0,0,0) 0,#666 100%);background:-o-linear-gradient(left,rgba(0,0,0,0) 0,#666 100%);background:linear-gradient(to right,rgba(0,0,0,0) 0,#666 100%)}.table-footer.fixed-footer .pager .btn,.table-footer.fixed-footer .pager>li>.pager-item,.table-footer.fixed-footer .pager>li>.pager-label{color:#fff}.table-footer.fixed-footer .pager .btn:hover,.table-footer.fixed-footer .pager>li>a:hover{background:rgba(255,255,255,.3)}.table-footer.fixed-footer .pager>li.disabled>a.pager-item{opacity:.5}.table-actions{width:0;height:28px;visibility:hidden;opacity:0;-webkit-transition:opacity cubic-bezier(.175,.885,.32,1) .8s;-o-transition:opacity cubic-bezier(.175,.885,.32,1) .8s;transition:opacity cubic-bezier(.175,.885,.32,1) .8s}.table-actions.show-always{width:auto;pointer-events:none;cursor:not-allowed;visibility:visible;opacity:.75}.has-row-checked .table-actions{width:auto;pointer-events:auto!important;cursor:default;visibility:visible;opacity:1}.table-lg tbody>tr>td{padding:9px 10px}.table-lg tbody>tr>td .btn+.btn{margin-left:5px}.table.has-sort-head thead>tr>th{padding-right:0}.table.has-sort-head thead>tr>th>a{position:relative;display:inline-block;padding-right:16px;color:#3c4353}.table.has-sort-head thead>tr>th>a:after,.table.has-sort-head thead>tr>th>a:before{position:absolute;top:0;right:0;font-family:ZentaoIcon;font-size:18px;font-size:14px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;line-height:30px;color:#3c4353;text-transform:none;content:"\f0de";opacity:.5;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.table.has-sort-head thead>tr>th>a:after{content:"\f0dd"}.table.has-sort-head thead>tr>th>a.sort-down,.table.has-sort-head thead>tr>th>a.sort-up{color:#000;text-decoration:none}.table.has-sort-head thead>tr>th>a:hover,.table.has-sort-head thead>tr>th>a:hover:after,.table.has-sort-head thead>tr>th>a:hover:before{color:#0c64eb;opacity:1}.table.has-sort-head thead>tr>th>a.sort-down:after,.table.has-sort-head thead>tr>th>a.sort-up:before{color:#000;opacity:1}.head-fixed .datatable-head-span .table,.table.fixed-header-copy{z-index:10;color:#fff;background:rgba(75,75,75,.85)}.head-fixed .datatable-head-span .table thead>tr>th,.table.fixed-header-copy thead>tr>th{color:#eee}.head-fixed .datatable-head-span .table thead>tr>th>a,.table.fixed-header-copy thead>tr>th>a{color:#eee}.head-fixed .datatable-head-span .table thead>tr>th>a:hover,.table.fixed-header-copy thead>tr>th>a:hover{color:#fff}.head-fixed .datatable-head-span .table thead>tr>th>a:after,.head-fixed .datatable-head-span .table thead>tr>th>a:before,.table.fixed-header-copy thead>tr>th>a:after,.table.fixed-header-copy thead>tr>th>a:before{color:#eee}.head-fixed .datatable-head-span .table thead>tr>th>a.sort-down,.head-fixed .datatable-head-span .table thead>tr>th>a.sort-down:after,.head-fixed .datatable-head-span .table thead>tr>th>a.sort-up,.head-fixed .datatable-head-span .table thead>tr>th>a.sort-up:before,.head-fixed .datatable-head-span .table thead>tr>th>a:hover,.head-fixed .datatable-head-span .table thead>tr>th>a:hover:after,.head-fixed .datatable-head-span .table thead>tr>th>a:hover:before,.table.fixed-header-copy thead>tr>th>a.sort-down,.table.fixed-header-copy thead>tr>th>a.sort-down:after,.table.fixed-header-copy thead>tr>th>a.sort-up,.table.fixed-header-copy thead>tr>th>a.sort-up:before,.table.fixed-header-copy thead>tr>th>a:hover,.table.fixed-header-copy thead>tr>th>a:hover:after,.table.fixed-header-copy thead>tr>th>a:hover:before{color:#fff}.head-fixed .datatable-head-span .table .checkbox-primary,.table.fixed-header-copy .checkbox-primary{z-index:1}.head-fixed .datatable-head-span .table .checkbox-primary label,.table.fixed-header-copy .checkbox-primary label{color:#fff}.head-fixed .datatable-head-span .table .checkbox-primary label:after,.table.fixed-header-copy .checkbox-primary label:after{border-color:rgba(255,255,255,.8)}.head-fixed .datatable-head-span .table .checkbox-primary.checked label:after,.table.fixed-header-copy .checkbox-primary.checked label:after{border-color:#00da88!important}.table-data{margin:0;table-layout:fixed}.table-data tbody>tr>td,.table-data tbody>tr>th{padding:6px 8px;word-break:break-all;border:none}.table-data tbody>tr>th{width:70px;padding-left:0;font-weight:400;color:#838a9d;text-align:right;vertical-align:middle}.table-data tbody>tr>td{padding-right:0}.table-data tbody>tr>td>a{color:#0c60e1}.table-data tbody>tr>td>a:not(.btn):visited{color:#082999}.table-data tbody>tr>td>a:hover,.table-data tbody>tr>td>a:visited:hover{color:#0c64eb}.table-data ol,.table-data ul{margin:0}.fixed-head-table{background:rgba(0,0,0,.7);border-bottom:1px solid #ddd}.fixed-head-table thead>tr>th{color:#fff}.table-empty-tip{padding:80px 10px;text-align:center;background:#fff}.not-firefox .table-grouped>tbody>tr>td.c-side{background:#fff!important}.table-grouped .group-toggle{cursor:pointer}.table-grouped .group-toggle.group-summary{border-top:10px solid #efefef}.table-grouped tbody>tr>td:first-child,.table-grouped thead>tr>th:first-child{padding-left:8px}.group-expand-all,.table-group-collapsed .group-collapse-all{display:none}.table-group-collapsed .group-expand-all{display:inline-block}.table-auto{table-layout:auto}.datatable .table>tbody>tr.checked.hover>td,.datatable .table>tbody>tr.checked>td.col-hover{background:#ffebbc}body.has-fixed-footer{padding-bottom:60px}.table.with-footer-fixed{margin-bottom:20px}.article-content{overflow:auto}.article-content img{margin-top:0}.article-content table{margin:10px 0}.article-content table td,.article-content table th{border:1px solid #cbd0db}.article-content table th{background:#eee}.article-content,.article>.content{word-wrap:break-word}.detail{padding:10px 0;margin:0 10px}.detail+.detail{padding-top:25px;border-top:1px solid #eee}.detail-title{font-size:14px;font-weight:700;line-height:20px}.detail-title>.pull-right{position:relative;top:-8px}h2.detail-title{margin:0;font-size:15px;font-weight:700}h2.detail-title .label,h2.detail-title .label-id{position:relative;top:-1px}.detail-content{padding:0;margin-top:10px}.detail-content em{font-style:normal;color:#3c4353}.detail-content .list-unstyled>li+li{margin-top:5px}.side-col .detail-content{padding-left:0}details.detail{padding:10px 0}details.detail summary{position:relative;cursor:pointer;outline:0}details.detail summary::-webkit-details-marker{display:none}details.detail summary:after{position:absolute;top:0;right:0;font-family:ZentaoIcon;font-size:18px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;text-transform:none;content:"\e316";opacity:.4;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}details.detail[open] summary:after{content:"\e313"}.files-list{padding-left:0;list-style:none}.files-list>li>a{display:block;line-height:24px}.files-list>li>a>.icon{display:inline-block;margin-right:5px;opacity:.7}.files-list>li>a:hover{color:#0c64eb}.files-list>li>.right-icon{opacity:0;-webkit-transition:opacity .2s;-o-transition:opacity .2s;transition:opacity .2s}.files-list>li:hover>.right-icon{opacity:1}.histories-list{padding-left:15px;margin-bottom:0}.histories-list .btn-mini{position:relative;top:1px}.histories-list>li{position:relative}.histories-list>li+li{margin-top:5px}.histories-list>li strong{color:#3c4353}.histories-list .comment,.histories-list .show-form .comment-edit-form{padding:5px 5px 5px 10px;margin:5px 0 0;background-color:rgba(0,0,0,.025);border:1px solid #eee}.histories-list .btn-edit-comment{position:absolute;top:28px;right:2px}.histories-list .comment-edit-form,.histories-list .show-form .btn-edit-comment,.histories-list .show-form .comment{display:none}.histories-list .show-form .comment-edit-form{display:block;padding:10px;border:1px solid #eee}.histories .btn-mini{width:16px;min-width:16px;height:16px;overflow:hidden;line-height:16px;color:#cbd0db;vertical-align:-8%;border-radius:1px}.histories .btn-mini>.icon{position:relative;top:-2px;left:-2px}.histories .btn-mini:focus,.histories .btn-mini:hover{color:#0c64eb;border-color:#0c64eb}.histories .show-changes .btn-expand>.icon:before{content:"\e926"}.histories .btn-strip{display:none}.histories .show-changes .btn-strip{display:inline-block}.history-changes{display:none;padding:5px;margin-bottom:-5px;margin-left:5px;font-size:12px;line-height:20px}.history-changes blockquote{padding:5px 5px 5px 10px;margin:5px 0 0;font-size:12px;background-color:rgba(0,0,0,.05);border-left:3px solid #eee}.history-changes blockquote.original{display:none}.show-changes .history-changes,.show-original .history-changes blockquote.original{display:block}.show-original .history-changes blockquote.textdiff{display:none}.syntaxhighlighter{overflow:auto}.search-list{min-width:200px;max-width:300px;padding:0}.search-list .search-box{float:none;width:auto;margin:10px}.search-list .search-box .icon-search{opacity:.5}.search-list .list-group{max-height:248px;padding:5px 10px;margin:5px 0}.dropup .search-list .search-box+.list-group{height:171px;padding-top:0}.search-list .search-input{height:30px}.search-list .input-control-icon-right{height:28px;line-height:28px}.list-group{overflow-y:auto}.list-group>a{display:block;padding:2px 10px 2px 5px;overflow:hidden;line-height:20px;text-overflow:ellipsis;white-space:nowrap;border-radius:4px}.list-group>a+a{margin-top:5px}.list-group>a>.icon{display:inline-block;margin-right:3px;opacity:.5}.list-group>a.selected{color:#e9f2fb;background-color:#0c64eb}.list-group>a.active{color:#0c64eb;background-color:#e9f2fb}.list-group>a.active:hover,.list-group>a:hover{color:#fff;background-color:#0c64eb}.list-group>.heading{padding:2px 5px;line-height:20px;color:#838a9d}.list-group>a+.heading{margin-top:4px}.dropup .search-box-sink{padding-top:5px;padding-bottom:45px}.dropup .search-box-sink .search-box{position:absolute;right:10px;bottom:10px;left:10px;margin:0}.dropup .search-box-sink .search-box+.list-group{height:auto;max-height:171px}#dropMenu>.search-box{max-width:188px}#dropMenu .input-control-icon-left{top:0}#dropMenu .list-group{width:199px;max-width:199px;max-height:300px;padding-top:0}#dropMenu .table-row .list-group{margin:0 -10px}#dropMenu .col-right{display:none}#dropMenu .col-left{width:100%}#dropMenu .col-left .list-group{max-height:250px;margin-bottom:35px}#dropMenu .col-footer{position:absolute;bottom:10px;left:10px;width:180px;padding-top:10px;padding-left:5px;margin-top:5px;border-top:1px solid #eee}#dropMenu .col-footer>a{opacity:.8}#dropMenu .col-footer>a:hover{opacity:1}#dropMenu.show-right-col{width:402px;max-width:402px}#dropMenu.show-right-col>.list-group{width:400px;max-width:400px}#dropMenu.show-right-col .col-left,#dropMenu.show-right-col .col-right{display:table-cell;width:50%}#dropMenu.show-right-col .col-left>.list-group{width:200px;max-width:200px;margin-right:0}#dropMenu.show-right-col .col-right{border-left:1px solid #eee}#dropMenu.show-right-col .col-right>.list-group{width:199px;max-height:285px;margin:0}#dropMenu.show-right-col .col-right>.list-group>a{opacity:.7}#dropMenu.show-right-col .col-right>.list-group>a:hover{opacity:1}#dropMenu.show-right-col .toggle-right-col>.icon-angle-right:before{content:"\e314"}#dropMenu.has-search-text{width:200px;margin-bottom:35px}#dropMenu.has-search-text>.list-group>.table-row{display:block}#dropMenu.has-search-text>.list-group>.table-row>.table-col{display:block}#dropMenu.has-search-text .pull-right.toggle-right-col{display:none}#dropMenu.has-search-text .col-left .list-group{margin-bottom:0}#dropMenu.has-search-text .col-right{margin-left:-10px}#dropMenu.has-search-text .col-right .list-group{margin-bottom:35px}#dropMenu.has-search-text .col-right .list-group>a{opacity:.7}#dropMenu.has-search-text>a{opacity:.7}.release-path{overflow:hidden}.release-line{display:table;width:100%;padding:0;table-layout:fixed}.release-line>li{display:table-cell;list-style:none}.release-line>li>a{position:relative;display:block}.release-line>li>a:before{position:absolute;left:0;display:block;width:13px;height:13px;content:' ';background:#fff;border:2px solid #838a9d;border-radius:50%}.release-line>li>a:after{position:absolute;left:5px;display:block;width:2px;height:30px;content:' ';background:#cbe0f6}.release-line>li>a>.icon{position:absolute;left:4px;font-size:24px}.release-line>li>a .title{display:block;font-size:14px;white-space:nowrap}.release-line>li>a .date,.release-line>li>a .info{display:block;max-height:18px;overflow:hidden;font-size:12px;color:#838a9d;text-overflow:ellipsis;white-space:nowrap}.release-line>li>a:hover:before{background-color:#e9f2fb}.release-line>li>a:hover:after{background-color:#838a9d}.release-line>li>a:hover .title{color:#0c64eb}.release-line>li>a:hover .date,.release-line>li>a:hover .info{color:#838a9d}.release-line>li:nth-child(odd){padding-top:80px;vertical-align:top}.release-line>li:nth-child(odd)>a{height:85px;padding-top:36px;border-top:5px solid #cbe0f6}.release-line>li:nth-child(odd)>a:before{top:-9px}.release-line>li:nth-child(odd)>a:after{top:6px}.release-line>li:nth-child(odd)>a>.icon{top:-26px}.release-line>li:nth-child(even){padding-bottom:80px;vertical-align:bottom}.release-line>li:nth-child(even)>a{height:85px;padding-bottom:36px;border-bottom:5px solid #cbe0f6}.release-line>li:nth-child(even)>a:before{bottom:-9px}.release-line>li:nth-child(even)>a:after{bottom:6px}.release-line>li:nth-child(even)>a>.icon{bottom:-2px}.release-line>li:last-child>a{border-color:transparent}.release-line>li.active>a:before{border-color:#0c64eb}.release-line>li+li>a>.date,.release-line>li+li>a>.info,.release-line>li+li>a>.title{position:relative;left:-36%}#footer{position:fixed;right:0;bottom:0;left:0;z-index:1010;height:40px;background:#fff;border-top:1px solid #eff1f7}#footer .breadcrumb{padding:10px 0;margin:0}#footer .breadcrumb>li{max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#footer .breadcrumb>.active,#footer .breadcrumb>li>a{color:#838a9e}#footer .breadcrumb>.active:hover,#footer .breadcrumb>li>a:hover{color:#16a8f8}#footer .breadcrumb>li+li:before{content:'>'}#footer>.container{padding:0 20px}@media (min-width:1400px){#footer>.container{padding:0 40px}}#poweredBy{position:absolute;top:4px;right:0;padding:5px 10px}#poweredBy .icon-zentao{color:#0097fd}#poweredBy a{color:#3c4353}#poweredBy a:hover{color:#0c64eb}#poweredBy a:hover .icon-zentao{color:#0c64eb}#poweredBy a.text-important{color:#bd7b46}#poweredBy a.text-important:hover{color:#ff5d5d}#poweredBy a.text-primary{color:#0c64eb}#poweredBy a.text-primary:hover{color:#16a8f8}#poweredBy #aiux{color:#cbd0dc}#noticeBox .alert{-webkit-box-shadow:rgba(0,0,0,.15) 0 3px 10px,rgba(0,0,0,.25) 0 3px 10px;box-shadow:rgba(0,0,0,.15) 0 3px 10px,rgba(0,0,0,.25) 0 3px 10px} \ No newline at end of file From dda3b52de064340901a4c6de3b049336d7591831 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Fri, 25 Jan 2019 16:13:58 +0800 Subject: [PATCH 143/442] * finish task #5221. --- module/upgrade/control.php | 4 ++++ module/upgrade/js/common.js | 4 ++++ module/upgrade/lang/zh-cn.php | 2 +- module/upgrade/model.php | 2 +- 4 files changed, 10 insertions(+), 2 deletions(-) diff --git a/module/upgrade/control.php b/module/upgrade/control.php index bd08951aeb..bb35f51241 100644 --- a/module/upgrade/control.php +++ b/module/upgrade/control.php @@ -57,6 +57,8 @@ class upgrade extends control */ public function backup() { + $this->session->set('upgrading', true); + $this->view->title = $this->lang->upgrade->common; $this->display(); } @@ -166,6 +168,7 @@ class upgrade extends control @unlink($this->app->getAppRoot() . 'www/install.php'); @unlink($this->app->getAppRoot() . 'www/upgrade.php'); + unset($_SESSION['upgrading']); } } @@ -245,6 +248,7 @@ class upgrade extends control */ public function ajaxUpdateFile($type = '', $lastID = 0) { + set_time_limit(0); $result = $this->upgrade->updateFileObjectID($type, $lastID); $response = array(); if($result['type'] == 'finish') diff --git a/module/upgrade/js/common.js b/module/upgrade/js/common.js index e69de29bb2..a05dd6787d 100644 --- a/module/upgrade/js/common.js +++ b/module/upgrade/js/common.js @@ -0,0 +1,4 @@ +$(function() +{ + setTimeout('setPing()', 1000 * 60 * 10); +}); diff --git a/module/upgrade/lang/zh-cn.php b/module/upgrade/lang/zh-cn.php index d70be49449..1b357beb81 100644 --- a/module/upgrade/lang/zh-cn.php +++ b/module/upgrade/lang/zh-cn.php @@ -35,7 +35,7 @@ $lang->upgrade->setStatusFile = '

          升级之前请先完成下面的操
        • %s
        • 或者删掉"%s" 这个文件 ,重新创建一个ok.txt文件,不需要内容。
        • -

          我已经仔细阅读上面提示且完成上述工作,继续更新

          '; +

          我已经仔细阅读上面提示且完成上述工作,继续更新

          '; $lang->upgrade->selectVersion = '选择版本'; $lang->upgrade->continue = '继续'; $lang->upgrade->noteVersion = "务必选择正确的版本,否则会造成数据丢失。"; diff --git a/module/upgrade/model.php b/module/upgrade/model.php index 2f0a5ab8a0..12889a3ed3 100644 --- a/module/upgrade/model.php +++ b/module/upgrade/model.php @@ -2220,7 +2220,7 @@ class upgradeModel extends model */ public function checkSafeFile() { - if($this->app->getModuleName() == 'upgrade' and $this->app->getMethodName() == 'ajaxupdatefile') return false; + if($this->app->getModuleName() == 'upgrade' and $this->session->upgrading) return false; $statusFile = $this->app->getAppRoot() . 'www' . DIRECTORY_SEPARATOR . 'ok.txt'; return (!file_exists($statusFile) or (time() - filemtime($statusFile)) > 3600) ? $statusFile : false; } From c995214ff65b9417cbb566b7d55ebd65b7d29e98 Mon Sep 17 00:00:00 2001 From: Catouse Date: Fri, 25 Jan 2019 16:59:57 +0800 Subject: [PATCH 144/442] * fix bug #2379 and finish task #5247. --- lib/base/front/front.class.php | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/lib/base/front/front.class.php b/lib/base/front/front.class.php index a3c1629753..6fbe58ac12 100644 --- a/lib/base/front/front.class.php +++ b/lib/base/front/front.class.php @@ -980,7 +980,15 @@ EOT; static public function reload($window = 'self') { $js = self::start(); - $js .= "$window.location.reload(true);\n"; + // See bug #2379 http://pms.zentao.net/bug-view-2379.html + if($window !== 'self' && $window !== 'window') + { + $js .= "if($window !== window) $window.location.reload(true);\n"; + } + else + { + $js .= "$window.location.reload(true);\n"; + } $js .= self::end(); return $js; } From 1b833386985f504d0e8b00094ef78776fb44aa91 Mon Sep 17 00:00:00 2001 From: chenfeiCF Date: Fri, 25 Jan 2019 18:58:56 +0800 Subject: [PATCH 145/442] * Finish task #5253. --- module/block/model.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/module/block/model.php b/module/block/model.php index 222ca80d9d..c01fc354a2 100644 --- a/module/block/model.php +++ b/module/block/model.php @@ -158,7 +158,11 @@ class blockModel extends model $data = array(); $data['tasks'] = (int)$this->dao->select('count(*) AS count')->from(TABLE_TASK)->where('assignedTo')->eq($this->app->user->account)->andWhere('status')->ne('closed')->andWhere('deleted')->eq(0)->fetch('count'); - $data['bugs'] = (int)$this->dao->select('count(*) AS count')->from(TABLE_BUG)->where('assignedTo')->eq($this->app->user->account)->andWhere('deleted')->eq(0)->fetch('count'); + $data['bugs'] = (int)$this->dao->select('count(*) AS count')->from(TABLE_BUG) + ->where('assignedTo')->eq($this->app->user->account) + ->beginIF(!$this->app->user->admin)->andWhere('project')->in('0,' . $this->app->user->view->projects)->fi() //Fix bug #2373. + ->andWhere('deleted')->eq(0) + ->fetch('count'); $data['stories'] = (int)$this->dao->select('count(*) AS count')->from(TABLE_STORY)->where('assignedTo')->eq($this->app->user->account)->andWhere('deleted')->eq(0)->fetch('count'); $data['projects'] = (int)$this->dao->select('count(*) AS count')->from(TABLE_PROJECT) ->where("(status='wait' or status='doing')") From 23bb5d7f54a3eca75f7ebf64a115bb2ec3b05e7b Mon Sep 17 00:00:00 2001 From: Yagami Date: Mon, 28 Jan 2019 09:37:09 +0800 Subject: [PATCH 146/442] * Finish task #5234. --- module/common/lang/en.php | 2 +- module/common/lang/zh-cn.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/module/common/lang/en.php b/module/common/lang/en.php index 346639860e..5119e2766d 100644 --- a/module/common/lang/en.php +++ b/module/common/lang/en.php @@ -262,7 +262,7 @@ $lang->task = new stdclass(); $lang->build = new stdclass(); $lang->task->menu = $lang->project->menu; $lang->build->menu = $lang->project->menu; -$lang->build->menu->qa = array('link' => 'Test|project|build|projectID=%s', 'subModule' => 'bug,build,testtask', 'alias' => 'build,testtask', 'class' => 'dropdown dropdown-hover'); +$lang->build->menu->qa = array('link' => 'Build|project|build|projectID=%s', 'subModule' => 'bug,build,testtask', 'alias' => 'build,testtask', 'class' => 'dropdown dropdown-hover'); /* QA menu settings. */ $lang->qa = new stdclass(); diff --git a/module/common/lang/zh-cn.php b/module/common/lang/zh-cn.php index f88b2841b0..240b020a93 100644 --- a/module/common/lang/zh-cn.php +++ b/module/common/lang/zh-cn.php @@ -262,7 +262,7 @@ $lang->task = new stdclass(); $lang->build = new stdclass(); $lang->task->menu = $lang->project->menu; $lang->build->menu = $lang->project->menu; -$lang->build->menu->qa = array('link' => '测试|project|build|projectID=%s', 'subModule' => 'bug,build,testtask', 'alias' => 'build,testtask', 'class' => 'dropdown dropdown-hover'); +$lang->build->menu->qa = array('link' => '版本|project|build|projectID=%s', 'subModule' => 'bug,build,testtask', 'alias' => 'build,testtask', 'class' => 'dropdown dropdown-hover'); /* QA视图菜单设置。*/ $lang->qa = new stdclass(); From 97659beb324d1059384fa606819c65fb1b21eb65 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Mon, 28 Jan 2019 10:03:32 +0800 Subject: [PATCH 147/442] * adjust for backup. --- module/backup/control.php | 1 + module/backup/model.php | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/module/backup/control.php b/module/backup/control.php index d3fb75f8a4..67d58a26db 100644 --- a/module/backup/control.php +++ b/module/backup/control.php @@ -30,6 +30,7 @@ class backup extends control { if(!is_writable($this->backupPath)) $this->view->error = sprintf($this->lang->backup->error->noWritable, $this->backupPath); } + if(!is_writable($this->app->getTmpRoot())) $this->view->error = sprintf($this->lang->backup->error->noWritable, $this->app->getTmpRoot()); } /** diff --git a/module/backup/model.php b/module/backup/model.php index b42b44a75e..9cabd4e649 100644 --- a/module/backup/model.php +++ b/module/backup/model.php @@ -283,7 +283,8 @@ class backupModel extends model */ public function getBackupPath() { - return empty($this->config->backup->settingDir) ? $this->app->getTmpRoot() . 'backup' . DS : $this->config->backup->settingDir; + $backupPath = empty($this->config->backup->settingDir) ? $this->app->getTmpRoot() . 'backup' . DS : $this->config->backup->settingDir; + return trim(str_replace('\\', '/', $backupPath), '/') . '/'; } /** From 0906b11d2b823956ee745321b40aa55413fd88b5 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Mon, 28 Jan 2019 10:07:37 +0800 Subject: [PATCH 148/442] * finish task #5241. --- module/bug/control.php | 5 ++++- module/bug/view/view.html.php | 26 ++++++++++++--------- module/story/control.php | 36 ++++++++++++++++-------------- module/story/view/view.html.php | 6 +++++ module/testcase/control.php | 5 ++++- module/testcase/view/view.html.php | 15 ++++++++----- 6 files changed, 59 insertions(+), 34 deletions(-) diff --git a/module/bug/control.php b/module/bug/control.php index 454b49093e..8fde4f0b4d 100644 --- a/module/bug/control.php +++ b/module/bug/control.php @@ -550,6 +550,7 @@ class bug extends control /* Get product info. */ $productID = $bug->product; $productName = $this->products[$productID]; + $branches = $this->session->currentProductType == 'normal' ? array() : $this->loadModel('branch')->getPairs($bug->product); /* Header and positon. */ $this->view->title = "BUG #$bug->id $bug->title - " . $this->products[$productID]; @@ -559,9 +560,11 @@ class bug extends control /* Assign. */ $this->view->productID = $productID; $this->view->productName = $productName; + $this->view->branches = $branches; $this->view->modulePath = $this->tree->getParents($bug->module); + $this->view->bugModule = empty($bug->module) ? '' : $this->tree->getById($bug->module); $this->view->bug = $bug; - $this->view->branchName = $this->session->currentProductType == 'normal' ? '' : $this->loadModel('branch')->getById($bug->branch, $bug->product); + $this->view->branchName = $this->session->currentProductType == 'normal' ? '' : zget($branches, $bug->branch, ''); $this->view->users = $this->user->getPairs('noletter'); $this->view->actions = $this->action->getList('bug', $bugID); $this->view->builds = $this->loadModel('build')->getProductBuildPairs($productID, $branch = 0, $params = ''); diff --git a/module/bug/view/view.html.php b/module/bug/view/view.html.php index 72c51ad4de..3810f677fd 100644 --- a/module/bug/view/view.html.php +++ b/module/bug/view/view.html.php @@ -123,16 +123,22 @@ } else { - foreach($modulePath as $key => $module) - { - $moduleTitle .= $module->name; - if(!common::printLink('bug', 'browse', "productID=$bug->product&branch=$module->branch&browseType=byModule¶m=$module->id", $module->name)) echo $module->name; - if(isset($modulePath[$key + 1])) - { - $moduleTitle .= '/'; - echo $lang->arrow; - } - } + if($bugModule->branch and isset($branches[$bugModule->branch])) + { + $moduleTitle .= $branches[$bugModule->branch] . '/'; + echo $branches[$bugModule->branch] . $lang->arrow; + } + + foreach($modulePath as $key => $module) + { + $moduleTitle .= $module->name; + if(!common::printLink('bug', 'browse', "productID=$bug->product&branch=$module->branch&browseType=byModule¶m=$module->id", $module->name)) echo $module->name; + if(isset($modulePath[$key + 1])) + { + $moduleTitle .= '/'; + echo $lang->arrow; + } + } } $printModule = ob_get_contents(); ob_end_clean(); diff --git a/module/story/control.php b/module/story/control.php index b2704adcbc..cb614ef09c 100644 --- a/module/story/control.php +++ b/module/story/control.php @@ -683,6 +683,7 @@ class story extends control $fromBug = $this->dao->select('id,title')->from(TABLE_BUG)->where('toStory')->eq($storyID)->fetch(); $cases = $this->dao->select('id,title')->from(TABLE_CASE)->where('story')->eq($storyID)->andWhere('deleted')->eq(0)->fetchAll(); $modulePath = $this->tree->getParents($story->module); + $storyModule = empty($story->module) ? '' : $this->tree->getById($story->module); $users = $this->user->getPairs('noletter'); /* Set the menu. */ @@ -699,23 +700,24 @@ class story extends control $position[] = $this->lang->story->common; $position[] = $this->lang->story->view; - $this->view->title = $title; - $this->view->position = $position; - $this->view->product = $product; - $this->view->branches = $product->type == 'normal' ? array() : $this->loadModel('branch')->getPairs($product->id); - $this->view->plan = $plan; - $this->view->bugs = $bugs; - $this->view->fromBug = $fromBug; - $this->view->cases = $cases; - $this->view->story = $story; - $this->view->users = $users; - $this->view->projects = $this->loadModel('project')->getPairs('nocode'); - $this->view->actions = $this->action->getList('story', $storyID); - $this->view->modulePath = $modulePath; - $this->view->version = $version == 0 ? $story->version : $version; - $this->view->preAndNext = $this->loadModel('common')->getPreAndNextObject('story', $storyID); - $this->view->from = $from; - $this->view->param = $param; + $this->view->title = $title; + $this->view->position = $position; + $this->view->product = $product; + $this->view->branches = $product->type == 'normal' ? array() : $this->loadModel('branch')->getPairs($product->id); + $this->view->plan = $plan; + $this->view->bugs = $bugs; + $this->view->fromBug = $fromBug; + $this->view->cases = $cases; + $this->view->story = $story; + $this->view->users = $users; + $this->view->projects = $this->loadModel('project')->getPairs('nocode'); + $this->view->actions = $this->action->getList('story', $storyID); + $this->view->storyModule = $storyModule; + $this->view->modulePath = $modulePath; + $this->view->version = $version == 0 ? $story->version : $version; + $this->view->preAndNext = $this->loadModel('common')->getPreAndNextObject('story', $storyID); + $this->view->from = $from; + $this->view->param = $param; $this->display(); } diff --git a/module/story/view/view.html.php b/module/story/view/view.html.php index 21df901cfa..ce2a273682 100644 --- a/module/story/view/view.html.php +++ b/module/story/view/view.html.php @@ -144,6 +144,12 @@ } else { + if($storyModule->branch and isset($branches[$storyModule->branch])) + { + $moduleTitle .= $branches[$storyModule->branch] . '/'; + echo $branches[$storyModule->branch] . $lang->arrow; + } + foreach($modulePath as $key => $module) { $moduleTitle .= $module->name; diff --git a/module/testcase/control.php b/module/testcase/control.php index 59253bc911..ec65893fe0 100644 --- a/module/testcase/control.php +++ b/module/testcase/control.php @@ -487,6 +487,7 @@ class testcase extends control if(!$case) die(js::error($this->lang->notFound) . js::locate('back')); if($from == 'testtask') $run = $this->loadModel('testtask')->getRunByCase($taskID, $caseID); + $branches = $this->session->currentProductType == 'normal' ? array() : $this->loadModel('branch')->getPairs($case->product); $isLibCase = ($case->lib and empty($case->product)); if($isLibCase) { @@ -508,7 +509,7 @@ class testcase extends control $this->view->position[] = html::a($this->createLink('testcase', 'browse', "productID=$productID"), $this->products[$productID]); $this->view->productName = $this->products[$productID]; - $this->view->branchName = $this->session->currentProductType == 'normal' ? '' : $this->loadModel('branch')->getById($case->branch); + $this->view->branchName = $this->session->currentProductType == 'normal' ? '' : zget($branches, $case->branch, ''); } $caseFails = $this->dao->select('COUNT(*) AS count')->from(TABLE_TESTRESULT) @@ -526,12 +527,14 @@ class testcase extends control $this->view->taskID = $taskID; $this->view->version = $version ? $version : $case->version; $this->view->modulePath = $this->tree->getParents($case->module); + $this->view->caseModule = empty($case->module) ? '' : $this->tree->getById($case->module); $this->view->users = $this->user->getPairs('noletter'); $this->view->actions = $this->loadModel('action')->getList('case', $caseID); $this->view->preAndNext = $this->loadModel('common')->getPreAndNextObject('testcase', $caseID); $this->view->runID = $from == 'testcase' ? 0 : $run->id; $this->view->isLibCase = $isLibCase; $this->view->caseFails = $caseFails; + $this->view->branches = $branches; $this->display(); } diff --git a/module/testcase/view/view.html.php b/module/testcase/view/view.html.php index f8e739eebe..09317f79cc 100644 --- a/module/testcase/view/view.html.php +++ b/module/testcase/view/view.html.php @@ -156,11 +156,16 @@ } else { - foreach($modulePath as $key => $module) - { - if(!common::printLink('testcase', 'browse', "productID=$case->product&branch=$module->branch&browseType=byModule¶m=$module->id", $module->name)) echo $module->name; - if(isset($modulePath[$key + 1])) echo $lang->arrow; - } + if($caseModule->branch and isset($branches[$caseModule->branch])) + { + echo $branches[$caseModule->branch] . $lang->arrow; + } + + foreach($modulePath as $key => $module) + { + if(!common::printLink('testcase', 'browse', "productID=$case->product&branch=$module->branch&browseType=byModule¶m=$module->id", $module->name)) echo $module->name; + if(isset($modulePath[$key + 1])) echo $lang->arrow; + } } ?> From 7c658705e1b3ff56d0f20e360e88663789abda38 Mon Sep 17 00:00:00 2001 From: chenfeiCF Date: Mon, 28 Jan 2019 10:13:12 +0800 Subject: [PATCH 149/442] * Code for task #5218. --- module/upgrade/model.php | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/module/upgrade/model.php b/module/upgrade/model.php index 12889a3ed3..04d8a19877 100644 --- a/module/upgrade/model.php +++ b/module/upgrade/model.php @@ -345,6 +345,13 @@ class upgradeModel extends model $this->execSQL($xuanxuanSql); $this->initXuanxuan(); case '11_0': $this->saveLogs('Execute 11_0'); + case '11_1': + $this->saveLogs('Execute 11_1'); + if(!isset($this->config->isINT) or !($this->config->isINT)) + { + $xuanxuanSql = $this->app->getAppRoot() . 'db' . DS . 'upgradexuanxuan2.3.0.sql'; + $this->execSQL($xuanxuanSql); + } } $this->deletePatch(); @@ -467,6 +474,12 @@ class upgradeModel extends model $confirmContent .= file_get_contents($this->app->getAppRoot() . 'db' . DS . 'upgradexuanxuan2.1.0.sql'); $confirmContent .= file_get_contents($this->app->getAppRoot() . 'db' . DS . 'upgradexuanxuan2.2.0.sql'); case '11_0': + case '11_1': + if(!isset($this->config->isINT) or !($this->config->isINT)) + { + $xuanxuanSql = $this->app->getAppRoot() . 'db' . DS . 'upgradexuanxuan2.3.0.sql'; + $confirmContent .= file_get_contents($xuanxuanSql); + } } return str_replace('zt_', $this->config->db->prefix, $confirmContent); } From 4a3b76de13788cdab1250552c83596a04cc50179 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Mon, 28 Jan 2019 10:17:41 +0800 Subject: [PATCH 150/442] * adjust code for entry visit. --- xuanxuan/module/entry/ext/control/visit.php | 1 - 1 file changed, 1 deletion(-) diff --git a/xuanxuan/module/entry/ext/control/visit.php b/xuanxuan/module/entry/ext/control/visit.php index 608bf4e307..5431b2ede5 100644 --- a/xuanxuan/module/entry/ext/control/visit.php +++ b/xuanxuan/module/entry/ext/control/visit.php @@ -45,7 +45,6 @@ class entry extends control $this->loadModel('user'); $user = $this->dao->select('*')->from(TABLE_USER)->where('id')->eq($this->session->userID)->fetch(); - unset($user->password); $this->user->cleanLocked($user->account); $user->admin = strpos($this->app->company->admins, ",{$user->account},") !== false; From 4a0c061c1f52fc08c55c146f05d1571a4426f2da Mon Sep 17 00:00:00 2001 From: Yagami Date: Mon, 28 Jan 2019 10:18:42 +0800 Subject: [PATCH 151/442] * Finish task #5259. --- module/testcase/js/batchcreate.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/testcase/js/batchcreate.js b/module/testcase/js/batchcreate.js index b63e18724e..8f04e467a7 100644 --- a/module/testcase/js/batchcreate.js +++ b/module/testcase/js/batchcreate.js @@ -3,7 +3,7 @@ $(document).ready(function() removeDitto();//Remove 'ditto' in first row. if($('#batchCreateForm table thead tr th.c-title').width() < 150) $('#batchCreateForm table thead tr th.c-title').width('150'); - $(document).on('mousedown', '.chosen-with-drop', function() + $(document).on('mouseup', '.chosen-with-drop', function() { var select = $(this).prev('select'); var id = $(select).attr('id'); From 9534cd636e51ed12deb4954598ae0aff6324da28 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Mon, 28 Jan 2019 11:08:24 +0800 Subject: [PATCH 152/442] * fix bug #2008. --- module/doc/view/browsebygrid.html.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/doc/view/browsebygrid.html.php b/module/doc/view/browsebygrid.html.php index fafd7fc8d3..12bf76e3a3 100644 --- a/module/doc/view/browsebygrid.html.php +++ b/module/doc/view/browsebygrid.html.php @@ -105,7 +105,7 @@
          docCount . $lang->doc->item;?>
          - id}&objectType=module", "", 'hiddenwin', "title='{$lang->doc->collect}' class='btn btn-link'");?> + id}&objectType=module");?>" title="doc->collect;?>" class='btn btn-link ajaxCollect'>

          From 0e8e7f4bf68b8928594946bc96d7119aa01d914b Mon Sep 17 00:00:00 2001 From: wangyidong Date: Mon, 28 Jan 2019 11:18:48 +0800 Subject: [PATCH 153/442] * fix bug #2008. --- module/doc/view/alllibs.html.php | 2 ++ module/doc/view/alllibsbylist.html.php | 2 ++ module/doc/view/browse.html.php | 6 ++++++ module/doc/view/browsebygrid.html.php | 6 ++++++ module/doc/view/objectlibs.html.php | 2 ++ module/doc/view/objectlibsbylist.html.php | 2 ++ 6 files changed, 20 insertions(+) diff --git a/module/doc/view/alllibs.html.php b/module/doc/view/alllibs.html.php index b0305765d1..e88ea1faf2 100644 --- a/module/doc/view/alllibs.html.php +++ b/module/doc/view/alllibs.html.php @@ -52,7 +52,9 @@
          collector, ',' . $this->app->user->account . ',') !== false ? 'icon-star text-yellow' : 'icon-star-empty';?> collector, ',' . $this->app->user->account . ',') !== false ? $lang->doc->cancelCollection : $lang->doc->collect;?> + id&objectType=doclib");?>" title="" class='btn btn-link ajaxCollect'> + id", "", '', "title='{$lang->edit}' class='btn btn-link iframe'")?> id", "", 'hiddenwin', "title='{$lang->delete}' class='btn btn-link'")?> id&type=doc", "", '', "title='{$lang->doc->manageType}' class='btn btn-link'")?> diff --git a/module/doc/view/alllibsbylist.html.php b/module/doc/view/alllibsbylist.html.php index 7c3658bf54..c84481608e 100644 --- a/module/doc/view/alllibsbylist.html.php +++ b/module/doc/view/alllibsbylist.html.php @@ -47,7 +47,9 @@ collector, ',' . $this->app->user->account . ',') !== false ? 'icon-star text-yellow' : 'icon-star-empty';?> collector, ',' . $this->app->user->account . ',') !== false ? $lang->doc->cancelCollection : $lang->doc->collect;?> + id&objectType=doclib");?>" title="" class='btn btn-link ajaxCollect'> + id", "", '', "title='{$lang->edit}' class='btn btn-link iframe'")?> id", "", 'hiddenwin', "title='{$lang->delete}' class='btn btn-link'")?> id&type=doc", "", '', "title='{$lang->doc->manageType}' class='btn btn-link'")?> diff --git a/module/doc/view/browse.html.php b/module/doc/view/browse.html.php index 681f0cc1ea..a390fffaeb 100644 --- a/module/doc/view/browse.html.php +++ b/module/doc/view/browse.html.php @@ -104,7 +104,9 @@ var browseType = ''; + id&objectType=doclib");?>" title="" class='btn btn-link ajaxCollect'> + id", "", '', "title='{$lang->edit}' class='btn btn-link iframe'")?> id&type=doc", "", '', "title='{$lang->tree->manage}' class='btn btn-link'")?> @@ -138,7 +140,9 @@ var browseType = ''; + id&objectType=module");?>" title="" class='btn btn-link ajaxCollect'> + @@ -153,7 +157,9 @@ var browseType = ''; addedDate, 'm-d H:i');?> editedDate, 'm-d H:i');?> + id&objectType=doc");?>" title="" class='btn btn-link ajaxCollect'> + id", "", '', "title='{$lang->edit}' class='btn btn-link'")?> id", "", 'hiddenwin', "title='{$lang->delete}' class='btn btn-link'")?> diff --git a/module/doc/view/browsebygrid.html.php b/module/doc/view/browsebygrid.html.php index 12bf76e3a3..bb3a3d3565 100644 --- a/module/doc/view/browsebygrid.html.php +++ b/module/doc/view/browsebygrid.html.php @@ -65,7 +65,9 @@
          id, 0) . $lang->doc->item;?>
          + id&objectType=doclib");?>" title="" class='btn btn-link ajaxCollect'> + id", "", '', "title='{$lang->edit}' class='btn btn-link iframe'")?>
          @@ -105,7 +107,9 @@
          docCount . $lang->doc->item;?>
          @@ -120,7 +124,9 @@
          addedBy);?>
          + id}&objectType=doc");?>" title="" class='btn btn-link ajaxCollect'> + id}", "", '', "title='{$lang->edit}' class='btn btn-link'")?> id}", "", '', "title='{$lang->delete}' class='btn btn-link'")?>
          diff --git a/module/doc/view/objectlibs.html.php b/module/doc/view/objectlibs.html.php index eb753835a3..107d2d4f5e 100644 --- a/module/doc/view/objectlibs.html.php +++ b/module/doc/view/objectlibs.html.php @@ -57,7 +57,9 @@ collector, ',' . $this->app->user->account . ',') !== false ? 'icon-star text-yellow' : 'icon-star-empty';?> collector, ',' . $this->app->user->account . ',') !== false ? $lang->doc->cancelCollection : $lang->doc->collect;?>
          + " title="" class='btn btn-link ajaxCollect'> + ", '', "title='{$lang->edit}' class='btn btn-link iframe'")?> main)) common::printLink('doc', 'deleteLib', "libID=$libID", "", 'hiddenwin', "title='{$lang->delete}' class='btn btn-link'")?> ", '', "title='{$lang->doc->manageType}' class='btn btn-link'")?> diff --git a/module/doc/view/objectlibsbylist.html.php b/module/doc/view/objectlibsbylist.html.php index d87a7878c3..6d7b963501 100644 --- a/module/doc/view/objectlibsbylist.html.php +++ b/module/doc/view/objectlibsbylist.html.php @@ -35,7 +35,9 @@ collector, ',' . $this->app->user->account . ',') !== false ? 'icon-star text-yellow' : 'icon-star-empty';?> collector, ',' . $this->app->user->account . ',') !== false ? $lang->doc->cancelCollection : $lang->doc->collect;?> + " title="" class='btn btn-link ajaxCollect'> + ", '', "title='{$lang->edit}' class='btn btn-link iframe'")?> main)) common::printLink('doc', 'deleteLib', "libID=$libID", "", 'hiddenwin', "title='{$lang->delete}' class='btn btn-link'")?> ", '', "title='{$lang->doc->manageType}' class='btn btn-link'")?> From 7b5768932c13f32f833efe19264f48ee1db47735 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Mon, 28 Jan 2019 15:52:17 +0800 Subject: [PATCH 154/442] * fix for backup. --- module/backup/model.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/backup/model.php b/module/backup/model.php index 9cabd4e649..f275209f1c 100644 --- a/module/backup/model.php +++ b/module/backup/model.php @@ -284,7 +284,7 @@ class backupModel extends model public function getBackupPath() { $backupPath = empty($this->config->backup->settingDir) ? $this->app->getTmpRoot() . 'backup' . DS : $this->config->backup->settingDir; - return trim(str_replace('\\', '/', $backupPath), '/') . '/'; + return rtrim(str_replace('\\', '/', $backupPath), '/') . '/'; } /** From cf27f925ac4c95d77f365b059554af2aeaa33b2a Mon Sep 17 00:00:00 2001 From: Yagami Date: Mon, 28 Jan 2019 15:55:56 +0800 Subject: [PATCH 155/442] * Fix project modules. --- module/tree/model.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/module/tree/model.php b/module/tree/model.php index 89d5e06b10..cab96125eb 100644 --- a/module/tree/model.php +++ b/module/tree/model.php @@ -508,7 +508,8 @@ class treeModel extends model $fullTrees = array(); foreach($products as $id => $product) { - $productInfo = $this->product->getById($id); + $linkedStory = $this->dao->select('*')->from(TABLE_PROJECTSTORY)->where('project')->eq($rootID)->andWhere('product')->eq($id)->fetch(); + $productInfo = $this->product->getById($id); /* tree menu. */ $productTree = array(); $branchTrees = array(); @@ -520,7 +521,7 @@ class treeModel extends model ->orderBy('grade desc, type, `order`') ->get(); $stmt = $this->dbh->query($query); - if($branch == 0) $productTree = $this->getDataStructure($stmt, 'task', $projectModules); + if($branch == 0 and $linkedStory) $productTree = $this->getDataStructure($stmt, 'task', $projectModules); if($branch != 0) { $children = $this->getDataStructure($stmt, 'task', $projectModules); From c760545647f1459e42e3e446531f708de10bb0e2 Mon Sep 17 00:00:00 2001 From: chenfeiCF Date: Mon, 28 Jan 2019 16:31:27 +0800 Subject: [PATCH 156/442] * Change version and prepare for upgrade. --- VERSION | 2 +- config/config.php | 2 +- db/standard/zentao11.2.sql | 955 ++++++++++++++++++ db/zentao.sql | 2 +- module/common/lang/en.php | 3 + module/common/lang/zh-tw.php | 7 +- module/common/model.php | 2 +- module/dev/lang/zh-tw.php | 6 + module/git/lang/en.php | 1 - module/git/lang/zh-tw.php | 1 - module/misc/control.php | 249 ----- module/misc/lang/en.php | 25 +- module/misc/lang/zh-cn.php | 25 +- module/misc/lang/zh-tw.php | 25 +- module/svn/lang/en.php | 1 - module/svn/lang/zh-tw.php | 1 - module/testcase/lang/zh-cn.php | 1 - module/upgrade/lang/version.php | 1 + module/upgrade/lang/zh-tw.php | 2 +- module/upgrade/model.php | 1 + xuanxuan/module/chat/ext/lang/en/xuanxuan.php | 3 + .../module/chat/ext/lang/zh-cn/xuanxuan.php | 3 + .../module/group/ext/lang/en/xuanxuan.php | 5 + .../module/group/ext/lang/zh-cn/xuanxuan.php | 5 + .../module/message/ext/control/notify.php | 43 - .../module/message/ext/lang/en/xuanxuan.php | 4 - .../message/ext/lang/zh-cn/xuanxuan.php | 4 - .../misc/ext/control/ajaxgetclientpackage.php | 82 ++ .../misc/ext/control/ajaxgetpackagesize.php | 29 + .../misc/ext/control/ajaxsetclientconfig.php | 54 + .../misc/ext/control/downloadclient.php | 100 ++ xuanxuan/module/misc/ext/lang/en/xuanxuan.php | 22 + .../module/misc/ext/lang/zh-cn/xuanxuan.php | 23 + 33 files changed, 1311 insertions(+), 378 deletions(-) create mode 100644 db/standard/zentao11.2.sql delete mode 100644 xuanxuan/module/message/ext/control/notify.php create mode 100644 xuanxuan/module/misc/ext/control/ajaxgetclientpackage.php create mode 100644 xuanxuan/module/misc/ext/control/ajaxgetpackagesize.php create mode 100644 xuanxuan/module/misc/ext/control/ajaxsetclientconfig.php create mode 100644 xuanxuan/module/misc/ext/control/downloadclient.php create mode 100644 xuanxuan/module/misc/ext/lang/en/xuanxuan.php create mode 100644 xuanxuan/module/misc/ext/lang/zh-cn/xuanxuan.php diff --git a/VERSION b/VERSION index 3ab8e9b749..257b829d27 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -11.1.stable +11.2.stable diff --git a/config/config.php b/config/config.php index cade32ee6b..487ba25ffd 100644 --- a/config/config.php +++ b/config/config.php @@ -16,7 +16,7 @@ if(!class_exists('config')){class config{}} if(!function_exists('getWebRoot')){function getWebRoot(){}} /* 基本设置。Basic settings. */ -$config->version = '11.1'; // ZenTaoPHP的版本。 The version of ZenTaoPHP. Don't change it. +$config->version = '11.2'; // ZenTaoPHP的版本。 The version of ZenTaoPHP. Don't change it. $config->charset = 'UTF-8'; // ZenTaoPHP的编码。 The encoding of ZenTaoPHP. $config->cookieLife = time() + 2592000; // Cookie的生存时间。The cookie life time. $config->timezone = 'Asia/Shanghai'; // 时区设置。 The time zone setting, for more see http://www.php.net/manual/en/timezones.php. diff --git a/db/standard/zentao11.2.sql b/db/standard/zentao11.2.sql new file mode 100644 index 0000000000..d99f028edc --- /dev/null +++ b/db/standard/zentao11.2.sql @@ -0,0 +1,955 @@ +DROP TABLE IF EXISTS `zt_action`; +CREATE TABLE `zt_action` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `objectType` varchar(30) NOT NULL DEFAULT '', + `objectID` mediumint(8) unsigned NOT NULL DEFAULT '0', + `product` varchar(255) NOT NULL, + `project` mediumint(9) NOT NULL, + `actor` varchar(30) NOT NULL DEFAULT '', + `action` varchar(30) NOT NULL DEFAULT '', + `date` datetime NOT NULL, + `comment` text NOT NULL, + `extra` text NOT NULL, + `read` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `date` (`date`), + KEY `actor` (`actor`), + KEY `project` (`project`), + KEY `objectID` (`objectID`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +DROP TABLE IF EXISTS `zt_block`; +CREATE TABLE `zt_block` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `module` varchar(20) NOT NULL, + `title` varchar(100) NOT NULL, + `source` varchar(20) NOT NULL, + `block` varchar(20) NOT NULL, + `params` text NOT NULL, + `order` tinyint(3) unsigned NOT NULL DEFAULT '0', + `grid` tinyint(3) unsigned NOT NULL DEFAULT '0', + `height` smallint(5) unsigned NOT NULL DEFAULT '0', + `hidden` tinyint(1) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `accountModuleOrder` (`account`,`module`,`order`), + KEY `account` (`account`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +DROP TABLE IF EXISTS `zt_branch`; +CREATE TABLE `zt_branch` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `name` varchar(255) NOT NULL, + `order` smallint(5) unsigned NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +DROP TABLE IF EXISTS `zt_bug`; +CREATE TABLE `zt_bug` ( + `id` mediumint(8) NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` mediumint(8) unsigned NOT NULL DEFAULT '0', + `project` mediumint(8) unsigned NOT NULL DEFAULT '0', + `plan` mediumint(8) unsigned NOT NULL DEFAULT '0', + `story` mediumint(8) unsigned NOT NULL DEFAULT '0', + `storyVersion` smallint(6) NOT NULL DEFAULT '1', + `task` mediumint(8) unsigned NOT NULL DEFAULT '0', + `toTask` mediumint(8) unsigned NOT NULL DEFAULT '0', + `toStory` mediumint(8) NOT NULL DEFAULT '0', + `title` varchar(255) NOT NULL, + `keywords` varchar(255) NOT NULL, + `severity` tinyint(4) NOT NULL DEFAULT '0', + `pri` tinyint(3) unsigned NOT NULL, + `type` varchar(30) NOT NULL DEFAULT '', + `os` varchar(30) NOT NULL DEFAULT '', + `browser` varchar(30) NOT NULL DEFAULT '', + `hardware` varchar(30) NOT NULL, + `found` varchar(30) NOT NULL DEFAULT '', + `steps` text NOT NULL, + `status` enum('active','resolved','closed') NOT NULL DEFAULT 'active', + `color` char(7) NOT NULL, + `confirmed` tinyint(1) NOT NULL DEFAULT '0', + `activatedCount` smallint(6) NOT NULL, + `activatedDate` datetime NOT NULL, + `mailto` text, + `openedBy` varchar(30) NOT NULL DEFAULT '', + `openedDate` datetime NOT NULL, + `openedBuild` varchar(255) NOT NULL, + `assignedTo` varchar(30) NOT NULL DEFAULT '', + `assignedDate` datetime NOT NULL, + `deadline` date NOT NULL, + `resolvedBy` varchar(30) NOT NULL DEFAULT '', + `resolution` varchar(30) NOT NULL DEFAULT '', + `resolvedBuild` varchar(30) NOT NULL DEFAULT '', + `resolvedDate` datetime NOT NULL, + `closedBy` varchar(30) NOT NULL DEFAULT '', + `closedDate` datetime NOT NULL, + `duplicateBug` mediumint(8) unsigned NOT NULL, + `linkBug` varchar(255) NOT NULL, + `case` mediumint(8) unsigned NOT NULL, + `caseVersion` smallint(6) NOT NULL DEFAULT '1', + `result` mediumint(8) unsigned NOT NULL, + `testtask` mediumint(8) unsigned NOT NULL, + `lastEditedBy` varchar(30) NOT NULL DEFAULT '', + `lastEditedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `project` (`project`), + KEY `status` (`status`), + KEY `plan` (`plan`), + KEY `story` (`story`), + KEY `case` (`case`), + KEY `assignedTo` (`assignedTo`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +DROP TABLE IF EXISTS `zt_build`; +CREATE TABLE `zt_build` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `project` mediumint(8) unsigned NOT NULL DEFAULT '0', + `name` char(150) NOT NULL, + `scmPath` char(255) NOT NULL, + `filePath` char(255) NOT NULL, + `date` date NOT NULL, + `stories` text NOT NULL, + `bugs` text NOT NULL, + `builder` char(30) NOT NULL DEFAULT '', + `desc` text NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `project` (`project`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +DROP TABLE IF EXISTS `zt_burn`; +CREATE TABLE `zt_burn` ( + `project` mediumint(8) unsigned NOT NULL, + `date` date NOT NULL, + `estimate` float NOT NULL, + `left` float NOT NULL, + `consumed` float NOT NULL, + PRIMARY KEY (`project`,`date`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +DROP TABLE IF EXISTS `zt_case`; +CREATE TABLE `zt_case` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `lib` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` mediumint(8) unsigned NOT NULL DEFAULT '0', + `path` mediumint(8) unsigned NOT NULL DEFAULT '0', + `story` mediumint(30) unsigned NOT NULL DEFAULT '0', + `storyVersion` smallint(6) NOT NULL DEFAULT '1', + `title` varchar(255) NOT NULL, + `precondition` text NOT NULL, + `keywords` varchar(255) NOT NULL, + `pri` tinyint(3) unsigned NOT NULL DEFAULT '3', + `type` char(30) NOT NULL DEFAULT '1', + `stage` varchar(255) NOT NULL, + `howRun` varchar(30) NOT NULL, + `scriptedBy` varchar(30) NOT NULL, + `scriptedDate` date NOT NULL, + `scriptStatus` varchar(30) NOT NULL, + `scriptLocation` varchar(255) NOT NULL, + `status` char(30) NOT NULL DEFAULT '1', + `color` char(7) NOT NULL, + `frequency` enum('1','2','3') NOT NULL DEFAULT '1', + `order` tinyint(30) unsigned NOT NULL DEFAULT '0', + `openedBy` char(30) NOT NULL DEFAULT '', + `openedDate` datetime NOT NULL, + `reviewedBy` varchar(255) NOT NULL, + `reviewedDate` date NOT NULL, + `lastEditedBy` char(30) NOT NULL DEFAULT '', + `lastEditedDate` datetime NOT NULL, + `version` tinyint(3) unsigned NOT NULL DEFAULT '0', + `linkCase` varchar(255) NOT NULL, + `fromBug` mediumint(8) unsigned NOT NULL, + `fromCaseID` mediumint(8) unsigned NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + `lastRunner` varchar(30) NOT NULL, + `lastRunDate` datetime NOT NULL, + `lastRunResult` char(30) NOT NULL, + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `story` (`story`), + KEY `module` (`module`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +DROP TABLE IF EXISTS `zt_casestep`; +CREATE TABLE `zt_casestep` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `parent` mediumint(8) unsigned NOT NULL DEFAULT '0', + `case` mediumint(8) unsigned NOT NULL DEFAULT '0', + `version` smallint(3) unsigned NOT NULL DEFAULT '0', + `type` varchar(10) NOT NULL DEFAULT 'step', + `desc` text NOT NULL, + `expect` text NOT NULL, + PRIMARY KEY (`id`), + KEY `case` (`case`), + KEY `version` (`version`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +DROP TABLE IF EXISTS `zt_company`; +CREATE TABLE `zt_company` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` char(120) DEFAULT NULL, + `phone` char(20) DEFAULT NULL, + `fax` char(20) DEFAULT NULL, + `address` char(120) DEFAULT NULL, + `zipcode` char(10) DEFAULT NULL, + `website` char(120) DEFAULT NULL, + `backyard` char(120) DEFAULT NULL, + `guest` enum('1','0') NOT NULL DEFAULT '0', + `admins` char(255) DEFAULT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +DROP TABLE IF EXISTS `zt_config`; +CREATE TABLE `zt_config` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `owner` char(30) NOT NULL DEFAULT '', + `module` varchar(30) NOT NULL, + `section` char(30) NOT NULL DEFAULT '', + `key` char(30) NOT NULL DEFAULT '', + `value` text NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `unique` (`owner`,`module`,`section`,`key`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +DROP TABLE IF EXISTS `zt_cron`; +CREATE TABLE `zt_cron` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `m` varchar(20) NOT NULL, + `h` varchar(20) NOT NULL, + `dom` varchar(20) NOT NULL, + `mon` varchar(20) NOT NULL, + `dow` varchar(20) NOT NULL, + `command` text NOT NULL, + `remark` varchar(255) NOT NULL, + `type` varchar(20) NOT NULL, + `buildin` tinyint(1) NOT NULL DEFAULT '0', + `status` varchar(20) NOT NULL, + `lastTime` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `lastTime` (`lastTime`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +DROP TABLE IF EXISTS `zt_dept`; +CREATE TABLE `zt_dept` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` char(60) NOT NULL, + `parent` mediumint(8) unsigned NOT NULL DEFAULT '0', + `path` char(255) NOT NULL DEFAULT '', + `grade` tinyint(3) unsigned NOT NULL DEFAULT '0', + `order` tinyint(3) unsigned NOT NULL DEFAULT '0', + `position` char(30) NOT NULL DEFAULT '', + `function` char(255) NOT NULL DEFAULT '', + `manager` char(30) NOT NULL DEFAULT '', + PRIMARY KEY (`id`), + KEY `parent` (`parent`), + KEY `path` (`path`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +DROP TABLE IF EXISTS `zt_doc`; +CREATE TABLE `zt_doc` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `project` mediumint(8) unsigned NOT NULL, + `lib` varchar(30) NOT NULL, + `module` varchar(30) NOT NULL, + `title` varchar(255) NOT NULL, + `keywords` varchar(255) NOT NULL, + `type` varchar(30) NOT NULL, + `views` smallint(5) unsigned NOT NULL, + `collector` text NOT NULL, + `addedBy` varchar(30) NOT NULL, + `addedDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `acl` varchar(10) NOT NULL DEFAULT 'open', + `groups` varchar(255) NOT NULL, + `users` text NOT NULL, + `version` smallint(5) unsigned NOT NULL DEFAULT '1', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `project` (`project`), + KEY `lib` (`lib`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +DROP TABLE IF EXISTS `zt_doccontent`; +CREATE TABLE `zt_doccontent` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `doc` mediumint(8) unsigned NOT NULL, + `title` varchar(255) NOT NULL, + `digest` varchar(255) NOT NULL, + `content` text NOT NULL, + `files` text NOT NULL, + `type` varchar(10) NOT NULL, + `version` smallint(5) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `doc_version` (`doc`,`version`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +DROP TABLE IF EXISTS `zt_doclib`; +CREATE TABLE `zt_doclib` ( + `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT, + `type` varchar(30) NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `project` mediumint(8) unsigned NOT NULL, + `name` varchar(60) NOT NULL, + `acl` varchar(10) NOT NULL DEFAULT 'open', + `groups` varchar(255) NOT NULL, + `users` text NOT NULL, + `main` enum('0','1') NOT NULL DEFAULT '0', + `collector` text NOT NULL, + `order` tinyint(5) unsigned NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `project` (`project`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +DROP TABLE IF EXISTS `zt_effort`; +CREATE TABLE `zt_effort` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `user` char(30) NOT NULL DEFAULT '', + `todo` enum('1','0') NOT NULL DEFAULT '1', + `date` date NOT NULL, + `begin` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `end` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `type` enum('1','2','3') NOT NULL DEFAULT '1', + `idvalue` mediumint(8) unsigned NOT NULL DEFAULT '0', + `name` char(30) NOT NULL DEFAULT '', + `desc` char(255) NOT NULL DEFAULT '', + `status` enum('1','2','3') NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + KEY `user` (`user`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +DROP TABLE IF EXISTS `zt_entry`; +CREATE TABLE `zt_entry` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(50) NOT NULL, + `account` varchar(30) NOT NULL DEFAULT '', + `code` varchar(20) NOT NULL, + `key` varchar(32) NOT NULL, + `ip` varchar(100) NOT NULL, + `desc` text NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +DROP TABLE IF EXISTS `zt_extension`; +CREATE TABLE `zt_extension` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(150) NOT NULL, + `code` varchar(30) NOT NULL, + `version` varchar(50) NOT NULL, + `author` varchar(100) NOT NULL, + `desc` text NOT NULL, + `license` text NOT NULL, + `type` varchar(20) NOT NULL DEFAULT 'extension', + `site` varchar(150) NOT NULL, + `zentaoCompatible` varchar(100) NOT NULL, + `installedTime` datetime NOT NULL, + `depends` varchar(100) NOT NULL, + `dirs` mediumtext NOT NULL, + `files` mediumtext NOT NULL, + `status` varchar(20) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `code` (`code`), + KEY `name` (`name`), + KEY `installedTime` (`installedTime`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +DROP TABLE IF EXISTS `zt_file`; +CREATE TABLE `zt_file` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `pathname` char(50) NOT NULL, + `title` char(255) NOT NULL, + `extension` char(30) NOT NULL, + `size` int(10) unsigned NOT NULL DEFAULT '0', + `objectType` char(30) NOT NULL, + `objectID` mediumint(9) NOT NULL, + `addedBy` char(30) NOT NULL DEFAULT '', + `addedDate` datetime NOT NULL, + `downloads` mediumint(8) unsigned NOT NULL DEFAULT '0', + `extra` varchar(255) NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `objectType` (`objectType`), + KEY `objectID` (`objectID`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +DROP TABLE IF EXISTS `zt_group`; +CREATE TABLE `zt_group` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` char(30) NOT NULL, + `role` char(30) NOT NULL DEFAULT '', + `desc` char(255) NOT NULL DEFAULT '', + `acl` text, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +DROP TABLE IF EXISTS `zt_grouppriv`; +CREATE TABLE `zt_grouppriv` ( + `group` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` char(30) NOT NULL DEFAULT '', + `method` char(30) NOT NULL DEFAULT '', + UNIQUE KEY `group` (`group`,`module`,`method`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +DROP TABLE IF EXISTS `zt_history`; +CREATE TABLE `zt_history` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `action` mediumint(8) unsigned NOT NULL DEFAULT '0', + `field` varchar(30) NOT NULL DEFAULT '', + `old` text NOT NULL, + `new` text NOT NULL, + `diff` mediumtext NOT NULL, + PRIMARY KEY (`id`), + KEY `action` (`action`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +DROP TABLE IF EXISTS `zt_lang`; +CREATE TABLE `zt_lang` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `lang` varchar(30) NOT NULL, + `module` varchar(30) NOT NULL, + `section` varchar(30) NOT NULL, + `key` varchar(60) NOT NULL, + `value` text NOT NULL, + `system` enum('0','1') NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + UNIQUE KEY `lang` (`lang`,`module`,`section`,`key`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +DROP TABLE IF EXISTS `zt_log`; +CREATE TABLE `zt_log` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `objectType` varchar(30) NOT NULL, + `objectID` mediumint(8) unsigned NOT NULL, + `action` mediumint(8) unsigned NOT NULL, + `date` datetime NOT NULL, + `url` varchar(255) NOT NULL, + `contentType` varchar(30) NOT NULL, + `data` text NOT NULL, + `result` text NOT NULL, + PRIMARY KEY (`id`), + KEY `objectType` (`objectType`), + KEY `obejctID` (`objectID`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +DROP TABLE IF EXISTS `zt_module`; +CREATE TABLE `zt_module` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `root` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `name` char(60) NOT NULL DEFAULT '', + `parent` mediumint(8) unsigned NOT NULL DEFAULT '0', + `path` char(255) NOT NULL DEFAULT '', + `grade` tinyint(3) unsigned NOT NULL DEFAULT '0', + `order` smallint(5) unsigned NOT NULL DEFAULT '0', + `type` char(30) NOT NULL, + `owner` varchar(30) NOT NULL, + `collector` text NOT NULL, + `short` varchar(30) NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `root` (`root`), + KEY `type` (`type`), + KEY `path` (`path`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +DROP TABLE IF EXISTS `zt_notify`; +CREATE TABLE `zt_notify` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `objectType` varchar(50) NOT NULL, + `objectID` mediumint(8) unsigned NOT NULL, + `action` mediumint(9) NOT NULL, + `toList` varchar(255) NOT NULL, + `ccList` text NOT NULL, + `subject` varchar(255) NOT NULL, + `data` text NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `sendTime` datetime NOT NULL, + `status` varchar(10) NOT NULL DEFAULT 'wait', + `failReason` text NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +DROP TABLE IF EXISTS `zt_product`; +CREATE TABLE `zt_product` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(90) NOT NULL, + `code` varchar(45) NOT NULL, + `line` mediumint(8) NOT NULL, + `type` varchar(30) NOT NULL DEFAULT 'normal', + `status` varchar(30) NOT NULL DEFAULT '', + `desc` text NOT NULL, + `PO` varchar(30) NOT NULL, + `QD` varchar(30) NOT NULL, + `RD` varchar(30) NOT NULL, + `acl` enum('open','private','custom') NOT NULL DEFAULT 'open', + `whitelist` text NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `createdVersion` varchar(20) NOT NULL, + `order` mediumint(8) unsigned NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `order` (`order`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +DROP TABLE IF EXISTS `zt_productplan`; +CREATE TABLE `zt_productplan` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `branch` mediumint(8) unsigned NOT NULL, + `title` varchar(90) NOT NULL, + `desc` text NOT NULL, + `begin` date NOT NULL, + `end` date NOT NULL, + `order` text NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `end` (`end`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +DROP TABLE IF EXISTS `zt_project`; +CREATE TABLE `zt_project` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `isCat` enum('1','0') NOT NULL DEFAULT '0', + `catID` mediumint(8) unsigned NOT NULL, + `type` varchar(20) NOT NULL DEFAULT 'sprint', + `parent` mediumint(8) unsigned NOT NULL DEFAULT '0', + `name` varchar(90) NOT NULL, + `code` varchar(45) NOT NULL, + `begin` date NOT NULL, + `end` date NOT NULL, + `days` smallint(5) unsigned NOT NULL, + `status` varchar(10) NOT NULL, + `statge` enum('1','2','3','4','5') NOT NULL DEFAULT '1', + `pri` enum('1','2','3','4') NOT NULL DEFAULT '1', + `desc` text NOT NULL, + `openedBy` varchar(30) NOT NULL DEFAULT '', + `openedDate` datetime NOT NULL, + `openedVersion` varchar(20) NOT NULL, + `closedBy` varchar(30) NOT NULL DEFAULT '', + `closedDate` datetime NOT NULL, + `canceledBy` varchar(30) NOT NULL DEFAULT '', + `canceledDate` datetime NOT NULL, + `PO` varchar(30) NOT NULL DEFAULT '', + `PM` varchar(30) NOT NULL DEFAULT '', + `QD` varchar(30) NOT NULL DEFAULT '', + `RD` varchar(30) NOT NULL DEFAULT '', + `team` varchar(90) NOT NULL, + `acl` enum('open','private','custom') NOT NULL DEFAULT 'open', + `whitelist` text NOT NULL, + `order` mediumint(8) unsigned NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `parent` (`parent`), + KEY `begin` (`begin`), + KEY `end` (`end`), + KEY `status` (`status`), + KEY `order` (`order`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +DROP TABLE IF EXISTS `zt_projectproduct`; +CREATE TABLE `zt_projectproduct` ( + `project` mediumint(8) unsigned NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `branch` mediumint(8) unsigned NOT NULL, + `plan` mediumint(8) unsigned NOT NULL, + PRIMARY KEY (`project`,`product`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +DROP TABLE IF EXISTS `zt_projectstory`; +CREATE TABLE `zt_projectstory` ( + `project` mediumint(8) unsigned NOT NULL DEFAULT '0', + `product` mediumint(8) unsigned NOT NULL, + `story` mediumint(8) unsigned NOT NULL DEFAULT '0', + `version` smallint(6) NOT NULL DEFAULT '1', + `order` smallint(6) unsigned NOT NULL, + UNIQUE KEY `project` (`project`,`story`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +DROP TABLE IF EXISTS `zt_release`; +CREATE TABLE `zt_release` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `build` mediumint(8) unsigned NOT NULL, + `name` varchar(255) NOT NULL DEFAULT '', + `marker` enum('0','1') NOT NULL DEFAULT '0', + `date` date NOT NULL, + `stories` text NOT NULL, + `bugs` text NOT NULL, + `leftBugs` text NOT NULL, + `desc` text NOT NULL, + `status` varchar(20) NOT NULL DEFAULT 'normal', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `build` (`build`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +DROP TABLE IF EXISTS `zt_score`; +CREATE TABLE `zt_score` ( + `id` bigint(12) unsigned NOT NULL AUTO_INCREMENT, + `account` varchar(30) NOT NULL, + `module` varchar(30) NOT NULL DEFAULT '', + `method` varchar(30) NOT NULL, + `desc` varchar(250) NOT NULL DEFAULT '', + `before` int(11) NOT NULL DEFAULT '0', + `score` int(11) NOT NULL DEFAULT '0', + `after` int(11) NOT NULL DEFAULT '0', + `time` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `account` (`account`), + KEY `model` (`module`), + KEY `method` (`method`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +DROP TABLE IF EXISTS `zt_story`; +CREATE TABLE `zt_story` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` mediumint(8) unsigned NOT NULL DEFAULT '0', + `plan` text, + `source` varchar(20) NOT NULL, + `sourceNote` varchar(255) NOT NULL, + `fromBug` mediumint(8) unsigned NOT NULL DEFAULT '0', + `title` varchar(255) NOT NULL, + `keywords` varchar(255) NOT NULL, + `type` varchar(30) NOT NULL DEFAULT '', + `pri` tinyint(3) unsigned NOT NULL DEFAULT '3', + `estimate` float unsigned NOT NULL, + `status` enum('','changed','active','draft','closed') NOT NULL DEFAULT '', + `color` char(7) NOT NULL, + `stage` enum('','wait','planned','projected','developing','developed','testing','tested','verified','released','closed') NOT NULL DEFAULT 'wait', + `mailto` text, + `openedBy` varchar(30) NOT NULL DEFAULT '', + `openedDate` datetime NOT NULL, + `assignedTo` varchar(30) NOT NULL DEFAULT '', + `assignedDate` datetime NOT NULL, + `lastEditedBy` varchar(30) NOT NULL DEFAULT '', + `lastEditedDate` datetime NOT NULL, + `reviewedBy` varchar(255) NOT NULL, + `reviewedDate` date NOT NULL, + `closedBy` varchar(30) NOT NULL DEFAULT '', + `closedDate` datetime NOT NULL, + `closedReason` varchar(30) NOT NULL, + `toBug` mediumint(9) NOT NULL, + `childStories` varchar(255) NOT NULL, + `linkStories` varchar(255) NOT NULL, + `duplicateStory` mediumint(8) unsigned NOT NULL, + `version` smallint(6) NOT NULL DEFAULT '1', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `status` (`status`), + KEY `assignedTo` (`assignedTo`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +DROP TABLE IF EXISTS `zt_storyspec`; +CREATE TABLE `zt_storyspec` ( + `story` mediumint(9) NOT NULL, + `version` smallint(6) NOT NULL, + `title` varchar(255) NOT NULL, + `spec` text NOT NULL, + `verify` text NOT NULL, + UNIQUE KEY `story` (`story`,`version`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +DROP TABLE IF EXISTS `zt_storystage`; +CREATE TABLE `zt_storystage` ( + `story` mediumint(8) unsigned NOT NULL, + `branch` mediumint(8) unsigned NOT NULL, + `stage` varchar(50) NOT NULL, + KEY `story` (`story`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +DROP TABLE IF EXISTS `zt_suitecase`; +CREATE TABLE `zt_suitecase` ( + `suite` mediumint(8) unsigned NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `case` mediumint(8) unsigned NOT NULL, + `version` smallint(5) unsigned NOT NULL, + UNIQUE KEY `suitecase` (`suite`,`case`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +DROP TABLE IF EXISTS `zt_task`; +CREATE TABLE `zt_task` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `parent` mediumint(8) NOT NULL DEFAULT '0', + `project` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` mediumint(8) unsigned NOT NULL DEFAULT '0', + `story` mediumint(8) unsigned NOT NULL DEFAULT '0', + `storyVersion` smallint(6) NOT NULL DEFAULT '1', + `fromBug` mediumint(8) unsigned NOT NULL DEFAULT '0', + `name` varchar(255) NOT NULL, + `type` varchar(20) NOT NULL, + `pri` tinyint(3) unsigned NOT NULL DEFAULT '0', + `estimate` float unsigned NOT NULL, + `consumed` float unsigned NOT NULL, + `left` float unsigned NOT NULL, + `deadline` date NOT NULL, + `status` enum('wait','doing','done','pause','cancel','closed') NOT NULL DEFAULT 'wait', + `color` char(7) NOT NULL, + `mailto` text, + `desc` text NOT NULL, + `openedBy` varchar(30) NOT NULL, + `openedDate` datetime NOT NULL, + `assignedTo` varchar(30) NOT NULL, + `assignedDate` datetime NOT NULL, + `estStarted` date NOT NULL, + `realStarted` date NOT NULL, + `finishedBy` varchar(30) NOT NULL, + `finishedDate` datetime NOT NULL, + `finishedList` text NOT NULL, + `canceledBy` varchar(30) NOT NULL, + `canceledDate` datetime NOT NULL, + `closedBy` varchar(30) NOT NULL, + `closedDate` datetime NOT NULL, + `closedReason` varchar(30) NOT NULL, + `lastEditedBy` varchar(30) NOT NULL, + `lastEditedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `project` (`project`), + KEY `story` (`story`), + KEY `assignedTo` (`assignedTo`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +DROP TABLE IF EXISTS `zt_taskestimate`; +CREATE TABLE `zt_taskestimate` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `task` mediumint(8) unsigned NOT NULL DEFAULT '0', + `date` date NOT NULL, + `left` float unsigned NOT NULL DEFAULT '0', + `consumed` float unsigned NOT NULL, + `account` char(30) NOT NULL DEFAULT '', + `work` text, + PRIMARY KEY (`id`), + KEY `task` (`task`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +DROP TABLE IF EXISTS `zt_team`; +CREATE TABLE `zt_team` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `root` mediumint(8) unsigned NOT NULL DEFAULT '0', + `type` enum('project','task') NOT NULL DEFAULT 'project', + `account` char(30) NOT NULL DEFAULT '', + `role` char(30) NOT NULL DEFAULT '', + `limited` char(8) NOT NULL DEFAULT 'no', + `join` date NOT NULL DEFAULT '0000-00-00', + `days` smallint(5) unsigned NOT NULL, + `hours` float(2,1) unsigned NOT NULL DEFAULT '0.0', + `estimate` decimal(12,2) unsigned NOT NULL DEFAULT '0.00', + `consumed` decimal(12,2) unsigned NOT NULL DEFAULT '0.00', + `left` decimal(12,2) unsigned NOT NULL DEFAULT '0.00', + `order` tinyint(3) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `team` (`root`,`type`,`account`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +DROP TABLE IF EXISTS `zt_testreport`; +CREATE TABLE `zt_testreport` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `project` mediumint(8) unsigned NOT NULL, + `tasks` varchar(255) NOT NULL, + `builds` varchar(255) NOT NULL, + `title` varchar(255) NOT NULL, + `begin` date NOT NULL, + `end` date NOT NULL, + `owner` char(30) NOT NULL, + `members` text NOT NULL, + `stories` text NOT NULL, + `bugs` text NOT NULL, + `cases` text NOT NULL, + `report` text NOT NULL, + `objectType` varchar(20) NOT NULL, + `objectID` mediumint(8) unsigned NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +DROP TABLE IF EXISTS `zt_testresult`; +CREATE TABLE `zt_testresult` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `run` mediumint(8) unsigned NOT NULL, + `case` mediumint(8) unsigned NOT NULL, + `version` smallint(5) unsigned NOT NULL, + `caseResult` char(30) NOT NULL, + `stepResults` text NOT NULL, + `lastRunner` varchar(30) NOT NULL, + `date` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `case` (`case`), + KEY `version` (`version`), + KEY `run` (`run`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +DROP TABLE IF EXISTS `zt_testrun`; +CREATE TABLE `zt_testrun` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `task` mediumint(8) unsigned NOT NULL DEFAULT '0', + `case` mediumint(8) unsigned NOT NULL DEFAULT '0', + `version` tinyint(3) unsigned NOT NULL DEFAULT '0', + `assignedTo` char(30) NOT NULL DEFAULT '', + `lastRunner` varchar(30) NOT NULL, + `lastRunDate` datetime NOT NULL, + `lastRunResult` char(30) NOT NULL, + `status` char(30) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `task` (`task`,`case`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +DROP TABLE IF EXISTS `zt_testsuite`; +CREATE TABLE `zt_testsuite` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `name` varchar(255) NOT NULL, + `desc` text NOT NULL, + `type` varchar(20) NOT NULL, + `addedBy` char(30) NOT NULL, + `addedDate` datetime NOT NULL, + `lastEditedBy` char(30) NOT NULL, + `lastEditedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL, + PRIMARY KEY (`id`), + KEY `product` (`product`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +DROP TABLE IF EXISTS `zt_testtask`; +CREATE TABLE `zt_testtask` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` char(90) NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `project` mediumint(8) unsigned NOT NULL DEFAULT '0', + `build` char(30) NOT NULL, + `owner` varchar(30) NOT NULL, + `pri` tinyint(3) unsigned NOT NULL DEFAULT '0', + `begin` date NOT NULL, + `end` date NOT NULL, + `mailto` text, + `desc` text NOT NULL, + `report` text NOT NULL, + `status` enum('blocked','doing','wait','done') NOT NULL DEFAULT 'wait', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `build` (`build`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +DROP TABLE IF EXISTS `zt_todo`; +CREATE TABLE `zt_todo` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `date` date NOT NULL, + `begin` smallint(4) unsigned zerofill NOT NULL, + `end` smallint(4) unsigned zerofill NOT NULL, + `type` char(10) NOT NULL, + `cycle` tinyint(3) unsigned NOT NULL DEFAULT '0', + `idvalue` mediumint(8) unsigned NOT NULL DEFAULT '0', + `pri` tinyint(3) unsigned NOT NULL, + `name` char(150) NOT NULL, + `desc` text NOT NULL, + `status` enum('wait','doing','done','closed') NOT NULL DEFAULT 'wait', + `private` tinyint(1) NOT NULL, + `config` varchar(255) NOT NULL, + `assignedTo` varchar(30) NOT NULL DEFAULT '', + `assignedBy` varchar(30) NOT NULL DEFAULT '', + `assignedDate` datetime NOT NULL, + `finishedBy` varchar(30) NOT NULL DEFAULT '', + `finishedDate` datetime NOT NULL, + `closedBy` varchar(30) NOT NULL DEFAULT '', + `closedDate` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `account` (`account`), + KEY `assignedTo` (`assignedTo`), + KEY `finishedBy` (`finishedBy`), + KEY `date` (`date`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +DROP TABLE IF EXISTS `zt_user`; +CREATE TABLE `zt_user` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `dept` mediumint(8) unsigned NOT NULL DEFAULT '0', + `account` char(30) NOT NULL DEFAULT '', + `password` char(32) NOT NULL DEFAULT '', + `role` char(10) NOT NULL DEFAULT '', + `realname` varchar(100) NOT NULL DEFAULT '', + `nickname` char(60) NOT NULL DEFAULT '', + `commiter` varchar(100) NOT NULL, + `avatar` char(30) NOT NULL DEFAULT '', + `birthday` date NOT NULL DEFAULT '0000-00-00', + `gender` enum('f','m') NOT NULL DEFAULT 'f', + `email` char(90) NOT NULL DEFAULT '', + `skype` char(90) NOT NULL DEFAULT '', + `qq` char(20) NOT NULL DEFAULT '', + `yahoo` char(90) NOT NULL DEFAULT '', + `gtalk` char(90) NOT NULL DEFAULT '', + `wangwang` char(90) NOT NULL DEFAULT '', + `mobile` char(11) NOT NULL DEFAULT '', + `phone` char(20) NOT NULL DEFAULT '', + `address` char(120) NOT NULL DEFAULT '', + `zipcode` char(10) NOT NULL DEFAULT '', + `join` date NOT NULL DEFAULT '0000-00-00', + `visits` mediumint(8) unsigned NOT NULL DEFAULT '0', + `ip` char(15) NOT NULL DEFAULT '', + `last` int(10) unsigned NOT NULL DEFAULT '0', + `fails` tinyint(5) NOT NULL DEFAULT '0', + `locked` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `ranzhi` char(30) NOT NULL DEFAULT '', + `score` int(11) NOT NULL DEFAULT '0', + `scoreLevel` int(11) NOT NULL DEFAULT '0', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `account` (`account`), + KEY `dept` (`dept`), + KEY `email` (`email`), + KEY `commiter` (`commiter`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +DROP TABLE IF EXISTS `zt_usercontact`; +CREATE TABLE `zt_usercontact` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `listName` varchar(60) NOT NULL, + `userList` text NOT NULL, + PRIMARY KEY (`id`), + KEY `account` (`account`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +DROP TABLE IF EXISTS `zt_usergroup`; +CREATE TABLE `zt_usergroup` ( + `account` char(30) NOT NULL DEFAULT '', + `group` mediumint(8) unsigned NOT NULL DEFAULT '0', + UNIQUE KEY `account` (`account`,`group`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +DROP TABLE IF EXISTS `zt_userquery`; +CREATE TABLE `zt_userquery` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `module` varchar(30) NOT NULL, + `title` varchar(90) NOT NULL, + `form` text NOT NULL, + `sql` text NOT NULL, + `shortcut` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `account` (`account`), + KEY `module` (`module`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +DROP TABLE IF EXISTS `zt_usertpl`; +CREATE TABLE `zt_usertpl` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `type` char(30) NOT NULL, + `title` varchar(150) NOT NULL, + `content` text NOT NULL, + `public` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `account` (`account`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +DROP TABLE IF EXISTS `zt_userview`; +CREATE TABLE `zt_userview` ( + `account` char(30) NOT NULL, + `products` mediumtext NOT NULL, + `projects` mediumtext NOT NULL, + UNIQUE KEY `account` (`account`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +DROP TABLE IF EXISTS `zt_webhook`; +CREATE TABLE `zt_webhook` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `type` varchar(10) NOT NULL DEFAULT 'default', + `name` varchar(50) NOT NULL, + `url` varchar(255) NOT NULL, + `domain` varchar(255) NOT NULL, + `contentType` varchar(30) NOT NULL DEFAULT 'application/json', + `sendType` enum('sync','async') NOT NULL DEFAULT 'sync', + `products` text NOT NULL, + `projects` text NOT NULL, + `params` varchar(100) NOT NULL, + `actions` text NOT NULL, + `desc` text NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; diff --git a/db/zentao.sql b/db/zentao.sql index 95ef0d351b..cc2fadefda 100644 --- a/db/zentao.sql +++ b/db/zentao.sql @@ -533,7 +533,7 @@ CREATE TABLE IF NOT EXISTS `zt_release` ( `product` mediumint(8) unsigned NOT NULL default '0', `branch` mediumint(8) unsigned NOT NULL default '0', `build` mediumint(8) unsigned NOT NULL, - `name` char(30) NOT NULL default '', + `name` varchar(255) NOT NULL default '', `marker` enum('0','1') NOT NULL default '0', `date` date NOT NULL, `stories` text NOT NULL, diff --git a/module/common/lang/en.php b/module/common/lang/en.php index 5119e2766d..8fb5cc38cd 100644 --- a/module/common/lang/en.php +++ b/module/common/lang/en.php @@ -335,6 +335,9 @@ $lang->doc = new stdclass(); $lang->doc->menu = new stdclass(); //$lang->doc->menu->createLib = array('link' => ' Add Library|doc|createLib', 'float' => 'right'); +$lang->svn = new stdclass(); +$lang->git = new stdclass(); + /* Report menu settings. */ $lang->report = new stdclass(); $lang->report->menu = new stdclass(); diff --git a/module/common/lang/zh-tw.php b/module/common/lang/zh-tw.php index 66872d8084..da2fcb11c3 100644 --- a/module/common/lang/zh-tw.php +++ b/module/common/lang/zh-tw.php @@ -262,7 +262,7 @@ $lang->task = new stdclass(); $lang->build = new stdclass(); $lang->task->menu = $lang->project->menu; $lang->build->menu = $lang->project->menu; -$lang->build->menu->qa = array('link' => '測試|project|build|projectID=%s', 'subModule' => 'bug,build,testtask', 'alias' => 'build,testtask', 'class' => 'dropdown dropdown-hover'); +$lang->build->menu->qa = array('link' => '版本|project|build|projectID=%s', 'subModule' => 'bug,build,testtask', 'alias' => 'build,testtask', 'class' => 'dropdown dropdown-hover'); /* QA視圖菜單設置。*/ $lang->qa = new stdclass(); @@ -335,6 +335,9 @@ $lang->doc = new stdclass(); $lang->doc->menu = new stdclass(); //$lang->doc->menu->createLib = array('link' => ' 添加檔案夾|doc|createLib', 'float' => 'right'); +$lang->svn = new stdclass(); +$lang->git = new stdclass(); + /* 統計視圖菜單設置。*/ $lang->report = new stdclass(); $lang->report->menu = new stdclass(); @@ -479,7 +482,7 @@ $lang->error->email = "『%s』應當為合法的EMAIL。"; $lang->error->date = "『%s』應當為合法的日期。"; $lang->error->datetime = "『%s』應當為合法的日期。"; $lang->error->code = "『%s』應當為字母或數字的組合。"; -$lang->error->account = "『%s』應當為合法的用戶名。"; +$lang->error->account = "『%s』只能是字母和數字的組合三位以上。"; $lang->error->passwordsame = "兩次密碼應當相等。"; $lang->error->passwordrule = "密碼應該符合規則,長度至少為六位。"; $lang->error->accessDenied = '您沒有訪問權限'; diff --git a/module/common/model.php b/module/common/model.php index c350a265fa..14ff08a922 100644 --- a/module/common/model.php +++ b/module/common/model.php @@ -167,7 +167,7 @@ class commonModel extends model if($this->loadModel('user')->isLogon() or ($this->app->company->guest and $this->app->user->account == 'guest')) { if(stripos($method, 'ajax') !== false) return true; - if(stripos($method, 'downloadClient') !== false) return true; + if($module == 'misc' and $method == 'downloadClient') return true; if($module == 'block' and $method == 'main') return true; if($module == 'misc' and $method == 'changelog') return true; if($module == 'tutorial') return true; diff --git a/module/dev/lang/zh-tw.php b/module/dev/lang/zh-tw.php index 842b4f8f46..8f06049a30 100644 --- a/module/dev/lang/zh-tw.php +++ b/module/dev/lang/zh-tw.php @@ -9,6 +9,12 @@ $lang->dev->params = '參數列表'; $lang->dev->type = '類型'; $lang->dev->desc = '描述'; $lang->dev->noParams = '無參數'; +$lang->dev->post = 'POST參數'; + +$lang->dev->paramRange = '取值範圍:%s'; +$lang->dev->paramDate = '日期格式:YY-mm-dd,如:2019-01-01'; +$lang->dev->paramColor = '顏色格式:#RGB,如:#3da7f5'; +$lang->dev->paramMailto = "填寫帳號,多個賬號用','分隔。"; $lang->dev->fields = array(); $lang->dev->fields['id'] = '序號'; diff --git a/module/git/lang/en.php b/module/git/lang/en.php index fb1becaa0d..27dfeac017 100644 --- a/module/git/lang/en.php +++ b/module/git/lang/en.php @@ -10,7 +10,6 @@ * @link http://www.zentao.net */ /* Methods. */ -$lang->git = new stdclass(); $lang->git->common = 'Git'; $lang->git->cat = 'View Code'; $lang->git->diff = 'Diff Code'; diff --git a/module/git/lang/zh-tw.php b/module/git/lang/zh-tw.php index 504e5f147f..9e52166dcc 100644 --- a/module/git/lang/zh-tw.php +++ b/module/git/lang/zh-tw.php @@ -10,7 +10,6 @@ * @link http://www.zentao.net */ /* 方法列表。*/ -$lang->git = new stdclass(); $lang->git->common = 'Git'; $lang->git->cat = '查看原始碼'; $lang->git->diff = '比較原始碼'; diff --git a/module/misc/control.php b/module/misc/control.php index cb0a5ad12c..50be5e57d2 100644 --- a/module/misc/control.php +++ b/module/misc/control.php @@ -84,255 +84,6 @@ class misc extends control echo $this->misc->hello2(); } - /** - * Download zentao client. - * - * @access public - * @param string $action - * @param string $os - * @return void - */ - public function downloadClient($action = 'check', $os = '') - { - if($_POST) - { - $os = $this->post->os; - - die(js::locate($this->createLink('misc', 'downloadClient', "action=getPackage&os=$os"), 'parent')); - } - - if($action == 'check') - { - $error = false; - $errorInfo = ''; - - $cacheDir = $this->app->getBasePath() . 'tmp/cache/'; - if(!is_dir($cacheDir)) - { - $result = mkdir($cacheDir, 0755, true); - if($result == false) - { - $error = true; - $errorInfo = sprintf($this->lang->misc->client->errorInfo->dirNotExist, $cacheDir, $cacheDir); - } - } - - if(!is_writable($cacheDir)) - { - $error = true; - $errorInfo = sprintf($this->lang->misc->client->errorInfo->dirNotWritable, $cacheDir, $cacheDir); - } - - $this->view->error = $error; - $this->view->errorInfo = $errorInfo; - - if(!$error) die(js::locate($this->createLink('misc', 'downloadClient', "action=selectPackage"))); - } - - if($action == 'selectPackage') - { - $os = 'win64'; - $agentOS = helper::getOS(); - if(strpos($agentOS, 'Windows') !== false) $os = 'win64'; - if(strpos($agentOS, 'Linux') !== false) $os = 'linux64'; - if(strpos($agentOS, 'Mac') !== false) $os = 'mac'; - - $this->view->os = $os; - } - - if($action == 'getPackage') - { - $this->view->os = $os; - $this->view->account = $this->app->user->account; - } - - if($action == 'clearTmpPackage') - { - $account = $this->app->user->account; - $tmpDir = $this->app->getBasePath() . 'tmp/cache/client/' . "$account/"; - - if(is_dir($tmpDir)) - { - $zfile = $this->app->loadClass('zfile'); - $zfile->removeDir($tmpDir); - } - - die(js::closeModal('parent.parent', 'this')); - } - - if($action == 'downloadPackage') - { - $account = $this->app->user->account; - $clientDir = $this->app->getBasePath() . 'tmp/cache/client/' . "$account/"; - - $clientFile = $clientDir . 'zentaoclient.zip'; - $zipContent = file_get_contents($clientFile); - if(is_dir($clientDir)) - { - $zfile = $this->app->loadClass('zfile'); - $zfile->removeDir($clientDir); - } - - $this->fetch('file', 'sendDownHeader', array('fileName' => "zentao_chat_client." . $os . '.zip', 'zip', $zipContent)); - } - - $this->view->action = $action; - $this->display(); - } - - /** - * Ajax get client package. - * - * @param string $os - * @access public - * @return void - */ - public function ajaxGetClientPackage($os = '') - { - set_time_limit (0); - session_write_close(); - - $response = array(); - $response['result'] = 'success'; - $response['message'] = ''; - - $clientDir = $this->app->getBasePath() . 'tmp/cache/client/'; - if(!is_dir($clientDir)) mkdir($clientDir, 0755, true); - - $version = $this->config->xuanxuan->version; - $packageDir = $clientDir . "/$version/"; - if(!is_dir($packageDir)) mkdir($packageDir, 0755, true); - - $account = $this->app->user->account; - $tmpDir = $clientDir . "/$account/"; - if(!is_dir($tmpDir)) mkdir($tmpDir, 0755, true); - - $needCache = false; - $clientName = "zentaoclient." . $os . ".zip"; - $packageFile = $packageDir . $clientName; - if(!file_exists($packageFile)) - { - $url = "http://dl.cnezsoft.com/zentaoclient/$version/"; - $xxFile = $url . $clientName . "?t=" . rand(); - $needCache = true; - } - else - { - $xxFile = $packageFile; - } - - $clientFile = $tmpDir . 'zentaoclient.zip'; - if($xxHd = fopen($xxFile, "rb")) - { - if($clientHd = fopen($clientFile, "wb")) - { - while(!feof($xxHd)) - { - $result = fwrite($clientHd, fread($xxHd, 1024 * 8 ), 1024 * 8 ); - if($result == false) - { - $response['result'] = 'fail'; - $response['message'] = sprintf($this->lang->misc->client->errorInfo->manualOpt, $xxFile); - $this->send($response); - } - } - } - else - { - $response['result'] = 'fail'; - $response['message'] = sprintf($this->lang->misc->client->errorInfo->manualOpt, $xxFile); - $this->send($response); - } - fclose($xxHd); - fclose($clientHd); - } - else - { - $response['result'] = 'fail'; - $response['message'] = sprintf($this->lang->misc->client->errorInfo->manualOpt, $xxFile); - $this->send($response); - } - - if($needCache) file_put_contents($packageFile, file_get_contents($clientFile)); - - $this->send($response); - } - - /** - * Ajax set client config to client package. - * - * @param string $os - * @access public - * @return void - */ - public function ajaxSetClientConfig($os = '') - { - $response['result'] = 'success'; - - $account = $this->app->user->account; - $clientDir = $this->app->getBasePath() . 'tmp/cache/client/' . "$account/"; - if(!is_dir($clientDir)) mkdir($clientDir, 0755, true); - - /* write login info into config file. */ - $loginInfo = new stdclass(); - $loginInfo->ui = new stdclass(); - $loginInfo->ui->defaultUser = new stdclass(); - $loginInfo->ui->defaultUser->server = common::getSysURL();; - $loginInfo->ui->defaultUser->account = $this->app->user->account; - $loginInfo = json_encode($loginInfo); - - $loginFile = $clientDir . 'config.json'; - file_put_contents($loginFile, $loginInfo); - - define('PCLZIP_TEMPORARY_DIR', $clientDir); - $this->app->loadClass('pclzip', true); - $clientFile = $clientDir . 'zentaoclient.zip'; - $archive = new pclzip($clientFile); - - if($os == 'mac') - { - $result = $archive->add($loginFile, PCLZIP_OPT_REMOVE_ALL_PATH, PCLZIP_OPT_ADD_PATH, 'zentaoclient/xuanxuan.app/Contents/Resouces'); - } - else - { - $result = $archive->add($loginFile, PCLZIP_OPT_REMOVE_ALL_PATH, PCLZIP_OPT_ADD_PATH, 'zentaoclient/resources/build-in'); - } - - if($result == 0) - { - $response['result'] = 'fail'; - $response['message'] = $archive->errorInfo(true); - $this->send($response); - } - - $this->send($response); - } - - /** - * Ajax get client package size. - * - * @access public - * @return void - */ - public function ajaxGetPackageSize() - { - $account = $this->app->user->account; - $packageFile = $this->app->getBasePath() . 'tmp/cache/client/' . $account . '/zentaoclient.zip'; - - $size = 0; - if(file_exists($packageFile)) - { - $size = filesize($packageFile); - $size = $size ? round($size / 1048576, 2) : 0; - } - - $response = array(); - $response['result'] = 'success'; - $response['size'] = $size; - - $this->send($response); - } - /** * Down notify. * diff --git a/module/misc/lang/en.php b/module/misc/lang/en.php index 58f3cc5233..15a735b4c2 100644 --- a/module/misc/lang/en.php +++ b/module/misc/lang/en.php @@ -15,28 +15,6 @@ $lang->misc->ping = 'Ping'; $lang->misc->api = 'https://api.zentao.net'; $lang->misc->enApi = 'http://api.zentao.pm'; -$lang->misc->client = new stdclass(); -$lang->misc->client->version = 'Client Version'; -$lang->misc->client->os = 'Select OS'; -$lang->misc->client->download = 'Download'; -$lang->misc->client->downloading = 'Downloading:'; -$lang->misc->client->downloaded = 'Downloaded!'; -$lang->misc->client->setting = 'Setting'; -$lang->misc->client->setted = 'Setting is done!'; - -$lang->misc->client->osList['win64'] = 'Windows 64'; -$lang->misc->client->osList['win32'] = 'Windows 32'; -$lang->misc->client->osList['linux64'] = 'Linux 64'; -$lang->misc->client->osList['linux32'] = 'Linux 32'; -$lang->misc->client->osList['mac'] = 'Mac'; - -$lang->misc->client->errorInfo = new stdclass(); -$lang->misc->client->errorInfo->downloadError = 'Failed to download package!'; -$lang->misc->client->errorInfo->configError = 'Failed to set up!'; -$lang->misc->client->errorInfo->manualOpt = 'Please get client package from %s .'; -$lang->misc->client->errorInfo->dirNotExist = 'The dir %s does not exist. Create it.'; -$lang->misc->client->errorInfo->dirNotWritable = 'The dir %s is not writable.
          Please exec:sudo chmod 777 %s in Linux.'; - $lang->misc->zentao = new stdclass(); $lang->misc->zentao->version = 'Version %s'; $lang->misc->zentao->labels['about'] = 'About'; @@ -98,6 +76,7 @@ $lang->misc->feature = new stdclass(); $lang->misc->feature->lastest = 'Latest Version'; $lang->misc->feature->detailed = 'Details'; +$lang->misc->releaseDate['11.2.stable'] = '2019-01-30'; $lang->misc->releaseDate['11.1.stable'] = '2019-01-04'; $lang->misc->releaseDate['11.0.stable'] = '2018-12-21'; $lang->misc->releaseDate['10.6.stable'] = '2018-11-20'; @@ -120,6 +99,8 @@ $lang->misc->releaseDate['7.2.stable'] = '2015-05-22'; $lang->misc->releaseDate['7.1.stable'] = '2015-03-07'; $lang->misc->releaseDate['6.3.stable'] = '2014-11-07'; +$lang->misc->feature->all['11.2.stable'][] = array('title'=>'Optimize details and fix bug.', 'desc' => '

          Add upgrade logs and database checkup after upgrading

          Fixed ZenTao client and other bugs, and optimized details.

          '); + $lang->misc->feature->all['11.1.stable'][] = array('title'=>'Fix Bug.'); $lang->misc->feature->all['11.0.stable'][] = array('title'=>'ZenTao integrate Xuanxuan'); diff --git a/module/misc/lang/zh-cn.php b/module/misc/lang/zh-cn.php index fc9bf03f6f..c8f9cfab5a 100644 --- a/module/misc/lang/zh-cn.php +++ b/module/misc/lang/zh-cn.php @@ -15,28 +15,6 @@ $lang->misc->ping = '防超时'; $lang->misc->api = 'https://api.zentao.net'; $lang->misc->enApi = 'http://api.zentao.pm'; -$lang->misc->client = new stdclass(); -$lang->misc->client->version = '客户端版本'; -$lang->misc->client->os = '操作系统'; -$lang->misc->client->download = '下载'; -$lang->misc->client->downloading = '正在获取安装包:'; -$lang->misc->client->downloaded = '成功获取安装包'; -$lang->misc->client->setting = '正在设置配置信息'; -$lang->misc->client->setted = '成功设置配置信息'; - -$lang->misc->client->osList['win64'] = 'Windows 64位'; -$lang->misc->client->osList['win32'] = 'Windows 32位'; -$lang->misc->client->osList['linux64'] = 'Linux 64位'; -$lang->misc->client->osList['linux32'] = 'Linux 32位'; -$lang->misc->client->osList['mac'] = 'Mac版'; - -$lang->misc->client->errorInfo = new stdclass(); -$lang->misc->client->errorInfo->downloadError = '获取安装包失败'; -$lang->misc->client->errorInfo->configError = '配置用户信息失败'; -$lang->misc->client->errorInfo->manualOpt = '请从 %s 手动获取安装包。'; -$lang->misc->client->errorInfo->dirNotExist = '客户端下载存储路径 %s 不存在,请创建该目录。'; -$lang->misc->client->errorInfo->dirNotWritable = '客户端下载存储路径 %s 不可写
          linux下面请执行命令:sudo chmod 777 %s来修正'; - $lang->misc->zentao = new stdclass(); $lang->misc->zentao->version = '版本%s'; $lang->misc->zentao->labels['about'] = '关于禅道'; @@ -98,6 +76,7 @@ $lang->misc->feature = new stdclass(); $lang->misc->feature->lastest = '最新版本'; $lang->misc->feature->detailed = '详情'; +$lang->misc->releaseDate['11.2.stable'] = '2019-01-30'; $lang->misc->releaseDate['11.1.stable'] = '2019-01-04'; $lang->misc->releaseDate['11.0.stable'] = '2018-12-21'; $lang->misc->releaseDate['10.6.stable'] = '2018-11-20'; @@ -120,6 +99,8 @@ $lang->misc->releaseDate['7.2.stable'] = '2015-05-22'; $lang->misc->releaseDate['7.1.stable'] = '2015-03-07'; $lang->misc->releaseDate['6.3.stable'] = '2014-11-07'; +$lang->misc->feature->all['11.2.stable'][] = array('title'=>'完善细节,修复Bug', 'desc' => '

          增加升级日志和升级后数据库检查的功能

          修复禅道集成客户端和其他若干bug,完善细节

          '); + $lang->misc->feature->all['11.1.stable'][] = array('title'=>'主要修复Bug。'); $lang->misc->feature->all['11.0.stable'][] = array('title'=>'禅道集成喧喧'); diff --git a/module/misc/lang/zh-tw.php b/module/misc/lang/zh-tw.php index 805c2ec805..5a0d901f66 100644 --- a/module/misc/lang/zh-tw.php +++ b/module/misc/lang/zh-tw.php @@ -15,28 +15,6 @@ $lang->misc->ping = '防超時'; $lang->misc->api = 'https://api.zentao.net'; $lang->misc->enApi = 'http://api.zentao.pm'; -$lang->misc->client = new stdclass(); -$lang->misc->client->version = '客戶端版本'; -$lang->misc->client->os = '操作系統'; -$lang->misc->client->download = '下載'; -$lang->misc->client->downloading = '正在獲取安裝包:'; -$lang->misc->client->downloaded = '成功獲取安裝包'; -$lang->misc->client->setting = '正在設置配置信息'; -$lang->misc->client->setted = '成功設置配置信息'; - -$lang->misc->client->osList['win64'] = 'Windows 64位'; -$lang->misc->client->osList['win32'] = 'Windows 32位'; -$lang->misc->client->osList['linux64'] = 'Linux 64位'; -$lang->misc->client->osList['linux32'] = 'Linux 32位'; -$lang->misc->client->osList['mac'] = 'Mac版'; - -$lang->misc->client->errorInfo = new stdclass(); -$lang->misc->client->errorInfo->downloadError = '獲取安裝包失敗'; -$lang->misc->client->errorInfo->configError = '配置用戶信息失敗'; -$lang->misc->client->errorInfo->manualOpt = '請從 %s 手動獲取安裝包。'; -$lang->misc->client->errorInfo->dirNotExist = '客戶端下載存儲路徑 %s 不存在,請創建該目錄。'; -$lang->misc->client->errorInfo->dirNotWritable = '客戶端下載存儲路徑 %s 不可寫
          linux下面請執行命令:sudo chmod 777 %s來修正'; - $lang->misc->zentao = new stdclass(); $lang->misc->zentao->version = '版本%s'; $lang->misc->zentao->labels['about'] = '關於禪道'; @@ -98,6 +76,7 @@ $lang->misc->feature = new stdclass(); $lang->misc->feature->lastest = '最新版本'; $lang->misc->feature->detailed = '詳情'; +$lang->misc->releaseDate['11.2.stable'] = '2019-01-30'; $lang->misc->releaseDate['11.1.stable'] = '2019-01-04'; $lang->misc->releaseDate['11.0.stable'] = '2018-12-21'; $lang->misc->releaseDate['10.6.stable'] = '2018-11-20'; @@ -120,6 +99,8 @@ $lang->misc->releaseDate['7.2.stable'] = '2015-05-22'; $lang->misc->releaseDate['7.1.stable'] = '2015-03-07'; $lang->misc->releaseDate['6.3.stable'] = '2014-11-07'; +$lang->misc->feature->all['11.2.stable'][] = array('title'=>'完善細節,修復Bug', 'desc' => '

          增加升級日誌和升級後資料庫檢查的功能

          修復禪道整合客戶端和其他若干bug,完善細節

          '); + $lang->misc->feature->all['11.1.stable'][] = array('title'=>'主要修復Bug。'); $lang->misc->feature->all['11.0.stable'][] = array('title'=>'禪道整合喧喧'); diff --git a/module/svn/lang/en.php b/module/svn/lang/en.php index 8031ede3e0..d109ef2b4e 100644 --- a/module/svn/lang/en.php +++ b/module/svn/lang/en.php @@ -10,7 +10,6 @@ * @link http://www.zentao.net */ /* Methods. */ -$lang->svn = new stdclass(); $lang->svn->common = 'Subversion'; $lang->svn->cat = 'View Code'; $lang->svn->diff = 'Diff Code'; diff --git a/module/svn/lang/zh-tw.php b/module/svn/lang/zh-tw.php index 3619d90b30..285ed2e212 100644 --- a/module/svn/lang/zh-tw.php +++ b/module/svn/lang/zh-tw.php @@ -10,7 +10,6 @@ * @link http://www.zentao.net */ /* 方法列表。*/ -$lang->svn = new stdclass(); $lang->svn->common = 'Subversion'; $lang->svn->cat = '查看原始碼'; $lang->svn->diff = '比較原始碼'; diff --git a/module/testcase/lang/zh-cn.php b/module/testcase/lang/zh-cn.php index 9a7a72e512..8983c59994 100644 --- a/module/testcase/lang/zh-cn.php +++ b/module/testcase/lang/zh-cn.php @@ -171,7 +171,6 @@ $lang->testcase->reviewResultList[''] = ''; $lang->testcase->reviewResultList['pass'] = '确认通过'; $lang->testcase->reviewResultList['clarify'] = '继续完善'; - $lang->testcase->statusList[''] = ''; $lang->testcase->statusList['wait'] = '待评审'; $lang->testcase->statusList['normal'] = '正常'; diff --git a/module/upgrade/lang/version.php b/module/upgrade/lang/version.php index e26fe9d8b5..5127612226 100644 --- a/module/upgrade/lang/version.php +++ b/module/upgrade/lang/version.php @@ -101,3 +101,4 @@ $lang->upgrade->fromVersions['10_5'] = '10.5'; $lang->upgrade->fromVersions['10_5_1'] = '10.5.1'; $lang->upgrade->fromVersions['10_6'] = '10.6'; $lang->upgrade->fromVersions['11_0'] = '11.0'; +$lang->upgrade->fromVersions['11_1'] = '11.1'; diff --git a/module/upgrade/lang/zh-tw.php b/module/upgrade/lang/zh-tw.php index 0d667e9073..f2578479a5 100644 --- a/module/upgrade/lang/zh-tw.php +++ b/module/upgrade/lang/zh-tw.php @@ -35,7 +35,7 @@ $lang->upgrade->setStatusFile = '

          升級之前請先完成下面的操
        • %s
        • 或者刪掉"%s" 這個檔案 ,重新創建一個ok.txt檔案,不需要內容。
        • -

          我已經仔細閲讀上面提示且完成上述工作,繼續更新

          '; +

          我已經仔細閲讀上面提示且完成上述工作,繼續更新

          '; $lang->upgrade->selectVersion = '選擇版本'; $lang->upgrade->continue = '繼續'; $lang->upgrade->noteVersion = "務必選擇正確的版本,否則會造成數據丟失。"; diff --git a/module/upgrade/model.php b/module/upgrade/model.php index 04d8a19877..0f9d53eaac 100644 --- a/module/upgrade/model.php +++ b/module/upgrade/model.php @@ -347,6 +347,7 @@ class upgradeModel extends model case '11_0': $this->saveLogs('Execute 11_0'); case '11_1': $this->saveLogs('Execute 11_1'); + $this->execSQL($this->getUpgradeFile('11.1')); if(!isset($this->config->isINT) or !($this->config->isINT)) { $xuanxuanSql = $this->app->getAppRoot() . 'db' . DS . 'upgradexuanxuan2.3.0.sql'; diff --git a/xuanxuan/module/chat/ext/lang/en/xuanxuan.php b/xuanxuan/module/chat/ext/lang/en/xuanxuan.php index a58182e5a0..fb6a7c11b2 100644 --- a/xuanxuan/module/chat/ext/lang/en/xuanxuan.php +++ b/xuanxuan/module/chat/ext/lang/en/xuanxuan.php @@ -7,6 +7,9 @@ $lang->chat->xxdServer = 'Zentao Server'; $lang->chat->downloadXXD = 'Download XXD'; $lang->chat->zentaoIntegrate = 'Zentao Integrated'; $lang->chat->zentaoClient = 'ZenTao Client is added!'; +$lang->chat->getChatUsers = 'Get Chat Users'; +$lang->chat->getChatGroups = 'Get Chat Groups'; +$lang->chat->notifyMSG = 'Notify'; $lang->chat->turnonList = array(); $lang->chat->turnonList[1] = 'Enable'; diff --git a/xuanxuan/module/chat/ext/lang/zh-cn/xuanxuan.php b/xuanxuan/module/chat/ext/lang/zh-cn/xuanxuan.php index 07d368f73d..6c5588aa8e 100644 --- a/xuanxuan/module/chat/ext/lang/zh-cn/xuanxuan.php +++ b/xuanxuan/module/chat/ext/lang/zh-cn/xuanxuan.php @@ -7,6 +7,9 @@ $lang->chat->xxdServer = '禅道服务器'; $lang->chat->downloadXXD = '下载喧喧服务端'; $lang->chat->zentaoIntegrate = '禅道集成'; $lang->chat->zentaoClient = '新增禅道客户端!'; +$lang->chat->getChatUsers = '获取用户'; +$lang->chat->getChatGroups = '获取讨论组'; +$lang->chat->notifyMSG = '消息通知'; $lang->chat->turnonList = array(); $lang->chat->turnonList[1] = '是'; diff --git a/xuanxuan/module/group/ext/lang/en/xuanxuan.php b/xuanxuan/module/group/ext/lang/en/xuanxuan.php index c2bc24fe8e..65538b087e 100644 --- a/xuanxuan/module/group/ext/lang/en/xuanxuan.php +++ b/xuanxuan/module/group/ext/lang/en/xuanxuan.php @@ -4,3 +4,8 @@ $lang->resource->admin->downloadxxd = 'downloadXXD'; $lang->admin->methodOrder[25] = 'xuanxuan'; $lang->admin->methodOrder[30] = 'downloadxxd'; + +$lang->resource->chat = new stdclass(); +$lang->resource->chat->getChatUsers = 'getChatUsers'; +$lang->resource->chat->getChatGroups = 'getChatGroups'; +$lang->resource->chat->notifyMSG = 'notifyMSG'; diff --git a/xuanxuan/module/group/ext/lang/zh-cn/xuanxuan.php b/xuanxuan/module/group/ext/lang/zh-cn/xuanxuan.php index c2bc24fe8e..65538b087e 100644 --- a/xuanxuan/module/group/ext/lang/zh-cn/xuanxuan.php +++ b/xuanxuan/module/group/ext/lang/zh-cn/xuanxuan.php @@ -4,3 +4,8 @@ $lang->resource->admin->downloadxxd = 'downloadXXD'; $lang->admin->methodOrder[25] = 'xuanxuan'; $lang->admin->methodOrder[30] = 'downloadxxd'; + +$lang->resource->chat = new stdclass(); +$lang->resource->chat->getChatUsers = 'getChatUsers'; +$lang->resource->chat->getChatGroups = 'getChatGroups'; +$lang->resource->chat->notifyMSG = 'notifyMSG'; diff --git a/xuanxuan/module/message/ext/control/notify.php b/xuanxuan/module/message/ext/control/notify.php deleted file mode 100644 index 43b104d522..0000000000 --- a/xuanxuan/module/message/ext/control/notify.php +++ /dev/null @@ -1,43 +0,0 @@ -lang->message->error->noUserList; - die(json_encode($response)); - } - - if(empty($_POST['sender'])) - { - $response['result'] = false; - $response['message'] = $this->lang->message->error->noSender; - die(json_encode($response)); - } - - $userList = empty($_POST['userList']) ? '' : $this->post->userList; - $title = empty($_POST['title']) ? '' : $this->post->title; - $subtitle = empty($_POST['subtitle']) ? '' : $this->post->subtitle; - $content = empty($_POST['content']) ? '' : $this->post->content; - $contentType = empty($_POST['contentType']) ? 'text' : $this->post->contentType; - $url = empty($_POST['url']) ? '' : $this->post->url; - $actions = empty($_POST['actions']) ? array() : $this->post->actions; - $sender = empty($_POST['sender']) ? 0 : $this->post->sender; - - $result = $this->loadModel('chat')->createNotify($userList, $title, $subtitle, $content, $contentType, $url, $actions, $sender); - if(!$result) - { - $response['result'] = false; - $response['message'] = dao::getError(); - } - - die(json_encode($response)); - } -} diff --git a/xuanxuan/module/message/ext/lang/en/xuanxuan.php b/xuanxuan/module/message/ext/lang/en/xuanxuan.php index a75df906c9..f8dd9b033a 100644 --- a/xuanxuan/module/message/ext/lang/en/xuanxuan.php +++ b/xuanxuan/module/message/ext/lang/en/xuanxuan.php @@ -2,7 +2,3 @@ $lang->message->typeList['xuanxuan'] = 'Client'; $lang->message->sender = 'ZentaoPMS'; - -if(!isset($lang->message->error)) $lang->message->error = new stdclass(); -$lang->message->error->noUserList = 'Not set user id list.'; -$lang->message->error->noSender = 'Not set sender information.'; diff --git a/xuanxuan/module/message/ext/lang/zh-cn/xuanxuan.php b/xuanxuan/module/message/ext/lang/zh-cn/xuanxuan.php index 5044f0980d..38695bb91b 100644 --- a/xuanxuan/module/message/ext/lang/zh-cn/xuanxuan.php +++ b/xuanxuan/module/message/ext/lang/zh-cn/xuanxuan.php @@ -2,7 +2,3 @@ $lang->message->typeList['xuanxuan'] = '客户端'; $lang->message->sender = '禅道项目管理'; - -if(!isset($lang->message->error)) $lang->message->error = new stdclass(); -$lang->message->error->noUserList = '没有设置消息发送用户列表'; -$lang->message->error->noSender = '没有设置发送方信息'; diff --git a/xuanxuan/module/misc/ext/control/ajaxgetclientpackage.php b/xuanxuan/module/misc/ext/control/ajaxgetclientpackage.php new file mode 100644 index 0000000000..da2575d528 --- /dev/null +++ b/xuanxuan/module/misc/ext/control/ajaxgetclientpackage.php @@ -0,0 +1,82 @@ +app->getBasePath() . 'tmp/cache/client/'; + if(!is_dir($clientDir)) mkdir($clientDir, 0755, true); + + $version = $this->config->xuanxuan->version; + $packageDir = $clientDir . "/$version/"; + if(!is_dir($packageDir)) mkdir($packageDir, 0755, true); + + $account = $this->app->user->account; + $tmpDir = $clientDir . "/$account/"; + if(!is_dir($tmpDir)) mkdir($tmpDir, 0755, true); + + $needCache = false; + $clientName = "zentaoclient." . $os . ".zip"; + $packageFile = $packageDir . $clientName; + if(!file_exists($packageFile)) + { + $url = "http://dl.cnezsoft.com/zentaoclient/$version/"; + $xxFile = $url . $clientName . "?t=" . rand(); + $needCache = true; + } + else + { + $xxFile = $packageFile; + } + + $clientFile = $tmpDir . 'zentaoclient.zip'; + if($xxHd = fopen($xxFile, "rb")) + { + if($clientHd = fopen($clientFile, "wb")) + { + while(!feof($xxHd)) + { + $result = fwrite($clientHd, fread($xxHd, 1024 * 8 ), 1024 * 8 ); + if($result == false) + { + $response['result'] = 'fail'; + $response['message'] = sprintf($this->lang->misc->client->errorInfo->manualOpt, $xxFile); + $this->send($response); + } + } + } + else + { + $response['result'] = 'fail'; + $response['message'] = sprintf($this->lang->misc->client->errorInfo->manualOpt, $xxFile); + $this->send($response); + } + fclose($xxHd); + fclose($clientHd); + } + else + { + $response['result'] = 'fail'; + $response['message'] = sprintf($this->lang->misc->client->errorInfo->manualOpt, $xxFile); + $this->send($response); + } + + if($needCache) file_put_contents($packageFile, file_get_contents($clientFile)); + + $this->send($response); + } +} diff --git a/xuanxuan/module/misc/ext/control/ajaxgetpackagesize.php b/xuanxuan/module/misc/ext/control/ajaxgetpackagesize.php new file mode 100644 index 0000000000..73ca2655f9 --- /dev/null +++ b/xuanxuan/module/misc/ext/control/ajaxgetpackagesize.php @@ -0,0 +1,29 @@ +app->user->account; + $packageFile = $this->app->getBasePath() . 'tmp/cache/client/' . $account . '/zentaoclient.zip'; + + $size = 0; + if(file_exists($packageFile)) + { + $size = filesize($packageFile); + $size = $size ? round($size / 1048576, 2) : 0; + } + + $response = array(); + $response['result'] = 'success'; + $response['size'] = $size; + + $this->send($response); + } +} diff --git a/xuanxuan/module/misc/ext/control/ajaxsetclientconfig.php b/xuanxuan/module/misc/ext/control/ajaxsetclientconfig.php new file mode 100644 index 0000000000..ac956fc495 --- /dev/null +++ b/xuanxuan/module/misc/ext/control/ajaxsetclientconfig.php @@ -0,0 +1,54 @@ +app->user->account; + $clientDir = $this->app->getBasePath() . 'tmp/cache/client/' . "$account/"; + if(!is_dir($clientDir)) mkdir($clientDir, 0755, true); + + /* write login info into config file. */ + $loginInfo = new stdclass(); + $loginInfo->ui = new stdclass(); + $loginInfo->ui->defaultUser = new stdclass(); + $loginInfo->ui->defaultUser->server = common::getSysURL();; + $loginInfo->ui->defaultUser->account = $this->app->user->account; + $loginInfo = json_encode($loginInfo); + + $loginFile = $clientDir . 'config.json'; + file_put_contents($loginFile, $loginInfo); + + define('PCLZIP_TEMPORARY_DIR', $clientDir); + $this->app->loadClass('pclzip', true); + $clientFile = $clientDir . 'zentaoclient.zip'; + $archive = new pclzip($clientFile); + + if($os == 'mac') + { + $result = $archive->add($loginFile, PCLZIP_OPT_REMOVE_ALL_PATH, PCLZIP_OPT_ADD_PATH, 'zentaoclient/xuanxuan.app/Contents/Resouces'); + } + else + { + $result = $archive->add($loginFile, PCLZIP_OPT_REMOVE_ALL_PATH, PCLZIP_OPT_ADD_PATH, 'zentaoclient/resources/build-in'); + } + + if($result == 0) + { + $response['result'] = 'fail'; + $response['message'] = $archive->errorInfo(true); + $this->send($response); + } + + $this->send($response); + } +} diff --git a/xuanxuan/module/misc/ext/control/downloadclient.php b/xuanxuan/module/misc/ext/control/downloadclient.php new file mode 100644 index 0000000000..1a3261b497 --- /dev/null +++ b/xuanxuan/module/misc/ext/control/downloadclient.php @@ -0,0 +1,100 @@ +post->os; + + die(js::locate($this->createLink('misc', 'downloadClient', "action=getPackage&os=$os"), 'parent')); + } + + if($action == 'check') + { + $error = false; + $errorInfo = ''; + + $cacheDir = $this->app->getBasePath() . 'tmp/cache/'; + if(!is_dir($cacheDir)) + { + $result = mkdir($cacheDir, 0755, true); + if($result == false) + { + $error = true; + $errorInfo = sprintf($this->lang->misc->client->errorInfo->dirNotExist, $cacheDir, $cacheDir); + } + } + + if(!is_writable($cacheDir)) + { + $error = true; + $errorInfo = sprintf($this->lang->misc->client->errorInfo->dirNotWritable, $cacheDir, $cacheDir); + } + + $this->view->error = $error; + $this->view->errorInfo = $errorInfo; + + if(!$error) die(js::locate($this->createLink('misc', 'downloadClient', "action=selectPackage"))); + } + + if($action == 'selectPackage') + { + $os = 'win64'; + $agentOS = helper::getOS(); + if(strpos($agentOS, 'Windows') !== false) $os = 'win64'; + if(strpos($agentOS, 'Linux') !== false) $os = 'linux64'; + if(strpos($agentOS, 'Mac') !== false) $os = 'mac'; + + $this->view->os = $os; + } + + if($action == 'getPackage') + { + $this->view->os = $os; + $this->view->account = $this->app->user->account; + } + + if($action == 'clearTmpPackage') + { + $account = $this->app->user->account; + $tmpDir = $this->app->getBasePath() . 'tmp/cache/client/' . "$account/"; + + if(is_dir($tmpDir)) + { + $zfile = $this->app->loadClass('zfile'); + $zfile->removeDir($tmpDir); + } + + die(js::closeModal('parent.parent', 'this')); + } + + if($action == 'downloadPackage') + { + $account = $this->app->user->account; + $clientDir = $this->app->getBasePath() . 'tmp/cache/client/' . "$account/"; + + $clientFile = $clientDir . 'zentaoclient.zip'; + $zipContent = file_get_contents($clientFile); + if(is_dir($clientDir)) + { + $zfile = $this->app->loadClass('zfile'); + $zfile->removeDir($clientDir); + } + + $this->fetch('file', 'sendDownHeader', array('fileName' => "zentao_chat_client." . $os . '.zip', 'zip', $zipContent)); + } + + $this->view->action = $action; + $this->display(); + } +} diff --git a/xuanxuan/module/misc/ext/lang/en/xuanxuan.php b/xuanxuan/module/misc/ext/lang/en/xuanxuan.php new file mode 100644 index 0000000000..37d81b33f9 --- /dev/null +++ b/xuanxuan/module/misc/ext/lang/en/xuanxuan.php @@ -0,0 +1,22 @@ +misc->client = new stdclass(); +$lang->misc->client->version = 'Client Version'; +$lang->misc->client->os = 'Select OS'; +$lang->misc->client->download = 'Download'; +$lang->misc->client->downloading = 'Downloading:'; +$lang->misc->client->downloaded = 'Downloaded!'; +$lang->misc->client->setting = 'Setting'; +$lang->misc->client->setted = 'Setting is done!'; + +$lang->misc->client->osList['win64'] = 'Windows 64'; +$lang->misc->client->osList['win32'] = 'Windows 32'; +$lang->misc->client->osList['linux64'] = 'Linux 64'; +$lang->misc->client->osList['linux32'] = 'Linux 32'; +$lang->misc->client->osList['mac'] = 'Mac'; + +$lang->misc->client->errorInfo = new stdclass(); +$lang->misc->client->errorInfo->downloadError = 'Failed to download package!'; +$lang->misc->client->errorInfo->configError = 'Failed to set up!'; +$lang->misc->client->errorInfo->manualOpt = 'Please get client package from %s .'; +$lang->misc->client->errorInfo->dirNotExist = 'The dir %s does not exist. Create it.'; +$lang->misc->client->errorInfo->dirNotWritable = 'The dir %s is not writable.
          Please exec:sudo chmod 777 %s in Linux.'; diff --git a/xuanxuan/module/misc/ext/lang/zh-cn/xuanxuan.php b/xuanxuan/module/misc/ext/lang/zh-cn/xuanxuan.php new file mode 100644 index 0000000000..0486dc678e --- /dev/null +++ b/xuanxuan/module/misc/ext/lang/zh-cn/xuanxuan.php @@ -0,0 +1,23 @@ +misc->client = new stdclass(); +$lang->misc->client->version = '客户端版本'; +$lang->misc->client->os = '操作系统'; +$lang->misc->client->download = '下载'; +$lang->misc->client->downloading = '正在获取安装包:'; +$lang->misc->client->downloaded = '成功获取安装包'; +$lang->misc->client->setting = '正在设置配置信息'; +$lang->misc->client->setted = '成功设置配置信息'; + +$lang->misc->client->osList['win64'] = 'Windows 64位'; +$lang->misc->client->osList['win32'] = 'Windows 32位'; +$lang->misc->client->osList['linux64'] = 'Linux 64位'; +$lang->misc->client->osList['linux32'] = 'Linux 32位'; +$lang->misc->client->osList['mac'] = 'Mac版'; + +$lang->misc->client->errorInfo = new stdclass(); +$lang->misc->client->errorInfo->downloadError = '获取安装包失败'; +$lang->misc->client->errorInfo->configError = '配置用户信息失败'; +$lang->misc->client->errorInfo->manualOpt = '请从 %s 手动获取安装包。'; +$lang->misc->client->errorInfo->dirNotExist = '客户端下载存储路径 %s 不存在,请创建该目录。'; +$lang->misc->client->errorInfo->dirNotWritable = '客户端下载存储路径 %s 不可写
          linux下面请执行命令:sudo chmod 777 %s来修正'; + From 8eb79bba13d936c8746e8b7c6cae2f1a256e167c Mon Sep 17 00:00:00 2001 From: Yagami Date: Tue, 29 Jan 2019 09:40:35 +0800 Subject: [PATCH 157/442] * Finish task #5258. --- module/tree/model.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/module/tree/model.php b/module/tree/model.php index cab96125eb..d09317d177 100644 --- a/module/tree/model.php +++ b/module/tree/model.php @@ -508,7 +508,6 @@ class treeModel extends model $fullTrees = array(); foreach($products as $id => $product) { - $linkedStory = $this->dao->select('*')->from(TABLE_PROJECTSTORY)->where('project')->eq($rootID)->andWhere('product')->eq($id)->fetch(); $productInfo = $this->product->getById($id); /* tree menu. */ $productTree = array(); @@ -521,7 +520,7 @@ class treeModel extends model ->orderBy('grade desc, type, `order`') ->get(); $stmt = $this->dbh->query($query); - if($branch == 0 and $linkedStory) $productTree = $this->getDataStructure($stmt, 'task', $projectModules); + if($branch == 0) $productTree = $this->getDataStructure($stmt, 'task', $projectModules); if($branch != 0) { $children = $this->getDataStructure($stmt, 'task', $projectModules); From 4e897f0914d91a2e6e3c6c62f5e1cc4761cb1374 Mon Sep 17 00:00:00 2001 From: Yagami Date: Tue, 29 Jan 2019 10:31:34 +0800 Subject: [PATCH 158/442] * Finish task #5258. --- module/tree/model.php | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/module/tree/model.php b/module/tree/model.php index d09317d177..dc77d905da 100644 --- a/module/tree/model.php +++ b/module/tree/model.php @@ -444,12 +444,7 @@ class treeModel extends model ->orderBy('grade desc, type, `order`') ->get(); $stmt = $this->dbh->query($query); - while($module = $stmt->fetch()) - { - /* if not manage, ignore unused modules. */ - if(!$manage and !isset($projectModules[$module->id])) continue; - $this->buildTree($treeMenu, $module, 'task', $userFunc, $extra); - } + while($module = $stmt->fetch()) $this->buildTree($treeMenu, $module, 'task', $userFunc, $extra); if(isset($treeMenu[0]) and $branch) $treeMenu[0] = "
        • $branchName
            {$treeMenu[0]}
        • "; $tree .= isset($treeMenu[0]) ? $treeMenu[0] : ''; } @@ -465,12 +460,7 @@ class treeModel extends model $treeMenu = array(); $query = $this->dao->select('*')->from(TABLE_MODULE)->where("root = '" . (int)$rootID . "' and type = 'task'")->andWhere('deleted')->eq(0)->orderBy('grade desc, type, `order`')->get(); $stmt = $this->dbh->query($query); - while($module = $stmt->fetch()) - { - /* if not manage, ignore unused modules. */ - if(!$manage and !isset($projectModules[$module->id])) continue; - $this->buildTree($treeMenu, $module, 'task', $userFunc, $extra); - } + while($module = $stmt->fetch()) $this->buildTree($treeMenu, $module, 'task', $userFunc, $extra); $tree = isset($treeMenu[0]) ? $treeMenu[0] : ''; $menu .= $tree . ''; @@ -520,10 +510,10 @@ class treeModel extends model ->orderBy('grade desc, type, `order`') ->get(); $stmt = $this->dbh->query($query); - if($branch == 0) $productTree = $this->getDataStructure($stmt, 'task', $projectModules); + if($branch == 0) $productTree = $this->getDataStructure($stmt, 'task'); if($branch != 0) { - $children = $this->getDataStructure($stmt, 'task', $projectModules); + $children = $this->getDataStructure($stmt, 'task'); if($children) $branchTrees[] = array('name' => $branchName, 'root' => $id, 'type' => 'branch', 'actions' => false, 'children' => $children); } } From 204cd00e3e670c007f417126aaeb201e12462849 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Tue, 29 Jan 2019 10:36:34 +0800 Subject: [PATCH 159/442] * adjust for xuanxuan. --- module/upgrade/model.php | 2 ++ xuanxuan/module/admin/ext/control/xuanxuan.php | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/module/upgrade/model.php b/module/upgrade/model.php index 0f9d53eaac..758df2c013 100644 --- a/module/upgrade/model.php +++ b/module/upgrade/model.php @@ -352,6 +352,8 @@ class upgradeModel extends model { $xuanxuanSql = $this->app->getAppRoot() . 'db' . DS . 'upgradexuanxuan2.3.0.sql'; $this->execSQL($xuanxuanSql); + $this->dao->update(TABLE_CONFIG)->set('value')->eq('off')->where('`key`')->eq('isHttps')->andWhere('`section`')->eq('xuanxuan')->andWhere('`value`')->eq('0')->exec(); + $this->dao->update(TABLE_CONFIG)->set('value')->eq('on')->where('`key`')->eq('isHttps')->andWhere('`section`')->eq('xuanxuan')->andWhere('`value`')->eq('1')->exec(); } } diff --git a/xuanxuan/module/admin/ext/control/xuanxuan.php b/xuanxuan/module/admin/ext/control/xuanxuan.php index 904aa09f7b..b143f60786 100644 --- a/xuanxuan/module/admin/ext/control/xuanxuan.php +++ b/xuanxuan/module/admin/ext/control/xuanxuan.php @@ -17,7 +17,7 @@ class admin extends control if(!is_numeric($setting->chatPort) or (int)$setting->chatPort <= 0 or (int)$setting->chatPort > 65535) $errors['chatPort'] = $this->lang->chat->xxdPortError; if(!is_numeric($setting->commonPort) or (int)$setting->commonPort <= 0 or (int)$setting->commonPort > 65535) $errors['commonPort'] = $this->lang->chat->xxdPortError; - if($setting->isHttps) + if($setting->isHttps == 'on') { if(empty($setting->sslcrt)) $errors['sslcrt'] = $this->lang->chat->errorSSLCrt; if(empty($setting->sslkey)) $errors['sslkey'] = $this->lang->chat->errorSSLKey; From 890ea0e0f39a59a5a1dfae5c8e0358128f97be1f Mon Sep 17 00:00:00 2001 From: wangyidong Date: Tue, 29 Jan 2019 11:27:16 +0800 Subject: [PATCH 160/442] * change xuanxuan.php to x.php. --- .../module/chat/ext/model/class/xuanxuan.class.php | 10 +++++----- xuanxuan/module/entry/ext/control/visit.php | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/xuanxuan/module/chat/ext/model/class/xuanxuan.class.php b/xuanxuan/module/chat/ext/model/class/xuanxuan.class.php index 40d1de46b8..88336f8bca 100644 --- a/xuanxuan/module/chat/ext/model/class/xuanxuan.class.php +++ b/xuanxuan/module/chat/ext/model/class/xuanxuan.class.php @@ -26,11 +26,11 @@ class xuanxuanChat extends chatModel $libID = isset($libIdList[0]) ? $libIdList[0] : 1; $actions = new stdclass(); - if(common::hasPriv('bug', 'create') and !empty($products)) $actions->createBug = array('title' => $this->lang->chat->createBug, 'url' => $baseURL . str_replace('/xuanxuan.php', '/index.php', helper::createLink('bug', 'create', "product=$productID", 'xhtml')), 'height' => "600px", 'width' => "800px"); - if(common::hasPriv('doc', 'create') and !empty($libIdList))$actions->createDoc = array('title' => $this->lang->chat->createDoc, 'url' => $baseURL . str_replace('/xuanxuan.php', '/index.php', helper::createLink('doc', 'create', "libID=$libID", 'xhtml')), 'height' => "600px", 'width' => "800px"); - if(common::hasPriv('story', 'create') and !empty($products)) $actions->createStory = array('title' => $this->lang->chat->createStory, 'url' => $baseURL . str_replace('/xuanxuan.php', '/index.php', helper::createLink('story', 'create', "product=$productID", 'xhtml')), 'height' => "600px", 'width' => "800px"); - if(common::hasPriv('task', 'create') and !empty($projects)) $actions->createTask = array('title' => $this->lang->chat->createTask, 'url' => $baseURL . str_replace('/xuanxuan.php', '/index.php', helper::createLink('task', 'create', "project=$projectID", 'xhtml')), 'height' => "600px", 'width' => "800px"); - if(common::hasPriv('todo', 'create')) $actions->createTodo = array('title' => $this->lang->chat->createTodo, 'url' => $baseURL . str_replace('/xuanxuan.php', '/index.php', helper::createLink('todo', 'create', '', 'xhtml')), 'height' => "600px", 'width' => "800px"); + if(common::hasPriv('bug', 'create') and !empty($products)) $actions->createBug = array('title' => $this->lang->chat->createBug, 'url' => $baseURL . str_replace('/x.php', '/index.php', helper::createLink('bug', 'create', "product=$productID", 'xhtml')), 'height' => "600px", 'width' => "800px"); + if(common::hasPriv('doc', 'create') and !empty($libIdList))$actions->createDoc = array('title' => $this->lang->chat->createDoc, 'url' => $baseURL . str_replace('/x.php', '/index.php', helper::createLink('doc', 'create', "libID=$libID", 'xhtml')), 'height' => "600px", 'width' => "800px"); + if(common::hasPriv('story', 'create') and !empty($products)) $actions->createStory = array('title' => $this->lang->chat->createStory, 'url' => $baseURL . str_replace('/x.php', '/index.php', helper::createLink('story', 'create', "product=$productID", 'xhtml')), 'height' => "600px", 'width' => "800px"); + if(common::hasPriv('task', 'create') and !empty($projects)) $actions->createTask = array('title' => $this->lang->chat->createTask, 'url' => $baseURL . str_replace('/x.php', '/index.php', helper::createLink('task', 'create', "project=$projectID", 'xhtml')), 'height' => "600px", 'width' => "800px"); + if(common::hasPriv('todo', 'create')) $actions->createTodo = array('title' => $this->lang->chat->createTodo, 'url' => $baseURL . str_replace('/x.php', '/index.php', helper::createLink('todo', 'create', '', 'xhtml')), 'height' => "600px", 'width' => "800px"); $urls = array(); foreach($this->config->chat->cards as $moduleName => $methods) diff --git a/xuanxuan/module/entry/ext/control/visit.php b/xuanxuan/module/entry/ext/control/visit.php index 5431b2ede5..b54a73a58b 100644 --- a/xuanxuan/module/entry/ext/control/visit.php +++ b/xuanxuan/module/entry/ext/control/visit.php @@ -15,7 +15,7 @@ class entry extends control $referer = !empty($_GET['referer']) ? $this->get->referer : $referer; $server = $this->loadModel('chat')->getServer('zentao'); - if(empty($referer)) $referer = $server . str_replace('/xuanxuan.php', '/index.php', $this->createLink('my', 'index', '', 'html')); + if(empty($referer)) $referer = $server . str_replace('/x.php', '/index.php', $this->createLink('my', 'index', '', 'html')); $output = new stdclass(); $output->module = $this->moduleName; From 3d7a3d0de68d7c3f107f52c03c8bc36fdaa8c6a2 Mon Sep 17 00:00:00 2001 From: chenfeiCF Date: Tue, 29 Jan 2019 11:33:25 +0800 Subject: [PATCH 161/442] * Add change log. --- doc/CHANGELOG | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/doc/CHANGELOG b/doc/CHANGELOG index ff123d3647..ab3e0d6a5e 100644 --- a/doc/CHANGELOG +++ b/doc/CHANGELOG @@ -1,3 +1,66 @@ +2019-01-29 11.2.stable +完成的需求 +3553 集成喧喧2.4版本,国际版企业版集成喧喧2.4,国内和国际的版本升级程序要区分处理 +3552 升级执行sql后需要进行数据库结构的检查 +3542 通过配置的方式定义各个对象的创建和编辑接口需要传入的参数 +3541 移除禅道里配置喧喧和下载xxd与xxd配置文件的相关代码,不同的地方通过扩展来处理 +3540 调整需求和任务,bug优先级的样式 +3537 增强用户录入操作的提示 +3531 dockerfile启动命令中增加修复目录权限的功能 +3530 在创建需求、bug时产品下拉菜单保持和导航里面一致 +3529 发布列表页面增加里程碑的显示 +3527 zbox启动的时候自动修复目录权限 +3526 内嵌禅道手册都是用https协议的 +3460 计划关联bug的时候将已经转为任务的也计算在内 +3060 增加升级日志功能 +修复的Bug +2008 文档收藏按钮无效 +2061 用户密码包含#时,配置单点登录提示密码错误 +2234 自定义用户职位后,项目团队中添加成员时角色不会带出自定义添加的职位 +2235 自定义已有用户职位,项目团队中添加成员时角色还是显示原来职位 +2246 edge浏览器下载附件的名称乱码 +2314 需求分组统计错误 +2334 大文件备份异常 +2347 新建用例查看需求页面无法返回 +2354 受限权限分组用户可以在列表对数据进行指派 +2355 编辑部门的负责人支持检索 +2359 没有备注权限在待办中还可以看到备注按钮 +2361 客户端创建需求提示错误 +2363 批量创建用例所属模块修改后不能选择相应模块下的需求 +2364 项目没有关联产品下需求,在维护项目模块时可以显示产品下模块 +2366 禅道的客户端修改密码后不能登录 +2367 计划需求列表移除需求之后,底部的统计结果并没有重新计算 +2368 弹窗录入信息后右上角的差号消失 +2369 批量分解需求时会把html实体转义 +2370 文档库访问权限设置后再清空保存不生效 +2371 关闭的项目可以在搜索栏访问 +2373 我的地盘总览bug数和我的地盘bug列表数不一致 +2374 员工负载表对多人任务统计不准确 +2375 客户端上访问禅道的不能正常添加用户 +2376 在已有模块中插入模块保存后新模块会排序到最后 +2377 批量编辑用户不能修改职位为空 +2378 执行用例结果选择失败不会转到下个用例 +2379 客户端在浏览器窗口中打开链接导致无限循环请求 +2380 测试用例下不应该显示指派分组 +2382 客户端修改禅道用户信息无法保存 +2383 下载客户端弹窗页面需要优化 +2384 自定义导航公共无法保存 +2386 客户端服务器设置页面,提示文案修改 +2389 自定义列出删除用户无法保存 +2390 移动文档库分类文档不能同步移动 +2391 多分支多平台产品提bug提用例所属模块问题 +2392 地盘区块中的项目数量与地盘项目列表中的数量不一致 +2393 IE11富文本编辑器兼容问题 +2394 动态如果没有权限查看就全都不显示 +2396 计划任务备份报错 +2397 禅道升级功能优化 +2398 组织权限用户列表样式重叠 +2400 自定义导航栏问题 +2402 没有文档的访问权限也可以在附件库中下载文档中的附件 +2403 创建项目页面导航栏显示的是测试 +2404 修改集成客户端中的禅道服务器,发信配置中的禅道域名会同步修改 +2406 需求页面建用例不能同步 + 2019-01-04 11.1.stable 解决的Bug 2362 后台自定义存在注入问题 From 4316f627bafd70b3c0be863eaeb23c1fa526766c Mon Sep 17 00:00:00 2001 From: wangyidong Date: Tue, 29 Jan 2019 11:37:43 +0800 Subject: [PATCH 162/442] * adjust for change password in xuanxuan. --- xuanxuan/module/chat/ext/model/class/xuanxuan.class.php | 1 + 1 file changed, 1 insertion(+) diff --git a/xuanxuan/module/chat/ext/model/class/xuanxuan.class.php b/xuanxuan/module/chat/ext/model/class/xuanxuan.class.php index 88336f8bca..5ccf4cdd63 100644 --- a/xuanxuan/module/chat/ext/model/class/xuanxuan.class.php +++ b/xuanxuan/module/chat/ext/model/class/xuanxuan.class.php @@ -75,6 +75,7 @@ class xuanxuanChat extends chatModel { if(!empty($user->$field)) $data[$field] = $user->$field; } + if(!empty($user->account) && !empty($user->password)) $data['password'] = $user->password; if(!$data) return null; $data['clientLang'] = $this->app->getClientLang(); From 4092d8209412b9d7e2112ff679c3c36f7387bb89 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Tue, 29 Jan 2019 13:28:44 +0800 Subject: [PATCH 163/442] * fix bug. --- module/tree/view/browse.html.php | 2 +- module/tree/view/browsetask.html.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/module/tree/view/browse.html.php b/module/tree/view/browse.html.php index 8387026eab..e5d8051558 100644 --- a/module/tree/view/browse.html.php +++ b/module/tree/view/browse.html.php @@ -226,7 +226,7 @@ $(function() } else if(action.type === 'delete') { - window.open(action.linkTemplate.format(item.id), 'hiddenwin'); + hiddenwin.location.href = action.linkTemplate.format(item.id); } else if(action.type === 'sort') { diff --git a/module/tree/view/browsetask.html.php b/module/tree/view/browsetask.html.php index 2c13e37252..6319d43031 100644 --- a/module/tree/view/browsetask.html.php +++ b/module/tree/view/browsetask.html.php @@ -184,7 +184,7 @@ $(function() } else if(action.type === 'delete') { - window.open(action.linkTemplate.format(item.id), 'hiddenwin'); + hiddenwin.location.href = action.linkTemplate.format(item.id); } else if(action.type === 'add') { From 4c07c912605070faf07c21c0025a3d94d6e3bbb1 Mon Sep 17 00:00:00 2001 From: chenfeiCF Date: Tue, 29 Jan 2019 14:39:08 +0800 Subject: [PATCH 164/442] * Adjust for task #5214. --- module/release/view/browse.html.php | 4 ++-- module/release/view/view.html.php | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/module/release/view/browse.html.php b/module/release/view/browse.html.php index ebe663e5b0..b8bfd9d52a 100644 --- a/module/release/view/browse.html.php +++ b/module/release/view/browse.html.php @@ -55,8 +55,8 @@ id"), sprintf('%03d', $release->id));?> marker ? "" . $release->name : $release->name; - echo html::a(inlink('view', "release=$release->id"), $releaseName); + $flagIcon = $release->marker ? " " : ''; + echo $flagIcon . html::a(inlink('view', "release=$release->id"), $release->name); ?> createLink('build', 'view', "buildID=$release->buildID"), $release->buildName);?> diff --git a/module/release/view/view.html.php b/module/release/view/view.html.php index 6bac17fa8c..c2e019edfe 100644 --- a/module/release/view/view.html.php +++ b/module/release/view/view.html.php @@ -21,8 +21,8 @@
          id;?> - marker ? "" . $release->name : $release->name;?> - + marker ? " " : '';?> + name;?> deleted):?> release->deleted;?> From 84ddbd48df238578e15111726c7b78f4f152a97c Mon Sep 17 00:00:00 2001 From: wangyidong Date: Tue, 29 Jan 2019 15:50:28 +0800 Subject: [PATCH 165/442] * fix for upgrade. --- module/upgrade/model.php | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/module/upgrade/model.php b/module/upgrade/model.php index 758df2c013..bc548dcbc2 100644 --- a/module/upgrade/model.php +++ b/module/upgrade/model.php @@ -37,6 +37,7 @@ class upgradeModel extends model public function execute($fromVersion) { set_time_limit(0); + $executeXuanxuan = false; switch($fromVersion) { case '0_3beta': @@ -322,6 +323,7 @@ class upgradeModel extends model $this->saveLogs('Execute 10_1'); $xuanxuanSql = $this->app->getAppRoot() . 'db' . DS . 'xuanxuan.sql'; $this->execSQL($xuanxuanSql); + $executeXuanxuan = true; case '10_2': $this->saveLogs('Execute 10_2'); case '10_3': $this->saveLogs('Execute 10_3'); case '10_3_1': @@ -339,9 +341,12 @@ class upgradeModel extends model $this->execSQL($this->getUpgradeFile('10.5.1')); case '10_6': $this->saveLogs('Execute 10_6'); - $xuanxuanSql = $this->app->getAppRoot() . 'db' . DS . 'upgradexuanxuan2.1.0.sql'; - $this->execSQL($xuanxuanSql); - $xuanxuanSql = $this->app->getAppRoot() . 'db' . DS . 'upgradexuanxuan2.2.0.sql'; + if(!$executeXuanxuan) + { + $xuanxuanSql = $this->app->getAppRoot() . 'db' . DS . 'upgradexuanxuan2.1.0.sql'; + $this->execSQL($xuanxuanSql); + $xuanxuanSql = $this->app->getAppRoot() . 'db' . DS . 'upgradexuanxuan2.2.0.sql'; + } $this->execSQL($xuanxuanSql); $this->initXuanxuan(); case '11_0': $this->saveLogs('Execute 11_0'); @@ -350,8 +355,11 @@ class upgradeModel extends model $this->execSQL($this->getUpgradeFile('11.1')); if(!isset($this->config->isINT) or !($this->config->isINT)) { - $xuanxuanSql = $this->app->getAppRoot() . 'db' . DS . 'upgradexuanxuan2.3.0.sql'; - $this->execSQL($xuanxuanSql); + if(!$executeXuanxuan) + { + $xuanxuanSql = $this->app->getAppRoot() . 'db' . DS . 'upgradexuanxuan2.3.0.sql'; + $this->execSQL($xuanxuanSql); + } $this->dao->update(TABLE_CONFIG)->set('value')->eq('off')->where('`key`')->eq('isHttps')->andWhere('`section`')->eq('xuanxuan')->andWhere('`value`')->eq('0')->exec(); $this->dao->update(TABLE_CONFIG)->set('value')->eq('on')->where('`key`')->eq('isHttps')->andWhere('`section`')->eq('xuanxuan')->andWhere('`value`')->eq('1')->exec(); } From e156be97f43a01b36a050dc627d2779f09f8b976 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Tue, 29 Jan 2019 15:55:05 +0800 Subject: [PATCH 166/442] * fix bug. --- module/upgrade/model.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/upgrade/model.php b/module/upgrade/model.php index bc548dcbc2..4ee452cee2 100644 --- a/module/upgrade/model.php +++ b/module/upgrade/model.php @@ -346,8 +346,8 @@ class upgradeModel extends model $xuanxuanSql = $this->app->getAppRoot() . 'db' . DS . 'upgradexuanxuan2.1.0.sql'; $this->execSQL($xuanxuanSql); $xuanxuanSql = $this->app->getAppRoot() . 'db' . DS . 'upgradexuanxuan2.2.0.sql'; + $this->execSQL($xuanxuanSql); } - $this->execSQL($xuanxuanSql); $this->initXuanxuan(); case '11_0': $this->saveLogs('Execute 11_0'); case '11_1': From f60a6c481a9f6914f34f82b93feabc2a9a7ef313 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Wed, 30 Jan 2019 11:38:29 +0800 Subject: [PATCH 167/442] * adjust for build package. --- Makefile | 3 ++- module/misc/control.php | 11 ++++---- module/misc/view/checkupdate.html.php | 2 +- module/user/view/login.html.php | 3 +-- tools/cn2tw.php | 36 ++++++++++++++++++++------- 5 files changed, 36 insertions(+), 19 deletions(-) diff --git a/Makefile b/Makefile index 4f57265a75..38f45f704c 100644 --- a/Makefile +++ b/Makefile @@ -92,7 +92,8 @@ package: if [ ! -d "zentaopms/config/ext" ]; then mkdir zentaopms/config/ext; fi for module in `ls zentaopms/module/`; do if [ ! -d "zentaopms/module/$$module/ext" ]; then mkdir zentaopms/module/$$module/ext; fi done find zentaopms/ -name ext |xargs chmod -R 777 - tools/cn2tw.php + mkdir zentaopms/tools; cp tools/cn2tw.php zentaopms/tools; cd zentaopms/tools; php cn2tw.php + rm -rf zentaopms/tools pms: make common make zentaoxx diff --git a/module/misc/control.php b/module/misc/control.php index 50be5e57d2..ec78640a24 100644 --- a/module/misc/control.php +++ b/module/misc/control.php @@ -59,16 +59,15 @@ class misc extends control /** * Check current version is latest or not. * + * @param string $sn * @access public * @return void */ - public function checkUpdate() + public function checkUpdate($sn) { - $note = isset($_GET['note']) ? $_GET['note'] : ''; - $browser = isset($_GET['browser']) ? $_GET['browser'] : ''; - - $this->view->note = urldecode(helper::safe64Decode($note)); - $this->view->browser = $browser; + session_write_close(); + $link = $this->lang->misc->api . "/updater-isLatest-{$this->config->version}-{$sn}.html?lang=" . str_replace('-', '_', $this->app->getClientLang()); + $this->view->note = file_get_contents($link); $this->display(); } diff --git a/module/misc/view/checkupdate.html.php b/module/misc/view/checkupdate.html.php index 1d2c232160..a382cecefd 100644 --- a/module/misc/view/checkupdate.html.php +++ b/module/misc/view/checkupdate.html.php @@ -1,7 +1,7 @@ - style='color:white; font-size:13px; text-align:center'> +server->http_user_agen, 'opera') === false) echo "bgcolor='transparent'";?> style='color:white; font-size:13px; text-align:center'> diff --git a/module/user/view/login.html.php b/module/user/view/login.html.php index 44a212fce3..61e43b8b73 100644 --- a/module/user/view/login.html.php +++ b/module/user/view/login.html.php @@ -82,8 +82,7 @@ if(empty($config->notMd5Pwd))js::import($jsRoot . 'md5.js');
          checkVersion):?> - - +
          diff --git a/tools/cn2tw.php b/tools/cn2tw.php index 8af43a45b4..e993d86635 100755 --- a/tools/cn2tw.php +++ b/tools/cn2tw.php @@ -3,16 +3,34 @@ $langType = 'zh-tw'; $langDesc = 'zh-tw'; if(empty($langType)) die('lang') . "\n"; -foreach(glob('../module/*') as $moduleName) +foreach(array('../module/') as $subModuleRoot) { - $moduleLangPath = realpath($moduleName) . '/lang/'; - $defaultLangFile = $moduleLangPath . 'zh-cn.php'; - $targetLangFile = $moduleLangPath . $langType . '.php'; - if(!file_exists($defaultLangFile)) continue; + foreach(glob($subModuleRoot . '*') as $moduleName) + { + $realModulePath = realpath($moduleName); + $moduleLangPath = $realModulePath . '/lang/'; + $defaultLangFile = $moduleLangPath . 'zh-cn.php'; + $targetLangFile = $moduleLangPath . $langType . '.php'; + if(file_exists($defaultLangFile)) + { + system("cconv -f utf-8 -t UTF8-TW $defaultLangFile > $targetLangFile"); + $defaultLang = file_get_contents($targetLangFile); + $targetLang = str_replace('zh-cn', $langDesc, $defaultLang); + file_put_contents($targetLangFile, $targetLang); + } - system("cconv -f utf-8 -t UTF8-TW $defaultLangFile > $targetLangFile"); - $defaultLang = file_get_contents($targetLangFile); - $targetLang = str_replace('zh-cn', $langDesc, $defaultLang); - file_put_contents($targetLangFile, $targetLang); + $extModuleLangPath = $realModulePath . '/ext/lang/zh-cn/*.php'; + foreach(glob($extModuleLangPath) as $extModuleLang) + { + $fileName = basename($extModuleLang); + if(!is_dir("{$realModulePath}/ext/lang/{$langType}/")) `mkdir -p {$realModulePath}/ext/lang/{$langType}/`; + $targetLangFile = $realModulePath . "/ext/lang/{$langType}/" . $fileName; + + system("cconv -f utf-8 -t UTF8-TW $extModuleLang > $targetLangFile"); + $defaultLang = file_get_contents($targetLangFile); + $targetLang = str_replace('zh-cn', $langDesc, $defaultLang); + file_put_contents($targetLangFile, $targetLang); + } + } } ?> From bcdfc60b2ab5e0ebeca3dae5e28434f1cd3a98c5 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Wed, 30 Jan 2019 15:00:24 +0800 Subject: [PATCH 168/442] * adjust for cn2tw when make zentaoxx. --- Makefile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Makefile b/Makefile index 38f45f704c..f511627ccc 100644 --- a/Makefile +++ b/Makefile @@ -79,6 +79,8 @@ zentaoxx: sed -i 's/sys_user/zt_user/' zentaoxx/db/*.sql sed -i 's/sys_file/zt_file/' zentaoxx/db/*.sql sed -i '/sys_entry/d' zentaoxx/db/*.sql + mkdir zentaoxx/tools; cp tools/cn2tw.php zentaoxx/tools; cd zentaoxx/tools; php cn2tw.php + rm -rf zentaopms/tools zip -rqm -9 zentaoxx.$(VERSION).zip zentaoxx/* rm -rf xuan.zip xuan zentaoxx package: From d9fe07cb9ab0884c20bcea9de78a6a86bf86ba91 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Thu, 31 Jan 2019 09:53:17 +0800 Subject: [PATCH 169/442] * adjust for upgrade. --- module/upgrade/view/afterexec.html.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/module/upgrade/view/afterexec.html.php b/module/upgrade/view/afterexec.html.php index 6553e3f521..24632e4e80 100644 --- a/module/upgrade/view/afterexec.html.php +++ b/module/upgrade/view/afterexec.html.php @@ -42,8 +42,7 @@ + + diff --git a/module/install/lang/en.php b/module/install/lang/en.php index 1b0ba92f96..3817747cd8 100644 --- a/module/install/lang/en.php +++ b/module/install/lang/en.php @@ -88,6 +88,7 @@ $lang->install->chmodWin = ' "%s" privilege has to be changed.'; $lang->install->mkdirLinux = '

          %s directory has to be created.
          Run mkdir -p %s to create it.

          '; $lang->install->chmodLinux = ' "%s" privilege has to be changed.
          Run chmod o=rwx -R %s to change it.'; +$lang->install->timezone = 'Set Timezone'; $lang->install->defaultLang = 'Default Language'; $lang->install->dbHost = 'Database Host'; $lang->install->dbHostNote = 'If 127.0.0.1 is not accessible, try localhost.'; diff --git a/module/install/lang/zh-cn.php b/module/install/lang/zh-cn.php index 2d376227d0..893a92576c 100644 --- a/module/install/lang/zh-cn.php +++ b/module/install/lang/zh-cn.php @@ -88,6 +88,7 @@ $lang->install->chmodWin = '需要修改目录 "%s" 的权限。'; $lang->install->mkdirLinux = '

          需要创建目录%s。
          命令为:
          mkdir -p %s

          '; $lang->install->chmodLinux = '需要修改目录 "%s" 的权限。
          命令为:
          chmod o=rwx -R %s'; +$lang->install->timezone = '时区设置'; $lang->install->defaultLang = '默认语言'; $lang->install->dbHost = '数据库服务器'; $lang->install->dbHostNote = '如果127.0.0.1无法访问,尝试使用localhost'; diff --git a/module/install/view/step2.html.php b/module/install/view/step2.html.php index a2b2431126..c050bb1778 100644 --- a/module/install/view/step2.html.php +++ b/module/install/view/step2.html.php @@ -22,6 +22,11 @@ install->value?> + + app->getConfigRoot() . 'timezones.php';?> + install->timezone;?> + timezone, "class='form-control'");?> + install->defaultLang;?> langs, $app->getClientLang(), "class='form-control'");?> diff --git a/module/install/view/step3.html.php b/module/install/view/step3.html.php index 7ff5bb471c..89130bb7e4 100644 --- a/module/install/view/step3.html.php +++ b/module/install/view/step3.html.php @@ -18,6 +18,7 @@ if(!isset($error)) \$config->installed = true; \$config->debug = false; \$config->requestType = '$requestType'; +\$config->timezone = '$timezone'; \$config->db->host = '$dbHost'; \$config->db->port = '$dbPort'; \$config->db->name = '$dbName'; From 6efbe8245555985961de56cffbd1eb1db4f87e22 Mon Sep 17 00:00:00 2001 From: Yagami Date: Wed, 20 Feb 2019 15:53:47 +0800 Subject: [PATCH 207/442] * Finish task #5309. --- module/admin/view/bind.html.php | 2 +- module/admin/view/certifyztemail.html.php | 4 +-- module/admin/view/certifyztmobile.html.php | 4 +-- module/admin/view/register.html.php | 16 +++++----- module/admin/view/sso.html.php | 6 ++-- module/admin/view/ztcompany.html.php | 2 +- module/api/view/debug.html.php | 2 +- module/backup/view/change.html.php | 2 +- module/block/view/publicform.html.php | 2 +- module/block/view/todoblock.html.php | 6 ++-- module/bug/view/batchcreate.html.php | 12 +++---- module/bug/view/batchedit.html.php | 2 +- module/bug/view/create.html.php | 6 ++-- module/bug/view/edit.html.php | 2 +- module/build/view/create.html.php | 6 ++-- module/build/view/edit.html.php | 6 ++-- module/company/view/edit.html.php | 14 ++++---- module/cron/view/create.html.php | 14 ++++---- module/cron/view/edit.html.php | 14 ++++---- module/custom/view/set.html.php | 10 +++--- module/dept/view/browse.html.php | 4 +-- module/dept/view/edit.html.php | 2 +- module/doc/view/create.html.php | 6 ++-- module/doc/view/createlib.html.php | 2 +- module/doc/view/edit.html.php | 6 ++-- module/doc/view/editlib.html.php | 2 +- module/editor/view/edit.html.php | 2 +- module/editor/view/newpage.html.php | 2 +- module/extension/view/obtain.html.php | 2 +- module/file/view/edit.html.php | 2 +- module/file/view/export.html.php | 4 +-- module/group/view/copy.html.php | 2 +- module/group/view/create.html.php | 2 +- module/group/view/edit.html.php | 2 +- module/install/view/step2.html.php | 12 +++---- module/install/view/step4.html.php | 6 ++-- module/mail/view/detect.html.php | 2 +- module/mail/view/edit.html.php | 14 ++++---- module/mail/view/sendcloud.html.php | 6 ++-- module/mail/view/ztcloud.html.php | 6 ++-- module/my/view/changepassword.html.php | 2 +- module/my/view/editprofile.html.php | 30 ++++++++--------- module/my/view/todo.html.php | 2 +- module/product/view/batchedit.html.php | 6 ++-- module/product/view/create.html.php | 4 +-- module/product/view/edit.html.php | 4 +-- module/productplan/view/batchedit.html.php | 2 +- module/productplan/view/create.html.php | 2 +- module/productplan/view/edit.html.php | 2 +- module/project/view/batchedit.html.php | 10 +++--- module/project/view/create.html.php | 8 ++--- module/project/view/edit.html.php | 8 ++--- module/project/view/fixfirst.html.php | 2 +- module/project/view/importbug.html.php | 4 +-- module/project/view/putoff.html.php | 2 +- module/release/view/create.html.php | 2 +- module/release/view/edit.html.php | 2 +- module/release/view/export.html.php | 2 +- module/report/view/workload.html.php | 4 +-- module/search/view/buildform.html.php | 6 ++-- module/sso/view/bind.html.php | 8 ++--- module/story/view/batchclose.html.php | 6 ++-- module/story/view/batchcreate.html.php | 4 +-- module/story/view/batchedit.html.php | 12 +++---- module/story/view/close.html.php | 4 +-- module/story/view/create.html.php | 6 ++-- module/story/view/edit.html.php | 10 +++--- module/story/view/review.html.php | 8 ++--- module/task/view/activate.html.php | 2 +- module/task/view/assignto.html.php | 2 +- module/task/view/batchcreate.html.php | 8 ++--- module/task/view/batchedit.html.php | 8 ++--- module/task/view/create.html.php | 4 +-- module/task/view/edit.html.php | 18 +++++------ module/task/view/editestimate.html.php | 4 +-- module/task/view/finish.html.php | 2 +- module/task/view/recordestimate.html.php | 4 +-- module/task/view/start.html.php | 4 +-- module/testcase/view/batchcreate.html.php | 8 ++--- module/testcase/view/batchedit.html.php | 4 +-- module/testcase/view/create.html.php | 4 +-- module/testcase/view/edit.html.php | 4 +-- module/testcase/view/exporttemplet.html.php | 2 +- .../testsuite/view/batchcreatecase.html.php | 8 ++--- module/testsuite/view/create.html.php | 2 +- module/testsuite/view/createcase.html.php | 4 +-- module/testsuite/view/createlib.html.php | 2 +- module/testsuite/view/edit.html.php | 2 +- module/testsuite/view/exporttemplet.html.php | 2 +- module/testsuite/view/showimport.html.php | 4 +-- module/testtask/view/create.html.php | 2 +- module/testtask/view/edit.html.php | 2 +- module/todo/view/batchcreate.html.php | 4 +-- module/todo/view/batchedit.html.php | 4 +-- module/todo/view/create.html.php | 4 +-- module/todo/view/edit.html.php | 2 +- module/tree/view/browse.html.php | 12 +++---- module/tree/view/browsetask.html.php | 14 ++++---- module/tree/view/edit.html.php | 4 +-- module/user/view/batchcreate.html.php | 32 +++++++++---------- module/user/view/batchedit.html.php | 28 ++++++++-------- module/user/view/create.html.php | 14 ++++---- module/user/view/edit.html.php | 32 +++++++++---------- 103 files changed, 318 insertions(+), 318 deletions(-) diff --git a/module/admin/view/bind.html.php b/module/admin/view/bind.html.php index 65b264cde1..57d9c23fa4 100644 --- a/module/admin/view/bind.html.php +++ b/module/admin/view/bind.html.php @@ -27,7 +27,7 @@ $account = zget($config->global, 'community', ''); if($account == 'na') $account = ''; ?> - + user->password;?> diff --git a/module/admin/view/certifyztemail.html.php b/module/admin/view/certifyztemail.html.php index 6f4ddf0cc3..a7a92c696a 100644 --- a/module/admin/view/certifyztemail.html.php +++ b/module/admin/view/certifyztemail.html.php @@ -20,12 +20,12 @@ - + - + diff --git a/module/admin/view/certifyztmobile.html.php b/module/admin/view/certifyztmobile.html.php index bfb96d57b0..b4f6de971c 100644 --- a/module/admin/view/certifyztmobile.html.php +++ b/module/admin/view/certifyztmobile.html.php @@ -20,12 +20,12 @@
          user->email;?> admin->getCaptcha, '', "id='codeSender' class='btn'");?>
          admin->captcha;?>
          - + - + diff --git a/module/admin/view/register.html.php b/module/admin/view/register.html.php index 5e0a6f1013..fddc4227cd 100644 --- a/module/admin/view/register.html.php +++ b/module/admin/view/register.html.php @@ -31,27 +31,27 @@ - + - + @@ -60,11 +60,11 @@ @@ -102,7 +102,7 @@ $account = zget($config->global, 'community', ''); if($account == 'na') $account = ''; ?> - + diff --git a/module/admin/view/sso.html.php b/module/admin/view/sso.html.php index 7e7cfa0950..54cbd57a41 100644 --- a/module/admin/view/sso.html.php +++ b/module/admin/view/sso.html.php @@ -33,15 +33,15 @@ - + - + - + - + diff --git a/module/api/view/debug.html.php b/module/api/view/debug.html.php index a0c2a7f61a..0ee3e80584 100644 --- a/module/api/view/debug.html.php +++ b/module/api/view/debug.html.php @@ -20,7 +20,7 @@ parameters as $param):?> - + diff --git a/module/backup/view/change.html.php b/module/backup/view/change.html.php index 07d352dddc..b783417883 100644 --- a/module/backup/view/change.html.php +++ b/module/backup/view/change.html.php @@ -20,7 +20,7 @@ diff --git a/module/block/view/publicform.html.php b/module/block/view/publicform.html.php index b0159cc09c..537dd8e250 100644 --- a/module/block/view/publicform.html.php +++ b/module/block/view/publicform.html.php @@ -12,7 +12,7 @@ ?>
          -
          title : '', "class='form-control' autocomplete='off'")?>
          +
          title : '', "class='form-control'")?>
          diff --git a/module/block/view/todoblock.html.php b/module/block/view/todoblock.html.php index 2095baf406..e1e8037cd4 100644 --- a/module/block/view/todoblock.html.php +++ b/module/block/view/todoblock.html.php @@ -37,12 +37,12 @@ if(!$selfCall) die(include('./todolist.html.php'));
          -
          +
          '>

          todo->create;?>

          -
          +
          @@ -52,7 +52,7 @@ if(!$selfCall) die(include('./todolist.html.php'));
          - +
          diff --git a/module/bug/view/batchcreate.html.php b/module/bug/view/batchcreate.html.php index b50896bbd6..0e053826b3 100644 --- a/module/bug/view/batchcreate.html.php +++ b/module/bug/view/batchcreate.html.php @@ -96,7 +96,7 @@
          - + @@ -138,7 +138,7 @@ - + @@ -183,7 +183,7 @@ - +
          user->mobile;?> admin->getCaptcha, '', "id='codeSender' class='btn'");?>
          admin->captcha;?>
          user->account;?>
          - admin->register->lblAccount}' autocomplete='off'");?> + admin->register->lblAccount}'");?>
          user->realname;?>
          user->company;?>
          company, "class='form-control' autocomplete='off'");?>
          company, "class='form-control'");?>
          user->mobile;?>
          - + admin->getCaptcha, '', "id='mobileSender' class='btn'")?> admin->captcha?> - +
          - email, "class='form-control' autocomplete='off'");?> + email, "class='form-control'");?> admin->getCaptcha, '', "id='mailSender' class='btn'")?> admin->captcha?> - +
          user->password;?>
          sso->addr; ?>sso->addrNotice}' autocomplete='off'");?>sso->addrNotice}'");?>
          sso->code; ?>
          sso->key; ?>
          diff --git a/module/admin/view/ztcompany.html.php b/module/admin/view/ztcompany.html.php index 8b4fda9dc9..9cd5285164 100644 --- a/module/admin/view/ztcompany.html.php +++ b/module/admin/view/ztcompany.html.php @@ -21,7 +21,7 @@
          company->name : $lang->user->$field;?>
          name?>name", $param->isOptional() ? $param->getDefaultValue() : '', "class='form-control' autocomplete='off'")?>name", $param->isOptional() ? $param->getDefaultValue() : '', "class='form-control'")?>
          - backup->holdDays, "class='form-control' autocomplete='off'");?> + backup->holdDays, "class='form-control'");?> day;?>
          - +
          ' style='overflow:visible'>bug->severityList, '', "class='form-control'");?> ' style='overflow:visible'> bug->osList, $os, "class='form-control chosen'");?> ' style='overflow:visible'> bug->browserList, $browser, "class='form-control chosen'");?>'>'>
          - +
          ' style='overflow:visible'>bug->severityList, '', "class='form-control'");?> ' style='overflow:visible'> bug->osList, $os, "class='form-control chosen'");?> ' style='overflow:visible'> bug->browserList, $browser, "class='form-control chosen'");?>'>'>
          - +
          ' style='overflow:visible'>bug->severityList, '', "class='form-control'");?> ' style='overflow:visible'> bug->osList, $os, "class='form-control chosen'");?> ' style='overflow:visible'> bug->browserList, $browser, "class='form-control chosen'");?>'>'>
          diff --git a/module/bug/view/batchedit.html.php b/module/bug/view/batchedit.html.php index 583a034054..45bbf84e53 100644 --- a/module/bug/view/batchedit.html.php +++ b/module/bug/view/batchedit.html.php @@ -99,7 +99,7 @@
          - title, "class='form-control' autocomplete='off' style='color:{$bug->color}'");?> + title, "class='form-control' style='color:{$bug->color}'");?>
          From 231d341e18943af94e60355f2c86c808a62b7c8b Mon Sep 17 00:00:00 2001 From: Yagami Date: Thu, 21 Feb 2019 15:57:02 +0800 Subject: [PATCH 229/442] * Code for task #5284. --- module/testreport/view/view.html.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/testreport/view/view.html.php b/module/testreport/view/view.html.php index 1822d82c4a..664d26938c 100644 --- a/module/testreport/view/view.html.php +++ b/module/testreport/view/view.html.php @@ -112,7 +112,7 @@ objectID&objectType=$report->objectType"), "", '', "class='btn' title='{$lang->testreport->recreate}'"); common::printIcon('testreport', 'edit', "reportID=$report->id", '', 'button'); - common::printIcon('testreport', 'delete', "reportID=$report->id", '', 'button', '', 'hiddenwin'); + common::printIcon('testreport', 'delete', "reportID=$report->id", '', 'button', 'trash', 'hiddenwin'); ?>
          From 47e9ea309df75b8c259d8970dc23be5c15f24d1e Mon Sep 17 00:00:00 2001 From: Yagami Date: Thu, 21 Feb 2019 16:14:07 +0800 Subject: [PATCH 230/442] * Code for task #5284. --- module/project/view/treestory.html.php | 2 +- module/project/view/treetask.html.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/module/project/view/treestory.html.php b/module/project/view/treestory.html.php index c053804db0..893dbd1fdc 100644 --- a/module/project/view/treestory.html.php +++ b/module/project/view/treestory.html.php @@ -12,7 +12,7 @@ common::printIcon('story', 'change', $vars, $story, 'list', 'fork', '', 'btn btn-info btn-icon'); common::printIcon('story', 'delete', $vars, $story, 'list', 'trash', 'hiddenwin', 'btn btn-info btn-icon'); common::printIcon('story', 'review', $vars, $story, 'list', 'glasses', '', 'btn btn-info btn-icon'); - common::printIcon('story', 'close', $vars, $story, 'list', 'off', '', 'btn btn-info btn-icon iframe', true); + common::printIcon('story', 'close', $vars, $story, 'list', 'close', '', 'btn btn-info btn-icon iframe', true); common::printIcon('story', 'edit', $vars, $story, 'list', '', '', 'btn btn-info btn-icon'); if($config->global->flow != 'onlyStory') common::printIcon('story', 'createCase', "productID=$story->product&branch=$story->branch&module=0&from=¶m=0&$vars", $story, 'list', 'sitemap', '', 'btn btn-info btn-icon'); ?> diff --git a/module/project/view/treetask.html.php b/module/project/view/treetask.html.php index c3fc9afd33..d86b6c68cd 100644 --- a/module/project/view/treetask.html.php +++ b/module/project/view/treetask.html.php @@ -24,7 +24,7 @@ if($task->status == 'wait') common::printIcon('task', 'finish', "taskID=$task->id", $task, 'list', '', '', 'btn btn-info btn-icon iframe', true); if($task->status == 'wait') common::printIcon('task', 'start', "taskID=$task->id", $task, 'list', '', '', 'btn btn-info btn-icon iframe', true); if($task->status == 'pause') common::printIcon('task', 'restart', "taskID=$task->id", $task, 'list', '', '', 'btn btn-info btn-icon iframe', true); - if($task->status == 'done' or $task->status == 'cancel' or $task->status == 'closed') common::printIcon('task', 'close', "taskID=$task->id", $task, 'list', '', '', 'btn btn-info btn-icon iframe', true); + if($task->status == 'done' or $task->status == 'cancel' or $task->status == 'closed') common::printIcon('task', 'close', "taskID=$task->id", $task, 'list', 'close', '', 'btn btn-info btn-icon iframe', true); if($task->status == 'doing') common::printIcon('task', 'finish', "taskID=$task->id", $task, 'list', '', '', 'btn btn-info btn-icon iframe', true); common::printIcon('task', 'recordEstimate', "taskID=$task->id", $task, 'list', 'time', '', 'btn btn-info btn-icon iframe', true); From c15a28e3c4495a2a185c450e370401f74d46957f Mon Sep 17 00:00:00 2001 From: wangyidong Date: Thu, 21 Feb 2019 16:17:26 +0800 Subject: [PATCH 231/442] * finish task #5274. --- module/bug/model.php | 56 ++++++++++++------------- module/productplan/view/browse.html.php | 4 +- module/story/model.php | 36 ++++++++-------- module/task/model.php | 4 +- module/testcase/model.php | 14 +++---- module/testtask/model.php | 4 +- module/tree/model.php | 2 +- 7 files changed, 60 insertions(+), 60 deletions(-) diff --git a/module/bug/model.php b/module/bug/model.php index 6fac1b92cc..ee0405e9fe 100644 --- a/module/bug/model.php +++ b/module/bug/model.php @@ -134,8 +134,8 @@ class bugModel extends model { $now = helper::now(); $bug = fixer::input('post') - ->add('openedBy', $this->app->user->account) - ->add('openedDate', $now) + ->setDefault('openedBy', $this->app->user->account) + ->setDefault('openedDate', $now) ->setDefault('project,story,task', 0) ->setDefault('openedBuild', '') ->setDefault('deadline', '0000-00-00') @@ -600,9 +600,9 @@ class bugModel extends model ->setDefault('plan', 0) ->setDefault('deadline', '0000-00-00') ->setDefault('resolvedDate', '0000-00-00 00:00:00') + ->setDefault('lastEditedBy', $this->app->user->account) + ->setDefault('lastEditedDate', $now) ->setIF(strpos($this->config->bug->edit->requiredFields, 'deadline') !== false, 'deadline', $this->post->deadline) - ->add('lastEditedBy', $this->app->user->account) - ->add('lastEditedDate', $now) ->join('openedBuild', ',') ->join('mailto', ',') ->join('linkBug', ',') @@ -908,15 +908,15 @@ class bugModel extends model $now = helper::now(); $oldBug = $this->getById($bugID); $bug = fixer::input('post') - ->add('resolvedBy', $this->app->user->account) - ->add('status', 'resolved') - ->add('confirmed', 1) - ->add('assignedDate', $now) - ->add('lastEditedBy', $this->app->user->account) - ->add('lastEditedDate', $now) - ->setDefault('resolvedDate', $now) - ->setDefault('duplicateBug', 0) - ->setDefault('assignedTo', $oldBug->openedBy) + ->add('status', 'resolved') + ->add('confirmed', 1) + ->setDefault('lastEditedBy', $this->app->user->account) + ->setDefault('lastEditedDate', $now) + ->setDefault('resolvedBy', $this->app->user->account) + ->setDefault('assignedDate', $now) + ->setDefault('resolvedDate', $now) + ->setDefault('duplicateBug', 0) + ->setDefault('assignedTo', $oldBug->openedBy) ->remove('comment,files,labels') ->get(); @@ -1111,8 +1111,11 @@ class bugModel extends model $oldBug = $this->getById($bugID); $now = helper::now(); $bug = fixer::input('post') - ->setDefault('assignedTo', $oldBug->resolvedBy) - ->add('assignedDate', $now) + ->setDefault('assignedTo', $oldBug->resolvedBy) + ->setDefault('assignedDate', $now) + ->setDefault('lastEditedBy', $this->app->user->account) + ->setDefault('lastEditedDate', $now) + ->setDefault('activatedDate', $now) ->add('resolution', '') ->add('status', 'active') ->add('resolvedDate', '0000-00-00') @@ -1123,9 +1126,6 @@ class bugModel extends model ->add('duplicateBug', 0) ->add('toTask', 0) ->add('toStory', 0) - ->add('lastEditedBy', $this->app->user->account) - ->add('lastEditedDate', $now) - ->add('activatedDate', $now) ->join('openedBuild', ',') ->remove('comment,files,labels') ->get(); @@ -1149,14 +1149,14 @@ class bugModel extends model $now = helper::now(); $oldBug = $this->getById($bugID); $bug = fixer::input('post') - ->add('assignedTo', 'closed') - ->add('assignedDate', $now) - ->add('status', 'closed') - ->add('closedBy', $this->app->user->account) - ->add('closedDate', $now) - ->add('lastEditedBy', $this->app->user->account) - ->add('lastEditedDate', $now) - ->add('confirmed', 1) + ->add('assignedTo', 'closed') + ->add('status', 'closed') + ->add('confirmed', 1) + ->setDefault('assignedDate', $now) + ->setDefault('lastEditedBy', $this->app->user->account) + ->setDefault('lastEditedDate', $now) + ->setDefault('closedBy', $this->app->user->account) + ->setDefault('closedDate', $now) ->remove('comment') ->get(); @@ -1956,8 +1956,8 @@ class bugModel extends model public function saveUserBugTemplate() { $template = fixer::input('post') - ->add('account', $this->app->user->account) - ->add('type', 'bug') + ->setDefault('account', $this->app->user->account) + ->setDefault('type', 'bug') ->stripTags('content', $this->config->allowedTags) ->get(); diff --git a/module/productplan/view/browse.html.php b/module/productplan/view/browse.html.php index fbedcc65f0..7e3d59eade 100644 --- a/module/productplan/view/browse.html.php +++ b/module/productplan/view/browse.html.php @@ -52,7 +52,7 @@ idAB);?> - productplan->title);?> + productplan->title);?> session->currentProductType != 'normal'):?> product->branch);?> @@ -97,7 +97,7 @@ id);?> - ' title="title?>"> + ' title="title?>"> id"), $plan->title); if($plan->parent == '-1') echo ''; diff --git a/module/story/model.php b/module/story/model.php index f7f880095d..a2683d6480 100644 --- a/module/story/model.php +++ b/module/story/model.php @@ -147,12 +147,12 @@ class storyModel extends model ->cleanInt('product,module,pri,plan') ->cleanFloat('estimate') ->callFunc('title', 'trim') - ->setDefault('plan,verify', '') - ->add('openedBy', $this->app->user->account) - ->add('openedDate', $now) ->add('assignedDate', 0) ->add('version', 1) ->add('status', 'draft') + ->setDefault('plan,verify', '') + ->setDefault('openedBy', $this->app->user->account) + ->setDefault('openedDate', $now) ->setIF($this->post->assignedTo != '', 'assignedDate', $now) ->setIF($this->post->needNotReview or $projectID > 0, 'status', 'active') ->setIF($this->post->plan > 0, 'stage', 'planned') @@ -416,8 +416,8 @@ class storyModel extends model $now = helper::now(); $story = fixer::input('post') ->callFunc('title', 'trim') - ->add('lastEditedBy', $this->app->user->account) - ->add('lastEditedDate', $now) + ->setDefault('lastEditedBy', $this->app->user->account) + ->setDefault('lastEditedDate', $now) ->setIF($this->post->assignedTo != $oldStory->assignedTo, 'assignedDate', $now) ->setIF($specChanged, 'version', $oldStory->version + 1) ->setIF($specChanged and $oldStory->status == 'active' and $this->post->needNotReview == false, 'status', 'changed') @@ -478,9 +478,9 @@ class storyModel extends model $story = fixer::input('post') ->cleanInt('product,module,pri,duplicateStory') ->cleanFloat('estimate') - ->add('assignedDate', $oldStory->assignedDate) - ->add('lastEditedBy', $this->app->user->account) - ->add('lastEditedDate', $now) + ->setDefault('assignedDate', $oldStory->assignedDate) + ->setDefault('lastEditedBy', $this->app->user->account) + ->setDefault('lastEditedDate', $now) ->setDefault('plan', '') ->setDefault('status', $oldStory->status) ->setDefault('product', $oldStory->product) @@ -687,8 +687,8 @@ class storyModel extends model $story = fixer::input('post') ->remove('result,preVersion,comment') ->setDefault('reviewedDate', $date) - ->add('lastEditedBy', $this->app->user->account) - ->add('lastEditedDate', $now) + ->setDefault('lastEditedBy', $this->app->user->account) + ->setDefault('lastEditedDate', $now) ->setIF($this->post->result == 'pass' and $oldStory->status == 'draft', 'status', 'active') ->setIF($this->post->result == 'pass' and $oldStory->status == 'changed', 'status', 'active') ->setIF($this->post->result == 'reject', 'closedBy', $this->app->user->account) @@ -830,14 +830,14 @@ class storyModel extends model $oldStory = $this->dao->findById($storyID)->from(TABLE_STORY)->fetch(); $now = helper::now(); $story = fixer::input('post') - ->add('lastEditedBy', $this->app->user->account) - ->add('lastEditedDate', $now) - ->add('closedDate', $now) - ->add('closedBy', $this->app->user->account) ->add('assignedTo', 'closed') - ->add('assignedDate', $now) ->add('status', 'closed') ->add('stage', 'closed') + ->setDefault('lastEditedBy', $this->app->user->account) + ->setDefault('lastEditedDate', $now) + ->setDefault('closedDate', $now) + ->setDefault('closedBy', $this->app->user->account) + ->setDefault('assignedDate', $now) ->removeIF($this->post->closedReason != 'duplicate', 'duplicateStory') ->removeIF($this->post->closedReason != 'subdivided', 'childStories') ->setIF($this->post->closedReason == 'done', 'stage', 'released') @@ -1097,9 +1097,6 @@ class storyModel extends model $oldStory = $this->dao->findById($storyID)->from(TABLE_STORY)->fetch(); $now = helper::now(); $story = fixer::input('post') - ->add('lastEditedBy', $this->app->user->account) - ->add('lastEditedDate', $now) - ->add('assignedDate', $now) ->add('closedBy', '') ->add('closedReason', '') ->add('closedDate', '0000-00-00') @@ -1107,6 +1104,9 @@ class storyModel extends model ->add('reviewedDate', '0000-00-00') ->add('duplicateStory', 0) ->add('childStories', '') + ->setDefault('lastEditedBy', $this->app->user->account) + ->setDefault('lastEditedDate', $now) + ->setDefault('assignedDate', $now) ->remove('comment') ->get(); $this->dao->update(TABLE_STORY)->data($story)->autoCheck()->where('id')->eq($storyID)->exec(); diff --git a/module/task/model.php b/module/task/model.php index 5487f33fa3..bc80ca5df4 100644 --- a/module/task/model.php +++ b/module/task/model.php @@ -616,8 +616,8 @@ class taskModel extends model ->setIF($this->post->status == 'wait' and $this->post->left == $oldTask->left and $this->post->consumed == 0 and $this->post->estimate, 'left', $this->post->estimate) - ->add('lastEditedBy', $this->app->user->account) - ->add('lastEditedDate', $now) + ->setDefault('lastEditedBy', $this->app->user->account) + ->setDefault('lastEditedDate', $now) ->stripTags($this->config->task->editor->edit['id'], $this->config->allowedTags) ->join('mailto', ',') ->remove('comment,files,labels,uid,multiple,team,teamEstimate,teamConsumed,teamLeft,contactListMenu') diff --git a/module/testcase/model.php b/module/testcase/model.php index e9b095e2ec..6fb57ab2c6 100644 --- a/module/testcase/model.php +++ b/module/testcase/model.php @@ -185,11 +185,11 @@ class testcaseModel extends model { $now = helper::now(); $case = fixer::input('post') - ->add('openedBy', $this->app->user->account) - ->add('openedDate', $now) ->add('status', $this->forceNotReview() || $this->post->forceNotReview ? 'normal' : 'wait') ->add('version', 1) ->add('fromBug', $bugID) + ->setDefault('openedBy', $this->app->user->account) + ->setDefault('openedDate', $now) ->setIF($this->post->story != false, 'storyVersion', $this->loadModel('story')->getVersion((int)$this->post->story)) ->remove('steps,expects,files,labels,stepType,forceNotReview') ->setDefault('story', 0) @@ -676,11 +676,11 @@ class testcaseModel extends model $version = $stepChanged ? $oldCase->version + 1 : $oldCase->version; $case = fixer::input('post') - ->add('lastEditedBy', $this->app->user->account) - ->add('lastEditedDate', $now) ->add('version', $version) ->setIF($this->post->story != false and $this->post->story != $oldCase->story, 'storyVersion', $this->loadModel('story')->getVersion($this->post->story)) - ->setDefault('story,branch', 0) + ->setDefault('lastEditedBy', $this->app->user->account) + ->setDefault('lastEditedDate', $now) + ->setDefault('story,branch', 0) ->join('stage', ',') ->join('linkCase', ',') ->remove('comment,steps,expects,files,labels,stepType') @@ -752,8 +752,8 @@ class testcaseModel extends model $case = fixer::input('post') ->remove('result,comment') ->setDefault('reviewedDate', substr($now, 0, 10)) - ->add('lastEditedBy', $this->app->user->account) - ->add('lastEditedDate', $now) + ->setDefault('lastEditedBy', $this->app->user->account) + ->setDefault('lastEditedDate', $now) ->setIF($this->post->result == 'pass', 'status', 'normal') ->join('reviewedBy', ',') ->get(); diff --git a/module/testtask/model.php b/module/testtask/model.php index 31ea1eb449..9cf83de325 100644 --- a/module/testtask/model.php +++ b/module/testtask/model.php @@ -915,8 +915,8 @@ class testtaskModel extends model ->add('run', $runID) ->add('caseResult', $caseResult) ->setForce('stepResults', serialize($stepResults)) - ->add('lastRunner', $this->app->user->account) - ->add('date', $now) + ->setDefault('lastRunner', $this->app->user->account) + ->setDefault('date', $now) ->skipSpecial('stepResults') ->remove('steps,reals,result') ->get(); diff --git a/module/tree/model.php b/module/tree/model.php index b6ae0881dd..ce3cabb835 100644 --- a/module/tree/model.php +++ b/module/tree/model.php @@ -112,7 +112,7 @@ class treeModel extends model ksort($treeMenu); $topMenu = @array_shift($treeMenu); $topMenu = explode("\n", trim($topMenu)); - $lastMenu[] = in_array($type, array('bug', 'story')) ? '' : '/'; + $lastMenu[] = '/'; foreach($topMenu as $menu) { if(!strpos($menu, '|')) continue; From 70f6eafd06388ce1ee58520713fbc1e3064f8664 Mon Sep 17 00:00:00 2001 From: Yagami Date: Thu, 21 Feb 2019 17:18:44 +0800 Subject: [PATCH 232/442] * Code task #5287. --- module/bug/model.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/bug/model.php b/module/bug/model.php index 481078c655..6b9b0df027 100644 --- a/module/bug/model.php +++ b/module/bug/model.php @@ -385,7 +385,7 @@ class bugModel extends model // Delayed or not?. if($bug->deadline != '0000-00-00') { - if(substr($bug->resolvedDate, 0, 10) != '0000-00-00') + if($bug->resolvedDate and substr($bug->resolvedDate, 0, 10) != '0000-00-00') { $delay = helper::diffDate(substr($bug->resolvedDate, 0, 10), $bug->deadline); } From c41e0a89ab405b13fae0a8ee6ae746e32282e47c Mon Sep 17 00:00:00 2001 From: Yagami Date: Fri, 22 Feb 2019 08:44:08 +0800 Subject: [PATCH 233/442] * Finish task #5304. --- module/story/model.php | 1 + 1 file changed, 1 insertion(+) diff --git a/module/story/model.php b/module/story/model.php index f7f880095d..4291d032a8 100644 --- a/module/story/model.php +++ b/module/story/model.php @@ -485,6 +485,7 @@ class storyModel extends model ->setDefault('status', $oldStory->status) ->setDefault('product', $oldStory->product) ->setDefault('branch', $oldStory->branch) + ->setIF(!$this->post->linkStories, 'linkStories', '') ->setIF($this->post->assignedTo != $oldStory->assignedTo, 'assignedDate', $now) ->setIF($this->post->closedBy != false and $oldStory->closedDate == '', 'closedDate', $now) ->setIF($this->post->closedReason != false and $oldStory->closedDate == '', 'closedDate', $now) From 2c46679d26fd3b2c153ca80dc0ff6a0ee6fbc28b Mon Sep 17 00:00:00 2001 From: reneeteng Date: Fri, 22 Feb 2019 08:53:46 +0800 Subject: [PATCH 234/442] * Lang change. --- module/project/lang/en.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/module/project/lang/en.php b/module/project/lang/en.php index 2907270007..818727343d 100644 --- a/module/project/lang/en.php +++ b/module/project/lang/en.php @@ -241,8 +241,8 @@ $lang->project->setTeam = 'Set Team'; $lang->project->linkStory = 'Link Story'; $lang->project->createTask = 'Create Task'; $lang->project->goback = "Go Back"; -$lang->project->noweekend = 'Without Weekend'; -$lang->project->withweekend = 'With Weekend'; +$lang->project->noweekend = 'excl. Weekend'; +$lang->project->withweekend = 'incl. Weekend'; $lang->project->interval = 'Intervals'; $lang->project->fixFirstWithLeft = 'Modify the left'; @@ -258,7 +258,7 @@ $lang->project->charts->burn->graph->formatNumber = 0; $lang->project->charts->burn->graph->animation = 0; $lang->project->charts->burn->graph->rotateNames = 1; $lang->project->charts->burn->graph->showValues = 0; -$lang->project->charts->burn->graph->reference = 'Reference'; +$lang->project->charts->burn->graph->reference = 'Ideal'; $lang->project->charts->burn->graph->actuality = 'Actual'; $lang->project->placeholder = new stdclass(); From 46cdd5a5f953afd9d986523fceaaf781937cb581 Mon Sep 17 00:00:00 2001 From: Yagami Date: Fri, 22 Feb 2019 09:46:57 +0800 Subject: [PATCH 235/442] * Finish task #5300. --- module/doc/model.php | 61 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 60 insertions(+), 1 deletion(-) diff --git a/module/doc/model.php b/module/doc/model.php index 2bf2150008..5e17ae4349 100644 --- a/module/doc/model.php +++ b/module/doc/model.php @@ -1104,7 +1104,66 @@ class docModel extends model } } - if($type == 'product' or $type == 'project') $libs = $this->dao->select('id,name,`order`')->from($table)->where('id')->in(array_keys($libs))->orderBy('`order` desc, id desc')->fetchAll('id'); + if($type == 'product' or $type == 'project') $libs = $this->dao->select('*')->from($table)->where('id')->in(array_keys($libs))->orderBy('`order` desc')->fetchAll('id'); + + /* Order the same as drop menu.*/ + if($type == 'product') + { + $this->loadModel('product'); + $products = $mineProducts = $otherProducts = $closedProducts = array(); + foreach($libs as $lib) + { + if(!$this->app->user->admin and !$this->product->checkPriv($lib->id)) continue; + if($lib->status == 'normal' and $lib->PO == $this->app->user->account) + { + $mineProducts[$lib->id] = $lib; + } + elseif($lib->status == 'normal' and $lib->PO != $this->app->user->account) + { + $otherProducts[$lib->id] = $lib; + } + elseif($lib->status == 'closed') + { + $closedProducts[$lib->id] = $lib; + } + } + $products = $mineProducts + $otherProducts + $closedProducts; + $libs = array(); + foreach($products as $product) + { + $libs[$product->id] = new stdclass(); + $libs[$product->id]->id = $product->id; + $libs[$product->id]->name = $product->name; + } + } + elseif($type == 'project') + { + $projects = $mineProjects = $otherProjects = $closedProjects = array(); + foreach($libs as $lib) + { + if(!$this->app->user->admin and !$this->lib->checkPriv($lib->id)) continue; + if($lib->status != 'done' and $lib->status != 'closed' and $lib->PM == $this->app->user->account) + { + $mineProjects[$lib->id] = $lib; + } + elseif($lib->status != 'done' and $lib->status != 'closed' and !($lib->PM == $this->app->user->account)) + { + $otherProjects[$lib->id] = $lib; + } + elseif($lib->status == 'done' or $lib->status == 'closed') + { + $closedProjects[$lib->id] = $lib; + } + } + $projects = $mineProjects + $otherProjects + $closedProjects; + $libs = array(); + foreach($projects as $project) + { + $libs[$project->id] = new stdclass(); + $libs[$project->id]->id = $project->id; + $libs[$project->id]->name = $project->name; + } + } return $libs; } From adfd61aa66aceca34ed464125fc00723ea7d6ebb Mon Sep 17 00:00:00 2001 From: wangyidong Date: Fri, 22 Feb 2019 10:36:16 +0800 Subject: [PATCH 236/442] * finish task #5275. --- module/doc/control.php | 8 ++- module/doc/css/alllibs.css | 4 -- module/doc/css/index.css | 13 ----- module/doc/js/common.js | 1 - module/doc/lang/zh-cn.php | 3 +- module/doc/view/side.html.php | 92 ++++++++++++++++++++++++++++++++++- module/doc/view/sort.html.php | 9 ++++ module/task/model.php | 4 +- 8 files changed, 111 insertions(+), 23 deletions(-) delete mode 100644 module/doc/css/alllibs.css create mode 100644 module/doc/view/sort.html.php diff --git a/module/doc/control.php b/module/doc/control.php index 32405ffcae..7c309b241e 100644 --- a/module/doc/control.php +++ b/module/doc/control.php @@ -532,7 +532,7 @@ class doc extends control * @access public * @return void */ - public function sort() + public function sort($type = '') { if($_POST) { @@ -543,6 +543,12 @@ class doc extends control if(dao::isError()) $this->send(array('result' => 'fail', 'message' => dao::getError())); $this->send(array('result' => 'success')); } + + if($type) + { + $this->view->libs = $this->doc->getLibs($type); + $this->display(); + } } /** diff --git a/module/doc/css/alllibs.css b/module/doc/css/alllibs.css deleted file mode 100644 index 515312e555..0000000000 --- a/module/doc/css/alllibs.css +++ /dev/null @@ -1,4 +0,0 @@ -#libs .libs-group-heading{border:1px solid #ddd;overflow:hidden} -#libs .libs-group{border:1px solid #ddd; border-top:0px;overflow:hidden; margin-bottom:20px;} -#libs .libs-group.libs-custom{border-top:1px solid #ddd;overflow:hidden; margin-bottom:20px;} -#libs .lib-custom{width:130px; margin-bottom:10px;} diff --git a/module/doc/css/index.css b/module/doc/css/index.css index f07a46ead0..8e943f4aa7 100644 --- a/module/doc/css/index.css +++ b/module/doc/css/index.css @@ -1,14 +1 @@ -.lib-heading{border-right:1px solid #ddd;} -.lib-more a.more{font-weight:bold; display:block;} -#libs .libs-group-heading{border:1px solid #ddd;} -#libs .libs-group{border:1px solid #ddd; border-top:0px; margin-bottom:20px;} -#libs .libs-group.lib-more{border:0px; text-align:center; height:120px; line-height:110px;} -#libs .libs-group.lib-more:hover{background-color: #EBF2F9} -#libs .libs-custom-heading{text-align:center; height:120px; line-height:110px; position: relative; margin-bottom:20px;} -#libs .libs-custom-heading:hover{background-color: #EBF2F9} -#libs .libs-custom-heading a{display:block;height:100%;} -#libs .libs-custom-heading .lable-custom{position: absolute;left:8px;} -#libs hr {margin-top:0px;} -#libs .panel-body {overflow: auto; max-height: 224px;} - #pageActions ul.dropdown-menu{left: 67px} diff --git a/module/doc/js/common.js b/module/doc/js/common.js index 0c030b430c..262d702e68 100644 --- a/module/doc/js/common.js +++ b/module/doc/js/common.js @@ -80,7 +80,6 @@ $(document).ready(function() } }, 'json'); } - }); 'use strict'; diff --git a/module/doc/lang/zh-cn.php b/module/doc/lang/zh-cn.php index 867064191a..e0c57bfa8f 100644 --- a/module/doc/lang/zh-cn.php +++ b/module/doc/lang/zh-cn.php @@ -141,7 +141,8 @@ $lang->doc->fastMenuIconList['collectedbyme'] = 'icon-folder-star'; $lang->doc->customObjectLibs['files'] = '显示附件库'; $lang->doc->customObjectLibs['customFiles'] = '显示自定义文档库'; -$lang->doc->customShowLibs = '文档库显示设置'; +$lang->doc->orderLib = '文档库排序'; +$lang->doc->customShowLibs = '显示设置'; $lang->doc->customShowLibsList['zero'] = '显示空文档的库'; $lang->doc->customShowLibsList['unclosed'] = '只显示未关闭的项目'; diff --git a/module/doc/view/side.html.php b/module/doc/view/side.html.php index a7722821ff..749e73e40d 100644 --- a/module/doc/view/side.html.php +++ b/module/doc/view/side.html.php @@ -161,7 +161,20 @@ if(empty($type)) $type = 'product';
          - +

          +goback);?> +
          diff --git a/module/doc/view/sort.html.php b/module/doc/view/sort.html.php new file mode 100644 index 0000000000..4dd7053b36 --- /dev/null +++ b/module/doc/view/sort.html.php @@ -0,0 +1,9 @@ +
          + + $libName):?> +
          + +
          diff --git a/module/task/model.php b/module/task/model.php index bc80ca5df4..9c5bb36250 100644 --- a/module/task/model.php +++ b/module/task/model.php @@ -626,7 +626,7 @@ class taskModel extends model if($task->consumed < $oldTask->consumed) die(js::error($this->lang->task->error->consumedSmall)); /* Fix bug#1388, Check children task projectID and moduleID. */ - if($task->project != $oldTask->project) + if(isset($task->project) and $task->project != $oldTask->project) { $this->dao->update(TABLE_TASK)->set('project')->eq($task->project)->set('module')->eq($task->module)->where('parent')->eq($taskID)->exec(); } @@ -705,7 +705,7 @@ class taskModel extends model { if($task->status == 'done') $this->loadModel('score')->create('task', 'finish', $taskID); if($task->status == 'closed') $this->loadModel('score')->create('task', 'close', $taskID); - if($task->parent) + if(!empty($task->parent)) { $this->dao->update(TABLE_TASK)->set('parent')->eq(-1)->where('id')->eq($task->parent)->exec(); $this->updateParentStatus($taskID); From 838bb873b98f3d51c1841ee229418651e92ce378 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Fri, 22 Feb 2019 10:43:23 +0800 Subject: [PATCH 237/442] * code for task #5275. --- module/doc/view/side.html.php | 18 +++++++++--------- module/doc/view/sort.html.php | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/module/doc/view/side.html.php b/module/doc/view/side.html.php index 749e73e40d..446b66d703 100644 --- a/module/doc/view/side.html.php +++ b/module/doc/view/side.html.php @@ -264,15 +264,15 @@ $(function() }); }); }); - - function cancelOrder() - { - var $tabPane = $('#mainRow .side-col .tabs .tab-content .tab-pane.active'); - $tabPane.find('.libs-group.sort').remove(); - $tabPane.find('ul.tree').removeClass('hidden'); - $tabPane.closest('.side-col').find('.side-footer .pull-right #orderLib').removeClass('hidden'); - $tabPane.closest('.side-col').find('.side-footer .pull-right #cancelOrder').addClass('hidden'); - } }); + +function cancelOrder() +{ + var $tabPane = $('#mainRow .side-col .tabs .tab-content .tab-pane.active'); + $tabPane.find('.libs-group.sort').remove(); + $tabPane.find('ul.tree').removeClass('hidden'); + $tabPane.closest('.side-col').find('.side-footer .pull-right #orderLib').removeClass('hidden'); + $tabPane.closest('.side-col').find('.side-footer .pull-right #cancelOrder').addClass('hidden'); +}
          diff --git a/module/doc/view/sort.html.php b/module/doc/view/sort.html.php index 4dd7053b36..921e284452 100644 --- a/module/doc/view/sort.html.php +++ b/module/doc/view/sort.html.php @@ -1,7 +1,7 @@
          $libName):?>
          From 4305c3a54ca67e7cd6e27459d3906e257661a17f Mon Sep 17 00:00:00 2001 From: Yagami Date: Fri, 22 Feb 2019 11:16:32 +0800 Subject: [PATCH 238/442] * Finish task #5299. --- module/doc/control.php | 8 ++++---- module/doc/css/createlib.css | 2 +- module/doc/js/common.js | 2 +- module/doc/js/createlib.js | 4 ++-- module/doc/view/createlib.html.php | 11 +++++++---- 5 files changed, 15 insertions(+), 12 deletions(-) diff --git a/module/doc/control.php b/module/doc/control.php index 32405ffcae..b0e78e7a73 100644 --- a/module/doc/control.php +++ b/module/doc/control.php @@ -44,7 +44,7 @@ class doc extends control $pager = new pager(0, 5, 1); $this->lang->modulePageActions = $this->doc->setFastMenu($this->lang->doc->fast); - $this->lang->modulePageActions .= common::hasPriv('doc', 'createLib') ? html::a(helper::createLink('doc', 'createLib'), " " . $this->lang->doc->createLib, '', "class='btn btn-secondary iframe'") : ''; + $this->lang->modulePageActions .= common::hasPriv('doc', 'createLib') ? html::a(helper::createLink('doc', 'createLib'), " " . $this->lang->doc->createLib, '', "class='btn btn-secondary iframe' data-width='45%'") : ''; $actionURL = $this->createLink('doc', 'browse', "lib=0&browseType=bySearch&queryID=myQueryID"); $this->doc->buildSearchForm(0, array(), 0, $actionURL, 'index'); @@ -328,7 +328,7 @@ class doc extends control $this->product->setMenu($this->product->getPairs(), $lib->product); $this->lang->set('menugroup.doc', 'product'); - if(common::hasPriv('doc', 'create')) $this->lang->modulePageActions = html::a(helper::createLink('doc', 'create', "libID=$libID"), " " . $this->lang->doc->create, '', "class='btn btn-primary'"); + $this->lang->modulePageActions = common::hasPriv('doc', 'createLib') ? html::a(helper::createLink('doc', 'createLib'), " " . $this->lang->doc->createLib, '', "class='btn btn-secondary iframe' data-width='45%'") : ''; } elseif($this->from == 'project') { @@ -337,7 +337,7 @@ class doc extends control $this->project->setMenu($this->project->getPairs('nocode'), $lib->project); $this->lang->set('menugroup.doc', 'project'); - if(common::hasPriv('doc', 'create')) $this->lang->modulePageActions = html::a(helper::createLink('doc', 'create', "libID=$libID"), " " . $this->lang->doc->create, '', "class='btn btn-primary'"); + $this->lang->modulePageActions = common::hasPriv('doc', 'createLib') ? html::a(helper::createLink('doc', 'createLib'), " " . $this->lang->doc->createLib, '', "class='btn btn-secondary iframe' data-width='45%'") : ''; } else { @@ -796,7 +796,7 @@ class doc extends control } elseif($from == 'project') { - $this->lang->modulePageActions = common::hasPriv('doc', 'createLib') ? html::a(helper::createLink('doc', 'createLib', "from=project&projectID=$objectID"), " " . $this->lang->doc->createLib, '', "class='btn btn-secondary iframe'") : ''; + $this->lang->modulePageActions = common::hasPriv('doc', 'createLib') ? html::a(helper::createLink('doc', 'createLib'), " " . $this->lang->doc->createLib, '', "class='btn btn-secondary iframe' data-width='45%'") : ''; $this->lang->doc->menu = $this->lang->project->menu; $this->lang->doc->menuOrder = $this->lang->project->menuOrder; $this->project->setMenu($this->project->getPairs('nocode'), $objectID); diff --git a/module/doc/css/createlib.css b/module/doc/css/createlib.css index 6e6ab7818e..e9a3a45c98 100644 --- a/module/doc/css/createlib.css +++ b/module/doc/css/createlib.css @@ -1,5 +1,5 @@ .modal-dialog{width:75%} -form{margin-bottom:130px; padding-left:65px} +form{margin-bottom:100px; padding-left:65px} table{width:90% !important} #whiteListBox div.input-group {margin-bottom: 2px;} diff --git a/module/doc/js/common.js b/module/doc/js/common.js index 0c030b430c..580e2e3f0c 100644 --- a/module/doc/js/common.js +++ b/module/doc/js/common.js @@ -16,7 +16,7 @@ function toggleAcl(acl, type) } if(type == 'lib') { - var libType = $('#type').val(); + var libType = $('input[name="type"]').val(); var notice = typeof(noticeAcl[libType][acl]) != 'undefined' ? noticeAcl[libType][acl] : ''; $('#noticeAcl').html(notice); } diff --git a/module/doc/js/createlib.js b/module/doc/js/createlib.js index ba9cfa525d..2d000782e0 100644 --- a/module/doc/js/createlib.js +++ b/module/doc/js/createlib.js @@ -1,11 +1,11 @@ $(function() { - $('#type').change(function() + $('input[name="type"]').change(function() { var libType = $(this).val(); changeByLibType(libType); }) - changeByLibType($('#type').val()); + changeByLibType($('input[name="type"]').val()); toggleAcl($('[name=acl]').val(), 'lib'); }); diff --git a/module/doc/view/createlib.html.php b/module/doc/view/createlib.html.php index dd05970e64..4a48ed981f 100644 --- a/module/doc/view/createlib.html.php +++ b/module/doc/view/createlib.html.php @@ -23,23 +23,26 @@ - + + + + - @@ -47,7 +50,7 @@ - - +
          doc->libType?>
          doc->product?>
          doclib->name?>
          doclib->control;?> + doc->aclList, 'open', "onchange='toggleAcl(this.value, \"lib\")'")?> doc->noticeAcl['lib']['product']['open'];?>
          From 1d1d64f6009b4ceb1fbde6a3f6e169c209b5a4f2 Mon Sep 17 00:00:00 2001 From: Yagami Date: Fri, 22 Feb 2019 13:20:24 +0800 Subject: [PATCH 239/442] * Finish task #5296. --- module/bug/model.php | 1 + module/story/model.php | 1 + module/task/model.php | 2 +- 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/module/bug/model.php b/module/bug/model.php index facb21345d..f7721b011c 100644 --- a/module/bug/model.php +++ b/module/bug/model.php @@ -1325,6 +1325,7 @@ class bugModel extends model $bugs = $this->dao->select('*')->from(TABLE_BUG) ->where('deleted')->eq(0) ->beginIF(!$this->app->user->admin)->andWhere('project')->in('0,' . $this->app->user->view->projects)->fi() + ->beginIF($type != 'closedBy')->andWhere('status')->ne('closed')->fi() ->beginIF($type != 'all')->andWhere("`$type`")->eq($account)->fi() ->orderBy($orderBy) ->beginIF($limit > 0)->limit($limit)->fi() diff --git a/module/story/model.php b/module/story/model.php index 6921f834ed..0d4a51d22c 100644 --- a/module/story/model.php +++ b/module/story/model.php @@ -1771,6 +1771,7 @@ class storyModel extends model $stories = $this->dao->select('t1.*, t2.name as productTitle')->from(TABLE_STORY)->alias('t1') ->leftJoin(TABLE_PRODUCT)->alias('t2')->on('t1.product = t2.id') ->where('t1.deleted')->eq(0) + ->beginIF($type != 'closedBy')->andWhere('t1.status')->ne('closed')->fi() ->beginIF($type != 'all') ->beginIF($type == 'assignedTo')->andWhere('assignedTo')->eq($account)->fi() ->beginIF($type == 'openedBy')->andWhere('openedBy')->eq($account)->fi() diff --git a/module/task/model.php b/module/task/model.php index 9c5bb36250..45f9029dba 100644 --- a/module/task/model.php +++ b/module/task/model.php @@ -1671,7 +1671,7 @@ class taskModel extends model ->leftjoin(TABLE_PROJECT)->alias('t2')->on('t1.project = t2.id') ->leftjoin(TABLE_STORY)->alias('t3')->on('t1.story = t3.id') ->where('t1.deleted')->eq(0) - ->beginIF($type == 'assignedTo')->andWhere('t1.status')->ne('closed')->fi() + ->beginIF($type != 'closedBy')->andWhere('t1.status')->ne('closed')->fi() ->beginIF($type == 'finishedBy') ->andWhere('t1.finishedby', 1)->eq($account) ->orWhere('t1.finishedList')->like("%,{$account},%") From 11393c442e8f2bd6e3b2490d0638a9b154f3fb5b Mon Sep 17 00:00:00 2001 From: Yagami Date: Fri, 22 Feb 2019 13:30:14 +0800 Subject: [PATCH 240/442] * Finish task #5295. --- module/doc/view/browse.html.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/module/doc/view/browse.html.php b/module/doc/view/browse.html.php index 1ccc855ab2..36e189bfed 100644 --- a/module/doc/view/browse.html.php +++ b/module/doc/view/browse.html.php @@ -154,8 +154,8 @@ var browseType = ''; id"), "  " . $doc->title);?> fileSize ? $doc->fileSize : '-';?> addedBy);?> - addedDate, 'm-d H:i');?> - editedDate, 'm-d H:i');?> + addedDate, 'y-m-d');?> + editedDate, 'y-m-d');?> id&objectType=doc");?>" title="" class='btn btn-link ajaxCollect'> From 9ffa540195d950491ec9467ec8b01248c0f90268 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Fri, 22 Feb 2019 14:05:47 +0800 Subject: [PATCH 241/442] * finish task #5285. --- module/doc/control.php | 3 ++- module/doc/js/create.js | 21 ++++++++++++++++++++- module/doc/lang/zh-cn.php | 4 ++++ module/doc/model.php | 8 ++++---- module/doc/view/browse.html.php | 11 ++++++++++- module/doc/view/browsebygrid.html.php | 11 ++++++++++- module/doc/view/create.html.php | 7 ++++++- module/doc/view/side.html.php | 20 ++++++++++++++++++-- module/story/control.php | 2 +- 9 files changed, 75 insertions(+), 12 deletions(-) diff --git a/module/doc/control.php b/module/doc/control.php index 7c309b241e..050d692c83 100644 --- a/module/doc/control.php +++ b/module/doc/control.php @@ -296,7 +296,7 @@ class doc extends control * @access public * @return void */ - public function create($libID, $moduleID = 0) + public function create($libID, $moduleID = 0, $docType = '') { if(!empty($_POST)) { @@ -354,6 +354,7 @@ class doc extends control $this->view->moduleOptionMenu = $this->tree->getOptionMenu($libID, 'doc', $startModuleID = 0); $this->view->moduleID = $moduleID; $this->view->type = $type; + $this->view->docType = $docType; $this->view->groups = $this->loadModel('group')->getPairs(); $this->view->users = $this->user->getPairs('nocode'); diff --git a/module/doc/js/create.js b/module/doc/js/create.js index c2ba6a55e9..1c163e90f4 100644 --- a/module/doc/js/create.js +++ b/module/doc/js/create.js @@ -1,6 +1,7 @@ $(function() { toggleAcl($('[name=acl]').val(), 'doc'); + setTimeout(function(){initPage(docType)}, 100); $('input[name="type"]').change(function() { var type = $(this).val(); @@ -14,7 +15,7 @@ $(function() $('#contentBox').addClass('hidden'); $('#urlBox').removeClass('hidden'); } - }) + }); window.editor['content'].addListener('ready', function() { $('div#content .edui-toolbar').append("
          Markdown
          "); @@ -41,3 +42,21 @@ function toggleEditor(type) } $('#contentType').val(type); } + +function initPage(type) +{ + if(type == 'html' || type == 'markdown') + { + if(type == 'markdown') + { + $('#contentBox .contentmarkdown').removeClass('hidden'); + $('#contentBox .contenthtml').addClass('hidden'); + $('#contentBox #contentType').val(type); + } + } + else if(type == 'url') + { + $('#contentBox').addClass('hidden'); + $('#urlBox').removeClass('hidden'); + } +} diff --git a/module/doc/lang/zh-cn.php b/module/doc/lang/zh-cn.php index e0c57bfa8f..22c1822915 100644 --- a/module/doc/lang/zh-cn.php +++ b/module/doc/lang/zh-cn.php @@ -118,6 +118,10 @@ $lang->doc->aclList['open'] = '公开'; $lang->doc->aclList['custom'] = '自定义'; $lang->doc->aclList['private'] = '私有'; +$lang->doc->typeList['html'] = '富文本'; +$lang->doc->typeList['markdown'] = 'Markdown'; +$lang->doc->typeList['url'] = '链接'; + $lang->doc->types['text'] = '文档'; $lang->doc->types['url'] = '链接'; diff --git a/module/doc/model.php b/module/doc/model.php index 5e17ae4349..76aef30730 100644 --- a/module/doc/model.php +++ b/module/doc/model.php @@ -855,7 +855,7 @@ class docModel extends model $account = ',' . $this->app->user->account . ','; if(isset($object->addedBy) and $object->addedBy == $this->app->user->account) return true; - if(strpos(",$object->users,", $account) !== false) return true; + if(isset($object->users) and strpos(",{$object->users},", $account) !== false) return true; if($object->acl == 'custom') { $userGroups = $this->app->user->groups; @@ -872,8 +872,8 @@ class docModel extends model if(isset($extraDocLibs[$object->id])) return true; } - if($object->project) return $this->loadModel('project')->checkPriv($object->project); - if($object->product) return $this->loadModel('product')->checkPriv($object->product); + if(!empty($object->project)) return $this->loadModel('project')->checkPriv($object->project); + if(!empty($object->product)) return $this->loadModel('product')->checkPriv($object->product); return false; } @@ -1141,7 +1141,7 @@ class docModel extends model $projects = $mineProjects = $otherProjects = $closedProjects = array(); foreach($libs as $lib) { - if(!$this->app->user->admin and !$this->lib->checkPriv($lib->id)) continue; + if(!$this->app->user->admin and !$this->checkPrivLib($lib)) continue; if($lib->status != 'done' and $lib->status != 'closed' and $lib->PM == $this->app->user->account) { $mineProjects[$lib->id] = $lib; diff --git a/module/doc/view/browse.html.php b/module/doc/view/browse.html.php index 1ccc855ab2..eed51a77ce 100644 --- a/module/doc/view/browse.html.php +++ b/module/doc/view/browse.html.php @@ -53,7 +53,16 @@ var browseType = '';
        • " . $lang->doc->deleteLib, 'hiddenwin');?>
        • - " . $this->lang->doc->create, '', "class='btn btn-primary'");?> + + +
          diff --git a/module/doc/view/browsebygrid.html.php b/module/doc/view/browsebygrid.html.php index 8093c27333..087dc53bb4 100644 --- a/module/doc/view/browsebygrid.html.php +++ b/module/doc/view/browsebygrid.html.php @@ -25,7 +25,16 @@
        • " . $lang->doc->deleteLib, 'hiddenwin');?>
        • - " . $this->lang->doc->create, '', "class='btn btn-primary'");?> + + +
          diff --git a/module/doc/view/create.html.php b/module/doc/view/create.html.php index 1d87861612..af8b953695 100644 --- a/module/doc/view/create.html.php +++ b/module/doc/view/create.html.php @@ -43,7 +43,11 @@ doc->type;?> - doc->types, 'text');?> + doc->types as $typeKey => $typeName) $typeKeyList[$typeKey] = $typeKey; + ?> + doc->types, zget($typeKeyList, $docType, 'text'));?> doc->content;?> @@ -91,5 +95,6 @@
          + doc->noticeAcl['doc']);?> diff --git a/module/doc/view/side.html.php b/module/doc/view/side.html.php index 446b66d703..73904b12c6 100644 --- a/module/doc/view/side.html.php +++ b/module/doc/view/side.html.php @@ -219,8 +219,24 @@ $(function() $('#mainRow .side-col .tabs .nav-tabs li a').click(function() { - var href = $(this).attr('href'); - $(this).closest('.side-col').find('.side-footer #orderLib').toggleClass('hidden', (href.indexOf('product') > 0 || href.indexOf('project') > 0)); + var href = $(this).attr('href'); + var canOrder = !(href.indexOf('product') > 0 || href.indexOf('project') > 0); + $(this).closest('.side-col').find('.side-footer #orderLib').toggleClass('hidden', !canOrder); + $(this).closest('.side-col').find('.side-footer #cancelOrder').toggleClass('hidden', !canOrder); + + var $tabPane = $('#mainRow .side-col .tabs .tab-content .tab-pane.active'); + var $orderLib = $(this).closest('.side-col').find('.side-footer #orderLib'); + var $cancelOrder = $(this).closest('.side-col').find('.side-footer #cancelOrder'); + if($tabPane.find('.libs-group.sort').length > 0 && canOrder) + { + $orderLib.addClass('hidden'); + $cancelOrder.removeClass('hidden'); + } + if($tabPane.find('.libs-group.sort').length == 0 && canOrder) + { + $orderLib.removeClass('hidden'); + $cancelOrder.addClass('hidden'); + } }); $('#orderLib').click(function() diff --git a/module/story/control.php b/module/story/control.php index cb614ef09c..5651588012 100644 --- a/module/story/control.php +++ b/module/story/control.php @@ -1415,7 +1415,7 @@ class story extends control } else { - $stmt = $this->dbh->query($this->session->storyQueryCondition . ($this->post->exportType == 'selected' ? " AND t2.id IN({$this->cookie->checkedItem})" : '') . " ORDER BY " . strtr($orderBy, '_', ' ')); + $stmt = $this->dbh->query($this->session->storyQueryCondition . ($this->post->exportType == 'selected' ? " AND t1.id IN({$this->cookie->checkedItem})" : '') . " ORDER BY " . strtr($orderBy, '_', ' ')); while($row = $stmt->fetch()) $stories[$row->id] = $row; } From fb9ce6edfcaaea39362888ce6df093ec2f1d4093 Mon Sep 17 00:00:00 2001 From: Yagami Date: Fri, 22 Feb 2019 14:21:09 +0800 Subject: [PATCH 242/442] * Finish task #5293. --- module/doc/js/view.js | 21 ++++++++++++++++++++- module/doc/view/view.html.php | 2 +- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/module/doc/js/view.js b/module/doc/js/view.js index 8d0b160e7f..85b34ad061 100644 --- a/module/doc/js/view.js +++ b/module/doc/js/view.js @@ -6,7 +6,22 @@ $(function() $('#urlIframe').height(defaultHeight); setTimeout($.resetToolbarPosition, 50); } - $('body').addClass('doc-fullscreen'); + + if($.cookie('fullscreen') == 'true') + { + $('body').addClass('doc-fullscreen'); + $('.side-col').addClass('hidden'); + $('#mainContent .fullscreen-btn').attr('title', retrack); + $('#mainContent .fullscreen-btn').html(' ' + retrack); + } + else + { + $('body').removeClass('doc-feullscreen'); + $('.side-col').removeClass('hidden'); + $('#mainContent .fullscreen-btn').attr('title', fullscreen); + $('#mainContent .fullscreen-btn').html(' ' + fullscreen); + } + $('#mainContent .fullscreen-btn').click(function() { $('.side-col').toggleClass('hidden'); @@ -14,10 +29,14 @@ $(function() if($('body').hasClass('doc-fullscreen')) { $('#mainContent .fullscreen-btn').attr('title', retrack); + $('#mainContent .fullscreen-btn').html(' ' + retrack); + $.cookie('fullscreen', 'true'); } else { $('#mainContent .fullscreen-btn').attr('title', fullscreen); + $('#mainContent .fullscreen-btn').html(' ' + fullscreen); + $.cookie('fullscreen', 'false'); } setTimeout($.resetToolbarPosition, 50); }); diff --git a/module/doc/view/view.html.php b/module/doc/view/view.html.php index fe016ecf38..be7071246a 100644 --- a/module/doc/view/view.html.php +++ b/module/doc/view/view.html.php @@ -131,7 +131,7 @@ js::set('sysurl', common::getSysUrl());
          - + deleted) { From 466667de7e73243828f1242167ab30c95d2dab96 Mon Sep 17 00:00:00 2001 From: Yagami Date: Fri, 22 Feb 2019 15:01:32 +0800 Subject: [PATCH 243/442] * Finish task #5294. --- module/doc/js/view.js | 6 ++++++ module/doc/lang/en.php | 1 + module/doc/lang/zh-cn.php | 1 + module/doc/view/createlib.html.php | 5 ++++- module/doc/view/index.html.php | 4 ++-- module/doc/view/view.html.php | 2 +- 6 files changed, 15 insertions(+), 4 deletions(-) diff --git a/module/doc/js/view.js b/module/doc/js/view.js index 85b34ad061..2c353f2a50 100644 --- a/module/doc/js/view.js +++ b/module/doc/js/view.js @@ -41,3 +41,9 @@ $(function() setTimeout($.resetToolbarPosition, 50); }); }) + +function deleteFile(fileID) +{ + if(!fileID) return; + hiddenwin.location.href =createLink('file', 'delete', 'fileID=' + fileID); +} diff --git a/module/doc/lang/en.php b/module/doc/lang/en.php index d58fdd6be0..6933449638 100644 --- a/module/doc/lang/en.php +++ b/module/doc/lang/en.php @@ -78,6 +78,7 @@ $lang->doc->addType = 'Add'; $lang->doc->childType = 'Child'; $lang->doc->collect = 'Add Favorites'; $lang->doc->cancelCollection = 'Remove Favorites'; +$lang->doc->deleteFile = 'Detele File' $lang->doc->libName = 'Name'; $lang->doc->libType = 'Category'; diff --git a/module/doc/lang/zh-cn.php b/module/doc/lang/zh-cn.php index 22c1822915..1b3527de2f 100644 --- a/module/doc/lang/zh-cn.php +++ b/module/doc/lang/zh-cn.php @@ -78,6 +78,7 @@ $lang->doc->addType = '增加分类'; $lang->doc->childType = '子分类'; $lang->doc->collect = '收藏'; $lang->doc->cancelCollection = '取消收藏'; +$lang->doc->deleteFile = '删除附件'; $lang->doc->libName = '文档库名称'; $lang->doc->libType = '文档库类型'; diff --git a/module/doc/view/createlib.html.php b/module/doc/view/createlib.html.php index 4a48ed981f..509a8da74f 100644 --- a/module/doc/view/createlib.html.php +++ b/module/doc/view/createlib.html.php @@ -44,7 +44,6 @@ doclib->control;?> doc->aclList, 'open', "onchange='toggleAcl(this.value, \"lib\")'")?> - doc->noticeAcl['lib']['product']['open'];?> @@ -61,6 +60,10 @@
          + + + doc->noticeAcl['lib']['product']['open'];?> + diff --git a/module/doc/view/index.html.php b/module/doc/view/index.html.php index 972cda6ad9..0ddcee7479 100644 --- a/module/doc/view/index.html.php +++ b/module/doc/view/index.html.php @@ -40,7 +40,7 @@ title;?> fileSize ? $doc->fileSize : '-';?> addedBy);?> - editedDate == '0000-00-00 00:00:00' ? formatTime($doc->addedDate, 'm-d H:i') : formatTime($doc->editedDate, 'm-d H:i');?> + editedDate == '0000-00-00 00:00:00' ? formatTime($doc->addedDate, 'y-m-d') : formatTime($doc->editedDate, 'y-m-d');?> @@ -174,7 +174,7 @@ id}");?>"> title;?> addedBy);?> - editedDate) ? formatTime($doc->editedDate, 'm-d H:i') : formatTime($doc->addedDate, 'm-d H:i');?> + editedDate) ? formatTime($doc->editedDate, 'y-m-d') : formatTime($doc->addedDate, 'y-m-d');?> diff --git a/module/doc/view/view.html.php b/module/doc/view/view.html.php index be7071246a..d4f19279f7 100644 --- a/module/doc/view/view.html.php +++ b/module/doc/view/view.html.php @@ -117,7 +117,7 @@ js::set('sysurl', common::getSysUrl()); id}");?>" alt="title?>"> - ", '', "class='btn-icon' onclick='deleteFile($file->id)' title='$lang->delete'");?> + " . ' ' . $lang->doc->deleteFile, '', "class='btn-icon' onclick='deleteFile($file->id)'");?>
          files[$file->id]);?> From 3656c218a9709ff9d682ed1319a47625b5a6e7f5 Mon Sep 17 00:00:00 2001 From: Yagami Date: Fri, 22 Feb 2019 15:25:22 +0800 Subject: [PATCH 244/442] * Finish task #5292. --- module/bug/config.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/module/bug/config.php b/module/bug/config.php index 038135ce14..ea68bf02c4 100644 --- a/module/bug/config.php +++ b/module/bug/config.php @@ -165,13 +165,18 @@ $config->bug->search['params']['lastEditedDate']= array('operator' => '=', $config->bug->search['params']['deadline'] = array('operator' => '=', 'control' => 'input', 'values' => '', 'class' => 'date'); $config->bug->datatable = new stdclass(); -$config->bug->datatable->defaultField = array('id', 'pri', 'title', 'severity', 'status', 'openedBy', 'openedDate', 'assignedTo', 'resolution', 'actions'); +$config->bug->datatable->defaultField = array('id', 'severity', 'pri', 'title', 'status', 'openedBy', 'openedDate', 'assignedTo', 'resolution', 'actions'); $config->bug->datatable->fieldList['id']['title'] = 'idAB'; $config->bug->datatable->fieldList['id']['fixed'] = 'left'; $config->bug->datatable->fieldList['id']['width'] = '70'; $config->bug->datatable->fieldList['id']['required'] = 'yes'; +$config->bug->datatable->fieldList['severity']['title'] = 'severityAB'; +$config->bug->datatable->fieldList['severity']['fixed'] = 'left'; +$config->bug->datatable->fieldList['severity']['width'] = '60'; +$config->bug->datatable->fieldList['severity']['required'] = 'no'; + $config->bug->datatable->fieldList['pri']['title'] = 'P'; $config->bug->datatable->fieldList['pri']['fixed'] = 'left'; $config->bug->datatable->fieldList['pri']['width'] = '50'; @@ -182,11 +187,6 @@ $config->bug->datatable->fieldList['title']['fixed'] = 'left'; $config->bug->datatable->fieldList['title']['width'] = 'auto'; $config->bug->datatable->fieldList['title']['required'] = 'yes'; -$config->bug->datatable->fieldList['severity']['title'] = 'severityAB'; -$config->bug->datatable->fieldList['severity']['fixed'] = 'left'; -$config->bug->datatable->fieldList['severity']['width'] = '60'; -$config->bug->datatable->fieldList['severity']['required'] = 'no'; - $config->bug->datatable->fieldList['branch']['title'] = 'branch'; $config->bug->datatable->fieldList['branch']['fixed'] = 'left'; $config->bug->datatable->fieldList['branch']['width'] = '100'; From 344ed8f38bb64c92ee2856d2b64a706d2618b723 Mon Sep 17 00:00:00 2001 From: Yagami Date: Fri, 22 Feb 2019 15:31:40 +0800 Subject: [PATCH 245/442] * Finish task #5290. --- module/story/view/review.html.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/module/story/view/review.html.php b/module/story/view/review.html.php index e0df4cdcda..ca9c65c6b9 100644 --- a/module/story/view/review.html.php +++ b/module/story/view/review.html.php @@ -40,11 +40,11 @@ var assignedTo = 'lastEditedBy ? print($story->lastEditedBy) : pri story->pri;?> - story->priList, '',"class='form-control'");?> + story->priList, $story->pri,"class='form-control'");?> story->estimate;?> - + estimate, "class='form-control'");?> story->duplicateStory;?> From 68799f265e2dafdb68323433aa7631250aecfd45 Mon Sep 17 00:00:00 2001 From: Yagami Date: Fri, 22 Feb 2019 17:16:53 +0800 Subject: [PATCH 246/442] * Finish doc type width. --- module/doc/control.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/module/doc/control.php b/module/doc/control.php index 9e7eb3a98b..ee5e0ecd82 100644 --- a/module/doc/control.php +++ b/module/doc/control.php @@ -44,7 +44,7 @@ class doc extends control $pager = new pager(0, 5, 1); $this->lang->modulePageActions = $this->doc->setFastMenu($this->lang->doc->fast); - $this->lang->modulePageActions .= common::hasPriv('doc', 'createLib') ? html::a(helper::createLink('doc', 'createLib'), " " . $this->lang->doc->createLib, '', "class='btn btn-secondary iframe' data-width='45%'") : ''; + $this->lang->modulePageActions .= common::hasPriv('doc', 'createLib') ? html::a(helper::createLink('doc', 'createLib'), " " . $this->lang->doc->createLib, '', "class='btn btn-secondary iframe' data-width='50%'") : ''; $actionURL = $this->createLink('doc', 'browse', "lib=0&browseType=bySearch&queryID=myQueryID"); $this->doc->buildSearchForm(0, array(), 0, $actionURL, 'index'); @@ -328,7 +328,7 @@ class doc extends control $this->product->setMenu($this->product->getPairs(), $lib->product); $this->lang->set('menugroup.doc', 'product'); - $this->lang->modulePageActions = common::hasPriv('doc', 'createLib') ? html::a(helper::createLink('doc', 'createLib'), " " . $this->lang->doc->createLib, '', "class='btn btn-secondary iframe' data-width='45%'") : ''; + $this->lang->modulePageActions = common::hasPriv('doc', 'createLib') ? html::a(helper::createLink('doc', 'createLib'), " " . $this->lang->doc->createLib, '', "class='btn btn-secondary iframe' data-width='50%'") : ''; } elseif($this->from == 'project') { @@ -337,7 +337,7 @@ class doc extends control $this->project->setMenu($this->project->getPairs('nocode'), $lib->project); $this->lang->set('menugroup.doc', 'project'); - $this->lang->modulePageActions = common::hasPriv('doc', 'createLib') ? html::a(helper::createLink('doc', 'createLib'), " " . $this->lang->doc->createLib, '', "class='btn btn-secondary iframe' data-width='45%'") : ''; + $this->lang->modulePageActions = common::hasPriv('doc', 'createLib') ? html::a(helper::createLink('doc', 'createLib'), " " . $this->lang->doc->createLib, '', "class='btn btn-secondary iframe' data-width='50%'") : ''; } else { @@ -803,7 +803,7 @@ class doc extends control } elseif($from == 'project') { - $this->lang->modulePageActions = common::hasPriv('doc', 'createLib') ? html::a(helper::createLink('doc', 'createLib'), " " . $this->lang->doc->createLib, '', "class='btn btn-secondary iframe' data-width='45%'") : ''; + $this->lang->modulePageActions = common::hasPriv('doc', 'createLib') ? html::a(helper::createLink('doc', 'createLib'), " " . $this->lang->doc->createLib, '', "class='btn btn-secondary iframe' data-width='50%'") : ''; $this->lang->doc->menu = $this->lang->project->menu; $this->lang->doc->menuOrder = $this->lang->project->menuOrder; $this->project->setMenu($this->project->getPairs('nocode'), $objectID); From 7d53d7779955ba3eb34898854060a179f4619c20 Mon Sep 17 00:00:00 2001 From: Yagami Date: Sat, 23 Feb 2019 09:28:39 +0800 Subject: [PATCH 247/442] * Fix createLib width. --- module/doc/view/side.html.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/doc/view/side.html.php b/module/doc/view/side.html.php index 73904b12c6..d15f51a14d 100644 --- a/module/doc/view/side.html.php +++ b/module/doc/view/side.html.php @@ -125,7 +125,7 @@ if(empty($type)) $type = 'product';
        • doclib->create, $tabValue, ''); - if($text) echo html::a($this->createLink('doc', 'createLib', "type={$tabValue}"), $text, '', "class='iframe'"); + if($text) echo html::a($this->createLink('doc', 'createLib', "type={$tabValue}"), $text, '', "class='iframe' data-width='50%'"); ?>
        • From 6225b8aecb913ee79fa7c51c857ddfc3a99788fb Mon Sep 17 00:00:00 2001 From: Yagami Date: Sat, 23 Feb 2019 13:16:24 +0800 Subject: [PATCH 248/442] * Finish task #5306. --- module/company/control.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/module/company/control.php b/module/company/control.php index 30a01287d7..1eeb8fc949 100644 --- a/module/company/control.php +++ b/module/company/control.php @@ -71,6 +71,8 @@ class company extends control /* Get users. */ $users = $this->company->getUsers($type, $queryID, $deptID, $sort, $pager); + /* Remove passwd. */ + foreach($users as $user) $user->password = ''; /* Assign. */ $this->view->title = $this->lang->company->index . $this->lang->colon . $this->lang->dept->common; From 447b20b53b62aec8fa73f4ce992762b08798fbac Mon Sep 17 00:00:00 2001 From: Yagami Date: Sat, 23 Feb 2019 13:21:57 +0800 Subject: [PATCH 249/442] * Finish task #5298. --- module/doc/view/createlib.html.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/doc/view/createlib.html.php b/module/doc/view/createlib.html.php index 509a8da74f..e5fc5ba61e 100644 --- a/module/doc/view/createlib.html.php +++ b/module/doc/view/createlib.html.php @@ -23,7 +23,7 @@ - + From 3daae171f027709c1cad885cc18d1dee59b5a66d Mon Sep 17 00:00:00 2001 From: Yagami Date: Sat, 23 Feb 2019 13:44:51 +0800 Subject: [PATCH 250/442] * Delete yahoo and wangwang field. --- db/update11.2.sql | 6 ++++++ module/company/config.php | 4 ---- module/my/view/editprofile.html.php | 14 ++++---------- module/my/view/profile.html.php | 8 -------- module/user/config.php | 4 ++-- module/user/lang/en.php | 2 -- module/user/lang/zh-cn.php | 2 -- module/user/lang/zh-tw.php | 2 -- module/user/model.php | 4 ---- module/user/view/batchcreate.html.php | 4 ---- module/user/view/batchedit.html.php | 4 ---- module/user/view/edit.html.php | 14 ++++---------- module/user/view/profile.html.php | 8 -------- 13 files changed, 16 insertions(+), 60 deletions(-) diff --git a/db/update11.2.sql b/db/update11.2.sql index c049c96631..9f5f3af376 100644 --- a/db/update11.2.sql +++ b/db/update11.2.sql @@ -1,3 +1,9 @@ update `zt_build` set `deleted`='1' where `project`='0' and `id` in (select `build` from `zt_release` where `deleted`='1'); ALTER TABLE `zt_productplan` ADD `parent` mediumint(9) NOT NULL DEFAULT '0' AFTER `branch`; ALTER TABLE `zt_action` CHANGE `actor` `actor` varchar(100) COLLATE 'utf8_general_ci' NOT NULL DEFAULT '' AFTER `project`; + +ALTER TABLE `zt_user` +ADD `wechat` char(20) COLLATE 'utf8_general_ci' NOT NULL AFTER `qq`, +ADD `dingding` char(20) COLLATE 'utf8_general_ci' NOT NULL AFTER `wechat`, +ADD `slack` char(20) COLLATE 'utf8_general_ci' NOT NULL AFTER `dingding`, +ADD `whatsapp` char(20) COLLATE 'utf8_general_ci' NOT NULL AFTER `slack`; diff --git a/module/company/config.php b/module/company/config.php index f26840fd9d..cd47675c49 100644 --- a/module/company/config.php +++ b/module/company/config.php @@ -38,9 +38,7 @@ $config->company->browse->search['fields']['commiter'] = $lang->user->commiter; $config->company->browse->search['fields']['gender'] = $lang->user->gender; $config->company->browse->search['fields']['qq'] = $lang->user->qq; $config->company->browse->search['fields']['skype'] = $lang->user->skype; -$config->company->browse->search['fields']['yahoo'] = $lang->user->yahoo; $config->company->browse->search['fields']['gtalk'] = $lang->user->gtalk; -$config->company->browse->search['fields']['wangwang'] = $lang->user->wangwang; $config->company->browse->search['fields']['address'] = $lang->user->address; $config->company->browse->search['fields']['zipcode'] = $lang->user->zipcode; @@ -56,8 +54,6 @@ $config->company->browse->search['params']['commiter'] = array('operator' => 'in $config->company->browse->search['params']['gender'] = array('operator' => '=', 'control' => 'select', 'values' => $lang->user->genderList); $config->company->browse->search['params']['qq'] = array('operator' => '=', 'control' => 'input', 'values' => ''); $config->company->browse->search['params']['skype'] = array('operator' => '=', 'control' => 'input', 'values' => ''); -$config->company->browse->search['params']['yahoo'] = array('operator' => '=', 'control' => 'input', 'values' => ''); $config->company->browse->search['params']['gtalk'] = array('operator' => '=', 'control' => 'input', 'values' => ''); -$config->company->browse->search['params']['wangwang'] = array('operator' => '=', 'control' => 'input', 'values' => ''); $config->company->browse->search['params']['address'] = array('operator' => 'include', 'control' => 'input', 'values' => ''); $config->company->browse->search['params']['zipcode'] = array('operator' => '=', 'control' => 'input', 'values' => ''); diff --git a/module/my/view/editprofile.html.php b/module/my/view/editprofile.html.php index 943ab8bc03..8145efb7be 100644 --- a/module/my/view/editprofile.html.php +++ b/module/my/view/editprofile.html.php @@ -64,22 +64,16 @@
          doc->libType?>
          doc->product?>
          - - + + - - + + - - - - - - diff --git a/module/my/view/profile.html.php b/module/my/view/profile.html.php index 4df8419a71..5fbdf7a51e 100644 --- a/module/my/view/profile.html.php +++ b/module/my/view/profile.html.php @@ -91,18 +91,10 @@ - - - - - - - - diff --git a/module/user/config.php b/module/user/config.php index 44eb60792e..afb00d80a7 100644 --- a/module/user/config.php +++ b/module/user/config.php @@ -6,8 +6,8 @@ $config->user->edit = new stdclass(); $config->user->create->requiredFields = 'account,realname,password,password1,password2'; $config->user->edit->requiredFields = 'account,realname'; -$config->user->customBatchCreateFields = 'dept,email,gender,commiter,join,skype,qq,yahoo,gtalk,wangwang,mobile,phone,address,zipcode'; -$config->user->customBatchEditFields = 'dept,email,commiter,skype,qq,yahoo,gtalk,wangwang,mobile,phone,address,zipcode'; +$config->user->customBatchCreateFields = 'dept,email,gender,commiter,join,skype,qq,gtalk,mobile,phone,address,zipcode'; +$config->user->customBatchEditFields = 'dept,email,commiter,skype,qq,gtalk,mobile,phone,address,zipcode'; $config->user->custom = new stdclass(); $config->user->custom->batchCreateFields = 'dept,join,email,gender'; diff --git a/module/user/lang/en.php b/module/user/lang/en.php index ca47dd68ea..ea2cd16027 100644 --- a/module/user/lang/en.php +++ b/module/user/lang/en.php @@ -30,9 +30,7 @@ $lang->user->verify = 'Verification'; $lang->user->contactInfo = 'Contact'; $lang->user->skype = 'Skype'; $lang->user->qq = 'QQ'; -$lang->user->yahoo = 'Yahoo!'; $lang->user->gtalk = 'GTalk'; -$lang->user->wangwang = 'Wangwang'; $lang->user->mobile = 'Mobile'; $lang->user->phone = 'Phone'; $lang->user->address = 'Address'; diff --git a/module/user/lang/zh-cn.php b/module/user/lang/zh-cn.php index 77be8eb808..4aed2b9eb2 100644 --- a/module/user/lang/zh-cn.php +++ b/module/user/lang/zh-cn.php @@ -30,9 +30,7 @@ $lang->user->verify = '安全验证'; $lang->user->contactInfo = '联系信息'; $lang->user->skype = 'Skype'; $lang->user->qq = 'QQ'; -$lang->user->yahoo = '雅虎通'; $lang->user->gtalk = 'GTalk'; -$lang->user->wangwang = '旺旺'; $lang->user->mobile = '手机'; $lang->user->phone = '电话'; $lang->user->address = '通讯地址'; diff --git a/module/user/lang/zh-tw.php b/module/user/lang/zh-tw.php index 46b8da6f03..151e0cfdfd 100644 --- a/module/user/lang/zh-tw.php +++ b/module/user/lang/zh-tw.php @@ -30,9 +30,7 @@ $lang->user->verify = '安全驗證'; $lang->user->contactInfo = '聯繫信息'; $lang->user->skype = 'Skype'; $lang->user->qq = 'QQ'; -$lang->user->yahoo = '雅虎通'; $lang->user->gtalk = 'GTalk'; -$lang->user->wangwang = '旺旺'; $lang->user->mobile = '手機'; $lang->user->phone = '電話'; $lang->user->address = '通訊地址'; diff --git a/module/user/model.php b/module/user/model.php index 9d4ba6d0ae..78a8c92e92 100644 --- a/module/user/model.php +++ b/module/user/model.php @@ -300,9 +300,7 @@ class userModel extends model $data[$i]->join = empty($users->join[$i]) ? '0000-00-00' : ($users->join[$i]); $data[$i]->skype = $users->skype[$i]; $data[$i]->qq = $users->qq[$i]; - $data[$i]->yahoo = $users->yahoo[$i]; $data[$i]->gtalk = $users->gtalk[$i]; - $data[$i]->wangwang = $users->wangwang[$i]; $data[$i]->mobile = $users->mobile[$i]; $data[$i]->phone = $users->phone[$i]; $data[$i]->address = $users->address[$i]; @@ -474,9 +472,7 @@ class userModel extends model $users[$id]['join'] = $data->join[$id]; $users[$id]['skype'] = $data->skype[$id]; $users[$id]['qq'] = $data->qq[$id]; - $users[$id]['yahoo'] = $data->yahoo[$id]; $users[$id]['gtalk'] = $data->gtalk[$id]; - $users[$id]['wangwang'] = $data->wangwang[$id]; $users[$id]['mobile'] = $data->mobile[$id]; $users[$id]['phone'] = $data->phone[$id]; $users[$id]['address'] = $data->address[$id]; diff --git a/module/user/view/batchcreate.html.php b/module/user/view/batchcreate.html.php index 33dd92e7fc..53f86ffa9c 100644 --- a/module/user/view/batchcreate.html.php +++ b/module/user/view/batchcreate.html.php @@ -47,9 +47,7 @@ - - @@ -82,9 +80,7 @@ - - diff --git a/module/user/view/batchedit.html.php b/module/user/view/batchedit.html.php index b1298b43d0..2d3bc3093f 100644 --- a/module/user/view/batchedit.html.php +++ b/module/user/view/batchedit.html.php @@ -43,9 +43,7 @@ - - @@ -73,9 +71,7 @@ - - diff --git a/module/user/view/edit.html.php b/module/user/view/edit.html.php index d898d57dcc..274433ba1e 100644 --- a/module/user/view/edit.html.php +++ b/module/user/view/edit.html.php @@ -77,22 +77,16 @@
          my->form->lblContact;?>
          user->skype;?>skype, "class='form-control'");?>user->mobile;?>mobile, "class='form-control'");?> user->qq;?> qq, "class='form-control'");?>
          user->yahoo;?>yahoo, "class='form-control'");?>user->skype;?>skype, "class='form-control'");?> user->gtalk;?> gtalk, "class='form-control'");?>
          user->wangwang;?>wangwang, "class='form-control'");?>user->mobile;?>mobile, "class='form-control'");?>
          user->phone;?>user->qq;?> qq) echo html::a("tencent://message/?uin=$user->qq", $user->qq);?>
          user->yahoo;?>yahoo;?>
          user->gtalk;?> gtalk;?>
          user->wangwang;?>wangwang;?>
          user->mobile;?> mobile;?>'> user->join;?> '> user->skype;?> '> user->qq;?>'> user->yahoo;?> '> user->gtalk;?>'>user->wangwang;?> '> user->mobile;?> '> user->phone;?> '> user->address;?>'> '> '> '> '> '> '> '> '> '> user->join;?> '> user->skype;?> '> user->qq;?>'> user->yahoo;?> '> user->gtalk;?>'> user->wangwang;?> '> user->mobile;?> '> user->phone;?> '> user->address;?>'> id]", $user->join, "class='form-control form-date'");?> '> id]", $user->skype, "class='form-control'");?> '> id]", $user->qq, "class='form-control'");?>'> id]", $user->yahoo, "class='form-control'");?> '> id]", $user->gtalk, "class='form-control'");?>'>id]", $user->wangwang, "class='form-control'");?> '> id]", $user->mobile, "class='form-control'");?> '> id]", $user->phone, "class='form-control'");?> '> id]", $user->address, "class='form-control'");?>
          - - + + - - - - - - - - + + diff --git a/module/user/view/profile.html.php b/module/user/view/profile.html.php index c02bed9610..b1252309fa 100644 --- a/module/user/view/profile.html.php +++ b/module/user/view/profile.html.php @@ -99,18 +99,10 @@ - - - - - - - - From 07fe8907686e24e092fc95ffa95f684259e2651c Mon Sep 17 00:00:00 2001 From: Yagami Date: Sat, 23 Feb 2019 14:43:24 +0800 Subject: [PATCH 251/442] * Code for task #5271. --- module/custom/control.php | 10 ++++++++++ module/custom/lang/en.php | 7 +++++++ module/custom/lang/zh-cn.php | 7 +++++++ module/custom/view/set.html.php | 15 +++++++++++++++ module/user/lang/en.php | 4 ++++ module/user/lang/zh-cn.php | 4 ++++ module/user/view/edit.html.php | 20 ++++++++++++++++++++ 7 files changed, 67 insertions(+) diff --git a/module/custom/control.php b/module/custom/control.php index 4d0680144f..6667281247 100644 --- a/module/custom/control.php +++ b/module/custom/control.php @@ -79,6 +79,11 @@ class custom extends control $this->app->loadConfig('user'); $this->view->showDeleted = isset($this->config->user->showDeleted) ? $this->config->user->showDeleted : '0'; } + if($module == 'user' and $field == 'showField') + { + $this->app->loadConfig('user'); + $this->view->showFields = isset($this->config->user->showFields) ? $this->config->user->showFields : ''; + } if(strtolower($this->server->request_method) == "post") { @@ -112,6 +117,11 @@ class custom extends control $data = fixer::input('post')->get(); $this->loadModel('setting')->setItem('system.user.showDeleted', $data->showDeleted); } + elseif($module == 'user' and $field == 'showField') + { + $data = fixer::input('post')->join('showFields', ',')->get(); + $this->loadModel('setting')->setItem('system.user.showFields', $data->showFields); + } else { $lang = $_POST['lang']; diff --git a/module/custom/lang/en.php b/module/custom/lang/en.php index d83a4fca8e..fad34b2c31 100644 --- a/module/custom/lang/en.php +++ b/module/custom/lang/en.php @@ -75,6 +75,7 @@ $lang->custom->user = new stdClass(); $lang->custom->user->fields['roleList'] = 'Role'; $lang->custom->user->fields['statusList'] = 'Status'; $lang->custom->user->fields['deleted'] = 'Deleted User'; +$lang->custom->user->fields['showField'] = 'Show Field'; $lang->custom->block->fields['closed'] = 'Closed Block'; @@ -84,6 +85,7 @@ $lang->custom->allLang = 'All Language'; $lang->custom->confirmRestore = 'Do you want to reset to Default?'; $lang->custom->notice = new stdclass(); +$lang->custom->notice->userFieldNotice = 'Control whether the above fields are displayed on the user-related page, and leave blank to display all'; $lang->custom->notice->canNotAdd = 'It will be calculated, so customization is not enabled.'; $lang->custom->notice->forceReview = '%s Review is required for certain submitters.'; $lang->custom->notice->forceNotReview = "%s Review is NOT required for certain submitters."; @@ -109,6 +111,11 @@ $lang->custom->reviewList[0] = 'Off'; $lang->custom->deletedList[1] = 'Show'; $lang->custom->deletedList[0] = 'Hide'; +$lang->custom->userFieldList['wechat'] = 'Wechat'; +$lang->custom->userFieldList['dingding'] = 'Dingding'; +$lang->custom->userFieldList['slact'] = 'Slact'; +$lang->custom->userFieldList['whatsapp'] = 'WhatsApp'; + $lang->custom->workingHours = 'hours/day'; $lang->custom->weekend = 'Weekend'; $lang->custom->weekendList[2] = '2-Day Off'; diff --git a/module/custom/lang/zh-cn.php b/module/custom/lang/zh-cn.php index 98b09eedd9..e0af6e6cdc 100644 --- a/module/custom/lang/zh-cn.php +++ b/module/custom/lang/zh-cn.php @@ -75,6 +75,7 @@ $lang->custom->user = new stdClass(); $lang->custom->user->fields['roleList'] = '职位'; $lang->custom->user->fields['statusList'] = '状态'; $lang->custom->user->fields['deleted'] = '列出已删除用户'; +$lang->custom->user->fields['showField'] = '显示字段'; $lang->custom->block->fields['closed'] = '关闭的区块'; @@ -84,6 +85,7 @@ $lang->custom->allLang = '适用所有语言'; $lang->custom->confirmRestore = '是否要恢复默认配置?'; $lang->custom->notice = new stdclass(); +$lang->custom->notice->userFieldNotice = '控制以上字段在用户相关页面是否显示,留空则全显示'; $lang->custom->notice->canNotAdd = '该项参与运算,不提供自定义添加功能'; $lang->custom->notice->forceReview = "指定人提交的%s必须评审。"; $lang->custom->notice->forceNotReview = "指定人提交的%s不需要评审。"; @@ -109,6 +111,11 @@ $lang->custom->reviewList[0] = '关闭'; $lang->custom->deletedList[1] = '列出'; $lang->custom->deletedList[0] = '不列出'; +$lang->custom->userFieldList['wechat'] = '微信'; +$lang->custom->userFieldList['dingding'] = '钉钉'; +$lang->custom->userFieldList['slact'] = 'Slact'; +$lang->custom->userFieldList['whatsapp'] = 'WhatsApp'; + $lang->custom->workingHours = '每天可用工时'; $lang->custom->weekend = '休息日'; $lang->custom->weekendList[2] = '双休'; diff --git a/module/custom/view/set.html.php b/module/custom/view/set.html.php index 92ae3c6ab7..c1d692cf20 100644 --- a/module/custom/view/set.html.php +++ b/module/custom/view/set.html.php @@ -124,6 +124,21 @@ EOT;
          user->contactInfo;?>
          user->skype;?>skype, "class='form-control'");?>user->mobile;?>mobile, "class='form-control'");?> user->qq;?> qq, "class='form-control'");?>
          user->yahoo;?>yahoo, "class='form-control'");?> user->gtalk;?> gtalk, "class='form-control'");?>
          user->wangwang;?>wangwang, "class='form-control'");?>user->mobile;?>mobile, "class='form-control'");?>user->skype;?>skype, "class='form-control'");?>
          user->phone;?>user->qq;?> qq) echo html::a("tencent://message/?uin=$user->qq", $user->qq);?>
          user->yahoo;?>yahoo;?>
          user->gtalk;?> gtalk;?>
          user->wangwang;?>wangwang;?>
          user->mobile;?> mobile;?>
          + + + + + + + + + + + + + + +
          custom->user->fields['showField'];?>custom->userFieldList, $showFields, "class='form-control chosen' multiple");?>
          custom->notice->userFieldNotice;?>
          diff --git a/module/user/lang/en.php b/module/user/lang/en.php index ea2cd16027..a878dbe98e 100644 --- a/module/user/lang/en.php +++ b/module/user/lang/en.php @@ -30,6 +30,10 @@ $lang->user->verify = 'Verification'; $lang->user->contactInfo = 'Contact'; $lang->user->skype = 'Skype'; $lang->user->qq = 'QQ'; +$lang->user->wechat = 'Wechat'; +$lang->user->dingding = 'Dingding'; +$lang->user->slack = 'Slack'; +$lang->user->whatsapp = 'WhatsApp'; $lang->user->gtalk = 'GTalk'; $lang->user->mobile = 'Mobile'; $lang->user->phone = 'Phone'; diff --git a/module/user/lang/zh-cn.php b/module/user/lang/zh-cn.php index 4aed2b9eb2..f19e8d8bd5 100644 --- a/module/user/lang/zh-cn.php +++ b/module/user/lang/zh-cn.php @@ -30,6 +30,10 @@ $lang->user->verify = '安全验证'; $lang->user->contactInfo = '联系信息'; $lang->user->skype = 'Skype'; $lang->user->qq = 'QQ'; +$lang->user->wechat = '微信'; +$lang->user->dingding = '钉钉'; +$lang->user->slack = 'Slack'; +$lang->user->whatsapp = 'WhatsApp'; $lang->user->gtalk = 'GTalk'; $lang->user->mobile = '手机'; $lang->user->phone = '电话'; diff --git a/module/user/view/edit.html.php b/module/user/view/edit.html.php index 274433ba1e..de62af1e4b 100644 --- a/module/user/view/edit.html.php +++ b/module/user/view/edit.html.php @@ -94,6 +94,26 @@ + + user->showFields) or (strpos($config->user->showFields, 'wechat') !== false)):?> + + + + user->showFields) or (strpos($config->user->showFields, 'dingding') !== false)):?> + + + + + + user->showFields) or (strpos($config->user->showFields, 'slack') !== false)):?> + + + + user->showFields) or (strpos($config->user->showFields, 'whatsapp') !== false)):?> + + + + From 8278e84b873bbb36ddc7ff94aaad57970cfcfab5 Mon Sep 17 00:00:00 2001 From: Yagami Date: Sat, 23 Feb 2019 16:19:17 +0800 Subject: [PATCH 252/442] * Code for task #5271. --- module/my/view/editprofile.html.php | 20 ++++++++++++++++++++ module/my/view/profile.html.php | 24 ++++++++++++++++++++++++ module/user/view/profile.html.php | 26 ++++++++++++++++++++++++++ 3 files changed, 70 insertions(+) diff --git a/module/my/view/editprofile.html.php b/module/my/view/editprofile.html.php index 8145efb7be..a1a9e348ef 100644 --- a/module/my/view/editprofile.html.php +++ b/module/my/view/editprofile.html.php @@ -81,6 +81,26 @@ + + user->showFields) or (strpos($config->user->showFields, 'wechat') !== false)):?> + + + + user->showFields) or (strpos($config->user->showFields, 'dingding') !== false)):?> + + + + + + user->showFields) or (strpos($config->user->showFields, 'slack') !== false)):?> + + + + user->showFields) or (strpos($config->user->showFields, 'whatsapp') !== false)):?> + + + + diff --git a/module/my/view/profile.html.php b/module/my/view/profile.html.php index 5fbdf7a51e..c9f10d653f 100644 --- a/module/my/view/profile.html.php +++ b/module/my/view/profile.html.php @@ -91,6 +91,30 @@ + user->showFields) or (strpos($config->user->showFields, 'wechat') !== false)):?> + + + + + + user->showFields) or (strpos($config->user->showFields, 'dingding') !== false)):?> + + + + + + user->showFields) or (strpos($config->user->showFields, 'slack') !== false)):?> + + + + + + user->showFields) or (strpos($config->user->showFields, 'whatsapp') !== false)):?> + + + + + diff --git a/module/user/view/profile.html.php b/module/user/view/profile.html.php index b1252309fa..ce2d376b62 100644 --- a/module/user/view/profile.html.php +++ b/module/user/view/profile.html.php @@ -99,6 +99,32 @@ + + user->showFields) or (strpos($config->user->showFields, 'wechat') !== false)):?> + + + + + + user->showFields) or (strpos($config->user->showFields, 'dingding') !== false)):?> + + + + + + user->showFields) or (strpos($config->user->showFields, 'slack') !== false)):?> + + + + + + user->showFields) or (strpos($config->user->showFields, 'whatsapp') !== false)):?> + + + + + + From 79659b0282f4a898b634f347101345c3596f6b30 Mon Sep 17 00:00:00 2001 From: Yagami Date: Sun, 24 Feb 2019 09:39:12 +0800 Subject: [PATCH 253/442] * Fix common lang. --- module/custom/lang/zh-cn.php | 2 +- module/user/view/profile.html.php | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/module/custom/lang/zh-cn.php b/module/custom/lang/zh-cn.php index e0af6e6cdc..6991673094 100644 --- a/module/custom/lang/zh-cn.php +++ b/module/custom/lang/zh-cn.php @@ -85,7 +85,7 @@ $lang->custom->allLang = '适用所有语言'; $lang->custom->confirmRestore = '是否要恢复默认配置?'; $lang->custom->notice = new stdclass(); -$lang->custom->notice->userFieldNotice = '控制以上字段在用户相关页面是否显示,留空则全显示'; +$lang->custom->notice->userFieldNotice = '控制以上字段在用户相关页面是否显示,留空则全部显示'; $lang->custom->notice->canNotAdd = '该项参与运算,不提供自定义添加功能'; $lang->custom->notice->forceReview = "指定人提交的%s必须评审。"; $lang->custom->notice->forceNotReview = "指定人提交的%s不需要评审。"; diff --git a/module/user/view/profile.html.php b/module/user/view/profile.html.php index ce2d376b62..9e3885a9c5 100644 --- a/module/user/view/profile.html.php +++ b/module/user/view/profile.html.php @@ -99,7 +99,6 @@ - user->showFields) or (strpos($config->user->showFields, 'wechat') !== false)):?> @@ -124,7 +123,6 @@ - From 3e7caa0da1a0820caa7b4cb82c4f7fcfcb785523 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Mon, 25 Feb 2019 08:43:53 +0800 Subject: [PATCH 254/442] * finish task #5271. --- db/update11.2.sql | 4 +++ db/zentao.sql | 6 ++-- module/company/config.php | 12 ++++--- module/custom/config.php | 2 +- module/custom/control.php | 5 +++ module/custom/lang/zh-cn.php | 7 ++-- module/custom/model.php | 2 ++ module/custom/view/set.html.php | 15 ++++++++ module/doc/js/create.js | 2 +- module/doc/lang/zh-cn.php | 14 ++++---- module/my/view/editprofile.html.php | 31 +++++----------- module/my/view/profile.html.php | 45 ++++++++++------------- module/user/config.php | 11 +++--- module/user/control.php | 22 +++++++++--- module/user/lang/zh-cn.php | 15 +++++++- module/user/model.php | 20 ++++++++--- module/user/view/batchcreate.html.php | 12 ++++--- module/user/view/batchedit.html.php | 12 ++++--- module/user/view/edit.html.php | 30 +++++----------- module/user/view/profile.html.php | 51 ++++++++++----------------- 20 files changed, 174 insertions(+), 144 deletions(-) diff --git a/db/update11.2.sql b/db/update11.2.sql index c049c96631..e54f25c50e 100644 --- a/db/update11.2.sql +++ b/db/update11.2.sql @@ -1,3 +1,7 @@ update `zt_build` set `deleted`='1' where `project`='0' and `id` in (select `build` from `zt_release` where `deleted`='1'); ALTER TABLE `zt_productplan` ADD `parent` mediumint(9) NOT NULL DEFAULT '0' AFTER `branch`; ALTER TABLE `zt_action` CHANGE `actor` `actor` varchar(100) COLLATE 'utf8_general_ci' NOT NULL DEFAULT '' AFTER `project`; +ALTER TABLE `zt_user` ADD `weixin` varchar(90) COLLATE 'utf8_general_ci' NOT NULL AFTER `phone`; +ALTER TABLE `zt_user` ADD `dingtalk` varchar(90) COLLATE 'utf8_general_ci' NOT NULL AFTER `weixin`; +ALTER TABLE `zt_user` ADD `slack` varchar(90) COLLATE 'utf8_general_ci' NOT NULL AFTER `dingtalk`; +ALTER TABLE `zt_user` ADD `whatsapp` varchar(90) COLLATE 'utf8_general_ci' NOT NULL AFTER `slack`; diff --git a/db/zentao.sql b/db/zentao.sql index cc2fadefda..3a42a0d590 100644 --- a/db/zentao.sql +++ b/db/zentao.sql @@ -815,11 +815,13 @@ CREATE TABLE IF NOT EXISTS `zt_user` ( `email` char(90) NOT NULL default '', `skype` char(90) NOT NULL default '', `qq` char(20) NOT NULL default '', - `yahoo` char(90) NOT NULL default '', `gtalk` char(90) NOT NULL default '', - `wangwang` char(90) NOT NULL default '', `mobile` char(11) NOT NULL default '', `phone` char(20) NOT NULL default '', + `weixin` varchar(90) NOT NULL default '', + `dingtalk` varchar(90) NOT NULL default '', + `slack` varchar(90) NOT NULL default '', + `whatsapp` varchar(90) NOT NULL default '', `address` char(120) NOT NULL default '', `zipcode` char(10) NOT NULL default '', `join` date NOT NULL default '0000-00-00', diff --git a/module/company/config.php b/module/company/config.php index f26840fd9d..04b36fc68c 100644 --- a/module/company/config.php +++ b/module/company/config.php @@ -38,9 +38,11 @@ $config->company->browse->search['fields']['commiter'] = $lang->user->commiter; $config->company->browse->search['fields']['gender'] = $lang->user->gender; $config->company->browse->search['fields']['qq'] = $lang->user->qq; $config->company->browse->search['fields']['skype'] = $lang->user->skype; -$config->company->browse->search['fields']['yahoo'] = $lang->user->yahoo; +$config->company->browse->search['fields']['dingtalk'] = $lang->user->dingtalk; $config->company->browse->search['fields']['gtalk'] = $lang->user->gtalk; -$config->company->browse->search['fields']['wangwang'] = $lang->user->wangwang; +$config->company->browse->search['fields']['weixin'] = $lang->user->weixin; +$config->company->browse->search['fields']['slack'] = $lang->user->slack; +$config->company->browse->search['fields']['whatsapp'] = $lang->user->whatsapp; $config->company->browse->search['fields']['address'] = $lang->user->address; $config->company->browse->search['fields']['zipcode'] = $lang->user->zipcode; @@ -56,8 +58,10 @@ $config->company->browse->search['params']['commiter'] = array('operator' => 'in $config->company->browse->search['params']['gender'] = array('operator' => '=', 'control' => 'select', 'values' => $lang->user->genderList); $config->company->browse->search['params']['qq'] = array('operator' => '=', 'control' => 'input', 'values' => ''); $config->company->browse->search['params']['skype'] = array('operator' => '=', 'control' => 'input', 'values' => ''); -$config->company->browse->search['params']['yahoo'] = array('operator' => '=', 'control' => 'input', 'values' => ''); +$config->company->browse->search['params']['dingtalk'] = array('operator' => '=', 'control' => 'input', 'values' => ''); $config->company->browse->search['params']['gtalk'] = array('operator' => '=', 'control' => 'input', 'values' => ''); -$config->company->browse->search['params']['wangwang'] = array('operator' => '=', 'control' => 'input', 'values' => ''); +$config->company->browse->search['params']['weixin'] = array('operator' => '=', 'control' => 'input', 'values' => ''); +$config->company->browse->search['params']['slack'] = array('operator' => '=', 'control' => 'input', 'values' => ''); +$config->company->browse->search['params']['whatsapp'] = array('operator' => '=', 'control' => 'input', 'values' => ''); $config->company->browse->search['params']['address'] = array('operator' => 'include', 'control' => 'input', 'values' => ''); $config->company->browse->search['params']['zipcode'] = array('operator' => '=', 'control' => 'input', 'values' => ''); diff --git a/module/custom/config.php b/module/custom/config.php index a7bb9e1cda..ea6ba4acda 100644 --- a/module/custom/config.php +++ b/module/custom/config.php @@ -55,4 +55,4 @@ $config->custom->fieldList['testreport'] = 'begin,end,members,report $config->custom->fieldList['testtask'] = 'owner,pri,status,desc,comment'; $config->custom->fieldList['doc'] = 'keywords,content'; $config->custom->fieldList['user']['create'] = 'dept,role,email,commiter'; -$config->custom->fieldList['user']['edit'] = 'dept,role,email,commiter,skype,qq,mobile,phone,address,zipcode,wangwang,gtalk'; +$config->custom->fieldList['user']['edit'] = 'dept,role,email,commiter,skype,qq,mobile,phone,address,zipcode,dingtalk,gtalk,slack,whatsapp,weixin'; diff --git a/module/custom/control.php b/module/custom/control.php index 4d0680144f..5440ea9797 100644 --- a/module/custom/control.php +++ b/module/custom/control.php @@ -107,6 +107,11 @@ class custom extends control $data = fixer::input('post')->join('closed', ',')->get(); $this->loadModel('setting')->setItem('system.block.closed', zget($data, 'closed', '')); } + elseif($module == 'user' and $field == 'contactField') + { + $data = fixer::input('post')->join('contactField', ',')->get(); + $this->loadModel('setting')->setItem('system.user.contactField', $data->contactField); + } elseif($module == 'user' and $field == 'deleted') { $data = fixer::input('post')->get(); diff --git a/module/custom/lang/zh-cn.php b/module/custom/lang/zh-cn.php index 98b09eedd9..6b6e8dde8e 100644 --- a/module/custom/lang/zh-cn.php +++ b/module/custom/lang/zh-cn.php @@ -72,9 +72,10 @@ $lang->custom->todo->fields['typeList'] = '类型'; $lang->custom->todo->fields['statusList'] = '状态'; $lang->custom->user = new stdClass(); -$lang->custom->user->fields['roleList'] = '职位'; -$lang->custom->user->fields['statusList'] = '状态'; -$lang->custom->user->fields['deleted'] = '列出已删除用户'; +$lang->custom->user->fields['roleList'] = '职位'; +$lang->custom->user->fields['statusList'] = '状态'; +$lang->custom->user->fields['contactField'] = '可用联系方式'; +$lang->custom->user->fields['deleted'] = '列出已删除用户'; $lang->custom->block->fields['closed'] = '关闭的区块'; diff --git a/module/custom/model.php b/module/custom/model.php index f53f565e5e..fe3e0b1c59 100644 --- a/module/custom/model.php +++ b/module/custom/model.php @@ -440,8 +440,10 @@ class customModel extends model $fieldList = isset($customFields[$moduleName][$method]) ? $customFields[$moduleName][$method] : $customFields[$moduleName]; if(!is_string($fieldList)) return $fields; + if($moduleName == 'user' and $method == 'edit') $this->app->loadConfig('user'); foreach(explode(',', $fieldList) as $fieldName) { + if($moduleName == 'user' and $method == 'edit' and strpos($this->config->user->contactField, $fieldName) === false) continue; if($fieldName == 'comment') $fields[$fieldName] = $this->lang->comment; if(isset($moduleLang->$fieldName) and is_string($moduleLang->$fieldName)) $fields[$fieldName] = $moduleLang->$fieldName; } diff --git a/module/custom/view/set.html.php b/module/custom/view/set.html.php index 92ae3c6ab7..6ef62a37f3 100644 --- a/module/custom/view/set.html.php +++ b/module/custom/view/set.html.php @@ -113,6 +113,21 @@ EOT;
          user->address;?> address, "class='form-control'");?>
          user->wechat;?>wechat, "class='form-control'");?>user->dingding;?>dingding, "class='form-control'");?>
          user->slack;?>slack, "class='form-control'");?>user->whatsapp;?>whatsapp, "class='form-control'");?>
          user->zipcode;?> zipcode, "class='form-control'");?>user->address;?> address, "class='form-control'");?>
          user->wechat;?>wechat, "class='form-control'");?>user->dingding;?>dingding, "class='form-control'");?>
          user->slack;?>slack, "class='form-control'");?>user->whatsapp;?>whatsapp, "class='form-control'");?>
          user->zipcode;?> zipcode, "class='form-control'");?>user->qq;?> qq) echo html::a("tencent://message/?uin=$user->qq", $user->qq);?>
          user->wechat;?>wechat;?>
          user->dingding;?>dingding;?>
          user->slack;?>slack;?>
          user->whatsapp;?>whatsapp;?>
          user->gtalk;?> gtalk;?>user->qq;?> qq) echo html::a("tencent://message/?uin=$user->qq", $user->qq);?>
          user->wechat;?>wechat;?>
          user->dingding;?>dingding;?>
          user->slack;?>slack;?>
          user->whatsapp;?>whatsapp;?>
          user->gtalk;?> gtalk;?>user->qq;?> qq) echo html::a("tencent://message/?uin=$user->qq", $user->qq);?>
          user->wechat;?>whatsapp;?>
          user->gtalk;?> gtalk;?>
          + + app->loadConfig('user'); + $this->app->loadLang('user'); + ?> + + + + + + + + + +
          custom->user->fields['contactField'];?>user->contactFieldList, $config->user->contactField, "class='form-control chosen' multiple");?>
          diff --git a/module/doc/js/create.js b/module/doc/js/create.js index 1c163e90f4..5cc44c388a 100644 --- a/module/doc/js/create.js +++ b/module/doc/js/create.js @@ -1,7 +1,7 @@ $(function() { toggleAcl($('[name=acl]').val(), 'doc'); - setTimeout(function(){initPage(docType)}, 100); + setTimeout(function(){initPage(docType)}, 50); $('input[name="type"]').change(function() { var type = $(this).val(); diff --git a/module/doc/lang/zh-cn.php b/module/doc/lang/zh-cn.php index 1b3527de2f..cba554cbf7 100644 --- a/module/doc/lang/zh-cn.php +++ b/module/doc/lang/zh-cn.php @@ -165,17 +165,17 @@ $lang->doc->noEditedDoc = '您还没有编辑任何文档。'; $lang->doc->noOpenedDoc = '您还没有创建任何文档。'; $lang->doc->noCollectedDoc = '您还没有收藏任何文档。'; -$lang->doc->noticeAcl['lib']['product']['open'] = '所有人都可以访问,除非用户没有权限访问的关联产品。'; -$lang->doc->noticeAcl['lib']['product']['custom'] = '白名单和有权限访问的关联产品的用户可以访问。'; -$lang->doc->noticeAcl['lib']['product']['private'] = '创建人和有权限访问的关联产品的用户可以访问。'; -$lang->doc->noticeAcl['lib']['project']['open'] = '所有人都可以访问,除非用户没有权限访问的关联项目。'; -$lang->doc->noticeAcl['lib']['project']['custom'] = '白名单和有权限访问的关联项目的用户可以访问。'; -$lang->doc->noticeAcl['lib']['project']['private'] = '创建人和有权限访问的关联项目的用户可以访问。'; +$lang->doc->noticeAcl['lib']['product']['open'] = '除了没有关联产品权限的用户,都可以访问。'; +$lang->doc->noticeAcl['lib']['product']['custom'] = '白名单和有关联产品权限的用户可以访问。'; +$lang->doc->noticeAcl['lib']['product']['private'] = '创建人和有关联产品权限的用户可以访问。'; +$lang->doc->noticeAcl['lib']['project']['open'] = '除了没有关联项目权限的用户,都可以访问。'; +$lang->doc->noticeAcl['lib']['project']['custom'] = '白名单和有关联项目权限的用户可以访问。'; +$lang->doc->noticeAcl['lib']['project']['private'] = '创建人和有关联项目权限的用户可以访问。'; $lang->doc->noticeAcl['lib']['custom']['open'] = '所有人都可以访问。'; $lang->doc->noticeAcl['lib']['custom']['custom'] = '白名单的用户可以访问。'; $lang->doc->noticeAcl['lib']['custom']['private'] = '只有创建人可以访问。'; -$lang->doc->noticeAcl['doc']['open'] = '所有人都可以访问,除非用户没有所属文档库的权限。'; +$lang->doc->noticeAcl['doc']['open'] = '除了没有所属文档库权限的用户,都可以访问。'; $lang->doc->noticeAcl['doc']['custom'] = '白名单的用户可以访问。'; $lang->doc->noticeAcl['doc']['private'] = '只有自己可以访问。'; diff --git a/module/my/view/editprofile.html.php b/module/my/view/editprofile.html.php index 943ab8bc03..a61a2586c6 100644 --- a/module/my/view/editprofile.html.php +++ b/module/my/view/editprofile.html.php @@ -63,34 +63,19 @@
          + + user->contactField) as $field):?> + ';?> + + + + ';?> + - - - - - - - - - - - - - - - - - - - - - - -
          my->form->lblContact;?>
          user->$field;?>$field, "class='form-control'");?>
          user->skype;?>skype, "class='form-control'");?>user->qq;?>qq, "class='form-control'");?>
          user->yahoo;?>yahoo, "class='form-control'");?>user->gtalk;?>gtalk, "class='form-control'");?>
          user->wangwang;?>wangwang, "class='form-control'");?>user->mobile;?>mobile, "class='form-control'");?>
          user->phone;?>phone, "class='form-control'");?> user->address;?> address, "class='form-control'");?>
          user->zipcode;?> zipcode, "class='form-control'");?>
          diff --git a/module/my/view/profile.html.php b/module/my/view/profile.html.php index 4df8419a71..6981fc56f5 100644 --- a/module/my/view/profile.html.php +++ b/module/my/view/profile.html.php @@ -83,34 +83,27 @@ + user->contactField) as $field):?> - - - - - - - - - - - - - - - - - - - - - - - - - - + + + diff --git a/module/user/config.php b/module/user/config.php index 44eb60792e..f40c34a953 100644 --- a/module/user/config.php +++ b/module/user/config.php @@ -6,13 +6,14 @@ $config->user->edit = new stdclass(); $config->user->create->requiredFields = 'account,realname,password,password1,password2'; $config->user->edit->requiredFields = 'account,realname'; -$config->user->customBatchCreateFields = 'dept,email,gender,commiter,join,skype,qq,yahoo,gtalk,wangwang,mobile,phone,address,zipcode'; -$config->user->customBatchEditFields = 'dept,email,commiter,skype,qq,yahoo,gtalk,wangwang,mobile,phone,address,zipcode'; +$config->user->customBatchCreateFields = 'dept,email,gender,commiter,join,skype,qq,dingtalk,gtalk,weixin,mobile,slack,whatsapp,phone,address,zipcode'; +$config->user->customBatchEditFields = 'dept,email,commiter,skype,qq,dingtalk,gtalk,weixin,mobile,slack,whatsapp,phone,address,zipcode'; $config->user->custom = new stdclass(); $config->user->custom->batchCreateFields = 'dept,join,email,gender'; $config->user->custom->batchEditFields = 'dept,join,email,commiter'; -$config->user->failTimes = 6; -$config->user->lockMinutes = 10; -$config->user->batchCreate = 10; +$config->user->contactField = 'skype,qq,dingtalk,gtalk,weixin,mobile,slack,whatsapp,phone'; +$config->user->failTimes = 6; +$config->user->lockMinutes = 10; +$config->user->batchCreate = 10; diff --git a/module/user/control.php b/module/user/control.php index f9ea324cd4..b2af1add19 100644 --- a/module/user/control.php +++ b/module/user/control.php @@ -456,9 +456,16 @@ class user extends control } /* Set custom. */ - foreach(explode(',', $this->config->user->customBatchCreateFields) as $field) $customFields[$field] = $this->lang->user->$field; + foreach(explode(',', $this->config->user->customBatchCreateFields) as $field) + { + if(!isset($this->lang->user->contactFieldList[$field]) or strpos($this->config->user->contactField, $field) !== false) $customFields[$field] = $this->lang->user->$field; + } + foreach(explode(',', $this->config->user->custom->batchCreateFields) as $field) + { + if(!isset($this->lang->user->contactFieldList[$field]) or strpos($this->config->user->contactField, $field) !== false) $showFields[$field] = $field; + } $this->view->customFields = $customFields; - $this->view->showFields = $this->config->user->custom->batchCreateFields; + $this->view->showFields = join(',', $showFields); $title = $this->lang->company->common . $this->lang->colon . $this->lang->user->batchCreate; $position[] = $this->lang->user->batchCreate; @@ -533,9 +540,16 @@ class user extends control $this->lang->user->menuOrder = $this->lang->company->menuOrder; /* Set custom. */ - foreach(explode(',', $this->config->user->customBatchEditFields) as $field) $customFields[$field] = $this->lang->user->$field; + foreach(explode(',', $this->config->user->customBatchEditFields) as $field) + { + if(!isset($this->lang->user->contactFieldList[$field]) or strpos($this->config->user->contactField, $field) !== false) $customFields[$field] = $this->lang->user->$field; + } + foreach(explode(',', $this->config->user->custom->batchEditFields) as $field) + { + if(!isset($this->lang->user->contactFieldList[$field]) or strpos($this->config->user->contactField, $field) !== false) $showFields[$field] = $field; + } $this->view->customFields = $customFields; - $this->view->showFields = $this->config->user->custom->batchEditFields; + $this->view->showFields = join(',', $showFields); $this->view->title = $this->lang->company->common . $this->lang->colon . $this->lang->user->batchEdit; $this->view->position[] = $this->lang->user->batchEdit; diff --git a/module/user/lang/zh-cn.php b/module/user/lang/zh-cn.php index 77be8eb808..7999b5d7e1 100644 --- a/module/user/lang/zh-cn.php +++ b/module/user/lang/zh-cn.php @@ -30,11 +30,14 @@ $lang->user->verify = '安全验证'; $lang->user->contactInfo = '联系信息'; $lang->user->skype = 'Skype'; $lang->user->qq = 'QQ'; -$lang->user->yahoo = '雅虎通'; $lang->user->gtalk = 'GTalk'; $lang->user->wangwang = '旺旺'; $lang->user->mobile = '手机'; $lang->user->phone = '电话'; +$lang->user->weixin = '微信'; +$lang->user->dingtalk = '钉钉'; +$lang->user->slack = 'Slack'; +$lang->user->whatsapp = 'WhatsApp'; $lang->user->address = '通讯地址'; $lang->user->zipcode = '邮编'; $lang->user->join = '入职日期'; @@ -151,6 +154,16 @@ $lang->user->error->reserved = "【ID %s】的用户名已被系统预留"; $lang->user->error->verifyPassword = "验证失败,请检查您的系统登录密码是否正确"; $lang->user->error->originalPassword = "原密码不正确"; +$lang->user->contactFieldList['skype'] = $lang->user->skype; +$lang->user->contactFieldList['qq'] = $lang->user->qq; +$lang->user->contactFieldList['dingtalk'] = $lang->user->dingtalk; +$lang->user->contactFieldList['gtalk'] = $lang->user->gtalk; +$lang->user->contactFieldList['weixin'] = $lang->user->weixin; +$lang->user->contactFieldList['mobile'] = $lang->user->mobile; +$lang->user->contactFieldList['slack'] = $lang->user->slack; +$lang->user->contactFieldList['whatsapp'] = $lang->user->whatsapp; +$lang->user->contactFieldList['phone'] = $lang->user->phone; + $lang->user->contacts = new stdclass(); $lang->user->contacts->common = '联系人'; $lang->user->contacts->listName = '列表名称'; diff --git a/module/user/model.php b/module/user/model.php index 9d4ba6d0ae..535b85e4a9 100644 --- a/module/user/model.php +++ b/module/user/model.php @@ -300,10 +300,12 @@ class userModel extends model $data[$i]->join = empty($users->join[$i]) ? '0000-00-00' : ($users->join[$i]); $data[$i]->skype = $users->skype[$i]; $data[$i]->qq = $users->qq[$i]; - $data[$i]->yahoo = $users->yahoo[$i]; + $data[$i]->dingtalk = $users->dingtalk[$i]; $data[$i]->gtalk = $users->gtalk[$i]; - $data[$i]->wangwang = $users->wangwang[$i]; + $data[$i]->weixin = $users->weixin[$i]; $data[$i]->mobile = $users->mobile[$i]; + $data[$i]->slack = $users->slack[$i]; + $data[$i]->whatsapp = $users->whatsapp[$i]; $data[$i]->phone = $users->phone[$i]; $data[$i]->address = $users->address[$i]; $data[$i]->zipcode = $users->zipcode[$i]; @@ -387,10 +389,16 @@ class userModel extends model dao::$errors['verifyPassword'][] = $this->lang->user->error->verifyPassword; return false; } + $requiredFields = array(); + foreach(explode(',', $this->config->user->edit->requiredFields) as $field) + { + if(!isset($this->lang->user->contactFieldList[$field]) or strpos($this->config->user->contactField, $field) !== false) $requiredFields[$field] = $field; + } + $requiredFields = join(',', $requiredFields); $this->dao->update(TABLE_USER)->data($user) ->autoCheck() - ->batchCheck($this->config->user->edit->requiredFields, 'notempty') + ->batchCheck($requiredFields, 'notempty') ->check('account', 'unique', "id != '$userID'") ->check('account', 'account') ->checkIF($this->post->email != '', 'email', 'email') @@ -474,10 +482,12 @@ class userModel extends model $users[$id]['join'] = $data->join[$id]; $users[$id]['skype'] = $data->skype[$id]; $users[$id]['qq'] = $data->qq[$id]; - $users[$id]['yahoo'] = $data->yahoo[$id]; + $users[$id]['dingtalk'] = $data->dingtalk[$id]; $users[$id]['gtalk'] = $data->gtalk[$id]; - $users[$id]['wangwang'] = $data->wangwang[$id]; + $users[$id]['weixin'] = $data->weixin[$id]; $users[$id]['mobile'] = $data->mobile[$id]; + $users[$id]['slack'] = $data->slack[$id]; + $users[$id]['whatsapp'] = $data->whatsapp[$id]; $users[$id]['phone'] = $data->phone[$id]; $users[$id]['address'] = $data->address[$id]; $users[$id]['zipcode'] = $data->zipcode[$id]; diff --git a/module/user/view/batchcreate.html.php b/module/user/view/batchcreate.html.php index 33dd92e7fc..878da7e928 100644 --- a/module/user/view/batchcreate.html.php +++ b/module/user/view/batchcreate.html.php @@ -47,10 +47,12 @@ - + - + + + @@ -82,10 +84,12 @@ - + - + + + diff --git a/module/user/view/batchedit.html.php b/module/user/view/batchedit.html.php index b1298b43d0..018b7d31e4 100644 --- a/module/user/view/batchedit.html.php +++ b/module/user/view/batchedit.html.php @@ -43,10 +43,12 @@ - + - + + + @@ -73,10 +75,12 @@ - + - + + + diff --git a/module/user/view/edit.html.php b/module/user/view/edit.html.php index d898d57dcc..23f5bb8b7d 100644 --- a/module/user/view/edit.html.php +++ b/module/user/view/edit.html.php @@ -76,31 +76,17 @@
          user->last;?> last;?>
          user->skype;?>skype) echo html::a("callto://$user->skype", $user->skype);?>
          user->qq;?>qq) echo html::a("tencent://message/?uin=$user->qq", $user->qq);?>
          user->yahoo;?>yahoo;?>
          user->gtalk;?>gtalk;?>
          user->wangwang;?>wangwang;?>
          user->mobile;?>mobile;?>
          user->phone;?>phone;?>user->$field;?> + $field) + { + echo html::a("callto://$user->skype", $user->skype); + } + elseif($field == 'qq' and $user->$field) + { + echo html::a("tencent://message/?uin=$user->qq", $user->qq); + } + else + { + echo $user->$field; + } + ?> +
          user->address;?> address;?>'> user->join;?> '> user->skype;?> '> user->qq;?>'> user->yahoo;?>'>user->dingtalk;?> '> user->gtalk;?>'>user->wangwang;?>'> user->weixin;?> '> user->mobile;?>'> user->slack;?>'>user->whatsapp;?> '> user->phone;?> '> user->address;?> '> user->zipcode;?>'> '> '> '> '> '> '>'> '> '> '> '> '> '> '> user->join;?> '> user->skype;?> '> user->qq;?>'> user->yahoo;?>'> user->dingtalk;?> '> user->gtalk;?>'> user->wangwang;?>'> user->weixin;?> '> user->mobile;?>'> user->slack;?>'> user->whatsapp;?> '> user->phone;?> '> user->address;?> '> user->zipcode;?>'> id]", $user->join, "class='form-control form-date'");?> '> id]", $user->skype, "class='form-control'");?> '> id]", $user->qq, "class='form-control'");?>'> id]", $user->yahoo, "class='form-control'");?>'>id]", $user->dingtalk, "class='form-control'");?> '> id]", $user->gtalk, "class='form-control'");?>'>id]", $user->wangwang, "class='form-control'");?>'> id]", $user->weixin, "class='form-control'");?> '> id]", $user->mobile, "class='form-control'");?>'> id]", $user->slack, "class='form-control'");?>'>id]", $user->whatsapp, "class='form-control'");?> '> id]", $user->phone, "class='form-control'");?> '> id]", $user->address, "class='form-control'");?> '> id]", $user->zipcode, "class='form-control'");?>
          + + user->contactField) as $field):?> + ';?> + + + + ';?> + - - - - - - - - - - - - - - - - - - - - - - diff --git a/module/user/view/profile.html.php b/module/user/view/profile.html.php index c02bed9610..c5bba5ba88 100644 --- a/module/user/view/profile.html.php +++ b/module/user/view/profile.html.php @@ -69,12 +69,6 @@ - @@ -91,34 +85,27 @@ + user->contactField) as $field):?> - - - - - - - - - - - - - - - - - - - - - - - - - - + + + From 7d1a2d4d7faee34fcab180c687c401a779636e0a Mon Sep 17 00:00:00 2001 From: wangyidong Date: Mon, 25 Feb 2019 09:01:30 +0800 Subject: [PATCH 255/442] * remove useless code. --- module/custom/control.php | 10 ---------- module/custom/lang/en.php | 6 ------ module/custom/lang/zh-cn.php | 5 ----- module/custom/view/set.html.php | 15 --------------- 4 files changed, 36 deletions(-) diff --git a/module/custom/control.php b/module/custom/control.php index 962634a8f4..5440ea9797 100644 --- a/module/custom/control.php +++ b/module/custom/control.php @@ -79,11 +79,6 @@ class custom extends control $this->app->loadConfig('user'); $this->view->showDeleted = isset($this->config->user->showDeleted) ? $this->config->user->showDeleted : '0'; } - if($module == 'user' and $field == 'showField') - { - $this->app->loadConfig('user'); - $this->view->showFields = isset($this->config->user->showFields) ? $this->config->user->showFields : ''; - } if(strtolower($this->server->request_method) == "post") { @@ -122,11 +117,6 @@ class custom extends control $data = fixer::input('post')->get(); $this->loadModel('setting')->setItem('system.user.showDeleted', $data->showDeleted); } - elseif($module == 'user' and $field == 'showField') - { - $data = fixer::input('post')->join('showFields', ',')->get(); - $this->loadModel('setting')->setItem('system.user.showFields', $data->showFields); - } else { $lang = $_POST['lang']; diff --git a/module/custom/lang/en.php b/module/custom/lang/en.php index fad34b2c31..47d1f09956 100644 --- a/module/custom/lang/en.php +++ b/module/custom/lang/en.php @@ -75,7 +75,6 @@ $lang->custom->user = new stdClass(); $lang->custom->user->fields['roleList'] = 'Role'; $lang->custom->user->fields['statusList'] = 'Status'; $lang->custom->user->fields['deleted'] = 'Deleted User'; -$lang->custom->user->fields['showField'] = 'Show Field'; $lang->custom->block->fields['closed'] = 'Closed Block'; @@ -111,11 +110,6 @@ $lang->custom->reviewList[0] = 'Off'; $lang->custom->deletedList[1] = 'Show'; $lang->custom->deletedList[0] = 'Hide'; -$lang->custom->userFieldList['wechat'] = 'Wechat'; -$lang->custom->userFieldList['dingding'] = 'Dingding'; -$lang->custom->userFieldList['slact'] = 'Slact'; -$lang->custom->userFieldList['whatsapp'] = 'WhatsApp'; - $lang->custom->workingHours = 'hours/day'; $lang->custom->weekend = 'Weekend'; $lang->custom->weekendList[2] = '2-Day Off'; diff --git a/module/custom/lang/zh-cn.php b/module/custom/lang/zh-cn.php index a034e87d7c..cdafde4fe0 100644 --- a/module/custom/lang/zh-cn.php +++ b/module/custom/lang/zh-cn.php @@ -111,11 +111,6 @@ $lang->custom->reviewList[0] = '关闭'; $lang->custom->deletedList[1] = '列出'; $lang->custom->deletedList[0] = '不列出'; -$lang->custom->userFieldList['wechat'] = '微信'; -$lang->custom->userFieldList['dingding'] = '钉钉'; -$lang->custom->userFieldList['slact'] = 'Slact'; -$lang->custom->userFieldList['whatsapp'] = 'WhatsApp'; - $lang->custom->workingHours = '每天可用工时'; $lang->custom->weekend = '休息日'; $lang->custom->weekendList[2] = '双休'; diff --git a/module/custom/view/set.html.php b/module/custom/view/set.html.php index b1976d3b0f..6ef62a37f3 100644 --- a/module/custom/view/set.html.php +++ b/module/custom/view/set.html.php @@ -139,21 +139,6 @@ EOT;
          user->contactInfo;?>
          user->$field;?>$field, "class='form-control'");?>
          user->skype;?>skype, "class='form-control'");?>user->qq;?>qq, "class='form-control'");?>
          user->yahoo;?>yahoo, "class='form-control'");?>user->gtalk;?>gtalk, "class='form-control'");?>
          user->wangwang;?>wangwang, "class='form-control'");?>user->mobile;?>mobile, "class='form-control'");?>
          user->phone;?>phone, "class='form-control'");?> user->address;?> address, "class='form-control'");?>
          user->zipcode;?> zipcode, "class='form-control'");?>
          user->commiter;?> commiter;?>
          user->email;?> email;?>user->last;?> last;?>
          user->skype;?>skype) echo html::a("callto://$user->skype", $user->skype);?>
          user->qq;?>qq) echo html::a("tencent://message/?uin=$user->qq", $user->qq);?>
          user->yahoo;?>yahoo;?>
          user->gtalk;?>gtalk;?>
          user->wangwang;?>wangwang;?>
          user->mobile;?>mobile;?>
          user->phone;?>phone;?>user->$field;?> + $field) + { + echo html::a("callto://$user->skype", $user->skype); + } + elseif($field == 'qq' and $user->$field) + { + echo html::a("tencent://message/?uin=$user->qq", $user->qq); + } + else + { + echo $user->$field; + } + ?> +
          user->address;?> address;?>
          - - - - - - - - - - - - - - -
          custom->user->fields['showField'];?>custom->userFieldList, $showFields, "class='form-control chosen' multiple");?>
          custom->notice->userFieldNotice;?>
          From a1ed14507fd57553a99729768b91633cc2e96f35 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Mon, 25 Feb 2019 09:13:49 +0800 Subject: [PATCH 256/442] * finish task #5302. --- module/project/js/tree.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/module/project/js/tree.js b/module/project/js/tree.js index 83fda17dc8..461871c658 100644 --- a/module/project/js/tree.js +++ b/module/project/js/tree.js @@ -12,29 +12,31 @@ $(function() var showTreeLevel = function(level) { $('.btn-tree-view').removeClass('btn-active-text'); + $('#taskTree li.item-task').removeClass('hidden'); - if (level === 'root') + if(level === 'root') { $('[data-type=root]').addClass('btn-active-text'); taskTree.collapse(); } - else if (level === 'all') + else if(level === 'all') { $('[data-type=all]').addClass('btn-active-text'); taskTree.collapse(); taskTree.expand($taskTree.find('li.has-list'), true); } - else if (level === 'task') + else if(level === 'task') { $('[data-type=task]').addClass('btn-active-text'); taskTree.collapse(); taskTree.show($taskTree.find('li.item-task').parent().parent(), true); } - else if (level === 'story') + else if(level === 'story') { $('[data-type=story]').addClass('btn-active-text'); taskTree.collapse(); taskTree.show($taskTree.find('li.item-story').parent().parent(), true); + $('#taskTree li.item-task').addClass('hidden'); } $('#main').toggleClass('tree-show-root', level === 'root'); }; From 62386800f20ff61216ad032a0b72d030a1181e70 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Mon, 25 Feb 2019 10:46:10 +0800 Subject: [PATCH 257/442] * finish task #5308. --- module/task/js/batchcreate.js | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/module/task/js/batchcreate.js b/module/task/js/batchcreate.js index 4111017729..f27af226eb 100755 --- a/module/task/js/batchcreate.js +++ b/module/task/js/batchcreate.js @@ -48,8 +48,10 @@ function setStories(moduleID, projectID, num) } }) } + var chosenWidth = $("#story" + num + "_chosen").css('max-width'); $("#story" + num + "_chosen").remove(); $("#story" + num).chosen(); + $("#story" + num + "_chosen").width(chosenWidth).css('max-width', chosenWidth); }); } @@ -156,20 +158,24 @@ function markStoryTask() return storiesHasTask; }; - $('#batchCreateForm').on('chosen:showing_dropdown', 'select[name^="story"]', function() + $('#batchCreateForm').on('chosen:showing_dropdown', 'select[name^="story"],.chosen-with-drop', function() { var storiesHasTask = getStoriesHasTask(); - $(this).next('.chosen-container').find('.chosen-results>li').each(function() + var $container = $(this).closest('td').find('.chosen-container'); + setTimeout(function() { - var $li = $(this); - $li.toggleClass('has-new-task', !!storiesHasTask[$li.data('data')]); - }); + $container.find('.chosen-results>li').each(function() + { + var $li = $(this); + $li.toggleClass('has-new-task', !!storiesHasTask[$li.data('data')]); + }); + }, 100); }); } -$(document).on('click', '.chosen-with-drop', function() +$(document).on('chosen:showing_dropdown', 'select[name^="story"],.chosen-with-drop', function() { - var select = $(this).prev('select'); + var select = $(this).closest('td').find('select'); if($(select).val() == 'ditto') { var index = $(select).closest('td').index(); @@ -206,8 +212,14 @@ $(document).on('mousedown', 'select', function() $(function() { /* Adjust width for ie chosen width. */ - $('#module0_chosen').width($('#module1_chosen').width()); - $('#story0_chosen').width($('#story1_chosen').width()); + var chosenWidth = $('#module1_chosen').width(); + $('.chosen-container[id^=module]').width(chosenWidth); + $('.chosen-container[id^=module]').css('max-width', chosenWidth); + + var chosenWidth = $('#story1_chosen').width(); + $('.chosen-container[id^=story]').width(chosenWidth); + $('.chosen-container[id^=story]').css('max-width', chosenWidth); + if($.cookie('zeroTask') == 'true') toggleZeroTaskStory(); markStoryTask(); From 5b23f6aba9e4234553fad0257628aa428d299faf Mon Sep 17 00:00:00 2001 From: wangyidong Date: Mon, 25 Feb 2019 10:51:49 +0800 Subject: [PATCH 258/442] * finish task #5275. --- module/doc/view/sort.html.php | 1 + 1 file changed, 1 insertion(+) diff --git a/module/doc/view/sort.html.php b/module/doc/view/sort.html.php index 921e284452..4d901f3a17 100644 --- a/module/doc/view/sort.html.php +++ b/module/doc/view/sort.html.php @@ -1,5 +1,6 @@
          From 178527100ce800c4a4e17e1a7a55d1136b4d2fcf Mon Sep 17 00:00:00 2001 From: wangyidong Date: Mon, 25 Feb 2019 11:26:51 +0800 Subject: [PATCH 259/442] * code for task #5271. --- module/my/control.php | 1 + module/project/model.php | 1 + 2 files changed, 2 insertions(+) diff --git a/module/my/control.php b/module/my/control.php index d04674d664..e8f4010aef 100644 --- a/module/my/control.php +++ b/module/my/control.php @@ -512,6 +512,7 @@ class my extends control { if($this->app->user->account == 'guest') die(js::alert('guest') . js::locate('back')); + $this->app->loadLang('user'); $user = $this->user->getById($this->app->user->account); $this->view->title = $this->lang->my->common . $this->lang->colon . $this->lang->my->profile; diff --git a/module/project/model.php b/module/project/model.php index 824cc4b198..614019023f 100644 --- a/module/project/model.php +++ b/module/project/model.php @@ -329,6 +329,7 @@ class projectModel extends model /* Add the creator to team. */ if($copyProjectID == '' or !$creatorExists) { + $this->app->loadLang('user'); $member = new stdclass(); $member->root = $projectID; $member->account = $this->app->user->account; From b392cde94802251b94b65799ecfc5e3aba0820a3 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Mon, 25 Feb 2019 11:46:34 +0800 Subject: [PATCH 260/442] * code for task #5302. --- module/project/js/tree.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/module/project/js/tree.js b/module/project/js/tree.js index 461871c658..13cf0d6d80 100644 --- a/module/project/js/tree.js +++ b/module/project/js/tree.js @@ -13,6 +13,7 @@ $(function() { $('.btn-tree-view').removeClass('btn-active-text'); $('#taskTree li.item-task').removeClass('hidden'); + $('#taskTree li.item-story').removeClass('hidden'); if(level === 'root') { @@ -30,6 +31,12 @@ $(function() $('[data-type=task]').addClass('btn-active-text'); taskTree.collapse(); taskTree.show($taskTree.find('li.item-task').parent().parent(), true); + var $itemStory = $('#taskTree li.item-story'); + $itemStory.each(function() + { + var tasks = $(this).find('ul').length; + if(tasks == 0) $itemStory.addClass('hidden'); + }); } else if(level === 'story') { From 5ed0ed92fdf9bd9aef5bfa0c0f044219d236365d Mon Sep 17 00:00:00 2001 From: wangyidong Date: Mon, 25 Feb 2019 13:59:27 +0800 Subject: [PATCH 261/442] * code for task #5302. --- module/project/js/tree.js | 34 +++++++++++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/module/project/js/tree.js b/module/project/js/tree.js index 13cf0d6d80..f0931d1c61 100644 --- a/module/project/js/tree.js +++ b/module/project/js/tree.js @@ -12,8 +12,10 @@ $(function() var showTreeLevel = function(level) { $('.btn-tree-view').removeClass('btn-active-text'); - $('#taskTree li.item-task').removeClass('hidden'); + $('#taskTree li.item-product').removeClass('hidden'); + $('#taskTree li.item-module').removeClass('hidden'); $('#taskTree li.item-story').removeClass('hidden'); + $('#taskTree li.item-task').removeClass('hidden'); if(level === 'root') { @@ -31,11 +33,24 @@ $(function() $('[data-type=task]').addClass('btn-active-text'); taskTree.collapse(); taskTree.show($taskTree.find('li.item-task').parent().parent(), true); + var $itemStory = $('#taskTree li.item-story'); $itemStory.each(function() { - var tasks = $(this).find('ul').length; - if(tasks == 0) $itemStory.addClass('hidden'); + var items = $(this).find('ul li:not(.hidden)').length; + if(items == 0) $(this).addClass('hidden'); + }); + var $itemModule = $('#taskTree li.item-module'); + $itemModule.each(function() + { + var items = $(this).find('ul li:not(.hidden)').length; + if(items == 0) $(this).addClass('hidden'); + }); + var $itemProduct = $('#taskTree li.item-product'); + $itemProduct.each(function() + { + var items = $(this).find('ul li:not(.hidden)').length; + if(items == 0) $(this).addClass('hidden'); }); } else if(level === 'story') @@ -43,7 +58,20 @@ $(function() $('[data-type=story]').addClass('btn-active-text'); taskTree.collapse(); taskTree.show($taskTree.find('li.item-story').parent().parent(), true); + $('#taskTree li.item-task').addClass('hidden'); + var $itemModule = $('#taskTree li.item-module'); + $itemModule.each(function() + { + var items = $(this).find('ul li:not(.hidden)').length; + if(items == 0) $(this).addClass('hidden'); + }); + var $itemProduct = $('#taskTree li.item-product'); + $itemProduct.each(function() + { + var items = $(this).find('ul li:not(.hidden)').length; + if(items == 0) $(this).addClass('hidden'); + }); } $('#main').toggleClass('tree-show-root', level === 'root'); }; From 373aedfc0b91f7fccfafd460b2b9e303a6334919 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Mon, 25 Feb 2019 14:09:57 +0800 Subject: [PATCH 262/442] * finish task #5297. --- module/block/model.php | 2 +- module/product/control.php | 7 +------ module/tree/model.php | 10 ++++++++-- www/theme/default/style.css | 8 ++++++++ 4 files changed, 18 insertions(+), 9 deletions(-) diff --git a/module/block/model.php b/module/block/model.php index c01fc354a2..6866c8b298 100644 --- a/module/block/model.php +++ b/module/block/model.php @@ -662,7 +662,7 @@ class blockModel extends model $products = $this->loadModel('product')->getList($status); if(empty($products)) return $products; - $lines = $this->loadModel('tree')->getLinePairs(); + $lines = $this->loadModel('tree')->getLinePairs($useShort = true); $productList = array(); foreach($lines as $id => $name) { diff --git a/module/product/control.php b/module/product/control.php index b668c69b28..477099f1f1 100644 --- a/module/product/control.php +++ b/module/product/control.php @@ -588,14 +588,9 @@ class product extends control $this->view->extra = $extra; $products = $this->dao->select('*')->from(TABLE_PRODUCT)->where('id')->in(array_keys($this->products))->orderBy('`order` desc')->fetchAll('id'); - $productPairs = array(); - foreach($products as $product) $productPairs[$product->id] = $product->name; - $productsPinyin = common::convert2Pinyin($productPairs); - - foreach($products as $key => $product) $product->key = $productsPinyin[$product->name]; /* Sort products as lines' order first. */ - $lines = $this->loadModel('tree')->getLinePairs(); + $lines = $this->loadModel('tree')->getLinePairs($useShort = true); $productList = array(); foreach($lines as $id => $name) { diff --git a/module/tree/model.php b/module/tree/model.php index ce3cabb835..04fdc20304 100644 --- a/module/tree/model.php +++ b/module/tree/model.php @@ -173,12 +173,18 @@ class treeModel extends model /** * Get line pairs. * + * @param bool $useShort * @access public * @return array */ - public function getLinePairs() + public function getLinePairs($useShort = false) { - return $this->dao->select('id, name')->from(TABLE_MODULE)->where('type')->eq('line')->andWhere('deleted')->eq(0)->fetchPairs(); + $lines = $this->dao->select('id,name,short')->from(TABLE_MODULE)->where('type')->eq('line')->andWhere('deleted')->eq(0)->fetchAll('id'); + + $linePairs = array(); + foreach($lines as $lineID => $line) $linePairs[$lineID] = ($useShort and !empty($line->short)) ? $line->short : $line->name; + + return $linePairs; } /** diff --git a/www/theme/default/style.css b/www/theme/default/style.css index 39d8931ad3..4cde902cc7 100644 --- a/www/theme/default/style.css +++ b/www/theme/default/style.css @@ -15,3 +15,11 @@ /* Finish task #5068*/ .main-table .table{cursor:pointer;} + +#dropMenu.show-right-col{width:502px;max-width:520px;} +#dropMenu>.search-box{max-width:240px;} +#dropMenu .list-group{width:250px; max-width:260px;} +#dropMenu.show-right-col>.list-group{width:502px;max-width:520px;} +#dropMenu.show-right-col .col-left>.list-group{width:250px;max-width:260px;} +#dropMenu.show-right-col .col-right>.list-group{width:250px;max-width:260px;} +#dropMenu .col-footer{width:230px;} From 0f7f6d4e9acafbc223d7771e70e2ef1fefe6271d Mon Sep 17 00:00:00 2001 From: wangyidong Date: Mon, 25 Feb 2019 14:23:48 +0800 Subject: [PATCH 263/442] * adjust for hidden module item in tree page. --- module/project/js/tree.js | 45 +++++++++++++++++++++++---------------- 1 file changed, 27 insertions(+), 18 deletions(-) diff --git a/module/project/js/tree.js b/module/project/js/tree.js index f0931d1c61..a00ee8984e 100644 --- a/module/project/js/tree.js +++ b/module/project/js/tree.js @@ -8,6 +8,23 @@ $(function() var taskTree = $taskTree.data('zui.tree'); + var hiddenModuleItem = function($moduleItems) + { + $moduleItems.each(function() + { + if($moduleItems.find('ul > li.item-module:not(.hidden)').length) + { + $childrenItems = $moduleItems.find('ul > li.item-module:not(.hidden)'); + hiddenModuleItem($childrenItems); + } + else + { + var items = $(this).find('ul li:not(.hidden)').length; + if(items == 0) $(this).addClass('hidden'); + } + }); + } + // 根据列表展开树形列表 var showTreeLevel = function(level) { @@ -34,20 +51,16 @@ $(function() taskTree.collapse(); taskTree.show($taskTree.find('li.item-task').parent().parent(), true); - var $itemStory = $('#taskTree li.item-story'); - $itemStory.each(function() + var $storyItems = $('#taskTree li.item-story'); + $storyItems.each(function() { var items = $(this).find('ul li:not(.hidden)').length; if(items == 0) $(this).addClass('hidden'); }); - var $itemModule = $('#taskTree li.item-module'); - $itemModule.each(function() - { - var items = $(this).find('ul li:not(.hidden)').length; - if(items == 0) $(this).addClass('hidden'); - }); - var $itemProduct = $('#taskTree li.item-product'); - $itemProduct.each(function() + var $moduleItems = $('#taskTree li.item-module'); + hiddenModuleItem($moduleItems); + var $productItems = $('#taskTree li.item-product'); + $productItems.each(function() { var items = $(this).find('ul li:not(.hidden)').length; if(items == 0) $(this).addClass('hidden'); @@ -60,14 +73,10 @@ $(function() taskTree.show($taskTree.find('li.item-story').parent().parent(), true); $('#taskTree li.item-task').addClass('hidden'); - var $itemModule = $('#taskTree li.item-module'); - $itemModule.each(function() - { - var items = $(this).find('ul li:not(.hidden)').length; - if(items == 0) $(this).addClass('hidden'); - }); - var $itemProduct = $('#taskTree li.item-product'); - $itemProduct.each(function() + var $moduleItems = $('#taskTree li.item-module'); + hiddenModuleItem($moduleItems); + var $productItems = $('#taskTree li.item-product'); + $productItems.each(function() { var items = $(this).find('ul li:not(.hidden)').length; if(items == 0) $(this).addClass('hidden'); From 0226ae1a9e3385c2f821bb44414d4a2aa5f79350 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Mon, 25 Feb 2019 14:52:40 +0800 Subject: [PATCH 264/442] * code for task #5302. --- module/project/js/tree.js | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/module/project/js/tree.js b/module/project/js/tree.js index a00ee8984e..01ee041733 100644 --- a/module/project/js/tree.js +++ b/module/project/js/tree.js @@ -12,16 +12,11 @@ $(function() { $moduleItems.each(function() { - if($moduleItems.find('ul > li.item-module:not(.hidden)').length) - { - $childrenItems = $moduleItems.find('ul > li.item-module:not(.hidden)'); - hiddenModuleItem($childrenItems); - } - else - { - var items = $(this).find('ul li:not(.hidden)').length; - if(items == 0) $(this).addClass('hidden'); - } + var $childrenItems = $moduleItems.find('ul > li.item-module:not(.hidden)'); + hiddenModuleItem($childrenItems); + + var items = $(this).find('ul li:not(.hidden)').length; + if(items == 0) $(this).addClass('hidden'); }); } From 6d62d929c81fdce1212905c39f97d2f174a1327b Mon Sep 17 00:00:00 2001 From: reneeteng Date: Mon, 25 Feb 2019 16:11:00 +0800 Subject: [PATCH 265/442] *Lang change. --- module/product/lang/en.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/module/product/lang/en.php b/module/product/lang/en.php index c3961231c2..535c746bc2 100644 --- a/module/product/lang/en.php +++ b/module/product/lang/en.php @@ -21,7 +21,7 @@ $lang->product->delete = "Delete {$lang->productCommon}"; $lang->product->deleted = 'Deleted'; $lang->product->close = 'Close'; $lang->product->select = "Select {$lang->productCommon}"; -$lang->product->mine = 'My responsibility:'; +$lang->product->mine = 'Mine:'; $lang->product->other = 'Other:'; $lang->product->closed = 'Closed'; $lang->product->updateOrder = 'Order'; @@ -81,10 +81,10 @@ $lang->product->iterationInfo = '%s Iterations'; $lang->product->iterationView = 'Details'; $lang->product->searchStory = 'Search'; -$lang->product->assignedToMe = 'Assigned To Me'; -$lang->product->openedByMe = 'Created By Me'; -$lang->product->reviewedByMe = 'Reviewed By Me'; -$lang->product->closedByMe = 'Closed By Me'; +$lang->product->assignedToMe = 'AssignedToMe'; +$lang->product->openedByMe = 'CreatedByMe'; +$lang->product->reviewedByMe = 'ReviewedByMe'; +$lang->product->closedByMe = 'ClosedByMe'; $lang->product->draftStory = 'Draft'; $lang->product->activeStory = 'Activated'; $lang->product->changedStory = 'Changed'; From 750550d9ed9ce94ef0e7e778ef1125b14f01f506 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Mon, 25 Feb 2019 16:42:02 +0800 Subject: [PATCH 266/442] * code task #5302. --- module/project/js/tree.js | 36 ++++++++++++++++++++++++++---------- 1 file changed, 26 insertions(+), 10 deletions(-) diff --git a/module/project/js/tree.js b/module/project/js/tree.js index 01ee041733..624379d9c9 100644 --- a/module/project/js/tree.js +++ b/module/project/js/tree.js @@ -8,16 +8,22 @@ $(function() var taskTree = $taskTree.data('zui.tree'); - var hiddenModuleItem = function($moduleItems) + var sortItems = function($items) { - $moduleItems.each(function() + var items = $items.toArray(); + for(i = 0; i < items.length; i++) { - var $childrenItems = $moduleItems.find('ul > li.item-module:not(.hidden)'); - hiddenModuleItem($childrenItems); - - var items = $(this).find('ul li:not(.hidden)').length; - if(items == 0) $(this).addClass('hidden'); - }); + for(j = 0; j < items.length - 1 - i; j++) + { + if($(items[j + 1]).data('id').toString() > $(items[j]).data('id').toString()) + { + var tmp = items[j + 1]; + items[j + 1] = items[j]; + items[j] = tmp; + } + } + } + return items; } // 根据列表展开树形列表 @@ -53,7 +59,12 @@ $(function() if(items == 0) $(this).addClass('hidden'); }); var $moduleItems = $('#taskTree li.item-module'); - hiddenModuleItem($moduleItems); + moduleItems = sortItems($moduleItems); + for(i = 0; i < moduleItems.length; i++) + { + var items = $(moduleItems[i]).find('ul li:not(.hidden)').length; + if(items == 0) $(moduleItems[i]).addClass('hidden'); + } var $productItems = $('#taskTree li.item-product'); $productItems.each(function() { @@ -69,7 +80,12 @@ $(function() $('#taskTree li.item-task').addClass('hidden'); var $moduleItems = $('#taskTree li.item-module'); - hiddenModuleItem($moduleItems); + moduleItems = sortItems($moduleItems); + for(i = 0; i < moduleItems.length; i++) + { + var items = $(moduleItems[i]).find('ul li:not(.hidden)').length; + if(items == 0) $(moduleItems[i]).addClass('hidden'); + } var $productItems = $('#taskTree li.item-product'); $productItems.each(function() { From b9b7fbdceb93e4e887fc7ef2ccd24ae15bbb5dcd Mon Sep 17 00:00:00 2001 From: wangyidong Date: Mon, 25 Feb 2019 17:35:38 +0800 Subject: [PATCH 267/442] * adjust for doc dropdown-menu max-height. --- module/doc/css/common.css | 2 ++ 1 file changed, 2 insertions(+) diff --git a/module/doc/css/common.css b/module/doc/css/common.css index 340777fbb6..f2edf96574 100644 --- a/module/doc/css/common.css +++ b/module/doc/css/common.css @@ -78,3 +78,5 @@ td.c-name a:visited{color: #082999} #queryBox #groupAndOr {min-width: 65px;} #noticeAcl{margin-left:10px;} + +#pageNav .dropdown-menu{max-height:250px; overflow-y:auto;} From c05c534b1284500053af15e73ba8d311fb37c18e Mon Sep 17 00:00:00 2001 From: reneeteng Date: Tue, 26 Feb 2019 10:29:53 +0800 Subject: [PATCH 268/442] * Lang change. --- module/block/lang/en.php | 16 ++++++++-------- module/bug/lang/en.php | 8 ++++---- module/build/lang/en.php | 6 +++--- module/common/lang/en.php | 10 +++++----- module/task/lang/en.php | 8 ++++---- module/testtask/lang/en.php | 2 +- 6 files changed, 25 insertions(+), 25 deletions(-) diff --git a/module/block/lang/en.php b/module/block/lang/en.php index 504fde23e8..1d8a12de3c 100644 --- a/module/block/lang/en.php +++ b/module/block/lang/en.php @@ -34,7 +34,7 @@ $lang->block->dynamic = 'Dynamic'; $lang->block->assignToMe = 'Assign To Me'; $lang->block->lblFlowchart = 'Workflow'; $lang->block->welcome = 'Welcome'; -$lang->block->lblTesttask = 'Show test task'; +$lang->block->lblTesttask = 'Show Test Details'; $lang->block->leftToday = 'Works for Today'; $lang->block->myTask = 'My Task'; @@ -53,9 +53,9 @@ $lang->block->params->value = 'Value'; $lang->block->createBlock = 'Add Block'; $lang->block->editBlock = 'Edit'; $lang->block->ordersSaved = 'Order is saved.'; -$lang->block->confirmRemoveBlock = 'Do you want to remove Block?'; -$lang->block->noticeNewBlock = 'ZenTao 10.+ has a new layout for each view. Do you want to start the new view?'; -$lang->block->confirmReset = 'Whether to restore the default'; +$lang->block->confirmRemoveBlock = 'Do you want to remove the Block?'; +$lang->block->noticeNewBlock = 'ZenTao 10.+ has a new layout. Do you want to start the new layout?'; +$lang->block->confirmReset = 'Restore'; $lang->block->closeForever = 'Permanent Close'; $lang->block->confirmClose = 'Do you want to permanently close this block? Once done, it is not available to anyone. It can be activiated at Admin->Custom.'; $lang->block->remove = 'Remove'; @@ -108,7 +108,7 @@ $lang->block->default['project']['3']['params']['num'] = 15; $lang->block->default['project']['3']['params']['orderBy'] = 'id_desc'; $lang->block->default['project']['3']['params']['type'] = 'undone'; -$lang->block->default['project']['4']['title'] = 'My Tasks'; +$lang->block->default['project']['4']['title'] = 'My Task'; $lang->block->default['project']['4']['block'] = 'task'; $lang->block->default['project']['4']['grid'] = 4; @@ -143,7 +143,7 @@ $lang->block->default['qa']['3']['params']['num'] = 15; $lang->block->default['qa']['3']['params']['orderBy'] = 'id_desc'; $lang->block->default['qa']['3']['params']['type'] = 'assigntome'; -$lang->block->default['qa']['4']['title'] = 'Pending Builds'; +$lang->block->default['qa']['4']['title'] = 'Wait Build'; $lang->block->default['qa']['4']['block'] = 'testtask'; $lang->block->default['qa']['4']['grid'] = 4; @@ -243,7 +243,7 @@ $lang->block->availableBlocks->project = $lang->projectCommon . 'List'; $lang->block->availableBlocks->plan = 'Plan'; $lang->block->availableBlocks->release = 'Release'; $lang->block->availableBlocks->build = 'Build'; -$lang->block->availableBlocks->testtask = 'Test Build'; +$lang->block->availableBlocks->testtask = 'Test'; $lang->block->moduleList['product'] = $lang->productCommon; $lang->block->moduleList['project'] = $lang->projectCommon; @@ -271,7 +271,7 @@ $lang->block->modules['qa']->availableBlocks->statistic = 'Test Report'; //$lang->block->modules['qa']->availableBlocks->overview = 'Testcase Overview'; $lang->block->modules['qa']->availableBlocks->bug = 'Bug'; $lang->block->modules['qa']->availableBlocks->case = 'Case'; -$lang->block->modules['qa']->availableBlocks->testtask = 'Test Build'; +$lang->block->modules['qa']->availableBlocks->testtask = 'Build'; $lang->block->modules['todo'] = new stdclass(); $lang->block->modules['todo']->availableBlocks = new stdclass(); $lang->block->modules['todo']->availableBlocks->list = 'Todo'; diff --git a/module/bug/lang/en.php b/module/bug/lang/en.php index c62b2173c7..f6fabf5623 100644 --- a/module/bug/lang/en.php +++ b/module/bug/lang/en.php @@ -37,7 +37,7 @@ $lang->bug->confirmed = 'Confirmed'; $lang->bug->toTask = 'Convert to Task'; $lang->bug->toStory = 'Convert to Story'; $lang->bug->mailto = 'Mail To'; -$lang->bug->openedBy = 'Creator'; +$lang->bug->openedBy = 'Created by'; $lang->bug->openedDate = 'Created'; $lang->bug->openedDateAB = 'Created'; $lang->bug->openedBuild = 'Open Build'; @@ -120,9 +120,9 @@ $lang->bug->byQuery = 'Search'; $lang->bug->needConfirm = 'Story Changed'; $lang->bug->allProduct = 'All' . $lang->productCommon; $lang->bug->my = 'My'; -$lang->bug->yesterdayResolved = 'Resolved Yesterday '; -$lang->bug->yesterdayConfirmed = 'Confirmed Yesterday '; -$lang->bug->yesterdayClosed = 'Closed Yesterday '; +$lang->bug->yesterdayResolved = 'Bug Resolved Yesterday '; +$lang->bug->yesterdayConfirmed = 'Bug Confirmed Yesterday '; +$lang->bug->yesterdayClosed = 'Bug Closed Yesterday '; $lang->bug->assignToMeAB = 'Assigned To Me'; $lang->bug->openedByMeAB = 'Created By Me'; diff --git a/module/build/lang/en.php b/module/build/lang/en.php index 5e58d6dbd8..52bee5f407 100644 --- a/module/build/lang/en.php +++ b/module/build/lang/en.php @@ -18,8 +18,8 @@ $lang->build->delete = "Delete Build"; $lang->build->deleted = "Deleted"; $lang->build->view = "Build Details"; $lang->build->batchUnlink = 'Batch Unlink'; -$lang->build->batchUnlinkStory = 'Batch Story Unlink'; -$lang->build->batchUnlinkBug = 'Batch Bug Unlink'; +$lang->build->batchUnlinkStory = 'Batch Unlink Story'; +$lang->build->batchUnlinkBug = 'Batch Unlink Bug'; $lang->build->confirmDelete = "Do you want to delete this Build?"; $lang->build->confirmUnlinkStory = "Do you want to unlink this Story?"; @@ -37,7 +37,7 @@ $lang->build->builder = 'Builder'; $lang->build->scmPath = 'SCM Path'; $lang->build->filePath = 'File Path'; $lang->build->desc = 'Description'; -$lang->build->files = 'Files'; +$lang->build->files = 'File'; $lang->build->last = 'Last Build'; $lang->build->packageType = 'Package Type'; $lang->build->unlinkStory = 'Unlink Story'; diff --git a/module/common/lang/en.php b/module/common/lang/en.php index 956560872f..7e2dd0cc64 100644 --- a/module/common/lang/en.php +++ b/module/common/lang/en.php @@ -70,24 +70,24 @@ $lang->collapse = 'Collapse'; $lang->saveSuccess = 'Saved'; $lang->fail = 'Fail'; $lang->addFiles = 'Add'; -$lang->files = 'File '; +$lang->files = 'Files '; $lang->pasteText = 'Paste'; $lang->uploadImages = 'Upload'; $lang->timeout = 'Timeout. Pease check your connection, or try it again!'; -$lang->repairTable = 'Database table might be damaged. Please use phpmyadmin or myisamchk to fix it.'; +$lang->repairTable = 'Database table might be damaged. Execute phpmyadmin or myisamchk to fix it.'; $lang->duplicate = '%s has the same title as a file title existed.'; -$lang->ipLimited = "Sorry, current IP Login has been restricted. PLease contact Admin to grant it."; +$lang->ipLimited = "Sorry, your current IP is restricted. PLease contact your Administer to grant your permissions."; $lang->unfold = '+'; $lang->fold = '-'; $lang->homepage = 'Set Home'; -$lang->noviceTutorial = 'Novice Tutorial'; +$lang->noviceTutorial = 'Rookie Tutorial'; $lang->changeLog = 'Change Log'; $lang->manual = 'Manual'; $lang->manualUrl = 'https://www.zentao.pm/book/zentaomanual/zentao-installation-11.html'; $lang->customMenu = 'Custom Menu'; $lang->customField = 'Custom Field'; $lang->lineNumber = 'Line No.'; -$lang->tutorialConfirm = 'You are using tutorial. Do you want to quit right now?'; +$lang->tutorialConfirm = 'You are using ZenTao tutorial. Do you want to quit right now?'; $lang->youCould = 'You could '; $lang->preShortcutKey = '[Shortcut:←]'; diff --git a/module/task/lang/en.php b/module/task/lang/en.php index 209ea94588..eddfce12dc 100644 --- a/module/task/lang/en.php +++ b/module/task/lang/en.php @@ -81,11 +81,11 @@ $lang->task->assignedDate = 'Assigned'; $lang->task->openedBy = 'Created by'; $lang->task->openedDate = 'Created'; $lang->task->openedDateAB = 'Add'; -$lang->task->finishedBy = 'Finished'; +$lang->task->finishedBy = 'Finished by'; $lang->task->finishedByAB = 'Finished'; $lang->task->finishedDate = 'Finished'; $lang->task->finishedDateAB = 'Finished'; -$lang->task->finishedList = 'Finished list'; +$lang->task->finishedList = 'FinishedBy list'; $lang->task->canceledBy = 'Cancelled by'; $lang->task->canceledDate = 'Cancelled'; $lang->task->closedBy = 'Closed by'; @@ -119,7 +119,7 @@ $lang->task->noStory = 'No Story'; $lang->task->noAssigned = 'Unassigned'; $lang->task->noFinished = 'Unfinished'; $lang->task->noClosed = 'Unclosed'; -$lang->task->yesterdayFinished = 'Finished Yesterday'; +$lang->task->yesterdayFinished = 'Task Finished Yesterday'; $lang->task->allTasks = 'Task'; $lang->task->statusList[''] = ''; @@ -191,7 +191,7 @@ $lang->task->error->assignedTo = 'Multiple task in the current status cann /* Report. */ $lang->task->report = new stdclass(); $lang->task->report->common = 'Report'; -$lang->task->report->select = 'Group Tasks by'; +$lang->task->report->select = 'Group by'; $lang->task->report->create = 'Create'; $lang->task->report->value = 'Task Count'; diff --git a/module/testtask/lang/en.php b/module/testtask/lang/en.php index 3a4097bcdb..0ccea25abe 100644 --- a/module/testtask/lang/en.php +++ b/module/testtask/lang/en.php @@ -110,7 +110,7 @@ $lang->testtask->checkLinked = "Please check if the product that the test $lang->testtask->assignedToMe = 'AssignToMe'; $lang->testtask->allCases = 'All Cases'; -$lang->testtask->lblCases = 'Cases'; +$lang->testtask->lblCases = 'Case'; $lang->testtask->lblUnlinkCase = 'Unlink Case'; $lang->testtask->lblRunCase = 'Run Case'; $lang->testtask->lblResults = 'Result'; From 62513a604575cc5b6d8ad57eb7915893ac0327a8 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Tue, 26 Feb 2019 11:01:38 +0800 Subject: [PATCH 269/442] * adjust for remove gtalk field. --- db/demo.sql | 18 +++++++++--------- db/endemo.sql | 2 +- db/update11.2.sql | 4 ++-- db/zentao.sql | 3 +-- module/company/config.php | 6 ++---- module/custom/config.php | 2 +- module/my/control.php | 4 ++++ module/testcase/css/importfromlib.css | 5 +---- module/testcase/view/importfromlib.html.php | 2 +- module/user/config.php | 6 +++--- module/user/lang/en.php | 1 - module/user/lang/zh-cn.php | 6 ++---- module/user/lang/zh-tw.php | 1 - module/user/model.php | 6 ++---- module/user/view/batchcreate.html.php | 6 ++---- module/user/view/batchedit.html.php | 6 ++---- 16 files changed, 33 insertions(+), 45 deletions(-) diff --git a/db/demo.sql b/db/demo.sql index cd67150a07..228334c699 100644 --- a/db/demo.sql +++ b/db/demo.sql @@ -295,15 +295,15 @@ INSERT INTO `zt_testrun` (`id`, `task`, `case`, `version`, `assignedTo`, `lastRu INSERT INTO `zt_testtask` (`id`, `name`, `product`, `project`, `build`, `owner`, `begin`, `end`, `desc`, `status`, `deleted`) VALUES(1, '企业网站第一期测试任务', 1, 1, 'trunk', 'testManager', '2012-06-05', '2013-06-21', '', 'wait', '0'); -INSERT INTO `zt_user` (`id`, `dept`, `account`, `password`, `role`, `realname`, `nickname`, `commiter`, `avatar`, `birthday`, `gender`, `email`, `skype`, `qq`, `yahoo`, `gtalk`, `wangwang`, `mobile`, `phone`, `address`, `zipcode`, `join`, `visits`, `ip`, `last`, `deleted`) VALUES(2, 5, 'productManager', 'e10adc3949ba59abbe56e057f20f883e', 'po', '产品经理', '', '', '', '0000-00-00', 'm', '', '', '', '', '', '', '', '', '', '', '0000-00-00', 3, '192.168.0.8', 1338866083, '0'); -INSERT INTO `zt_user` (`id`, `dept`, `account`, `password`, `role`, `realname`, `nickname`, `commiter`, `avatar`, `birthday`, `gender`, `email`, `skype`, `qq`, `yahoo`, `gtalk`, `wangwang`, `mobile`, `phone`, `address`, `zipcode`, `join`, `visits`, `ip`, `last`, `deleted`) VALUES(3, 6, 'projectManager', 'e10adc3949ba59abbe56e057f20f883e', 'pm', '项目经理', '', '', '', '0000-00-00', 'm', '', '', '', '', '', '', '', '', '', '', '0000-00-00', 3, '192.168.0.8', 1338865876, '0'); -INSERT INTO `zt_user` (`id`, `dept`, `account`, `password`, `role`, `realname`, `nickname`, `commiter`, `avatar`, `birthday`, `gender`, `email`, `skype`, `qq`, `yahoo`, `gtalk`, `wangwang`, `mobile`, `phone`, `address`, `zipcode`, `join`, `visits`, `ip`, `last`, `deleted`) VALUES(4, 2, 'dev1', 'e10adc3949ba59abbe56e057f20f883e', 'dev', '开发甲', '', '', '', '0000-00-00', 'm', '', '', '', '', '', '', '', '', '', '', '0000-00-00', 1, '192.168.0.8', 1338863860, '1'); -INSERT INTO `zt_user` (`id`, `dept`, `account`, `password`, `role`, `realname`, `nickname`, `commiter`, `avatar`, `birthday`, `gender`, `email`, `skype`, `qq`, `yahoo`, `gtalk`, `wangwang`, `mobile`, `phone`, `address`, `zipcode`, `join`, `visits`, `ip`, `last`, `deleted`) VALUES(5, 2, 'dev2', 'e10adc3949ba59abbe56e057f20f883e', 'dev', '开发乙', '', '', '', '0000-00-00', 'm', '', '', '', '', '', '', '', '', '', '', '0000-00-00', 1, '192.168.0.8', 1338864116, '1'); -INSERT INTO `zt_user` (`id`, `dept`, `account`, `password`, `role`, `realname`, `nickname`, `commiter`, `avatar`, `birthday`, `gender`, `email`, `skype`, `qq`, `yahoo`, `gtalk`, `wangwang`, `mobile`, `phone`, `address`, `zipcode`, `join`, `visits`, `ip`, `last`, `deleted`) VALUES(6, 2, 'dev3', 'e10adc3949ba59abbe56e057f20f883e', 'dev', '开发丙', '', '', '', '0000-00-00', 'm', '', '', '', '', '', '', '', '', '', '', '0000-00-00', 1, '192.168.0.8', 1338864187, '1'); -INSERT INTO `zt_user` (`id`, `dept`, `account`, `password`, `role`, `realname`, `nickname`, `commiter`, `avatar`, `birthday`, `gender`, `email`, `skype`, `qq`, `yahoo`, `gtalk`, `wangwang`, `mobile`, `phone`, `address`, `zipcode`, `join`, `visits`, `ip`, `last`, `deleted`) VALUES(7, 3, 'tester1', 'e10adc3949ba59abbe56e057f20f883e', 'qa', '测试甲', '', '', '', '0000-00-00', 'm', '', '', '', '', '', '', '', '', '', '', '0000-00-00', 3, '192.168.0.8', 1338865739, '1'); -INSERT INTO `zt_user` (`id`, `dept`, `account`, `password`, `role`, `realname`, `nickname`, `commiter`, `avatar`, `birthday`, `gender`, `email`, `skype`, `qq`, `yahoo`, `gtalk`, `wangwang`, `mobile`, `phone`, `address`, `zipcode`, `join`, `visits`, `ip`, `last`, `deleted`) VALUES(8, 3, 'tester2', 'e10adc3949ba59abbe56e057f20f883e', 'qa', '测试乙', '', '', '', '0000-00-00', 'm', '', '', '', '', '', '', '', '', '', '', '0000-00-00', 2, '192.168.0.8', 1338865450, '1'); -INSERT INTO `zt_user` (`id`, `dept`, `account`, `password`, `role`, `realname`, `nickname`, `commiter`, `avatar`, `birthday`, `gender`, `email`, `skype`, `qq`, `yahoo`, `gtalk`, `wangwang`, `mobile`, `phone`, `address`, `zipcode`, `join`, `visits`, `ip`, `last`, `deleted`) VALUES(9, 3, 'tester3', 'e10adc3949ba59abbe56e057f20f883e', 'qa', '测试丙', '', '', '', '0000-00-00', 'm', '', '', '', '', '', '', '', '', '', '', '0000-00-00', 1, '192.168.0.8', 1338865125, '1'); -INSERT INTO `zt_user` (`id`, `dept`, `account`, `password`, `role`, `realname`, `nickname`, `commiter`, `avatar`, `birthday`, `gender`, `email`, `skype`, `qq`, `yahoo`, `gtalk`, `wangwang`, `mobile`, `phone`, `address`, `zipcode`, `join`, `visits`, `ip`, `last`, `deleted`) VALUES(10, 1, 'testManager', 'e10adc3949ba59abbe56e057f20f883e', 'qd', '测试经理', '', '', '', '0000-00-00', 'm', '', '', '', '', '', '', '', '', '', '', '0000-00-00', 6, '192.168.0.8', 1338865842, '1'); +INSERT INTO `zt_user` (`id`, `dept`, `account`, `password`, `role`, `realname`, `nickname`, `commiter`, `avatar`, `birthday`, `gender`, `email`, `skype`, `qq`, `weixin`, `dingding`, `slack`, `mobile`, `phone`, `address`, `zipcode`, `join`, `visits`, `ip`, `last`, `deleted`) VALUES(2, 5, 'productManager', 'e10adc3949ba59abbe56e057f20f883e', 'po', '产品经理', '', '', '', '0000-00-00', 'm', '', '', '', '', '', '', '', '', '', '', '0000-00-00', 3, '192.168.0.8', 1338866083, '0'); +INSERT INTO `zt_user` (`id`, `dept`, `account`, `password`, `role`, `realname`, `nickname`, `commiter`, `avatar`, `birthday`, `gender`, `email`, `skype`, `qq`, `weixin`, `dingding`, `slack`, `mobile`, `phone`, `address`, `zipcode`, `join`, `visits`, `ip`, `last`, `deleted`) VALUES(3, 6, 'projectManager', 'e10adc3949ba59abbe56e057f20f883e', 'pm', '项目经理', '', '', '', '0000-00-00', 'm', '', '', '', '', '', '', '', '', '', '', '0000-00-00', 3, '192.168.0.8', 1338865876, '0'); +INSERT INTO `zt_user` (`id`, `dept`, `account`, `password`, `role`, `realname`, `nickname`, `commiter`, `avatar`, `birthday`, `gender`, `email`, `skype`, `qq`, `weixin`, `dingding`, `slack`, `mobile`, `phone`, `address`, `zipcode`, `join`, `visits`, `ip`, `last`, `deleted`) VALUES(4, 2, 'dev1', 'e10adc3949ba59abbe56e057f20f883e', 'dev', '开发甲', '', '', '', '0000-00-00', 'm', '', '', '', '', '', '', '', '', '', '', '0000-00-00', 1, '192.168.0.8', 1338863860, '1'); +INSERT INTO `zt_user` (`id`, `dept`, `account`, `password`, `role`, `realname`, `nickname`, `commiter`, `avatar`, `birthday`, `gender`, `email`, `skype`, `qq`, `weixin`, `dingding`, `slack`, `mobile`, `phone`, `address`, `zipcode`, `join`, `visits`, `ip`, `last`, `deleted`) VALUES(5, 2, 'dev2', 'e10adc3949ba59abbe56e057f20f883e', 'dev', '开发乙', '', '', '', '0000-00-00', 'm', '', '', '', '', '', '', '', '', '', '', '0000-00-00', 1, '192.168.0.8', 1338864116, '1'); +INSERT INTO `zt_user` (`id`, `dept`, `account`, `password`, `role`, `realname`, `nickname`, `commiter`, `avatar`, `birthday`, `gender`, `email`, `skype`, `qq`, `weixin`, `dingding`, `slack`, `mobile`, `phone`, `address`, `zipcode`, `join`, `visits`, `ip`, `last`, `deleted`) VALUES(6, 2, 'dev3', 'e10adc3949ba59abbe56e057f20f883e', 'dev', '开发丙', '', '', '', '0000-00-00', 'm', '', '', '', '', '', '', '', '', '', '', '0000-00-00', 1, '192.168.0.8', 1338864187, '1'); +INSERT INTO `zt_user` (`id`, `dept`, `account`, `password`, `role`, `realname`, `nickname`, `commiter`, `avatar`, `birthday`, `gender`, `email`, `skype`, `qq`, `weixin`, `dingding`, `slack`, `mobile`, `phone`, `address`, `zipcode`, `join`, `visits`, `ip`, `last`, `deleted`) VALUES(7, 3, 'tester1', 'e10adc3949ba59abbe56e057f20f883e', 'qa', '测试甲', '', '', '', '0000-00-00', 'm', '', '', '', '', '', '', '', '', '', '', '0000-00-00', 3, '192.168.0.8', 1338865739, '1'); +INSERT INTO `zt_user` (`id`, `dept`, `account`, `password`, `role`, `realname`, `nickname`, `commiter`, `avatar`, `birthday`, `gender`, `email`, `skype`, `qq`, `weixin`, `dingding`, `slack`, `mobile`, `phone`, `address`, `zipcode`, `join`, `visits`, `ip`, `last`, `deleted`) VALUES(8, 3, 'tester2', 'e10adc3949ba59abbe56e057f20f883e', 'qa', '测试乙', '', '', '', '0000-00-00', 'm', '', '', '', '', '', '', '', '', '', '', '0000-00-00', 2, '192.168.0.8', 1338865450, '1'); +INSERT INTO `zt_user` (`id`, `dept`, `account`, `password`, `role`, `realname`, `nickname`, `commiter`, `avatar`, `birthday`, `gender`, `email`, `skype`, `qq`, `weixin`, `dingding`, `slack`, `mobile`, `phone`, `address`, `zipcode`, `join`, `visits`, `ip`, `last`, `deleted`) VALUES(9, 3, 'tester3', 'e10adc3949ba59abbe56e057f20f883e', 'qa', '测试丙', '', '', '', '0000-00-00', 'm', '', '', '', '', '', '', '', '', '', '', '0000-00-00', 1, '192.168.0.8', 1338865125, '1'); +INSERT INTO `zt_user` (`id`, `dept`, `account`, `password`, `role`, `realname`, `nickname`, `commiter`, `avatar`, `birthday`, `gender`, `email`, `skype`, `qq`, `weixin`, `dingding`, `slack`, `mobile`, `phone`, `address`, `zipcode`, `join`, `visits`, `ip`, `last`, `deleted`) VALUES(10, 1, 'testManager', 'e10adc3949ba59abbe56e057f20f883e', 'qd', '测试经理', '', '', '', '0000-00-00', 'm', '', '', '', '', '', '', '', '', '', '', '0000-00-00', 6, '192.168.0.8', 1338865842, '1'); INSERT INTO `zt_usergroup` (`account`, `group`) VALUES('productManager', 5); INSERT INTO `zt_usergroup` (`account`, `group`) VALUES('projectManager', 4); diff --git a/db/endemo.sql b/db/endemo.sql index 536c07c535..adac0adf95 100644 --- a/db/endemo.sql +++ b/db/endemo.sql @@ -328,7 +328,7 @@ INSERT INTO `zt_testsuite` (`id`, `product`, `name`, `desc`, `type`, `addedBy`, INSERT INTO `zt_testtask` (`id`, `name`, `product`, `project`, `build`, `owner`, `pri`, `begin`, `end`, `mailto`, `desc`, `report`, `status`, `deleted`) VALUES (1, 'test for blog v0.1', 2, 2, '2', 'thePO', 0, '2018-01-05', '2018-01-20', '', '', '', 'wait', '0'); -INSERT INTO `zt_user` (`dept`, `account`, `password`, `role`, `realname`, `nickname`, `commiter`, `avatar`, `birthday`, `gender`, `email`, `skype`, `qq`, `yahoo`, `gtalk`, `wangwang`, `mobile`, `phone`, `address`, `zipcode`, `join`, `visits`, `ip`, `last`, `fails`, `locked`, `ranzhi`, `score`, `scoreLevel`, `deleted`) VALUES +INSERT INTO `zt_user` (`dept`, `account`, `password`, `role`, `realname`, `nickname`, `commiter`, `avatar`, `birthday`, `gender`, `email`, `skype`, `qq`, `weixin`, `dingding`, `slack`, `mobile`, `phone`, `address`, `zipcode`, `join`, `visits`, `ip`, `last`, `fails`, `locked`, `ranzhi`, `score`, `scoreLevel`, `deleted`) VALUES (1, 'thePO', 'e10adc3949ba59abbe56e057f20f883e', 'po', 'Richard', '', '', '', '0000-00-00', 'm', '', '', '', '', '', '', '', '', '', '', '0000-00-00', 3, '127.0.0.1', 1513093950, 0, '0000-00-00 00:00:00', '', 0, 0, '0'), (5, 'pm1', 'e10adc3949ba59abbe56e057f20f883e', 'pm', 'Daniel', '', '', '', '0000-00-00', 'm', '', '', '', '', '', '', '', '', '', '', '0000-00-00', 2, '127.0.0.1', 1513093318, 0, '0000-00-00 00:00:00', '', 0, 0, '0'); diff --git a/db/update11.2.sql b/db/update11.2.sql index e54f25c50e..e66d96995b 100644 --- a/db/update11.2.sql +++ b/db/update11.2.sql @@ -2,6 +2,6 @@ update `zt_build` set `deleted`='1' where `project`='0' and `id` in (select `bui ALTER TABLE `zt_productplan` ADD `parent` mediumint(9) NOT NULL DEFAULT '0' AFTER `branch`; ALTER TABLE `zt_action` CHANGE `actor` `actor` varchar(100) COLLATE 'utf8_general_ci' NOT NULL DEFAULT '' AFTER `project`; ALTER TABLE `zt_user` ADD `weixin` varchar(90) COLLATE 'utf8_general_ci' NOT NULL AFTER `phone`; -ALTER TABLE `zt_user` ADD `dingtalk` varchar(90) COLLATE 'utf8_general_ci' NOT NULL AFTER `weixin`; -ALTER TABLE `zt_user` ADD `slack` varchar(90) COLLATE 'utf8_general_ci' NOT NULL AFTER `dingtalk`; +ALTER TABLE `zt_user` ADD `dingding` varchar(90) COLLATE 'utf8_general_ci' NOT NULL AFTER `weixin`; +ALTER TABLE `zt_user` ADD `slack` varchar(90) COLLATE 'utf8_general_ci' NOT NULL AFTER `dingding`; ALTER TABLE `zt_user` ADD `whatsapp` varchar(90) COLLATE 'utf8_general_ci' NOT NULL AFTER `slack`; diff --git a/db/zentao.sql b/db/zentao.sql index 3a42a0d590..adf21e81e1 100644 --- a/db/zentao.sql +++ b/db/zentao.sql @@ -815,11 +815,10 @@ CREATE TABLE IF NOT EXISTS `zt_user` ( `email` char(90) NOT NULL default '', `skype` char(90) NOT NULL default '', `qq` char(20) NOT NULL default '', - `gtalk` char(90) NOT NULL default '', `mobile` char(11) NOT NULL default '', `phone` char(20) NOT NULL default '', `weixin` varchar(90) NOT NULL default '', - `dingtalk` varchar(90) NOT NULL default '', + `dingding` varchar(90) NOT NULL default '', `slack` varchar(90) NOT NULL default '', `whatsapp` varchar(90) NOT NULL default '', `address` char(120) NOT NULL default '', diff --git a/module/company/config.php b/module/company/config.php index 04b36fc68c..84d53a2d50 100644 --- a/module/company/config.php +++ b/module/company/config.php @@ -38,8 +38,7 @@ $config->company->browse->search['fields']['commiter'] = $lang->user->commiter; $config->company->browse->search['fields']['gender'] = $lang->user->gender; $config->company->browse->search['fields']['qq'] = $lang->user->qq; $config->company->browse->search['fields']['skype'] = $lang->user->skype; -$config->company->browse->search['fields']['dingtalk'] = $lang->user->dingtalk; -$config->company->browse->search['fields']['gtalk'] = $lang->user->gtalk; +$config->company->browse->search['fields']['dingding'] = $lang->user->dingding; $config->company->browse->search['fields']['weixin'] = $lang->user->weixin; $config->company->browse->search['fields']['slack'] = $lang->user->slack; $config->company->browse->search['fields']['whatsapp'] = $lang->user->whatsapp; @@ -58,8 +57,7 @@ $config->company->browse->search['params']['commiter'] = array('operator' => 'in $config->company->browse->search['params']['gender'] = array('operator' => '=', 'control' => 'select', 'values' => $lang->user->genderList); $config->company->browse->search['params']['qq'] = array('operator' => '=', 'control' => 'input', 'values' => ''); $config->company->browse->search['params']['skype'] = array('operator' => '=', 'control' => 'input', 'values' => ''); -$config->company->browse->search['params']['dingtalk'] = array('operator' => '=', 'control' => 'input', 'values' => ''); -$config->company->browse->search['params']['gtalk'] = array('operator' => '=', 'control' => 'input', 'values' => ''); +$config->company->browse->search['params']['dingding'] = array('operator' => '=', 'control' => 'input', 'values' => ''); $config->company->browse->search['params']['weixin'] = array('operator' => '=', 'control' => 'input', 'values' => ''); $config->company->browse->search['params']['slack'] = array('operator' => '=', 'control' => 'input', 'values' => ''); $config->company->browse->search['params']['whatsapp'] = array('operator' => '=', 'control' => 'input', 'values' => ''); diff --git a/module/custom/config.php b/module/custom/config.php index ea6ba4acda..a8faf0c76a 100644 --- a/module/custom/config.php +++ b/module/custom/config.php @@ -55,4 +55,4 @@ $config->custom->fieldList['testreport'] = 'begin,end,members,report $config->custom->fieldList['testtask'] = 'owner,pri,status,desc,comment'; $config->custom->fieldList['doc'] = 'keywords,content'; $config->custom->fieldList['user']['create'] = 'dept,role,email,commiter'; -$config->custom->fieldList['user']['edit'] = 'dept,role,email,commiter,skype,qq,mobile,phone,address,zipcode,dingtalk,gtalk,slack,whatsapp,weixin'; +$config->custom->fieldList['user']['edit'] = 'dept,role,email,commiter,skype,qq,mobile,phone,address,zipcode,dingding,slack,whatsapp,weixin'; diff --git a/module/my/control.php b/module/my/control.php index e8f4010aef..ef98be8e0a 100644 --- a/module/my/control.php +++ b/module/my/control.php @@ -369,6 +369,9 @@ class my extends control die(js::locate($this->createLink('my', 'profile'), 'parent')); } + $this->app->loadConfig('user'); + $this->app->loadLang('user'); + $this->view->title = $this->lang->my->common . $this->lang->colon . $this->lang->my->editProfile; $this->view->position[] = $this->lang->my->editProfile; $this->view->user = $this->user->getById($this->app->user->account); @@ -512,6 +515,7 @@ class my extends control { if($this->app->user->account == 'guest') die(js::alert('guest') . js::locate('back')); + $this->app->loadConfig('user'); $this->app->loadLang('user'); $user = $this->user->getById($this->app->user->account); diff --git a/module/testcase/css/importfromlib.css b/module/testcase/css/importfromlib.css index 8bcb95b2fd..572126b190 100644 --- a/module/testcase/css/importfromlib.css +++ b/module/testcase/css/importfromlib.css @@ -1,4 +1 @@ -#titlebar .input-group {position: relative; top: -6px; width: 350px;} -#titlebar .input-group-addon, #titlebar .form-control {font-size: 12px; padding: 5px 10px; line-height: 18px; height: 30px} - -#importFromLib .chosen-container .chosen-drop{width:300px;} +#mainMenu .chosen-container .chosen-drop{width:300px;} diff --git a/module/testcase/view/importfromlib.html.php b/module/testcase/view/importfromlib.html.php index ae2cefb484..1ea5d7d695 100644 --- a/module/testcase/view/importfromlib.html.php +++ b/module/testcase/view/importfromlib.html.php @@ -14,7 +14,7 @@ global->flow);?>
          - - + @@ -84,8 +83,7 @@ - - + diff --git a/module/user/view/batchedit.html.php b/module/user/view/batchedit.html.php index 018b7d31e4..81e242d39d 100644 --- a/module/user/view/batchedit.html.php +++ b/module/user/view/batchedit.html.php @@ -43,8 +43,7 @@ - - + @@ -75,8 +74,7 @@ - - + From 2d9d78fd8c79d4ba67afab6376cc22028c3cacdd Mon Sep 17 00:00:00 2001 From: wangyidong Date: Tue, 26 Feb 2019 11:45:18 +0800 Subject: [PATCH 270/442] * adjust for sort lib. --- module/doc/view/side.html.php | 112 ++++++++++++++++------------------ 1 file changed, 53 insertions(+), 59 deletions(-) diff --git a/module/doc/view/side.html.php b/module/doc/view/side.html.php index d15f51a14d..c45180225a 100644 --- a/module/doc/view/side.html.php +++ b/module/doc/view/side.html.php @@ -162,18 +162,18 @@ if(empty($type)) $type = 'product'; -goback);?> From 97f55a77fa75af31026cc0d5ba2e509d7b42cb62 Mon Sep 17 00:00:00 2001 From: reneeteng Date: Tue, 26 Feb 2019 13:41:41 +0800 Subject: [PATCH 271/442] *Lang change. --- module/common/lang/en.php | 2 +- module/project/lang/en.php | 24 ++++++++++++------------ 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/module/common/lang/en.php b/module/common/lang/en.php index 7e2dd0cc64..a22552a456 100644 --- a/module/common/lang/en.php +++ b/module/common/lang/en.php @@ -355,7 +355,7 @@ $lang->company = new stdclass(); $lang->company->menu = new stdclass(); $lang->company->menu->browseUser = array('link' => 'User|company|browse', 'subModule' => 'user'); $lang->company->menu->dept = array('link' => 'Department|dept|browse', 'subModule' => 'dept'); -$lang->company->menu->browseGroup = array('link' => 'Group|group|browse', 'subModule' => 'group'); +$lang->company->menu->browseGroup = array('link' => 'Privilege|group|browse', 'subModule' => 'group'); $lang->company->menu->dynamic = 'Dynamic|company|dynamic|'; $lang->company->menu->view = array('link' => 'Company|company|view'); diff --git a/module/project/lang/en.php b/module/project/lang/en.php index 818727343d..7cccd8460e 100644 --- a/module/project/lang/en.php +++ b/module/project/lang/en.php @@ -31,14 +31,14 @@ $lang->project->PO = 'PO'; $lang->project->PM = 'PM'; $lang->project->QD = 'QA Manager'; $lang->project->RD = 'Release Manager'; -$lang->project->qa = 'Test'; +$lang->project->qa = 'QA'; $lang->project->release = 'Release'; $lang->project->acl = 'Access Control'; $lang->project->teamname = 'Team Name'; $lang->project->order = "Sort {$lang->projectCommon}"; $lang->project->products = "Link {$lang->productCommon}"; $lang->project->whitelist = 'Whitelist'; -$lang->project->totalEstimate = 'Est'; +$lang->project->totalEstimate = 'Estimates'; $lang->project->totalConsumed = 'Cost'; $lang->project->totalLeft = 'Left'; $lang->project->progress = 'Progress'; @@ -117,7 +117,7 @@ $lang->project->testtask = 'Test'; $lang->project->burn = 'Burndown'; $lang->project->computeBurn = 'Update'; $lang->project->burnData = 'Burndown Data'; -$lang->project->fixFirst = 'Edit Man-hour of 1st Day'; +$lang->project->fixFirst = 'Edit estimates of 1st Day'; $lang->project->team = 'Team Member'; $lang->project->doc = 'Doc'; $lang->project->doclib = 'Doc Library'; @@ -126,8 +126,8 @@ $lang->project->linkStory = 'Link Story'; $lang->project->linkStoryByPlan = 'Link Story From Plan'; $lang->project->linkPlan = 'Link Plan'; $lang->project->unlinkStoryTasks = 'Unlink'; -$lang->project->linkedProducts = 'Linked Products'; -$lang->project->unlinkedProducts = 'Unlinked Products'; +$lang->project->linkedProducts = 'Linked Product'; +$lang->project->unlinkedProducts = 'Unlinked Product'; $lang->project->view = "Overview"; $lang->project->create = "Create Project"; $lang->project->copy = "Copy {$lang->projectCommon}"; @@ -150,7 +150,7 @@ $lang->project->treeOnlyTask = 'Tree View Show Task'; $lang->project->treeOnlyStory = 'Tree View Show Story'; $lang->project->storyKanban = 'Story Kanban'; $lang->project->storySort = 'Sort Story'; -$lang->project->importPlanStory = '' . $lang->projectCommon . ' is created!\nDo you want to iport stories linked to the plan?'; +$lang->project->importPlanStory = '' . $lang->projectCommon . ' is created!\nDo you want to import stories linked to the plan?'; $lang->project->iteration = 'Iteration'; $lang->project->iterationInfo = '%s Iterations'; $lang->project->viewAll = 'View All'; @@ -268,12 +268,12 @@ $lang->project->placeholder->totalLeft = 'Estimates at the beginning of the Proj $lang->project->selectGroup = new stdclass(); $lang->project->selectGroup->done = '(Done)'; -$lang->project->orderList['order_asc'] = "Order Asc"; -$lang->project->orderList['order_desc'] = "Order Desc"; -$lang->project->orderList['pri_asc'] = "Priority Asc"; -$lang->project->orderList['pri_desc'] = "Priority Desc"; -$lang->project->orderList['stage_asc'] = "Stage Asc"; -$lang->project->orderList['stage_desc'] = "Stage Desc"; +$lang->project->orderList['order_asc'] = "Order Ascending"; +$lang->project->orderList['order_desc'] = "Order Descending"; +$lang->project->orderList['pri_asc'] = "Priority Ascending"; +$lang->project->orderList['pri_desc'] = "Priority Descending"; +$lang->project->orderList['stage_asc'] = "Stage Ascending"; +$lang->project->orderList['stage_desc'] = "Stage Descending"; $lang->project->kanban = "Kanban"; $lang->project->kanbanSetting = "Kanban Setting"; From c31b04da6772e45f22f8e390bb4344ef41dc24bc Mon Sep 17 00:00:00 2001 From: Yagami <976204163@qq.com> Date: Tue, 26 Feb 2019 14:06:07 +0800 Subject: [PATCH 272/442] * Code for task #5267. --- module/story/view/view.html.php | 8 ++-- module/testcase/control.php | 23 +++++++++-- module/testcase/lang/en.php | 2 +- module/testcase/lang/zh-cn.php | 2 +- module/testcase/model.php | 61 +++++++++++++----------------- module/testcase/view/edit.html.php | 1 - 6 files changed, 51 insertions(+), 46 deletions(-) diff --git a/module/story/view/view.html.php b/module/story/view/view.html.php index e79c66666c..5be322c0bd 100644 --- a/module/story/view/view.html.php +++ b/module/story/view/view.html.php @@ -293,7 +293,7 @@ { if(!isset($projects[$task->project])) continue; $projectName = $projects[$task->project]; - echo "
        • " . html::a($this->createLink('task', 'view', "taskID=$task->id", '', true), "#$task->id $task->name", '', "class='iframe' data-width='80%'"); + echo "
        • " . html::a($this->createLink('task', 'view', "taskID=$task->id", '', true), "[T]$task->id $task->name", '', "class='iframe' data-width='80%'"); echo html::a($this->createLink('project', 'browse', "projectID=$task->project"), $projectName, '', "class='text-muted'") . '
        • '; } } @@ -329,7 +329,7 @@ id $bug->title'>" . html::a($this->createLink('bug', 'view', "bugID=$bug->id", '', true), "#$bug->id $bug->title", '', "class='iframe' data-width='80%'") . ''; + echo "
        • " . html::a($this->createLink('bug', 'view', "bugID=$bug->id", '', true), "[B]$bug->id $bug->title", '', "class='iframe' data-width='80%'") . '
        • '; } ?> @@ -342,7 +342,7 @@ id $case->title'>" . html::a($this->createLink('testcase', 'view', "caseID=$case->id", '', true), "#$case->id $case->title", '', "class='iframe' data-width='80%'") . ''; + echo "
        • " . html::a($this->createLink('testcase', 'view', "caseID=$case->id", '', true), "[C]$case->id $case->title", '', "class='iframe' data-width='80%'") . '
        • '; } ?> @@ -357,7 +357,7 @@ $linkStories = explode(',', $story->linkStories) ; foreach($linkStories as $linkStoryID) { - if(isset($story->extraStories[$linkStoryID])) echo '
        • ' . html::a($this->createLink('story', 'view', "storyID=$linkStoryID", '', true), "#$linkStoryID " . $story->extraStories[$linkStoryID], '', "class='iframe' data-width='80%'") . '
        • '; + if(isset($story->extraStories[$linkStoryID])) echo '
        • ' . html::a($this->createLink('story', 'view', "storyID=$linkStoryID", '', true), "[S]$linkStoryID " . $story->extraStories[$linkStoryID], '', "class='iframe' data-width='80%'") . '
        • '; } ?> diff --git a/module/testcase/control.php b/module/testcase/control.php index b1017e7134..ff04edd472 100644 --- a/module/testcase/control.php +++ b/module/testcase/control.php @@ -546,9 +546,19 @@ class testcase extends control * @access public * @return void */ - public function edit($caseID, $comment = false) + public function edit($caseID, $comment = false, $confirm = 'no') { $this->loadModel('story'); + $case = $this->testcase->getById($caseID); + $isLibCase = ($case->lib and empty($case->product)); + + if($confirm == 'yes') + { + $linkedCaseID = ''; + if($isLibCase) $linkedCaseID = $this->dao->select('id')->from(TABLE_CASE)->where('fromCaseID')->eq($caseID)->fetchPairs(); + if(!empty($linkedCaseID)) $this->testcase->updateLinkedCases($linkedCaseID, $case->steps); + die(js::locate($this->createLink('testcase', 'view', "caseID=$caseID"), 'parent')); + } if(!empty($_POST)) { @@ -569,10 +579,17 @@ class testcase extends control $actionID = $this->action->create('case', $caseID, $action, $fileAction . $this->post->comment); $this->action->logHistory($actionID, $changes); } + + $stepChanged = false; + foreach($changes as $change) + { + if($change['field'] == 'version') $stepChanged = true; + } + + if($isLibCase and $stepChanged) die(js::confirm($this->lang->testcase->haveLinkCase, inlink('edit', "caseID=$caseID&comment=&confirm=yes"), inlink('view', "caseID=$caseID"), 'parent', 'parent')); die(js::locate($this->createLink('testcase', 'view', "caseID=$caseID"), 'parent')); } - $case = $this->testcase->getById($caseID); if(empty($case->steps)) { $step = new stdclass(); @@ -582,7 +599,6 @@ class testcase extends control $case->steps[] = $step; } - $isLibCase = ($case->lib and empty($case->product)); if($isLibCase) { $libraries = $this->loadModel('testsuite')->getLibraries(); @@ -596,7 +612,6 @@ class testcase extends control $this->view->libID = $case->lib; $this->view->libName = $libraries[$case->lib]; $this->view->libraries = $libraries; - $this->view->linkedCaseID = $this->testcase->getLinkedCaseID($case->lib, $caseID); $this->view->moduleOptionMenu = $this->tree->getOptionMenu($case->lib, $viewType = 'caselib', $startModuleID = 0); } else diff --git a/module/testcase/lang/en.php b/module/testcase/lang/en.php index d3d069d399..a1c35e6f06 100644 --- a/module/testcase/lang/en.php +++ b/module/testcase/lang/en.php @@ -139,7 +139,7 @@ $lang->testcase->confirmDelete = 'Do you want to delete this Test Case?'; $lang->testcase->confirmBatchDelete = 'Do you want to batch delete these Test Cases?'; $lang->testcase->ditto = 'Ditto'; $lang->testcase->dittoNotice = 'This Case does not belong to the Product as the previous one!'; -$lang->testcase->haveLinkCase = 'It has linked case, update this one, the linked case will change.'; +$lang->testcase->haveLinkCase = 'It has linked cases. Confirm it first and linked cases will be updated.'; $lang->testcase->reviewList[0] = 'NO'; $lang->testcase->reviewList[1] = 'YES'; diff --git a/module/testcase/lang/zh-cn.php b/module/testcase/lang/zh-cn.php index faef133b49..aa5a67c606 100644 --- a/module/testcase/lang/zh-cn.php +++ b/module/testcase/lang/zh-cn.php @@ -139,7 +139,7 @@ $lang->testcase->confirmDelete = '您确认要删除该测试用例吗?'; $lang->testcase->confirmBatchDelete = '您确认要批量删除这些测试用例吗?'; $lang->testcase->ditto = '同上'; $lang->testcase->dittoNotice = '该用例与上一用例不属于同一产品!'; -$lang->testcase->haveLinkCase = '此用例存在相关用例,更新后,其相关用例会一并更新。'; +$lang->testcase->haveLinkCase = '此用例存在相关用例,确认后,其相关用例会一并更新。'; $lang->testcase->reviewList[0] = '否'; $lang->testcase->reviewList[1] = '是'; diff --git a/module/testcase/model.php b/module/testcase/model.php index 6fb57ab2c6..8f80a7b518 100644 --- a/module/testcase/model.php +++ b/module/testcase/model.php @@ -604,24 +604,6 @@ class testcaseModel extends model return $caseCounts; } - /** - * Check have linked cases or not. - * - * @param int $libID - * @param int $caseID$ - * @access public - * @return int - */ - public function getLinkedCaseID($libID, $caseID) - { - $linkedCaseID = $this->dao->select('id')->from(TABLE_CASE) - ->where('lib')->eq($libID) - ->andWhere('fromCaseID')->eq($caseID) - ->andWhere('deleted')->eq(0) - ->fetch('id'); - return $linkedCaseID; - } - /** * Update a case. * @@ -631,10 +613,7 @@ class testcaseModel extends model */ public function update($caseID) { - $oldCase = $this->getById($caseID); - $isLibCase = ($oldCase->lib and empty($oldCase->product)); - $linkedCases = ''; - if($isLibCase) $linkedCases = $this->dao->select('id')->from(TABLE_CASE)->where('fromCaseID')->eq($caseID)->fetchPairs(); + $oldCase = $this->getById($caseID); if(!empty($_POST['lastEditedDate']) and $oldCase->lastEditedDate != $this->post->lastEditedDate) { dao::$errors[] = $this->lang->error->editedByOther; @@ -687,10 +666,6 @@ class testcaseModel extends model ->get(); if(!$this->forceNotReview() and $stepChanged) $case->status = 'wait'; $this->dao->update(TABLE_CASE)->data($case)->autoCheck()->batchCheck($this->config->testcase->edit->requiredFields, 'notempty')->where('id')->eq((int)$caseID)->exec(); - if($isLibCase and $linkedCases) - { - foreach($linkedCases as $linkedCaseID) $this->dao->update(TABLE_CASE)->data($case)->autoCheck()->batchCheck($this->config->testcase->edit->requiredFields, 'notempty')->where('id')->eq((int)$linkedCaseID)->exec(); - } if(!$this->dao->isError()) { if($stepChanged) @@ -710,15 +685,6 @@ class testcaseModel extends model $this->dao->insert(TABLE_CASESTEP)->data($step)->autoCheck()->exec(); if($step->type == 'group') $parentStepID = $this->dao->lastInsertID(); if($step->type == 'step') $parentStepID = 0; - - if($isLibCase and $linkedCases) - { - foreach($linkedCases as $linkedCaseID) - { - $step->case = $linkedCaseID; - $this->dao->insert(TABLE_CASESTEP)->data($step)->autoCheck()->exec(); - } - } } } @@ -736,6 +702,31 @@ class testcaseModel extends model } } + /** + * Update linked case. + * + * @param int $linkedCaseID + * @param object $steps + * @access public + * @return bool + */ + public function updateLinkedCases($linkedCaseID, $steps) + { + foreach($linkedCaseID as $caseID) + { + $version = $this->dao->findByID($caseID)->from(TABLE_CASE)->fetch('version'); + $version = $version + 1; + foreach($steps as $step) + { + unset($step->id); + $step->case = $caseID; + $step->version = $version; + $this->dao->insert(TABLE_CASESTEP)->data($step)->autoCheck()->exec(); + } + $this->dao->update(TABLE_CASE)->set('version')->eq($version)->where('id')->eq($caseID)->exec(); + } + } + /** * Review case * diff --git a/module/testcase/view/edit.html.php b/module/testcase/view/edit.html.php index 3ad89a1bfc..9ee9fb39fa 100644 --- a/module/testcase/view/edit.html.php +++ b/module/testcase/view/edit.html.php @@ -125,7 +125,6 @@ lastEditedDate);?> createLink('testcase', 'browse', "productID=$productID");?>"' /> - ' . $lang->testcase->haveLinkCase . ''; ?> From e35a268a319aafa5904e908fdb73a851aa22a718 Mon Sep 17 00:00:00 2001 From: Yagami <976204163@qq.com> Date: Tue, 26 Feb 2019 14:11:37 +0800 Subject: [PATCH 273/442] * Code for task #5294. --- module/doc/css/view.css | 1 + 1 file changed, 1 insertion(+) diff --git a/module/doc/css/view.css b/module/doc/css/view.css index 82677f858d..b62e842ac4 100644 --- a/module/doc/css/view.css +++ b/module/doc/css/view.css @@ -18,3 +18,4 @@ .main-row > .side-col > .cell {transition: opacity .2s;} .doc-fullscreen .main-row > .side-col {width: 0; position: relative; overflow: hidden} .doc-fullscreen .fullscreen-btn > .icon-fullscreen:before {content: '\e972'} +.right-icon a{color: #1183fb} From efe734f04af9b880c9249fcb25827090dfa6daf9 Mon Sep 17 00:00:00 2001 From: Yagami <976204163@qq.com> Date: Tue, 26 Feb 2019 14:28:26 +0800 Subject: [PATCH 274/442] * Code for task #5284. --- module/bug/model.php | 2 +- module/bug/view/view.html.php | 2 +- module/my/view/bug.html.php | 2 +- module/my/view/story.html.php | 2 +- module/my/view/task.html.php | 2 +- module/product/view/view.html.php | 2 +- module/project/view/bug.html.php | 2 +- module/project/view/view.html.php | 2 +- module/story/model.php | 2 +- module/story/view/view.html.php | 2 +- module/task/model.php | 2 +- module/task/view/view.html.php | 4 ++-- module/testreport/view/view.html.php | 2 +- module/testtask/view/view.html.php | 2 +- 14 files changed, 15 insertions(+), 15 deletions(-) diff --git a/module/bug/model.php b/module/bug/model.php index f7721b011c..488731e875 100644 --- a/module/bug/model.php +++ b/module/bug/model.php @@ -2649,7 +2649,7 @@ class bugModel extends model $params = "bugID=$bug->id"; common::printIcon('bug', 'confirmBug', $params, $bug, 'list', 'confirm', '', 'iframe', true); common::printIcon('bug', 'resolve', $params, $bug, 'list', 'checked', '', 'iframe', true); - common::printIcon('bug', 'close', $params, $bug, 'list', 'close', '', 'iframe', true); + common::printIcon('bug', 'close', $params, $bug, 'list', '', '', 'iframe', true); common::printIcon('bug', 'edit', $params, $bug, 'list'); common::printIcon('bug', 'create', "product=$bug->product&branch=$bug->branch&extra=$params", $bug, 'list', 'copy'); break; diff --git a/module/bug/view/view.html.php b/module/bug/view/view.html.php index fc32f2de3e..72eeaaabb8 100644 --- a/module/bug/view/view.html.php +++ b/module/bug/view/view.html.php @@ -73,7 +73,7 @@ common::printIcon('bug', 'confirmBug', $params, $bug, 'button', 'search', '', 'iframe', true); common::printIcon('bug', 'assignTo', $params, $bug, 'button', '', '', 'iframe', true); common::printIcon('bug', 'resolve', $params, $bug, 'button', 'checked', '', 'iframe showinonlybody', true); - common::printIcon('bug', 'close', $params, $bug, 'button', 'close', '', 'text-danger iframe showinonlybody', true); + common::printIcon('bug', 'close', $params, $bug, 'button', '', '', 'text-danger iframe showinonlybody', true); common::printIcon('bug', 'activate', $params, $bug, 'button', '', '', 'text-success iframe showinonlybody', true); if($config->global->flow != 'onlyTest') common::printIcon('bug', 'toStory', "product=$bug->product&branch=$bug->branch&module=0&story=0&project=0&bugID=$bug->id", $bug, 'button', $lang->icons['story']); diff --git a/module/my/view/bug.html.php b/module/my/view/bug.html.php index b47830f627..13e5817b86 100644 --- a/module/my/view/bug.html.php +++ b/module/my/view/bug.html.php @@ -95,7 +95,7 @@ $params = "bugID=$bug->id"; common::printIcon('bug', 'confirmBug', $params, $bug, 'list', 'confirm', '', 'iframe', true); common::printIcon('bug', 'resolve', $params, $bug, 'list', 'checked', '', 'iframe', true); - common::printIcon('bug', 'close', $params, $bug, 'list', 'close', '', 'iframe', true); + common::printIcon('bug', 'close', $params, $bug, 'list', '', '', 'iframe', true); common::printIcon('bug', 'edit', $params, $bug, 'list'); common::printIcon('bug', 'create', "product=$bug->product&branch=$bug->branch&extra=$params", $bug, 'list', 'copy'); ?> diff --git a/module/my/view/story.html.php b/module/my/view/story.html.php index 17f5ed9b3d..b010211ae6 100644 --- a/module/my/view/story.html.php +++ b/module/my/view/story.html.php @@ -82,7 +82,7 @@ $vars = "story={$story->id}"; common::printIcon('story', 'change', $vars, $story, 'list', 'fork'); common::printIcon('story', 'review', $vars, $story, 'list', 'glasses'); - common::printIcon('story', 'close', $vars, $story, 'list', 'close', '', 'iframe', true); + common::printIcon('story', 'close', $vars, $story, 'list', '', '', 'iframe', true); common::printIcon('story', 'edit', $vars, $story, 'list'); if($config->global->flow != 'onlyStory') common::printIcon('story', 'createCase', "productID=$story->product&branch=$story->branch&module=0&from=¶m=0&$vars", $story, 'list', 'sitemap'); ?> diff --git a/module/my/view/task.html.php b/module/my/view/task.html.php index 2a4636e731..34ff273719 100644 --- a/module/my/view/task.html.php +++ b/module/my/view/task.html.php @@ -96,7 +96,7 @@ { if($task->status != 'pause') common::printIcon('task', 'start', "taskID=$task->id", $task, 'list', '', '', 'iframe', true); if($task->status == 'pause') common::printIcon('task', 'restart', "taskID=$task->id", $task, 'list', '', '', 'iframe', true); - common::printIcon('task', 'close', "taskID=$task->id", $task, 'list', 'close', '', 'iframe', true, ''); + common::printIcon('task', 'close', "taskID=$task->id", $task, 'list', '', '', 'iframe', true, ''); common::printIcon('task', 'finish', "taskID=$task->id", $task, 'list', '', '', 'iframe', true); common::printIcon('task', 'recordEstimate', "taskID=$task->id", $task, 'list', 'time', '', 'iframe', true); diff --git a/module/product/view/view.html.php b/module/product/view/view.html.php index 9d9151e05b..6cfa0493e1 100644 --- a/module/product/view/view.html.php +++ b/module/product/view/view.html.php @@ -87,7 +87,7 @@ echo "
          "; if($product->status != 'closed') { - common::printIcon('product', 'close', $params, $product, 'button', 'close', '', 'iframe', true); + common::printIcon('product', 'close', $params, $product, 'button', '', '', 'iframe', true); echo "
          "; } diff --git a/module/project/view/bug.html.php b/module/project/view/bug.html.php index c2f5642cff..543809d370 100644 --- a/module/project/view/bug.html.php +++ b/module/project/view/bug.html.php @@ -101,7 +101,7 @@ $params = "bugID=$bug->id"; common::printIcon('bug', 'confirmBug', $params, $bug, 'list', 'confirm', '', 'iframe', true); common::printIcon('bug', 'resolve', $params, $bug, 'list', 'checked', '', 'iframe', true); - common::printIcon('bug', 'close', $params, $bug, 'list', 'close', '', 'iframe', true); + common::printIcon('bug', 'close', $params, $bug, 'list', '', '', 'iframe', true); common::printIcon('bug', 'create', "product=$bug->product&branch=$bug->branch&extra=$params", $bug, 'list', 'copy'); common::printIcon('bug', 'edit', $params, $bug, 'list'); ?> diff --git a/module/project/view/view.html.php b/module/project/view/view.html.php index e9c66cec98..33bc0ce5a9 100644 --- a/module/project/view/view.html.php +++ b/module/project/view/view.html.php @@ -157,7 +157,7 @@ common::printIcon('project', 'activate', "projectID=$project->id", $project, 'button', '', '', 'iframe', true); common::printIcon('project', 'putoff', "projectID=$project->id", $project, 'button', '', '', 'iframe', true); common::printIcon('project', 'suspend', "projectID=$project->id", $project, 'button', '', '', 'iframe', true); - common::printIcon('project', 'close', "projectID=$project->id", $project, 'button', 'close', '', 'iframe', true); + common::printIcon('project', 'close', "projectID=$project->id", $project, 'button', '', '', 'iframe', true); echo "
          "; common::printIcon('project', 'edit', $params, $project); diff --git a/module/story/model.php b/module/story/model.php index 0d4a51d22c..be8e3e58fd 100644 --- a/module/story/model.php +++ b/module/story/model.php @@ -2459,7 +2459,7 @@ class storyModel extends model $vars = "story={$story->id}"; common::printIcon('story', 'change', $vars, $story, 'list', 'fork'); common::printIcon('story', 'review', $vars, $story, 'list', 'glasses'); - common::printIcon('story', 'close', $vars, $story, 'list', 'close', '', 'iframe', true); + common::printIcon('story', 'close', $vars, $story, 'list', '', '', 'iframe', true); common::printIcon('story', 'edit', $vars, $story, 'list'); if($this->config->global->flow != 'onlyStory') common::printIcon('story', 'createCase', "productID=$story->product&branch=$story->branch&module=0&from=¶m=0&$vars", $story, 'list', 'sitemap'); break; diff --git a/module/story/view/view.html.php b/module/story/view/view.html.php index 5be322c0bd..8b20cd5213 100644 --- a/module/story/view/view.html.php +++ b/module/story/view/view.html.php @@ -78,7 +78,7 @@ if(common::hasPriv('story', 'batchCreate')) echo html::a($link, " " . $lang->story->subdivide, '', $misc); } - common::printIcon('story', 'close', "storyID=$story->id", $story, 'button', 'close', '', 'iframe showinonlybody', true); + common::printIcon('story', 'close', "storyID=$story->id", $story, 'button', '', '', 'iframe showinonlybody', true); common::printIcon('story', 'activate', "storyID=$story->id", $story, 'button', '', '', 'iframe showinonlybody', true); if($config->global->flow != 'onlyStory' and !isonlybody() and (common::hasPriv('testcase', 'create') or common::hasPriv('testcase', 'batchCreate'))) diff --git a/module/task/model.php b/module/task/model.php index 45f9029dba..710e70ba06 100644 --- a/module/task/model.php +++ b/module/task/model.php @@ -2619,7 +2619,7 @@ class taskModel extends model if($task->status != 'pause') common::printIcon('task', 'start', "taskID=$task->id", $task, 'list', '', '', 'iframe', true); if($task->status == 'pause') common::printIcon('task', 'restart', "taskID=$task->id", $task, 'list', '', '', 'iframe', true); - common::printIcon('task', 'close', "taskID=$task->id", $task, 'list', 'close', '', 'iframe', true); + common::printIcon('task', 'close', "taskID=$task->id", $task, 'list', '', '', 'iframe', true); common::printIcon('task', 'finish', "taskID=$task->id", $task, 'list', '', '', 'iframe', true); common::printIcon('task', 'recordEstimate', "taskID=$task->id", $task, 'list', 'time', '', 'iframe', true); diff --git a/module/task/view/view.html.php b/module/task/view/view.html.php index d257efcc16..1f6a7bd7a6 100644 --- a/module/task/view/view.html.php +++ b/module/task/view/view.html.php @@ -131,7 +131,7 @@ common::printIcon('task', 'activate', "taskID=$child->id", $child, 'list', '', '', 'iframe', true); common::printIcon('task', 'recordEstimate', "taskID=$child->id", $child, 'list', 'time', '', 'iframe', true); common::printIcon('task', 'finish', "taskID=$child->id", $child, 'list', '', '', 'iframe', true); - common::printIcon('task', 'close', "taskID=$child->id", $child, 'list', 'close', '', 'iframe', true); + common::printIcon('task', 'close', "taskID=$child->id", $child, 'list', '', '', 'iframe', true); common::printIcon('task', 'edit', "taskID=$child->id", $child, 'list'); ?> @@ -159,7 +159,7 @@ common::printIcon('task', 'pause', "taskID=$task->id", $task, 'button', '', '', 'iframe showinonlybody', true); common::printIcon('task', 'finish', "taskID=$task->id", $task, 'button', '', '', 'iframe showinonlybody text-success', true); common::printIcon('task', 'activate', "taskID=$task->id", $task, 'button', '', '', 'iframe showinonlybody text-success', true); - common::printIcon('task', 'close', "taskID=$task->id", $task, 'button', 'close', '', 'iframe showinonlybody', true); + common::printIcon('task', 'close', "taskID=$task->id", $task, 'button', '', '', 'iframe showinonlybody', true); common::printIcon('task', 'cancel', "taskID=$task->id", $task, 'button', '', '', 'iframe showinonlybody', true); if(!isonlybody()) echo "
          "; diff --git a/module/testreport/view/view.html.php b/module/testreport/view/view.html.php index 664d26938c..9b699334fe 100644 --- a/module/testreport/view/view.html.php +++ b/module/testreport/view/view.html.php @@ -16,7 +16,7 @@
          - + - + @@ -174,7 +174,7 @@ id}");?>"> - + From 216c6f5c0e2ff055be5ffabdb4776d72cfdced2d Mon Sep 17 00:00:00 2001 From: wangyidong Date: Tue, 26 Feb 2019 16:49:49 +0800 Subject: [PATCH 277/442] * adjust for custom timezone. --- module/common/lang/menuOrder.php | 1 + module/common/lang/zh-cn.php | 3 +- module/custom/control.php | 4 +++ module/custom/lang/zh-cn.php | 1 + module/custom/view/header.html.php | 1 - module/custom/view/timezone.html.php | 47 +++++++++++++--------------- module/doc/lang/en.php | 14 --------- module/report/model.php | 2 +- 8 files changed, 31 insertions(+), 42 deletions(-) diff --git a/module/common/lang/menuOrder.php b/module/common/lang/menuOrder.php index 8f1038cdb3..1340e89c6a 100644 --- a/module/common/lang/menuOrder.php +++ b/module/common/lang/menuOrder.php @@ -124,6 +124,7 @@ $lang->admin->subMenuOrder->dev[20] = 'entry'; $lang->admin->subMenuOrder->data[5] = 'backup'; $lang->admin->subMenuOrder->data[10] = 'trash'; $lang->admin->subMenuOrder->system[5] = 'cron'; +$lang->admin->subMenuOrder->system[10] = 'timezone'; $lang->convert->menuOrder = $lang->admin->menuOrder; $lang->upgrade->menuOrder = $lang->admin->menuOrder; diff --git a/module/common/lang/zh-cn.php b/module/common/lang/zh-cn.php index 46606369c2..9356bc5b79 100644 --- a/module/common/lang/zh-cn.php +++ b/module/common/lang/zh-cn.php @@ -400,7 +400,8 @@ $lang->admin->subMenu->data->backup = array('link' => '备份|backup|index', 'su $lang->admin->subMenu->data->trash = '回收站|action|trash'; $lang->admin->subMenu->system = new stdclass(); -$lang->admin->subMenu->system->cron = array('link' => '定时|cron|index', 'subModule' => 'cron'); +$lang->admin->subMenu->system->cron = array('link' => '定时|cron|index', 'subModule' => 'cron'); +$lang->admin->subMenu->system->timezone = array('link' => '时区|custom|timezone', 'subModule' => 'custom'); $lang->convert = new stdclass(); $lang->upgrade = new stdclass(); diff --git a/module/custom/control.php b/module/custom/control.php index 5440ea9797..87c4c623b8 100644 --- a/module/custom/control.php +++ b/module/custom/control.php @@ -337,6 +337,10 @@ class custom extends control $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => 'reload')); } + unset($this->lang->admin->menu->custom['subModule']); + $this->lang->admin->menu->system['subModule'] = 'custom'; + $this->lang->custom->menu = $this->lang->admin->menu; + $this->view->title = $this->lang->custom->timezone; $this->view->position[] = $this->lang->custom->timezone; $this->display(); diff --git a/module/custom/lang/zh-cn.php b/module/custom/lang/zh-cn.php index cdafde4fe0..868406e8d2 100644 --- a/module/custom/lang/zh-cn.php +++ b/module/custom/lang/zh-cn.php @@ -92,6 +92,7 @@ $lang->custom->notice->forceNotReview = "指定人提交的%s不需 $lang->custom->notice->longlife = 'Bug列表页面的久未处理标签中,列出设置天数之前未处理的Bug。'; $lang->custom->notice->invalidNumberKey = '键值应为不大于255的数字'; $lang->custom->notice->invalidStringKey = '键值应当为小写英文字母、数字或下划线的组合'; +$lang->custom->notice->cannotSetTimezone = 'date_default_timezone_set方法不存在或禁用,不能设置时区。'; $lang->custom->notice->indexPage['product'] = "从8.2版本起增加了产品主页视图,是否默认进入产品主页?"; $lang->custom->notice->indexPage['project'] = "从8.2版本起增加了项目主页视图,是否默认进入项目主页?"; diff --git a/module/custom/view/header.html.php b/module/custom/view/header.html.php index 67316c32a4..25442e6a55 100644 --- a/module/custom/view/header.html.php +++ b/module/custom/view/header.html.php @@ -6,7 +6,6 @@ { common::printLink('custom', 'set', "module=$object", "{$name}", '', "class='btn btn-link' id='{$object}Tab'"); } - common::printLink('custom', 'timezone', "", "{$lang->custom->timezone}", '', "class='btn btn-link' id='timezoneTab'"); common::printLink('custom', 'flow', "", "{$lang->custom->flow}", '', "class='btn btn-link' id='flowTab'"); common::printLink('custom', 'working', '', "{$lang->custom->working}", '', "class='btn btn-link' id='workingTab'"); common::printLink('custom', 'required', '', "{$lang->custom->required}", '', "class='btn btn-link' id='requiredTab'"); diff --git a/module/custom/view/timezone.html.php b/module/custom/view/timezone.html.php index 703981133c..020622f070 100644 --- a/module/custom/view/timezone.html.php +++ b/module/custom/view/timezone.html.php @@ -10,32 +10,29 @@ * @link http://www.zentao.net */ ?> - -app->getConfigRoot() . 'timezones.php';?> + +
          -
          -
          -
          - custom->timezone?> -
          -
          -
          '> user->join;?> '> user->skype;?> '> user->qq;?>'>user->dingtalk;?>'> user->gtalk;?>'>user->dingding;?> '> user->weixin;?> '> user->mobile;?> '> user->slack;?>'> '> '> '>'> '> '> '> '> '> user->join;?> '> user->skype;?> '> user->qq;?>'> user->dingtalk;?>'> user->gtalk;?>'> user->dingding;?> '> user->weixin;?> '> user->mobile;?> '> user->slack;?>'> id]", $user->join, "class='form-control form-date'");?> '> id]", $user->skype, "class='form-control'");?> '> id]", $user->qq, "class='form-control'");?>'>id]", $user->dingtalk, "class='form-control'");?>'> id]", $user->gtalk, "class='form-control'");?>'>id]", $user->dingding, "class='form-control'");?> '> id]", $user->weixin, "class='form-control'");?> '> id]", $user->mobile, "class='form-control'");?> '> id]", $user->slack, "class='form-control'");?>createdBy) echo zget($users, $lib->createdBy);?>createdDate != '00-00-00 00:00:00') echo formatTime($lib->createdDate, 'm-d h:i');?>createdDate != '00-00-00 00:00:00') echo formatTime($lib->createdDate, 'Y-m-d');?> collector, ',' . $this->app->user->account . ',') !== false ? 'icon-star text-yellow' : 'icon-star-empty';?> diff --git a/module/doc/view/index.html.php b/module/doc/view/index.html.php index 0ddcee7479..ba507b4661 100644 --- a/module/doc/view/index.html.php +++ b/module/doc/view/index.html.php @@ -40,7 +40,7 @@ title;?> fileSize ? $doc->fileSize : '-';?> addedBy);?>editedDate == '0000-00-00 00:00:00' ? formatTime($doc->addedDate, 'y-m-d') : formatTime($doc->editedDate, 'y-m-d');?>editedDate == '0000-00-00 00:00:00' ? formatTime($doc->addedDate, 'Y-m-d') : formatTime($doc->editedDate, 'Y-m-d');?>
          title;?> addedBy);?>editedDate) ? formatTime($doc->editedDate, 'y-m-d') : formatTime($doc->addedDate, 'y-m-d');?>editedDate) ? formatTime($doc->editedDate, 'Y-m-d') : formatTime($doc->addedDate, 'y-m-d');?>
          - - - - - - - - -
          custom->timezone;?>timezone, "class='form-control chosen'");?>
          - +
          + +
          custom->notice->cannotSetTimezone;?>
          + + app->getConfigRoot() . 'timezones.php';?> +
          + + + + + + + + +
          custom->timezone;?>timezone, "class='form-control chosen'");?>
          +
          + +
          - diff --git a/module/doc/lang/en.php b/module/doc/lang/en.php index 6933449638..aee319e855 100644 --- a/module/doc/lang/en.php +++ b/module/doc/lang/en.php @@ -160,20 +160,6 @@ $lang->doc->noEditedDoc = 'You have not edited any document.'; $lang->doc->noOpenedDoc = 'You have not created any document.'; $lang->doc->noCollectedDoc = 'You have not collected any document.'; -$lang->doc->noticeAcl['lib']['product']['open'] = 'Everyone can access it unless the user has no access to the associated product.'; -$lang->doc->noticeAcl['lib']['product']['custom'] = 'Users of whitelists and associated product with access rights can access them.'; -$lang->doc->noticeAcl['lib']['product']['private'] = 'Creators and users of associated product with access rights can access them.'; -$lang->doc->noticeAcl['lib']['project']['open'] = 'Everyone can access it unless the user has no access to the associated project.'; -$lang->doc->noticeAcl['lib']['project']['custom'] = 'Users of whitelists and associated project with access rights can access them.'; -$lang->doc->noticeAcl['lib']['project']['private'] = 'Creators and users of associated project with access rights can access them.'; -$lang->doc->noticeAcl['lib']['custom']['open'] = 'Everyone can visit it.'; -$lang->doc->noticeAcl['lib']['custom']['custom'] = 'Whitelist users are accessible.'; -$lang->doc->noticeAcl['lib']['custom']['private'] = 'Only the creator can access it.'; - -$lang->doc->noticeAcl['doc']['open'] = 'Everyone can access it unless the user does not have permission to belong to the document library.'; -$lang->doc->noticeAcl['doc']['custom'] = 'Whitelist users are accessible.'; -$lang->doc->noticeAcl['doc']['private'] = 'Only the creator can access it.'; - $lang->doc->placeholder = new stdclass(); $lang->doc->placeholder->url = 'Url'; diff --git a/module/report/model.php b/module/report/model.php index 0e249dd78d..d6750e1fb1 100644 --- a/module/report/model.php +++ b/module/report/model.php @@ -432,7 +432,7 @@ class reportModel extends model ->where('t1.assignedTo')->ne('') ->andWhere('t1.deleted')->eq(0) ->andWhere('t2.deleted')->eq(0) - ->andWhere('t1.status')->in('wait, doing') + ->andWhere('t1.status')->in('wait,doing') ->andWhere('t3.status')->ne('suspended') ->andWhere('t1.deadline', true)->eq('0000-00-00') ->orWhere('t1.deadline')->lt(date(DT_DATE1, strtotime('+4 day'))) From a22d3b6c303c6c7605f17569276c98cadd429b68 Mon Sep 17 00:00:00 2001 From: Yagami <976204163@qq.com> Date: Tue, 26 Feb 2019 17:00:58 +0800 Subject: [PATCH 278/442] * Remove some testcase code. --- module/testcase/control.php | 28 ++++++---------------------- module/testcase/lang/en.php | 1 - module/testcase/lang/zh-cn.php | 1 - module/testcase/model.php | 25 ------------------------- 4 files changed, 6 insertions(+), 49 deletions(-) diff --git a/module/testcase/control.php b/module/testcase/control.php index ff04edd472..ec65893fe0 100644 --- a/module/testcase/control.php +++ b/module/testcase/control.php @@ -546,19 +546,9 @@ class testcase extends control * @access public * @return void */ - public function edit($caseID, $comment = false, $confirm = 'no') + public function edit($caseID, $comment = false) { $this->loadModel('story'); - $case = $this->testcase->getById($caseID); - $isLibCase = ($case->lib and empty($case->product)); - - if($confirm == 'yes') - { - $linkedCaseID = ''; - if($isLibCase) $linkedCaseID = $this->dao->select('id')->from(TABLE_CASE)->where('fromCaseID')->eq($caseID)->fetchPairs(); - if(!empty($linkedCaseID)) $this->testcase->updateLinkedCases($linkedCaseID, $case->steps); - die(js::locate($this->createLink('testcase', 'view', "caseID=$caseID"), 'parent')); - } if(!empty($_POST)) { @@ -579,17 +569,10 @@ class testcase extends control $actionID = $this->action->create('case', $caseID, $action, $fileAction . $this->post->comment); $this->action->logHistory($actionID, $changes); } - - $stepChanged = false; - foreach($changes as $change) - { - if($change['field'] == 'version') $stepChanged = true; - } - - if($isLibCase and $stepChanged) die(js::confirm($this->lang->testcase->haveLinkCase, inlink('edit', "caseID=$caseID&comment=&confirm=yes"), inlink('view', "caseID=$caseID"), 'parent', 'parent')); die(js::locate($this->createLink('testcase', 'view', "caseID=$caseID"), 'parent')); } + $case = $this->testcase->getById($caseID); if(empty($case->steps)) { $step = new stdclass(); @@ -599,6 +582,7 @@ class testcase extends control $case->steps[] = $step; } + $isLibCase = ($case->lib and empty($case->product)); if($isLibCase) { $libraries = $this->loadModel('testsuite')->getLibraries(); @@ -609,9 +593,9 @@ class testcase extends control $title = "CASE #$case->id $case->title - " . $libraries[$case->lib]; $position[] = html::a($this->createLink('testsuite', 'library', "libID=$case->lib"), $libraries[$case->lib]); - $this->view->libID = $case->lib; - $this->view->libName = $libraries[$case->lib]; - $this->view->libraries = $libraries; + $this->view->libID = $case->lib; + $this->view->libName = $libraries[$case->lib]; + $this->view->libraries = $libraries; $this->view->moduleOptionMenu = $this->tree->getOptionMenu($case->lib, $viewType = 'caselib', $startModuleID = 0); } else diff --git a/module/testcase/lang/en.php b/module/testcase/lang/en.php index a1c35e6f06..a89a21d2e9 100644 --- a/module/testcase/lang/en.php +++ b/module/testcase/lang/en.php @@ -139,7 +139,6 @@ $lang->testcase->confirmDelete = 'Do you want to delete this Test Case?'; $lang->testcase->confirmBatchDelete = 'Do you want to batch delete these Test Cases?'; $lang->testcase->ditto = 'Ditto'; $lang->testcase->dittoNotice = 'This Case does not belong to the Product as the previous one!'; -$lang->testcase->haveLinkCase = 'It has linked cases. Confirm it first and linked cases will be updated.'; $lang->testcase->reviewList[0] = 'NO'; $lang->testcase->reviewList[1] = 'YES'; diff --git a/module/testcase/lang/zh-cn.php b/module/testcase/lang/zh-cn.php index aa5a67c606..8983c59994 100644 --- a/module/testcase/lang/zh-cn.php +++ b/module/testcase/lang/zh-cn.php @@ -139,7 +139,6 @@ $lang->testcase->confirmDelete = '您确认要删除该测试用例吗?'; $lang->testcase->confirmBatchDelete = '您确认要批量删除这些测试用例吗?'; $lang->testcase->ditto = '同上'; $lang->testcase->dittoNotice = '该用例与上一用例不属于同一产品!'; -$lang->testcase->haveLinkCase = '此用例存在相关用例,确认后,其相关用例会一并更新。'; $lang->testcase->reviewList[0] = '否'; $lang->testcase->reviewList[1] = '是'; diff --git a/module/testcase/model.php b/module/testcase/model.php index 8f80a7b518..e1f6308d8c 100644 --- a/module/testcase/model.php +++ b/module/testcase/model.php @@ -702,31 +702,6 @@ class testcaseModel extends model } } - /** - * Update linked case. - * - * @param int $linkedCaseID - * @param object $steps - * @access public - * @return bool - */ - public function updateLinkedCases($linkedCaseID, $steps) - { - foreach($linkedCaseID as $caseID) - { - $version = $this->dao->findByID($caseID)->from(TABLE_CASE)->fetch('version'); - $version = $version + 1; - foreach($steps as $step) - { - unset($step->id); - $step->case = $caseID; - $step->version = $version; - $this->dao->insert(TABLE_CASESTEP)->data($step)->autoCheck()->exec(); - } - $this->dao->update(TABLE_CASE)->set('version')->eq($version)->where('id')->eq($caseID)->exec(); - } - } - /** * Review case * From 1bcf0a3b53b331b05df87a4919db54f56b857908 Mon Sep 17 00:00:00 2001 From: Yagami <976204163@qq.com> Date: Tue, 26 Feb 2019 17:09:20 +0800 Subject: [PATCH 279/442] * Fix module icon. --- module/tree/view/browse.html.php | 2 +- module/tree/view/browsetask.html.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/module/tree/view/browse.html.php b/module/tree/view/browse.html.php index 9dbb9a4c3d..732947a31b 100644 --- a/module/tree/view/browse.html.php +++ b/module/tree/view/browse.html.php @@ -204,7 +204,7 @@ $(function() { linkTemplate: '', title: 'tree->delete ?>', - template: '' + template: '' }, subModules: { diff --git a/module/tree/view/browsetask.html.php b/module/tree/view/browsetask.html.php index 6e6c8955eb..255ef6cecb 100644 --- a/module/tree/view/browsetask.html.php +++ b/module/tree/view/browsetask.html.php @@ -162,7 +162,7 @@ $(function() { linkTemplate: '', title: 'tree->delete ?>', - template: '' + template: '' }, subModules: { From c9a7fa9d64cc86d4f779a73cc59e7c0510396d0d Mon Sep 17 00:00:00 2001 From: wangyidong Date: Wed, 27 Feb 2019 09:11:49 +0800 Subject: [PATCH 280/442] * add office doc. --- module/doc/config.php | 2 ++ module/doc/lang/zh-cn.php | 4 ++++ module/doc/view/browse.html.php | 3 ++- module/doc/view/create.html.php | 14 ++++++++++++ module/doc/view/side.html.php | 38 +++++++++++++++++++++------------ 5 files changed, 46 insertions(+), 15 deletions(-) diff --git a/module/doc/config.php b/module/doc/config.php index d74556c33e..b93e631848 100644 --- a/module/doc/config.php +++ b/module/doc/config.php @@ -14,6 +14,8 @@ $config->doc->edit->requiredFields = 'title'; $config->doc->customObjectLibs = 'files,customFiles'; $config->doc->notArticleType = ''; +$config->doc->canCreateOffice = false; +$config->doc->officeTypes = 'word,ppt,excel'; $config->doc->custom = new stdclass(); $config->doc->custom->objectLibs = $config->doc->customObjectLibs; diff --git a/module/doc/lang/zh-cn.php b/module/doc/lang/zh-cn.php index cba554cbf7..c326493948 100644 --- a/module/doc/lang/zh-cn.php +++ b/module/doc/lang/zh-cn.php @@ -122,6 +122,9 @@ $lang->doc->aclList['private'] = '私有'; $lang->doc->typeList['html'] = '富文本'; $lang->doc->typeList['markdown'] = 'Markdown'; $lang->doc->typeList['url'] = '链接'; +$lang->doc->typeList['word'] = 'Word'; +$lang->doc->typeList['ppt'] = 'PPT'; +$lang->doc->typeList['excel'] = 'Excel'; $lang->doc->types['text'] = '文档'; $lang->doc->types['url'] = '链接'; @@ -160,6 +163,7 @@ $lang->doc->errorMainSysLib = "该系统文档库不能删除!"; $lang->doc->accessDenied = "您没有权限访问!"; $lang->doc->versionNotFount = '该版本文档不存在'; $lang->doc->noDoc = '暂时没有文档。'; +$lang->doc->cannotCreateOffice = '对不起,企业版才能创建%s文档。'; $lang->doc->noSearchedDoc = '没有搜索到任何文档。'; $lang->doc->noEditedDoc = '您还没有编辑任何文档。'; $lang->doc->noOpenedDoc = '您还没有创建任何文档。'; diff --git a/module/doc/view/browse.html.php b/module/doc/view/browse.html.php index 1818f8bf90..5d38158ff4 100644 --- a/module/doc/view/browse.html.php +++ b/module/doc/view/browse.html.php @@ -58,7 +58,8 @@ var browseType = '';
          diff --git a/module/doc/view/create.html.php b/module/doc/view/create.html.php index af8b953695..97835583f0 100644 --- a/module/doc/view/create.html.php +++ b/module/doc/view/create.html.php @@ -10,6 +10,19 @@ * @link http://www.zentao.net */ ?> +doc->officeTypes, $docType) !== false and !$config->doc->canCreateOffice):?> + +
          +
          +
          +

          doc->create;?>

          +
          +
          doc->cannotCreateOffice, zget($lang->doc->typeList, $docType));?>
          +
          +
          + + + @@ -98,3 +111,4 @@ doc->noticeAcl['doc']);?> + diff --git a/module/doc/view/side.html.php b/module/doc/view/side.html.php index c45180225a..e45a1ddd20 100644 --- a/module/doc/view/side.html.php +++ b/module/doc/view/side.html.php @@ -169,8 +169,8 @@ if(empty($type)) $type = 'product'; {$lang->doc->orderLib}", '', "id='orderLib' class='text-secondary small " . (($type != 'product' and $type !='project') ? '' : 'hidden') . "'"); - echo html::a('javascript:saveOrder()', " {$lang->save}", '', "id='saveOrder' class='text-primary small hidden'"); + echo html::a('###', " {$lang->doc->orderLib}", '', "id='orderLib' class='text-secondary small " . (($type != 'product' and $type !='project') ? '' : 'hidden') . "' style='padding-left:5px;'"); + echo html::a('javascript:saveOrder()', " {$lang->save}", '', "id='saveOrder' class='text-secondary small hidden' style='padding-left:10px;'"); } ?> @@ -220,23 +220,33 @@ $(function() { var href = $(this).attr('href'); var canOrder = !(href.indexOf('product') > 0 || href.indexOf('project') > 0); - $(this).closest('.side-col').find('.side-footer #orderLib').toggleClass('hidden', !canOrder); - $(this).closest('.side-col').find('.side-footer #saveOrder').toggleClass('hidden', !canOrder); + if(!canOrder) + { + $(this).closest('.side-col').find('.side-footer #orderLib').addClass('hidden'); + $(this).closest('.side-col').find('.side-footer #saveOrder').addClass('hidden'); + } var $orderLib = $(this).closest('.side-col').find('.side-footer #orderLib'); var $saveOrder = $(this).closest('.side-col').find('.side-footer #saveOrder'); - $(this).on('shown.zui.tab', function(e) + + var execute = false; + $(this).on('shown.zui.tab', function() { - var $tabPane = $('#mainRow .side-col .tabs .tab-content .tab-pane.active'); - if($tabPane.find('.libs-group.sort').length > 0 && canOrder) + if(!execute) { - $orderLib.addClass('hidden'); - $saveOrder.removeClass('hidden'); - } - if($tabPane.find('.libs-group.sort').length == 0 && canOrder) - { - $orderLib.removeClass('hidden'); - $saveOrder.addClass('hidden'); + var $tabPane = $('#mainRow .side-col .tabs .tab-content .tab-pane.active'); + if($tabPane.find('.libs-group.sort').length > 0 && canOrder) + { + $orderLib.addClass('hidden'); + $saveOrder.removeClass('hidden'); + execute = true; + } + if($tabPane.find('.libs-group.sort').length == 0 && canOrder) + { + $orderLib.removeClass('hidden'); + $saveOrder.addClass('hidden'); + execute = true; + } } }); }); From 79b35763543bf0c55fa0271d97c2f63c1d057e13 Mon Sep 17 00:00:00 2001 From: Yagami <976204163@qq.com> Date: Wed, 27 Feb 2019 09:23:03 +0800 Subject: [PATCH 281/442] * Finish task #5267. --- module/entry/view/browse.html.php | 2 +- module/testcase/control.php | 23 +++++++++++++++++++++++ module/testcase/lang/en.php | 3 +++ module/testcase/lang/zh-cn.php | 5 ++++- module/testcase/model.php | 3 ++- module/testcase/view/view.html.php | 10 ++++++++-- 6 files changed, 41 insertions(+), 5 deletions(-) diff --git a/module/entry/view/browse.html.php b/module/entry/view/browse.html.php index 320f91005e..844add788a 100644 --- a/module/entry/view/browse.html.php +++ b/module/entry/view/browse.html.php @@ -43,7 +43,7 @@ if(common::hasPriv('entry', 'delete')) { $deleteURL = $this->createLink('entry', 'delete', "entryID=$id&confirm=yes"); - echo html::a("javascript:ajaxDelete(\"$deleteURL\",\"entryList\",confirmDelete)", '', '', "title='{$lang->entry->delete}' class='btn'"); + echo html::a("javascript:ajaxDelete(\"$deleteURL\",\"entryList\",confirmDelete)", '', '', "title='{$lang->entry->delete}' class='btn'"); } ?> diff --git a/module/testcase/control.php b/module/testcase/control.php index ec65893fe0..080750cf8e 100644 --- a/module/testcase/control.php +++ b/module/testcase/control.php @@ -979,6 +979,29 @@ class testcase extends control die(js::locate(inLink('view', "caseID=$caseID"), 'parent')); } + /** + * Confirm libcase changed. + * + * @param int $caseID + * @param int $libcaseID + * @param int $version + * @access public + * @return void + */ + public function confirmLibcaseChange($caseID, $libcaseID, $version) + { + $case = $this->testcase->getById($caseID); + $this->dao->update(TABLE_CASE)->set('version')->eq($version)->where('id')->eq($caseID)->exec(); + $steps = $this->dao->select('*')->from(TABLE_CASESTEP)->where('`case`')->eq($libcaseID)->andWhere('version')->eq($version)->fetchAll(); + foreach($steps as $step) + { + unset($step->id); + $step->case = $caseID; + $this->dao->insert(TABLE_CASESTEP)->data($step)->exec(); + } + die(js::locate(inLink('view', "caseID=$caseID"), 'parent')); + } + /** * Confirm story changes. * diff --git a/module/testcase/lang/en.php b/module/testcase/lang/en.php index a89a21d2e9..ade3b92aef 100644 --- a/module/testcase/lang/en.php +++ b/module/testcase/lang/en.php @@ -64,6 +64,9 @@ $lang->testcase->stepNumberAB = 'S'; $lang->testcase->createBug = 'Convert to Bug'; $lang->testcase->fromModule = 'Source Module'; $lang->testcase->fromCase = 'Source Case'; +$lang->testcase->sync = 'Sync Case'; +$lang->testcase->fromTesttask = 'From Testtask'; +$lang->testcase->fromCaselib = 'From Caselib'; $lang->case = $lang->testcase; // For dao checking using. Because 'case' is a php keywords, so the module name is testcase, table name is still case. $lang->testcase->stepID = 'ID'; diff --git a/module/testcase/lang/zh-cn.php b/module/testcase/lang/zh-cn.php index 8983c59994..83c1cbb27e 100644 --- a/module/testcase/lang/zh-cn.php +++ b/module/testcase/lang/zh-cn.php @@ -54,7 +54,7 @@ $lang->testcase->expect = '预期'; $lang->testcase->allProduct = "所有{$lang->productCommon}"; $lang->testcase->fromBug = '来源Bug'; $lang->testcase->toBug = '生成Bug'; -$lang->testcase->changed = '用例变更'; +$lang->testcase->changed = '原用例更新'; $lang->testcase->bugs = '产生Bug数'; $lang->testcase->bugsAB = 'B'; $lang->testcase->results = '执行结果数'; @@ -64,6 +64,9 @@ $lang->testcase->stepNumberAB = 'S'; $lang->testcase->createBug = '转Bug'; $lang->testcase->fromModule = '来源模块'; $lang->testcase->fromCase = '来源用例'; +$lang->testcase->sync = '同步'; +$lang->testcase->fromTesttask = '测试单用例'; +$lang->testcase->fromCaselib = '用例库用例'; $lang->case = $lang->testcase; // 用于DAO检查时使用。因为case是系统关键字,所以无法定义该模块为case,只能使用testcase,但表还是使用的case。 $lang->testcase->stepID = '编号'; diff --git a/module/testcase/model.php b/module/testcase/model.php index e1f6308d8c..1b36ab2934 100644 --- a/module/testcase/model.php +++ b/module/testcase/model.php @@ -395,7 +395,8 @@ class testcaseModel extends model $case->storyStatus = $story->status; $case->latestStoryVersion = $story->version; } - if($case->fromBug) $case->fromBugTitle = $this->dao->findById($case->fromBug)->from(TABLE_BUG)->fields('title')->fetch('title'); + if($case->fromBug) $case->fromBugTitle = $this->dao->findById($case->fromBug)->from(TABLE_BUG)->fields('title')->fetch('title'); + if($case->fromCaseID) $case->libCaseVersion = $this->dao->findById($case->fromCaseID)->from(TABLE_CASE)->fetch('version'); $case->toBugs = array(); $toBugs = $this->dao->select('id, title')->from(TABLE_BUG)->where('`case`')->eq($caseID)->fetchAll(); diff --git a/module/testcase/view/view.html.php b/module/testcase/view/view.html.php index 14d5d70274..d3e85dcef7 100644 --- a/module/testcase/view/view.html.php +++ b/module/testcase/view/view.html.php @@ -218,8 +218,14 @@ echo $lang->testcase->statusList[$case->status]; if($case->version > $case->currentVersion and $from == 'testtask') { - echo "({$lang->testcase->changed} "; - echo html::a($this->createLink('testcase', 'confirmchange', "caseID=$case->id"), $lang->confirm, 'hiddenwin', "class='btn btn-mini btn-info'"); + echo "(testcase->fromTesttask}>{$lang->testcase->changed} "; + echo html::a($this->createLink('testcase', 'confirmchange', "caseID=$case->id"), $lang->testcase->sync, 'hiddenwin', "class='btn btn-mini btn-info' title={$lang->testcase->fromTesttask}"); + echo ")"; + } + if(isset($case->libCaseVersion) and $case->libCaseVersion > $case->version and $from != 'testtask') + { + echo "(testcase->fromCaselib}>{$lang->testcase->changed} "; + echo html::a($this->createLink('testcase', 'confirmLibcaseChange', "caseID=$case->id&libcaseID=$case->fromCaseID&version=$case->libCaseVersion"), $lang->testcase->sync, 'hiddenwin', "class='btn btn-mini btn-info' title={$lang->testcase->fromCaselib}"); echo ")"; } ?> From 02a52aec5abc7a0f7ed9665ca6898bc9e870c173 Mon Sep 17 00:00:00 2001 From: Yagami <976204163@qq.com> Date: Wed, 27 Feb 2019 09:29:27 +0800 Subject: [PATCH 282/442] * Fix button. --- module/testsuite/view/libview.html.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/testsuite/view/libview.html.php b/module/testsuite/view/libview.html.php index a32084d240..0c6abe0387 100644 --- a/module/testsuite/view/libview.html.php +++ b/module/testsuite/view/libview.html.php @@ -43,7 +43,7 @@ { echo "
          "; common::printIcon('testsuite', 'edit', "libID=$lib->id"); - common::printIcon('testsuite', 'delete', "libID=$lib->id", '', 'button', '', 'hiddenwin'); + common::printIcon('testsuite', 'delete', "libID=$lib->id", '', 'button', 'trash', 'hiddenwin'); } ?>
          From 8f1b0fe119d58c19f9b24e467b245172dadc8cf2 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Wed, 27 Feb 2019 09:43:14 +0800 Subject: [PATCH 283/442] * adjust table width for en lang. --- module/bug/view/view.html.php | 6 ++++-- module/doc/lang/en.php | 2 +- module/story/view/view.html.php | 10 ++++++---- module/task/view/view.html.php | 6 ++++-- module/testcase/view/view.html.php | 13 ++++++++----- 5 files changed, 23 insertions(+), 14 deletions(-) diff --git a/module/bug/view/view.html.php b/module/bug/view/view.html.php index 72eeaaabb8..6892d99027 100644 --- a/module/bug/view/view.html.php +++ b/module/bug/view/view.html.php @@ -99,10 +99,11 @@
          + getClientLang() == 'en' ? 'w-80px' : 'w-70px';?> - + session->currentProductType != 'normal'):?> @@ -267,10 +268,11 @@
          + getClientLang() == 'en' ? 'w-100px' : 'w-90px';?>
          bug->product;?>bug->product;?> product", $productName)) echo $productName;?>
          - + diff --git a/module/doc/lang/en.php b/module/doc/lang/en.php index aee319e855..6770736a9c 100644 --- a/module/doc/lang/en.php +++ b/module/doc/lang/en.php @@ -78,7 +78,7 @@ $lang->doc->addType = 'Add'; $lang->doc->childType = 'Child'; $lang->doc->collect = 'Add Favorites'; $lang->doc->cancelCollection = 'Remove Favorites'; -$lang->doc->deleteFile = 'Detele File' +$lang->doc->deleteFile = 'Detele File'; $lang->doc->libName = 'Name'; $lang->doc->libType = 'Category'; diff --git a/module/story/view/view.html.php b/module/story/view/view.html.php index 8b20cd5213..8208aaaac6 100644 --- a/module/story/view/view.html.php +++ b/module/story/view/view.html.php @@ -228,10 +228,11 @@
          bug->openedBy;?>bug->openedBy;?> openedBy) . $lang->at . $bug->openedDate;?>
          + getClientLang() == 'en' ? 'w-90px' : 'w-70px';?> - + @@ -309,12 +310,13 @@
          + getClientLang() == 'en' ? 'w-120px' : 'w-70px';?>
          story->openedBy;?>story->openedBy;?> openedBy] . $lang->at . $story->openedDate;?>
          global->flow != 'onlyStory'):?> - + - + - +
          story->legendFromBug;?>story->legendFromBug;?>
            id $fromBug->title'>" . html::a($this->createLink('bug', 'view', "bugID=$fromBug->id", '', true), "#$fromBug->id $fromBug->title", '', "class='iframe' data-width='80%'") . '';?> @@ -323,7 +325,7 @@
          story->legendBugs;?>story->legendBugs;?>
          story->legendLinkStories;?>story->legendLinkStories;?>
            + getClientLang() == 'en' ? 'w-100px' : 'w-70px';?> - + @@ -337,8 +338,9 @@ task->legendEffort;?>
            task->openedBy;?>task->openedBy;?> openedBy ? zget($users, $task->openedBy, $task->openedBy) . $lang->at . $task->openedDate : $lang->noData;?>
            + getClientLang() == 'en' ? 'w-90px' : 'w-70px';?> - + diff --git a/module/testcase/view/view.html.php b/module/testcase/view/view.html.php index 14d5d70274..8b14a116ff 100644 --- a/module/testcase/view/view.html.php +++ b/module/testcase/view/view.html.php @@ -128,15 +128,16 @@
            testcase->legendBasicInfo;?>
            + getClientLang() == 'en' ? 'w-90px' : 'w-60px';?>
            task->estStarted;?>task->estStarted;?> estStarted;?>
            - + - + session->currentProductType != 'normal'):?> @@ -264,16 +265,17 @@
            testcase->legendLinkBugs;?>
            + getClientLang() == 'en' ? 'w-90px' : 'w-60px';?>
            testcase->lib;?>testcase->lib;?> lib", $libName)) echo $libName;?>
            testcase->product;?>testcase->product;?> product", $productName)) echo $productName;?>
            fromBug):?> - + toBugs):?> - + + type == 'product' or $lib->type == 'project'):?> + + + diff --git a/module/testsuite/js/createcase.js b/module/testsuite/js/createcase.js index c059132304..af418f5064 100644 --- a/module/testsuite/js/createcase.js +++ b/module/testsuite/js/createcase.js @@ -162,4 +162,12 @@ $(function() { $('[data-toggle=tooltip]').tooltip(); initSteps(); + + $('#pri').on('change', function() + { + var $select = $(this); + var $selector = $select.closest('.pri-selector'); + var value = $select.val(); + $selector.find('.pri-text').html('' + value + ''); + }); }) diff --git a/module/upgrade/model.php b/module/upgrade/model.php index 4ee452cee2..b533dac6e6 100644 --- a/module/upgrade/model.php +++ b/module/upgrade/model.php @@ -363,6 +363,10 @@ class upgradeModel extends model $this->dao->update(TABLE_CONFIG)->set('value')->eq('off')->where('`key`')->eq('isHttps')->andWhere('`section`')->eq('xuanxuan')->andWhere('`value`')->eq('0')->exec(); $this->dao->update(TABLE_CONFIG)->set('value')->eq('on')->where('`key`')->eq('isHttps')->andWhere('`section`')->eq('xuanxuan')->andWhere('`value`')->eq('1')->exec(); } + case '11_2': + $this->saveLogs('Execute 11_2'); + $this->execSQL($this->getUpgradeFile('11.2')); + $this->processDocLibAcl(); } $this->deletePatch(); @@ -486,11 +490,13 @@ class upgradeModel extends model $confirmContent .= file_get_contents($this->app->getAppRoot() . 'db' . DS . 'upgradexuanxuan2.2.0.sql'); case '11_0': case '11_1': + $confirmContent .= file_get_contents($this->getUpgradeFile('11.1')); if(!isset($this->config->isINT) or !($this->config->isINT)) { $xuanxuanSql = $this->app->getAppRoot() . 'db' . DS . 'upgradexuanxuan2.3.0.sql'; $confirmContent .= file_get_contents($xuanxuanSql); } + case '11_2': $confirmContent .= file_get_contents($this->getUpgradeFile('11.2')); } return str_replace('zt_', $this->config->db->prefix, $confirmContent); } @@ -2966,6 +2972,18 @@ class upgradeModel extends model return true; } + /** + * Process doc lib acl. + * + * @access public + * @return void + */ + public function processDocLibAcl() + { + $this->dao->update(TABLE_DOCLIB)->set('acl')->eq('default')->where('type')->in('product,project')->andWhere('acl')->in('open,private')->exec(); + return !dao::isError(); + } + /** * Save Logs. * From 9010446b9eab9465b7477df7987a3ef458f77014 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Wed, 27 Feb 2019 10:41:08 +0800 Subject: [PATCH 285/442] * adjust for get git author. --- module/git/model.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/git/model.php b/module/git/model.php index 5f4efab6f7..3ac2d00fbf 100644 --- a/module/git/model.php +++ b/module/git/model.php @@ -324,7 +324,7 @@ class gitModel extends model list($hash, $account, $date) = $log; $account = preg_replace('/^Author:/', '', $account); - $account = trim(preg_replace('/<[\w\-\.]+@[\w\-]+>/', '', $account)); + $account = trim(preg_replace('/<[a-zA-Z0-9_\-\.]+@[a-zA-Z0-9_\-\.]+>/', '', $account)); $date = trim(preg_replace('/^Date:/', '', $date)); $count = count($log); From 230f1fd18d0c819cf4d618933542481122a16f69 Mon Sep 17 00:00:00 2001 From: chenfeiCF Date: Wed, 27 Feb 2019 10:49:29 +0800 Subject: [PATCH 286/442] * Show acl tips when create doc lib. --- module/doc/js/createlib.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/doc/js/createlib.js b/module/doc/js/createlib.js index 035e419372..511c265d97 100644 --- a/module/doc/js/createlib.js +++ b/module/doc/js/createlib.js @@ -5,7 +5,7 @@ $(function() var libType = $(this).val(); changeByLibType(libType); }) - changeByLibType($('input[name="type"]').val()); + changeByLibType($('input[name="type"]:checked').val()); toggleAcl($('form [name=acl]:checked').val(), 'lib'); }); From e3f51c9a19c3ce8ff912a59bca654b0e30fe2101 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Wed, 27 Feb 2019 10:53:30 +0800 Subject: [PATCH 287/442] * adjust for copy title. --- module/task/js/batchcreate.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/task/js/batchcreate.js b/module/task/js/batchcreate.js index f27af226eb..89f43745aa 100755 --- a/module/task/js/batchcreate.js +++ b/module/task/js/batchcreate.js @@ -65,7 +65,7 @@ function copyStoryTitle(num) $('#name\\[' + num + '\\]').val(storyTitle); $('#estimate\\[' + num + '\\]').val($('#storyEstimate' + num).val()); - $('#desc\\[' + num + '\\]').val(($('#storyDesc' + num).val()).replace(/<[^>]+>/g,'').replace(/(\n)+\n/g, "\n").replace(/^\n/g, '')); + $('#desc\\[' + num + '\\]').val(($('#storyDesc' + num).val()).replace(/<[^>]+>/g,'').replace(/(\n)+\n/g, "\n").replace(/^\n/g, '').replace(/\t/g, '')); var storyPri = $('#storyPri' + num).val(); if(storyPri == 0) $('#pri' + num ).val('3'); From ee7a90ed2b2722f74ae17f6d677159fe9292e798 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Wed, 27 Feb 2019 11:10:24 +0800 Subject: [PATCH 288/442] * adjust for zh-cn lang. --- module/doc/lang/zh-cn.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/doc/lang/zh-cn.php b/module/doc/lang/zh-cn.php index fb8cefbd31..c0184f230f 100644 --- a/module/doc/lang/zh-cn.php +++ b/module/doc/lang/zh-cn.php @@ -163,7 +163,7 @@ $lang->doc->errorMainSysLib = "该系统文档库不能删除!"; $lang->doc->accessDenied = "您没有权限访问!"; $lang->doc->versionNotFount = '该版本文档不存在'; $lang->doc->noDoc = '暂时没有文档。'; -$lang->doc->cannotCreateOffice = '对不起,企业版才能创建%s文档。'; +$lang->doc->cannotCreateOffice = '

            对不起,企业版才能创建%s文档。

            试用企业版,请联系我们:4006-8899-23   0532-86893032。

            '; $lang->doc->noSearchedDoc = '没有搜索到任何文档。'; $lang->doc->noEditedDoc = '您还没有编辑任何文档。'; $lang->doc->noOpenedDoc = '您还没有创建任何文档。'; From da31d14cbfa3c2fff6db99d78b6c07dcfdc57795 Mon Sep 17 00:00:00 2001 From: chenfeiCF Date: Wed, 27 Feb 2019 11:13:57 +0800 Subject: [PATCH 289/442] * Adjust lang of doc. --- module/doc/lang/en.php | 20 ++++++++++++++++++++ module/doc/lang/zh-cn.php | 8 ++++---- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/module/doc/lang/en.php b/module/doc/lang/en.php index 6770736a9c..78a09bcba0 100644 --- a/module/doc/lang/en.php +++ b/module/doc/lang/en.php @@ -119,6 +119,13 @@ $lang->doc->aclList['open'] = 'Public'; $lang->doc->aclList['custom'] = 'Custom'; $lang->doc->aclList['private'] = 'Private'; +$lang->doc->typeList['html'] = 'Html'; +$lang->doc->typeList['markdown'] = 'Markdown'; +$lang->doc->typeList['url'] = 'Url'; +$lang->doc->typeList['word'] = 'Word'; +$lang->doc->typeList['ppt'] = 'PPT'; +$lang->doc->typeList['excel'] = 'Excel'; + $lang->doc->types['text'] = 'Text'; $lang->doc->types['url'] = 'URL'; @@ -142,6 +149,7 @@ $lang->doc->fastMenuIconList['collectedbyme'] = 'icon-folder-star'; $lang->doc->customObjectLibs['files'] = 'Show File Library'; $lang->doc->customObjectLibs['customFiles'] = 'Show Custom Library'; +$lang->doc->orderLib = 'Library order settings'; $lang->doc->customShowLibs = 'Library display settings'; $lang->doc->customShowLibsList['zero'] = 'Display empty library'; $lang->doc->customShowLibsList['unclosed'] = 'Only display projects that are not closed'; @@ -160,6 +168,18 @@ $lang->doc->noEditedDoc = 'You have not edited any document.'; $lang->doc->noOpenedDoc = 'You have not created any document.'; $lang->doc->noCollectedDoc = 'You have not collected any document.'; +$lang->doc->noticeAcl['lib']['product']['default'] = 'Users with privileges to access the selected products have access to it.'; +$lang->doc->noticeAcl['lib']['product']['custom'] = 'Users with privileges to access the selected products or users in the whiltelist have access to visit it.'; +$lang->doc->noticeAcl['lib']['project']['default'] = 'Users with privileges to access the selected projects have access to it.'; +$lang->doc->noticeAcl['lib']['project']['custom'] = 'Users with privileges to access the selected projects or users in the whiltelist have access to it.'; +$lang->doc->noticeAcl['lib']['custom']['open'] = 'All users have access to it.'; +$lang->doc->noticeAcl['lib']['custom']['custom'] = 'Users in the whitelist have access to it.'; +$lang->doc->noticeAcl['lib']['custom']['private'] = 'Only the one who created it has access to it.'; + +$lang->doc->noticeAcl['doc']['open'] = 'Users with privileges to access the doc lib which the doc belongs to have access to it.'; +$lang->doc->noticeAcl['doc']['custom'] = 'Users in the whiltelist have access to visit it.'; +$lang->doc->noticeAcl['doc']['private'] = 'Only the one who created it has access to it.'; + $lang->doc->placeholder = new stdclass(); $lang->doc->placeholder->url = 'Url'; diff --git a/module/doc/lang/zh-cn.php b/module/doc/lang/zh-cn.php index c0184f230f..41e2293a1a 100644 --- a/module/doc/lang/zh-cn.php +++ b/module/doc/lang/zh-cn.php @@ -149,8 +149,8 @@ $lang->doc->fastMenuIconList['collectedbyme'] = 'icon-folder-star'; $lang->doc->customObjectLibs['files'] = '显示附件库'; $lang->doc->customObjectLibs['customFiles'] = '显示自定义文档库'; -$lang->doc->orderLib = '文档库排序'; -$lang->doc->customShowLibs = '显示设置'; +$lang->doc->orderLib = '文档库排序'; +$lang->doc->customShowLibs = '显示设置'; $lang->doc->customShowLibsList['zero'] = '显示空文档的库'; $lang->doc->customShowLibsList['unclosed'] = '只显示未关闭的项目'; @@ -175,11 +175,11 @@ $lang->doc->noticeAcl['lib']['project']['default'] = '有所选项目访问权 $lang->doc->noticeAcl['lib']['project']['custom'] = '有所选项目访问权限或白名单里的用户可以访问。'; $lang->doc->noticeAcl['lib']['custom']['open'] = '所有人都可以访问。'; $lang->doc->noticeAcl['lib']['custom']['custom'] = '白名单的用户可以访问。'; -$lang->doc->noticeAcl['lib']['custom']['private'] = '只有创建人可以访问。'; +$lang->doc->noticeAcl['lib']['custom']['private'] = '只有创建者自己可以访问。'; $lang->doc->noticeAcl['doc']['open'] = '有文档所属文档库访问权限的,都可以访问。'; $lang->doc->noticeAcl['doc']['custom'] = '白名单的用户可以访问。'; -$lang->doc->noticeAcl['doc']['private'] = '只有自己可以访问。'; +$lang->doc->noticeAcl['doc']['private'] = '只有创建者自己可以访问。'; $lang->doc->placeholder = new stdclass(); $lang->doc->placeholder->url = '相应的链接地址'; From c39d922321f32fb13b4de3c81ca36ab411f265ed Mon Sep 17 00:00:00 2001 From: wangyidong Date: Wed, 27 Feb 2019 11:15:34 +0800 Subject: [PATCH 290/442] * adjust for create doc. --- module/doc/view/browsebygrid.html.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/module/doc/view/browsebygrid.html.php b/module/doc/view/browsebygrid.html.php index 087dc53bb4..fcb2ec714a 100644 --- a/module/doc/view/browsebygrid.html.php +++ b/module/doc/view/browsebygrid.html.php @@ -30,7 +30,8 @@ From 050e369d2a001604f4e53939dcdaba599a95407c Mon Sep 17 00:00:00 2001 From: wangyidong Date: Wed, 27 Feb 2019 12:03:05 +0800 Subject: [PATCH 291/442] * adjust for upgrade. --- VERSION | 2 +- config/config.php | 2 +- db/standard/zentao11.2.sql | 53 -- db/standard/zentao11.3.sql | 903 ++++++++++++++++++++++++++++++++ db/zentao.sql | 3 +- doc/CHANGELOG | 48 ++ module/common/lang/en.php | 3 +- module/custom/lang/en.php | 8 +- module/group/lang/resource.php | 3 + module/misc/lang/en.php | 1 + module/misc/lang/zh-cn.php | 3 + module/testcase/lang/en.php | 1 + module/testcase/lang/zh-cn.php | 1 + module/upgrade/lang/version.php | 1 + module/upgrade/model.php | 1 + module/user/lang/en.php | 17 +- 16 files changed, 986 insertions(+), 64 deletions(-) create mode 100644 db/standard/zentao11.3.sql diff --git a/VERSION b/VERSION index 257b829d27..e1b8f601a2 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -11.2.stable +11.3.stable diff --git a/config/config.php b/config/config.php index 487ba25ffd..1c1166de0d 100644 --- a/config/config.php +++ b/config/config.php @@ -16,7 +16,7 @@ if(!class_exists('config')){class config{}} if(!function_exists('getWebRoot')){function getWebRoot(){}} /* 基本设置。Basic settings. */ -$config->version = '11.2'; // ZenTaoPHP的版本。 The version of ZenTaoPHP. Don't change it. +$config->version = '11.3'; // ZenTaoPHP的版本。 The version of ZenTaoPHP. Don't change it. $config->charset = 'UTF-8'; // ZenTaoPHP的编码。 The encoding of ZenTaoPHP. $config->cookieLife = time() + 2592000; // Cookie的生存时间。The cookie life time. $config->timezone = 'Asia/Shanghai'; // 时区设置。 The time zone setting, for more see http://www.php.net/manual/en/timezones.php. diff --git a/db/standard/zentao11.2.sql b/db/standard/zentao11.2.sql index d99f028edc..c7a14b36fc 100644 --- a/db/standard/zentao11.2.sql +++ b/db/standard/zentao11.2.sql @@ -1,4 +1,3 @@ -DROP TABLE IF EXISTS `zt_action`; CREATE TABLE `zt_action` ( `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `objectType` varchar(30) NOT NULL DEFAULT '', @@ -17,7 +16,6 @@ CREATE TABLE `zt_action` ( KEY `project` (`project`), KEY `objectID` (`objectID`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -DROP TABLE IF EXISTS `zt_block`; CREATE TABLE `zt_block` ( `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `account` char(30) NOT NULL, @@ -34,7 +32,6 @@ CREATE TABLE `zt_block` ( UNIQUE KEY `accountModuleOrder` (`account`,`module`,`order`), KEY `account` (`account`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -DROP TABLE IF EXISTS `zt_branch`; CREATE TABLE `zt_branch` ( `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `product` mediumint(8) unsigned NOT NULL, @@ -44,7 +41,6 @@ CREATE TABLE `zt_branch` ( PRIMARY KEY (`id`), KEY `product` (`product`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -DROP TABLE IF EXISTS `zt_bug`; CREATE TABLE `zt_bug` ( `id` mediumint(8) NOT NULL AUTO_INCREMENT, `product` mediumint(8) unsigned NOT NULL DEFAULT '0', @@ -103,7 +99,6 @@ CREATE TABLE `zt_bug` ( KEY `case` (`case`), KEY `assignedTo` (`assignedTo`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -DROP TABLE IF EXISTS `zt_build`; CREATE TABLE `zt_build` ( `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `product` mediumint(8) unsigned NOT NULL DEFAULT '0', @@ -122,7 +117,6 @@ CREATE TABLE `zt_build` ( KEY `product` (`product`), KEY `project` (`project`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -DROP TABLE IF EXISTS `zt_burn`; CREATE TABLE `zt_burn` ( `project` mediumint(8) unsigned NOT NULL, `date` date NOT NULL, @@ -131,7 +125,6 @@ CREATE TABLE `zt_burn` ( `consumed` float NOT NULL, PRIMARY KEY (`project`,`date`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -DROP TABLE IF EXISTS `zt_case`; CREATE TABLE `zt_case` ( `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `product` mediumint(8) unsigned NOT NULL DEFAULT '0', @@ -175,7 +168,6 @@ CREATE TABLE `zt_case` ( KEY `story` (`story`), KEY `module` (`module`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -DROP TABLE IF EXISTS `zt_casestep`; CREATE TABLE `zt_casestep` ( `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `parent` mediumint(8) unsigned NOT NULL DEFAULT '0', @@ -188,7 +180,6 @@ CREATE TABLE `zt_casestep` ( KEY `case` (`case`), KEY `version` (`version`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -DROP TABLE IF EXISTS `zt_company`; CREATE TABLE `zt_company` ( `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `name` char(120) DEFAULT NULL, @@ -203,7 +194,6 @@ CREATE TABLE `zt_company` ( `deleted` enum('0','1') NOT NULL DEFAULT '0', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -DROP TABLE IF EXISTS `zt_config`; CREATE TABLE `zt_config` ( `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `owner` char(30) NOT NULL DEFAULT '', @@ -214,7 +204,6 @@ CREATE TABLE `zt_config` ( PRIMARY KEY (`id`), UNIQUE KEY `unique` (`owner`,`module`,`section`,`key`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -DROP TABLE IF EXISTS `zt_cron`; CREATE TABLE `zt_cron` ( `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `m` varchar(20) NOT NULL, @@ -231,7 +220,6 @@ CREATE TABLE `zt_cron` ( PRIMARY KEY (`id`), KEY `lastTime` (`lastTime`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -DROP TABLE IF EXISTS `zt_dept`; CREATE TABLE `zt_dept` ( `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `name` char(60) NOT NULL, @@ -246,7 +234,6 @@ CREATE TABLE `zt_dept` ( KEY `parent` (`parent`), KEY `path` (`path`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -DROP TABLE IF EXISTS `zt_doc`; CREATE TABLE `zt_doc` ( `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `product` mediumint(8) unsigned NOT NULL, @@ -272,7 +259,6 @@ CREATE TABLE `zt_doc` ( KEY `project` (`project`), KEY `lib` (`lib`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -DROP TABLE IF EXISTS `zt_doccontent`; CREATE TABLE `zt_doccontent` ( `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `doc` mediumint(8) unsigned NOT NULL, @@ -285,7 +271,6 @@ CREATE TABLE `zt_doccontent` ( PRIMARY KEY (`id`), UNIQUE KEY `doc_version` (`doc`,`version`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -DROP TABLE IF EXISTS `zt_doclib`; CREATE TABLE `zt_doclib` ( `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT, `type` varchar(30) NOT NULL, @@ -303,7 +288,6 @@ CREATE TABLE `zt_doclib` ( KEY `product` (`product`), KEY `project` (`project`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -DROP TABLE IF EXISTS `zt_effort`; CREATE TABLE `zt_effort` ( `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `user` char(30) NOT NULL DEFAULT '', @@ -319,7 +303,6 @@ CREATE TABLE `zt_effort` ( PRIMARY KEY (`id`), KEY `user` (`user`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -DROP TABLE IF EXISTS `zt_entry`; CREATE TABLE `zt_entry` ( `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(50) NOT NULL, @@ -335,7 +318,6 @@ CREATE TABLE `zt_entry` ( `deleted` enum('0','1') NOT NULL DEFAULT '0', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -DROP TABLE IF EXISTS `zt_extension`; CREATE TABLE `zt_extension` ( `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(150) NOT NULL, @@ -357,7 +339,6 @@ CREATE TABLE `zt_extension` ( KEY `name` (`name`), KEY `installedTime` (`installedTime`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -DROP TABLE IF EXISTS `zt_file`; CREATE TABLE `zt_file` ( `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `pathname` char(50) NOT NULL, @@ -375,7 +356,6 @@ CREATE TABLE `zt_file` ( KEY `objectType` (`objectType`), KEY `objectID` (`objectID`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -DROP TABLE IF EXISTS `zt_group`; CREATE TABLE `zt_group` ( `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `name` char(30) NOT NULL, @@ -384,14 +364,12 @@ CREATE TABLE `zt_group` ( `acl` text, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -DROP TABLE IF EXISTS `zt_grouppriv`; CREATE TABLE `zt_grouppriv` ( `group` mediumint(8) unsigned NOT NULL DEFAULT '0', `module` char(30) NOT NULL DEFAULT '', `method` char(30) NOT NULL DEFAULT '', UNIQUE KEY `group` (`group`,`module`,`method`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -DROP TABLE IF EXISTS `zt_history`; CREATE TABLE `zt_history` ( `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `action` mediumint(8) unsigned NOT NULL DEFAULT '0', @@ -402,7 +380,6 @@ CREATE TABLE `zt_history` ( PRIMARY KEY (`id`), KEY `action` (`action`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -DROP TABLE IF EXISTS `zt_lang`; CREATE TABLE `zt_lang` ( `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `lang` varchar(30) NOT NULL, @@ -414,7 +391,6 @@ CREATE TABLE `zt_lang` ( PRIMARY KEY (`id`), UNIQUE KEY `lang` (`lang`,`module`,`section`,`key`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -DROP TABLE IF EXISTS `zt_log`; CREATE TABLE `zt_log` ( `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `objectType` varchar(30) NOT NULL, @@ -429,7 +405,6 @@ CREATE TABLE `zt_log` ( KEY `objectType` (`objectType`), KEY `obejctID` (`objectID`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -DROP TABLE IF EXISTS `zt_module`; CREATE TABLE `zt_module` ( `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `root` mediumint(8) unsigned NOT NULL DEFAULT '0', @@ -449,7 +424,6 @@ CREATE TABLE `zt_module` ( KEY `type` (`type`), KEY `path` (`path`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -DROP TABLE IF EXISTS `zt_notify`; CREATE TABLE `zt_notify` ( `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `objectType` varchar(50) NOT NULL, @@ -466,7 +440,6 @@ CREATE TABLE `zt_notify` ( `failReason` text NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -DROP TABLE IF EXISTS `zt_product`; CREATE TABLE `zt_product` ( `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(90) NOT NULL, @@ -488,7 +461,6 @@ CREATE TABLE `zt_product` ( PRIMARY KEY (`id`), KEY `order` (`order`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -DROP TABLE IF EXISTS `zt_productplan`; CREATE TABLE `zt_productplan` ( `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `product` mediumint(8) unsigned NOT NULL, @@ -503,7 +475,6 @@ CREATE TABLE `zt_productplan` ( KEY `product` (`product`), KEY `end` (`end`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -DROP TABLE IF EXISTS `zt_project`; CREATE TABLE `zt_project` ( `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `isCat` enum('1','0') NOT NULL DEFAULT '0', @@ -542,7 +513,6 @@ CREATE TABLE `zt_project` ( KEY `status` (`status`), KEY `order` (`order`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -DROP TABLE IF EXISTS `zt_projectproduct`; CREATE TABLE `zt_projectproduct` ( `project` mediumint(8) unsigned NOT NULL, `product` mediumint(8) unsigned NOT NULL, @@ -550,7 +520,6 @@ CREATE TABLE `zt_projectproduct` ( `plan` mediumint(8) unsigned NOT NULL, PRIMARY KEY (`project`,`product`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -DROP TABLE IF EXISTS `zt_projectstory`; CREATE TABLE `zt_projectstory` ( `project` mediumint(8) unsigned NOT NULL DEFAULT '0', `product` mediumint(8) unsigned NOT NULL, @@ -559,7 +528,6 @@ CREATE TABLE `zt_projectstory` ( `order` smallint(6) unsigned NOT NULL, UNIQUE KEY `project` (`project`,`story`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -DROP TABLE IF EXISTS `zt_release`; CREATE TABLE `zt_release` ( `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `product` mediumint(8) unsigned NOT NULL DEFAULT '0', @@ -578,7 +546,6 @@ CREATE TABLE `zt_release` ( KEY `product` (`product`), KEY `build` (`build`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -DROP TABLE IF EXISTS `zt_score`; CREATE TABLE `zt_score` ( `id` bigint(12) unsigned NOT NULL AUTO_INCREMENT, `account` varchar(30) NOT NULL, @@ -594,7 +561,6 @@ CREATE TABLE `zt_score` ( KEY `model` (`module`), KEY `method` (`method`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -DROP TABLE IF EXISTS `zt_story`; CREATE TABLE `zt_story` ( `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `product` mediumint(8) unsigned NOT NULL DEFAULT '0', @@ -635,7 +601,6 @@ CREATE TABLE `zt_story` ( KEY `status` (`status`), KEY `assignedTo` (`assignedTo`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -DROP TABLE IF EXISTS `zt_storyspec`; CREATE TABLE `zt_storyspec` ( `story` mediumint(9) NOT NULL, `version` smallint(6) NOT NULL, @@ -644,14 +609,12 @@ CREATE TABLE `zt_storyspec` ( `verify` text NOT NULL, UNIQUE KEY `story` (`story`,`version`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -DROP TABLE IF EXISTS `zt_storystage`; CREATE TABLE `zt_storystage` ( `story` mediumint(8) unsigned NOT NULL, `branch` mediumint(8) unsigned NOT NULL, `stage` varchar(50) NOT NULL, KEY `story` (`story`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -DROP TABLE IF EXISTS `zt_suitecase`; CREATE TABLE `zt_suitecase` ( `suite` mediumint(8) unsigned NOT NULL, `product` mediumint(8) unsigned NOT NULL, @@ -659,7 +622,6 @@ CREATE TABLE `zt_suitecase` ( `version` smallint(5) unsigned NOT NULL, UNIQUE KEY `suitecase` (`suite`,`case`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -DROP TABLE IF EXISTS `zt_task`; CREATE TABLE `zt_task` ( `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `parent` mediumint(8) NOT NULL DEFAULT '0', @@ -701,7 +663,6 @@ CREATE TABLE `zt_task` ( KEY `story` (`story`), KEY `assignedTo` (`assignedTo`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -DROP TABLE IF EXISTS `zt_taskestimate`; CREATE TABLE `zt_taskestimate` ( `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `task` mediumint(8) unsigned NOT NULL DEFAULT '0', @@ -713,7 +674,6 @@ CREATE TABLE `zt_taskestimate` ( PRIMARY KEY (`id`), KEY `task` (`task`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -DROP TABLE IF EXISTS `zt_team`; CREATE TABLE `zt_team` ( `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `root` mediumint(8) unsigned NOT NULL DEFAULT '0', @@ -731,7 +691,6 @@ CREATE TABLE `zt_team` ( PRIMARY KEY (`id`), UNIQUE KEY `team` (`root`,`type`,`account`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -DROP TABLE IF EXISTS `zt_testreport`; CREATE TABLE `zt_testreport` ( `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `product` mediumint(8) unsigned NOT NULL, @@ -754,7 +713,6 @@ CREATE TABLE `zt_testreport` ( `deleted` enum('0','1') NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -DROP TABLE IF EXISTS `zt_testresult`; CREATE TABLE `zt_testresult` ( `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `run` mediumint(8) unsigned NOT NULL, @@ -769,7 +727,6 @@ CREATE TABLE `zt_testresult` ( KEY `version` (`version`), KEY `run` (`run`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -DROP TABLE IF EXISTS `zt_testrun`; CREATE TABLE `zt_testrun` ( `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `task` mediumint(8) unsigned NOT NULL DEFAULT '0', @@ -783,7 +740,6 @@ CREATE TABLE `zt_testrun` ( PRIMARY KEY (`id`), UNIQUE KEY `task` (`task`,`case`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -DROP TABLE IF EXISTS `zt_testsuite`; CREATE TABLE `zt_testsuite` ( `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `product` mediumint(8) unsigned NOT NULL, @@ -798,7 +754,6 @@ CREATE TABLE `zt_testsuite` ( PRIMARY KEY (`id`), KEY `product` (`product`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -DROP TABLE IF EXISTS `zt_testtask`; CREATE TABLE `zt_testtask` ( `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `name` char(90) NOT NULL, @@ -818,7 +773,6 @@ CREATE TABLE `zt_testtask` ( KEY `product` (`product`), KEY `build` (`build`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -DROP TABLE IF EXISTS `zt_todo`; CREATE TABLE `zt_todo` ( `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `account` char(30) NOT NULL, @@ -847,7 +801,6 @@ CREATE TABLE `zt_todo` ( KEY `finishedBy` (`finishedBy`), KEY `date` (`date`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -DROP TABLE IF EXISTS `zt_user`; CREATE TABLE `zt_user` ( `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `dept` mediumint(8) unsigned NOT NULL DEFAULT '0', @@ -886,7 +839,6 @@ CREATE TABLE `zt_user` ( KEY `email` (`email`), KEY `commiter` (`commiter`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -DROP TABLE IF EXISTS `zt_usercontact`; CREATE TABLE `zt_usercontact` ( `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `account` char(30) NOT NULL, @@ -895,13 +847,11 @@ CREATE TABLE `zt_usercontact` ( PRIMARY KEY (`id`), KEY `account` (`account`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -DROP TABLE IF EXISTS `zt_usergroup`; CREATE TABLE `zt_usergroup` ( `account` char(30) NOT NULL DEFAULT '', `group` mediumint(8) unsigned NOT NULL DEFAULT '0', UNIQUE KEY `account` (`account`,`group`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -DROP TABLE IF EXISTS `zt_userquery`; CREATE TABLE `zt_userquery` ( `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `account` char(30) NOT NULL, @@ -914,7 +864,6 @@ CREATE TABLE `zt_userquery` ( KEY `account` (`account`), KEY `module` (`module`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -DROP TABLE IF EXISTS `zt_usertpl`; CREATE TABLE `zt_usertpl` ( `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `account` char(30) NOT NULL, @@ -925,14 +874,12 @@ CREATE TABLE `zt_usertpl` ( PRIMARY KEY (`id`), KEY `account` (`account`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -DROP TABLE IF EXISTS `zt_userview`; CREATE TABLE `zt_userview` ( `account` char(30) NOT NULL, `products` mediumtext NOT NULL, `projects` mediumtext NOT NULL, UNIQUE KEY `account` (`account`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -DROP TABLE IF EXISTS `zt_webhook`; CREATE TABLE `zt_webhook` ( `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `type` varchar(10) NOT NULL DEFAULT 'default', diff --git a/db/standard/zentao11.3.sql b/db/standard/zentao11.3.sql new file mode 100644 index 0000000000..1a7a433184 --- /dev/null +++ b/db/standard/zentao11.3.sql @@ -0,0 +1,903 @@ +CREATE TABLE `zt_action` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `objectType` varchar(30) NOT NULL DEFAULT '', + `objectID` mediumint(8) unsigned NOT NULL DEFAULT '0', + `product` varchar(255) NOT NULL, + `project` mediumint(9) NOT NULL, + `actor` varchar(30) NOT NULL DEFAULT '', + `action` varchar(30) NOT NULL DEFAULT '', + `date` datetime NOT NULL, + `comment` text NOT NULL, + `extra` text NOT NULL, + `read` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `date` (`date`), + KEY `actor` (`actor`), + KEY `project` (`project`), + KEY `objectID` (`objectID`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_block` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `module` varchar(20) NOT NULL, + `title` varchar(100) NOT NULL, + `source` varchar(20) NOT NULL, + `block` varchar(20) NOT NULL, + `params` text NOT NULL, + `order` tinyint(3) unsigned NOT NULL DEFAULT '0', + `grid` tinyint(3) unsigned NOT NULL DEFAULT '0', + `height` smallint(5) unsigned NOT NULL DEFAULT '0', + `hidden` tinyint(1) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `accountModuleOrder` (`account`,`module`,`order`), + KEY `account` (`account`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_branch` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `name` varchar(255) NOT NULL, + `order` smallint(5) unsigned NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_bug` ( + `id` mediumint(8) NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` mediumint(8) unsigned NOT NULL DEFAULT '0', + `project` mediumint(8) unsigned NOT NULL DEFAULT '0', + `plan` mediumint(8) unsigned NOT NULL DEFAULT '0', + `story` mediumint(8) unsigned NOT NULL DEFAULT '0', + `storyVersion` smallint(6) NOT NULL DEFAULT '1', + `task` mediumint(8) unsigned NOT NULL DEFAULT '0', + `toTask` mediumint(8) unsigned NOT NULL DEFAULT '0', + `toStory` mediumint(8) NOT NULL DEFAULT '0', + `title` varchar(255) NOT NULL, + `keywords` varchar(255) NOT NULL, + `severity` tinyint(4) NOT NULL DEFAULT '0', + `pri` tinyint(3) unsigned NOT NULL, + `type` varchar(30) NOT NULL DEFAULT '', + `os` varchar(30) NOT NULL DEFAULT '', + `browser` varchar(30) NOT NULL DEFAULT '', + `hardware` varchar(30) NOT NULL, + `found` varchar(30) NOT NULL DEFAULT '', + `steps` text NOT NULL, + `status` enum('active','resolved','closed') NOT NULL DEFAULT 'active', + `color` char(7) NOT NULL, + `confirmed` tinyint(1) NOT NULL DEFAULT '0', + `activatedCount` smallint(6) NOT NULL, + `activatedDate` datetime NOT NULL, + `mailto` text, + `openedBy` varchar(30) NOT NULL DEFAULT '', + `openedDate` datetime NOT NULL, + `openedBuild` varchar(255) NOT NULL, + `assignedTo` varchar(30) NOT NULL DEFAULT '', + `assignedDate` datetime NOT NULL, + `deadline` date NOT NULL, + `resolvedBy` varchar(30) NOT NULL DEFAULT '', + `resolution` varchar(30) NOT NULL DEFAULT '', + `resolvedBuild` varchar(30) NOT NULL DEFAULT '', + `resolvedDate` datetime NOT NULL, + `closedBy` varchar(30) NOT NULL DEFAULT '', + `closedDate` datetime NOT NULL, + `duplicateBug` mediumint(8) unsigned NOT NULL, + `linkBug` varchar(255) NOT NULL, + `case` mediumint(8) unsigned NOT NULL, + `caseVersion` smallint(6) NOT NULL DEFAULT '1', + `result` mediumint(8) unsigned NOT NULL, + `testtask` mediumint(8) unsigned NOT NULL, + `lastEditedBy` varchar(30) NOT NULL DEFAULT '', + `lastEditedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `project` (`project`), + KEY `status` (`status`), + KEY `plan` (`plan`), + KEY `story` (`story`), + KEY `case` (`case`), + KEY `assignedTo` (`assignedTo`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_build` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `project` mediumint(8) unsigned NOT NULL DEFAULT '0', + `name` char(150) NOT NULL, + `scmPath` char(255) NOT NULL, + `filePath` char(255) NOT NULL, + `date` date NOT NULL, + `stories` text NOT NULL, + `bugs` text NOT NULL, + `builder` char(30) NOT NULL DEFAULT '', + `desc` text NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `project` (`project`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_burn` ( + `project` mediumint(8) unsigned NOT NULL, + `date` date NOT NULL, + `estimate` float NOT NULL, + `left` float NOT NULL, + `consumed` float NOT NULL, + PRIMARY KEY (`project`,`date`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_case` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `lib` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` mediumint(8) unsigned NOT NULL DEFAULT '0', + `path` mediumint(8) unsigned NOT NULL DEFAULT '0', + `story` mediumint(30) unsigned NOT NULL DEFAULT '0', + `storyVersion` smallint(6) NOT NULL DEFAULT '1', + `title` varchar(255) NOT NULL, + `precondition` text NOT NULL, + `keywords` varchar(255) NOT NULL, + `pri` tinyint(3) unsigned NOT NULL DEFAULT '3', + `type` char(30) NOT NULL DEFAULT '1', + `stage` varchar(255) NOT NULL, + `howRun` varchar(30) NOT NULL, + `scriptedBy` varchar(30) NOT NULL, + `scriptedDate` date NOT NULL, + `scriptStatus` varchar(30) NOT NULL, + `scriptLocation` varchar(255) NOT NULL, + `status` char(30) NOT NULL DEFAULT '1', + `color` char(7) NOT NULL, + `frequency` enum('1','2','3') NOT NULL DEFAULT '1', + `order` tinyint(30) unsigned NOT NULL DEFAULT '0', + `openedBy` char(30) NOT NULL DEFAULT '', + `openedDate` datetime NOT NULL, + `reviewedBy` varchar(255) NOT NULL, + `reviewedDate` date NOT NULL, + `lastEditedBy` char(30) NOT NULL DEFAULT '', + `lastEditedDate` datetime NOT NULL, + `version` tinyint(3) unsigned NOT NULL DEFAULT '0', + `linkCase` varchar(255) NOT NULL, + `fromBug` mediumint(8) unsigned NOT NULL, + `fromCaseID` mediumint(8) unsigned NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + `lastRunner` varchar(30) NOT NULL, + `lastRunDate` datetime NOT NULL, + `lastRunResult` char(30) NOT NULL, + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `story` (`story`), + KEY `module` (`module`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_casestep` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `parent` mediumint(8) unsigned NOT NULL DEFAULT '0', + `case` mediumint(8) unsigned NOT NULL DEFAULT '0', + `version` smallint(3) unsigned NOT NULL DEFAULT '0', + `type` varchar(10) NOT NULL DEFAULT 'step', + `desc` text NOT NULL, + `expect` text NOT NULL, + PRIMARY KEY (`id`), + KEY `case` (`case`), + KEY `version` (`version`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_company` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` char(120) DEFAULT NULL, + `phone` char(20) DEFAULT NULL, + `fax` char(20) DEFAULT NULL, + `address` char(120) DEFAULT NULL, + `zipcode` char(10) DEFAULT NULL, + `website` char(120) DEFAULT NULL, + `backyard` char(120) DEFAULT NULL, + `guest` enum('1','0') NOT NULL DEFAULT '0', + `admins` char(255) DEFAULT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_config` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `owner` char(30) NOT NULL DEFAULT '', + `module` varchar(30) NOT NULL, + `section` char(30) NOT NULL DEFAULT '', + `key` char(30) NOT NULL DEFAULT '', + `value` text NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `unique` (`owner`,`module`,`section`,`key`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_cron` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `m` varchar(20) NOT NULL, + `h` varchar(20) NOT NULL, + `dom` varchar(20) NOT NULL, + `mon` varchar(20) NOT NULL, + `dow` varchar(20) NOT NULL, + `command` text NOT NULL, + `remark` varchar(255) NOT NULL, + `type` varchar(20) NOT NULL, + `buildin` tinyint(1) NOT NULL DEFAULT '0', + `status` varchar(20) NOT NULL, + `lastTime` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `lastTime` (`lastTime`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_dept` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` char(60) NOT NULL, + `parent` mediumint(8) unsigned NOT NULL DEFAULT '0', + `path` char(255) NOT NULL DEFAULT '', + `grade` tinyint(3) unsigned NOT NULL DEFAULT '0', + `order` tinyint(3) unsigned NOT NULL DEFAULT '0', + `position` char(30) NOT NULL DEFAULT '', + `function` char(255) NOT NULL DEFAULT '', + `manager` char(30) NOT NULL DEFAULT '', + PRIMARY KEY (`id`), + KEY `parent` (`parent`), + KEY `path` (`path`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_doc` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `project` mediumint(8) unsigned NOT NULL, + `lib` varchar(30) NOT NULL, + `module` varchar(30) NOT NULL, + `title` varchar(255) NOT NULL, + `keywords` varchar(255) NOT NULL, + `type` varchar(30) NOT NULL, + `views` smallint(5) unsigned NOT NULL, + `collector` text NOT NULL, + `addedBy` varchar(30) NOT NULL, + `addedDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `acl` varchar(10) NOT NULL DEFAULT 'open', + `groups` varchar(255) NOT NULL, + `users` text NOT NULL, + `version` smallint(5) unsigned NOT NULL DEFAULT '1', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `project` (`project`), + KEY `lib` (`lib`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_doccontent` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `doc` mediumint(8) unsigned NOT NULL, + `title` varchar(255) NOT NULL, + `digest` varchar(255) NOT NULL, + `content` text NOT NULL, + `files` text NOT NULL, + `type` varchar(10) NOT NULL, + `version` smallint(5) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `doc_version` (`doc`,`version`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_doclib` ( + `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT, + `type` varchar(30) NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `project` mediumint(8) unsigned NOT NULL, + `name` varchar(60) NOT NULL, + `acl` varchar(10) NOT NULL DEFAULT 'open', + `groups` varchar(255) NOT NULL, + `users` text NOT NULL, + `main` enum('0','1') NOT NULL DEFAULT '0', + `collector` text NOT NULL, + `order` tinyint(5) unsigned NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `project` (`project`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_effort` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `user` char(30) NOT NULL DEFAULT '', + `todo` enum('1','0') NOT NULL DEFAULT '1', + `date` date NOT NULL, + `begin` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `end` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `type` enum('1','2','3') NOT NULL DEFAULT '1', + `idvalue` mediumint(8) unsigned NOT NULL DEFAULT '0', + `name` char(30) NOT NULL DEFAULT '', + `desc` char(255) NOT NULL DEFAULT '', + `status` enum('1','2','3') NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + KEY `user` (`user`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_entry` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(50) NOT NULL, + `account` varchar(30) NOT NULL DEFAULT '', + `code` varchar(20) NOT NULL, + `key` varchar(32) NOT NULL, + `ip` varchar(100) NOT NULL, + `desc` text NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_extension` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(150) NOT NULL, + `code` varchar(30) NOT NULL, + `version` varchar(50) NOT NULL, + `author` varchar(100) NOT NULL, + `desc` text NOT NULL, + `license` text NOT NULL, + `type` varchar(20) NOT NULL DEFAULT 'extension', + `site` varchar(150) NOT NULL, + `zentaoCompatible` varchar(100) NOT NULL, + `installedTime` datetime NOT NULL, + `depends` varchar(100) NOT NULL, + `dirs` mediumtext NOT NULL, + `files` mediumtext NOT NULL, + `status` varchar(20) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `code` (`code`), + KEY `name` (`name`), + KEY `installedTime` (`installedTime`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_file` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `pathname` char(100) NOT NULL, + `title` char(255) NOT NULL, + `extension` char(30) NOT NULL, + `size` int(10) unsigned NOT NULL DEFAULT '0', + `objectType` char(30) NOT NULL, + `objectID` mediumint(9) NOT NULL, + `addedBy` char(30) NOT NULL DEFAULT '', + `addedDate` datetime NOT NULL, + `downloads` mediumint(8) unsigned NOT NULL DEFAULT '0', + `extra` varchar(255) NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `objectType` (`objectType`), + KEY `objectID` (`objectID`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_group` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` char(30) NOT NULL, + `role` char(30) NOT NULL DEFAULT '', + `desc` char(255) NOT NULL DEFAULT '', + `acl` text, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_grouppriv` ( + `group` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` char(30) NOT NULL DEFAULT '', + `method` char(30) NOT NULL DEFAULT '', + UNIQUE KEY `group` (`group`,`module`,`method`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_history` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `action` mediumint(8) unsigned NOT NULL DEFAULT '0', + `field` varchar(30) NOT NULL DEFAULT '', + `old` text NOT NULL, + `new` text NOT NULL, + `diff` mediumtext NOT NULL, + PRIMARY KEY (`id`), + KEY `action` (`action`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_lang` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `lang` varchar(30) NOT NULL, + `module` varchar(30) NOT NULL, + `section` varchar(30) NOT NULL, + `key` varchar(60) NOT NULL, + `value` text NOT NULL, + `system` enum('0','1') NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + UNIQUE KEY `lang` (`lang`,`module`,`section`,`key`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_log` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `objectType` varchar(30) NOT NULL, + `objectID` mediumint(8) unsigned NOT NULL, + `action` mediumint(8) unsigned NOT NULL, + `date` datetime NOT NULL, + `url` varchar(255) NOT NULL, + `contentType` varchar(30) NOT NULL, + `data` text NOT NULL, + `result` text NOT NULL, + PRIMARY KEY (`id`), + KEY `objectType` (`objectType`), + KEY `obejctID` (`objectID`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_module` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `root` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `name` char(60) NOT NULL DEFAULT '', + `parent` mediumint(8) unsigned NOT NULL DEFAULT '0', + `path` char(255) NOT NULL DEFAULT '', + `grade` tinyint(3) unsigned NOT NULL DEFAULT '0', + `order` smallint(5) unsigned NOT NULL DEFAULT '0', + `type` char(30) NOT NULL, + `owner` varchar(30) NOT NULL, + `collector` text NOT NULL, + `short` varchar(30) NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `root` (`root`), + KEY `type` (`type`), + KEY `path` (`path`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_notify` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `objectType` varchar(50) NOT NULL, + `objectID` mediumint(8) unsigned NOT NULL, + `action` mediumint(9) NOT NULL, + `toList` varchar(255) NOT NULL, + `ccList` text NOT NULL, + `subject` varchar(255) NOT NULL, + `data` text NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `sendTime` datetime NOT NULL, + `status` varchar(10) NOT NULL DEFAULT 'wait', + `failReason` text NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_product` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(90) NOT NULL, + `code` varchar(45) NOT NULL, + `line` mediumint(8) NOT NULL, + `type` varchar(30) NOT NULL DEFAULT 'normal', + `status` varchar(30) NOT NULL DEFAULT '', + `desc` text NOT NULL, + `PO` varchar(30) NOT NULL, + `QD` varchar(30) NOT NULL, + `RD` varchar(30) NOT NULL, + `acl` enum('open','private','custom') NOT NULL DEFAULT 'open', + `whitelist` text NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `createdVersion` varchar(20) NOT NULL, + `order` mediumint(8) unsigned NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `order` (`order`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_productplan` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `branch` mediumint(8) unsigned NOT NULL, + `title` varchar(90) NOT NULL, + `desc` text NOT NULL, + `begin` date NOT NULL, + `end` date NOT NULL, + `order` text NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `end` (`end`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_project` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `isCat` enum('1','0') NOT NULL DEFAULT '0', + `catID` mediumint(8) unsigned NOT NULL, + `type` varchar(20) NOT NULL DEFAULT 'sprint', + `parent` mediumint(8) unsigned NOT NULL DEFAULT '0', + `name` varchar(90) NOT NULL, + `code` varchar(45) NOT NULL, + `begin` date NOT NULL, + `end` date NOT NULL, + `days` smallint(5) unsigned NOT NULL, + `status` varchar(10) NOT NULL, + `statge` enum('1','2','3','4','5') NOT NULL DEFAULT '1', + `pri` enum('1','2','3','4') NOT NULL DEFAULT '1', + `desc` text NOT NULL, + `openedBy` varchar(30) NOT NULL DEFAULT '', + `openedDate` datetime NOT NULL, + `openedVersion` varchar(20) NOT NULL, + `closedBy` varchar(30) NOT NULL DEFAULT '', + `closedDate` datetime NOT NULL, + `canceledBy` varchar(30) NOT NULL DEFAULT '', + `canceledDate` datetime NOT NULL, + `PO` varchar(30) NOT NULL DEFAULT '', + `PM` varchar(30) NOT NULL DEFAULT '', + `QD` varchar(30) NOT NULL DEFAULT '', + `RD` varchar(30) NOT NULL DEFAULT '', + `team` varchar(90) NOT NULL, + `acl` enum('open','private','custom') NOT NULL DEFAULT 'open', + `whitelist` text NOT NULL, + `order` mediumint(8) unsigned NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `parent` (`parent`), + KEY `begin` (`begin`), + KEY `end` (`end`), + KEY `status` (`status`), + KEY `order` (`order`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_projectproduct` ( + `project` mediumint(8) unsigned NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `branch` mediumint(8) unsigned NOT NULL, + `plan` mediumint(8) unsigned NOT NULL, + PRIMARY KEY (`project`,`product`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_projectstory` ( + `project` mediumint(8) unsigned NOT NULL DEFAULT '0', + `product` mediumint(8) unsigned NOT NULL, + `story` mediumint(8) unsigned NOT NULL DEFAULT '0', + `version` smallint(6) NOT NULL DEFAULT '1', + `order` smallint(6) unsigned NOT NULL, + UNIQUE KEY `project` (`project`,`story`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_release` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `build` mediumint(8) unsigned NOT NULL, + `name` varchar(255) NOT NULL DEFAULT '', + `marker` enum('0','1') NOT NULL DEFAULT '0', + `date` date NOT NULL, + `stories` text NOT NULL, + `bugs` text NOT NULL, + `leftBugs` text NOT NULL, + `desc` text NOT NULL, + `status` varchar(20) NOT NULL DEFAULT 'normal', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `build` (`build`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_score` ( + `id` bigint(12) unsigned NOT NULL AUTO_INCREMENT, + `account` varchar(30) NOT NULL, + `module` varchar(30) NOT NULL DEFAULT '', + `method` varchar(30) NOT NULL, + `desc` varchar(250) NOT NULL DEFAULT '', + `before` int(11) NOT NULL DEFAULT '0', + `score` int(11) NOT NULL DEFAULT '0', + `after` int(11) NOT NULL DEFAULT '0', + `time` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `account` (`account`), + KEY `model` (`module`), + KEY `method` (`method`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_story` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` mediumint(8) unsigned NOT NULL DEFAULT '0', + `plan` text, + `source` varchar(20) NOT NULL, + `sourceNote` varchar(255) NOT NULL, + `fromBug` mediumint(8) unsigned NOT NULL DEFAULT '0', + `title` varchar(255) NOT NULL, + `keywords` varchar(255) NOT NULL, + `type` varchar(30) NOT NULL DEFAULT '', + `pri` tinyint(3) unsigned NOT NULL DEFAULT '3', + `estimate` float unsigned NOT NULL, + `status` enum('','changed','active','draft','closed') NOT NULL DEFAULT '', + `color` char(7) NOT NULL, + `stage` enum('','wait','planned','projected','developing','developed','testing','tested','verified','released','closed') NOT NULL DEFAULT 'wait', + `mailto` text, + `openedBy` varchar(30) NOT NULL DEFAULT '', + `openedDate` datetime NOT NULL, + `assignedTo` varchar(30) NOT NULL DEFAULT '', + `assignedDate` datetime NOT NULL, + `lastEditedBy` varchar(30) NOT NULL DEFAULT '', + `lastEditedDate` datetime NOT NULL, + `reviewedBy` varchar(255) NOT NULL, + `reviewedDate` date NOT NULL, + `closedBy` varchar(30) NOT NULL DEFAULT '', + `closedDate` datetime NOT NULL, + `closedReason` varchar(30) NOT NULL, + `toBug` mediumint(9) NOT NULL, + `childStories` varchar(255) NOT NULL, + `linkStories` varchar(255) NOT NULL, + `duplicateStory` mediumint(8) unsigned NOT NULL, + `version` smallint(6) NOT NULL DEFAULT '1', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `status` (`status`), + KEY `assignedTo` (`assignedTo`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_storyspec` ( + `story` mediumint(9) NOT NULL, + `version` smallint(6) NOT NULL, + `title` varchar(255) NOT NULL, + `spec` text NOT NULL, + `verify` text NOT NULL, + UNIQUE KEY `story` (`story`,`version`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_storystage` ( + `story` mediumint(8) unsigned NOT NULL, + `branch` mediumint(8) unsigned NOT NULL, + `stage` varchar(50) NOT NULL, + KEY `story` (`story`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_suitecase` ( + `suite` mediumint(8) unsigned NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `case` mediumint(8) unsigned NOT NULL, + `version` smallint(5) unsigned NOT NULL, + UNIQUE KEY `suitecase` (`suite`,`case`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_task` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `parent` mediumint(8) NOT NULL DEFAULT '0', + `project` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` mediumint(8) unsigned NOT NULL DEFAULT '0', + `story` mediumint(8) unsigned NOT NULL DEFAULT '0', + `storyVersion` smallint(6) NOT NULL DEFAULT '1', + `fromBug` mediumint(8) unsigned NOT NULL DEFAULT '0', + `name` varchar(255) NOT NULL, + `type` varchar(20) NOT NULL, + `pri` tinyint(3) unsigned NOT NULL DEFAULT '0', + `estimate` float unsigned NOT NULL, + `consumed` float unsigned NOT NULL, + `left` float unsigned NOT NULL, + `deadline` date NOT NULL, + `status` enum('wait','doing','done','pause','cancel','closed') NOT NULL DEFAULT 'wait', + `color` char(7) NOT NULL, + `mailto` text, + `desc` text NOT NULL, + `openedBy` varchar(30) NOT NULL, + `openedDate` datetime NOT NULL, + `assignedTo` varchar(30) NOT NULL, + `assignedDate` datetime NOT NULL, + `estStarted` date NOT NULL, + `realStarted` date NOT NULL, + `finishedBy` varchar(30) NOT NULL, + `finishedDate` datetime NOT NULL, + `finishedList` text NOT NULL, + `canceledBy` varchar(30) NOT NULL, + `canceledDate` datetime NOT NULL, + `closedBy` varchar(30) NOT NULL, + `closedDate` datetime NOT NULL, + `closedReason` varchar(30) NOT NULL, + `lastEditedBy` varchar(30) NOT NULL, + `lastEditedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `project` (`project`), + KEY `story` (`story`), + KEY `assignedTo` (`assignedTo`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_taskestimate` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `task` mediumint(8) unsigned NOT NULL DEFAULT '0', + `date` date NOT NULL, + `left` float unsigned NOT NULL DEFAULT '0', + `consumed` float unsigned NOT NULL, + `account` char(30) NOT NULL DEFAULT '', + `work` text, + PRIMARY KEY (`id`), + KEY `task` (`task`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_team` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `root` mediumint(8) unsigned NOT NULL DEFAULT '0', + `type` enum('project','task') NOT NULL DEFAULT 'project', + `account` char(30) NOT NULL DEFAULT '', + `role` char(30) NOT NULL DEFAULT '', + `limited` char(8) NOT NULL DEFAULT 'no', + `join` date NOT NULL DEFAULT '0000-00-00', + `days` smallint(5) unsigned NOT NULL, + `hours` float(2,1) unsigned NOT NULL DEFAULT '0.0', + `estimate` decimal(12,2) unsigned NOT NULL DEFAULT '0.00', + `consumed` decimal(12,2) unsigned NOT NULL DEFAULT '0.00', + `left` decimal(12,2) unsigned NOT NULL DEFAULT '0.00', + `order` tinyint(3) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `team` (`root`,`type`,`account`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_testreport` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `project` mediumint(8) unsigned NOT NULL, + `tasks` varchar(255) NOT NULL, + `builds` varchar(255) NOT NULL, + `title` varchar(255) NOT NULL, + `begin` date NOT NULL, + `end` date NOT NULL, + `owner` char(30) NOT NULL, + `members` text NOT NULL, + `stories` text NOT NULL, + `bugs` text NOT NULL, + `cases` text NOT NULL, + `report` text NOT NULL, + `objectType` varchar(20) NOT NULL, + `objectID` mediumint(8) unsigned NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_testresult` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `run` mediumint(8) unsigned NOT NULL, + `case` mediumint(8) unsigned NOT NULL, + `version` smallint(5) unsigned NOT NULL, + `caseResult` char(30) NOT NULL, + `stepResults` text NOT NULL, + `lastRunner` varchar(30) NOT NULL, + `date` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `case` (`case`), + KEY `version` (`version`), + KEY `run` (`run`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_testrun` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `task` mediumint(8) unsigned NOT NULL DEFAULT '0', + `case` mediumint(8) unsigned NOT NULL DEFAULT '0', + `version` tinyint(3) unsigned NOT NULL DEFAULT '0', + `assignedTo` char(30) NOT NULL DEFAULT '', + `lastRunner` varchar(30) NOT NULL, + `lastRunDate` datetime NOT NULL, + `lastRunResult` char(30) NOT NULL, + `status` char(30) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `task` (`task`,`case`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_testsuite` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `name` varchar(255) NOT NULL, + `desc` text NOT NULL, + `type` varchar(20) NOT NULL, + `addedBy` char(30) NOT NULL, + `addedDate` datetime NOT NULL, + `lastEditedBy` char(30) NOT NULL, + `lastEditedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL, + PRIMARY KEY (`id`), + KEY `product` (`product`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_testtask` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` char(90) NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `project` mediumint(8) unsigned NOT NULL DEFAULT '0', + `build` char(30) NOT NULL, + `owner` varchar(30) NOT NULL, + `pri` tinyint(3) unsigned NOT NULL DEFAULT '0', + `begin` date NOT NULL, + `end` date NOT NULL, + `mailto` text, + `desc` text NOT NULL, + `report` text NOT NULL, + `status` enum('blocked','doing','wait','done') NOT NULL DEFAULT 'wait', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `build` (`build`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_todo` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `date` date NOT NULL, + `begin` smallint(4) unsigned zerofill NOT NULL, + `end` smallint(4) unsigned zerofill NOT NULL, + `type` char(10) NOT NULL, + `cycle` tinyint(3) unsigned NOT NULL DEFAULT '0', + `idvalue` mediumint(8) unsigned NOT NULL DEFAULT '0', + `pri` tinyint(3) unsigned NOT NULL, + `name` char(150) NOT NULL, + `desc` text NOT NULL, + `status` enum('wait','doing','done','closed') NOT NULL DEFAULT 'wait', + `private` tinyint(1) NOT NULL, + `config` varchar(255) NOT NULL, + `assignedTo` varchar(30) NOT NULL DEFAULT '', + `assignedBy` varchar(30) NOT NULL DEFAULT '', + `assignedDate` datetime NOT NULL, + `finishedBy` varchar(30) NOT NULL DEFAULT '', + `finishedDate` datetime NOT NULL, + `closedBy` varchar(30) NOT NULL DEFAULT '', + `closedDate` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `account` (`account`), + KEY `assignedTo` (`assignedTo`), + KEY `finishedBy` (`finishedBy`), + KEY `date` (`date`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_user` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `dept` mediumint(8) unsigned NOT NULL DEFAULT '0', + `account` char(30) NOT NULL DEFAULT '', + `password` char(32) NOT NULL DEFAULT '', + `role` char(10) NOT NULL DEFAULT '', + `realname` varchar(100) NOT NULL DEFAULT '', + `nickname` char(60) NOT NULL DEFAULT '', + `commiter` varchar(100) NOT NULL, + `avatar` char(30) NOT NULL DEFAULT '', + `birthday` date NOT NULL DEFAULT '0000-00-00', + `gender` enum('f','m') NOT NULL DEFAULT 'f', + `email` char(90) NOT NULL DEFAULT '', + `skype` char(90) NOT NULL DEFAULT '', + `qq` char(20) NOT NULL DEFAULT '', + `mobile` char(11) NOT NULL DEFAULT '', + `phone` char(20) NOT NULL DEFAULT '', + `weixin` varchar(90) NOT NULL DEFAULT '', + `dingding` varchar(90) NOT NULL DEFAULT '', + `slack` varchar(90) NOT NULL DEFAULT '', + `whatsapp` varchar(90) NOT NULL DEFAULT '', + `address` char(120) NOT NULL DEFAULT '', + `zipcode` char(10) NOT NULL DEFAULT '', + `join` date NOT NULL DEFAULT '0000-00-00', + `visits` mediumint(8) unsigned NOT NULL DEFAULT '0', + `ip` char(15) NOT NULL DEFAULT '', + `last` int(10) unsigned NOT NULL DEFAULT '0', + `fails` tinyint(5) NOT NULL DEFAULT '0', + `locked` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `ranzhi` char(30) NOT NULL DEFAULT '', + `score` int(11) NOT NULL DEFAULT '0', + `scoreLevel` int(11) NOT NULL DEFAULT '0', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `account` (`account`), + KEY `dept` (`dept`), + KEY `email` (`email`), + KEY `commiter` (`commiter`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_usercontact` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `listName` varchar(60) NOT NULL, + `userList` text NOT NULL, + PRIMARY KEY (`id`), + KEY `account` (`account`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_usergroup` ( + `account` char(30) NOT NULL DEFAULT '', + `group` mediumint(8) unsigned NOT NULL DEFAULT '0', + UNIQUE KEY `account` (`account`,`group`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_userquery` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `module` varchar(30) NOT NULL, + `title` varchar(90) NOT NULL, + `form` text NOT NULL, + `sql` text NOT NULL, + `shortcut` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `account` (`account`), + KEY `module` (`module`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_usertpl` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `type` char(30) NOT NULL, + `title` varchar(150) NOT NULL, + `content` text NOT NULL, + `public` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `account` (`account`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_userview` ( + `account` char(30) NOT NULL, + `products` mediumtext NOT NULL, + `projects` mediumtext NOT NULL, + UNIQUE KEY `account` (`account`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_webhook` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `type` varchar(10) NOT NULL DEFAULT 'default', + `name` varchar(50) NOT NULL, + `url` varchar(255) NOT NULL, + `domain` varchar(255) NOT NULL, + `contentType` varchar(30) NOT NULL DEFAULT 'application/json', + `sendType` enum('sync','async') NOT NULL DEFAULT 'sync', + `products` text NOT NULL, + `projects` text NOT NULL, + `params` varchar(100) NOT NULL, + `actions` text NOT NULL, + `desc` text NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; diff --git a/db/zentao.sql b/db/zentao.sql index adf21e81e1..6411d3a06e 100644 --- a/db/zentao.sql +++ b/db/zentao.sql @@ -5,7 +5,7 @@ CREATE TABLE IF NOT EXISTS `zt_action` ( `objectID` mediumint(8) unsigned NOT NULL default '0', `product` varchar(255) NOT NULL, `project` mediumint(9) NOT NULL, - `actor` varchar(30) NOT NULL default '', + `actor` varchar(100) NOT NULL default '', `action` varchar(30) NOT NULL default '', `date` datetime NOT NULL, `comment` text NOT NULL, @@ -461,6 +461,7 @@ CREATE TABLE IF NOT EXISTS `zt_productplan` ( `id` mediumint(8) unsigned NOT NULL auto_increment, `product` mediumint(8) unsigned NOT NULL, `branch` mediumint(8) unsigned NOT NULL, + `parent` mediumint(9) NOT NULL DEFAULT '0' `title` varchar(90) NOT NULL, `desc` text NOT NULL, `begin` date NOT NULL, diff --git a/doc/CHANGELOG b/doc/CHANGELOG index ab3e0d6a5e..16bde5594c 100644 --- a/doc/CHANGELOG +++ b/doc/CHANGELOG @@ -1,3 +1,51 @@ +2019-02-27 11.3.stable +完成的需求 +3579 发信的时候增加环境变量避免dns解析超时 +3578 优化chosen控件下拉之后的交互 +3577 搜索表单展开多项条件搜索之后应当保持表单状态 +3576 里程碑发布增加文字提示 +3575 增加时区设置 +3574 产品、项目文档库和文档权限控制增加文字提示 +3572 增加父子计划之后增加调整路线图的呈现方式 +3571 计划增加子计划概念 +3567 自定义文档库和手册可以进行排序 +3563 优化应用集成禅道功能 +3562 任务工时管理中录入的备份信息过长可以悬浮显示 +3548 需求详情页面相关信息不以剧中方式显示 +3538 去掉雅虎通、旺旺的字段 +3536 项目没有创建版本,在项目下提交测试单可以提示创建版本 +3511 补充完整文档库设置按钮的菜单 +3504 组织-用户下查看任务,延期的任务会标记显示 +3501 需求详情等页面的删除icon调整 +3499 创建文档的时候引导用户创建文档的类型 +3490 文档库左侧的列表和产品项目视图的下拉菜单保持一致 +3489 优化文档库创建的页面 +3488 没有文档库时在左侧导航增加添加文档库的入口 +3483 产品视图左上角产品下拉框宽度增加一些 +3466 添加编辑区块时新增状态选择 +3464 浏览文档列表时时间显示完整年份 +3463 预览图片类的文档的时候会出现两个删除按钮 +3462 文档详情页面的全屏按钮增加文字并记录状态 +3458 bug列表页面将严重程度放到优先级前面 +3457 解决bug的时候将closed帐号从指派给列表中去掉 +3454 评审需求时优先级和工时信息应当将现在的值读取出来 +3453 梳理windows和linux一键安装包里面的链接地址 +3446 需求变更时光标到需求名称无需title +3420 延期bug在详情页面截止日期后显示延期几天 +3419 bug延期后在列表页面截止日期字段标红提示 +2920 用例库的用例更改之后自动更新其关联的测试用例 +修复的Bug +2311 开源版集成git,git用户名过长无法正常同步 +2332 取消浏览器自动填充信息 +2410 批量分解需求,同需求按钮位置需要优化 +2413 附件上传安全限制功能异常 +2421 用户有组织视图权限访问company-browse.json会显示所有用户密码md5值 +2424 每日任务提醒邮件中不显示任务的截止时间 +2425 需求关联需求后,无法取消 +2426 升级的时候提示错误信息 +2427 树状图展示数据错误 +2440 二级子模块不可以调整为一级父模块 + 2019-01-29 11.2.stable 完成的需求 3553 集成喧喧2.4版本,国际版企业版集成喧喧2.4,国内和国际的版本升级程序要区分处理 diff --git a/module/common/lang/en.php b/module/common/lang/en.php index a22552a456..efaa944a66 100644 --- a/module/common/lang/en.php +++ b/module/common/lang/en.php @@ -400,7 +400,8 @@ $lang->admin->subMenu->data->backup = array('link' => 'Backup|backup|index', 'su $lang->admin->subMenu->data->trash = 'Recycle|action|trash'; $lang->admin->subMenu->system = new stdclass(); -$lang->admin->subMenu->system->cron = array('link' => 'Cron|cron|index', 'subModule' => 'cron'); +$lang->admin->subMenu->system->cron = array('link' => 'Cron|cron|index', 'subModule' => 'cron'); +$lang->admin->subMenu->system->timezone = array('link' => 'Timezone|custom|timezone', 'subModule' => 'custom'); $lang->convert = new stdclass(); $lang->upgrade = new stdclass(); diff --git a/module/custom/lang/en.php b/module/custom/lang/en.php index 47d1f09956..2ea43fdf79 100644 --- a/module/custom/lang/en.php +++ b/module/custom/lang/en.php @@ -72,9 +72,10 @@ $lang->custom->todo->fields['typeList'] = 'Type'; $lang->custom->todo->fields['statusList'] = 'Status'; $lang->custom->user = new stdClass(); -$lang->custom->user->fields['roleList'] = 'Role'; -$lang->custom->user->fields['statusList'] = 'Status'; -$lang->custom->user->fields['deleted'] = 'Deleted User'; +$lang->custom->user->fields['roleList'] = 'Role'; +$lang->custom->user->fields['statusList'] = 'Status'; +$lang->custom->user->fields['contactField'] = 'Available Contact'; +$lang->custom->user->fields['deleted'] = 'Deleted User'; $lang->custom->block->fields['closed'] = 'Closed Block'; @@ -91,6 +92,7 @@ $lang->custom->notice->forceNotReview = "%s Review is NOT required for cer $lang->custom->notice->longlife = 'Define longlife bugs.'; $lang->custom->notice->invalidNumberKey = 'The key should be =< 255.'; $lang->custom->notice->invalidStringKey = 'The key should be a combination of lowercase letters, numbers or underlines.'; +$lang->custom->notice->cannotSetTimezone = 'date_default_timezone_set does not exist or is disabled. Time zone cannot be set.'; $lang->custom->notice->indexPage['product'] = "ZenTao 8.2+ has Product Homepage. Do you want to go to Product Homepage?"; $lang->custom->notice->indexPage['project'] = "ZenTao 8.2+ has Project Homepage. Do you want to go to Project Homepage?"; diff --git a/module/group/lang/resource.php b/module/group/lang/resource.php index 98c93a1735..e78d2eb0aa 100644 --- a/module/group/lang/resource.php +++ b/module/group/lang/resource.php @@ -557,6 +557,7 @@ $lang->resource->testcase->review = 'review'; $lang->resource->testcase->batchReview = 'batchReview'; $lang->resource->testcase->importFromLib = 'importFromLib'; $lang->resource->testcase->batchCaseTypeChange = 'batchCaseTypeChange'; +$lang->resource->testcase->confirmLibcaseChange = 'confirmLibcaseChange'; $lang->resource->testcase->batchConfirmStoryChange = 'batchConfirmStoryChange'; $lang->testcase->methodOrder[0] = 'index'; @@ -752,6 +753,7 @@ $lang->resource->custom->restore = 'restore'; $lang->resource->custom->flow = 'flow'; $lang->resource->custom->working = 'working'; $lang->resource->custom->setPublic = 'setPublic'; +$lang->resource->custom->timezone = 'timezone'; $lang->custom->methodOrder[5] = 'index'; $lang->custom->methodOrder[10] = 'set'; @@ -759,6 +761,7 @@ $lang->custom->methodOrder[15] = 'restore'; $lang->custom->methodOrder[20] = 'flow'; $lang->custom->methodOrder[25] = 'working'; $lang->custom->methodOrder[30] = 'setPublic'; +$lang->custom->methodOrder[35] = 'timezone'; $lang->resource->datatable = new stdclass(); $lang->resource->datatable->setGlobal = 'setGlobal'; diff --git a/module/misc/lang/en.php b/module/misc/lang/en.php index 15a735b4c2..aeabe7f79a 100644 --- a/module/misc/lang/en.php +++ b/module/misc/lang/en.php @@ -76,6 +76,7 @@ $lang->misc->feature = new stdclass(); $lang->misc->feature->lastest = 'Latest Version'; $lang->misc->feature->detailed = 'Details'; +$lang->misc->releaseDate['11.3.stable'] = '2019-02-27'; $lang->misc->releaseDate['11.2.stable'] = '2019-01-30'; $lang->misc->releaseDate['11.1.stable'] = '2019-01-04'; $lang->misc->releaseDate['11.0.stable'] = '2018-12-21'; diff --git a/module/misc/lang/zh-cn.php b/module/misc/lang/zh-cn.php index c8f9cfab5a..b5f86fd692 100644 --- a/module/misc/lang/zh-cn.php +++ b/module/misc/lang/zh-cn.php @@ -76,6 +76,7 @@ $lang->misc->feature = new stdclass(); $lang->misc->feature->lastest = '最新版本'; $lang->misc->feature->detailed = '详情'; +$lang->misc->releaseDate['11.3.stable'] = '2019-02-27'; $lang->misc->releaseDate['11.2.stable'] = '2019-01-30'; $lang->misc->releaseDate['11.1.stable'] = '2019-01-04'; $lang->misc->releaseDate['11.0.stable'] = '2018-12-21'; @@ -99,6 +100,8 @@ $lang->misc->releaseDate['7.2.stable'] = '2015-05-22'; $lang->misc->releaseDate['7.1.stable'] = '2015-03-07'; $lang->misc->releaseDate['6.3.stable'] = '2014-11-07'; +$lang->misc->feature->all['11.3.stable'][] = array('title'=>'完善细节,修复Bug', 'desc' => '

            计划添加子计划功能

            优化chosen交互

            添加时区设置

            优化文档库和文档

            '); + $lang->misc->feature->all['11.2.stable'][] = array('title'=>'完善细节,修复Bug', 'desc' => '

            增加升级日志和升级后数据库检查的功能

            修复禅道集成客户端和其他若干bug,完善细节

            '); $lang->misc->feature->all['11.1.stable'][] = array('title'=>'主要修复Bug。'); diff --git a/module/testcase/lang/en.php b/module/testcase/lang/en.php index ade3b92aef..6eec3173f3 100644 --- a/module/testcase/lang/en.php +++ b/module/testcase/lang/en.php @@ -85,6 +85,7 @@ $lang->testcase->batchReview = "Batch Review"; $lang->testcase->edit = "Edit"; $lang->testcase->batchEdit = "Batch Edit "; $lang->testcase->batchChangeModule = "Batch Change Module"; +$lang->testcase->confirmLibcaseChange = "Confirm Library Case Change"; $lang->testcase->batchChangeBranch = "Batch Change Branch"; $lang->testcase->groupByStories = 'Group by Story'; $lang->testcase->delete = "Delete"; diff --git a/module/testcase/lang/zh-cn.php b/module/testcase/lang/zh-cn.php index 83c1cbb27e..d9c8f59d4b 100644 --- a/module/testcase/lang/zh-cn.php +++ b/module/testcase/lang/zh-cn.php @@ -85,6 +85,7 @@ $lang->testcase->batchReview = "批量评审"; $lang->testcase->edit = "编辑"; $lang->testcase->batchEdit = "批量编辑 "; $lang->testcase->batchChangeModule = "批量修改模块"; +$lang->testcase->confirmLibcaseChange = "同步用例库用例修改"; $lang->testcase->batchChangeBranch = "批量修改分支"; $lang->testcase->groupByStories = '需求分组'; $lang->testcase->delete = "删除"; diff --git a/module/upgrade/lang/version.php b/module/upgrade/lang/version.php index 5127612226..8bda24535c 100644 --- a/module/upgrade/lang/version.php +++ b/module/upgrade/lang/version.php @@ -102,3 +102,4 @@ $lang->upgrade->fromVersions['10_5_1'] = '10.5.1'; $lang->upgrade->fromVersions['10_6'] = '10.6'; $lang->upgrade->fromVersions['11_0'] = '11.0'; $lang->upgrade->fromVersions['11_1'] = '11.1'; +$lang->upgrade->fromVersions['11_2'] = '11.2'; diff --git a/module/upgrade/model.php b/module/upgrade/model.php index b533dac6e6..828ae5f8b6 100644 --- a/module/upgrade/model.php +++ b/module/upgrade/model.php @@ -2981,6 +2981,7 @@ class upgradeModel extends model public function processDocLibAcl() { $this->dao->update(TABLE_DOCLIB)->set('acl')->eq('default')->where('type')->in('product,project')->andWhere('acl')->in('open,private')->exec(); + $this->saveLogs($this->dao->get()); return !dao::isError(); } diff --git a/module/user/lang/en.php b/module/user/lang/en.php index c446ee8a74..688e20eaee 100644 --- a/module/user/lang/en.php +++ b/module/user/lang/en.php @@ -30,12 +30,12 @@ $lang->user->verify = 'Verification'; $lang->user->contactInfo = 'Contact'; $lang->user->skype = 'Skype'; $lang->user->qq = 'QQ'; -$lang->user->wechat = 'Wechat'; -$lang->user->dingding = 'Dingding'; -$lang->user->slack = 'Slack'; -$lang->user->whatsapp = 'WhatsApp'; $lang->user->mobile = 'Mobile'; $lang->user->phone = 'Phone'; +$lang->user->weixin = 'Wechat'; +$lang->user->dingding = 'Ding Ding'; +$lang->user->slack = 'Slack'; +$lang->user->whatsapp = 'WhatsApp'; $lang->user->address = 'Address'; $lang->user->zipcode = 'Zip Code'; $lang->user->join = 'Join Date'; @@ -152,6 +152,15 @@ $lang->user->error->reserved = "ID %s,account is reserved."; $lang->user->error->verifyPassword = "Verification failed. Please enter your Login Password."; $lang->user->error->originalPassword = "Old password is incorrect."; +$lang->user->contactFieldList['skype'] = $lang->user->skype; +$lang->user->contactFieldList['qq'] = $lang->user->qq; +$lang->user->contactFieldList['dingding'] = $lang->user->dingding; +$lang->user->contactFieldList['weixin'] = $lang->user->weixin; +$lang->user->contactFieldList['mobile'] = $lang->user->mobile; +$lang->user->contactFieldList['slack'] = $lang->user->slack; +$lang->user->contactFieldList['whatsapp'] = $lang->user->whatsapp; +$lang->user->contactFieldList['phone'] = $lang->user->phone; + $lang->user->contacts = new stdclass(); $lang->user->contacts->common = 'Contact'; $lang->user->contacts->listName = 'List Name'; From 40062df83fc683ca3018b0cfcd0ff543208b3ff0 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Wed, 27 Feb 2019 13:11:25 +0800 Subject: [PATCH 292/442] * adjust for zh-tw lang. --- module/bug/lang/zh-tw.php | 11 +++++----- module/common/lang/zh-tw.php | 5 +++-- module/custom/lang/zh-tw.php | 10 ++++++--- module/doc/lang/zh-tw.php | 36 ++++++++++++++++++++++++++++++- module/install/lang/zh-tw.php | 1 + module/misc/lang/zh-tw.php | 3 +++ module/productplan/lang/zh-tw.php | 3 +++ module/testcase/lang/zh-tw.php | 6 +++++- module/user/lang/zh-tw.php | 13 +++++++++++ 9 files changed, 76 insertions(+), 12 deletions(-) diff --git a/module/bug/lang/zh-tw.php b/module/bug/lang/zh-tw.php index 593b8613c1..ef6493b062 100644 --- a/module/bug/lang/zh-tw.php +++ b/module/bug/lang/zh-tw.php @@ -128,11 +128,12 @@ $lang->bug->assignToMeAB = '指派給我'; $lang->bug->openedByMeAB = '由我創建'; $lang->bug->resolvedByMeAB = '由我解決'; -$lang->bug->ditto = '同上'; -$lang->bug->dittoNotice = '該bug與上一bug不屬於同一產品!'; -$lang->bug->noAssigned = '未指派'; -$lang->bug->noBug = '暫時沒有Bug。'; -$lang->bug->noModule = '
            您現在還沒有模組信息
            請維護測試模組
            '; +$lang->bug->ditto = '同上'; +$lang->bug->dittoNotice = '該bug與上一bug不屬於同一產品!'; +$lang->bug->noAssigned = '未指派'; +$lang->bug->noBug = '暫時沒有Bug。'; +$lang->bug->noModule = '
            您現在還沒有模組信息
            請維護測試模組
            '; +$lang->bug->delayWarning = " 延期%s天 "; /* 頁面標籤。*/ $lang->bug->lblAssignedTo = '當前指派'; diff --git a/module/common/lang/zh-tw.php b/module/common/lang/zh-tw.php index da2fcb11c3..46251542ad 100644 --- a/module/common/lang/zh-tw.php +++ b/module/common/lang/zh-tw.php @@ -80,7 +80,7 @@ $lang->ipLimited = "fold = '-'; $lang->homepage = '設為模組首頁'; -$lang->tutorial = '新手教程'; +$lang->noviceTutorial = '新手教程'; $lang->changeLog = '修改日誌'; $lang->manual = '手冊'; $lang->manualUrl = 'https://www.zentao.net/book/zentaopmshelp.html?fullScreen=zentao'; @@ -400,7 +400,8 @@ $lang->admin->subMenu->data->backup = array('link' => '備份|backup|index', 'su $lang->admin->subMenu->data->trash = '資源回收筒|action|trash'; $lang->admin->subMenu->system = new stdclass(); -$lang->admin->subMenu->system->cron = array('link' => '定時|cron|index', 'subModule' => 'cron'); +$lang->admin->subMenu->system->cron = array('link' => '定時|cron|index', 'subModule' => 'cron'); +$lang->admin->subMenu->system->timezone = array('link' => '時區|custom|timezone', 'subModule' => 'custom'); $lang->convert = new stdclass(); $lang->upgrade = new stdclass(); diff --git a/module/custom/lang/zh-tw.php b/module/custom/lang/zh-tw.php index 463dde53ca..8d7f83443b 100644 --- a/module/custom/lang/zh-tw.php +++ b/module/custom/lang/zh-tw.php @@ -16,6 +16,7 @@ $lang->custom->lang = '所屬語言'; $lang->custom->setPublic = '設為公共'; $lang->custom->required = '必填項'; $lang->custom->score = '積分'; +$lang->custom->timezone = '時區'; $lang->custom->scoreReset = '重置積分'; $lang->custom->object['story'] = '需求'; @@ -71,9 +72,10 @@ $lang->custom->todo->fields['typeList'] = '類型'; $lang->custom->todo->fields['statusList'] = '狀態'; $lang->custom->user = new stdClass(); -$lang->custom->user->fields['roleList'] = '職位'; -$lang->custom->user->fields['statusList'] = '狀態'; -$lang->custom->user->fields['deleted'] = '列出已刪除用戶'; +$lang->custom->user->fields['roleList'] = '職位'; +$lang->custom->user->fields['statusList'] = '狀態'; +$lang->custom->user->fields['contactField'] = '可用聯繫方式'; +$lang->custom->user->fields['deleted'] = '列出已刪除用戶'; $lang->custom->block->fields['closed'] = '關閉的區塊'; @@ -83,12 +85,14 @@ $lang->custom->allLang = '適用所有語言'; $lang->custom->confirmRestore = '是否要恢復預設配置?'; $lang->custom->notice = new stdclass(); +$lang->custom->notice->userFieldNotice = '控制以上欄位在用戶相關頁面是否顯示,留空則全部顯示'; $lang->custom->notice->canNotAdd = '該項參與運算,不提供自定義添加功能'; $lang->custom->notice->forceReview = "指定人提交的%s必須評審。"; $lang->custom->notice->forceNotReview = "指定人提交的%s不需要評審。"; $lang->custom->notice->longlife = 'Bug列表頁面的久未處理標籤中,列出設置天數之前未處理的Bug。'; $lang->custom->notice->invalidNumberKey = '鍵值應為不大於255的數字'; $lang->custom->notice->invalidStringKey = '鍵值應當為小寫英文字母、數字或下劃線的組合'; +$lang->custom->notice->cannotSetTimezone = 'date_default_timezone_set方法不存在或禁用,不能設置時區。'; $lang->custom->notice->indexPage['product'] = "從8.2版本起增加了產品主頁視圖,是否預設進入產品主頁?"; $lang->custom->notice->indexPage['project'] = "從8.2版本起增加了項目主頁視圖,是否預設進入項目主頁?"; diff --git a/module/doc/lang/zh-tw.php b/module/doc/lang/zh-tw.php index 0ec9fe534d..5eef536c29 100644 --- a/module/doc/lang/zh-tw.php +++ b/module/doc/lang/zh-tw.php @@ -78,6 +78,7 @@ $lang->doc->addType = '增加分類'; $lang->doc->childType = '子分類'; $lang->doc->collect = '收藏'; $lang->doc->cancelCollection = '取消收藏'; +$lang->doc->deleteFile = '刪除附件'; $lang->doc->libName = '文檔庫名稱'; $lang->doc->libType = '文檔庫類型'; @@ -118,6 +119,13 @@ $lang->doc->aclList['open'] = '公開'; $lang->doc->aclList['custom'] = '自定義'; $lang->doc->aclList['private'] = '私有'; +$lang->doc->typeList['html'] = '富文本'; +$lang->doc->typeList['markdown'] = 'Markdown'; +$lang->doc->typeList['url'] = '連結'; +$lang->doc->typeList['word'] = 'Word'; +$lang->doc->typeList['ppt'] = 'PPT'; +$lang->doc->typeList['excel'] = 'Excel'; + $lang->doc->types['text'] = '文檔'; $lang->doc->types['url'] = '連結'; @@ -141,7 +149,8 @@ $lang->doc->fastMenuIconList['collectedbyme'] = 'icon-folder-star'; $lang->doc->customObjectLibs['files'] = '顯示附件庫'; $lang->doc->customObjectLibs['customFiles'] = '顯示自定義文檔庫'; -$lang->doc->customShowLibs = '文檔庫顯示設置'; +$lang->doc->orderLib = '文檔庫排序'; +$lang->doc->customShowLibs = '顯示設置'; $lang->doc->customShowLibsList['zero'] = '顯示空文檔的庫'; $lang->doc->customShowLibsList['unclosed'] = '只顯示未關閉的項目'; @@ -154,11 +163,24 @@ $lang->doc->errorMainSysLib = "該系統文檔庫不能刪除!"; $lang->doc->accessDenied = "您沒有權限訪問!"; $lang->doc->versionNotFount = '該版本文檔不存在'; $lang->doc->noDoc = '暫時沒有文檔。'; +$lang->doc->cannotCreateOffice = '

            對不起,企業版才能創建%s文檔。

            試用企業版,請聯繫我們:4006-8899-23   0532-86893032。

            '; $lang->doc->noSearchedDoc = '沒有搜索到任何文檔。'; $lang->doc->noEditedDoc = '您還沒有編輯任何文檔。'; $lang->doc->noOpenedDoc = '您還沒有創建任何文檔。'; $lang->doc->noCollectedDoc = '您還沒有收藏任何文檔。'; +$lang->doc->noticeAcl['lib']['product']['default'] = '有所選產品訪問權限的用戶可以訪問。'; +$lang->doc->noticeAcl['lib']['product']['custom'] = '有所選產品訪問權限或白名單裡的用戶可以訪問。'; +$lang->doc->noticeAcl['lib']['project']['default'] = '有所選項目訪問權限的用戶可以訪問。'; +$lang->doc->noticeAcl['lib']['project']['custom'] = '有所選項目訪問權限或白名單裡的用戶可以訪問。'; +$lang->doc->noticeAcl['lib']['custom']['open'] = '所有人都可以訪問。'; +$lang->doc->noticeAcl['lib']['custom']['custom'] = '白名單的用戶可以訪問。'; +$lang->doc->noticeAcl['lib']['custom']['private'] = '只有創建者自己可以訪問。'; + +$lang->doc->noticeAcl['doc']['open'] = '有文檔所屬文檔庫訪問權限的,都可以訪問。'; +$lang->doc->noticeAcl['doc']['custom'] = '白名單的用戶可以訪問。'; +$lang->doc->noticeAcl['doc']['private'] = '只有創建者自己可以訪問。'; + $lang->doc->placeholder = new stdclass(); $lang->doc->placeholder->url = '相應的連結地址'; @@ -173,6 +195,18 @@ $lang->doclib->select = '選擇文檔庫'; $lang->doclib->project = $lang->projectCommon . '庫'; $lang->doclib->product = $lang->productCommon . '庫'; +$lang->doclib->aclListA['default'] = '預設'; +$lang->doclib->aclListA['custom'] = '自定義'; + +$lang->doclib->aclListB['open'] = '公開'; +$lang->doclib->aclListB['custom'] = '自定義'; +$lang->doclib->aclListB['private'] = '私有'; + + +$lang->doclib->create['product'] = '創建' . $lang->productCommon . '文檔庫'; +$lang->doclib->create['project'] = '創建' . $lang->projectCommon . '文檔庫'; +$lang->doclib->create['custom'] = '創建自定義文檔庫'; + $lang->doclib->main['product'] = $lang->productCommon . '主庫'; $lang->doclib->main['project'] = $lang->projectCommon . '主庫'; diff --git a/module/install/lang/zh-tw.php b/module/install/lang/zh-tw.php index 9383a557b1..139f3077d5 100644 --- a/module/install/lang/zh-tw.php +++ b/module/install/lang/zh-tw.php @@ -88,6 +88,7 @@ $lang->install->chmodWin = '需要修改目錄 "%s" 的權限。'; $lang->install->mkdirLinux = '

            需要創建目錄%s。
            命令為:
            mkdir -p %s

            '; $lang->install->chmodLinux = '需要修改目錄 "%s" 的權限。
            命令為:
            chmod o=rwx -R %s'; +$lang->install->timezone = '時區設置'; $lang->install->defaultLang = '預設語言'; $lang->install->dbHost = '資料庫伺服器'; $lang->install->dbHostNote = '如果127.0.0.1無法訪問,嘗試使用localhost'; diff --git a/module/misc/lang/zh-tw.php b/module/misc/lang/zh-tw.php index 5a0d901f66..59fbb93d40 100644 --- a/module/misc/lang/zh-tw.php +++ b/module/misc/lang/zh-tw.php @@ -76,6 +76,7 @@ $lang->misc->feature = new stdclass(); $lang->misc->feature->lastest = '最新版本'; $lang->misc->feature->detailed = '詳情'; +$lang->misc->releaseDate['11.3.stable'] = '2019-02-27'; $lang->misc->releaseDate['11.2.stable'] = '2019-01-30'; $lang->misc->releaseDate['11.1.stable'] = '2019-01-04'; $lang->misc->releaseDate['11.0.stable'] = '2018-12-21'; @@ -99,6 +100,8 @@ $lang->misc->releaseDate['7.2.stable'] = '2015-05-22'; $lang->misc->releaseDate['7.1.stable'] = '2015-03-07'; $lang->misc->releaseDate['6.3.stable'] = '2014-11-07'; +$lang->misc->feature->all['11.3.stable'][] = array('title'=>'完善細節,修復Bug', 'desc' => '

            計劃添加子計劃功能

            優化chosen交互

            添加時區設置

            優化文檔庫和文檔

            '); + $lang->misc->feature->all['11.2.stable'][] = array('title'=>'完善細節,修復Bug', 'desc' => '

            增加升級日誌和升級後資料庫檢查的功能

            修復禪道整合客戶端和其他若干bug,完善細節

            '); $lang->misc->feature->all['11.1.stable'][] = array('title'=>'主要修復Bug。'); diff --git a/module/productplan/lang/zh-tw.php b/module/productplan/lang/zh-tw.php index bb5c6c642d..4680177376 100644 --- a/module/productplan/lang/zh-tw.php +++ b/module/productplan/lang/zh-tw.php @@ -27,6 +27,7 @@ $lang->productplan->batchUnlinkStory = "批量移除需求"; $lang->productplan->linkedStories = '需求'; $lang->productplan->unlinkedStories = '未關聯需求'; $lang->productplan->updateOrder = '排序'; +$lang->productplan->createChildren = "創建子計劃"; $lang->productplan->linkBug = "關聯Bug"; $lang->productplan->unlinkBug = "移除Bug"; @@ -54,6 +55,8 @@ $lang->productplan->stories = '需求數'; $lang->productplan->bugs = 'Bug數'; $lang->productplan->hour = '工時'; $lang->productplan->project = $lang->projectCommon; +$lang->productplan->parent = "父計劃"; +$lang->productplan->children= "子計劃"; $lang->productplan->endList[7] = '一星期'; $lang->productplan->endList[14] = '兩星期'; diff --git a/module/testcase/lang/zh-tw.php b/module/testcase/lang/zh-tw.php index c96cfc4a3d..f4a5ef0b25 100644 --- a/module/testcase/lang/zh-tw.php +++ b/module/testcase/lang/zh-tw.php @@ -54,7 +54,7 @@ $lang->testcase->expect = '預期'; $lang->testcase->allProduct = "所有{$lang->productCommon}"; $lang->testcase->fromBug = '來源Bug'; $lang->testcase->toBug = '生成Bug'; -$lang->testcase->changed = '用例變更'; +$lang->testcase->changed = '原用例更新'; $lang->testcase->bugs = '產生Bug數'; $lang->testcase->bugsAB = 'B'; $lang->testcase->results = '執行結果數'; @@ -64,6 +64,9 @@ $lang->testcase->stepNumberAB = 'S'; $lang->testcase->createBug = '轉Bug'; $lang->testcase->fromModule = '來源模組'; $lang->testcase->fromCase = '來源用例'; +$lang->testcase->sync = '同步'; +$lang->testcase->fromTesttask = '測試單用例'; +$lang->testcase->fromCaselib = '用例庫用例'; $lang->case = $lang->testcase; // 用於DAO檢查時使用。因為case是系統關鍵字,所以無法定義該模組為case,只能使用testcase,但表還是使用的case。 $lang->testcase->stepID = '編號'; @@ -82,6 +85,7 @@ $lang->testcase->batchReview = "批量評審"; $lang->testcase->edit = "編輯"; $lang->testcase->batchEdit = "批量編輯 "; $lang->testcase->batchChangeModule = "批量修改模組"; +$lang->testcase->confirmLibcaseChange = "同步用例庫用例修改"; $lang->testcase->batchChangeBranch = "批量修改分支"; $lang->testcase->groupByStories = '需求分組'; $lang->testcase->delete = "刪除"; diff --git a/module/user/lang/zh-tw.php b/module/user/lang/zh-tw.php index de56f1cfc9..45cc704fc6 100644 --- a/module/user/lang/zh-tw.php +++ b/module/user/lang/zh-tw.php @@ -32,6 +32,10 @@ $lang->user->skype = 'Skype'; $lang->user->qq = 'QQ'; $lang->user->mobile = '手機'; $lang->user->phone = '電話'; +$lang->user->weixin = '微信'; +$lang->user->dingding = '釘釘'; +$lang->user->slack = 'Slack'; +$lang->user->whatsapp = 'WhatsApp'; $lang->user->address = '通訊地址'; $lang->user->zipcode = '郵編'; $lang->user->join = '入職日期'; @@ -148,6 +152,15 @@ $lang->user->error->reserved = "【ID %s】的用戶名已被系統預留"; $lang->user->error->verifyPassword = "驗證失敗,請檢查您的系統登錄密碼是否正確"; $lang->user->error->originalPassword = "原密碼不正確"; +$lang->user->contactFieldList['skype'] = $lang->user->skype; +$lang->user->contactFieldList['qq'] = $lang->user->qq; +$lang->user->contactFieldList['dingding'] = $lang->user->dingding; +$lang->user->contactFieldList['weixin'] = $lang->user->weixin; +$lang->user->contactFieldList['mobile'] = $lang->user->mobile; +$lang->user->contactFieldList['slack'] = $lang->user->slack; +$lang->user->contactFieldList['whatsapp'] = $lang->user->whatsapp; +$lang->user->contactFieldList['phone'] = $lang->user->phone; + $lang->user->contacts = new stdclass(); $lang->user->contacts->common = '聯繫人'; $lang->user->contacts->listName = '列表名稱'; From 366a7de5c5d08aa32140a952a51bad2dfbb50161 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Wed, 27 Feb 2019 13:27:09 +0800 Subject: [PATCH 293/442] * adjust for execute xuanxuan. --- module/upgrade/model.php | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/module/upgrade/model.php b/module/upgrade/model.php index 828ae5f8b6..10140169f7 100644 --- a/module/upgrade/model.php +++ b/module/upgrade/model.php @@ -367,6 +367,11 @@ class upgradeModel extends model $this->saveLogs('Execute 11_2'); $this->execSQL($this->getUpgradeFile('11.2')); $this->processDocLibAcl(); + if((!isset($this->config->isINT) or !($this->config->isINT)) and !$executeXuanxuan) + { + $xuanxuanSql = $this->app->getAppRoot() . 'db' . DS . 'upgradexuanxuan2.3.0.sql'; + $this->execSQL($xuanxuanSql); + } } $this->deletePatch(); @@ -496,7 +501,9 @@ class upgradeModel extends model $xuanxuanSql = $this->app->getAppRoot() . 'db' . DS . 'upgradexuanxuan2.3.0.sql'; $confirmContent .= file_get_contents($xuanxuanSql); } - case '11_2': $confirmContent .= file_get_contents($this->getUpgradeFile('11.2')); + case '11_2': + $confirmContent .= file_get_contents($this->getUpgradeFile('11.2')); + if(!isset($this->config->isINT) or !($this->config->isINT)) $confirmContent .= file_get_contents($this->app->getAppRoot() . 'db' . DS . 'upgradexuanxuan2.4.0.sql'); } return str_replace('zt_', $this->config->db->prefix, $confirmContent); } From 35c33e50ed768564d249710d3a6f7f110b908b17 Mon Sep 17 00:00:00 2001 From: chenfeiCF Date: Wed, 27 Feb 2019 13:34:35 +0800 Subject: [PATCH 294/442] * Adjust en lang. --- module/doc/lang/en.php | 8 ++++++++ module/doc/lang/zh-cn.php | 1 - module/misc/lang/en.php | 2 ++ module/task/lang/en.php | 2 +- 4 files changed, 11 insertions(+), 2 deletions(-) diff --git a/module/doc/lang/en.php b/module/doc/lang/en.php index 78a09bcba0..23c62ae02b 100644 --- a/module/doc/lang/en.php +++ b/module/doc/lang/en.php @@ -163,6 +163,7 @@ $lang->doc->errorMainSysLib = "This library cannot be deleted."; $lang->doc->accessDenied = "Access denied!"; $lang->doc->versionNotFount = 'It does not exist in this build.'; $lang->doc->noDoc = 'No docs. '; +$lang->doc->cannotCreateOffice = 'Sorry, %s can only be created in ZenTao Enterprise. Contact renee@easysoft.ltd to try ZenTao Enterprise.'; $lang->doc->noSearchedDoc = 'Nothing searched.'; $lang->doc->noEditedDoc = 'You have not edited any document.'; $lang->doc->noOpenedDoc = 'You have not created any document.'; @@ -194,6 +195,13 @@ $lang->doclib->select = 'Select'; $lang->doclib->project = $lang->projectCommon . ' Library'; $lang->doclib->product = $lang->productCommon . ' Library'; +$lang->doclib->aclListA['default'] = 'Default'; +$lang->doclib->aclListA['custom'] = 'Custom'; + +$lang->doclib->aclListB['open'] = 'Public'; +$lang->doclib->aclListB['custom'] = 'Custom'; +$lang->doclib->aclListB['private'] = 'Private'; + $lang->doclib->create['product'] = 'Create ' . $lang->productCommon . ' Library'; $lang->doclib->create['project'] = 'Create ' . $lang->projectCommon . ' Library'; $lang->doclib->create['custom'] = 'Create Custom Library'; diff --git a/module/doc/lang/zh-cn.php b/module/doc/lang/zh-cn.php index 41e2293a1a..c00c3d427b 100644 --- a/module/doc/lang/zh-cn.php +++ b/module/doc/lang/zh-cn.php @@ -202,7 +202,6 @@ $lang->doclib->aclListB['open'] = '公开'; $lang->doclib->aclListB['custom'] = '自定义'; $lang->doclib->aclListB['private'] = '私有'; - $lang->doclib->create['product'] = '创建' . $lang->productCommon . '文档库'; $lang->doclib->create['project'] = '创建' . $lang->projectCommon . '文档库'; $lang->doclib->create['custom'] = '创建自定义文档库'; diff --git a/module/misc/lang/en.php b/module/misc/lang/en.php index aeabe7f79a..1ba29db38d 100644 --- a/module/misc/lang/en.php +++ b/module/misc/lang/en.php @@ -100,6 +100,8 @@ $lang->misc->releaseDate['7.2.stable'] = '2015-05-22'; $lang->misc->releaseDate['7.1.stable'] = '2015-03-07'; $lang->misc->releaseDate['6.3.stable'] = '2014-11-07'; +$lang->misc->feature->all['11.3.stable'][] = array('title'=>'Optimize details and fix bug.', 'desc' => '

            Add Child Plan to a Plan

            Optimize the chosen

            Add Timezone setting

            Optimize Doc Lib and Doc modules

            '); + $lang->misc->feature->all['11.2.stable'][] = array('title'=>'Optimize details and fix bug.', 'desc' => '

            Add upgrade logs and database checkup after upgrading

            Fixed ZenTao client and other bugs, and optimized details.

            '); $lang->misc->feature->all['11.1.stable'][] = array('title'=>'Fix Bug.'); diff --git a/module/task/lang/en.php b/module/task/lang/en.php index eddfce12dc..66ad02f76b 100644 --- a/module/task/lang/en.php +++ b/module/task/lang/en.php @@ -82,7 +82,7 @@ $lang->task->openedBy = 'Created by'; $lang->task->openedDate = 'Created'; $lang->task->openedDateAB = 'Add'; $lang->task->finishedBy = 'Finished by'; -$lang->task->finishedByAB = 'Finished'; +$lang->task->finishedByAB = 'Finisher'; $lang->task->finishedDate = 'Finished'; $lang->task->finishedDateAB = 'Finished'; $lang->task->finishedList = 'FinishedBy list'; From bf2e434f2cfe132ba0893f708f342788da16a1d1 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Wed, 27 Feb 2019 13:48:19 +0800 Subject: [PATCH 295/442] * revert upgrade xuanxuan. --- module/upgrade/model.php | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/module/upgrade/model.php b/module/upgrade/model.php index 10140169f7..8a580cba04 100644 --- a/module/upgrade/model.php +++ b/module/upgrade/model.php @@ -367,11 +367,6 @@ class upgradeModel extends model $this->saveLogs('Execute 11_2'); $this->execSQL($this->getUpgradeFile('11.2')); $this->processDocLibAcl(); - if((!isset($this->config->isINT) or !($this->config->isINT)) and !$executeXuanxuan) - { - $xuanxuanSql = $this->app->getAppRoot() . 'db' . DS . 'upgradexuanxuan2.3.0.sql'; - $this->execSQL($xuanxuanSql); - } } $this->deletePatch(); @@ -501,9 +496,7 @@ class upgradeModel extends model $xuanxuanSql = $this->app->getAppRoot() . 'db' . DS . 'upgradexuanxuan2.3.0.sql'; $confirmContent .= file_get_contents($xuanxuanSql); } - case '11_2': - $confirmContent .= file_get_contents($this->getUpgradeFile('11.2')); - if(!isset($this->config->isINT) or !($this->config->isINT)) $confirmContent .= file_get_contents($this->app->getAppRoot() . 'db' . DS . 'upgradexuanxuan2.4.0.sql'); + case '11_2': $confirmContent .= file_get_contents($this->getUpgradeFile('11.2')); } return str_replace('zt_', $this->config->db->prefix, $confirmContent); } From 7c612806dde4c5657c96a92e20d9d47c85378d04 Mon Sep 17 00:00:00 2001 From: Yagami <976204163@qq.com> Date: Wed, 27 Feb 2019 13:53:39 +0800 Subject: [PATCH 296/442] * Fix testcase buttoni title. --- module/testcase/config.php | 2 +- module/testcase/control.php | 2 +- module/testcase/model.php | 19 ++++++++++++++++++- 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/module/testcase/config.php b/module/testcase/config.php index a9dc8964dd..717c7a440f 100644 --- a/module/testcase/config.php +++ b/module/testcase/config.php @@ -158,7 +158,7 @@ $config->testcase->datatable->fieldList['lastRunResult']['required'] = 'no'; $config->testcase->datatable->fieldList['status']['title'] = 'statusAB'; $config->testcase->datatable->fieldList['status']['fixed'] = 'no'; -$config->testcase->datatable->fieldList['status']['width'] = '80'; +$config->testcase->datatable->fieldList['status']['width'] = '100'; $config->testcase->datatable->fieldList['status']['required'] = 'no'; $config->testcase->datatable->fieldList['lastEditedBy']['title'] = 'lastEditedBy'; diff --git a/module/testcase/control.php b/module/testcase/control.php index 080750cf8e..fe3b6e63fd 100644 --- a/module/testcase/control.php +++ b/module/testcase/control.php @@ -999,7 +999,7 @@ class testcase extends control $step->case = $caseID; $this->dao->insert(TABLE_CASESTEP)->data($step)->exec(); } - die(js::locate(inLink('view', "caseID=$caseID"), 'parent')); + die(js::reload('parent')); } /** diff --git a/module/testcase/model.php b/module/testcase/model.php index 1b36ab2934..9a98988a1a 100644 --- a/module/testcase/model.php +++ b/module/testcase/model.php @@ -1339,6 +1339,7 @@ class testcaseModel extends model $caseLink = helper::createLink('testcase', 'view', "caseID=$case->id&version=$case->version"); $account = $this->app->user->account; $fromCaseID = $case->fromCaseID; + if($fromCaseID) $libCaseVersion = $this->dao->findById($fromCaseID)->from(TABLE_CASE)->fetch('version'); $id = $col->id; if($col->show) { @@ -1387,7 +1388,18 @@ class testcaseModel extends model echo "$stages"; break; case 'status': - $case->needconfirm ? print("{$this->lang->story->changed}") : print("{$this->lang->testcase->statusList[$case->status]}"); + if($case->needconfirm) + { + print("lang->testcase->fromTesttask}>{$this->lang->story->changed}"); + } + elseif(isset($libCaseVersion) and $libCaseVersion > $case->version and !$case->needconfirm) + { + print("lang->testcase->fromCaselib}>{$this->lang->testcase->changed}"); + } + else + { + print("{$this->lang->testcase->statusList[$case->status]}"); + } break; case 'story': static $stories = array(); @@ -1447,6 +1459,11 @@ class testcaseModel extends model common::printIcon('testcase', 'confirmstorychange', "caseID=$case->id", $case, 'list', 'confirm', 'hiddenwin', '', '', '', $this->lang->confirm); break; } + if(isset($libCaseVersion) and $libCaseVersion > $case->version and !$case->needconfirm) + { + common::printIcon('testcase', 'confirmLibcasechange', "caseID=$case->id&libCaseID=$fromCaseID&version=$libCaseVersion", $case, 'list', 'confirm', 'hiddenwin', '', '', '', $this->lang->confirm); + break; + } common::printIcon('testtask', 'results', "runID=0&caseID=$case->id", $case, 'list', '', '', 'iframe', true); common::printIcon('testtask', 'runCase', "runID=0&caseID=$case->id&version=$case->version", $case, 'list', 'play', '', 'runCase iframe', false, "data-width='95%'"); From b784b389a2ed27d743a83c6f05e74b11bf90590e Mon Sep 17 00:00:00 2001 From: Yagami <976204163@qq.com> Date: Wed, 27 Feb 2019 13:55:03 +0800 Subject: [PATCH 297/442] * Fix case title. --- module/testcase/view/view.html.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/module/testcase/view/view.html.php b/module/testcase/view/view.html.php index d3e85dcef7..3f54aca24d 100644 --- a/module/testcase/view/view.html.php +++ b/module/testcase/view/view.html.php @@ -219,13 +219,13 @@ if($case->version > $case->currentVersion and $from == 'testtask') { echo "(testcase->fromTesttask}>{$lang->testcase->changed} "; - echo html::a($this->createLink('testcase', 'confirmchange', "caseID=$case->id"), $lang->testcase->sync, 'hiddenwin', "class='btn btn-mini btn-info' title={$lang->testcase->fromTesttask}"); + echo html::a($this->createLink('testcase', 'confirmchange', "caseID=$case->id"), $lang->testcase->sync, 'hiddenwin', "class='btn btn-mini btn-info'"); echo ")"; } if(isset($case->libCaseVersion) and $case->libCaseVersion > $case->version and $from != 'testtask') { echo "(testcase->fromCaselib}>{$lang->testcase->changed} "; - echo html::a($this->createLink('testcase', 'confirmLibcaseChange', "caseID=$case->id&libcaseID=$case->fromCaseID&version=$case->libCaseVersion"), $lang->testcase->sync, 'hiddenwin', "class='btn btn-mini btn-info' title={$lang->testcase->fromCaselib}"); + echo html::a($this->createLink('testcase', 'confirmLibcaseChange', "caseID=$case->id&libcaseID=$case->fromCaseID&version=$case->libCaseVersion"), $lang->testcase->sync, 'hiddenwin', "class='btn btn-mini btn-info'"); echo ")"; } ?> From 8846db52698acd38ec4f2a1d25642037a1beb0c3 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Wed, 27 Feb 2019 14:09:34 +0800 Subject: [PATCH 298/442] * fix error. --- module/project/model.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/project/model.php b/module/project/model.php index 614019023f..37b17d5a73 100644 --- a/module/project/model.php +++ b/module/project/model.php @@ -2322,7 +2322,7 @@ class projectModel extends model if($product->type != 'normal') { $productType = $product->type; - if($product->branch) + if($product->branch and isset($branchGroups[$product->id][$product->branch])) { $branchPairs[$product->branch] = (count($products) > 1 ? $product->name . '/' : '') . $branchGroups[$product->id][$product->branch]; } From 00ce24a83b5e585068be9fabeca8cbf07ae961c7 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Wed, 27 Feb 2019 14:17:18 +0800 Subject: [PATCH 299/442] * adjust for zentao db. --- db/zentao.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/db/zentao.sql b/db/zentao.sql index 6411d3a06e..3bad2d02e7 100644 --- a/db/zentao.sql +++ b/db/zentao.sql @@ -461,7 +461,7 @@ CREATE TABLE IF NOT EXISTS `zt_productplan` ( `id` mediumint(8) unsigned NOT NULL auto_increment, `product` mediumint(8) unsigned NOT NULL, `branch` mediumint(8) unsigned NOT NULL, - `parent` mediumint(9) NOT NULL DEFAULT '0' + `parent` mediumint(9) NOT NULL DEFAULT '0', `title` varchar(90) NOT NULL, `desc` text NOT NULL, `begin` date NOT NULL, From 22ca9b8fa450482090cd93aad71be7ba3f4fde77 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Wed, 27 Feb 2019 14:28:15 +0800 Subject: [PATCH 300/442] * adjust standard sql. --- db/standard/zentao11.3.sql | 1 + 1 file changed, 1 insertion(+) diff --git a/db/standard/zentao11.3.sql b/db/standard/zentao11.3.sql index 1a7a433184..70d7bf65d0 100644 --- a/db/standard/zentao11.3.sql +++ b/db/standard/zentao11.3.sql @@ -465,6 +465,7 @@ CREATE TABLE `zt_productplan` ( `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `product` mediumint(8) unsigned NOT NULL, `branch` mediumint(8) unsigned NOT NULL, + `parent` mediumint(9) NOT NULL DEFAULT '0', `title` varchar(90) NOT NULL, `desc` text NOT NULL, `begin` date NOT NULL, From ab8550d7626d3349db85d66c276136eb29e5dd49 Mon Sep 17 00:00:00 2001 From: chenfeiCF Date: Wed, 27 Feb 2019 14:47:04 +0800 Subject: [PATCH 301/442] * Adjust edit view of doc lib. --- module/doc/control.php | 8 ++++---- module/doc/view/editlib.html.php | 6 ++---- module/doc/view/side.html.php | 2 +- 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/module/doc/control.php b/module/doc/control.php index ee5e0ecd82..7cc88d3753 100644 --- a/module/doc/control.php +++ b/module/doc/control.php @@ -44,7 +44,7 @@ class doc extends control $pager = new pager(0, 5, 1); $this->lang->modulePageActions = $this->doc->setFastMenu($this->lang->doc->fast); - $this->lang->modulePageActions .= common::hasPriv('doc', 'createLib') ? html::a(helper::createLink('doc', 'createLib'), " " . $this->lang->doc->createLib, '', "class='btn btn-secondary iframe' data-width='50%'") : ''; + $this->lang->modulePageActions .= common::hasPriv('doc', 'createLib') ? html::a(helper::createLink('doc', 'createLib'), " " . $this->lang->doc->createLib, '', "class='btn btn-secondary iframe' data-width='70%'") : ''; $actionURL = $this->createLink('doc', 'browse', "lib=0&browseType=bySearch&queryID=myQueryID"); $this->doc->buildSearchForm(0, array(), 0, $actionURL, 'index'); @@ -328,7 +328,7 @@ class doc extends control $this->product->setMenu($this->product->getPairs(), $lib->product); $this->lang->set('menugroup.doc', 'product'); - $this->lang->modulePageActions = common::hasPriv('doc', 'createLib') ? html::a(helper::createLink('doc', 'createLib'), " " . $this->lang->doc->createLib, '', "class='btn btn-secondary iframe' data-width='50%'") : ''; + $this->lang->modulePageActions = common::hasPriv('doc', 'createLib') ? html::a(helper::createLink('doc', 'createLib'), " " . $this->lang->doc->createLib, '', "class='btn btn-secondary iframe' data-width='70%'") : ''; } elseif($this->from == 'project') { @@ -337,7 +337,7 @@ class doc extends control $this->project->setMenu($this->project->getPairs('nocode'), $lib->project); $this->lang->set('menugroup.doc', 'project'); - $this->lang->modulePageActions = common::hasPriv('doc', 'createLib') ? html::a(helper::createLink('doc', 'createLib'), " " . $this->lang->doc->createLib, '', "class='btn btn-secondary iframe' data-width='50%'") : ''; + $this->lang->modulePageActions = common::hasPriv('doc', 'createLib') ? html::a(helper::createLink('doc', 'createLib'), " " . $this->lang->doc->createLib, '', "class='btn btn-secondary iframe' data-width='70%'") : ''; } else { @@ -803,7 +803,7 @@ class doc extends control } elseif($from == 'project') { - $this->lang->modulePageActions = common::hasPriv('doc', 'createLib') ? html::a(helper::createLink('doc', 'createLib'), " " . $this->lang->doc->createLib, '', "class='btn btn-secondary iframe' data-width='50%'") : ''; + $this->lang->modulePageActions = common::hasPriv('doc', 'createLib') ? html::a(helper::createLink('doc', 'createLib'), " " . $this->lang->doc->createLib, '', "class='btn btn-secondary iframe' data-width='70%'") : ''; $this->lang->doc->menu = $this->lang->project->menu; $this->lang->doc->menuOrder = $this->lang->project->menuOrder; $this->project->setMenu($this->project->getPairs('nocode'), $objectID); diff --git a/module/doc/view/editlib.html.php b/module/doc/view/editlib.html.php index e0b2c0d3ce..5ddcf493cc 100644 --- a/module/doc/view/editlib.html.php +++ b/module/doc/view/editlib.html.php @@ -37,10 +37,8 @@
            diff --git a/module/doc/view/side.html.php b/module/doc/view/side.html.php index e45a1ddd20..7c66358644 100644 --- a/module/doc/view/side.html.php +++ b/module/doc/view/side.html.php @@ -125,7 +125,7 @@ if(empty($type)) $type = 'product';
          • doclib->create, $tabValue, ''); - if($text) echo html::a($this->createLink('doc', 'createLib', "type={$tabValue}"), $text, '', "class='iframe' data-width='50%'"); + if($text) echo html::a($this->createLink('doc', 'createLib', "type={$tabValue}"), $text, '', "class='iframe' data-width='70%'"); ?>
          • From dcc120573d752f8fabacb0bdfae6bef613d6cbd6 Mon Sep 17 00:00:00 2001 From: Yagami <976204163@qq.com> Date: Wed, 27 Feb 2019 17:00:49 +0800 Subject: [PATCH 302/442] * Fix get user data method. --- module/bug/model.php | 2 +- module/story/model.php | 2 +- module/task/model.php | 2 +- module/testcase/model.php | 5 ----- 4 files changed, 3 insertions(+), 8 deletions(-) diff --git a/module/bug/model.php b/module/bug/model.php index 488731e875..5a67f4fd00 100644 --- a/module/bug/model.php +++ b/module/bug/model.php @@ -1325,7 +1325,7 @@ class bugModel extends model $bugs = $this->dao->select('*')->from(TABLE_BUG) ->where('deleted')->eq(0) ->beginIF(!$this->app->user->admin)->andWhere('project')->in('0,' . $this->app->user->view->projects)->fi() - ->beginIF($type != 'closedBy')->andWhere('status')->ne('closed')->fi() + ->beginIF($type != 'closedBy' and $this->app->moduleName == 'block')->andWhere('status')->ne('closed')->fi() ->beginIF($type != 'all')->andWhere("`$type`")->eq($account)->fi() ->orderBy($orderBy) ->beginIF($limit > 0)->limit($limit)->fi() diff --git a/module/story/model.php b/module/story/model.php index be8e3e58fd..a19f39095a 100644 --- a/module/story/model.php +++ b/module/story/model.php @@ -1771,7 +1771,7 @@ class storyModel extends model $stories = $this->dao->select('t1.*, t2.name as productTitle')->from(TABLE_STORY)->alias('t1') ->leftJoin(TABLE_PRODUCT)->alias('t2')->on('t1.product = t2.id') ->where('t1.deleted')->eq(0) - ->beginIF($type != 'closedBy')->andWhere('t1.status')->ne('closed')->fi() + ->beginIF($type != 'closedBy' and $this->app->moduleName == 'block')->andWhere('t1.status')->ne('closed')->fi() ->beginIF($type != 'all') ->beginIF($type == 'assignedTo')->andWhere('assignedTo')->eq($account)->fi() ->beginIF($type == 'openedBy')->andWhere('openedBy')->eq($account)->fi() diff --git a/module/task/model.php b/module/task/model.php index 710e70ba06..f304be7b1c 100644 --- a/module/task/model.php +++ b/module/task/model.php @@ -1671,7 +1671,7 @@ class taskModel extends model ->leftjoin(TABLE_PROJECT)->alias('t2')->on('t1.project = t2.id') ->leftjoin(TABLE_STORY)->alias('t3')->on('t1.story = t3.id') ->where('t1.deleted')->eq(0) - ->beginIF($type != 'closedBy')->andWhere('t1.status')->ne('closed')->fi() + ->beginIF($type != 'closedBy' and $this->app->moduleName == 'block')->andWhere('t1.status')->ne('closed')->fi() ->beginIF($type == 'finishedBy') ->andWhere('t1.finishedby', 1)->eq($account) ->orWhere('t1.finishedList')->like("%,{$account},%") diff --git a/module/testcase/model.php b/module/testcase/model.php index 9a98988a1a..561e024114 100644 --- a/module/testcase/model.php +++ b/module/testcase/model.php @@ -1459,11 +1459,6 @@ class testcaseModel extends model common::printIcon('testcase', 'confirmstorychange', "caseID=$case->id", $case, 'list', 'confirm', 'hiddenwin', '', '', '', $this->lang->confirm); break; } - if(isset($libCaseVersion) and $libCaseVersion > $case->version and !$case->needconfirm) - { - common::printIcon('testcase', 'confirmLibcasechange', "caseID=$case->id&libCaseID=$fromCaseID&version=$libCaseVersion", $case, 'list', 'confirm', 'hiddenwin', '', '', '', $this->lang->confirm); - break; - } common::printIcon('testtask', 'results', "runID=0&caseID=$case->id", $case, 'list', '', '', 'iframe', true); common::printIcon('testtask', 'runCase', "runID=0&caseID=$case->id&version=$case->version", $case, 'list', 'play', '', 'runCase iframe', false, "data-width='95%'"); From e17129030060b08d0dea25180ba1ba17ead2eb35 Mon Sep 17 00:00:00 2001 From: chenfeiCF Date: Wed, 27 Feb 2019 17:03:16 +0800 Subject: [PATCH 303/442] * Adjust code. --- module/block/view/todoblock.html.php | 2 +- module/bug/view/browse.html.php | 2 +- module/doc/js/edit.js | 2 +- module/doc/model.php | 4 ++-- module/my/view/task.html.php | 2 +- module/project/view/treestory.html.php | 2 +- module/project/view/treetask.html.php | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/module/block/view/todoblock.html.php b/module/block/view/todoblock.html.php index e1e8037cd4..6bb6062547 100644 --- a/module/block/view/todoblock.html.php +++ b/module/block/view/todoblock.html.php @@ -52,7 +52,7 @@ if(!$selfCall) die(include('./todolist.html.php'));
            - +
            diff --git a/module/bug/view/browse.html.php b/module/bug/view/browse.html.php index a0be507ce2..0147853aff 100644 --- a/module/bug/view/browse.html.php +++ b/module/bug/view/browse.html.php @@ -37,7 +37,7 @@ $currentBrowseType = isset($lang->bug->mySelects[$browseType]) && in_array($brow if($moduleID) { $removeLink = $browseType == 'bymodule' ? inlink('browse', "productID=$productID&branch=$branch&browseType=$browseType¶m=0&orderBy=$orderBy&recTotal=0&recPerPage={$pager->recPerPage}") : 'javascript:removeCookieByKey("bugModule")'; - echo html::a($removeLink, "", '', "class='text-muted'"); + echo html::a($removeLink, "", '', "class='text-muted'"); } ?> diff --git a/module/doc/js/edit.js b/module/doc/js/edit.js index 1ab517c392..525da538a0 100644 --- a/module/doc/js/edit.js +++ b/module/doc/js/edit.js @@ -1,6 +1,6 @@ $(function() { - toggleAcl($('input[name="acl"]').val(), 'doc'); + toggleAcl($('input[name="acl"]:checked').val(), 'doc'); $('input[name="type"]').change(function() { var type = $(this).val(); diff --git a/module/doc/model.php b/module/doc/model.php index c7b6359195..7e5af91b90 100644 --- a/module/doc/model.php +++ b/module/doc/model.php @@ -847,6 +847,8 @@ class docModel extends model { if($this->app->user->admin) return true; + if($object->acl == 'open') return true; + $account = ',' . $this->app->user->account . ','; if(isset($object->addedBy) and $object->addedBy == $this->app->user->account) return true; if(isset($object->users) and strpos(",{$object->users},", $account) !== false) return true; @@ -875,8 +877,6 @@ class docModel extends model if(!empty($object->product)) return $this->loadModel('product')->checkPriv($object->product); } - if($object->acl == 'open') return true; - return false; } diff --git a/module/my/view/task.html.php b/module/my/view/task.html.php index 34ff273719..db1fb90172 100644 --- a/module/my/view/task.html.php +++ b/module/my/view/task.html.php @@ -96,7 +96,7 @@ { if($task->status != 'pause') common::printIcon('task', 'start', "taskID=$task->id", $task, 'list', '', '', 'iframe', true); if($task->status == 'pause') common::printIcon('task', 'restart', "taskID=$task->id", $task, 'list', '', '', 'iframe', true); - common::printIcon('task', 'close', "taskID=$task->id", $task, 'list', '', '', 'iframe', true, ''); + common::printIcon('task', 'close', "taskID=$task->id", $task, 'list', '', '', 'iframe', true); common::printIcon('task', 'finish', "taskID=$task->id", $task, 'list', '', '', 'iframe', true); common::printIcon('task', 'recordEstimate', "taskID=$task->id", $task, 'list', 'time', '', 'iframe', true); diff --git a/module/project/view/treestory.html.php b/module/project/view/treestory.html.php index 893dbd1fdc..c053804db0 100644 --- a/module/project/view/treestory.html.php +++ b/module/project/view/treestory.html.php @@ -12,7 +12,7 @@ common::printIcon('story', 'change', $vars, $story, 'list', 'fork', '', 'btn btn-info btn-icon'); common::printIcon('story', 'delete', $vars, $story, 'list', 'trash', 'hiddenwin', 'btn btn-info btn-icon'); common::printIcon('story', 'review', $vars, $story, 'list', 'glasses', '', 'btn btn-info btn-icon'); - common::printIcon('story', 'close', $vars, $story, 'list', 'close', '', 'btn btn-info btn-icon iframe', true); + common::printIcon('story', 'close', $vars, $story, 'list', 'off', '', 'btn btn-info btn-icon iframe', true); common::printIcon('story', 'edit', $vars, $story, 'list', '', '', 'btn btn-info btn-icon'); if($config->global->flow != 'onlyStory') common::printIcon('story', 'createCase', "productID=$story->product&branch=$story->branch&module=0&from=¶m=0&$vars", $story, 'list', 'sitemap', '', 'btn btn-info btn-icon'); ?> diff --git a/module/project/view/treetask.html.php b/module/project/view/treetask.html.php index d86b6c68cd..f8626278e3 100644 --- a/module/project/view/treetask.html.php +++ b/module/project/view/treetask.html.php @@ -24,7 +24,7 @@ if($task->status == 'wait') common::printIcon('task', 'finish', "taskID=$task->id", $task, 'list', '', '', 'btn btn-info btn-icon iframe', true); if($task->status == 'wait') common::printIcon('task', 'start', "taskID=$task->id", $task, 'list', '', '', 'btn btn-info btn-icon iframe', true); if($task->status == 'pause') common::printIcon('task', 'restart', "taskID=$task->id", $task, 'list', '', '', 'btn btn-info btn-icon iframe', true); - if($task->status == 'done' or $task->status == 'cancel' or $task->status == 'closed') common::printIcon('task', 'close', "taskID=$task->id", $task, 'list', 'close', '', 'btn btn-info btn-icon iframe', true); + if($task->status == 'done' or $task->status == 'cancel' or $task->status == 'closed') common::printIcon('task', 'close', "taskID=$task->id", $task, 'list', 'off', '', 'btn btn-info btn-icon iframe', true); if($task->status == 'doing') common::printIcon('task', 'finish', "taskID=$task->id", $task, 'list', '', '', 'btn btn-info btn-icon iframe', true); common::printIcon('task', 'recordEstimate', "taskID=$task->id", $task, 'list', 'time', '', 'btn btn-info btn-icon iframe', true); From 57a491bbc63e17c7fb94373aaaada413bb321a7a Mon Sep 17 00:00:00 2001 From: wangyidong Date: Thu, 28 Feb 2019 08:40:55 +0800 Subject: [PATCH 304/442] * fix for check priv. --- module/doc/view/side.html.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/module/doc/view/side.html.php b/module/doc/view/side.html.php index 7c66358644..8ba198a0d8 100644 --- a/module/doc/view/side.html.php +++ b/module/doc/view/side.html.php @@ -36,7 +36,7 @@ if(empty($type)) $type = 'product';
          • doclib->create, $tabValue, ''); - if($text) echo html::a($this->createLink($tabValue, 'create'), $text, '', "class='text-ellipsis'"); + if($text and common::hasPriv($tabValue, 'create')) echo html::a($this->createLink($tabValue, 'create'), $text, '', "class='text-ellipsis'"); ?>
          • @@ -125,7 +125,7 @@ if(empty($type)) $type = 'product';
          • doclib->create, $tabValue, ''); - if($text) echo html::a($this->createLink('doc', 'createLib', "type={$tabValue}"), $text, '', "class='iframe' data-width='70%'"); + if($text and common::hasPriv('doc', 'createLib')) echo html::a($this->createLink('doc', 'createLib', "type={$tabValue}"), $text, '', "class='iframe' data-width='70%'"); ?>
          • From 296290f9c8953191df8b1074494f53791e478320 Mon Sep 17 00:00:00 2001 From: chenfeiCF Date: Thu, 28 Feb 2019 09:55:45 +0800 Subject: [PATCH 305/442] * Set acl default when create product or project. --- module/product/model.php | 4 +--- module/project/model.php | 4 +--- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/module/product/model.php b/module/product/model.php index 528d47b3e3..ed5c84b319 100644 --- a/module/product/model.php +++ b/module/product/model.php @@ -370,7 +370,7 @@ class productModel extends model $lib->name = $this->lang->doclib->main['product']; $lib->type = 'product'; $lib->main = '1'; - $lib->acl = $product->acl == 'open' ? 'open' : 'private'; + $lib->acl = 'default'; $this->dao->insert(TABLE_DOCLIB)->data($lib)->exec(); $this->loadModel('user')->updateUserView($productID, 'product'); @@ -404,8 +404,6 @@ class productModel extends model ->exec(); if(!dao::isError()) { - if($product->acl != $oldProduct->acl) $this->dao->update(TABLE_DOCLIB)->set('acl')->eq($product->acl == 'open' ? 'open' : 'private')->where('product')->eq($productID)->exec(); - $this->file->updateObjectID($this->post->uid, $productID, 'product'); if($product->acl != $oldProduct->acl or $product->whitelist != $oldProduct->whitelist) $this->loadModel('user')->updateUserView($productID, 'product'); return common::createChanges($oldProduct, $product); diff --git a/module/project/model.php b/module/project/model.php index 37b17d5a73..fba8ca1742 100644 --- a/module/project/model.php +++ b/module/project/model.php @@ -348,7 +348,7 @@ class projectModel extends model $lib->name = $this->lang->doclib->main['project']; $lib->type = 'project'; $lib->main = '1'; - $lib->acl = $project->acl == 'open' ? 'open' : 'private'; + $lib->acl = 'default'; $this->dao->insert(TABLE_DOCLIB)->data($lib)->exec(); $this->loadModel('user')->updateUserView($projectID, 'project'); @@ -421,8 +421,6 @@ class projectModel extends model } if(!dao::isError()) { - if($project->acl != $oldProject->acl) $this->dao->update(TABLE_DOCLIB)->set('acl')->eq($project->acl == 'open' ? 'open' : 'private')->where('project')->eq($projectID)->exec(); - $this->file->updateObjectID($this->post->uid, $projectID, 'project'); if($project->acl != $oldProject->acl or $project->whitelist != $oldProject->whitelist) $this->loadModel('user')->updateUserView($projectID, 'project'); return common::createChanges($oldProject, $project); From ad09223066a90da9fac4c4dcccb4504c4bef08e3 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Thu, 28 Feb 2019 10:41:31 +0800 Subject: [PATCH 306/442] * adjust for demo data. --- db/demo.sql | 8 ++++---- db/endemo.sql | 10 +++++----- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/db/demo.sql b/db/demo.sql index 228334c699..4f0862ec24 100644 --- a/db/demo.sql +++ b/db/demo.sql @@ -226,10 +226,10 @@ INSERT INTO `zt_productplan` (`id`, `product`, `title`, `desc`, `begin`, `end`, INSERT INTO `zt_project` (`id`, `isCat`, `catID`, `type`, `parent`, `name`, `code`, `begin`, `end`, `days`, `status`, `statge`, `pri`, `desc`, `openedBy`, `openedDate`, `closedBy`, `closedDate`, `canceledBy`, `canceledDate`, `PO`, `PM`, `QD`, `RD`, `team`, `acl`, `whitelist`, `order`, `deleted`) VALUES(1, '0', 0, 'sprint', 0, '企业网站第一期', 'coWeb1', '2012-06-05', '2012-12-04', 184, 'done', '1', '1', '开发企业网站的基本雏形。
            ', '', 0, '', 0, '', 0, 'productManager', 'projectManager', 'testManager', 'productManager', '公司开发团队', 'open', '', '5', '0'); INSERT INTO `zt_project` (`id`, `isCat`, `catID`, `type`, `parent`, `name`, `code`, `begin`, `end`, `days`, `status`, `statge`, `pri`, `desc`, `openedBy`, `openedDate`, `closedBy`, `closedDate`, `canceledBy`, `canceledDate`, `PO`, `PM`, `QD`, `RD`, `team`, `acl`, `whitelist`, `order`, `deleted`) VALUES(2, '0', 0, 'sprint', 0, '企业网站第二期', 'coWebsite2', '2013-06-05', '2014-06-04', 365, 'wait', '1', '1', '', '', 0, '', 0, '', 0, 'productManager', 'projectManager', 'testManager', 'productManager', '公司开发团队', 'open', '', '10', '0'); -INSERT INTO `zt_doclib` (`id`, `product`, `project`, `name`, `acl`, `main`) VALUES(1, 1, 0, '产品库', 'open','1'); -INSERT INTO `zt_doclib` (`id`, `product`, `project`, `name`, `acl`, `main`) VALUES(2, 2, 0, '产品库', 'open', '1'); -INSERT INTO `zt_doclib` (`id`, `product`, `project`, `name`, `acl`, `main`) VALUES(3, 0, 1, '项目库', 'open', '1'); -INSERT INTO `zt_doclib` (`id`, `product`, `project`, `name`, `acl`, `main`) VALUES(4, 0, 2, '项目库', 'open', '1'); +INSERT INTO `zt_doclib` (`id`, `type`, `product`, `project`, `name`, `acl`, `main`) VALUES(1, 'product', 1, 0, '产品库', 'default','1'); +INSERT INTO `zt_doclib` (`id`, `type`, `product`, `project`, `name`, `acl`, `main`) VALUES(2, 'product', 2, 0, '产品库', 'default', '1'); +INSERT INTO `zt_doclib` (`id`, `type`, `product`, `project`, `name`, `acl`, `main`) VALUES(3, 'project', 0, 1, '项目库', 'default', '1'); +INSERT INTO `zt_doclib` (`id`, `type`, `product`, `project`, `name`, `acl`, `main`) VALUES(4, 'project', 0, 2, '项目库', 'default', '1'); INSERT INTO `zt_projectproduct` (`project`, `product`) VALUES(1, 1); INSERT INTO `zt_projectproduct` (`project`, `product`) VALUES(2, 1); diff --git a/db/endemo.sql b/db/endemo.sql index adac0adf95..d6863101cd 100644 --- a/db/endemo.sql +++ b/db/endemo.sql @@ -149,11 +149,11 @@ INSERT INTO `zt_dept` (`id`, `name`, `parent`, `path`, `grade`, `order`, `positi (5, 'Dev 1', 2, ',2,5,', 2, 10, '', '', ''), (6, 'Dev 2', 2, ',2,6,', 2, 20, '', '', ''); -INSERT INTO `zt_doclib` (`id`, `product`, `project`, `name`, `acl`, `groups`, `users`, `main`, `order`, `deleted`) VALUES -(1, 1, 0, 'Product Main Library', 'open', '', '', '1', 0, '0'), -(2, 0, 1, 'Project Main Library', 'open', '', '', '1', 0, '0'), -(3, 2, 0, 'Product Main Library', 'open', '', '', '1', 0, '0'), -(4, 0, 2, 'Project Main Library', 'open', '', '', '1', 0, '0'); +INSERT INTO `zt_doclib` (`id`, `type`, `product`, `project`, `name`, `acl`, `groups`, `users`, `main`, `order`, `deleted`) VALUES +(1, 'product', 1, 0, 'Product Main Library', 'default', '', '', '1', 0, '0'), +(2, 'project', 0, 1, 'Project Main Library', 'default', '', '', '1', 0, '0'), +(3, 'product', 2, 0, 'Product Main Library', 'default', '', '', '1', 0, '0'), +(4, 'project', 0, 2, 'Project Main Library', 'default', '', '', '1', 0, '0'); INSERT INTO `zt_history` (`id`, `action`, `field`, `old`, `new`, `diff`) VALUES (1, 7, 'desc', 'Finish developing system drive program.', 'Add advanced features such as remote desktop.', '001- Finish developing system drive program.\n001+ Add advanced features such as remote desktop.'), From 0c9b5eb208b59c83793fc5e4ecba6a9b1d1bd505 Mon Sep 17 00:00:00 2001 From: Yagami <976204163@qq.com> Date: Thu, 28 Feb 2019 15:48:52 +0800 Subject: [PATCH 307/442] * Fix user icon. --- module/group/view/browse.html.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/group/view/browse.html.php b/module/group/view/browse.html.php index 75b78a0608..f59c4d9135 100644 --- a/module/group/view/browse.html.php +++ b/module/group/view/browse.html.php @@ -59,7 +59,7 @@ } else { - echo ""; + echo ""; } ?> From c0184eca0921743fb71539aabb2601173f2718f3 Mon Sep 17 00:00:00 2001 From: reneeteng Date: Tue, 5 Mar 2019 16:46:10 +0800 Subject: [PATCH 308/442] * Lang change. --- module/bug/lang/en.php | 4 ++-- module/build/lang/en.php | 2 +- module/testreport/lang/en.php | 26 +++++++++++++------------- module/testtask/lang/en.php | 8 ++++---- 4 files changed, 20 insertions(+), 20 deletions(-) diff --git a/module/bug/lang/en.php b/module/bug/lang/en.php index f6fabf5623..3261d85016 100644 --- a/module/bug/lang/en.php +++ b/module/bug/lang/en.php @@ -140,7 +140,7 @@ $lang->bug->lblAssignedTo = 'Assignee'; $lang->bug->lblMailto = 'Mail To'; $lang->bug->lblLastEdited = 'Last Edited'; $lang->bug->lblResolved = 'Resolved By'; -$lang->bug->allUsers = 'Load All User'; +$lang->bug->allUsers = 'All Users'; $lang->bug->allBuilds = 'All'; $lang->bug->createBuild = 'New'; @@ -375,7 +375,7 @@ $lang->bug->action->linkrelatedbug = array('main' => '$date, linked by bug->action->unlinkrelatedbug = array('main' => '$date, unlinked by $actor from Bug $extra.'); $lang->bug->placeholder = new stdclass(); -$lang->bug->placeholder->chooseBuilds = 'Choose Build...'; +$lang->bug->placeholder->chooseBuilds = 'Select Build...'; $lang->bug->placeholder->newBuildName = 'New build Name'; $lang->bug->featureBar['browse']['all'] = $lang->bug->allBugs; diff --git a/module/build/lang/en.php b/module/build/lang/en.php index 52bee5f407..1617afaabc 100644 --- a/module/build/lang/en.php +++ b/module/build/lang/en.php @@ -44,7 +44,7 @@ $lang->build->unlinkStory = 'Unlink Story'; $lang->build->unlinkBug = 'Unlink Bug'; $lang->build->stories = 'Finished Story'; $lang->build->bugs = 'Resolved Bug'; -$lang->build->generatedBugs = 'Left Bug'; +$lang->build->generatedBugs = 'Reported Bug'; $lang->build->noProduct = " This {$lang->projectCommon} has not linked to {$lang->productCommon}, so Build cannot be created. Please first link {$lang->productCommon}"; $lang->build->noBuild = 'No builds. '; diff --git a/module/testreport/lang/en.php b/module/testreport/lang/en.php index c789e0e0d1..bc06d8eeb1 100644 --- a/module/testreport/lang/en.php +++ b/module/testreport/lang/en.php @@ -23,10 +23,10 @@ $lang->testreport->stories = 'Test Story'; $lang->testreport->bugs = 'Bugs'; $lang->testreport->builds = 'Build Info'; $lang->testreport->goal = 'Project Goal'; -$lang->testreport->cases = 'Cases'; +$lang->testreport->cases = 'Case'; $lang->testreport->bugInfo = 'Bug Distribution'; $lang->testreport->report = 'Summary'; -$lang->testreport->legacyBugs = 'Legacy Bugs'; +$lang->testreport->legacyBugs = 'Legacy Bug'; $lang->testreport->createdDate = 'Date'; $lang->testreport->objectID = 'Object'; $lang->testreport->profile = 'Profile'; @@ -36,10 +36,10 @@ $lang->testreport->all = 'All Report'; $lang->testreport->deleted = 'Deleted'; $lang->testreport->legendBasic = 'Basic Info'; -$lang->testreport->legendStoryAndBug = 'Stories and Bugs of Test'; +$lang->testreport->legendStoryAndBug = 'Story&Bug'; $lang->testreport->legendBuild = 'Build Info'; $lang->testreport->legendCase = 'Linked Case'; -$lang->testreport->legendLegacyBugs = 'Legacy Bugs'; +$lang->testreport->legendLegacyBugs = 'Legacy Bug'; $lang->testreport->legendReport = 'Report'; $lang->testreport->legendComment = 'Summary'; $lang->testreport->legendMore = 'More'; @@ -51,21 +51,21 @@ $lang->testreport->bugOpenedByGroups = 'Bug CreateBy Distribution'; $lang->testreport->bugResolvedByGroups = 'Bug ResolveBy Distribution'; $lang->testreport->bugResolutionGroups = 'Bug Resolution Distribution'; $lang->testreport->bugModuleGroups = 'Bug Module Distribution'; -$lang->testreport->legacyBugs = 'Legacy Bugs'; +$lang->testreport->legacyBugs = 'Legacy Bug'; $lang->testreport->bugConfirmedRate = 'Confirmed Bug Rate (Solution is fixed or postponed / status is resolved or closed)'; $lang->testreport->bugCreateByCaseRate = 'Bug Created in Case Rate (Bugs created in cases / Newly added bugs)'; $lang->testreport->caseSummary = ' %s cases in Total : %s performed, %s results, %s failed.'; $lang->testreport->buildSummary = 'Tested %s build.'; $lang->testreport->confirmDelete = 'Do you want to delete this report?'; -$lang->testreport->moreNotice = 'More features can be extended with reference to the ZenTao extension manual, or you can contact us at renee@easysoft.ltd for customization.'; -$lang->testreport->exportNotice = "Exported By ZenTaoPMS"; -$lang->testreport->noReport = "No report has been generated. Please check it later."; -$lang->testreport->foundBugTip = "Bugs created in this build and created in the test period."; -$lang->testreport->legacyBugTip = "Active Bugs, or the resolved beyond the test period."; -$lang->testreport->fromCaseBugTip = "Bugs created after failed cases in the test period."; -$lang->testreport->errorTrunk = "The trunk cannot create a QA report for. Please modify the linked build!"; -$lang->testreport->moreProduct = "You can only create QA reports for the same product."; +$lang->testreport->moreNotice = 'More features can be extended with reference to the ZenTao manual, or you can contact us at renee@easysoft.ltd for customization.'; +$lang->testreport->exportNotice = "Exported By ZenTao"; +$lang->testreport->noReport = "No report has been generated. Please check later."; +$lang->testreport->foundBugTip = "Bugs reported in this build and in this test."; +$lang->testreport->legacyBugTip = "Active Bugs, or bugs that are resolved after this test is done."; +$lang->testreport->fromCaseBugTip = "Bugs reported due to failed cases in this test."; +$lang->testreport->errorTrunk = "The trunk cannot generate a QA report. Modify the linked build!"; +$lang->testreport->moreProduct = "You can only generate QA reports for the same product."; $lang->testreport->bugSummary = <<%s Bug(s) generated in total , diff --git a/module/testtask/lang/en.php b/module/testtask/lang/en.php index 0ccea25abe..784a8a3aab 100644 --- a/module/testtask/lang/en.php +++ b/module/testtask/lang/en.php @@ -19,7 +19,7 @@ $lang->testtask->browse = "Test"; $lang->testtask->linkCase = "Link Case"; $lang->testtask->selectVersion = "Select Version"; $lang->testtask->unlinkCase = "Unlink"; -$lang->testtask->batchUnlinkCases = "Batch unlink cases"; +$lang->testtask->batchUnlinkCases = "Batch unlink case"; $lang->testtask->batchAssign = "Batch assign"; $lang->testtask->runCase = "Run"; $lang->testtask->batchRun = "Batch run"; @@ -90,7 +90,7 @@ $lang->testtask->priList[1] = '1'; $lang->testtask->priList[2] = '2'; $lang->testtask->priList[4] = '4'; -$lang->testtask->unlinkedCases = 'Unlinked Cases'; +$lang->testtask->unlinkedCases = 'Unlinked Case'; $lang->testtask->linkByBuild = 'Copy from build'; $lang->testtask->linkByStory = 'Link by Story'; $lang->testtask->linkByBug = 'Link by Bug'; @@ -105,14 +105,14 @@ $lang->testtask->confirmDelete = 'Do you want to delete this test build?'; $lang->testtask->confirmUnlinkCase = 'Do you want to unlink this Case?'; $lang->testtask->noticeNoOther = 'There are no other test for this product'; $lang->testtask->noTesttask = 'No tests. '; -$lang->testtask->checkLinked = "Please check if the product that the test is related to has been linked to a project."; +$lang->testtask->checkLinked = "Please check whether the product that the test is linked to has been linked to a project."; $lang->testtask->assignedToMe = 'AssignToMe'; $lang->testtask->allCases = 'All Cases'; $lang->testtask->lblCases = 'Case'; $lang->testtask->lblUnlinkCase = 'Unlink Case'; -$lang->testtask->lblRunCase = 'Run Case'; +$lang->testtask->lblRunCase = 'Execute Case'; $lang->testtask->lblResults = 'Result'; $lang->testtask->placeholder = new stdclass(); From c829383362e1186c8e0a421f617f5c7863bd2669 Mon Sep 17 00:00:00 2001 From: reneeteng Date: Wed, 6 Mar 2019 17:21:35 +0800 Subject: [PATCH 309/442] *Lang change. --- module/story/lang/en.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/story/lang/en.php b/module/story/lang/en.php index 5f5aa31069..219ab48733 100644 --- a/module/story/lang/en.php +++ b/module/story/lang/en.php @@ -200,7 +200,7 @@ $lang->story->ignoreChangeStage = 'Story %s is a draft. Change its status.'; $lang->story->form = new stdclass(); $lang->story->form->area = 'Scope'; -$lang->story->form->desc = 'What Story is it? What is the acceptance criteria?'; +$lang->story->form->desc = 'What Story is it? What is the acceptance?'; $lang->story->form->resource = 'Who will allocate resources? How long does it take?'; $lang->story->form->file = 'If there are Story linked files, please click Here to upload it.'; From 5598c283cf38b5e2794cad51e0ead212c4e5f79a Mon Sep 17 00:00:00 2001 From: reneeteng Date: Thu, 7 Mar 2019 10:52:59 +0800 Subject: [PATCH 310/442] *Lang change --- module/build/lang/en.php | 4 ++-- module/common/lang/en.php | 4 ++-- module/release/lang/en.php | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/module/build/lang/en.php b/module/build/lang/en.php index 1617afaabc..22b8727ab4 100644 --- a/module/build/lang/en.php +++ b/module/build/lang/en.php @@ -45,12 +45,12 @@ $lang->build->unlinkBug = 'Unlink Bug'; $lang->build->stories = 'Finished Story'; $lang->build->bugs = 'Resolved Bug'; $lang->build->generatedBugs = 'Reported Bug'; -$lang->build->noProduct = " This {$lang->projectCommon} has not linked to {$lang->productCommon}, so Build cannot be created. Please first link {$lang->productCommon}"; +$lang->build->noProduct = " This {$lang->projectCommon} is not linked to {$lang->productCommon}, so the Build cannot be created. Please first link {$lang->productCommon}"; $lang->build->noBuild = 'No builds. '; $lang->build->finishStories = ' %s Story is finished.'; $lang->build->resolvedBugs = ' %s Bug is resolved.'; -$lang->build->createdBugs = ' %s Bug is created.'; +$lang->build->createdBugs = ' %s Bug is created.'; $lang->build->placeholder = new stdclass(); $lang->build->placeholder->scmPath = ' Source code repository, e.g. Subversion/Git Library path'; diff --git a/module/common/lang/en.php b/module/common/lang/en.php index efaa944a66..d5fe367050 100644 --- a/module/common/lang/en.php +++ b/module/common/lang/en.php @@ -348,7 +348,7 @@ $lang->report->menu->test = array('link' => 'Test|report|bugcreate', 'alias' $lang->report->menu->staff = array('link' => 'Company|report|workload'); $lang->report->notice = new stdclass(); -$lang->report->notice->help = 'Note: Report is generated on search results. Please search in the list before you generate a report.'; +$lang->report->notice->help = 'Note: Report is generated on search results. Please search the list before you generate a report.'; /* Company menu settings. */ $lang->company = new stdclass(); @@ -471,7 +471,7 @@ $lang->error = new stdclass(); $lang->error->companyNotFound = "The domain %s cannot be found!"; $lang->error->length = array("『%s』length error. It should be『%s』", "『%s』length should be <=『%s』and >『%s』."); $lang->error->reg = "『%s』format error. It should be『%s』."; -$lang->error->unique = "『%s』『%s』exists. Please go to Admin->Recycle to restore it, if you are sure it is deleted."; +$lang->error->unique = "『%s』『%s』exists. Go to Admin->Recycle to restore it, if you are sure it is deleted."; $lang->error->gt = "『%s』should be >『%s』."; $lang->error->ge = "『%s』should be >=『%s』."; $lang->error->notempty = "『%s』should not be blank."; diff --git a/module/release/lang/en.php b/module/release/lang/en.php index eeb7abbc80..beb48bcfde 100644 --- a/module/release/lang/en.php +++ b/module/release/lang/en.php @@ -44,7 +44,7 @@ $lang->release->last = 'Last Release'; $lang->release->unlinkStory = 'Unlink Story'; $lang->release->unlinkBug = 'Unlink Bug'; $lang->release->stories = 'Finished Story'; -$lang->release->bugs = 'Solved Bug'; +$lang->release->bugs = 'Resolved Bug'; $lang->release->leftBugs = 'Remained Bug'; $lang->release->generatedBugs = 'Remained Bug'; $lang->release->finishStories = 'Finished %s Story'; @@ -69,4 +69,4 @@ $lang->release->changeStatusList['normal'] = 'Activate'; $lang->release->changeStatusList['terminate'] = 'Terminate'; $lang->release->action = new stdclass(); -$lang->release->action->changestatus = array('main' => '$date, 由 $actor $extra。', 'extra' => 'changeStatusList'); +$lang->release->action->changestatus = array('main' => '$date, $extra by $actor', 'extra' => 'changeStatusList'); From 487e80242003c69d4a1d5bfd3380e886c981b997 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Fri, 8 Mar 2019 14:48:50 +0800 Subject: [PATCH 311/442] * finish task #7499. --- module/common/model.php | 2 +- module/product/lang/en.php | 4 +-- module/product/lang/zh-cn.php | 6 ++--- module/project/control.php | 50 +++++++++++++++++++++++++++++++++-- module/project/lang/en.php | 14 +++++----- module/project/lang/zh-cn.php | 8 +++--- module/task/control.php | 34 +++++++++++++++++++++++- 7 files changed, 98 insertions(+), 20 deletions(-) diff --git a/module/common/model.php b/module/common/model.php index c47a1a0c94..49a6cae306 100644 --- a/module/common/model.php +++ b/module/common/model.php @@ -1371,7 +1371,7 @@ EOD; { $module = $this->app->getModuleName(); $method = $this->app->getMethodName(); - if(isset($this->app->user->modifyPassword) and $this->app->user->modifyPassword and ($module != 'my' or $method != 'changepassword')) die(js::locate(helper::createLink('my', 'changepassword'))); + if(!empty($this->app->user->modifyPassword) and (($module != 'my' or $method != 'changepassword') and ($module != 'user' or $method != 'logout'))) die(js::locate(helper::createLink('my', 'changepassword'))); if($this->isOpenMethod($module, $method)) return true; if(!$this->loadModel('user')->isLogon() and $this->server->php_auth_user) $this->user->identifyByPhpAuth(); if(!$this->loadModel('user')->isLogon() and $this->cookie->za) $this->user->identifyByCookie(); diff --git a/module/product/lang/en.php b/module/product/lang/en.php index 535c746bc2..86b99cfb6b 100644 --- a/module/product/lang/en.php +++ b/module/product/lang/en.php @@ -58,7 +58,7 @@ $lang->product->accessDenied = "You have no access to {$lang->productCommon}." $lang->product->id = 'ID'; $lang->product->name = 'Name'; $lang->product->code = 'Alias'; -$lang->product->line = 'Product Line'; +$lang->product->line = "{$lang->productCommon} Line"; $lang->product->order = 'Sort'; $lang->product->type = 'Type'; $lang->product->status = 'Status'; @@ -121,7 +121,7 @@ $lang->product->aclList['custom'] = 'Custom (Team members and Whitelist members $lang->product->storySummary = " %s Story(ies), %s hour(s) estimated, case coverage is %s on this page."; $lang->product->checkedSummary = " %total% Checked, %estimate% hour(s) estimated, case coverage is %rate%."; $lang->product->noModule = '
            You have no modules
            Manage now
            '; -$lang->product->noProduct = 'No product. '; +$lang->product->noProduct = "No {$lang->productCommon}. "; $lang->product->noMatched = '"%s" cannot be found.' . $lang->productCommon; $lang->product->featureBar['browse']['allstory'] = $lang->product->allStory; diff --git a/module/product/lang/zh-cn.php b/module/product/lang/zh-cn.php index fc56ecd43c..544eb6ac8c 100644 --- a/module/product/lang/zh-cn.php +++ b/module/product/lang/zh-cn.php @@ -58,7 +58,7 @@ $lang->product->accessDenied = "您无权访问该{$lang->productCommon}"; $lang->product->id = '编号'; $lang->product->name = "{$lang->productCommon}名称"; $lang->product->code = "{$lang->productCommon}代号"; -$lang->product->line = '产品线'; +$lang->product->line = "{$lang->productCommon}线"; $lang->product->order = '排序'; $lang->product->type = "{$lang->productCommon}类型"; $lang->product->status = '状态'; @@ -120,8 +120,8 @@ $lang->product->aclList['custom'] = '自定义白名单(团队成员和白名 $lang->product->storySummary = "本页共 %s 个需求,预计 %s 个工时,用例覆盖率 %s。"; $lang->product->checkedSummary = "选中 %total% 个需求,预计 %estimate% 个工时,用例覆盖率 %rate%。"; -$lang->product->noModule = '
            您现在还没有模块信息
            请维护产品模块
            '; -$lang->product->noProduct = '暂时没有产品。'; +$lang->product->noModule = "
            您现在还没有模块信息
            请维护{$lang->productCommon}模块
            "; +$lang->product->noProduct = "暂时没有{$lang->productCommon}。"; $lang->product->noMatched = '找不到包含"%s"的' . $lang->productCommon; $lang->product->featureBar['browse']['allstory'] = $lang->product->allStory; diff --git a/module/project/control.php b/module/project/control.php index bddc75f2c2..e9daf719af 100644 --- a/module/project/control.php +++ b/module/project/control.php @@ -283,11 +283,57 @@ class project extends control } elseif($groupBy == 'assignedTo') { - $groupTasks[$task->assignedToRealName][] = $task; + if(isset($task->team)) + { + foreach($task->team as $team) + { + $cloneTask = clone $task; + $cloneTask->assignedTo = $team->account; + $cloneTask->estimate = $team->estimate; + $cloneTask->consumed = $team->consumed; + $cloneTask->left = $team->left; + if($team->left == 0) $cloneTask->status = 'done'; + + $realname = zget($users, $team->account); + $cloneTask->assignedToRealName = $realname; + $groupTasks[$realname][] = $cloneTask; + } + } + else + { + $groupTasks[$task->assignedToRealName][] = $task; + } } elseif($groupBy == 'finishedBy') { - $groupTasks[$users[$task->finishedBy]][] = $task; + if(isset($task->team)) + { + $task->consumed = $task->estimate = $task->left = 0; + foreach($task->team as $team) + { + if($team->left != 0) + { + $task->estimate += $team->estimate; + $task->consumed += $team->consumed; + $task->left += $team->left; + continue; + } + + $cloneTask = clone $task; + $cloneTask->finishedBy = $team->account; + $cloneTask->estimate = $team->estimate; + $cloneTask->consumed = $team->consumed; + $cloneTask->left = $team->left; + $cloneTask->status = 'done'; + $realname = zget($users, $team->account); + $groupTasks[$realname][] = $cloneTask; + } + if(!empty($task->left)) $groupTasks[$users[$task->finishedBy]][] = $task; + } + else + { + $groupTasks[$users[$task->finishedBy]][] = $task; + } } elseif($groupBy == 'closedBy') { diff --git a/module/project/lang/en.php b/module/project/lang/en.php index 7cccd8460e..020b6db385 100644 --- a/module/project/lang/en.php +++ b/module/project/lang/en.php @@ -55,7 +55,7 @@ $lang->project->other = 'Other:'; $lang->project->deleted = 'Deleted'; $lang->project->delayed = 'Delayed'; $lang->project->product = $lang->project->products; -$lang->project->readjustTime = 'Adjust project begin and end time'; +$lang->project->readjustTime = "Adjust {$lang->projectCommon} begin and end time"; $lang->project->readjustTask = 'Adjust task start date and deadline'; $lang->project->effort = 'Effort'; $lang->project->relatedMember = 'Team Member'; @@ -100,7 +100,7 @@ $lang->project->statusList['doing'] = 'Doing'; $lang->project->statusList['suspended'] = 'Suspend'; $lang->project->statusList['closed'] = 'Closed'; -$lang->project->aclList['open'] = "Default (Users who can visit Project have access to it.)"; +$lang->project->aclList['open'] = "Default (Users who can visit {$lang->projectCommon} have access to it.)"; $lang->project->aclList['private'] = 'Private (For team members only.)'; $lang->project->aclList['custom'] = 'Whitelist (Team members and the whitelist members have access to it.)'; @@ -129,7 +129,7 @@ $lang->project->unlinkStoryTasks = 'Unlink'; $lang->project->linkedProducts = 'Linked Product'; $lang->project->unlinkedProducts = 'Unlinked Product'; $lang->project->view = "Overview"; -$lang->project->create = "Create Project"; +$lang->project->create = "Create {$lang->projectCommon}"; $lang->project->copy = "Copy {$lang->projectCommon}"; $lang->project->delete = "Delete"; $lang->project->browse = "Browse"; @@ -192,7 +192,7 @@ $lang->project->aboveAllProduct = "All the above {$lang->productCommon}"; $lang->project->aboveAllProject = "All the above {$lang->projectCommon}"; /* 页面提示。*/ -$lang->project->linkStoryByPlanTips = 'It will link all stories in this plan to the project.'; +$lang->project->linkStoryByPlanTips = "It will link all stories in this plan to the {$lang->projectCommon}."; $lang->project->selectProject = "Select {$lang->projectCommon}"; $lang->project->beginAndEnd = 'Duration'; $lang->project->begin = 'Begin'; @@ -225,7 +225,7 @@ $lang->project->copyFromProject = "Copy from {$lang->projectCommon} $lang->project->cancelCopy = 'Cancel Copy'; $lang->project->byPeriod = 'By Time'; $lang->project->byUser = 'By User'; -$lang->project->noProject = 'No projects. '; +$lang->project->noProject = "No {$lang->projectCommon}. "; $lang->project->noMembers = 'No members. '; /* 交互提示。*/ @@ -262,8 +262,8 @@ $lang->project->charts->burn->graph->reference = 'Ideal'; $lang->project->charts->burn->graph->actuality = 'Actual'; $lang->project->placeholder = new stdclass(); -$lang->project->placeholder->code = 'Abbreviation of project name'; -$lang->project->placeholder->totalLeft = 'Estimates at the beginning of the Project.'; +$lang->project->placeholder->code = "Abbreviation of {$lang->projectCommon} name"; +$lang->project->placeholder->totalLeft = "Estimates at the beginning of the {$lang->projectCommon}."; $lang->project->selectGroup = new stdclass(); $lang->project->selectGroup->done = '(Done)'; diff --git a/module/project/lang/zh-cn.php b/module/project/lang/zh-cn.php index 0ba2af73b9..d8d86cc5e0 100644 --- a/module/project/lang/zh-cn.php +++ b/module/project/lang/zh-cn.php @@ -55,7 +55,7 @@ $lang->project->other = '其他:'; $lang->project->deleted = '已删除'; $lang->project->delayed = '已延期'; $lang->project->product = $lang->project->products; -$lang->project->readjustTime = '调整项目起止时间'; +$lang->project->readjustTime = "调整{$lang->projectCommon}起止时间"; $lang->project->readjustTask = '顺延任务的起止时间'; $lang->project->effort = '日志'; $lang->project->relatedMember = '相关成员'; @@ -192,7 +192,7 @@ $lang->project->aboveAllProduct = "以上所有{$lang->productCommon}"; $lang->project->aboveAllProject = "以上所有{$lang->projectCommon}"; /* 页面提示。*/ -$lang->project->linkStoryByPlanTips = '此操作会将所选计划下面的需求全部关联到此项目中'; +$lang->project->linkStoryByPlanTips = "此操作会将所选计划下面的需求全部关联到此{$lang->projectCommon}中"; $lang->project->selectProject = "请选择{$lang->projectCommon}"; $lang->project->beginAndEnd = '起止时间'; $lang->project->begin = '开始日期'; @@ -225,7 +225,7 @@ $lang->project->copyFromProject = "复制自{$lang->projectCommon} %sproject->cancelCopy = '取消复制'; $lang->project->byPeriod = '按时间段'; $lang->project->byUser = '按用户'; -$lang->project->noProject = '暂时没有项目。'; +$lang->project->noProject = "暂时没有{$lang->projectCommon}。"; $lang->project->noMembers = '暂时没有团队成员。'; /* 交互提示。*/ @@ -263,7 +263,7 @@ $lang->project->charts->burn->graph->actuality = '实际'; $lang->project->placeholder = new stdclass(); $lang->project->placeholder->code = '团队内部的简称'; -$lang->project->placeholder->totalLeft = '项目开始时的总预计工时'; +$lang->project->placeholder->totalLeft = "{$lang->projectCommon}开始时的总预计工时"; $lang->project->selectGroup = new stdclass(); $lang->project->selectGroup->done = '(已结束)'; diff --git a/module/task/control.php b/module/task/control.php index a366a6ee55..125b9c4c80 100644 --- a/module/task/control.php +++ b/module/task/control.php @@ -1378,7 +1378,39 @@ class task extends control foreach($tasks as $task) { $task->storyTitle = isset($stories[$task->story]) ? $stories[$task->story]->title : ''; - $groupTasks[$task->$orderBy][] = $task; + if(isset($task->team)) + { + if($orderBy == 'finishedBy') $task->consumed = $task->estimate = $task->left = 0; + foreach($task->team as $team) + { + if($orderBy == 'finishedBy' and $team->left != 0) + { + $task->estimate += $team->estimate; + $task->consumed += $team->consumed; + $task->left += $team->left; + continue; + } + + $cloneTask = clone $task; + $cloneTask->estimate = $team->estimate; + $cloneTask->consumed = $team->consumed; + $cloneTask->left = $team->left; + if($team->left == 0) $cloneTask->status = 'done'; + + if($orderBy == 'assignedTo') + { + $cloneTask->assignedToRealName = zget($users, $team->account); + $cloneTask->assignedTo = $team->account; + } + if($orderBy == 'finishedBy')$cloneTask->finishedBy = $team->account; + $groupTasks[$team->account][] = $cloneTask; + } + if(!empty($task->left) and $orderBy == 'finishedBy') $groupTasks[$task->finishedBy][] = $task; + } + else + { + $groupTasks[$task->$orderBy][] = $task; + } } $tasks = array(); From bcd7340a59d8121e140d505644553e22da8f93c8 Mon Sep 17 00:00:00 2001 From: Yagami <976204163@qq.com> Date: Fri, 8 Mar 2019 15:19:38 +0800 Subject: [PATCH 312/442] * Fix bug #2452. --- xuanxuan/module/message/ext/model/class/xuanxuan.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xuanxuan/module/message/ext/model/class/xuanxuan.class.php b/xuanxuan/module/message/ext/model/class/xuanxuan.class.php index 298029e3bc..aa48726881 100644 --- a/xuanxuan/module/message/ext/model/class/xuanxuan.class.php +++ b/xuanxuan/module/message/ext/model/class/xuanxuan.class.php @@ -13,7 +13,7 @@ class xuanxuanMessage extends messageModel $this->loadModel('action'); $object = $this->dao->select('*')->from($this->config->objectTables[$objectType])->where('id')->eq($objectID)->fetch(); $field = $this->config->action->objectNameFields[$objectType]; - $title = $this->app->user->realname . $this->lang->action->label->$actionType . $this->lang->action->objectTypes[$objectType]; + $title = $this->app->user->realname . ' ' . $this->lang->action->label->$actionType . $this->lang->action->objectTypes[$objectType]; $text = $title . ' ' . "[#{$objectID}::{$object->$field}]"; $server = $this->loadModel('chat')->getServer('zentao'); From 3ff00a6e3c9002f516a3874d7185ac9a3676d3ff Mon Sep 17 00:00:00 2001 From: Catouse Date: Sat, 9 Mar 2019 15:47:39 +0800 Subject: [PATCH 313/442] * update zui css file. --- www/theme/zui/css/min.css | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/www/theme/zui/css/min.css b/www/theme/zui/css/min.css index ac195cee7e..af0710a73e 100644 --- a/www/theme/zui/css/min.css +++ b/www/theme/zui/css/min.css @@ -1,5 +1,5 @@ /*! - * ZUI: Zentao template - v1.8.1 - 2019-01-25 + * ZUI: Zentao template - v1.9.0 - 2019-03-09 * http://zui.sexy * GitHub: https://github.com/easysoft/zui.git * Copyright (c) 2019 cnezsoft.com; Licensed MIT @@ -13,4 +13,4 @@ * * Copyright (c) 2011-2016 Harvest http://getharvest.com * MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md -*/.chosen-container{position:relative;display:inline-block;font-size:13px;vertical-align:middle;zoom:1;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;*display:inline}.chosen-container .chosen-drop{position:absolute;top:100%;z-index:1010;display:none;width:100%;background:#fff;border:1px solid #b6bdcc;border:1px solid rgba(0,0,0,.15);border-top:0;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.chosen-container .chosen-drop.chosen-drop-size-limited{border-top:1px solid rgba(0,0,0,.15)}.chosen-container.chosen-with-drop .chosen-drop{display:block}.chosen-container a{cursor:pointer}.chosen-container.chosen-up .chosen-drop{top:inherit;bottom:100%;margin-top:auto;margin-bottom:-1px;border-radius:2px 2px 0 0;-webkit-box-shadow:0 -3px 5px rgba(0,0,0,.175);box-shadow:0 -3px 5px rgba(0,0,0,.175)}.chosen-container-single .chosen-single{display:block;width:100%;height:32px;padding:5px 8px;overflow:hidden;line-height:1.42857143;color:#222;text-decoration:none;white-space:nowrap;vertical-align:middle;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #dcdcdc;border-radius:2px;-webkit-box-shadow:none;box-shadow:none;-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s,-webkit-box-shadow ease-in-out .15s}.chosen-container-single .chosen-default{color:#838a9d}.chosen-container-single .chosen-single>span{display:block;margin-right:26px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.chosen-container-single .chosen-single-with-deselect span{margin-right:38px}.chosen-container-single .chosen-single abbr{position:absolute;top:7px;right:24px;display:block;width:20px;height:20px;font-size:19.5px;font-weight:700;line-height:14px;color:#000;text-align:center;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.chosen-container-single .chosen-single abbr:before{content:'×'}.chosen-container-single .chosen-single abbr:focus,.chosen-container-single .chosen-single abbr:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}.chosen-container-single .chosen-single div{position:absolute;top:0;right:0;display:block;height:100%;padding:5px 8px}.chosen-container-single .chosen-single div b{display:inline-block;width:0;height:0;margin-bottom:2px;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.chosen-container-single .chosen-search{position:relative;z-index:1010;padding:3px 4px;margin:0;white-space:nowrap}.chosen-container-single .chosen-search input[type=text]{width:100%;height:27px;padding:2px 26px 2px 8px;margin:1px 0;font-size:12px;line-height:1.5;background-color:#fff;border:1px solid #dcdcdc;border-radius:2px;outline:0}.chosen-container-single .chosen-search input[type=text]:focus{border-color:#0c64eb}.chosen-container-single .chosen-search:before{position:absolute;top:10px;right:10px;display:block;font-family:ZentaoIcon;font-size:18px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;color:#838a9d;text-transform:none;content:"\e928";speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.chosen-container-single .chosen-drop{margin-top:-1px;-webkit-background-clip:padding-box;background-clip:padding-box;border-radius:0 0 4px 4px}.chosen-container-single.chosen-container-single-nosearch .chosen-search{position:absolute;left:-9999px}.chosen-container .chosen-results{position:relative;max-height:240px;padding:0;margin:0;overflow-x:hidden;overflow-y:auto;-webkit-overflow-scrolling:touch}.chosen-container .chosen-results li{display:none;padding:5px 10px;margin:0;line-height:15px;list-style:none;-webkit-transition:background-color .2s cubic-bezier(.175,.885,.32,1);-o-transition:background-color .2s cubic-bezier(.175,.885,.32,1);transition:background-color .2s cubic-bezier(.175,.885,.32,1);-webkit-touch-callout:none}.chosen-container .chosen-results li.active-result{display:list-item;cursor:pointer}.chosen-container .chosen-results li.disabled-result{display:list-item;color:#ccc;cursor:default}.chosen-container .chosen-results li.highlighted{color:#fff;background-color:#0c64eb}.chosen-container .chosen-results li.no-results{display:list-item;background:#f4f4f4}.chosen-container .chosen-results li.group-result{display:list-item;font-weight:700;cursor:default}.chosen-container .chosen-results li.group-option{padding-left:15px}.chosen-container .chosen-results li em{font-style:normal;text-decoration:underline}.chosen-container-multi .chosen-choices{position:relative;width:100%;min-height:32px;min-height:30px\9;padding:0;margin:0;overflow:hidden;cursor:text;background-color:#fff;border:1px solid #dcdcdc;border-radius:2px;-webkit-box-shadow:none;box-shadow:none;-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s,-webkit-box-shadow ease-in-out .15s}.chosen-container-multi .chosen-choices:after,.chosen-container-multi .chosen-choices:before{display:table;content:" "}.chosen-container-multi .chosen-choices:after{clear:both}.chosen-container-multi .chosen-choices li{display:block;float:left;padding:0 6px;margin:5px 0 0 6px;list-style:none}.chosen-container-multi .chosen-choices li.search-field{padding:0;margin-bottom:4px;white-space:nowrap}.chosen-container-multi .chosen-choices li.search-field input[type=text]{height:20px;font-size:100%;color:#838a9d;background:0 0!important;border:0!important;border-radius:0;outline:0;-webkit-box-shadow:none;box-shadow:none}.chosen-container-multi .chosen-choices li.search-field .default{color:#999}.chosen-container-multi .chosen-choices li.search-field:before{position:absolute;right:8px;bottom:8px;display:block;font-family:ZentaoIcon;font-size:18px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;color:#838a9d;text-transform:none;content:"\e928";opacity:0;-webkit-transition:opacity .2s cubic-bezier(.175,.885,.32,1);-o-transition:opacity .2s cubic-bezier(.175,.885,.32,1);transition:opacity .2s cubic-bezier(.175,.885,.32,1);speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.chosen-container-multi .chosen-choices li.search-choice{position:relative;padding:3px 20px 3px 5px;line-height:12px;cursor:default;background-color:#f1f1f1;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #cbd0db;border-radius:3px;-webkit-box-shadow:0 0 2px #fff inset,0 1px 0 rgba(0,0,0,.05);box-shadow:0 0 2px #fff inset,0 1px 0 rgba(0,0,0,.05);-webkit-transition:all .4s cubic-bezier(.175,.885,.32,1);-o-transition:all .4s cubic-bezier(.175,.885,.32,1);transition:all .4s cubic-bezier(.175,.885,.32,1)}.chosen-container-multi .chosen-choices li.search-choice:hover{background-color:#fff;border-color:#adb5c6;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 0 rgba(0,0,0,.1)}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close{position:absolute;top:0;right:0;display:block;width:20px;height:20px;font-size:15.6px;font-weight:700;line-height:14px;color:#000;text-align:center;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:before{content:'×'}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:focus,.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}.chosen-container-multi .chosen-choices li.search-choice-disabled{padding-right:5px;color:#666;background-color:#e4e4e4;border:1px solid #ccc}.chosen-container-multi .chosen-choices li.search-choice-focus{background:#d4d4d4}.chosen-container-multi .chosen-choices li.search-choice-focus .search-choice-close{background-position:-42px -10px}.chosen-container-multi .chosen-results{padding:5px 0;margin:0}.chosen-container-multi .chosen-drop .result-selected{display:list-item;color:#ccc;cursor:default}.chosen-container-active .chosen-single{border-color:#0c64eb;-webkit-box-shadow:none,0 0 8px rgba(12,100,235,.6);box-shadow:none,0 0 8px rgba(12,100,235,.6)}.chosen-container-active.chosen-with-drop .chosen-single{border:1px solid #b6bdcc;border:1px solid rgba(0,0,0,.15);border-bottom-right-radius:0;border-bottom-left-radius:0;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.chosen-container-active.chosen-with-drop .chosen-single div{background:0 0;border-left:none}.chosen-container-active.chosen-with-drop .chosen-single div b{content:"";border-top:0 dotted;border-bottom:4px solid}.chosen-container-active.chosen-with-drop.chosen-up .chosen-single{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:2px;border-bottom-left-radius:2px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.chosen-container-active .chosen-choices{border-color:#0c64eb;-webkit-box-shadow:none,0 0 8px rgba(12,100,235,.6);box-shadow:none,0 0 8px rgba(12,100,235,.6)}.chosen-container-active .chosen-choices li.search-field input[type=text]{color:#111!important}.chosen-container-active .chosen-choices li.search-field:before{opacity:1}.chosen-disabled{cursor:default;opacity:.5!important}.chosen-disabled .chosen-single{cursor:default}.chosen-disabled .chosen-choices .search-choice .search-choice-close{cursor:default}.chosen-container-single .chosen-single>.chosen-search{left:0;display:none;padding:3px 4px;opacity:0}.chosen-container-single .chosen-single>.chosen-search>input{height:25px;padding:2px 26px 2px 4px;font-size:inherit}.chosen-container-single .chosen-single>.chosen-search:before{top:9px}.chosen-with-search.chosen-with-drop .chosen-single>.chosen-search{display:block;opacity:1}.container,.container-fixed,.container-fluid{position:relative}.container{max-width:1800px!important}body{padding-bottom:40px;background-color:#efefef}body.article-content,body.body-modal{background:0 0}body.body-modal{padding:0}a:active,a:focus,button:active,button:focus{outline:0!important}em{font-style:normal}.strong{font-weight:700}.font-normal{font-weight:400!important}.text-middle{vertical-align:middle!important}.text-bottom{vertical-align:bottom!important}.text-top{vertical-align:top!important}.inline-block{display:inline-block!important}.layer{border-radius:4px;-webkit-box-shadow:0 0 20px 0 #bdc9d8;box-shadow:0 0 20px 0 #bdc9d8}.space{margin-bottom:20px}.space-lg{margin-bottom:30px}.space-sm{margin-bottom:10px}.muted{opacity:.5}.text-muted em{color:#3c4353}.no-animate{-webkit-transition:none!important;-o-transition:none!important;transition:none!important}.template{display:none!important}.text-left{text-align:left!important}.text-yellow.icon-folder{color:#ffe066}.table-row{display:table;width:100%;table-layout:fixed}.table-col,.table-row>.col,.table-row>[class*=col-],.table-row>[class*="-col"]{display:table-cell;float:none;vertical-align:top}.side-col{width:200px;padding-right:20px}.side-col.col-4{width:33.3333333%}.col-lg{width:260px}.col-xl{width:320px}.col-sm{width:150px}.col-xs{width:100px}.main-col+.side-col{padding-right:0;padding-left:20px}.row-grid>[class*=col-],.row-grid>[class*="-col"]{padding-top:6px;padding-bottom:6px}hr.space{margin:10px 0;border:none}hr.space-sm{margin:5px 0;border:none}.text-secondary{color:#16a8f8}a.text-primary{color:#0c64eb}.nav-primary>li>a{min-width:100px;padding:5px 8px;color:#838a9d;border-color:#e7f1fc}.nav-primary>li.active>a{color:#0c64eb;background-color:#e7f1fc;border-color:#e7f1fc}.nav-primary>li.active>a:hover{color:#0c64eb;background-color:#c3dcf7;border-color:#c3dcf7}.end-marker{margin-bottom:20px;color:#cbd0db;text-align:center}@-webkit-keyframes highlight{0%{background:#fff;outline:1px solid transparent}100%{background:#fff0d5;outline:2px solid #ffdcbc}}@-o-keyframes highlight{0%{background:#fff;outline:1px solid transparent}100%{background:#fff0d5;outline:2px solid #ffdcbc}}@keyframes highlight{0%{background:#fff;outline:1px solid transparent}100%{background:#fff0d5;outline:2px solid #ffdcbc}}.highlight{-webkit-animation:highlight .5s linear 0s 2 alternate;-o-animation:highlight .5s linear 0s 2 alternate;animation:highlight .5s linear 0s 2 alternate}.progress.inline-block{width:100px;margin:0}.w-p5{width:5%!important}.w-p10{width:10%!important}.w-p15{width:15%!important}.w-p20{width:20%!important}.w-p25{width:25%!important}.w-p30{width:30%!important}.w-p35{width:35%!important}.w-p40{width:40%!important}.w-p45{width:45%!important}.w-p50{width:50%!important}.w-p55{width:55%!important}.w-p60{width:60%!important}.w-p65{width:65%!important}.w-p70{width:70%!important}.w-p75{width:75%!important}.w-p80{width:80%!important}.w-p85{width:85%!important}.w-p90{width:90%!important}.w-p94{width:94%!important}.w-p95{width:95%!important}.w-p98{width:98%!important}.w-p99{width:99%!important}.w-p100{width:100%!important}.w-auto{width:auto!important}.w-10px{width:10px!important}.w-20px{width:20px!important}.w-30px{width:30px!important}.w-35px{width:35px!important}.w-40px{width:40px!important}.w-45px{width:45px!important}.w-50px{width:50px!important}.w-60px{width:60px!important}.w-70px{width:70px!important}.w-80px{width:80px!important}.w-90px{width:90px!important}.w-100px{width:100px!important}.w-110px{width:110px!important}.w-120px{width:120px!important}.w-130px{width:130px!important}.w-140px{width:140px!important}.w-150px{width:150px!important}.w-160px{width:160px!important}.w-180px{width:180px!important}.w-200px{width:200px!important}.w-230px{width:230px!important}.w-250px{width:250px!important}.w-300px{width:300px!important}.w-400px{width:400px!important}.w-500px{width:500px!important}.w-600px{width:600px!important}.w-700px{width:700px!important}.w-800px{width:800px!important}.w-900px{width:900px!important}.mw-200px{max-width:200px!important}.mw-300px{max-width:300px!important}.mw-400px{max-width:400px!important}.mw-500px{max-width:500px!important}.mw-600px{max-width:600px!important}.mw-700px{max-width:700px!important}.mw-800px{max-width:800px!important}.mw-900px{max-width:900px!important}.mw-1400px{max-width:1400px!important}.w-id{width:70px!important}.w-pri{width:40px!important}.w-severity{width:50px!important}.w-hour{width:57px!important}.w-date{width:90px!important}.w-status{width:60px!important}.w-resolution,.w-type,.w-user{width:80px!important}.w-p15-f{width:15%!important;min-width:120px!important}.w-p25-f{width:25%!important;min-width:200px!important}.w-p35-f{width:35%!important;min-width:300px!important}.w-p45-f{width:45%!important;min-width:400px!important}.h-5px{height:5px!important}.h-10px{height:10px!important}.h-20px{height:20px!important}.h-30px{height:30px!important}.h-35px{height:35px!important}.h-40px{height:40px!important}.h-45px{height:45px!important}.h-50px{height:50px!important}.h-60px{height:60px!important}.h-70px{height:70px!important}.h-80px{height:80px!important}.h-100px{height:100px!important}.h-120px{height:120px!important}.h-130px{height:130px!important}.h-140px{height:140px!important}.h-150px{height:150px!important}.h-200px{height:200px!important}.pd-0{padding:0!important}.mg-0{margin:0!important}.mgb-20{margin-bottom:20px!important}.mgb-10{margin-bottom:10px!important}.pdb-20{padding-bottom:20px!important}.pdt-20{padding-top:20px!important}.br-0{border-radius:0!important}.bd-0,.bd-none,.borderless{border:none!important}.bg-none{background:0 0!important}.red{color:#ff5d5d!important}.icon-pro-version{font-size:14px!important}.icon-pro-version:before{position:relative;top:-1px;font-size:14px;color:#ff5d5d;content:"\e92b"}.bg-primary{color:#fff;background:#1183fb -webkit-gradient(linear,right top,left top,from(#0a48d1),to(#1183fb));background:#1183fb -webkit-linear-gradient(right,#0a48d1 0,#1183fb 100%);background:#1183fb -o-linear-gradient(right,#0a48d1 0,#1183fb 100%);background:#1183fb linear-gradient(-90deg,#0a48d1 0,#1183fb 100%);background-color:#00b1fd}.bg-secondary{color:#fff;background:#16a8f8}.hl-tutorial{position:relative!important;z-index:1010!important;-webkit-box-shadow:0 0 0 0 #000!important;box-shadow:0 0 0 0 #000!important;-webkit-transition:-webkit-box-shadow 1s!important;-o-transition:box-shadow 1s!important;transition:-webkit-box-shadow 1s!important;transition:box-shadow 1s!important;transition:box-shadow 1s,-webkit-box-shadow 1s!important}.hl-tutorial.hl-in{-webkit-box-shadow:0 0 20px 0 #ffff8d,0 0 0 2px #ffd180,0 0 0 2000px rgba(0,0,0,.2)!important;box-shadow:0 0 20px 0 #ffff8d,0 0 0 2px #ffd180,0 0 0 2000px rgba(0,0,0,.2)!important}.btn.tooltip-tutorial,.hl-tutorial.hl-in:hover{-webkit-box-shadow:0 0 30px 0 #ffff8d,0 0 0 5px #ffd180,0 0 0 2000px rgba(0,0,0,.3)!important;box-shadow:0 0 30px 0 #ffff8d,0 0 0 5px #ffd180,0 0 0 2000px rgba(0,0,0,.3)!important}.tooltip-max .tooltip-inner{max-width:1000px;padding:8px 10px}.transition-all *{-webkit-transition:all .2s!important;-o-transition:all .2s!important;transition:all .2s!important}.scroll-x{overflow-x:auto!important}.scroll-y{overflow-y:auto!important}.divider+.divider{display:none}@font-face{font-family:ZentaoIcon;font-style:normal;font-weight:400;src:url(../fonts/ZentaoIcon.eot?v=1.1.0);src:url(../fonts/ZentaoIcon.eot?#iefix&v=1.1.0) format('embedded-opentype'),url(../fonts/ZentaoIcon.woff?v=1.1.0) format('woff'),url(../fonts/ZentaoIcon.ttf?v=1.1.0) format('truetype'),url(../fonts/ZentaoIcon.svg#regular?v=1.1.0) format('svg')}.icon,[class*=" icon-"],[class^=icon-]{font-family:ZentaoIcon;font-size:18px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;text-transform:none;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon:before{display:inline-block;min-width:18px;text-align:center}a .icon,a [class*=" icon-"],a [class^=icon-]{display:inline}.icon-lg:before{font-size:1.33333333em;vertical-align:-10%}.icon-2x{font-size:36px}.icon-3x{font-size:54px}.icon-4x{font-size:72px}.icon-5x{font-size:90px}.icon-spin{display:inline-block;-webkit-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;animation:spin 2s infinite linear}a .icon-spin{display:inline-block;text-decoration:none}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0);transform:rotate(0)}100%{-o-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes spin{0%{-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);-o-transform:rotate(359deg);transform:rotate(359deg)}}.icon-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.icon-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.icon-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.icon-flip-horizontal{-webkit-transform:scale(-1,1);-ms-transform:scale(-1,1);-o-transform:scale(-1,1);transform:scale(-1,1)}.icon-flip-vertical{-webkit-transform:scale(1,-1);-ms-transform:scale(1,-1);-o-transform:scale(1,-1);transform:scale(1,-1)}.icon.icon-flip-horizontal,.icon.icon-flip-vertical,.icon.icon-rotate-180,.icon.icon-rotate-270,.icon.icon-rotate-90{display:inline-block}.icon-book:before{content:"\f02d"}.icon-treemap-alt:before{content:"\e971"}.icon-collapse-alt:before{content:"\e6f2"}.icon-expand-alt:before{content:"\e6f1"}.icon-more:before{content:"\e744"}.icon-angle-double-right:before{content:"\f101"}.icon-certificate:before{content:"\f0a3"}.icon-bell:before{content:"\e7f5"}.icon-format-bold:before{content:"\e953"}.icon-format-header-pound:before{content:"\e954"}.icon-format-italic:before{content:"\e955"}.icon-format-list-bulleted:before{content:"\e956"}.icon-format-list-numbers:before{content:"\e969"}.icon-format-quote-close:before{content:"\e96a"}.icon-fullscreen:before{content:"\e96b"}.icon-fullscreen-exit:before{content:"\e972"}.icon-image:before{content:"\e96c"}.icon-table-large:before{content:"\e96d"}.icon-columns:before{content:"\f0db"}.icon-cancel:before{content:"\e951"}.icon-ban-circle:before{content:"\e951"}.icon-persons:before{content:"\e94d"}.icon-eye:before{content:"\e94e"}.icon-unlock:before{content:"\e94f"}.icon-eye-off:before{content:"\e96e"}.icon-lock:before{content:"\e950"}.icon-move:before{content:"\e94c"}.icon-help:before{content:"\e968"}.icon-folder-account:before{content:"\e942"}.icon-folder-move:before{content:"\e960"}.icon-folder-plus:before{content:"\e961"}.icon-folder-upload:before{content:"\e962"}.icon-folder-star:before{content:"\e963"}.icon-folder-edit:before{content:"\e964"}.icon-folder-download:before{content:"\e965"}.icon-folder-outline:before{content:"\e966"}.icon-restart:before{content:"\e95e"}.icon-history:before{content:"\e95f"}.icon-home:before{content:"\e958"}.icon-pencil:before{content:"\e254"}.icon-angle-down:before{content:"\e313"}.icon-angle-left:before{content:"\e314"}.icon-angle-right:before{content:"\e315"}.icon-angle-top:before{content:"\e316"}.icon-first-page:before{content:"\e5dc"}.icon-last-page:before{content:"\e5dd"}.icon-caret-down:before{content:"\f0d7"}.icon-caret-up:before{content:"\f0d8"}.icon-caret-left:before{content:"\f0d9"}.icon-caret-right:before{content:"\f0da"}.icon-sort:before{content:"\f0dc"}.icon-sort-down:before{content:"\f0dd"}.icon-sort-up:before{content:"\f0de"}.icon-zentao-alt:before{content:"\e900"}.icon-zentao:before{content:"\e901"}.icon-severity:before{content:"\e973"}.icon-severity-solid:before{content:"\e902"}.icon-bar-chart:before{content:"\e903"}.icon-import:before{content:"\e904"}.icon-export:before{content:"\e905"}.icon-printer:before{content:"\e906"}.icon-hand-right:before{content:"\e907"}.icon-hand-right-alt:before{content:"\e96f"}.icon-checked:before{content:"\e908"}.icon-off:before{content:"\e909"}.icon-start:before{content:"\e90a"}.icon-play:before{content:"\e90a"}.icon-time:before{content:"\e90b"}.icon-edit:before{content:"\e90c"}.icon-trash:before{content:"\e90d"}.icon-link:before{content:"\e90e"}.icon-unlink:before{content:"\e90f"}.icon-bullhorn:before{content:"\e910"}.icon-bug:before{content:"\e911"}.icon-list-alt:before{content:"\e912"}.icon-fork:before{content:"\e913"}.icon-change:before{content:"\e970"}.icon-glasses:before{content:"\e914"}.icon-sitemap:before{content:"\e915"}.icon-plus-sign:before{content:"\e916"}.icon-pluses:before{content:"\e917"}.icon-flag-alt:before{content:"\e918"}.icon-magic:before{content:"\e919"}.icon-treemap:before{content:"\e91a"}.icon-confirm:before{content:"\e91b"}.icon-lightbulb:before{content:"\e91c"}.icon-delay:before{content:"\e91d"}.icon-calendar:before{content:"\e91d"}.icon-pause:before{content:"\e91e"}.icon-ban:before{content:"\e91f"}.icon-plus-bold:before{content:"\e920"}.icon-copy:before{content:"\e921"}.icon-refresh:before{content:"\e922"}.icon-arrow-up:before{content:"\e923"}.icon-arrow-down:before{content:"\e924"}.icon-arrow-left:before{content:"\e952"}.icon-arrow-right:before{content:"\e93e"}.icon-plus:before{content:"\e925"}.icon-minus:before{content:"\e926"}.icon-exchange:before{content:"\e927"}.icon-search:before{content:"\e928"}.icon-envelope-o:before{content:"\e92a"}.icon-check:before{content:"\e5ca"}.icon-circle:before{content:"\e836"}.icon-up-circle:before{content:"\e92b"}.icon-right-circle:before{content:"\e92c"}.icon-down-circle:before{content:"\e92d"}.icon-left-circle:before{content:"\e92e"}.icon-check-circle:before{content:"\e92f"}.icon-exclamation-sign:before{content:"\e930"}.icon-unfold-all:before{content:"\e931"}.icon-fold-all:before{content:"\e932"}.icon-plus-sm:before{content:"\e933"}.icon-chevron-left:before{content:"\e934"}.icon-chevron-right:before{content:"\e935"}.icon-close:before{content:"\e936"}.icon-flag:before{content:"\e937"}.icon-check-sign:before{content:"\e938"}.icon-minus-sign:before{content:"\e939"}.icon-bars-sign:before{content:"\e93a"}.icon-cog:before{content:"\e93b"}.icon-color:before{content:"\e93c"}.icon-paper-clip:before{content:"\e93d"}.icon-back:before{content:"\e93f"}.icon-chat-line:before{content:"\e940"}.icon-person:before{content:"\e941"}.icon-stack:before{content:"\e943"}.icon-cube:before{content:"\e967"}.icon-folder:before{content:"\e944"}.icon-folder-o:before{content:"\e945"}.icon-folder-open-o:before{content:"\e946"}.icon-folder-open:before{content:"\e947"}.icon-bars:before{content:"\e948"}.icon-cards-view:before{content:"\e949"}.icon-star-empty:before{content:"\e94a"}.icon-star:before{content:"\e94b"}.icon-ellipsis-v:before{content:"\e5d4"}.icon-spinner-indicator:before{content:"\e982"}.icon-text:before{content:"\e929"}.icon-code:before{content:"\e957"}.icon-chevron-double-up:before{content:"\e959"}.icon-chevron-double-down:before{content:"\e95a"}.icon-chart-pie:before{content:"\e95b"}.icon-chart-line:before{content:"\e95c"}.icon-chart-bar:before{content:"\e95d"}.icon-globe:before{content:"\f0ac"}.icon-file:before{content:"\f016"}.icon-file-empty:before{content:"\f016"}.icon-file-text:before{content:"\f0f6"}.icon-file-alt:before{content:"\f15b"}.icon-file-text-alt:before{content:"\f15c"}.icon-file-pdf:before{content:"\f1c1"}.icon-file-word:before{content:"\f1c2"}.icon-file-excel:before{content:"\f1c3"}.icon-file-powerpoint:before{content:"\f1c4"}.icon-file-image:before{content:"\f1c5"}.icon-file-archive:before{content:"\f1c6"}.icon-file-audio:before{content:"\f1c7"}.icon-file-video:before{content:"\f1c8"}.icon-file-code:before{content:"\f1c9"}.icon-sm:before{font-size:14px;vertical-align:10%}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:13px;font-weight:400;line-height:18px;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;border-radius:4px;-webkit-transition:.4s cubic-bezier(.175,.885,.32,1);-o-transition:.4s cubic-bezier(.175,.885,.32,1);transition:.4s cubic-bezier(.175,.885,.32,1);-webkit-transition-property:background,border,outline,opacity,-webkit-box-shadow;-o-transition-property:background,border,box-shadow,outline,opacity;transition-property:background,border,outline,opacity,-webkit-box-shadow;transition-property:background,border,box-shadow,outline,opacity;transition-property:background,border,box-shadow,outline,opacity,-webkit-box-shadow}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:focus,.btn:hover{color:#3c4353;text-decoration:none}.btn:active{text-decoration:none;background-image:none;outline:0;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.1)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;filter:grayscale(1);-webkit-box-shadow:none;box-shadow:none;opacity:.5;-webkit-filter:grayscale(1)}.btn{color:#3c4353;background-color:#fff;border-color:#d6dae3}.btn.active,.btn.hover,.btn:active,.btn:focus,.btn:hover,.open .dropdown-toggle.btn{color:#3c4353;background-color:rgba(255,255,255,.8);border-color:#b8bfce}.btn.active,.btn:active,.open .dropdown-toggle.btn{background-color:#f2f2f2;background-image:none;border-color:#b8bfce}.btn.disabled,.btn.disabled.active,.btn.disabled:active,.btn.disabled:focus,.btn.disabled:hover,.btn[disabled],.btn[disabled].active,.btn[disabled]:active,.btn[disabled]:focus,.btn[disabled]:hover,fieldset[disabled] .btn,fieldset[disabled] .btn.active,fieldset[disabled] .btn:active,fieldset[disabled] .btn:focus,fieldset[disabled] .btn:hover{color:rgba(60,67,83,.3);background-color:#fff;border-color:#d6dae3}.btn-gray{color:#82899f;background-color:#f1f1f1;border-color:#f1f1f1}.btn-gray.active,.btn-gray.hover,.btn-gray:active,.btn-gray:focus,.btn-gray:hover,.open .dropdown-toggle.btn-gray{color:#82899f;background-color:rgba(241,241,241,.8);border-color:#d8d8d8}.btn-gray.active,.btn-gray:active,.open .dropdown-toggle.btn-gray{background-color:#e4e4e4;background-image:none;border-color:#d8d8d8}.btn-gray.disabled,.btn-gray.disabled.active,.btn-gray.disabled:active,.btn-gray.disabled:focus,.btn-gray.disabled:hover,.btn-gray[disabled],.btn-gray[disabled].active,.btn-gray[disabled]:active,.btn-gray[disabled]:focus,.btn-gray[disabled]:hover,fieldset[disabled] .btn-gray,fieldset[disabled] .btn-gray.active,fieldset[disabled] .btn-gray:active,fieldset[disabled] .btn-gray:focus,fieldset[disabled] .btn-gray:hover{color:rgba(130,137,159,.3);background-color:#f1f1f1;border-color:#f1f1f1}.btn-primary{color:#fff;background-color:#0c64eb;border-color:transparent}.btn-primary.active,.btn-primary.hover,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.open .dropdown-toggle.btn-primary{color:#fff;background-color:rgba(12,100,235,.8);border-color:rgba(0,0,0,0)}.btn-primary.active,.btn-primary:active,.open .dropdown-toggle.btn-primary{background-color:#0b5ad3;background-image:none;border-color:rgba(0,0,0,0)}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{color:rgba(255,255,255,.3);background-color:#0c64eb;border-color:transparent}.btn-secondary{color:#fff;background-color:#16a8f8;border-color:transparent}.btn-secondary.active,.btn-secondary.hover,.btn-secondary:active,.btn-secondary:focus,.btn-secondary:hover,.open .dropdown-toggle.btn-secondary{color:#fff;background-color:rgba(22,168,248,.8);border-color:rgba(0,0,0,0)}.btn-secondary.active,.btn-secondary:active,.open .dropdown-toggle.btn-secondary{background-color:#079ced;background-image:none;border-color:rgba(0,0,0,0)}.btn-secondary.disabled,.btn-secondary.disabled.active,.btn-secondary.disabled:active,.btn-secondary.disabled:focus,.btn-secondary.disabled:hover,.btn-secondary[disabled],.btn-secondary[disabled].active,.btn-secondary[disabled]:active,.btn-secondary[disabled]:focus,.btn-secondary[disabled]:hover,fieldset[disabled] .btn-secondary,fieldset[disabled] .btn-secondary.active,fieldset[disabled] .btn-secondary:active,fieldset[disabled] .btn-secondary:focus,fieldset[disabled] .btn-secondary:hover{color:rgba(255,255,255,.3);background-color:#16a8f8;border-color:transparent}.btn-warning{color:#fff;background-color:#ff9800;border-color:transparent}.btn-warning.active,.btn-warning.hover,.btn-warning:active,.btn-warning:focus,.btn-warning:hover,.open .dropdown-toggle.btn-warning{color:#fff;background-color:rgba(255,152,0,.8);border-color:rgba(0,0,0,0)}.btn-warning.active,.btn-warning:active,.open .dropdown-toggle.btn-warning{background-color:#e68900;background-image:none;border-color:rgba(0,0,0,0)}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{color:rgba(255,255,255,.3);background-color:#ff9800;border-color:transparent}.btn-danger{color:#fff;background-color:#ff5d5d;border-color:transparent}.btn-danger.active,.btn-danger.hover,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,.open .dropdown-toggle.btn-danger{color:#fff;background-color:rgba(255,93,93,.8);border-color:rgba(0,0,0,0)}.btn-danger.active,.btn-danger:active,.open .dropdown-toggle.btn-danger{background-color:#ff4343;background-image:none;border-color:rgba(0,0,0,0)}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{color:rgba(255,255,255,.3);background-color:#ff5d5d;border-color:transparent}.btn-success{color:#fff;background-color:#00da88;border-color:transparent}.btn-success.active,.btn-success.hover,.btn-success:active,.btn-success:focus,.btn-success:hover,.open .dropdown-toggle.btn-success{color:#fff;background-color:rgba(0,218,136,.8);border-color:rgba(0,0,0,0)}.btn-success.active,.btn-success:active,.open .dropdown-toggle.btn-success{background-color:#00c178;background-image:none;border-color:rgba(0,0,0,0)}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{color:rgba(255,255,255,.3);background-color:#00da88;border-color:transparent}.btn-info{color:#0c64eb;background-color:#e9f2fb;border-color:transparent}.btn-info.active,.btn-info.hover,.btn-info:active,.btn-info:focus,.btn-info:hover,.open .dropdown-toggle.btn-info{color:#0c64eb;background-color:rgba(233,242,251,.8);border-color:rgba(0,0,0,0)}.btn-info.active,.btn-info:active,.open .dropdown-toggle.btn-info{background-color:#d3e5f7;background-image:none;border-color:rgba(0,0,0,0)}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{color:rgba(12,100,235,.3);background-color:#e9f2fb;border-color:transparent}.btn-link{padding-right:6px;padding-left:6px;font-weight:400;color:#3c4353;text-shadow:none;cursor:pointer;background:0 0;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover,.btn-link[disabled],fieldset[disabled] .btn-link{border-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link:focus,.btn-link:hover{color:#222;background:#f1f1f1;background:rgba(0,0,0,.075)}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#cbd0db;text-decoration:none}.btn-lg{padding:11px 16px;font-size:14px;line-height:18px;border-radius:4px}.btn-mini,.btn-sm{padding:3px 8px;font-size:12px;line-height:18px;border-radius:4px}.btn-mini,.btn-xs{padding:0 5px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.btn-wide{min-width:120px}.btn-limit{max-width:180px;padding-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.btn-limit>.caret{position:absolute;top:14px;right:8px}.btn-circle{border-radius:17px}.btn>.label-icon{top:3px;padding:3px;margin:-2px;background-color:rgba(0,0,0,.2);border-radius:12px}.btn>.label-icon>.icon{font-size:16px;line-height:18px}.btn>.icon+.text{margin-left:5px}.btn.btn-sm.btn-circle{border-radius:12px}.btn.btn-sm>.label-icon{top:2px;width:20px;height:20px;padding:1px;line-height:20px}.btn.btn-sm>.label-icon>.icon{position:relative;top:-1px;display:inline-block;font-size:14px;line-height:18px}.btn-icon-left{position:relative;padding-left:35px;overflow:hidden;text-align:right}.btn-icon-left>.label-icon{position:absolute;left:5px;margin:0}.btn-icon-left>.icon{position:absolute;top:0;bottom:0;left:0;display:block;width:30px;line-height:30px;color:#16a8f8;text-align:center;background:#e9f2fb}.btn-icon-left.btn-sm{padding-left:28px}.btn-icon-left.btn-sm>.label-icon{left:2px}.btn-icon-left.btn-sm>.icon{width:24px;line-height:24px}.btn-icon-right{position:relative;padding-right:35px;text-align:left}.btn-icon-right>.label-icon{position:absolute;right:5px;margin:0}.btn-icon-right.btn-sm{padding-right:28px}.btn-icon-right.btn-sm>.label-icon{right:2px}.btn-icon{min-width:32px;padding-right:0;padding-left:0}.btn-icon.btn-sm{width:24px;min-width:24px;height:24px}.btn-group{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group>.btn-group{float:left}.btn-group>.btn{border-radius:0}.btn-group>.btn:first-child{border-top-left-radius:2px;border-bottom-left-radius:2px}.btn-group>.btn:last-child{border-top-right-radius:2px;border-bottom-right-radius:2px}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.dropdown{float:left;margin-right:10px}.btn-toolbar>.btn-group:last-child,.btn-toolbar>.btn:last-child,.btn-toolbar>.dropdown:last-child{margin-right:0}.btn-toolbar>.divider{float:left;height:20px;margin:7px 5px 4px 10px;border-left:1px solid rgba(0,0,0,.1)}.btn-toolbar .space{float:left;min-height:1px;margin:0 10px 0 10px}.btn-toolbar .input-control{float:left;width:120px}.btn-toolbar .page-title{float:left;line-height:34px}.btn-toolbar .page-title .text{font-size:14px;font-weight:700}.btn-toolbar .page-title .label{top:-2px;margin-right:10px}.btn-toolbar .divider+.page-title{margin-left:15px}.btn-active-line{position:relative;font-weight:700;color:#0c64eb}.btn-active-line:after{position:absolute;right:5px;bottom:1px;left:5px;display:block;content:' ';border-bottom:2px solid #0c64eb}.btn-active-line:hover{color:#0c64eb}.btn-active-text .text{position:relative;top:-1px;display:inline-block;font-weight:700;color:#0c64eb}.btn-active-text .text:after{position:absolute;bottom:-5px;display:block;width:100%;content:' ';border-bottom:2px solid #0c64eb}.angle-btn{position:relative;padding:1px;background:#fff;border:1px solid #cbd0db;border-right:none}.btn-toolbar>.angle-btn{margin-right:8px}.angle-btn:after,.angle-btn:before{position:absolute;top:-1px;right:-8px;display:block;width:0;height:0;content:' ';border-color:transparent transparent transparent #cbd0db;border-style:solid;border-width:17px 0 17px 8px}.angle-btn:after{right:-7px;border-color:transparent transparent transparent #fff;border-width:17px 0 17px 8px}.angle-btn .btn{padding:6px;font-weight:700;background:#fff;border:none;border-radius:4px!important}.angle-btn .btn.btn-limit{padding-right:16px}.angle-btn .btn.btn-limit>.caret{right:4px}.angle-btn+.angle-btn{border-left:none}.angle-btn+.angle-btn>.btn-group:first-child{padding-left:8px}.angle-btn+.angle-btn>.btn-group:first-child:after,.angle-btn+.angle-btn>.btn-group:first-child:before{position:absolute;top:-2px;left:0;display:block;width:0;height:0;content:' ';border-color:transparent transparent transparent #cbd0db;border-style:solid;border-width:17px 0 17px 8px}.angle-btn+.angle-btn>.btn-group:first-child:after{left:-1px;border-color:transparent transparent transparent #fff;border-width:17px 0 17px 8px}.btn-toolbar>.angle-btn.active,.btn-toolbar>.angle-btn:last-child{border-color:#0c64eb}.btn-toolbar>.angle-btn.active .btn,.btn-toolbar>.angle-btn:last-child .btn{color:#0c64eb}.btn-toolbar>.angle-btn.active:after,.btn-toolbar>.angle-btn.active:before,.btn-toolbar>.angle-btn:last-child:after,.btn-toolbar>.angle-btn:last-child:before{border-color:transparent transparent transparent #0c64eb}.btn-toolbar>.angle-btn.active:after,.btn-toolbar>.angle-btn:last-child:after{border-color:transparent transparent transparent #fff}.btn-toolbar>.angle-btn+.angle-btn:last-child>.btn-group:first-child:after,.btn-toolbar>.angle-btn+.angle-btn:last-child>.btn-group:first-child:before,.btn-toolbar>.angle-btn.active+.angle-btn>.btn-group:first-child:after,.btn-toolbar>.angle-btn.active+.angle-btn>.btn-group:first-child:before{border-color:transparent transparent transparent #0c64eb}.btn-toolbar>.angle-btn+.angle-btn:last-child>.btn-group:first-child:after,.btn-toolbar>.angle-btn.active+.angle-btn>.btn-group:first-child:after{border-color:transparent transparent transparent #fff}.btn-toolbar>.angle-btn.active+.angle-btn,.btn-toolbar>.angle-btn.normal{border-color:#cbd0db}.btn-toolbar>.angle-btn.active+.angle-btn .btn,.btn-toolbar>.angle-btn.normal .btn{color:#3c4353}.btn-toolbar>.angle-btn.active+.angle-btn:after,.btn-toolbar>.angle-btn.active+.angle-btn:before,.btn-toolbar>.angle-btn.normal:after,.btn-toolbar>.angle-btn.normal:before{border-color:transparent transparent transparent #cbd0db}.btn-toolbar>.angle-btn.active+.angle-btn:after,.btn-toolbar>.angle-btn.normal:after{border-color:transparent transparent transparent #fff}.btn-toolbar>.angle-btn.active+.angle-btn>.btn-group:first-child:before,.btn-toolbar>.angle-btn.normal>.btn-group:first-child:before{border-color:transparent transparent transparent #cbd0db!important}.nav>li>.btn.btn-primary{color:#fff}.nav>li>.btn.btn-primary:focus,.nav>li>.btn.btn-primary:hover{background:rgba(12,100,235,.8)}.label{position:relative;display:inline-block;padding:3px 5px;font-size:12px;font-weight:400;vertical-align:middle;border-radius:2px}.label+.label{margin-left:4px}.label-pale{background:#bed8f3!important}.label-badge{border-radius:9px}.label-light{color:#3c4353;background-color:#ddd}.label-primary{background:#0c64eb!important}.label-gray{color:#878da0;background:#e8ebef}.label-outline.label-danger{color:#ff5d5d;background:#ffebee;border-color:rgba(255,93,93,.25)}.label-outline.label-light{color:#838a9d;background:#f2f5fb;border-color:#e1e5ee}.label-primary.label-outline{background:#e9f2fb!important;border-color:rgba(12,100,235,.25)}.label-outline.label-success{background:#e8f5e9;border-color:rgba(0,218,136,.25)}.label-dot{position:relative;top:-1px;padding:0;border-radius:50%}.label-dot+.status-text{display:inline-block;margin-left:5px}.label-icon{min-width:18px;padding:0;line-height:18px;border-radius:10px}.label-id{display:inline-block;min-width:30px;padding:0 5px;font-size:12px;line-height:16px;color:#838a9d;text-align:center;vertical-align:middle;background-color:transparent;border:1px solid #838a9d;border-radius:2px}.pri-1,.todo-pri-1{color:#ff5d5d}[class*=" status-"],[class^=status-]{color:#3c4353}.status-changed,.status-delayed,.status-doing,.status-fail,.status-investigate{color:#ff5d5d}.status-changed>.label-dot,.status-delayed>.label-dot,.status-doing>.label-dot,.status-fail>.label-dot,.status-investigate>.label-dot{background-color:#ff5d5d}.status-wait{color:#838a9d}.status-wait>.label-dot{background-color:#7ec5ff}.status-unclosed{color:#838a9d}.status-unclosed>.label-dot{background-color:#0c64eb}.status-done,.status-normal,.status-pass,.status-resolved{color:#43a047}.status-done>.label-dot,.status-normal>.label-dot,.status-pass>.label-dot,.status-resolved>.label-dot{background-color:#00da88}.status-postpone{color:#838a9d}.status-postpone>.label-dot{background-color:#ff5d5d}.status-blocked{position:relative;left:-5px;display:inline-block;padding:0 5px;line-height:20px;color:#3c4353;background:#fff3e0;border-radius:10px}.status-blocked>.label-dot{background-color:#ff9800}.status-pause,.status-suspended{color:#ff9800}.status-pause>.label-dot,.status-suspended>.label-dot{background-color:#ff9800}.status-active.status-bug,.status-draft{color:#8666b8}.status-active.status-bug>.label-dot,.status-draft>.label-dot{background-color:#8666b8}.status-closed,.status-terminate{color:#838a9d}.status-closed>.label-dot,.status-terminate>.label-dot{background-color:#838a9d}.status-cancel{color:#838a9d}.status-cancel>.label-dot{background-color:#cbd0db}.label-pri{display:inline-block;min-width:20px;max-width:67px;height:20px;padding:0 4px;overflow:hidden;line-height:17px;color:#838a9d;text-align:center;text-overflow:ellipsis;white-space:nowrap;vertical-align:middle;border:2px solid #838a9d;border-radius:10px}.label-selector>.label-pri,[class*=label-pri-]{color:#158af1;border-color:#2098ee}.label-pri-1,.label-selector>.label-pri[data-value="1"]{color:#d50000;border-color:#d50000}.label-pri-2,.label-selector>.label-pri[data-value="2"]{color:#ff9800;border-color:#ff9800}.label-pri-3,.label-selector>.label-pri[data-value="3"]{color:#2098ee;border-color:#2098ee}.label-pri-4,.label-selector>.label-pri[data-value="4"]{color:#009688;border-color:#009688}.label-pri-5,.label-selector>.label-pri[data-value="5"]{color:#838a9d;border-color:#838a9d}.label-pri-0,.label-selector>.label-pri.active[data-value="0"]{color:#d5d9df;border-color:#d5d9df}.label-severity{position:relative;display:inline-block;width:24px;height:20px;text-align:center;vertical-align:middle}.label-severity:before{position:absolute;top:-3px;left:0;z-index:0;display:block;font-family:ZentaoIcon;font-size:18px;font-size:24px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;color:inherit;text-transform:none;content:"\e973";speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.label-severity:after{position:absolute;top:7px;left:0;z-index:1;display:block;width:24px;font-size:12px;line-height:12px;text-align:center;content:attr(data-severity)}.label-severity[data-severity],.label-severity[data-value]{color:#ccc}.label-severity[data-severity="0"],.label-severity[data-value="0"]{color:#ccc}.label-severity[data-severity="0"]:after,.label-severity[data-value="0"]:after{display:none}.label-severity[data-severity="1"],.label-severity[data-value="1"]{color:#c62828}.label-severity[data-severity="2"],.label-severity[data-value="2"]{color:#e65100}.label-severity[data-severity="3"],.label-severity[data-value="3"]{color:#ffa000}.label-severity[data-severity="4"],.label-severity[data-value="4"]{color:#fdd835}.label-severity[data-severity="5"],.label-severity[data-value="5"]{color:#8bc34a}.label-severity-custom[data-severity]{color:#d5d9df}.label-severity-custom[data-severity="1"]{color:#c62828}.label-severity-custom[data-severity="2"]{color:#e65100}.label-severity-custom[data-severity="3"]{color:#ffa000}.label-severity-custom[data-severity="4"]{color:#fdd835}.label-severity-custom[data-severity="5"]{color:#cddc39}.label-selector>.label{display:inline-block;min-width:24px;height:24px;padding:0 5px;font-size:14px;line-height:20px;text-align:center;cursor:pointer;background:0 0;border:2px solid #d5d9df;border-radius:15px}.label-selector>.label+.label{margin-left:10px}.label-selector>.label.empty{border-color:transparent}.label-selector>.label.label-severity{font-size:12px;line-height:28px;border-color:transparent}.label-selector>.label.label-severity:before{top:-2px;left:-2px}.label-selector>.label.label-severity:after{display:none}.label-selector>.label.label-severity.active{background:0 0;filter:none;-webkit-filter:none}.checkbox-primary,.radio-primary{position:relative;display:block;vertical-align:middle}.checkbox-primary.inline-block,.radio-primary.inline-block{display:inline-block}.checkbox-primary.inline-block+.inline-block,.radio-primary.inline-block+.inline-block{margin-left:15px}.checkbox-primary>input,.radio-primary>input{position:absolute;top:0;left:0;z-index:3;width:100%;height:100%;margin:0;opacity:0}.checkbox-primary>label,.radio-primary>label{display:block;height:20px;padding-left:30px;margin:0;font-weight:400;line-height:20px;cursor:pointer}.checkbox-primary>label:after,.checkbox-primary>label:before,.radio-primary>label:after,.radio-primary>label:before{position:absolute;top:1px;right:0;left:0;display:block;width:18px;height:18px;line-height:18px;text-align:center;content:' ';border-radius:3px}.checkbox-primary>label:after,.radio-primary>label:after{z-index:1;border:2px solid #eee;border-color:rgba(0,0,0,.15);-webkit-transition:.4s cubic-bezier(.175,.885,.32,1);-o-transition:.4s cubic-bezier(.175,.885,.32,1);transition:.4s cubic-bezier(.175,.885,.32,1);-webkit-transition-property:border,background-color;-o-transition-property:border,background-color;transition-property:border,background-color}.checkbox-primary>label:before,.radio-primary>label:before{top:3px;z-index:2;font-family:ZentaoIcon;font-size:18px;font-size:14px;font-style:normal;font-weight:400;font-weight:900;font-variant:normal;line-height:1;text-transform:none;content:"\e5ca";opacity:0;-webkit-transition:.2s cubic-bezier(.175,.885,.32,1);-o-transition:.2s cubic-bezier(.175,.885,.32,1);transition:.2s cubic-bezier(.175,.885,.32,1);-webkit-transition-property:opacity,-webkit-transform;-o-transition-property:opacity,-o-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform,-o-transform;-webkit-transform:scale(0);-ms-transform:scale(0);-o-transform:scale(0);transform:scale(0);speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.checkbox-primary.checked>label:after,.checkbox-primary>input:checked+label:after,.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{background-color:#00da88;border-color:#00da88;border-width:4px}.checkbox-primary.checked>label:before,.checkbox-primary>input:checked+label:before,.radio-primary.checked>label:before,.radio-primary>input:checked+label:before{color:#fff;opacity:1;-webkit-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}.checkbox-primary.focus>label:after,.checkbox-primary>input:focus+label:after,.radio-primary.focus>label:after,.radio-primary>input:focus+label:after{border-color:#00da88;-webkit-box-shadow:0 0 0 3px rgba(0,218,136,.2);box-shadow:0 0 0 3px rgba(0,218,136,.2)}.checkbox-primary:hover>label:after,.radio-primary:hover>label:after{border-color:#00da88}.checkbox-primary.checkbox-right>label,.radio-primary.checkbox-right>label{padding:0 30px 0 0}.checkbox-primary.checkbox-right>label:after,.checkbox-primary.checkbox-right>label:before,.radio-primary.checkbox-right>label:after,.radio-primary.checkbox-right>label:before{right:0;left:auto}.checkbox-primary input:disabled+label:after,.checkbox-primary.disabled>label:after,.radio-primary input:disabled+label:after,.radio-primary.disabled>label:after{background-color:#e5e5e5!important;border-color:#bbb!important}.checkbox-primary input:disabled:checked+label:after,.checkbox-primary.checked.disabled>label:after,.radio-primary input:disabled:checked+label:after,.radio-primary.checked.disabled>label:after{background-color:#bbb!important}.radio-primary>label:after{border-radius:50%}.radio-primary>label:before{top:7px;left:6px;width:6px;height:6px;content:' ';border:none;border-radius:50%}.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{background-color:transparent;border-color:#00da88;border-width:2px}.radio-primary.checked>label:before,.radio-primary>input:checked+label:before{background-color:#00da88}.radio-primary input:disabled:checked+label:after,.radio-primary.checked.disabled>label:after{background-color:transparent;border-color:#bbb}.radio-primary input:disabled:checked+label:before,.radio-primary.checked.disabled>label:before{background-color:#bbb}.panel{position:relative;margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045);box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045)}.panel-body{padding:20px}.panel-body.has-table{padding:10px}.panel-body.has-table .table{margin-bottom:0;table-layout:fixed}.panel-heading{padding:12px 48px 12px 20px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading+.panel-body{padding-top:0}.panel-title{font-size:14px;font-weight:700;line-height:20px}.panel-title .label{top:-1px}.panel-actions{position:absolute;top:0;right:0;padding:7px 8px}.panel:hover .panel-actions{z-index:10}.panel-actions>li>a{display:inline-block;min-width:30px;padding:0 5px;line-height:30px;color:#a6aab8}.panel-actions>li>a:hover{color:#3c4353;text-decoration:initial;background-color:#f1f1f1}.panel-actions .btn-icon{color:#a6aab8}.panel-actions .btn.text-primary{color:#0c64eb}.panel .empty-tip{padding:30px 10px 50px;font-size:14px;color:#838a9d;text-align:center}.progress-text-left{position:relative;margin:7px 0;margin-left:35px;overflow:visible}.progress-text-left .progress-text{position:absolute;top:-7px;left:-35px;display:block;width:35px;height:20px;padding-right:5px;line-height:20px;color:#838a9d;text-align:right}.chart-color{width:20px}.chart-color-dot{display:inline-block;width:10px;height:10px;border-radius:50%}.chart-row{margin-top:10px}.chart-row+.chart-row{padding-top:10px;border-top:1px solid #eee}.chart-wrapper{padding:10px 5px;background:#eee}.chart-wrapper>h4{margin:5px 0 10px}.table-wrapper{max-height:250px;overflow:auto}.table-wrapper .table{margin:0}.progress-pie{position:relative}.progress-pie .progress-info{position:absolute;top:0;left:0;width:100%;height:100%;padding-top:25px;text-align:center}.progress-pie .progress-info>small{display:block;line-height:14px;color:#a6aab8}.progress-pie .progress-info>strong{display:block;font-size:36px;line-height:40px}.progress-pie .progress-info>strong>small{font-size:20px}.progress-pie-120 .progress-info{padding-top:30px}.progress-pie-120 .progress-info>small{line-height:18px}.progress-pie-50 .progress-info{padding-top:4px}.progress-pie-50 .progress-info>strong{font-size:20px;font-weight:400}.progress-pie-50 .progress-info>strong>small{font-size:14px}.progress-pie[data-value="100"] .progress-info>strong{-webkit-transform:scale(.7);-ms-transform:scale(.7);-o-transform:scale(.7);transform:scale(.7)}.status-bars{display:table;width:100%;height:140px;padding:5px;padding-top:50px;margin:0;overflow:hidden}.status-bars>li{position:relative;display:table-cell;text-align:center;vertical-align:bottom}.status-bars .bar{position:absolute;bottom:20px;left:50%;display:block;width:10px;margin-left:-5px;background:#0c64eb;border-radius:5px 5px 0 0}.status-bars .bar:after{position:absolute;right:-50px;bottom:0;left:-50px;display:block;height:1px;content:' ';background:#eee}.status-bars .title{font-size:12px;font-weight:400;color:#a6a8b6}.status-bars .value{position:relative;top:-20px;left:-20px;display:inline-block;width:50px;font-size:16px;font-weight:700;text-align:center}.status-bars-h{display:block;padding-right:50px;padding-left:60px;list-style:none}.status-bars-h>li{position:relative;height:40px;border-left:1px solid #eee}.status-bars-h .bar{position:relative;top:15px;display:block;height:10px;line-height:20px;background:#0c64eb;border-radius:0 5px 5px 0}.status-bars-h .title{position:absolute;top:-5px;left:-60px;width:60px;padding-right:10px;font-size:12px;color:#a6a8b6;text-align:right}.status-bars-h .value{position:absolute;top:-5px;right:-50px;display:block;width:40px;font-size:14px;font-weight:700;text-align:left;white-space:nowrap}.messager{border-radius:4px;-webkit-box-shadow:0 4px 16px rgba(0,0,0,.2),0 2px 8px rgba(0,0,0,.1);box-shadow:0 4px 16px rgba(0,0,0,.2),0 2px 8px rgba(0,0,0,.1)}.messager-content{padding:18px 20px;font-size:18px;line-height:30px}.messager-content>.icon{font-size:28px;line-height:30px}.messager-actions{vertical-align:middle}.messagger-zt{color:#3c4353;background-color:#fff}.messagger-zt .messager-content>.icon{color:#0c64eb}.messagger-zt .messager-actions>.action{color:#838a9d}.messagger-zt.messager-success .messager-content>.icon{color:#00da88}.messagger-zt.messager-danger .messager-content>.icon{color:#ff5d5d}.messagger-zt.messager-warning .messager-content>.icon{color:#ff9800}.messagger-zt.messager-info .messager-content>.icon{color:#2196f3}.tree{padding-left:0;overflow:hidden}.tree ul{position:relative;display:none;padding-left:0}.tree li{position:relative;padding:2px 0 2px 15px;list-style:none}.tree li.heading{padding-left:5px;color:#3c4353}.tree li>a{display:block;max-width:90%;padding:2px 6px;color:#3c4353;word-break:break-all}.tree li>a:hover{color:#3c4353}.tree li>a.tree-toggle:hover{background:0 0}.tree li.active>a{position:relative;font-weight:700;color:#0c64eb}.tree li>.list-toggle{position:absolute;top:1px;left:1px;z-index:10;width:20px;font-size:14px;line-height:22px;color:#cbd0db;text-align:center;cursor:pointer;-webkit-transition:all .2s;-o-transition:all .2s;transition:all .2s}.tree li>.list-toggle:before{content:"\f0da"}.tree li>.list-toggle:active,.tree li>.list-toggle:hover{color:#0c64eb}.tree li.has-active-item>.list-toggle{color:#3c4353}.tree li.has-list.open>ul{display:block}.tree li.has-list.open>.list-toggle{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.tree li.has-list.open:before{position:absolute;top:16px;bottom:-5px;left:10px;display:block;content:' ';border-left:1px solid #d8d8d8}.tree-actions{display:inline-block;margin-left:5px;vertical-align:middle}.tree-actions a{display:inline-block;margin-left:5px;font-size:13px;opacity:.6}.tree-actions a:hover{opacity:1}.tree li>.module-name{color:#3c4353;vertical-align:middle}.tree li>.module-name:hover{background-color:#f0f2f5}.tree li>.module-name:hover>a{color:#3c4353}.treemap-node-fold-icon:before{position:relative;left:-4px;min-width:18px}.dropdown-menu{padding:5px 0;border-color:rgba(0,0,0,.1)}.dropdown-menu>li{padding:0 10px}.dropdown-menu>li>a{padding:2px 10px;margin:5px 0;border-radius:3px}.dropdown-menu>li>a>.icon{position:relative;left:-5px;opacity:.5}.dropdown-menu>li.active>a,.dropdown-menu>li.selected>a{position:relative;color:#fff;background-color:#16a8f8}.dropdown-menu>li.selected>a:after{position:absolute;top:2px;right:4px;display:block;font-family:ZentaoIcon;font-size:18px;font-size:14px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;line-height:20px;text-transform:none;content:"\e5ca";speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.dropdown-menu>li.divider{margin:10px}.dropdown-submenu>a:after{margin-right:-5px}.dropdown-submenu>.dropdown-menu.pull-left{margin-left:-1px}.dropdown-submenu:focus>a,.dropdown-submenu:hover>a{color:#3c4353;background-color:#e9f2fb}.dropdown-submenu:hover>a:after{border-left-color:#0c64eb}.dropdown-submenu>a:hover:after{border-left-color:#fff}.pager .btn{padding:3px 10px}.pager .btn .caret{opacity:.7}.pager>li>.pager-label{padding:2px;line-height:20px}.pager>li>.pager-item{min-width:20px;padding:1px;margin:2px 0;font-size:16px;line-height:20px;text-align:center;background:0 0;border-color:transparent}.pager>li>.pager-item:hover{background-color:rgba(0,0,0,.1)}.pager>li>.pager-item>.icon{position:relative;top:-1px}.pager>li>.btn:hover,.pager>li>a:hover{background:rgba(0,0,0,.1)}.pager>li.disabled>a.pager-item{background:0 0;border-color:transparent;opacity:.5}.pager>li.active>a{background-color:#16a8f8}.pager>li .btn-group .btn{padding:1px;margin:2px 0;border-radius:4px}.pager .dropdown-menu{width:200px}.pager .dropdown-menu>li{float:left;width:33.333333%}.modal-dialog{width:900px;max-width:1360px;border:none;border-radius:0;-webkit-box-shadow:0 0 20px 0 rgba(0,0,0,.25);box-shadow:0 0 20px 0 rgba(0,0,0,.25)}.modal-dialog.modal-md{width:700px}.modal-dialog.modal-xs{width:400px}.modal-dialog.modal-sm{width:500px}.modal-dialog.modal-lg{width:1200px}.modal-dialog.modal-fullscreen{position:fixed;max-width:initial}.modal-header{padding:20px 0;margin:0 20px}.modal-header>.close{color:#838a9d;text-shadow:0 1px 0 rgba(255,255,255,.85);opacity:1}.modal-header>.close:hover{color:#222}.modal-footer{padding:20px 0;margin:0 20px}.modal-title{font-size:16px;font-weight:400;line-height:20px}.modal-actions{position:absolute;top:16px;right:16px}.modal-actions .divider{position:relative;top:5px;display:inline-block;width:0;height:20px;margin:0 10px;border-left:#eee 1px solid}.modal-actions>.dropdown{display:inline-block}.modal-body{padding:20px}.modal-iframe .modal-body>iframe{border-radius:0}.modal.fade .modal-dialog{-webkit-transform:translate(0,-3%);-ms-transform:translate(0,-3%);-o-transform:translate(0,-3%);transform:translate(0,-3%)}.modal.fade.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-simple .modal-footer{padding-top:0;border-top:none}.modal-iframe .modal-header{position:relative;z-index:10;min-height:0;padding:0;border:none}.modal-iframe .modal-title{display:none}.modal-iframe .modal-header .close{position:absolute;top:12px;right:10px;font-size:32px;font-weight:200}.modal-iframe .modal-dialog{overflow:hidden}.modal-inverse .modal-header>.close{color:rgba(255,255,255,.7);text-shadow:none}.modal-inverse .modal-header>.close:hover{color:#fff}.modal-scroll-inside>.modal-dialog{max-height:100%}.hide-modal-close .modal-iframe .modal-header .close{display:none}.tile{text-align:center}.tile-title{line-height:20px;color:#3c4353}.tile-amount{font-size:32px;font-weight:700;line-height:56px}.timeline>li{position:relative;list-style:none}.timeline>li:before,.timeline>li>a:after,.timeline>li>div:after{position:absolute;left:-20px;display:block;width:15px;height:15px;content:' ';border-radius:50%}.timeline>li:before{top:12px;left:-16px;z-index:3;width:7px;height:7px;background-color:#cbd0db;border:none;border:1px solid #cbd0db}.timeline>li>a:after,.timeline>li>div:after{top:11px;left:-17px;z-index:3;width:9px;height:9px;background-color:#0c64eb;border-radius:50%;opacity:0}.timeline>li+li:after{position:absolute;top:-12px;bottom:20px;left:-13px;z-index:1;display:block;content:' ';border-left:1px solid #eee}.timeline>li.active>a:after,.timeline>li.active>div:after{opacity:1}.timeline>li.active:before{top:8px;left:-20px;width:15px;height:15px;background-color:rgba(12,100,235,.2);border:none}.timeline>li>a,.timeline>li>div{display:block;padding:5px;line-height:20px}.timeline>li.active>a{color:#3c4353}.timeline-tag{position:absolute;top:5px;left:-115px;font-size:12px}.timeline-tag-left{padding-left:115px}.timeline-sm{font-size:12px}.timeline-sm>li:before,.timeline-sm>li>a:after,.timeline-sm>li>div:after{top:10px;left:-20px;width:11px;height:11px}.timeline-sm>li.active:before,.timeline-sm>li:before{top:10px;left:-18px;width:11px;height:11px;background:0 0;border:1px solid #eee}.timeline-sm>li>a,.timeline-sm>li>div{line-height:20px}.timeline-sm>li>a:after,.timeline-sm>li>div:after{top:13px;left:-15px;width:5px;height:5px}.form-control{-webkit-box-shadow:none;box-shadow:none}.form-horizontal .form-group>label{padding-right:0}.form-actions{margin-top:20px;margin-bottom:0}.form-actions .btn{margin-right:10px}form label{font-weight:400;color:#3c4353}.form-group .btn+.btn{margin-left:5px}.table-form{margin-bottom:0;table-layout:fixed}.table-form>thead>tr>th.required:after{position:relative;top:3px;right:auto;left:4px;display:inline-block;vertical-align:middle}.table-form>tbody>tr>td,.table-form>tbody>tr>th,.table-form>tfoot>tr>td,.table-form>thead>tr>th{padding:7px;vertical-align:middle;border-bottom:none}.table-form>tfoot>tr>td{padding:20px 7px 10px}.table-form>tbody>tr>th{width:100px;font-weight:700;text-align:right}.table-form .input-group{width:100%}.table-form textarea.form-control{height:32px}.chosen-container-single .chosen-single{position:relative}.chosen-container-single .chosen-single>span{height:20px;line-height:20px;white-space:normal}.chosen-container-single .chosen-single div b{position:relative;top:1px;color:#cbd0db}.chosen-container-single .chosen-search:before{top:8px;right:15px}.chosen-container-multi .chosen-choices li.search-choice{font-size:13px;background:#eee;border-color:#cbd0db;-webkit-box-shadow:none;box-shadow:none}.chosen-container-single .chosen-search input[type=text]{height:30px;padding:3px 25px 3px 5px}.chosen-container-single .chosen-search{padding:3px 10px 0}.chosen-container-single .chosen-single{overflow:visible}.chosen-container-single .chosen-single>.chosen-search{top:-2px;right:-1px;bottom:-1px;left:-1px;display:none;height:auto;padding:0;opacity:0}.chosen-container-single .chosen-single>.chosen-search>input{height:31px;padding:5px 26px 5px 8px;font-size:inherit;line-height:20px}.chosen-container-single .chosen-single>.chosen-search:before{top:7px;right:8px}.chosen-container .chosen-results{padding:10px}.chosen-container .chosen-results>li{border-radius:4px}.chosen-container .chosen-results li.highlighted em{color:#fff}.table-responsive .chosen-container .chosen-results{max-height:200px}.datetimepicker{padding:10px}.datetimepicker td.day.today{background-color:#f77}.datetimepicker td.day.active{background-color:#16a8f8}.datetimepicker tfoot th,.datetimepicker thead th{color:#838a9d}.input-control .colorpicker{top:0;z-index:auto;opacity:1}.input-control .colorpicker .btn{padding:5px}.input-control .input-control-icon-right.btn{top:0}.colorpicker .dropdown-menu{min-width:232px;padding:5px 10px 10px 10px}.colorpicker .dropdown-menu>li{display:block;float:left;padding:5px}.colorpicker .dropdown-menu>li.heading{width:100%;margin-bottom:5px;font-size:16px;font-weight:700;text-align:left}.colorpicker .dropdown-menu>li.heading>.icon-close{position:relative;top:4px;float:right;cursor:pointer;opacity:.6}.colorpicker .dropdown-menu>li>a{position:relative;display:block;width:100%;height:100%;padding:0;margin:0;font-family:ZentaoIcon;font-size:18px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;text-align:center;text-transform:none;border:1px solid transparent;border-radius:50%;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.colorpicker .dropdown-menu>li>a:before{position:absolute;top:0;display:block;width:100%;height:20px;line-height:18px}.colorpicker .dropdown-menu>li>a:hover{-webkit-box-shadow:0 1px 4px rgba(0,0,0,.25);box-shadow:0 1px 4px rgba(0,0,0,.25)}.colorpicker .dropdown-menu>li>a.active:before{font-size:14px;content:"\e5ca"}.colorpicker .dropdown-menu>li>a.empty{color:#666;background:#fff}.colorpicker .dropdown-menu>li>a.empty:before{content:"\e90d"}.colorpicker .btn{position:relative}.colorpicker .btn .color-bar{position:absolute;right:5px;bottom:3px;left:5px;height:3px}.colorpicker .btn .color-bar[style*='background: ']+.ic{position:relative;top:-2px}.colorpicker .btn .ic{color:#cbd0db}.colorpicker .btn:hover .ic{color:#838a9d}.input-group .colorpicker{z-index:3}.input-group .chosen-container{display:table-cell}.input-group-addon{border-right-width:0;border-left-width:0}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin:0}.input-group-cell{display:table-cell;width:1%;padding:0 12px;white-space:nowrap;vertical-align:middle}.ke-container{border-color:#dcdcdc!important;border-radius:2px!important}.ke-container.focus{border-color:#0c64eb!important}.ke-toolbar{border-color:#dcdcdc!important}.required:after{top:6px;right:-10px;font-size:20px}td.required:after{top:12px;right:-5px}.input-group>.chosen-container.required:after,.input-group>.input-control.required:after{top:1px;right:1px;z-index:2}.input-group.required .required:after{display:none}.file-input{position:relative}.file-input .input-group{width:auto}.file-input .input-group>.input-group-cell:first-child{padding-right:0;padding-left:7px}.file-input input[type=file]{position:absolute;width:0;height:0;opacity:0}.file-input .file-title{display:inline-block;max-width:400px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:middle}.file-input .file-editbox{min-width:200px;max-width:100%}.file-input .file-size{display:inline-block;vertical-align:middle}.edit .file-input-empty,.file-input-edit,.file-input-normal,.normal .file-input-empty{display:none}.edit .file-input-edit,.normal .file-input-normal{display:block}.edit .file-input-edit.input-group,.normal .file-input-normal.input-group{display:table}.edit .file-input-normal{display:none!important}.file-input-normal>.input-group-btn{width:auto}.input-group .chosen-container-active .chosen-choices{border-color:#0c64eb!important}.input-group .chosen-container{min-width:100px}.input-group .input-group-btn .btn>.icon{line-height:17px}.os-mac select.form-control{-webkit-appearance:none;background-image:url(data:image/gif;base64,R0lGODlhCQAFAIAAAMvQ2////yH5BAEAAAEALAAAAAAJAAUAAAIKhH+BGYoNGWxgFgA7);background-image:url(data:image/gif;base64,R0lGODlhBwAEAIAAAMvQ2////yH5BAEAAAEALAAAAAAHAAQAAAIIhA+BGWoNWSgAOw==);background-repeat:no-repeat;background-position:right 5px top 12px;-moz-appearance:none}input::-webkit-contacts-auto-fill-button{position:absolute;right:0;display:none!important;pointer-events:none;visibility:hidden}.chosen-choices.has-error,.chosen-single.has-error,.form-control.has-error{border-color:#ff5d5d!important;-webkit-box-shadow:0 0 6px #ffc3c3!important;box-shadow:0 0 6px #ffc3c3!important}.popover-success.popover-form-result{font-weight:700;color:#fff;background:#00da88}.popover-success.popover-form-result.popover.right .arrow:after{border-right-color:#00da88}#mainHeader{height:50px;color:#fff;background:#1183fb -webkit-gradient(linear,right top,left top,from(#0a48d1),to(#1183fb));background:#1183fb -webkit-linear-gradient(right,#0a48d1 0,#1183fb 100%);background:#1183fb -o-linear-gradient(right,#0a48d1 0,#1183fb 100%);background:#1183fb linear-gradient(-90deg,#0a48d1 0,#1183fb 100%);background-color:#1183fb;border-top-color:#0c64eb;border-bottom-color:#e9f2fb}#mainHeader>.container{min-width:1200px;padding:0}#heading{position:absolute;top:10px;left:20px}@media (min-width:1400px){#heading{left:40px}}#heading h1{float:left;max-width:250px;margin:0;overflow:hidden;font-size:20px;font-weight:400;line-height:30px;text-overflow:ellipsis;white-space:nowrap}#heading h1 a{color:inherit;text-decoration:inherit}#heading h1.long-name{position:relative;top:-5px;display:table-cell;font-size:16px;line-height:20px;word-break:break-all;white-space:normal}#heading .btn{display:block;float:left;height:20px;padding:1px 5px;margin:0;margin:5px 0 0 10px;font-size:12px;font-weight:lighter;line-height:18px;background-color:rgba(255,255,255,.2);border:none}#heading .btn:hover{background-color:rgba(0,0,0,.1)}#navbar{margin:0 auto;font-size:15px;text-align:center}#navbar .nav{display:inline-block}#navbar .nav>li>a{padding:10px 15px;line-height:30px;color:#fff;border-radius:0;opacity:.9}@media (max-width:992px){#navbar .nav>li>a{padding:10px}}#navbar .nav>li>a:focus,#navbar .nav>li>a:hover{background:rgba(0,0,0,.15);opacity:1}#navbar .nav>li.active>a{font-weight:700;background:rgba(0,0,0,.1);opacity:1}#navbar .nav>li.divider{display:block;width:2px;height:20px;margin:15px;background:rgba(255,255,255,.4)}#navbar .nav>li.divider:last-child{display:none}#toolbar{position:absolute;top:12px;right:20px;font-size:12px;color:#fff}@media (min-width:1400px){#toolbar{right:40px}}#extraNav{text-align:right}#extraNav>li{display:inline-block;float:none;text-align:left}#extraNav>li>a{display:block;padding:0;color:#fff;opacity:.75}#extraNav>li>a:hover{text-decoration:unset;background-color:rgba(0,0,0,.1);opacity:1}#extraNav>li.open>a{background-color:rgba(0,0,0,.1)}#extraNav>li+li{margin-left:10px}#searchbox{position:relative;float:left;width:150px}#searchbox .input-group-btn .btn{position:relative;padding:1px 4px;font-size:12px;line-height:20px;color:#fff;background-color:rgba(255,255,255,.15);border-right:none;border-radius:2px}#searchbox .input-group-btn .btn:after{position:absolute;top:3px;right:0;bottom:3px;display:block;width:1px;content:' ';background-color:rgba(255,255,255,.15)}#searchbox .input-group-btn .btn:hover{background-color:rgba(255,255,255,.25)}#searchGo{position:absolute;top:0;right:-1px;z-index:9;min-width:24px;height:24px;padding:2px 3px;font-size:12px;line-height:20px;color:#fff;background-color:#6a9afd;border-radius:2px}#searchGo:hover{color:#fff!important;background-color:#0c64eb}#searchInput{height:24px;padding:2px 30px 2px 5px;color:#fff;text-align:left;background:rgba(255,255,255,.15);border-color:transparent;border-radius:0 12px 12px 0;-webkit-transition:background .2s,border .2s;-o-transition:background .2s,border .2s;transition:background .2s,border .2s}#searchInput:hover{background:rgba(255,255,255,.25)}#searchInput:focus{color:#333;background:#fff}#searchInput::-webkit-input-placeholder{font-size:12px;color:#fff;color:rgba(255,255,255,.5)}#searchInput::-moz-placeholder{font-size:12px;color:#fff;color:rgba(255,255,255,.5)}#searchInput::placeholder{font-size:12px;color:#fff;color:rgba(255,255,255,.5)}#searchInput:focus::-webkit-input-placeholder{color:#838a9d}#searchInput:focus::-moz-placeholder{color:#838a9d}#searchInput:focus::placeholder{color:#838a9d}#searchTypeMenu{min-width:220px}#searchTypeMenu>li{float:left;width:50%}#searchTypeMenu>li>a{margin:4px 0}#userNav{float:right;margin:0 -6px 0 10px}#userNav .avatar{display:inline-block;vertical-align:middle}#userNav>li>a{padding:2px 6px;margin-left:3px;line-height:20px;color:#fff;opacity:.9}#userNav>li>a .user-name{max-width:100px;overflow:hidden;font-size:15px;text-overflow:ellipsis;white-space:nowrap}#userNav>li>a:hover{background-color:rgba(0,0,0,.1);opacity:1}#userNav>li>a span{display:inline-block;vertical-align:middle}#userNav>li.open>a{background-color:rgba(0,0,0,.1)}#userNav>li.has-new-items>a{position:relative}#userNav>li.has-new-items>a:before{position:absolute;top:3px;right:-1px;display:block;width:4px;height:4px;content:' ';background-color:#ff5d5d;border-radius:50%}#userNav .dropdown-menu{min-width:150px}#userNav .dropdown-menu>li>a>.icon{position:absolute;top:10px;right:5px;display:block;width:20px;height:20px;line-height:20px;text-align:center}#userNav .user-profile-item>a{position:relative;padding-left:45px}#userNav .user-profile-item .avatar{position:absolute;top:6px;left:5px}#userNav .user-profile-name{font-size:16px}#userNav .user-profile-role{font-size:12px;color:#a9abb8}#userNav .no-role .user-profile-role{display:none}#userNav .no-role .user-profile-name{line-height:40px}#subHeader{min-height:50px;background:#fff}#subHeader>.container{padding:0 20px}@media (min-width:1400px){#subHeader>.container{padding:0 40px}}#pageNav{position:absolute;top:8px;left:0;left:20px}@media (min-width:1400px){#pageNav{left:40px}}#subNavbar{margin-top:5px;font-size:14px;text-align:center}#subNavbar .nav{display:inline-block}#subNavbar .nav>li>a{padding:8px 12px;line-height:24px;color:#3c4353}#subNavbar .nav>li>a:hover{color:#3c4353;background-color:rgba(0,0,0,.075)}#subNavbar .nav>li.active>a{font-weight:700;color:#0c64eb}#subNavbar .nav>li.divider{display:block;width:2px;height:20px;margin:9px 5px;background-color:rgba(0,0,0,.05)}#subNavbar .dropdown-menu{text-align:left}#pageActions{position:absolute;top:9px;right:20px}@media (min-width:1400px){#pageActions{right:40px}}.cell{padding:10px;background-color:#fff;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045);box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045)}.cell+.cell{margin-top:10px}.cell>.panel{margin:0;-webkit-box-shadow:none;box-shadow:none}.cell>.panel>.panel-heading{padding:5px 5px 10px}.cell>.panel>.panel-heading .panel-actions{padding:0}.cell>.panel>.panel-body{padding:5px}.cell>.table{margin:0}#main{padding:20px 0}#main>.container{padding:0 20px}@media (min-width:1400px){#main>.container{padding:0 40px}}#header,#header+#main{min-width:1200px}#mainMenu{margin:-10px 0 8px}.main-content{padding:20px;background-color:#fff;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045);box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045)}@media (min-width:1400px){.main-content>.center-block{max-width:1350px;padding:20px;border:1px solid #eee}.main-content>.center-block .main-header{background-color:#f1f1f1}}.main-content>h2{margin:0 0 20px}.main-content .cell{-webkit-box-shadow:none;box-shadow:none}.main-header{padding:5px 20px;border-bottom:1px solid #eee}.main-header:after,.main-header:before{display:table;content:" "}.main-header:after{clear:both}.main-header>h2{display:block;float:left;margin:0 10px 0 0;font-size:14px;line-height:34px}.main-header>h2 .label-id{margin-right:5px}.main-header>h2 small{font-size:14px;font-weight:400}.main-content .main-header{margin:-20px -20px 10px}.main-header .label{top:-1px}.main-row{display:table;width:100%;table-layout:fixed}.main-row>*{display:table-cell;vertical-align:top}@media (max-width:720px){.main-row{display:block}.main-row>*{display:block;width:100%}.main-row .side-col{width:100%;padding:0}.main-row .main-col+.side-col,.main-row .side-col+.main-col{margin-top:10px}}.main-row.hide-side .side-col{display:none}@media (min-width:720px){.main-content>.center-block .main-form{padding-right:20px}}#main .side-col .tabs{padding:5px}#main .side-col .nav-tabs{margin:0 5px 5px 5px;border-bottom:1px solid #ddd}#main .side-col .nav-tabs>li{margin:0}#main .side-col .nav-tabs>li+li{margin-left:10px}#main .side-col .nav-tabs>li>a{position:relative;padding:8px 5px;border:none;border-radius:2px!important}#main .side-col .nav-tabs>li.active>a{font-weight:700;color:#3c4353}#main .side-col .nav-tabs>li.active>a:before{position:absolute;right:0;bottom:-1px;left:0;display:block;height:2px;content:' ';background:#0c64eb}#main .side-col .tab-content .tab-pane table{border:none}.main-actions .btn-toolbar{display:inline-block;padding:4px 15px;color:#fff;pointer-events:auto;background:#717171;background-color:rgba(90,90,90,.85);border-radius:4px}.main-actions .btn-toolbar .divider{margin-right:15px;margin-left:15px;border-color:rgba(255,255,255,.1)}.main-actions .btn-toolbar .btn{padding-right:10px;padding-left:10px;margin-right:0;color:#fff;background-color:transparent;border:none}.main-actions .btn-toolbar .btn+.btn{margin-left:10px}.main-actions .btn-toolbar .btn:focus,.main-actions .btn-toolbar .btn:hover{background-color:rgba(255,255,255,.2)}.main-actions .btn-toolbar .btn.btn-icon{min-width:32px;padding-right:0;padding-left:0}.main-actions .btn-toolbar .btn+.btn-group{margin-right:0;margin-left:10px}#mainContent .main-col>.main-actions{padding:30px 0 0 0;text-align:center}#mainContent .main-col>.main-actions>.btn-toolbar{visibility:visible;opacity:1;-webkit-transition:opacity .2s;-o-transition:opacity .2s;transition:opacity .2s}#mainActions{position:fixed;top:0;right:0;bottom:0;left:0;text-align:center;pointer-events:none}#mainActions .btn-toolbar{position:relative;top:-90px}#mainActions .dropdown-menu{text-align:left}#mainActions>.container{height:100%}.main-actions-holder{display:none}.main-actions-fixed .main-actions-holder{display:block}.main-actions-fixed #mainContent .main-col>.main-actions{position:fixed;bottom:50px}.main-actions-fixed.body-modal #mainContent .main-col>.main-actions{bottom:20px}#nextPage,#prevPage{position:absolute;top:50%;left:-10px;width:40px;height:60px;padding:10px 0;margin-top:-30px;line-height:40px;color:#fff;text-align:center;pointer-events:auto;background:#717171;background-color:rgba(90,90,90,.85);-webkit-box-shadow:0 2px 15px 2px rgba(0,0,0,.05);box-shadow:0 2px 15px 2px rgba(0,0,0,.05)}#nextPage:hover,#prevPage:hover{-webkit-box-shadow:0 2px 15px 2px rgba(0,0,0,.15);box-shadow:0 2px 15px 2px rgba(0,0,0,.15)}#nextPage>.icon,#prevPage>.icon{display:block;font-size:36px;line-height:36px}#nextPage{right:-10px;left:auto}@media (max-width:1800px){#prevPage{left:-3px}#nextPage{right:-3px}}#sidebarHeader{position:relative;float:left;width:180px;height:34px;padding-right:20px;margin-right:20px;background:#fff;border-left:4px solid #0c64eb;border-radius:4px 2px 2px 4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045);box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045)}#sidebarHeader:after{position:absolute;top:-1px;right:-8px;display:block;width:0;height:0;content:' ';border-color:transparent transparent transparent #fff;border-style:solid;border-width:18px 0 18px 8px}#sidebarHeader .title{padding:0 5px;overflow:hidden;font-size:14px;font-weight:700;line-height:32px;color:#0c64eb;text-align:center;text-overflow:ellipsis;white-space:nowrap}#sidebarHeader .title>a{position:absolute;top:0;right:0;width:20px;opacity:.5}#sidebarHeader .title>a:hover{opacity:1}#sidebar{position:relative;-webkit-transition:width .2s,padding .2s;-o-transition:width .2s,padding .2s;transition:width .2s,padding .2s}#sidebar>.sidebar-toggle{position:absolute;top:0;right:5px;bottom:0;width:10px;cursor:pointer;background:0 0;border-radius:5px;-webkit-transition:background-color .2s;-o-transition:background-color .2s;transition:background-color .2s}#sidebar>.sidebar-toggle>.icon{position:absolute;top:50%;left:-1px;width:12px;height:30px;margin-top:-10px;line-height:30px;color:#fff;text-align:center;background:#79cdfb;border-radius:6px}#sidebar>.sidebar-toggle>.icon:before{position:relative;left:-3px}#sidebar>.sidebar-toggle:before{position:absolute;top:0;right:-5px;bottom:0;left:-5px;display:block;content:' '}#sidebar>.sidebar-toggle:hover{background:rgba(0,0,0,.075)}#sidebar>.cell{position:relative;left:0;width:180px;-webkit-transition:left .2s,opacity .2s;-o-transition:left .2s,opacity .2s;transition:left .2s,opacity .2s}#sidebar.no-animate>.cell{display:none;-webkit-transition:none;-o-transition:none;transition:none}.hide-sidebar #sidebar>.cell{position:absolute;left:-200px;opacity:0}.hide-sidebar #sidebar{position:relative;width:0;padding:0}.hide-sidebar #sidebar>.sidebar-toggle>.icon:before{content:"\e315"}@media (max-width:720px){#sidebar>.cell{width:100%}}#queryBox{max-height:0;padding:0;overflow:hidden;-webkit-transition:cubic-bezier(.175,.885,.32,1) .2s;-o-transition:cubic-bezier(.175,.885,.32,1) .2s;transition:cubic-bezier(.175,.885,.32,1) .2s;-webkit-transition-property:padding,max-height,margin;-o-transition-property:padding,max-height,margin;transition-property:padding,max-height,margin}#queryBox>form{visibility:hidden;-webkit-transition:visibility .2s .2s;-o-transition:visibility .2s .2s;transition:visibility .2s .2s}#queryBox.loading{height:50px}#queryBox.show{min-height:110px;max-height:300px;margin-bottom:10px;overflow:visible}#queryBox.show>form{visibility:visible}#queryBox.divider{border-bottom:1px solid #eee}#main .querybox-toggle.querybox-opened{position:relative;color:#0c64eb;background:0 0;border:none}#main .querybox-toggle.querybox-opened:before{position:absolute;bottom:-14px;left:50%;width:0;height:0;content:' ';border-color:transparent transparent #fff transparent;border-style:solid;border-width:0 10px 10px 10px}#contentNav{padding:5px;background:#fff;border-bottom:1px solid #eee}#contentNav .nav>li>a{position:relative;padding:6px 10px;color:#838a9d}#contentNav .nav>li.active>a{font-weight:700;color:#0c64eb}#contentNav .nav>li.active>a:before{position:absolute;right:10px;bottom:3px;left:10px;display:block;height:2px;content:' ';background:#0c64eb}.body-modal{padding-bottom:0}.body-modal #main,.body-modal .container{min-width:0!important}.body-modal #main{padding:0}.body-modal .main-header{position:fixed;top:0;right:20px;left:20px;z-index:100;padding:13px 48px 13px 0;margin:0;background:#fff}.body-modal #mainContent{padding-top:70px}.body-modal .main-header>h2{max-width:100%;overflow:hidden;font-size:14px;text-overflow:ellipsis;white-space:nowrap}.body-modal .cell,.body-modal .main-content{-webkit-box-shadow:none;box-shadow:none}.body-modal #mainMenu{position:fixed;top:0;right:0;left:0;z-index:100;padding:12px 60px 12px 10px;margin:0;background:#fff}.body-modal #mainMenu>.btn-toolbar.pull-left.divider{display:none}.body-modal #mainMenu>.btn-toolbar{max-width:100%;margin-left:20px}.body-modal #mainMenu>.btn-toolbar>.divider:first-child{display:none}.body-modal #mainMenu>.btn-toolbar .page-title{max-width:100%;margin-left:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.body-modal #mainMenu+#mainContent.main-row{padding:60px 10px 0}.body-modal #mainMenu+#mainContent.main-row .cell{border:1px solid #efefef;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045);box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045)}.body-modal #mainActions{top:auto}.body-modal #mainActions .btn-toolbar{top:auto;bottom:10px}.body-modal.m-bug-view,.body-modal.m-story-view,.body-modal.m-task-view,.body-modal.m-testcase-view,.body-modal.m-testtask-view,.body-modal.m-todo-view{padding-bottom:20px;border-radius:3px}#tabsNav{position:relative}#tabsNav .tab-pane>.actions{position:absolute;top:-8px;right:0}#tabsNav .tab-pane>.cell,#tabsNav .tab-pane>.main-table{padding:0;border:1px solid #cbd0db;border-top:none;border-radius:0 0 4px 4px}#tabsNav .tab-pane>.cell .detail-title{padding-left:5px}#helpContent{position:fixed;top:50px;right:0;bottom:40px;left:0;display:none;background-color:#fff}#helpContent .load-error{display:none;padding:20px}#helpContent .show-error .load-error{display:block}.show-help-tab{overflow:hidden}.show-help-tab #main{display:none}.show-help-tab #helpContent{display:block}#navbar .nav>li>a.open-help-tab>.icon-close{display:none;opacity:.5}#navbar .nav>li>a.open-help-tab>.icon-close:hover{background:rgba(0,0,0,.1);opacity:1}.show-help-tab #navbar .nav>li>a.open-help-tab>.icon-close{display:inline}.text-middle td,.text-middle th{vertical-align:middle}.text-center td,.text-center th{text-align:center}.c-sm{width:40px}.c-id{width:90px}.c-id-sm{width:70px}.c-id-xs{width:55px}.c-date{width:100px}.c-num,.c-pri,.c-type{width:80px;overflow:hidden}.c-begin,.c-end,.c-time{width:65px}.c-hours{width:60px}.c-actions-1{width:50px}.c-actions-2{width:75px}.c-actions-3{width:102px}.c-actions,.c-actions-4{width:128px}.c-actions-5{width:155px}.c-actions-6{width:180px}.c-product,.c-project{width:180px}.c-plan{width:130px}.c-datetime{width:120px}.c-stage,.c-status,.c-user{width:80px}.c-side{width:200px;border-right:10px solid #efefef}.c-assign,.c-assignedTo,.c-openedBy{width:130px}.c-progress{width:155px}.c-assign,.c-assignedTo,.c-openedBy,.c-product,.c-project,.c-status,.c-url,.c-user{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}td.c-name,td.c-title{overflow:hidden;text-align:left!important;text-overflow:ellipsis;white-space:nowrap}td.c-actions{position:relative;padding-top:0;padding-bottom:0;overflow:hidden;white-space:nowrap;vertical-align:middle}td.c-actions .btn{display:inline-block;width:26px;padding:2px;overflow:hidden;line-height:20px;color:#16a8f8;background:0 0;border-color:transparent}td.c-actions .btn .icon{font-size:18px}td.c-actions .btn:hover{color:#0c64eb;background-color:#d3e5f7}td.c-actions .btn+.btn{margin-left:-4px}td.c-actions .btn-link{color:#3c4353;background:0 0}td.c-actions .btn-link:hover{color:#0c64eb;background:#e9f2fb}td.c-actions .more{position:absolute;top:50%;right:100%;display:none;padding-right:4px;padding-left:20px;margin-top:-15px;margin-right:-6px;white-space:nowrap;background-color:#fafafa;-webkit-transition:opacity .3s,margin.3s;-o-transition:opacity .3s,margin.3s;transition:opacity .3s,margin.3s}tr:hover td.c-actions .more{display:block}td:hover+td.c-actions>.more{margin-right:-15px;pointer-events:none;opacity:.15}tr[data-url]{cursor:pointer}.table tbody>tr>td,.table thead>tr>th{vertical-align:middle}.table tbody>tr>td.has-btn,.table thead>tr>th.has-btn{padding-top:1px;padding-bottom:1px;overflow:visible}.table tbody>tr>td .progress,.table thead>tr>th .progress{height:6px}.table .em,.table em{color:#3c4353}.table .divider{border-bottom:10px solid #efefef}.table .divider-top{border-top:10px solid #efefef}.table .btn-icon-left{max-width:100%;padding-left:20px;overflow:hidden;line-height:18px;text-align:left;text-overflow:ellipsis;background:0 0;border-color:#eaf3fc}.table .btn-icon-left>.icon{width:20px;font-size:14px;background:0 0!important;opacity:0}.table .btn-icon-left.btn-sm{height:26px;font-size:13px}.table .btn-icon-left:active,.table .btn-icon-left:focus,.table .btn-icon-left:hover{border-color:rgba(0,0,0,.2)}.table .btn-icon-left:active>.icon,.table .btn-icon-left:focus>.icon,.table .btn-icon-left:hover>.icon{opacity:1}.table .btn-icon-left>.text{padding-left:25px}.table thead>tr>th.c-assign,.table thead>tr>th.c-assignedTo{padding-left:29px}.table a{vertical-align:middle}.table tbody>tr:last-child{border-bottom:none}.table caption{margin-bottom:5px;background:#f1f1f1;border:none}.is-firefox .table .btn-icon-left>.icon{line-height:22px}.main-table{border-radius:4px}.main-table>.table,.main-table>.table-footer,.main-table>.table-header,.main-table>.table-responsive{-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045);box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045)}.main-table .table{font-size:13px;table-layout:fixed;background-color:#fff;border-radius:4px 4px 0 0}.main-table .table.table-lg{font-size:14px}.main-table .table .btn-icon-left{border-color:transparent}.main-table .table .btn-icon-left>.icon{background:0 0;border-radius:4px}.main-table .table .btn-icon-left.btn-sm{height:26px}.main-table .table .btn-icon-left:hover{border-color:rgba(0,0,0,.2)}.main-table .table .btn-icon-left:hover>.icon{background:#e9f2fb;border-radius:4px 0 0 4px}.main-table tbody>tr>td,.main-table thead>tr>th{min-height:36px;padding:2px 8px;line-height:30px}.main-table tbody>tr>td:first-child,.main-table thead>tr>th:first-child{padding-left:15px}.main-table thead>tr>th{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-bottom:1px solid #ddd}.main-table tbody>tr:nth-child(odd){background-color:#f5f5f5}.main-table tbody>tr:last-child>td{border-bottom:1px solid #ddd}.main-table tbody>tr>td{position:relative;border-bottom:none;border-bottom:1px solid #eee}.main-table tbody>tr>td .label{max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.main-table tbody>tr>td>a{line-height:28px;color:#0c60e1}.main-table tbody>tr>td>a:not(.btn):visited{color:#082999;opacity:.9}.main-table tbody>tr>td>a:hover,.main-table tbody>tr>td>a:visited:hover{color:#0c64eb}.main-table tbody>tr>td.c-actions{padding-right:10px}.main-table tbody>tr>td.c-side+td:before,.main-table tbody>tr>td:first-child:before{position:absolute;top:0;bottom:0;left:0;display:block;width:0;content:'';background:#0c64eb;opacity:0;-webkit-transition:.2s linear;-o-transition:.2s linear;transition:.2s linear;-webkit-transition-property:width,opacity,border-radius;-o-transition-property:width,opacity,border-radius;transition-property:width,opacity,border-radius}@-moz-document url-prefix(){.main-table tbody>tr>td.c-side+td:before,.main-table tbody>tr>td:first-child:before{bottom:-1px}}.main-table tbody>tr>td.c-side:before{display:none}.main-table tbody>tr{-webkit-transition:.2s cubic-bezier(.175,.885,.32,1);-o-transition:.2s cubic-bezier(.175,.885,.32,1);transition:.2s cubic-bezier(.175,.885,.32,1);-webkit-transition-property:background-color,-webkit-box-shadow;-o-transition-property:box-shadow,background-color;transition-property:background-color,-webkit-box-shadow;transition-property:box-shadow,background-color;transition-property:box-shadow,background-color,-webkit-box-shadow}.main-table tbody>tr:hover{background:#e9f2fb}.main-table .table-grouped tbody>tr:hover{background:#f2f7fd;-webkit-box-shadow:none;box-shadow:none}.main-table .table-grouped tbody>tr:hover td.c-actions .more{background:#f2f7fd}.main-table tbody>tr.checked{background:#fff3e0}.main-table tbody>tr.checked:hover{background:#ffebbc}.main-table tbody>tr.checked>td.c-side+td:before,.main-table tbody>tr.checked>td:first-child:before{width:4px;opacity:1}.main-table tbody>tr.checked.row-check-begin{border-top-left-radius:4px;border-top-right-radius:2px}.main-table tbody>tr.checked.row-check-begin>td:first-child:before{border-top-left-radius:4px}.main-table tbody>tr.checked.row-check-end{border-bottom-right-radius:2px;border-bottom-left-radius:4px}.main-table tbody>tr.checked.row-check-end>td:first-child:before{border-bottom-left-radius:4px}.main-table .checkbox-primary{display:inline-block;line-height:20px}.main-table .checkbox-primary label{margin:0}.main-table .table{margin:0}.table-header{padding:4px 0 12px}.table-header .table-statistic{color:#838a9d}.table-header .table-statistic strong{font-size:15px;color:#3c4353}.table-header .btn-toolbar{margin-top:-28px}.table-header.fixed-right{position:relative;z-index:5;padding:0}.table-header.fixed-right>.btn-toolbar{position:absolute;top:0;right:0;z-index:1;padding:1px;margin:0;background:#fff;border-radius:4px}.table-header.fixed-right>.btn-toolbar .btn{opacity:.65}.table-header.fixed-right>.btn-toolbar .btn:hover{opacity:1}.table-footer{position:relative;min-height:40px;padding:6px 15px;background:#fff;border-radius:0 0 4px 4px}.body-modal .table-footer{margin-bottom:20px}.talbe-lg+.table-footer{padding:11px 15px}.table-footer .btn-toolbar,.table-footer .checkbox-primary{float:left}.table-footer .btn-toolbar+.btn-toolbar{margin-left:8px}.table-footer .checkbox-primary{margin:5px 20px 0 0}.table-footer .checkbox-primary.checked label:after{border-color:#00da88!important}.table-footer .btn{padding:3px 10px;line-height:20px}.table-footer .pager{position:absolute;top:0;right:0;z-index:4;height:40px;padding:6px 5px 6px 10px;margin:0;background:#fff;opacity:1;-webkit-transition:opacity .4s;-o-transition:opacity .4s;transition:opacity .4s}.table-footer .pager:before{position:absolute;top:0;bottom:0;left:-50px;display:block;width:50px;content:' ';background:-webkit-gradient(linear,left top,right top,from(rgba(255,255,255,0)),to(#fff));background:-webkit-linear-gradient(left,rgba(255,255,255,0) 0,#fff 100%);background:-o-linear-gradient(left,rgba(255,255,255,0) 0,#fff 100%);background:linear-gradient(to right,rgba(255,255,255,0) 0,#fff 100%)}.table-footer .pager .btn,.table-footer .pager>li>.pager-item,.table-footer .pager>li>.pager-label{color:#838a9d;background:0 0;border-color:transparent}.table-footer .pager .btn,.table-footer .pager>li>a{border-radius:3px}.table-footer .pager .btn:hover,.table-footer .pager>li>a:hover{background:rgba(0,0,0,.1)}.table-footer .pager>li.disabled>a.pager-item{opacity:1}.table-footer .form-control{height:28px;padding:3px 8px}.table-footer .table-statistic{position:relative;z-index:2;float:left;padding-right:30px;line-height:28px;color:#838a9d;background:#fff}.table-footer .table-statistic:hover{z-index:4}.table-footer .table-statistic:hover+.pager{z-index:2;opacity:.3}.table-footer .btn-toolbar+.table-statistic{margin-left:10px}.table-footer .text{line-height:28px}.table-footer.fixed-footer{position:fixed;z-index:10;margin:0;background:rgba(75,75,75,.85);border-top-color:transparent}.table-footer.fixed-footer .checkbox-primary label{color:#fff}.table-footer.fixed-footer .checkbox-primary label:after{border-color:rgba(255,255,255,.8)}.table-footer.fixed-footer .table-statistic{color:#fff;background:#666}.table-footer.fixed-footer .pager{background:#666}.table-footer.fixed-footer .pager:before{background:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,0)),to(#666));background:-webkit-linear-gradient(left,rgba(0,0,0,0) 0,#666 100%);background:-o-linear-gradient(left,rgba(0,0,0,0) 0,#666 100%);background:linear-gradient(to right,rgba(0,0,0,0) 0,#666 100%)}.table-footer.fixed-footer .pager .btn,.table-footer.fixed-footer .pager>li>.pager-item,.table-footer.fixed-footer .pager>li>.pager-label{color:#fff}.table-footer.fixed-footer .pager .btn:hover,.table-footer.fixed-footer .pager>li>a:hover{background:rgba(255,255,255,.3)}.table-footer.fixed-footer .pager>li.disabled>a.pager-item{opacity:.5}.table-actions{width:0;height:28px;visibility:hidden;opacity:0;-webkit-transition:opacity cubic-bezier(.175,.885,.32,1) .8s;-o-transition:opacity cubic-bezier(.175,.885,.32,1) .8s;transition:opacity cubic-bezier(.175,.885,.32,1) .8s}.table-actions.show-always{width:auto;pointer-events:none;cursor:not-allowed;visibility:visible;opacity:.75}.has-row-checked .table-actions{width:auto;pointer-events:auto!important;cursor:default;visibility:visible;opacity:1}.table-lg tbody>tr>td{padding:9px 10px}.table-lg tbody>tr>td .btn+.btn{margin-left:5px}.table.has-sort-head thead>tr>th{padding-right:0}.table.has-sort-head thead>tr>th>a{position:relative;display:inline-block;padding-right:16px;color:#3c4353}.table.has-sort-head thead>tr>th>a:after,.table.has-sort-head thead>tr>th>a:before{position:absolute;top:0;right:0;font-family:ZentaoIcon;font-size:18px;font-size:14px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;line-height:30px;color:#3c4353;text-transform:none;content:"\f0de";opacity:.5;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.table.has-sort-head thead>tr>th>a:after{content:"\f0dd"}.table.has-sort-head thead>tr>th>a.sort-down,.table.has-sort-head thead>tr>th>a.sort-up{color:#000;text-decoration:none}.table.has-sort-head thead>tr>th>a:hover,.table.has-sort-head thead>tr>th>a:hover:after,.table.has-sort-head thead>tr>th>a:hover:before{color:#0c64eb;opacity:1}.table.has-sort-head thead>tr>th>a.sort-down:after,.table.has-sort-head thead>tr>th>a.sort-up:before{color:#000;opacity:1}.head-fixed .datatable-head-span .table,.table.fixed-header-copy{z-index:10;color:#fff;background:rgba(75,75,75,.85)}.head-fixed .datatable-head-span .table thead>tr>th,.table.fixed-header-copy thead>tr>th{color:#eee}.head-fixed .datatable-head-span .table thead>tr>th>a,.table.fixed-header-copy thead>tr>th>a{color:#eee}.head-fixed .datatable-head-span .table thead>tr>th>a:hover,.table.fixed-header-copy thead>tr>th>a:hover{color:#fff}.head-fixed .datatable-head-span .table thead>tr>th>a:after,.head-fixed .datatable-head-span .table thead>tr>th>a:before,.table.fixed-header-copy thead>tr>th>a:after,.table.fixed-header-copy thead>tr>th>a:before{color:#eee}.head-fixed .datatable-head-span .table thead>tr>th>a.sort-down,.head-fixed .datatable-head-span .table thead>tr>th>a.sort-down:after,.head-fixed .datatable-head-span .table thead>tr>th>a.sort-up,.head-fixed .datatable-head-span .table thead>tr>th>a.sort-up:before,.head-fixed .datatable-head-span .table thead>tr>th>a:hover,.head-fixed .datatable-head-span .table thead>tr>th>a:hover:after,.head-fixed .datatable-head-span .table thead>tr>th>a:hover:before,.table.fixed-header-copy thead>tr>th>a.sort-down,.table.fixed-header-copy thead>tr>th>a.sort-down:after,.table.fixed-header-copy thead>tr>th>a.sort-up,.table.fixed-header-copy thead>tr>th>a.sort-up:before,.table.fixed-header-copy thead>tr>th>a:hover,.table.fixed-header-copy thead>tr>th>a:hover:after,.table.fixed-header-copy thead>tr>th>a:hover:before{color:#fff}.head-fixed .datatable-head-span .table .checkbox-primary,.table.fixed-header-copy .checkbox-primary{z-index:1}.head-fixed .datatable-head-span .table .checkbox-primary label,.table.fixed-header-copy .checkbox-primary label{color:#fff}.head-fixed .datatable-head-span .table .checkbox-primary label:after,.table.fixed-header-copy .checkbox-primary label:after{border-color:rgba(255,255,255,.8)}.head-fixed .datatable-head-span .table .checkbox-primary.checked label:after,.table.fixed-header-copy .checkbox-primary.checked label:after{border-color:#00da88!important}.table-data{margin:0;table-layout:fixed}.table-data tbody>tr>td,.table-data tbody>tr>th{padding:6px 8px;word-break:break-all;border:none}.table-data tbody>tr>th{width:70px;padding-left:0;font-weight:400;color:#838a9d;text-align:right;vertical-align:middle}.table-data tbody>tr>td{padding-right:0}.table-data tbody>tr>td>a{color:#0c60e1}.table-data tbody>tr>td>a:not(.btn):visited{color:#082999}.table-data tbody>tr>td>a:hover,.table-data tbody>tr>td>a:visited:hover{color:#0c64eb}.table-data ol,.table-data ul{margin:0}.fixed-head-table{background:rgba(0,0,0,.7);border-bottom:1px solid #ddd}.fixed-head-table thead>tr>th{color:#fff}.table-empty-tip{padding:80px 10px;text-align:center;background:#fff}.not-firefox .table-grouped>tbody>tr>td.c-side{background:#fff!important}.table-grouped .group-toggle{cursor:pointer}.table-grouped .group-toggle.group-summary{border-top:10px solid #efefef}.table-grouped tbody>tr>td:first-child,.table-grouped thead>tr>th:first-child{padding-left:8px}.group-expand-all,.table-group-collapsed .group-collapse-all{display:none}.table-group-collapsed .group-expand-all{display:inline-block}.table-auto{table-layout:auto}.datatable .table>tbody>tr.checked.hover>td,.datatable .table>tbody>tr.checked>td.col-hover{background:#ffebbc}body.has-fixed-footer{padding-bottom:60px}.table.with-footer-fixed{margin-bottom:20px}.article-content{overflow:auto}.article-content img{margin-top:0}.article-content table{margin:10px 0}.article-content table td,.article-content table th{border:1px solid #cbd0db}.article-content table th{background:#eee}.article-content,.article>.content{word-wrap:break-word}.detail{padding:10px 0;margin:0 10px}.detail+.detail{padding-top:25px;border-top:1px solid #eee}.detail-title{font-size:14px;font-weight:700;line-height:20px}.detail-title>.pull-right{position:relative;top:-8px}h2.detail-title{margin:0;font-size:15px;font-weight:700}h2.detail-title .label,h2.detail-title .label-id{position:relative;top:-1px}.detail-content{padding:0;margin-top:10px}.detail-content em{font-style:normal;color:#3c4353}.detail-content .list-unstyled>li+li{margin-top:5px}.side-col .detail-content{padding-left:0}details.detail{padding:10px 0}details.detail summary{position:relative;cursor:pointer;outline:0}details.detail summary::-webkit-details-marker{display:none}details.detail summary:after{position:absolute;top:0;right:0;font-family:ZentaoIcon;font-size:18px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;text-transform:none;content:"\e316";opacity:.4;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}details.detail[open] summary:after{content:"\e313"}.files-list{padding-left:0;list-style:none}.files-list>li>a{display:block;line-height:24px}.files-list>li>a>.icon{display:inline-block;margin-right:5px;opacity:.7}.files-list>li>a:hover{color:#0c64eb}.files-list>li>.right-icon{opacity:0;-webkit-transition:opacity .2s;-o-transition:opacity .2s;transition:opacity .2s}.files-list>li:hover>.right-icon{opacity:1}.histories-list{padding-left:15px;margin-bottom:0}.histories-list .btn-mini{position:relative;top:1px}.histories-list>li{position:relative}.histories-list>li+li{margin-top:5px}.histories-list>li strong{color:#3c4353}.histories-list .comment,.histories-list .show-form .comment-edit-form{padding:5px 5px 5px 10px;margin:5px 0 0;background-color:rgba(0,0,0,.025);border:1px solid #eee}.histories-list .btn-edit-comment{position:absolute;top:28px;right:2px}.histories-list .comment-edit-form,.histories-list .show-form .btn-edit-comment,.histories-list .show-form .comment{display:none}.histories-list .show-form .comment-edit-form{display:block;padding:10px;border:1px solid #eee}.histories .btn-mini{width:16px;min-width:16px;height:16px;overflow:hidden;line-height:16px;color:#cbd0db;vertical-align:-8%;border-radius:1px}.histories .btn-mini>.icon{position:relative;top:-2px;left:-2px}.histories .btn-mini:focus,.histories .btn-mini:hover{color:#0c64eb;border-color:#0c64eb}.histories .show-changes .btn-expand>.icon:before{content:"\e926"}.histories .btn-strip{display:none}.histories .show-changes .btn-strip{display:inline-block}.history-changes{display:none;padding:5px;margin-bottom:-5px;margin-left:5px;font-size:12px;line-height:20px}.history-changes blockquote{padding:5px 5px 5px 10px;margin:5px 0 0;font-size:12px;background-color:rgba(0,0,0,.05);border-left:3px solid #eee}.history-changes blockquote.original{display:none}.show-changes .history-changes,.show-original .history-changes blockquote.original{display:block}.show-original .history-changes blockquote.textdiff{display:none}.syntaxhighlighter{overflow:auto}.search-list{min-width:200px;max-width:300px;padding:0}.search-list .search-box{float:none;width:auto;margin:10px}.search-list .search-box .icon-search{opacity:.5}.search-list .list-group{max-height:248px;padding:5px 10px;margin:5px 0}.dropup .search-list .search-box+.list-group{height:171px;padding-top:0}.search-list .search-input{height:30px}.search-list .input-control-icon-right{height:28px;line-height:28px}.list-group{overflow-y:auto}.list-group>a{display:block;padding:2px 10px 2px 5px;overflow:hidden;line-height:20px;text-overflow:ellipsis;white-space:nowrap;border-radius:4px}.list-group>a+a{margin-top:5px}.list-group>a>.icon{display:inline-block;margin-right:3px;opacity:.5}.list-group>a.selected{color:#e9f2fb;background-color:#0c64eb}.list-group>a.active{color:#0c64eb;background-color:#e9f2fb}.list-group>a.active:hover,.list-group>a:hover{color:#fff;background-color:#0c64eb}.list-group>.heading{padding:2px 5px;line-height:20px;color:#838a9d}.list-group>a+.heading{margin-top:4px}.dropup .search-box-sink{padding-top:5px;padding-bottom:45px}.dropup .search-box-sink .search-box{position:absolute;right:10px;bottom:10px;left:10px;margin:0}.dropup .search-box-sink .search-box+.list-group{height:auto;max-height:171px}#dropMenu>.search-box{max-width:188px}#dropMenu .input-control-icon-left{top:0}#dropMenu .list-group{width:199px;max-width:199px;max-height:300px;padding-top:0}#dropMenu .table-row .list-group{margin:0 -10px}#dropMenu .col-right{display:none}#dropMenu .col-left{width:100%}#dropMenu .col-left .list-group{max-height:250px;margin-bottom:35px}#dropMenu .col-footer{position:absolute;bottom:10px;left:10px;width:180px;padding-top:10px;padding-left:5px;margin-top:5px;border-top:1px solid #eee}#dropMenu .col-footer>a{opacity:.8}#dropMenu .col-footer>a:hover{opacity:1}#dropMenu.show-right-col{width:402px;max-width:402px}#dropMenu.show-right-col>.list-group{width:400px;max-width:400px}#dropMenu.show-right-col .col-left,#dropMenu.show-right-col .col-right{display:table-cell;width:50%}#dropMenu.show-right-col .col-left>.list-group{width:200px;max-width:200px;margin-right:0}#dropMenu.show-right-col .col-right{border-left:1px solid #eee}#dropMenu.show-right-col .col-right>.list-group{width:199px;max-height:285px;margin:0}#dropMenu.show-right-col .col-right>.list-group>a{opacity:.7}#dropMenu.show-right-col .col-right>.list-group>a:hover{opacity:1}#dropMenu.show-right-col .toggle-right-col>.icon-angle-right:before{content:"\e314"}#dropMenu.has-search-text{width:200px;margin-bottom:35px}#dropMenu.has-search-text>.list-group>.table-row{display:block}#dropMenu.has-search-text>.list-group>.table-row>.table-col{display:block}#dropMenu.has-search-text .pull-right.toggle-right-col{display:none}#dropMenu.has-search-text .col-left .list-group{margin-bottom:0}#dropMenu.has-search-text .col-right{margin-left:-10px}#dropMenu.has-search-text .col-right .list-group{margin-bottom:35px}#dropMenu.has-search-text .col-right .list-group>a{opacity:.7}#dropMenu.has-search-text>a{opacity:.7}.release-path{overflow:hidden}.release-line{display:table;width:100%;padding:0;table-layout:fixed}.release-line>li{display:table-cell;list-style:none}.release-line>li>a{position:relative;display:block}.release-line>li>a:before{position:absolute;left:0;display:block;width:13px;height:13px;content:' ';background:#fff;border:2px solid #838a9d;border-radius:50%}.release-line>li>a:after{position:absolute;left:5px;display:block;width:2px;height:30px;content:' ';background:#cbe0f6}.release-line>li>a>.icon{position:absolute;left:4px;font-size:24px}.release-line>li>a .title{display:block;font-size:14px;white-space:nowrap}.release-line>li>a .date,.release-line>li>a .info{display:block;max-height:18px;overflow:hidden;font-size:12px;color:#838a9d;text-overflow:ellipsis;white-space:nowrap}.release-line>li>a:hover:before{background-color:#e9f2fb}.release-line>li>a:hover:after{background-color:#838a9d}.release-line>li>a:hover .title{color:#0c64eb}.release-line>li>a:hover .date,.release-line>li>a:hover .info{color:#838a9d}.release-line>li:nth-child(odd){padding-top:80px;vertical-align:top}.release-line>li:nth-child(odd)>a{height:85px;padding-top:36px;border-top:5px solid #cbe0f6}.release-line>li:nth-child(odd)>a:before{top:-9px}.release-line>li:nth-child(odd)>a:after{top:6px}.release-line>li:nth-child(odd)>a>.icon{top:-26px}.release-line>li:nth-child(even){padding-bottom:80px;vertical-align:bottom}.release-line>li:nth-child(even)>a{height:85px;padding-bottom:36px;border-bottom:5px solid #cbe0f6}.release-line>li:nth-child(even)>a:before{bottom:-9px}.release-line>li:nth-child(even)>a:after{bottom:6px}.release-line>li:nth-child(even)>a>.icon{bottom:-2px}.release-line>li:last-child>a{border-color:transparent}.release-line>li.active>a:before{border-color:#0c64eb}.release-line>li+li>a>.date,.release-line>li+li>a>.info,.release-line>li+li>a>.title{position:relative;left:-36%}#footer{position:fixed;right:0;bottom:0;left:0;z-index:1010;height:40px;background:#fff;border-top:1px solid #eff1f7}#footer .breadcrumb{padding:10px 0;margin:0}#footer .breadcrumb>li{max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#footer .breadcrumb>.active,#footer .breadcrumb>li>a{color:#838a9e}#footer .breadcrumb>.active:hover,#footer .breadcrumb>li>a:hover{color:#16a8f8}#footer .breadcrumb>li+li:before{content:'>'}#footer>.container{padding:0 20px}@media (min-width:1400px){#footer>.container{padding:0 40px}}#poweredBy{position:absolute;top:4px;right:0;padding:5px 10px}#poweredBy .icon-zentao{color:#0097fd}#poweredBy a{color:#3c4353}#poweredBy a:hover{color:#0c64eb}#poweredBy a:hover .icon-zentao{color:#0c64eb}#poweredBy a.text-important{color:#bd7b46}#poweredBy a.text-important:hover{color:#ff5d5d}#poweredBy a.text-primary{color:#0c64eb}#poweredBy a.text-primary:hover{color:#16a8f8}#poweredBy #aiux{color:#cbd0dc}#noticeBox .alert{-webkit-box-shadow:rgba(0,0,0,.15) 0 3px 10px,rgba(0,0,0,.25) 0 3px 10px;box-shadow:rgba(0,0,0,.15) 0 3px 10px,rgba(0,0,0,.25) 0 3px 10px} \ No newline at end of file +*/.chosen-container{position:relative;display:inline-block;font-size:13px;vertical-align:middle;zoom:1;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;*display:inline}.chosen-container .chosen-drop{position:absolute;top:100%;z-index:1010;display:none;width:100%;background:#fff;border:1px solid #b6bdcc;border:1px solid rgba(0,0,0,.15);border-top:0;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.chosen-container .chosen-drop.chosen-drop-size-limited{border-top:1px solid rgba(0,0,0,.15)}.chosen-container.chosen-with-drop .chosen-drop{display:block}.chosen-container a{cursor:pointer}.chosen-container.chosen-up .chosen-drop{top:inherit;bottom:100%;margin-top:auto;margin-bottom:-1px;border-radius:2px 2px 0 0;-webkit-box-shadow:0 -3px 5px rgba(0,0,0,.175);box-shadow:0 -3px 5px rgba(0,0,0,.175)}.chosen-container-single .chosen-single{display:block;width:100%;height:32px;padding:5px 8px;overflow:hidden;line-height:1.42857143;color:#222;text-decoration:none;white-space:nowrap;vertical-align:middle;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #dcdcdc;border-radius:2px;-webkit-box-shadow:none;box-shadow:none;-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s,-webkit-box-shadow ease-in-out .15s}.chosen-container-single .chosen-default{color:#838a9d}.chosen-container-single .chosen-single>span{display:block;margin-right:26px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.chosen-container-single .chosen-single-with-deselect span{margin-right:38px}.chosen-container-single .chosen-single abbr{position:absolute;top:7px;right:24px;display:block;width:20px;height:20px;font-size:19.5px;font-weight:700;line-height:14px;color:#000;text-align:center;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.chosen-container-single .chosen-single abbr:before{content:'×'}.chosen-container-single .chosen-single abbr:focus,.chosen-container-single .chosen-single abbr:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}.chosen-container-single .chosen-single div{position:absolute;top:0;right:0;display:block;height:100%;padding:5px 8px}.chosen-container-single .chosen-single div b{display:inline-block;width:0;height:0;margin-bottom:2px;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.chosen-container-single .chosen-search{position:relative;z-index:1010;padding:3px 4px;margin:0;white-space:nowrap}.chosen-container-single .chosen-search input[type=text]{width:100%;height:27px;padding:2px 26px 2px 8px;margin:1px 0;font-size:12px;line-height:1.5;background-color:#fff;border:1px solid #dcdcdc;border-radius:2px;outline:0}.chosen-container-single .chosen-search input[type=text]:focus{border-color:#0c64eb}.chosen-container-single .chosen-search:before{position:absolute;top:10px;right:10px;display:block;font-family:ZentaoIcon;font-size:18px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;color:#838a9d;text-transform:none;content:"\e928";speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.chosen-container-single .chosen-drop{margin-top:-1px;-webkit-background-clip:padding-box;background-clip:padding-box;border-radius:0 0 4px 4px}.chosen-container-single.chosen-container-single-nosearch .chosen-search{position:absolute;left:-9999px}.chosen-container .chosen-results{position:relative;max-height:240px;padding:0;margin:0;overflow-x:hidden;overflow-y:auto;-webkit-overflow-scrolling:touch}.chosen-container .chosen-results li{display:none;padding:5px 10px;margin:0;line-height:15px;list-style:none;-webkit-transition:background-color .2s cubic-bezier(.175,.885,.32,1);-o-transition:background-color .2s cubic-bezier(.175,.885,.32,1);transition:background-color .2s cubic-bezier(.175,.885,.32,1);-webkit-touch-callout:none}.chosen-container .chosen-results li.active-result{display:list-item;cursor:pointer}.chosen-container .chosen-results li.disabled-result{display:list-item;color:#ccc;cursor:default}.chosen-container .chosen-results li.highlighted{color:#fff;background-color:#0c64eb}.chosen-container .chosen-results li.no-results{display:list-item;background:#f4f4f4}.chosen-container .chosen-results li.group-result{display:list-item;font-weight:700;cursor:default}.chosen-container .chosen-results li.group-option{padding-left:15px}.chosen-container .chosen-results li em{font-style:normal;text-decoration:underline}.chosen-container-multi .chosen-choices{position:relative;width:100%;min-height:32px;min-height:30px\9;padding:0;margin:0;overflow:hidden;cursor:text;background-color:#fff;border:1px solid #dcdcdc;border-radius:2px;-webkit-box-shadow:none;box-shadow:none;-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s,-webkit-box-shadow ease-in-out .15s}.chosen-container-multi .chosen-choices:after,.chosen-container-multi .chosen-choices:before{display:table;content:" "}.chosen-container-multi .chosen-choices:after{clear:both}.chosen-container-multi .chosen-choices li{display:block;float:left;padding:0 6px;margin:5px 0 0 6px;list-style:none}.chosen-container-multi .chosen-choices li.search-field{padding:0;margin-bottom:4px;white-space:nowrap}.chosen-container-multi .chosen-choices li.search-field input[type=text]{height:20px;font-size:100%;color:#838a9d;background:0 0!important;border:0!important;border-radius:0;outline:0;-webkit-box-shadow:none;box-shadow:none}.chosen-container-multi .chosen-choices li.search-field .default{color:#999}.chosen-container-multi .chosen-choices li.search-field:before{position:absolute;right:8px;bottom:8px;display:block;font-family:ZentaoIcon;font-size:18px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;color:#838a9d;text-transform:none;content:"\e928";opacity:0;-webkit-transition:opacity .2s cubic-bezier(.175,.885,.32,1);-o-transition:opacity .2s cubic-bezier(.175,.885,.32,1);transition:opacity .2s cubic-bezier(.175,.885,.32,1);speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.chosen-container-multi .chosen-choices li.search-choice{position:relative;padding:3px 20px 3px 5px;line-height:12px;cursor:default;background-color:#f1f1f1;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #cbd0db;border-radius:3px;-webkit-box-shadow:0 0 2px #fff inset,0 1px 0 rgba(0,0,0,.05);box-shadow:0 0 2px #fff inset,0 1px 0 rgba(0,0,0,.05);-webkit-transition:all .4s cubic-bezier(.175,.885,.32,1);-o-transition:all .4s cubic-bezier(.175,.885,.32,1);transition:all .4s cubic-bezier(.175,.885,.32,1)}.chosen-container-multi .chosen-choices li.search-choice:hover{background-color:#fff;border-color:#adb5c6;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 0 rgba(0,0,0,.1)}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close{position:absolute;top:0;right:0;display:block;width:20px;height:20px;font-size:15.6px;font-weight:700;line-height:14px;color:#000;text-align:center;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:before{content:'×'}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:focus,.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}.chosen-container-multi .chosen-choices li.search-choice-disabled{padding-right:5px;color:#666;background-color:#e4e4e4;border:1px solid #ccc}.chosen-container-multi .chosen-choices li.search-choice-focus{background:#d4d4d4}.chosen-container-multi .chosen-choices li.search-choice-focus .search-choice-close{background-position:-42px -10px}.chosen-container-multi .chosen-results{padding:5px 0;margin:0}.chosen-container-multi .chosen-drop .result-selected{display:list-item;color:#ccc;cursor:default}.chosen-container-active .chosen-single{border-color:#0c64eb;-webkit-box-shadow:none,0 0 8px rgba(12,100,235,.6);box-shadow:none,0 0 8px rgba(12,100,235,.6)}.chosen-container-active.chosen-with-drop .chosen-single{border:1px solid #b6bdcc;border:1px solid rgba(0,0,0,.15);border-bottom-right-radius:0;border-bottom-left-radius:0;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.chosen-container-active.chosen-with-drop .chosen-single div{background:0 0;border-left:none}.chosen-container-active.chosen-with-drop .chosen-single div b{content:"";border-top:0 dotted;border-bottom:4px solid}.chosen-container-active.chosen-with-drop.chosen-up .chosen-single{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:2px;border-bottom-left-radius:2px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.chosen-container-active .chosen-choices{border-color:#0c64eb;-webkit-box-shadow:none,0 0 8px rgba(12,100,235,.6);box-shadow:none,0 0 8px rgba(12,100,235,.6)}.chosen-container-active .chosen-choices li.search-field input[type=text]{color:#111!important}.chosen-container-active .chosen-choices li.search-field:before{opacity:1}.chosen-disabled{cursor:default;opacity:.5!important}.chosen-disabled .chosen-single{cursor:default}.chosen-disabled .chosen-choices .search-choice .search-choice-close{cursor:default}.chosen-compact.chosen-container-single .chosen-single>.chosen-search{left:0;display:none;padding:3px 4px;opacity:0}.chosen-compact.chosen-container-single .chosen-single>.chosen-search>input{height:25px;padding:2px 26px 2px 4px;font-size:inherit}.chosen-compact.chosen-container-single .chosen-single>.chosen-search:before{top:9px}.chosen-compact.chosen-with-search.chosen-with-drop .chosen-single>.chosen-search{display:block;opacity:1}.container,.container-fixed,.container-fluid{position:relative}.container{max-width:1800px!important}body{padding-bottom:40px;background-color:#efefef}body.article-content,body.body-modal{background:0 0}body.body-modal{padding:0}a:active,a:focus,button:active,button:focus{outline:0!important}em{font-style:normal}.strong{font-weight:700}.font-normal{font-weight:400!important}.text-middle{vertical-align:middle!important}.text-bottom{vertical-align:bottom!important}.text-top{vertical-align:top!important}.inline-block{display:inline-block!important}.layer{border-radius:4px;-webkit-box-shadow:0 0 20px 0 #bdc9d8;box-shadow:0 0 20px 0 #bdc9d8}.space{margin-bottom:20px}.space-lg{margin-bottom:30px}.space-sm{margin-bottom:10px}.muted{opacity:.5}.text-muted em{color:#3c4353}.no-animate{-webkit-transition:none!important;-o-transition:none!important;transition:none!important}.template{display:none!important}.text-left{text-align:left!important}.text-yellow.icon-folder{color:#ffe066}.table-row{display:table;width:100%;table-layout:fixed}.table-col,.table-row>.col,.table-row>[class*=col-],.table-row>[class*="-col"]{display:table-cell;float:none;vertical-align:top}.side-col{width:200px;padding-right:20px}.side-col.col-4{width:33.3333333%}.col-lg{width:260px}.col-xl{width:320px}.col-sm{width:150px}.col-xs{width:100px}.main-col+.side-col{padding-right:0;padding-left:20px}.row-grid>[class*=col-],.row-grid>[class*="-col"]{padding-top:6px;padding-bottom:6px}hr.space{margin:10px 0;border:none}hr.space-sm{margin:5px 0;border:none}.text-secondary{color:#16a8f8}a.text-primary{color:#0c64eb}.nav-primary>li>a{min-width:100px;padding:5px 8px;color:#838a9d;border-color:#e7f1fc}.nav-primary>li.active>a{color:#0c64eb;background-color:#e7f1fc;border-color:#e7f1fc}.nav-primary>li.active>a:hover{color:#0c64eb;background-color:#c3dcf7;border-color:#c3dcf7}.end-marker{margin-bottom:20px;color:#cbd0db;text-align:center}@-webkit-keyframes highlight{0%{background:#fff;outline:1px solid transparent}100%{background:#fff0d5;outline:2px solid #ffdcbc}}@-o-keyframes highlight{0%{background:#fff;outline:1px solid transparent}100%{background:#fff0d5;outline:2px solid #ffdcbc}}@keyframes highlight{0%{background:#fff;outline:1px solid transparent}100%{background:#fff0d5;outline:2px solid #ffdcbc}}.highlight{-webkit-animation:highlight .5s linear 0s 2 alternate;-o-animation:highlight .5s linear 0s 2 alternate;animation:highlight .5s linear 0s 2 alternate}.progress.inline-block{width:100px;margin:0}.w-p5{width:5%!important}.w-p10{width:10%!important}.w-p15{width:15%!important}.w-p20{width:20%!important}.w-p25{width:25%!important}.w-p30{width:30%!important}.w-p35{width:35%!important}.w-p40{width:40%!important}.w-p45{width:45%!important}.w-p50{width:50%!important}.w-p55{width:55%!important}.w-p60{width:60%!important}.w-p65{width:65%!important}.w-p70{width:70%!important}.w-p75{width:75%!important}.w-p80{width:80%!important}.w-p85{width:85%!important}.w-p90{width:90%!important}.w-p94{width:94%!important}.w-p95{width:95%!important}.w-p98{width:98%!important}.w-p99{width:99%!important}.w-p100{width:100%!important}.w-auto{width:auto!important}.w-10px{width:10px!important}.w-20px{width:20px!important}.w-30px{width:30px!important}.w-35px{width:35px!important}.w-40px{width:40px!important}.w-45px{width:45px!important}.w-50px{width:50px!important}.w-60px{width:60px!important}.w-70px{width:70px!important}.w-80px{width:80px!important}.w-90px{width:90px!important}.w-100px{width:100px!important}.w-110px{width:110px!important}.w-120px{width:120px!important}.w-130px{width:130px!important}.w-140px{width:140px!important}.w-150px{width:150px!important}.w-160px{width:160px!important}.w-180px{width:180px!important}.w-200px{width:200px!important}.w-230px{width:230px!important}.w-250px{width:250px!important}.w-300px{width:300px!important}.w-400px{width:400px!important}.w-500px{width:500px!important}.w-600px{width:600px!important}.w-700px{width:700px!important}.w-800px{width:800px!important}.w-900px{width:900px!important}.mw-200px{max-width:200px!important}.mw-300px{max-width:300px!important}.mw-400px{max-width:400px!important}.mw-500px{max-width:500px!important}.mw-600px{max-width:600px!important}.mw-700px{max-width:700px!important}.mw-800px{max-width:800px!important}.mw-900px{max-width:900px!important}.mw-1400px{max-width:1400px!important}.w-id{width:70px!important}.w-pri{width:40px!important}.w-severity{width:50px!important}.w-hour{width:57px!important}.w-date{width:90px!important}.w-status{width:60px!important}.w-resolution,.w-type,.w-user{width:80px!important}.w-p15-f{width:15%!important;min-width:120px!important}.w-p25-f{width:25%!important;min-width:200px!important}.w-p35-f{width:35%!important;min-width:300px!important}.w-p45-f{width:45%!important;min-width:400px!important}.h-5px{height:5px!important}.h-10px{height:10px!important}.h-20px{height:20px!important}.h-30px{height:30px!important}.h-35px{height:35px!important}.h-40px{height:40px!important}.h-45px{height:45px!important}.h-50px{height:50px!important}.h-60px{height:60px!important}.h-70px{height:70px!important}.h-80px{height:80px!important}.h-100px{height:100px!important}.h-120px{height:120px!important}.h-130px{height:130px!important}.h-140px{height:140px!important}.h-150px{height:150px!important}.h-200px{height:200px!important}.pd-0{padding:0!important}.mg-0{margin:0!important}.mgb-20{margin-bottom:20px!important}.mgb-10{margin-bottom:10px!important}.pdb-20{padding-bottom:20px!important}.pdt-20{padding-top:20px!important}.br-0{border-radius:0!important}.bd-0,.bd-none,.borderless{border:none!important}.bg-none{background:0 0!important}.red{color:#ff5d5d!important}.icon-pro-version{font-size:14px!important}.icon-pro-version:before{position:relative;top:-1px;font-size:14px;color:#ff5d5d;content:"\e92b"}.bg-primary{color:#fff;background:#1183fb -webkit-gradient(linear,right top,left top,from(#0a48d1),to(#1183fb));background:#1183fb -webkit-linear-gradient(right,#0a48d1 0,#1183fb 100%);background:#1183fb -o-linear-gradient(right,#0a48d1 0,#1183fb 100%);background:#1183fb linear-gradient(-90deg,#0a48d1 0,#1183fb 100%);background-color:#00b1fd}.bg-secondary{color:#fff;background:#16a8f8}.hl-tutorial{position:relative!important;z-index:1010!important;-webkit-box-shadow:0 0 0 0 #000!important;box-shadow:0 0 0 0 #000!important;-webkit-transition:-webkit-box-shadow 1s!important;-o-transition:box-shadow 1s!important;transition:-webkit-box-shadow 1s!important;transition:box-shadow 1s!important;transition:box-shadow 1s,-webkit-box-shadow 1s!important}.hl-tutorial.hl-in{-webkit-box-shadow:0 0 20px 0 #ffff8d,0 0 0 2px #ffd180,0 0 0 2000px rgba(0,0,0,.2)!important;box-shadow:0 0 20px 0 #ffff8d,0 0 0 2px #ffd180,0 0 0 2000px rgba(0,0,0,.2)!important}.btn.tooltip-tutorial,.hl-tutorial.hl-in:hover{-webkit-box-shadow:0 0 30px 0 #ffff8d,0 0 0 5px #ffd180,0 0 0 2000px rgba(0,0,0,.3)!important;box-shadow:0 0 30px 0 #ffff8d,0 0 0 5px #ffd180,0 0 0 2000px rgba(0,0,0,.3)!important}.tooltip-max .tooltip-inner{max-width:1000px;padding:8px 10px}.transition-all *{-webkit-transition:all .2s!important;-o-transition:all .2s!important;transition:all .2s!important}.scroll-x{overflow-x:auto!important}.scroll-y{overflow-y:auto!important}.divider+.divider{display:none}@font-face{font-family:ZentaoIcon;font-style:normal;font-weight:400;src:url(../fonts/ZentaoIcon.eot?v=1.1.0);src:url(../fonts/ZentaoIcon.eot?#iefix&v=1.1.0) format('embedded-opentype'),url(../fonts/ZentaoIcon.woff?v=1.1.0) format('woff'),url(../fonts/ZentaoIcon.ttf?v=1.1.0) format('truetype'),url(../fonts/ZentaoIcon.svg#regular?v=1.1.0) format('svg')}.icon,[class*=" icon-"],[class^=icon-]{font-family:ZentaoIcon;font-size:18px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;text-transform:none;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon:before{display:inline-block;min-width:18px;text-align:center}a .icon,a [class*=" icon-"],a [class^=icon-]{display:inline}.icon-lg:before{font-size:1.33333333em;vertical-align:-10%}.icon-2x{font-size:36px}.icon-3x{font-size:54px}.icon-4x{font-size:72px}.icon-5x{font-size:90px}.icon-spin{display:inline-block;-webkit-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;animation:spin 2s infinite linear}a .icon-spin{display:inline-block;text-decoration:none}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0);transform:rotate(0)}100%{-o-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes spin{0%{-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);-o-transform:rotate(359deg);transform:rotate(359deg)}}.icon-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.icon-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.icon-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.icon-flip-horizontal{-webkit-transform:scale(-1,1);-ms-transform:scale(-1,1);-o-transform:scale(-1,1);transform:scale(-1,1)}.icon-flip-vertical{-webkit-transform:scale(1,-1);-ms-transform:scale(1,-1);-o-transform:scale(1,-1);transform:scale(1,-1)}.icon.icon-flip-horizontal,.icon.icon-flip-vertical,.icon.icon-rotate-180,.icon.icon-rotate-270,.icon.icon-rotate-90{display:inline-block}.icon-book:before{content:"\f02d"}.icon-treemap-alt:before{content:"\e971"}.icon-collapse-alt:before{content:"\e6f2"}.icon-expand-alt:before{content:"\e6f1"}.icon-more:before{content:"\e744"}.icon-angle-double-right:before{content:"\f101"}.icon-certificate:before{content:"\f0a3"}.icon-bell:before{content:"\e7f5"}.icon-format-bold:before{content:"\e953"}.icon-format-header-pound:before{content:"\e954"}.icon-format-italic:before{content:"\e955"}.icon-format-list-bulleted:before{content:"\e956"}.icon-format-list-numbers:before{content:"\e969"}.icon-format-quote-close:before{content:"\e96a"}.icon-fullscreen:before{content:"\e96b"}.icon-fullscreen-exit:before{content:"\e972"}.icon-image:before{content:"\e96c"}.icon-table-large:before{content:"\e96d"}.icon-columns:before{content:"\f0db"}.icon-cancel:before{content:"\e951"}.icon-ban-circle:before{content:"\e951"}.icon-persons:before{content:"\e94d"}.icon-eye:before{content:"\e94e"}.icon-unlock:before{content:"\e94f"}.icon-eye-off:before{content:"\e96e"}.icon-lock:before{content:"\e950"}.icon-move:before{content:"\e94c"}.icon-help:before{content:"\e968"}.icon-folder-account:before{content:"\e942"}.icon-folder-move:before{content:"\e960"}.icon-folder-plus:before{content:"\e961"}.icon-folder-upload:before{content:"\e962"}.icon-folder-star:before{content:"\e963"}.icon-folder-edit:before{content:"\e964"}.icon-folder-download:before{content:"\e965"}.icon-folder-outline:before{content:"\e966"}.icon-restart:before{content:"\e95e"}.icon-history:before{content:"\e95f"}.icon-home:before{content:"\e958"}.icon-pencil:before{content:"\e254"}.icon-angle-down:before{content:"\e313"}.icon-angle-left:before{content:"\e314"}.icon-angle-right:before{content:"\e315"}.icon-angle-top:before{content:"\e316"}.icon-first-page:before{content:"\e5dc"}.icon-last-page:before{content:"\e5dd"}.icon-caret-down:before{content:"\f0d7"}.icon-caret-up:before{content:"\f0d8"}.icon-caret-left:before{content:"\f0d9"}.icon-caret-right:before{content:"\f0da"}.icon-sort:before{content:"\f0dc"}.icon-sort-down:before{content:"\f0dd"}.icon-sort-up:before{content:"\f0de"}.icon-zentao-alt:before{content:"\e900"}.icon-zentao:before{content:"\e901"}.icon-severity:before{content:"\e973"}.icon-severity-solid:before{content:"\e902"}.icon-bar-chart:before{content:"\e903"}.icon-import:before{content:"\e904"}.icon-export:before{content:"\e905"}.icon-printer:before{content:"\e906"}.icon-hand-right:before{content:"\e907"}.icon-hand-right-alt:before{content:"\e96f"}.icon-checked:before{content:"\e908"}.icon-off:before{content:"\e909"}.icon-start:before{content:"\e90a"}.icon-play:before{content:"\e90a"}.icon-time:before{content:"\e90b"}.icon-edit:before{content:"\e90c"}.icon-trash:before{content:"\e90d"}.icon-link:before{content:"\e90e"}.icon-unlink:before{content:"\e90f"}.icon-bullhorn:before{content:"\e910"}.icon-bug:before{content:"\e911"}.icon-list-alt:before{content:"\e912"}.icon-fork:before{content:"\e913"}.icon-change:before{content:"\e970"}.icon-glasses:before{content:"\e914"}.icon-sitemap:before{content:"\e915"}.icon-plus-sign:before{content:"\e916"}.icon-pluses:before{content:"\e917"}.icon-flag-alt:before{content:"\e918"}.icon-magic:before{content:"\e919"}.icon-treemap:before{content:"\e91a"}.icon-confirm:before{content:"\e91b"}.icon-lightbulb:before{content:"\e91c"}.icon-delay:before{content:"\e91d"}.icon-calendar:before{content:"\e91d"}.icon-pause:before{content:"\e91e"}.icon-ban:before{content:"\e91f"}.icon-plus-bold:before{content:"\e920"}.icon-copy:before{content:"\e921"}.icon-refresh:before{content:"\e922"}.icon-arrow-up:before{content:"\e923"}.icon-arrow-down:before{content:"\e924"}.icon-arrow-left:before{content:"\e952"}.icon-arrow-right:before{content:"\e93e"}.icon-plus:before{content:"\e925"}.icon-minus:before{content:"\e926"}.icon-exchange:before{content:"\e927"}.icon-search:before{content:"\e928"}.icon-envelope-o:before{content:"\e92a"}.icon-check:before{content:"\e5ca"}.icon-circle:before{content:"\e836"}.icon-up-circle:before{content:"\e92b"}.icon-right-circle:before{content:"\e92c"}.icon-down-circle:before{content:"\e92d"}.icon-left-circle:before{content:"\e92e"}.icon-check-circle:before{content:"\e92f"}.icon-exclamation-sign:before{content:"\e930"}.icon-unfold-all:before{content:"\e931"}.icon-fold-all:before{content:"\e932"}.icon-plus-sm:before{content:"\e933"}.icon-chevron-left:before{content:"\e934"}.icon-chevron-right:before{content:"\e935"}.icon-close:before{content:"\e936"}.icon-flag:before{content:"\e937"}.icon-check-sign:before{content:"\e938"}.icon-minus-sign:before{content:"\e939"}.icon-bars-sign:before{content:"\e93a"}.icon-cog:before{content:"\e93b"}.icon-color:before{content:"\e93c"}.icon-paper-clip:before{content:"\e93d"}.icon-back:before{content:"\e93f"}.icon-chat-line:before{content:"\e940"}.icon-person:before{content:"\e941"}.icon-stack:before{content:"\e943"}.icon-cube:before{content:"\e967"}.icon-folder:before{content:"\e944"}.icon-folder-o:before{content:"\e945"}.icon-folder-open-o:before{content:"\e946"}.icon-folder-open:before{content:"\e947"}.icon-bars:before{content:"\e948"}.icon-cards-view:before{content:"\e949"}.icon-star-empty:before{content:"\e94a"}.icon-star:before{content:"\e94b"}.icon-ellipsis-v:before{content:"\e5d4"}.icon-spinner-indicator:before{content:"\e982"}.icon-text:before{content:"\e929"}.icon-code:before{content:"\e957"}.icon-chevron-double-up:before{content:"\e959"}.icon-chevron-double-down:before{content:"\e95a"}.icon-chart-pie:before{content:"\e95b"}.icon-chart-line:before{content:"\e95c"}.icon-chart-bar:before{content:"\e95d"}.icon-globe:before{content:"\f0ac"}.icon-file:before{content:"\f016"}.icon-file-empty:before{content:"\f016"}.icon-file-text:before{content:"\f0f6"}.icon-file-alt:before{content:"\f15b"}.icon-file-text-alt:before{content:"\f15c"}.icon-file-pdf:before{content:"\f1c1"}.icon-file-word:before{content:"\f1c2"}.icon-file-excel:before{content:"\f1c3"}.icon-file-powerpoint:before{content:"\f1c4"}.icon-file-image:before{content:"\f1c5"}.icon-file-archive:before{content:"\f1c6"}.icon-file-audio:before{content:"\f1c7"}.icon-file-video:before{content:"\f1c8"}.icon-file-code:before{content:"\f1c9"}.icon-sm:before{font-size:14px;vertical-align:10%}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:13px;font-weight:400;line-height:18px;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;border-radius:4px;-webkit-transition:.4s cubic-bezier(.175,.885,.32,1);-o-transition:.4s cubic-bezier(.175,.885,.32,1);transition:.4s cubic-bezier(.175,.885,.32,1);-webkit-transition-property:background,border,outline,opacity,-webkit-box-shadow;-o-transition-property:background,border,box-shadow,outline,opacity;transition-property:background,border,outline,opacity,-webkit-box-shadow;transition-property:background,border,box-shadow,outline,opacity;transition-property:background,border,box-shadow,outline,opacity,-webkit-box-shadow}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:focus,.btn:hover{color:#3c4353;text-decoration:none}.btn:active{text-decoration:none;background-image:none;outline:0;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.1)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;filter:grayscale(1);-webkit-box-shadow:none;box-shadow:none;opacity:.5;-webkit-filter:grayscale(1)}.btn{color:#3c4353;background-color:#fff;border-color:#d6dae3}.btn.active,.btn.hover,.btn:active,.btn:focus,.btn:hover,.open .dropdown-toggle.btn{color:#3c4353;background-color:rgba(255,255,255,.8);border-color:#b8bfce}.btn.active,.btn:active,.open .dropdown-toggle.btn{background-color:#f2f2f2;background-image:none;border-color:#b8bfce}.btn.disabled,.btn.disabled.active,.btn.disabled:active,.btn.disabled:focus,.btn.disabled:hover,.btn[disabled],.btn[disabled].active,.btn[disabled]:active,.btn[disabled]:focus,.btn[disabled]:hover,fieldset[disabled] .btn,fieldset[disabled] .btn.active,fieldset[disabled] .btn:active,fieldset[disabled] .btn:focus,fieldset[disabled] .btn:hover{color:rgba(60,67,83,.3);background-color:#fff;border-color:#d6dae3}.btn-gray{color:#82899f;background-color:#f1f1f1;border-color:#f1f1f1}.btn-gray.active,.btn-gray.hover,.btn-gray:active,.btn-gray:focus,.btn-gray:hover,.open .dropdown-toggle.btn-gray{color:#82899f;background-color:rgba(241,241,241,.8);border-color:#d8d8d8}.btn-gray.active,.btn-gray:active,.open .dropdown-toggle.btn-gray{background-color:#e4e4e4;background-image:none;border-color:#d8d8d8}.btn-gray.disabled,.btn-gray.disabled.active,.btn-gray.disabled:active,.btn-gray.disabled:focus,.btn-gray.disabled:hover,.btn-gray[disabled],.btn-gray[disabled].active,.btn-gray[disabled]:active,.btn-gray[disabled]:focus,.btn-gray[disabled]:hover,fieldset[disabled] .btn-gray,fieldset[disabled] .btn-gray.active,fieldset[disabled] .btn-gray:active,fieldset[disabled] .btn-gray:focus,fieldset[disabled] .btn-gray:hover{color:rgba(130,137,159,.3);background-color:#f1f1f1;border-color:#f1f1f1}.btn-primary{color:#fff;background-color:#0c64eb;border-color:transparent}.btn-primary.active,.btn-primary.hover,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.open .dropdown-toggle.btn-primary{color:#fff;background-color:rgba(12,100,235,.8);border-color:rgba(0,0,0,0)}.btn-primary.active,.btn-primary:active,.open .dropdown-toggle.btn-primary{background-color:#0b5ad3;background-image:none;border-color:rgba(0,0,0,0)}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{color:rgba(255,255,255,.3);background-color:#0c64eb;border-color:transparent}.btn-secondary{color:#fff;background-color:#16a8f8;border-color:transparent}.btn-secondary.active,.btn-secondary.hover,.btn-secondary:active,.btn-secondary:focus,.btn-secondary:hover,.open .dropdown-toggle.btn-secondary{color:#fff;background-color:rgba(22,168,248,.8);border-color:rgba(0,0,0,0)}.btn-secondary.active,.btn-secondary:active,.open .dropdown-toggle.btn-secondary{background-color:#079ced;background-image:none;border-color:rgba(0,0,0,0)}.btn-secondary.disabled,.btn-secondary.disabled.active,.btn-secondary.disabled:active,.btn-secondary.disabled:focus,.btn-secondary.disabled:hover,.btn-secondary[disabled],.btn-secondary[disabled].active,.btn-secondary[disabled]:active,.btn-secondary[disabled]:focus,.btn-secondary[disabled]:hover,fieldset[disabled] .btn-secondary,fieldset[disabled] .btn-secondary.active,fieldset[disabled] .btn-secondary:active,fieldset[disabled] .btn-secondary:focus,fieldset[disabled] .btn-secondary:hover{color:rgba(255,255,255,.3);background-color:#16a8f8;border-color:transparent}.btn-warning{color:#fff;background-color:#ff9800;border-color:transparent}.btn-warning.active,.btn-warning.hover,.btn-warning:active,.btn-warning:focus,.btn-warning:hover,.open .dropdown-toggle.btn-warning{color:#fff;background-color:rgba(255,152,0,.8);border-color:rgba(0,0,0,0)}.btn-warning.active,.btn-warning:active,.open .dropdown-toggle.btn-warning{background-color:#e68900;background-image:none;border-color:rgba(0,0,0,0)}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{color:rgba(255,255,255,.3);background-color:#ff9800;border-color:transparent}.btn-danger{color:#fff;background-color:#ff5d5d;border-color:transparent}.btn-danger.active,.btn-danger.hover,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,.open .dropdown-toggle.btn-danger{color:#fff;background-color:rgba(255,93,93,.8);border-color:rgba(0,0,0,0)}.btn-danger.active,.btn-danger:active,.open .dropdown-toggle.btn-danger{background-color:#ff4343;background-image:none;border-color:rgba(0,0,0,0)}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{color:rgba(255,255,255,.3);background-color:#ff5d5d;border-color:transparent}.btn-success{color:#fff;background-color:#00da88;border-color:transparent}.btn-success.active,.btn-success.hover,.btn-success:active,.btn-success:focus,.btn-success:hover,.open .dropdown-toggle.btn-success{color:#fff;background-color:rgba(0,218,136,.8);border-color:rgba(0,0,0,0)}.btn-success.active,.btn-success:active,.open .dropdown-toggle.btn-success{background-color:#00c178;background-image:none;border-color:rgba(0,0,0,0)}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{color:rgba(255,255,255,.3);background-color:#00da88;border-color:transparent}.btn-info{color:#0c64eb;background-color:#e9f2fb;border-color:transparent}.btn-info.active,.btn-info.hover,.btn-info:active,.btn-info:focus,.btn-info:hover,.open .dropdown-toggle.btn-info{color:#0c64eb;background-color:rgba(233,242,251,.8);border-color:rgba(0,0,0,0)}.btn-info.active,.btn-info:active,.open .dropdown-toggle.btn-info{background-color:#d3e5f7;background-image:none;border-color:rgba(0,0,0,0)}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{color:rgba(12,100,235,.3);background-color:#e9f2fb;border-color:transparent}.btn-link{padding-right:6px;padding-left:6px;font-weight:400;color:#3c4353;text-shadow:none;cursor:pointer;background:0 0;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover,.btn-link[disabled],fieldset[disabled] .btn-link{border-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link:focus,.btn-link:hover{color:#222;background:#f1f1f1;background:rgba(0,0,0,.075)}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#cbd0db;text-decoration:none}.btn-lg{padding:11px 16px;font-size:14px;line-height:18px;border-radius:4px}.btn-mini,.btn-sm{padding:3px 8px;font-size:12px;line-height:18px;border-radius:4px}.btn-mini,.btn-xs{padding:0 5px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.btn-wide{min-width:120px}.btn-limit{max-width:180px;padding-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.btn-limit>.caret{position:absolute;top:14px;right:8px}.btn-circle{border-radius:17px}.btn>.label-icon{top:3px;padding:3px;margin:-2px;background-color:rgba(0,0,0,.2);border-radius:12px}.btn>.label-icon>.icon{font-size:16px;line-height:18px}.btn>.icon+.text{margin-left:5px}.btn.btn-sm.btn-circle{border-radius:12px}.btn.btn-sm>.label-icon{top:2px;width:20px;height:20px;padding:1px;line-height:20px}.btn.btn-sm>.label-icon>.icon{position:relative;top:-1px;display:inline-block;font-size:14px;line-height:18px}.btn-icon-left{position:relative;padding-left:35px;overflow:hidden;text-align:right}.btn-icon-left>.label-icon{position:absolute;left:5px;margin:0}.btn-icon-left>.icon{position:absolute;top:0;bottom:0;left:0;display:block;width:30px;line-height:30px;color:#16a8f8;text-align:center;background:#e9f2fb}.btn-icon-left.btn-sm{padding-left:28px}.btn-icon-left.btn-sm>.label-icon{left:2px}.btn-icon-left.btn-sm>.icon{width:24px;line-height:24px}.btn-icon-right{position:relative;padding-right:35px;text-align:left}.btn-icon-right>.label-icon{position:absolute;right:5px;margin:0}.btn-icon-right.btn-sm{padding-right:28px}.btn-icon-right.btn-sm>.label-icon{right:2px}.btn-icon{min-width:32px;padding-right:0;padding-left:0}.btn-icon.btn-sm{width:24px;min-width:24px;height:24px}.btn-group{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group>.btn-group{float:left}.btn-group>.btn{border-radius:0}.btn-group>.btn:first-child{border-top-left-radius:2px;border-bottom-left-radius:2px}.btn-group>.btn:last-child{border-top-right-radius:2px;border-bottom-right-radius:2px}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.dropdown{float:left;margin-right:10px}.btn-toolbar>.btn-group:last-child,.btn-toolbar>.btn:last-child,.btn-toolbar>.dropdown:last-child{margin-right:0}.btn-toolbar>.divider{float:left;height:20px;margin:7px 5px 4px 10px;border-left:1px solid rgba(0,0,0,.1)}.btn-toolbar .space{float:left;min-height:1px;margin:0 10px 0 10px}.btn-toolbar .input-control{float:left;width:120px}.btn-toolbar .page-title{float:left;line-height:34px}.btn-toolbar .page-title .text{font-size:14px;font-weight:700}.btn-toolbar .page-title .label{top:-2px;margin-right:10px}.btn-toolbar .divider+.page-title{margin-left:15px}.btn-active-line{position:relative;font-weight:700;color:#0c64eb}.btn-active-line:after{position:absolute;right:5px;bottom:1px;left:5px;display:block;content:' ';border-bottom:2px solid #0c64eb}.btn-active-line:hover{color:#0c64eb}.btn-active-text .text{position:relative;top:-1px;display:inline-block;font-weight:700;color:#0c64eb}.btn-active-text .text:after{position:absolute;bottom:-5px;display:block;width:100%;content:' ';border-bottom:2px solid #0c64eb}.angle-btn{position:relative;padding:1px;background:#fff;border:1px solid #cbd0db;border-right:none}.btn-toolbar>.angle-btn{margin-right:8px}.angle-btn:after,.angle-btn:before{position:absolute;top:-1px;right:-8px;display:block;width:0;height:0;content:' ';border-color:transparent transparent transparent #cbd0db;border-style:solid;border-width:17px 0 17px 8px}.angle-btn:after{right:-7px;border-color:transparent transparent transparent #fff;border-width:17px 0 17px 8px}.angle-btn .btn{padding:6px;font-weight:700;background:#fff;border:none;border-radius:4px!important}.angle-btn .btn.btn-limit{padding-right:16px}.angle-btn .btn.btn-limit>.caret{right:4px}.angle-btn+.angle-btn{border-left:none}.angle-btn+.angle-btn>.btn-group:first-child{padding-left:8px}.angle-btn+.angle-btn>.btn-group:first-child:after,.angle-btn+.angle-btn>.btn-group:first-child:before{position:absolute;top:-2px;left:0;display:block;width:0;height:0;content:' ';border-color:transparent transparent transparent #cbd0db;border-style:solid;border-width:17px 0 17px 8px}.angle-btn+.angle-btn>.btn-group:first-child:after{left:-1px;border-color:transparent transparent transparent #fff;border-width:17px 0 17px 8px}.btn-toolbar>.angle-btn.active,.btn-toolbar>.angle-btn:last-child{border-color:#0c64eb}.btn-toolbar>.angle-btn.active .btn,.btn-toolbar>.angle-btn:last-child .btn{color:#0c64eb}.btn-toolbar>.angle-btn.active:after,.btn-toolbar>.angle-btn.active:before,.btn-toolbar>.angle-btn:last-child:after,.btn-toolbar>.angle-btn:last-child:before{border-color:transparent transparent transparent #0c64eb}.btn-toolbar>.angle-btn.active:after,.btn-toolbar>.angle-btn:last-child:after{border-color:transparent transparent transparent #fff}.btn-toolbar>.angle-btn+.angle-btn:last-child>.btn-group:first-child:after,.btn-toolbar>.angle-btn+.angle-btn:last-child>.btn-group:first-child:before,.btn-toolbar>.angle-btn.active+.angle-btn>.btn-group:first-child:after,.btn-toolbar>.angle-btn.active+.angle-btn>.btn-group:first-child:before{border-color:transparent transparent transparent #0c64eb}.btn-toolbar>.angle-btn+.angle-btn:last-child>.btn-group:first-child:after,.btn-toolbar>.angle-btn.active+.angle-btn>.btn-group:first-child:after{border-color:transparent transparent transparent #fff}.btn-toolbar>.angle-btn.active+.angle-btn,.btn-toolbar>.angle-btn.normal{border-color:#cbd0db}.btn-toolbar>.angle-btn.active+.angle-btn .btn,.btn-toolbar>.angle-btn.normal .btn{color:#3c4353}.btn-toolbar>.angle-btn.active+.angle-btn:after,.btn-toolbar>.angle-btn.active+.angle-btn:before,.btn-toolbar>.angle-btn.normal:after,.btn-toolbar>.angle-btn.normal:before{border-color:transparent transparent transparent #cbd0db}.btn-toolbar>.angle-btn.active+.angle-btn:after,.btn-toolbar>.angle-btn.normal:after{border-color:transparent transparent transparent #fff}.btn-toolbar>.angle-btn.active+.angle-btn>.btn-group:first-child:before,.btn-toolbar>.angle-btn.normal>.btn-group:first-child:before{border-color:transparent transparent transparent #cbd0db!important}.nav>li>.btn.btn-primary{color:#fff}.nav>li>.btn.btn-primary:focus,.nav>li>.btn.btn-primary:hover{background:rgba(12,100,235,.8)}.label{position:relative;display:inline-block;padding:3px 5px;font-size:12px;font-weight:400;vertical-align:middle;border-radius:2px}.label+.label{margin-left:4px}.label-pale{background:#bed8f3!important}.label-badge{border-radius:9px}.label-light{color:#3c4353;background-color:#ddd}.label-primary{background:#0c64eb!important}.label-gray{color:#878da0;background:#e8ebef}.label-outline.label-danger{color:#ff5d5d;background:#ffebee;border-color:rgba(255,93,93,.25)}.label-outline.label-light{color:#838a9d;background:#f2f5fb;border-color:#e1e5ee}.label-primary.label-outline{background:#e9f2fb!important;border-color:rgba(12,100,235,.25)}.label-outline.label-success{background:#e8f5e9;border-color:rgba(0,218,136,.25)}.label-dot{position:relative;top:-1px;padding:0;border-radius:50%}.label-dot+.status-text{display:inline-block;margin-left:5px}.label-icon{min-width:18px;padding:0;line-height:18px;border-radius:10px}.label-id{display:inline-block;min-width:30px;padding:0 5px;font-size:12px;line-height:16px;color:#838a9d;text-align:center;vertical-align:middle;background-color:transparent;border:1px solid #838a9d;border-radius:2px}.pri-1,.todo-pri-1{color:#ff5d5d}[class*=" status-"],[class^=status-]{color:#3c4353}.status-changed,.status-delayed,.status-doing,.status-fail,.status-investigate{color:#ff5d5d}.status-changed>.label-dot,.status-delayed>.label-dot,.status-doing>.label-dot,.status-fail>.label-dot,.status-investigate>.label-dot{background-color:#ff5d5d}.status-wait{color:#838a9d}.status-wait>.label-dot{background-color:#7ec5ff}.status-unclosed{color:#838a9d}.status-unclosed>.label-dot{background-color:#0c64eb}.status-done,.status-normal,.status-pass,.status-resolved{color:#43a047}.status-done>.label-dot,.status-normal>.label-dot,.status-pass>.label-dot,.status-resolved>.label-dot{background-color:#00da88}.status-postpone{color:#838a9d}.status-postpone>.label-dot{background-color:#ff5d5d}.status-blocked{position:relative;left:-5px;display:inline-block;padding:0 5px;line-height:20px;color:#3c4353;background:#fff3e0;border-radius:10px}.status-blocked>.label-dot{background-color:#ff9800}.status-pause,.status-suspended{color:#ff9800}.status-pause>.label-dot,.status-suspended>.label-dot{background-color:#ff9800}.status-active.status-bug,.status-draft{color:#8666b8}.status-active.status-bug>.label-dot,.status-draft>.label-dot{background-color:#8666b8}.status-closed,.status-terminate{color:#838a9d}.status-closed>.label-dot,.status-terminate>.label-dot{background-color:#838a9d}.status-cancel{color:#838a9d}.status-cancel>.label-dot{background-color:#cbd0db}.label-pri{display:inline-block;min-width:20px;max-width:67px;height:20px;padding:0 4px;overflow:hidden;line-height:17px;color:#838a9d;text-align:center;text-overflow:ellipsis;white-space:nowrap;vertical-align:middle;border:2px solid #838a9d;border-radius:10px}.label-selector>.label-pri,[class*=label-pri-]{color:#158af1;border-color:#2098ee}.label-pri-1,.label-selector>.label-pri[data-value="1"]{color:#d50000;border-color:#d50000}.label-pri-2,.label-selector>.label-pri[data-value="2"]{color:#ff9800;border-color:#ff9800}.label-pri-3,.label-selector>.label-pri[data-value="3"]{color:#2098ee;border-color:#2098ee}.label-pri-4,.label-selector>.label-pri[data-value="4"]{color:#009688;border-color:#009688}.label-pri-5,.label-selector>.label-pri[data-value="5"]{color:#838a9d;border-color:#838a9d}.label-pri-0,.label-selector>.label-pri.active[data-value="0"]{color:#d5d9df;border-color:#d5d9df}.label-severity{position:relative;display:inline-block;width:24px;height:20px;text-align:center;vertical-align:middle}.label-severity:before{position:absolute;top:-3px;left:0;z-index:0;display:block;font-family:ZentaoIcon;font-size:18px;font-size:24px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;color:inherit;text-transform:none;content:"\e973";speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.label-severity:after{position:absolute;top:7px;left:0;z-index:1;display:block;width:24px;font-size:12px;line-height:12px;text-align:center;content:attr(data-severity)}.label-severity[data-severity],.label-severity[data-value]{color:#ccc}.label-severity[data-severity="0"],.label-severity[data-value="0"]{color:#ccc}.label-severity[data-severity="0"]:after,.label-severity[data-value="0"]:after{display:none}.label-severity[data-severity="1"],.label-severity[data-value="1"]{color:#c62828}.label-severity[data-severity="2"],.label-severity[data-value="2"]{color:#e65100}.label-severity[data-severity="3"],.label-severity[data-value="3"]{color:#ffa000}.label-severity[data-severity="4"],.label-severity[data-value="4"]{color:#fdd835}.label-severity[data-severity="5"],.label-severity[data-value="5"]{color:#8bc34a}.label-severity-custom[data-severity]{color:#d5d9df}.label-severity-custom[data-severity="1"]{color:#c62828}.label-severity-custom[data-severity="2"]{color:#e65100}.label-severity-custom[data-severity="3"]{color:#ffa000}.label-severity-custom[data-severity="4"]{color:#fdd835}.label-severity-custom[data-severity="5"]{color:#cddc39}.label-selector>.label{display:inline-block;min-width:24px;height:24px;padding:0 5px;font-size:14px;line-height:20px;text-align:center;cursor:pointer;background:0 0;border:2px solid #d5d9df;border-radius:15px}.label-selector>.label+.label{margin-left:10px}.label-selector>.label.empty{border-color:transparent}.label-selector>.label.label-severity{font-size:12px;line-height:28px;border-color:transparent}.label-selector>.label.label-severity:before{top:-2px;left:-2px}.label-selector>.label.label-severity:after{display:none}.label-selector>.label.label-severity.active{background:0 0;filter:none;-webkit-filter:none}.checkbox-primary,.radio-primary{position:relative;display:block;vertical-align:middle}.checkbox-primary.inline-block,.radio-primary.inline-block{display:inline-block}.checkbox-primary.inline-block+.inline-block,.radio-primary.inline-block+.inline-block{margin-left:15px}.checkbox-primary>input,.radio-primary>input{position:absolute;top:0;left:0;z-index:3;width:100%;height:100%;margin:0;opacity:0}.checkbox-primary>label,.radio-primary>label{display:block;height:20px;padding-left:30px;margin:0;font-weight:400;line-height:20px;cursor:pointer}.checkbox-primary>label:after,.checkbox-primary>label:before,.radio-primary>label:after,.radio-primary>label:before{position:absolute;top:1px;right:0;left:0;display:block;width:18px;height:18px;line-height:18px;text-align:center;content:' ';border-radius:3px}.checkbox-primary>label:after,.radio-primary>label:after{z-index:1;border:2px solid #eee;border-color:rgba(0,0,0,.15);-webkit-transition:.4s cubic-bezier(.175,.885,.32,1);-o-transition:.4s cubic-bezier(.175,.885,.32,1);transition:.4s cubic-bezier(.175,.885,.32,1);-webkit-transition-property:border,background-color;-o-transition-property:border,background-color;transition-property:border,background-color}.checkbox-primary>label:before,.radio-primary>label:before{top:3px;z-index:2;font-family:ZentaoIcon;font-size:18px;font-size:14px;font-style:normal;font-weight:400;font-weight:900;font-variant:normal;line-height:1;text-transform:none;content:"\e5ca";opacity:0;-webkit-transition:.2s cubic-bezier(.175,.885,.32,1);-o-transition:.2s cubic-bezier(.175,.885,.32,1);transition:.2s cubic-bezier(.175,.885,.32,1);-webkit-transition-property:opacity,-webkit-transform;-o-transition-property:opacity,-o-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform,-o-transform;-webkit-transform:scale(0);-ms-transform:scale(0);-o-transform:scale(0);transform:scale(0);speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.checkbox-primary.checked>label:after,.checkbox-primary>input:checked+label:after,.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{background-color:#00da88;border-color:#00da88;border-width:4px}.checkbox-primary.checked>label:before,.checkbox-primary>input:checked+label:before,.radio-primary.checked>label:before,.radio-primary>input:checked+label:before{color:#fff;opacity:1;-webkit-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}.checkbox-primary.focus>label:after,.checkbox-primary>input:focus+label:after,.radio-primary.focus>label:after,.radio-primary>input:focus+label:after{border-color:#00da88;-webkit-box-shadow:0 0 0 3px rgba(0,218,136,.2);box-shadow:0 0 0 3px rgba(0,218,136,.2)}.checkbox-primary:hover>label:after,.radio-primary:hover>label:after{border-color:#00da88}.checkbox-primary.checkbox-right>label,.radio-primary.checkbox-right>label{padding:0 30px 0 0}.checkbox-primary.checkbox-right>label:after,.checkbox-primary.checkbox-right>label:before,.radio-primary.checkbox-right>label:after,.radio-primary.checkbox-right>label:before{right:0;left:auto}.checkbox-primary input:disabled+label:after,.checkbox-primary.disabled>label:after,.radio-primary input:disabled+label:after,.radio-primary.disabled>label:after{background-color:#e5e5e5!important;border-color:#bbb!important}.checkbox-primary input:disabled:checked+label:after,.checkbox-primary.checked.disabled>label:after,.radio-primary input:disabled:checked+label:after,.radio-primary.checked.disabled>label:after{background-color:#bbb!important}.radio-primary>label:after{border-radius:50%}.radio-primary>label:before{top:7px;left:6px;width:6px;height:6px;content:' ';border:none;border-radius:50%}.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{background-color:transparent;border-color:#00da88;border-width:2px}.radio-primary.checked>label:before,.radio-primary>input:checked+label:before{background-color:#00da88}.radio-primary input:disabled:checked+label:after,.radio-primary.checked.disabled>label:after{background-color:transparent;border-color:#bbb}.radio-primary input:disabled:checked+label:before,.radio-primary.checked.disabled>label:before{background-color:#bbb}.panel{position:relative;margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045);box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045)}.panel-body{padding:20px}.panel-body.has-table{padding:10px}.panel-body.has-table .table{margin-bottom:0;table-layout:fixed}.panel-heading{padding:12px 48px 12px 20px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading+.panel-body{padding-top:0}.panel-title{font-size:14px;font-weight:700;line-height:20px}.panel-title .label{top:-1px}.panel-actions{position:absolute;top:0;right:0;padding:7px 8px}.panel:hover .panel-actions{z-index:10}.panel-actions>li>a{display:inline-block;min-width:30px;padding:0 5px;line-height:30px;color:#a6aab8}.panel-actions>li>a:hover{color:#3c4353;text-decoration:initial;background-color:#f1f1f1}.panel-actions .btn-icon{color:#a6aab8}.panel-actions .btn.text-primary{color:#0c64eb}.panel .empty-tip{padding:30px 10px 50px;font-size:14px;color:#838a9d;text-align:center}.progress-text-left{position:relative;margin:7px 0;margin-left:35px;overflow:visible}.progress-text-left .progress-text{position:absolute;top:-7px;left:-35px;display:block;width:35px;height:20px;padding-right:5px;line-height:20px;color:#838a9d;text-align:right}.chart-color{width:20px}.chart-color-dot{display:inline-block;width:10px;height:10px;border-radius:50%}.chart-row{margin-top:10px}.chart-row+.chart-row{padding-top:10px;border-top:1px solid #eee}.chart-wrapper{padding:10px 5px;background:#eee}.chart-wrapper>h4{margin:5px 0 10px}.table-wrapper{max-height:250px;overflow:auto}.table-wrapper .table{margin:0}.progress-pie{position:relative}.progress-pie .progress-info{position:absolute;top:0;left:0;width:100%;height:100%;padding-top:25px;text-align:center}.progress-pie .progress-info>small{display:block;line-height:14px;color:#a6aab8}.progress-pie .progress-info>strong{display:block;font-size:36px;line-height:40px}.progress-pie .progress-info>strong>small{font-size:20px}.progress-pie-120 .progress-info{padding-top:30px}.progress-pie-120 .progress-info>small{line-height:18px}.progress-pie-50 .progress-info{padding-top:4px}.progress-pie-50 .progress-info>strong{font-size:20px;font-weight:400}.progress-pie-50 .progress-info>strong>small{font-size:14px}.progress-pie[data-value="100"] .progress-info>strong{-webkit-transform:scale(.7);-ms-transform:scale(.7);-o-transform:scale(.7);transform:scale(.7)}.status-bars{display:table;width:100%;height:140px;padding:5px;padding-top:50px;margin:0;overflow:hidden}.status-bars>li{position:relative;display:table-cell;text-align:center;vertical-align:bottom}.status-bars .bar{position:absolute;bottom:20px;left:50%;display:block;width:10px;margin-left:-5px;background:#0c64eb;border-radius:5px 5px 0 0}.status-bars .bar:after{position:absolute;right:-50px;bottom:0;left:-50px;display:block;height:1px;content:' ';background:#eee}.status-bars .title{font-size:12px;font-weight:400;color:#a6a8b6}.status-bars .value{position:relative;top:-20px;left:-20px;display:inline-block;width:50px;font-size:16px;font-weight:700;text-align:center}.status-bars-h{display:block;padding-right:50px;padding-left:60px;list-style:none}.status-bars-h>li{position:relative;height:40px;border-left:1px solid #eee}.status-bars-h .bar{position:relative;top:15px;display:block;height:10px;line-height:20px;background:#0c64eb;border-radius:0 5px 5px 0}.status-bars-h .title{position:absolute;top:-5px;left:-60px;width:60px;padding-right:10px;font-size:12px;color:#a6a8b6;text-align:right}.status-bars-h .value{position:absolute;top:-5px;right:-50px;display:block;width:40px;font-size:14px;font-weight:700;text-align:left;white-space:nowrap}.messager{border-radius:4px;-webkit-box-shadow:0 4px 16px rgba(0,0,0,.2),0 2px 8px rgba(0,0,0,.1);box-shadow:0 4px 16px rgba(0,0,0,.2),0 2px 8px rgba(0,0,0,.1)}.messager-content{padding:18px 20px;font-size:18px;line-height:30px}.messager-content>.icon{font-size:28px;line-height:30px}.messager-actions{vertical-align:middle}.messagger-zt{color:#3c4353;background-color:#fff}.messagger-zt .messager-content>.icon{color:#0c64eb}.messagger-zt .messager-actions>.action{color:#838a9d}.messagger-zt.messager-success .messager-content>.icon{color:#00da88}.messagger-zt.messager-danger .messager-content>.icon{color:#ff5d5d}.messagger-zt.messager-warning .messager-content>.icon{color:#ff9800}.messagger-zt.messager-info .messager-content>.icon{color:#2196f3}.tree{padding-left:0;overflow:hidden}.tree ul{position:relative;display:none;padding-left:0}.tree li{position:relative;padding:2px 0 2px 15px;list-style:none}.tree li.heading{padding-left:5px;color:#3c4353}.tree li>a{display:block;max-width:90%;padding:2px 6px;color:#3c4353;word-break:break-all}.tree li>a:hover{color:#3c4353}.tree li>a.tree-toggle:hover{background:0 0}.tree li.active>a{position:relative;font-weight:700;color:#0c64eb}.tree li>.list-toggle{position:absolute;top:1px;left:1px;z-index:10;width:20px;font-size:14px;line-height:22px;color:#cbd0db;text-align:center;cursor:pointer;-webkit-transition:all .2s;-o-transition:all .2s;transition:all .2s}.tree li>.list-toggle:before{content:"\f0da"}.tree li>.list-toggle:active,.tree li>.list-toggle:hover{color:#0c64eb}.tree li.has-active-item>.list-toggle{color:#3c4353}.tree li.has-list.open>ul{display:block}.tree li.has-list.open>.list-toggle{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.tree li.has-list.open:before{position:absolute;top:16px;bottom:-5px;left:10px;display:block;content:' ';border-left:1px solid #d8d8d8}.tree-actions{display:inline-block;margin-left:5px;vertical-align:middle}.tree-actions a{display:inline-block;margin-left:5px;font-size:13px;opacity:.6}.tree-actions a:hover{opacity:1}.tree li>.module-name{color:#3c4353;vertical-align:middle}.tree li>.module-name:hover{background-color:#f0f2f5}.tree li>.module-name:hover>a{color:#3c4353}.treemap-node-fold-icon:before{position:relative;left:-4px;min-width:18px}.dropdown-menu{padding:5px 0;border-color:rgba(0,0,0,.1)}.dropdown-menu>li{padding:0 10px}.dropdown-menu>li>a{padding:2px 10px;margin:5px 0;border-radius:3px}.dropdown-menu>li>a>.icon{position:relative;left:-5px;opacity:.5}.dropdown-menu>li.active>a,.dropdown-menu>li.selected>a{position:relative;color:#fff;background-color:#16a8f8}.dropdown-menu>li.selected>a:after{position:absolute;top:2px;right:4px;display:block;font-family:ZentaoIcon;font-size:18px;font-size:14px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;line-height:20px;text-transform:none;content:"\e5ca";speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.dropdown-menu>li.divider{margin:10px}.dropdown-submenu>a:after{margin-right:-5px}.dropdown-submenu>.dropdown-menu.pull-left{margin-left:-1px}.dropdown-submenu:focus>a,.dropdown-submenu:hover>a{color:#3c4353;background-color:#e9f2fb}.dropdown-submenu:hover>a:after{border-left-color:#0c64eb}.dropdown-submenu>a:hover:after{border-left-color:#fff}.pager .btn{padding:3px 10px}.pager .btn .caret{opacity:.7}.pager>li>.pager-label{padding:2px;line-height:20px}.pager>li>.pager-item{min-width:20px;padding:1px;margin:2px 0;font-size:16px;line-height:20px;text-align:center;background:0 0;border-color:transparent}.pager>li>.pager-item:hover{background-color:rgba(0,0,0,.1)}.pager>li>.pager-item>.icon{position:relative;top:-1px}.pager>li>.btn:hover,.pager>li>a:hover{background:rgba(0,0,0,.1)}.pager>li.disabled>a.pager-item{background:0 0;border-color:transparent;opacity:.5}.pager>li.active>a{background-color:#16a8f8}.pager>li .btn-group .btn{padding:1px;margin:2px 0;border-radius:4px}.pager .dropdown-menu{width:200px}.pager .dropdown-menu>li{float:left;width:33.333333%}.modal-dialog{width:900px;max-width:1360px;border:none;border-radius:0;-webkit-box-shadow:0 0 20px 0 rgba(0,0,0,.25);box-shadow:0 0 20px 0 rgba(0,0,0,.25)}.modal-dialog.modal-md{width:700px}.modal-dialog.modal-xs{width:400px}.modal-dialog.modal-sm{width:500px}.modal-dialog.modal-lg{width:1200px}.modal-dialog.modal-fullscreen{position:fixed;max-width:initial}.modal-header{padding:20px 0;margin:0 20px}.modal-header>.close{color:#838a9d;text-shadow:0 1px 0 rgba(255,255,255,.85);opacity:1}.modal-header>.close:hover{color:#222}.modal-footer{padding:20px 0;margin:0 20px}.modal-title{font-size:16px;font-weight:400;line-height:20px}.modal-actions{position:absolute;top:16px;right:16px}.modal-actions .divider{position:relative;top:5px;display:inline-block;width:0;height:20px;margin:0 10px;border-left:#eee 1px solid}.modal-actions>.dropdown{display:inline-block}.modal-body{padding:20px}.modal-iframe .modal-body>iframe{border-radius:0}.modal.fade .modal-dialog{-webkit-transform:translate(0,-3%);-ms-transform:translate(0,-3%);-o-transform:translate(0,-3%);transform:translate(0,-3%)}.modal.fade.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-simple .modal-footer{padding-top:0;border-top:none}.modal-iframe .modal-header{position:relative;z-index:10;min-height:0;padding:0;border:none}.modal-iframe .modal-title{display:none}.modal-iframe .modal-header .close{position:absolute;top:12px;right:10px;font-size:32px;font-weight:200}.modal-iframe .modal-dialog{overflow:hidden}.modal-inverse .modal-header>.close{color:rgba(255,255,255,.7);text-shadow:none}.modal-inverse .modal-header>.close:hover{color:#fff}.modal-scroll-inside>.modal-dialog{max-height:100%}.hide-modal-close .modal-iframe .modal-header .close{display:none}.tile{text-align:center}.tile-title{line-height:20px;color:#3c4353}.tile-amount{font-size:32px;font-weight:700;line-height:56px}.timeline>li{position:relative;list-style:none}.timeline>li:before,.timeline>li>a:after,.timeline>li>div:after{position:absolute;left:-20px;display:block;width:15px;height:15px;content:' ';border-radius:50%}.timeline>li:before{top:12px;left:-16px;z-index:3;width:7px;height:7px;background-color:#cbd0db;border:none;border:1px solid #cbd0db}.timeline>li>a:after,.timeline>li>div:after{top:11px;left:-17px;z-index:3;width:9px;height:9px;background-color:#0c64eb;border-radius:50%;opacity:0}.timeline>li+li:after{position:absolute;top:-12px;bottom:20px;left:-13px;z-index:1;display:block;content:' ';border-left:1px solid #eee}.timeline>li.active>a:after,.timeline>li.active>div:after{opacity:1}.timeline>li.active:before{top:8px;left:-20px;width:15px;height:15px;background-color:rgba(12,100,235,.2);border:none}.timeline>li>a,.timeline>li>div{display:block;padding:5px;line-height:20px}.timeline>li.active>a{color:#3c4353}.timeline-tag{position:absolute;top:5px;left:-115px;font-size:12px}.timeline-tag-left{padding-left:115px}.timeline-sm{font-size:12px}.timeline-sm>li:before,.timeline-sm>li>a:after,.timeline-sm>li>div:after{top:10px;left:-20px;width:11px;height:11px}.timeline-sm>li.active:before,.timeline-sm>li:before{top:10px;left:-18px;width:11px;height:11px;background:0 0;border:1px solid #eee}.timeline-sm>li>a,.timeline-sm>li>div{line-height:20px}.timeline-sm>li>a:after,.timeline-sm>li>div:after{top:13px;left:-15px;width:5px;height:5px}.form-control{-webkit-box-shadow:none;box-shadow:none}.form-horizontal .form-group>label{padding-right:0}.form-actions{margin-top:20px;margin-bottom:0}.form-actions .btn{margin-right:10px}form label{font-weight:400;color:#3c4353}.form-group .btn+.btn{margin-left:5px}.table-form{margin-bottom:0;table-layout:fixed}.table-form>thead>tr>th.required:after{position:relative;top:3px;right:auto;left:4px;display:inline-block;vertical-align:middle}.table-form>tbody>tr>td,.table-form>tbody>tr>th,.table-form>tfoot>tr>td,.table-form>thead>tr>th{padding:7px;vertical-align:middle;border-bottom:none}.table-form>tfoot>tr>td{padding:20px 7px 10px}.table-form>tbody>tr>th{width:100px;font-weight:700;text-align:right}.table-form .input-group{width:100%}.chosen-container-single .chosen-single{position:relative}.chosen-container-single .chosen-single>span{height:20px;line-height:20px;white-space:normal}.chosen-container-single .chosen-single div b{position:relative;top:1px;color:#cbd0db}.chosen-container-single .chosen-search:before{top:8px;right:15px}.chosen-container-multi .chosen-choices li.search-choice{font-size:13px;background:#eee;border-color:#cbd0db;-webkit-box-shadow:none;box-shadow:none}.chosen-container-single .chosen-search input[type=text]{height:30px;padding:3px 25px 3px 5px}.chosen-container-single .chosen-search{padding:3px 10px 0}.chosen-container-single .chosen-single{overflow:visible}.chosen-container-single .chosen-single>.chosen-search{top:-2px;right:-1px;bottom:-1px;left:-1px;display:none;height:auto;padding:0;opacity:0}.chosen-container-single .chosen-single>.chosen-search>input{height:31px;padding:5px 26px 5px 8px;font-size:inherit;line-height:20px}.chosen-container-single .chosen-single>.chosen-search:before{top:7px;right:8px}.chosen-container .chosen-results{padding:10px}.chosen-container .chosen-results>li{border-radius:4px}.chosen-container .chosen-results li.highlighted em{color:#fff}.table-responsive .chosen-container .chosen-results{max-height:200px}.datetimepicker{padding:10px}.datetimepicker td.day.today{background-color:#f77}.datetimepicker td.day.active{background-color:#16a8f8}.datetimepicker tfoot th,.datetimepicker thead th{color:#838a9d}.input-control .colorpicker{top:0;z-index:auto;opacity:1}.input-control .colorpicker .btn{padding:5px}.input-control .input-control-icon-right.btn{top:0}.colorpicker .dropdown-menu{min-width:232px;padding:5px 10px 10px 10px}.colorpicker .dropdown-menu>li{display:block;float:left;padding:5px}.colorpicker .dropdown-menu>li.heading{width:100%;margin-bottom:5px;font-size:16px;font-weight:700;text-align:left}.colorpicker .dropdown-menu>li.heading>.icon-close{position:relative;top:4px;float:right;cursor:pointer;opacity:.6}.colorpicker .dropdown-menu>li>a{position:relative;display:block;width:100%;height:100%;padding:0;margin:0;font-family:ZentaoIcon;font-size:18px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;text-align:center;text-transform:none;border:1px solid transparent;border-radius:50%;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.colorpicker .dropdown-menu>li>a:before{position:absolute;top:0;display:block;width:100%;height:20px;line-height:18px}.colorpicker .dropdown-menu>li>a:hover{-webkit-box-shadow:0 1px 4px rgba(0,0,0,.25);box-shadow:0 1px 4px rgba(0,0,0,.25)}.colorpicker .dropdown-menu>li>a.active:before{font-size:14px;content:"\e5ca"}.colorpicker .dropdown-menu>li>a.empty{color:#666;background:#fff}.colorpicker .dropdown-menu>li>a.empty:before{content:"\e90d"}.colorpicker .btn{position:relative}.colorpicker .btn .color-bar{position:absolute;right:5px;bottom:3px;left:5px;height:3px}.colorpicker .btn .color-bar[style*='background: ']+.ic{position:relative;top:-2px}.colorpicker .btn .ic{color:#cbd0db}.colorpicker .btn:hover .ic{color:#838a9d}.input-group .colorpicker{z-index:3}.input-group .chosen-container{display:table-cell}.input-group-addon{border-right-width:0;border-left-width:0}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin:0}.input-group-cell{display:table-cell;width:1%;padding:0 12px;white-space:nowrap;vertical-align:middle}.ke-container{border-color:#dcdcdc!important;border-radius:2px!important}.ke-container.focus{border-color:#0c64eb!important}.ke-toolbar{border-color:#dcdcdc!important}.required:after{top:6px;right:-10px;font-size:20px}td.required:after{top:12px;right:-5px}.input-group>.chosen-container.required:after,.input-group>.input-control.required:after{top:1px;right:1px;z-index:2}.input-group.required .required:after{display:none}.file-input{position:relative}.file-input .input-group{width:auto}.file-input .input-group>.input-group-cell:first-child{padding-right:0;padding-left:7px}.file-input input[type=file]{position:absolute;width:0;height:0;opacity:0}.file-input .file-title{display:inline-block;max-width:400px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:middle}.file-input .file-editbox{min-width:200px;max-width:100%}.file-input .file-size{display:inline-block;vertical-align:middle}.edit .file-input-empty,.file-input-edit,.file-input-normal,.normal .file-input-empty{display:none}.edit .file-input-edit,.normal .file-input-normal{display:block}.edit .file-input-edit.input-group,.normal .file-input-normal.input-group{display:table}.edit .file-input-normal{display:none!important}.file-input-normal>.input-group-btn{width:auto}.input-group .chosen-container-active .chosen-choices{border-color:#0c64eb!important}.input-group .chosen-container{min-width:100px}.input-group .input-group-btn .btn>.icon{line-height:17px}.os-mac select.form-control{-webkit-appearance:none;background-image:url(data:image/gif;base64,R0lGODlhCQAFAIAAAMvQ2////yH5BAEAAAEALAAAAAAJAAUAAAIKhH+BGYoNGWxgFgA7);background-image:url(data:image/gif;base64,R0lGODlhBwAEAIAAAMvQ2////yH5BAEAAAEALAAAAAAHAAQAAAIIhA+BGWoNWSgAOw==);background-repeat:no-repeat;background-position:right 5px top 12px;-moz-appearance:none}input::-webkit-contacts-auto-fill-button{position:absolute;right:0;display:none!important;pointer-events:none;visibility:hidden}.chosen-choices.has-error,.chosen-single.has-error,.form-control.has-error{border-color:#ff5d5d!important;-webkit-box-shadow:0 0 6px #ffc3c3!important;box-shadow:0 0 6px #ffc3c3!important}.popover-success.popover-form-result{font-weight:700;color:#fff;background:#00da88}.popover-success.popover-form-result.popover.right .arrow:after{border-right-color:#00da88}#mainHeader{height:50px;color:#fff;background:#1183fb -webkit-gradient(linear,right top,left top,from(#0a48d1),to(#1183fb));background:#1183fb -webkit-linear-gradient(right,#0a48d1 0,#1183fb 100%);background:#1183fb -o-linear-gradient(right,#0a48d1 0,#1183fb 100%);background:#1183fb linear-gradient(-90deg,#0a48d1 0,#1183fb 100%);background-color:#1183fb;border-top-color:#0c64eb;border-bottom-color:#e9f2fb}#mainHeader>.container{min-width:1200px;padding:0}#heading{position:absolute;top:10px;left:20px}@media (min-width:1400px){#heading{left:40px}}#heading h1{float:left;max-width:250px;margin:0;overflow:hidden;font-size:20px;font-weight:400;line-height:30px;text-overflow:ellipsis;white-space:nowrap}#heading h1 a{color:inherit;text-decoration:inherit}#heading h1.long-name{position:relative;top:-5px;display:table-cell;font-size:16px;line-height:20px;word-break:break-all;white-space:normal}#heading .btn{display:block;float:left;height:20px;padding:1px 5px;margin:0;margin:5px 0 0 10px;font-size:12px;font-weight:lighter;line-height:18px;background-color:rgba(255,255,255,.2);border:none}#heading .btn:hover{background-color:rgba(0,0,0,.1)}#navbar{margin:0 auto;font-size:15px;text-align:center}#navbar .nav{display:inline-block}#navbar .nav>li>a{padding:10px 15px;line-height:30px;color:#fff;border-radius:0;opacity:.9}@media (max-width:992px){#navbar .nav>li>a{padding:10px}}#navbar .nav>li>a:focus,#navbar .nav>li>a:hover{background:rgba(0,0,0,.15);opacity:1}#navbar .nav>li.active>a{font-weight:700;background:rgba(0,0,0,.1);opacity:1}#navbar .nav>li.divider{display:block;width:2px;height:20px;margin:15px;background:rgba(255,255,255,.4)}#navbar .nav>li.divider:last-child{display:none}#toolbar{position:absolute;top:12px;right:20px;font-size:12px;color:#fff}@media (min-width:1400px){#toolbar{right:40px}}#extraNav{text-align:right}#extraNav>li{display:inline-block;float:none;text-align:left}#extraNav>li>a{display:block;padding:0;color:#fff;opacity:.75}#extraNav>li>a:hover{text-decoration:unset;background-color:rgba(0,0,0,.1);opacity:1}#extraNav>li.open>a{background-color:rgba(0,0,0,.1)}#extraNav>li+li{margin-left:10px}#searchbox{position:relative;float:left;width:150px}#searchbox .input-group-btn .btn{position:relative;padding:1px 4px;font-size:12px;line-height:20px;color:#fff;background-color:rgba(255,255,255,.15);border-right:none;border-radius:2px}#searchbox .input-group-btn .btn:after{position:absolute;top:3px;right:0;bottom:3px;display:block;width:1px;content:' ';background-color:rgba(255,255,255,.15)}#searchbox .input-group-btn .btn:hover{background-color:rgba(255,255,255,.25)}#searchGo{position:absolute;top:0;right:-1px;z-index:9;min-width:24px;height:24px;padding:2px 3px;font-size:12px;line-height:20px;color:#fff;background-color:#6a9afd;border-radius:2px}#searchGo:hover{color:#fff!important;background-color:#0c64eb}#searchInput{height:24px;padding:2px 30px 2px 5px;color:#fff;text-align:left;background:rgba(255,255,255,.15);border-color:transparent;border-radius:0 12px 12px 0;-webkit-transition:background .2s,border .2s;-o-transition:background .2s,border .2s;transition:background .2s,border .2s}#searchInput:hover{background:rgba(255,255,255,.25)}#searchInput:focus{color:#333;background:#fff}#searchInput::-webkit-input-placeholder{font-size:12px;color:#fff;color:rgba(255,255,255,.5)}#searchInput::-moz-placeholder{font-size:12px;color:#fff;color:rgba(255,255,255,.5)}#searchInput::placeholder{font-size:12px;color:#fff;color:rgba(255,255,255,.5)}#searchInput:focus::-webkit-input-placeholder{color:#838a9d}#searchInput:focus::-moz-placeholder{color:#838a9d}#searchInput:focus::placeholder{color:#838a9d}#searchTypeMenu{min-width:220px}#searchTypeMenu>li{float:left;width:50%}#searchTypeMenu>li>a{margin:4px 0}#userNav{float:right;margin:0 -6px 0 10px}#userNav .avatar{display:inline-block;vertical-align:middle}#userNav>li>a{padding:2px 6px;margin-left:3px;line-height:20px;color:#fff;opacity:.9}#userNav>li>a .user-name{max-width:100px;overflow:hidden;font-size:15px;text-overflow:ellipsis;white-space:nowrap}#userNav>li>a:hover{background-color:rgba(0,0,0,.1);opacity:1}#userNav>li>a span{display:inline-block;vertical-align:middle}#userNav>li.open>a{background-color:rgba(0,0,0,.1)}#userNav>li.has-new-items>a{position:relative}#userNav>li.has-new-items>a:before{position:absolute;top:3px;right:-1px;display:block;width:4px;height:4px;content:' ';background-color:#ff5d5d;border-radius:50%}#userNav .dropdown-menu{min-width:150px}#userNav .dropdown-menu>li>a>.icon{position:absolute;top:10px;right:5px;display:block;width:20px;height:20px;line-height:20px;text-align:center}#userNav .user-profile-item>a{position:relative;padding-left:45px}#userNav .user-profile-item .avatar{position:absolute;top:6px;left:5px}#userNav .user-profile-name{font-size:16px}#userNav .user-profile-role{font-size:12px;color:#a9abb8}#userNav .no-role .user-profile-role{display:none}#userNav .no-role .user-profile-name{line-height:40px}#subHeader{min-height:50px;background:#fff}#subHeader>.container{padding:0 20px}@media (min-width:1400px){#subHeader>.container{padding:0 40px}}#pageNav{position:absolute;top:8px;left:0;left:20px}@media (min-width:1400px){#pageNav{left:40px}}#subNavbar{margin-top:5px;font-size:14px;text-align:center}#subNavbar .nav{display:inline-block}#subNavbar .nav>li>a{padding:8px 12px;line-height:24px;color:#3c4353}#subNavbar .nav>li>a:hover{color:#3c4353;background-color:rgba(0,0,0,.075)}#subNavbar .nav>li.active>a{font-weight:700;color:#0c64eb}#subNavbar .nav>li.divider{display:block;width:2px;height:20px;margin:9px 5px;background-color:rgba(0,0,0,.05)}#subNavbar .dropdown-menu{text-align:left}#pageActions{position:absolute;top:9px;right:20px}@media (min-width:1400px){#pageActions{right:40px}}.cell{padding:10px;background-color:#fff;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045);box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045)}.cell+.cell{margin-top:10px}.cell>.panel{margin:0;-webkit-box-shadow:none;box-shadow:none}.cell>.panel>.panel-heading{padding:5px 5px 10px}.cell>.panel>.panel-heading .panel-actions{padding:0}.cell>.panel>.panel-body{padding:5px}.cell>.table{margin:0}#main{padding:20px 0}#main>.container{padding:0 20px}@media (min-width:1400px){#main>.container{padding:0 40px}}#header,#header+#main{min-width:1200px}#mainMenu{margin:-10px 0 8px}.main-content{padding:20px;background-color:#fff;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045);box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045)}@media (min-width:1400px){.main-content>.center-block{max-width:1350px;padding:20px;border:1px solid #eee}.main-content>.center-block .main-header{background-color:#f1f1f1}}.main-content>h2{margin:0 0 20px}.main-content .cell{-webkit-box-shadow:none;box-shadow:none}.main-header{padding:5px 20px;border-bottom:1px solid #eee}.main-header:after,.main-header:before{display:table;content:" "}.main-header:after{clear:both}.main-header>h2{display:block;float:left;margin:0 10px 0 0;font-size:14px;line-height:34px}.main-header>h2 .label-id{margin-right:5px}.main-header>h2 small{font-size:14px;font-weight:400}.main-content .main-header{margin:-20px -20px 10px}.main-header .label{top:-1px}.main-row{display:table;width:100%;table-layout:fixed}.main-row>*{display:table-cell;vertical-align:top}@media (max-width:720px){.main-row{display:block}.main-row>*{display:block;width:100%}.main-row .side-col{width:100%;padding:0}.main-row .main-col+.side-col,.main-row .side-col+.main-col{margin-top:10px}}.main-row.hide-side .side-col{display:none}@media (min-width:720px){.main-content>.center-block .main-form{padding-right:20px}}#main .side-col .tabs{padding:5px}#main .side-col .nav-tabs{margin:0 5px 5px 5px;border-bottom:1px solid #ddd}#main .side-col .nav-tabs>li{margin:0}#main .side-col .nav-tabs>li+li{margin-left:10px}#main .side-col .nav-tabs>li>a{position:relative;padding:8px 5px;border:none;border-radius:2px!important}#main .side-col .nav-tabs>li.active>a{font-weight:700;color:#3c4353}#main .side-col .nav-tabs>li.active>a:before{position:absolute;right:0;bottom:-1px;left:0;display:block;height:2px;content:' ';background:#0c64eb}#main .side-col .tab-content .tab-pane table{border:none}.main-actions .btn-toolbar{display:inline-block;padding:4px 15px;color:#fff;pointer-events:auto;background:#717171;background-color:rgba(90,90,90,.85);border-radius:4px}.main-actions .btn-toolbar .divider{margin-right:15px;margin-left:15px;border-color:rgba(255,255,255,.1)}.main-actions .btn-toolbar .btn{padding-right:10px;padding-left:10px;margin-right:0;color:#fff;background-color:transparent;border:none}.main-actions .btn-toolbar .btn+.btn{margin-left:10px}.main-actions .btn-toolbar .btn:focus,.main-actions .btn-toolbar .btn:hover{background-color:rgba(255,255,255,.2)}.main-actions .btn-toolbar .btn.btn-icon{min-width:32px;padding-right:0;padding-left:0}.main-actions .btn-toolbar .btn+.btn-group{margin-right:0;margin-left:10px}#mainContent .main-col>.main-actions{padding:30px 0 0 0;text-align:center}#mainContent .main-col>.main-actions>.btn-toolbar{visibility:visible;opacity:1;-webkit-transition:opacity .2s;-o-transition:opacity .2s;transition:opacity .2s}#mainActions{position:fixed;top:0;right:0;bottom:0;left:0;text-align:center;pointer-events:none}#mainActions .btn-toolbar{position:relative;top:-90px}#mainActions .dropdown-menu{text-align:left}#mainActions>.container{height:100%}.main-actions-holder{display:none}.main-actions-fixed .main-actions-holder{display:block}.main-actions-fixed #mainContent .main-col>.main-actions{position:fixed;bottom:50px}.main-actions-fixed.body-modal #mainContent .main-col>.main-actions{bottom:20px}#nextPage,#prevPage{position:absolute;top:50%;left:-10px;width:40px;height:60px;padding:10px 0;margin-top:-30px;line-height:40px;color:#fff;text-align:center;pointer-events:auto;background:#717171;background-color:rgba(90,90,90,.85);-webkit-box-shadow:0 2px 15px 2px rgba(0,0,0,.05);box-shadow:0 2px 15px 2px rgba(0,0,0,.05)}#nextPage:hover,#prevPage:hover{-webkit-box-shadow:0 2px 15px 2px rgba(0,0,0,.15);box-shadow:0 2px 15px 2px rgba(0,0,0,.15)}#nextPage>.icon,#prevPage>.icon{display:block;font-size:36px;line-height:36px}#nextPage{right:-10px;left:auto}@media (max-width:1800px){#prevPage{left:-3px}#nextPage{right:-3px}}#sidebarHeader{position:relative;float:left;width:180px;height:34px;padding-right:20px;margin-right:20px;background:#fff;border-left:4px solid #0c64eb;border-radius:4px 2px 2px 4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045);box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045)}#sidebarHeader:after{position:absolute;top:-1px;right:-8px;display:block;width:0;height:0;content:' ';border-color:transparent transparent transparent #fff;border-style:solid;border-width:18px 0 18px 8px}#sidebarHeader .title{padding:0 5px;overflow:hidden;font-size:14px;font-weight:700;line-height:32px;color:#0c64eb;text-align:center;text-overflow:ellipsis;white-space:nowrap}#sidebarHeader .title>a{position:absolute;top:0;right:0;width:20px;opacity:.5}#sidebarHeader .title>a:hover{opacity:1}#sidebar{position:relative;-webkit-transition:width .2s,padding .2s;-o-transition:width .2s,padding .2s;transition:width .2s,padding .2s}#sidebar>.sidebar-toggle{position:absolute;top:0;right:5px;bottom:0;width:10px;cursor:pointer;background:0 0;border-radius:5px;-webkit-transition:background-color .2s;-o-transition:background-color .2s;transition:background-color .2s}#sidebar>.sidebar-toggle>.icon{position:absolute;top:50%;left:-1px;width:12px;height:30px;margin-top:-10px;line-height:30px;color:#fff;text-align:center;background:#79cdfb;border-radius:6px}#sidebar>.sidebar-toggle>.icon:before{position:relative;left:-3px}#sidebar>.sidebar-toggle:before{position:absolute;top:0;right:-5px;bottom:0;left:-5px;display:block;content:' '}#sidebar>.sidebar-toggle:hover{background:rgba(0,0,0,.075)}#sidebar>.cell{position:relative;left:0;width:180px;-webkit-transition:left .2s,opacity .2s;-o-transition:left .2s,opacity .2s;transition:left .2s,opacity .2s}#sidebar.no-animate>.cell{display:none;-webkit-transition:none;-o-transition:none;transition:none}.hide-sidebar #sidebar>.cell{position:absolute;left:-200px;opacity:0}.hide-sidebar #sidebar{position:relative;width:0;padding:0}.hide-sidebar #sidebar>.sidebar-toggle>.icon:before{content:"\e315"}@media (max-width:720px){#sidebar>.cell{width:100%}}#queryBox{max-height:0;padding:0;overflow:hidden;-webkit-transition:cubic-bezier(.175,.885,.32,1) .2s;-o-transition:cubic-bezier(.175,.885,.32,1) .2s;transition:cubic-bezier(.175,.885,.32,1) .2s;-webkit-transition-property:padding,max-height,margin;-o-transition-property:padding,max-height,margin;transition-property:padding,max-height,margin}#queryBox>form{visibility:hidden;-webkit-transition:visibility .2s .2s;-o-transition:visibility .2s .2s;transition:visibility .2s .2s}#queryBox.loading{height:50px}#queryBox.show{min-height:110px;max-height:300px;margin-bottom:10px;overflow:visible}#queryBox.show>form{visibility:visible}#queryBox.divider{border-bottom:1px solid #eee}#main .querybox-toggle.querybox-opened{position:relative;color:#0c64eb;background:0 0;border:none}#main .querybox-toggle.querybox-opened:before{position:absolute;bottom:-14px;left:50%;width:0;height:0;content:' ';border-color:transparent transparent #fff transparent;border-style:solid;border-width:0 10px 10px 10px}#contentNav{padding:5px;background:#fff;border-bottom:1px solid #eee}#contentNav .nav>li>a{position:relative;padding:6px 10px;color:#838a9d}#contentNav .nav>li.active>a{font-weight:700;color:#0c64eb}#contentNav .nav>li.active>a:before{position:absolute;right:10px;bottom:3px;left:10px;display:block;height:2px;content:' ';background:#0c64eb}.body-modal{padding-bottom:0}.body-modal #main,.body-modal .container{min-width:0!important}.body-modal #main{padding:0}.body-modal .main-header{position:fixed;top:0;right:20px;left:20px;z-index:100;padding:13px 48px 13px 0;margin:0;background:#fff}.body-modal #mainContent{padding-top:70px}.body-modal .main-header>h2{max-width:100%;overflow:hidden;font-size:14px;text-overflow:ellipsis;white-space:nowrap}.body-modal .cell,.body-modal .main-content{-webkit-box-shadow:none;box-shadow:none}.body-modal #mainMenu{position:fixed;top:0;right:0;left:0;z-index:100;padding:12px 60px 12px 10px;margin:0;background:#fff}.body-modal #mainMenu>.btn-toolbar.pull-left.divider{display:none}.body-modal #mainMenu>.btn-toolbar{max-width:100%;margin-left:20px}.body-modal #mainMenu>.btn-toolbar>.divider:first-child{display:none}.body-modal #mainMenu>.btn-toolbar .page-title{max-width:100%;margin-left:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.body-modal #mainMenu+#mainContent.main-row{padding:60px 10px 0}.body-modal #mainMenu+#mainContent.main-row .cell{border:1px solid #efefef;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045);box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045)}.body-modal #mainActions{top:auto}.body-modal #mainActions .btn-toolbar{top:auto;bottom:10px}.body-modal.m-bug-view,.body-modal.m-story-view,.body-modal.m-task-view,.body-modal.m-testcase-view,.body-modal.m-testtask-view,.body-modal.m-todo-view{padding-bottom:20px;border-radius:3px}#tabsNav{position:relative}#tabsNav .tab-pane>.actions{position:absolute;top:-8px;right:0}#tabsNav .tab-pane>.cell,#tabsNav .tab-pane>.main-table{padding:0;border:1px solid #cbd0db;border-top:none;border-radius:0 0 4px 4px}#tabsNav .tab-pane>.cell .detail-title{padding-left:5px}#helpContent{position:fixed;top:50px;right:0;bottom:40px;left:0;display:none;background-color:#fff}#helpContent .load-error{display:none;padding:20px}#helpContent .show-error .load-error{display:block}.show-help-tab{overflow:hidden}.show-help-tab #main{display:none}.show-help-tab #helpContent{display:block}#navbar .nav>li>a.open-help-tab>.icon-close{display:none;opacity:.5}#navbar .nav>li>a.open-help-tab>.icon-close:hover{background:rgba(0,0,0,.1);opacity:1}.show-help-tab #navbar .nav>li>a.open-help-tab>.icon-close{display:inline}.text-middle td,.text-middle th{vertical-align:middle}.text-center td,.text-center th{text-align:center}.c-sm{width:40px}.c-id{width:90px}.c-id-sm{width:70px}.c-id-xs{width:55px}.c-date{width:100px}.c-num,.c-pri,.c-type{width:80px;overflow:hidden}.c-begin,.c-end,.c-time{width:65px}.c-hours{width:60px}.c-actions-1{width:50px}.c-actions-2{width:75px}.c-actions-3{width:102px}.c-actions,.c-actions-4{width:128px}.c-actions-5{width:155px}.c-actions-6{width:180px}.c-product,.c-project{width:180px}.c-plan{width:130px}.c-datetime{width:120px}.c-stage,.c-status,.c-user{width:80px}.c-side{width:200px;border-right:10px solid #efefef}.c-assign,.c-assignedTo,.c-openedBy{width:130px}.c-progress{width:155px}.c-assign,.c-assignedTo,.c-openedBy,.c-product,.c-project,.c-status,.c-url,.c-user{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}td.c-name,td.c-title{overflow:hidden;text-align:left!important;text-overflow:ellipsis;white-space:nowrap}td.c-actions{position:relative;padding-top:0;padding-bottom:0;overflow:hidden;white-space:nowrap;vertical-align:middle}td.c-actions .btn{display:inline-block;width:26px;padding:2px;overflow:hidden;line-height:20px;color:#16a8f8;background:0 0;border-color:transparent}td.c-actions .btn .icon{font-size:18px}td.c-actions .btn:hover{color:#0c64eb;background-color:#d3e5f7}td.c-actions .btn+.btn{margin-left:-4px}td.c-actions .btn-link{color:#3c4353;background:0 0}td.c-actions .btn-link:hover{color:#0c64eb;background:#e9f2fb}td.c-actions .more{position:absolute;top:50%;right:100%;display:none;padding-right:4px;padding-left:20px;margin-top:-15px;margin-right:-6px;white-space:nowrap;background-color:#fafafa;-webkit-transition:opacity .3s,margin.3s;-o-transition:opacity .3s,margin.3s;transition:opacity .3s,margin.3s}tr:hover td.c-actions .more{display:block}td:hover+td.c-actions>.more{margin-right:-15px;pointer-events:none;opacity:.15}tr[data-url]{cursor:pointer}.table tbody>tr>td,.table thead>tr>th{vertical-align:middle}.table tbody>tr>td.has-btn,.table thead>tr>th.has-btn{padding-top:1px;padding-bottom:1px;overflow:visible}.table tbody>tr>td .progress,.table thead>tr>th .progress{height:6px}.table .em,.table em{color:#3c4353}.table .divider{border-bottom:10px solid #efefef}.table .divider-top{border-top:10px solid #efefef}.table .btn-icon-left{max-width:100%;padding-left:20px;overflow:hidden;line-height:18px;text-align:left;text-overflow:ellipsis;background:0 0;border-color:#eaf3fc}.table .btn-icon-left>.icon{width:20px;font-size:14px;background:0 0!important;opacity:0}.table .btn-icon-left.btn-sm{height:26px;font-size:13px}.table .btn-icon-left:active,.table .btn-icon-left:focus,.table .btn-icon-left:hover{border-color:rgba(0,0,0,.2)}.table .btn-icon-left:active>.icon,.table .btn-icon-left:focus>.icon,.table .btn-icon-left:hover>.icon{opacity:1}.table .btn-icon-left>.text{padding-left:25px}.table thead>tr>th.c-assign,.table thead>tr>th.c-assignedTo{padding-left:29px}.table a{vertical-align:middle}.table tbody>tr:last-child{border-bottom:none}.table caption{margin-bottom:5px;background:#f1f1f1;border:none}.is-firefox .table .btn-icon-left>.icon{line-height:22px}.main-table{border-radius:4px}.main-table>.table,.main-table>.table-footer,.main-table>.table-header,.main-table>.table-responsive{-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045);box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045)}.main-table .table{font-size:13px;table-layout:fixed;background-color:#fff;border-radius:4px 4px 0 0}.main-table .table.table-lg{font-size:14px}.main-table .table .btn-icon-left{border-color:transparent}.main-table .table .btn-icon-left>.icon{background:0 0;border-radius:4px}.main-table .table .btn-icon-left.btn-sm{height:26px}.main-table .table .btn-icon-left:hover{border-color:rgba(0,0,0,.2)}.main-table .table .btn-icon-left:hover>.icon{background:#e9f2fb;border-radius:4px 0 0 4px}.main-table tbody>tr>td,.main-table thead>tr>th{min-height:36px;padding:2px 8px;line-height:30px}.main-table tbody>tr>td:first-child,.main-table thead>tr>th:first-child{padding-left:15px}.main-table thead>tr>th{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-bottom:1px solid #ddd}.main-table tbody>tr:nth-child(odd){background-color:#f5f5f5}.main-table tbody>tr:last-child>td{border-bottom:1px solid #ddd}.main-table tbody>tr>td{position:relative;border-bottom:none;border-bottom:1px solid #eee}.main-table tbody>tr>td .label{max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.main-table tbody>tr>td>a{line-height:28px;color:#0c60e1}.main-table tbody>tr>td>a:not(.btn):visited{color:#082999;opacity:.9}.main-table tbody>tr>td>a:hover,.main-table tbody>tr>td>a:visited:hover{color:#0c64eb}.main-table tbody>tr>td.c-actions{padding-right:10px}.main-table tbody>tr>td.c-side+td:before,.main-table tbody>tr>td:first-child:before{position:absolute;top:0;bottom:0;left:0;display:block;width:0;content:'';background:#0c64eb;opacity:0;-webkit-transition:.2s linear;-o-transition:.2s linear;transition:.2s linear;-webkit-transition-property:width,opacity,border-radius;-o-transition-property:width,opacity,border-radius;transition-property:width,opacity,border-radius}@-moz-document url-prefix(){.main-table tbody>tr>td.c-side+td:before,.main-table tbody>tr>td:first-child:before{bottom:-1px}}.main-table tbody>tr>td.c-side:before{display:none}.main-table tbody>tr{-webkit-transition:.2s cubic-bezier(.175,.885,.32,1);-o-transition:.2s cubic-bezier(.175,.885,.32,1);transition:.2s cubic-bezier(.175,.885,.32,1);-webkit-transition-property:background-color,-webkit-box-shadow;-o-transition-property:box-shadow,background-color;transition-property:background-color,-webkit-box-shadow;transition-property:box-shadow,background-color;transition-property:box-shadow,background-color,-webkit-box-shadow}.main-table tbody>tr:hover{background:#e9f2fb}.main-table .table-grouped tbody>tr:hover{background:#f2f7fd;-webkit-box-shadow:none;box-shadow:none}.main-table .table-grouped tbody>tr:hover td.c-actions .more{background:#f2f7fd}.main-table tbody>tr.checked{background:#fff3e0}.main-table tbody>tr.checked:hover{background:#ffebbc}.main-table tbody>tr.checked>td.c-side+td:before,.main-table tbody>tr.checked>td:first-child:before{width:4px;opacity:1}.main-table tbody>tr.checked.row-check-begin{border-top-left-radius:4px;border-top-right-radius:2px}.main-table tbody>tr.checked.row-check-begin>td:first-child:before{border-top-left-radius:4px}.main-table tbody>tr.checked.row-check-end{border-bottom-right-radius:2px;border-bottom-left-radius:4px}.main-table tbody>tr.checked.row-check-end>td:first-child:before{border-bottom-left-radius:4px}.main-table .checkbox-primary{display:inline-block;line-height:20px}.main-table .checkbox-primary label{margin:0}.main-table .table{margin:0}.table-header{padding:4px 0 12px}.table-header .table-statistic{color:#838a9d}.table-header .table-statistic strong{font-size:15px;color:#3c4353}.table-header .btn-toolbar{margin-top:-28px}.table-header.fixed-right{position:relative;z-index:5;padding:0}.table-header.fixed-right>.btn-toolbar{position:absolute;top:0;right:0;z-index:1;padding:1px;margin:0;background:#fff;border-radius:4px}.table-header.fixed-right>.btn-toolbar .btn{opacity:.65}.table-header.fixed-right>.btn-toolbar .btn:hover{opacity:1}.table-footer{position:relative;min-height:40px;padding:6px 15px;background:#fff;border-radius:0 0 4px 4px}.body-modal .table-footer{margin-bottom:20px}.talbe-lg+.table-footer{padding:11px 15px}.table-footer .btn-toolbar,.table-footer .checkbox-primary{float:left}.table-footer .btn-toolbar+.btn-toolbar{margin-left:8px}.table-footer .checkbox-primary{margin:5px 20px 0 0}.table-footer .checkbox-primary.checked label:after{border-color:#00da88!important}.table-footer .btn{padding:3px 10px;line-height:20px}.table-footer .pager{position:absolute;top:0;right:0;z-index:4;height:40px;padding:6px 5px 6px 10px;margin:0;background:#fff;opacity:1;-webkit-transition:opacity .4s;-o-transition:opacity .4s;transition:opacity .4s}.table-footer .pager:before{position:absolute;top:0;bottom:0;left:-50px;display:block;width:50px;content:' ';background:-webkit-gradient(linear,left top,right top,from(rgba(255,255,255,0)),to(#fff));background:-webkit-linear-gradient(left,rgba(255,255,255,0) 0,#fff 100%);background:-o-linear-gradient(left,rgba(255,255,255,0) 0,#fff 100%);background:linear-gradient(to right,rgba(255,255,255,0) 0,#fff 100%)}.table-footer .pager .btn,.table-footer .pager>li>.pager-item,.table-footer .pager>li>.pager-label{color:#838a9d;background:0 0;border-color:transparent}.table-footer .pager .btn,.table-footer .pager>li>a{border-radius:3px}.table-footer .pager .btn:hover,.table-footer .pager>li>a:hover{background:rgba(0,0,0,.1)}.table-footer .pager>li.disabled>a.pager-item{opacity:1}.table-footer .form-control{height:28px;padding:3px 8px}.table-footer .table-statistic{position:relative;z-index:2;float:left;padding-right:30px;line-height:28px;color:#838a9d;background:#fff}.table-footer .table-statistic:hover{z-index:4}.table-footer .table-statistic:hover+.pager{z-index:2;opacity:.3}.table-footer .btn-toolbar+.table-statistic{margin-left:10px}.table-footer .text{line-height:28px}.table-footer.fixed-footer{position:fixed;z-index:10;margin:0;background:rgba(75,75,75,.85);border-top-color:transparent}.table-footer.fixed-footer .checkbox-primary label{color:#fff}.table-footer.fixed-footer .checkbox-primary label:after{border-color:rgba(255,255,255,.8)}.table-footer.fixed-footer .table-statistic{color:#fff;background:#666}.table-footer.fixed-footer .pager{background:#666}.table-footer.fixed-footer .pager:before{background:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,0)),to(#666));background:-webkit-linear-gradient(left,rgba(0,0,0,0) 0,#666 100%);background:-o-linear-gradient(left,rgba(0,0,0,0) 0,#666 100%);background:linear-gradient(to right,rgba(0,0,0,0) 0,#666 100%)}.table-footer.fixed-footer .pager .btn,.table-footer.fixed-footer .pager>li>.pager-item,.table-footer.fixed-footer .pager>li>.pager-label{color:#fff}.table-footer.fixed-footer .pager .btn:hover,.table-footer.fixed-footer .pager>li>a:hover{background:rgba(255,255,255,.3)}.table-footer.fixed-footer .pager>li.disabled>a.pager-item{opacity:.5}.table-actions{width:0;height:28px;visibility:hidden;opacity:0;-webkit-transition:opacity cubic-bezier(.175,.885,.32,1) .8s;-o-transition:opacity cubic-bezier(.175,.885,.32,1) .8s;transition:opacity cubic-bezier(.175,.885,.32,1) .8s}.table-actions.show-always{width:auto;pointer-events:none;cursor:not-allowed;visibility:visible;opacity:.75}.has-row-checked .table-actions{width:auto;pointer-events:auto!important;cursor:default;visibility:visible;opacity:1}.table-lg tbody>tr>td{padding:9px 10px}.table-lg tbody>tr>td .btn+.btn{margin-left:5px}.table.has-sort-head thead>tr>th{padding-right:0}.table.has-sort-head thead>tr>th>a{position:relative;display:inline-block;padding-right:16px;color:#3c4353}.table.has-sort-head thead>tr>th>a:after,.table.has-sort-head thead>tr>th>a:before{position:absolute;top:0;right:0;font-family:ZentaoIcon;font-size:18px;font-size:14px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;line-height:30px;color:#3c4353;text-transform:none;content:"\f0de";opacity:.5;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.table.has-sort-head thead>tr>th>a:after{content:"\f0dd"}.table.has-sort-head thead>tr>th>a.sort-down,.table.has-sort-head thead>tr>th>a.sort-up{color:#000;text-decoration:none}.table.has-sort-head thead>tr>th>a:hover,.table.has-sort-head thead>tr>th>a:hover:after,.table.has-sort-head thead>tr>th>a:hover:before{color:#0c64eb;opacity:1}.table.has-sort-head thead>tr>th>a.sort-down:after,.table.has-sort-head thead>tr>th>a.sort-up:before{color:#000;opacity:1}.head-fixed .datatable-head-span .table,.table.fixed-header-copy{z-index:10;color:#fff;background:rgba(75,75,75,.85)}.head-fixed .datatable-head-span .table thead>tr>th,.table.fixed-header-copy thead>tr>th{color:#eee}.head-fixed .datatable-head-span .table thead>tr>th>a,.table.fixed-header-copy thead>tr>th>a{color:#eee}.head-fixed .datatable-head-span .table thead>tr>th>a:hover,.table.fixed-header-copy thead>tr>th>a:hover{color:#fff}.head-fixed .datatable-head-span .table thead>tr>th>a:after,.head-fixed .datatable-head-span .table thead>tr>th>a:before,.table.fixed-header-copy thead>tr>th>a:after,.table.fixed-header-copy thead>tr>th>a:before{color:#eee}.head-fixed .datatable-head-span .table thead>tr>th>a.sort-down,.head-fixed .datatable-head-span .table thead>tr>th>a.sort-down:after,.head-fixed .datatable-head-span .table thead>tr>th>a.sort-up,.head-fixed .datatable-head-span .table thead>tr>th>a.sort-up:before,.head-fixed .datatable-head-span .table thead>tr>th>a:hover,.head-fixed .datatable-head-span .table thead>tr>th>a:hover:after,.head-fixed .datatable-head-span .table thead>tr>th>a:hover:before,.table.fixed-header-copy thead>tr>th>a.sort-down,.table.fixed-header-copy thead>tr>th>a.sort-down:after,.table.fixed-header-copy thead>tr>th>a.sort-up,.table.fixed-header-copy thead>tr>th>a.sort-up:before,.table.fixed-header-copy thead>tr>th>a:hover,.table.fixed-header-copy thead>tr>th>a:hover:after,.table.fixed-header-copy thead>tr>th>a:hover:before{color:#fff}.head-fixed .datatable-head-span .table .checkbox-primary,.table.fixed-header-copy .checkbox-primary{z-index:1}.head-fixed .datatable-head-span .table .checkbox-primary label,.table.fixed-header-copy .checkbox-primary label{color:#fff}.head-fixed .datatable-head-span .table .checkbox-primary label:after,.table.fixed-header-copy .checkbox-primary label:after{border-color:rgba(255,255,255,.8)}.head-fixed .datatable-head-span .table .checkbox-primary.checked label:after,.table.fixed-header-copy .checkbox-primary.checked label:after{border-color:#00da88!important}.table-data{margin:0;table-layout:fixed}.table-data tbody>tr>td,.table-data tbody>tr>th{padding:6px 8px;word-break:break-all;border:none}.table-data tbody>tr>th{width:70px;padding-left:0;font-weight:400;color:#838a9d;text-align:right;vertical-align:middle}.table-data tbody>tr>td{padding-right:0}.table-data tbody>tr>td>a{color:#0c60e1}.table-data tbody>tr>td>a:not(.btn):visited{color:#082999}.table-data tbody>tr>td>a:hover,.table-data tbody>tr>td>a:visited:hover{color:#0c64eb}.table-data ol,.table-data ul{margin:0}.fixed-head-table{background:rgba(0,0,0,.7);border-bottom:1px solid #ddd}.fixed-head-table thead>tr>th{color:#fff}.table-empty-tip{padding:80px 10px;text-align:center;background:#fff}.not-firefox .table-grouped>tbody>tr>td.c-side{background:#fff!important}.table-grouped .group-toggle{cursor:pointer}.table-grouped .group-toggle.group-summary{border-top:10px solid #efefef}.table-grouped tbody>tr>td:first-child,.table-grouped thead>tr>th:first-child{padding-left:8px}.group-expand-all,.table-group-collapsed .group-collapse-all{display:none}.table-group-collapsed .group-expand-all{display:inline-block}.table-auto{table-layout:auto}.datatable .table>tbody>tr.checked.hover>td,.datatable .table>tbody>tr.checked>td.col-hover{background:#ffebbc}body.has-fixed-footer{padding-bottom:60px}.table.with-footer-fixed{margin-bottom:20px}.article-content{overflow:auto}.article-content img{margin-top:0}.article-content table{margin:10px 0}.article-content table td,.article-content table th{border:1px solid #cbd0db}.article-content table th{background:#eee}.article-content,.article>.content{word-wrap:break-word}.detail{padding:10px 0;margin:0 10px}.detail+.detail{padding-top:25px;border-top:1px solid #eee}.detail-title{font-size:14px;font-weight:700;line-height:20px}.detail-title>.pull-right{position:relative;top:-8px}h2.detail-title{margin:0;font-size:15px;font-weight:700}h2.detail-title .label,h2.detail-title .label-id{position:relative;top:-1px}.detail-content{padding:0;margin-top:10px}.detail-content em{font-style:normal;color:#3c4353}.detail-content .list-unstyled>li+li{margin-top:5px}.side-col .detail-content{padding-left:0}details.detail{padding:10px 0}details.detail summary{position:relative;cursor:pointer;outline:0}details.detail summary::-webkit-details-marker{display:none}details.detail summary:after{position:absolute;top:0;right:0;font-family:ZentaoIcon;font-size:18px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;text-transform:none;content:"\e316";opacity:.4;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}details.detail[open] summary:after{content:"\e313"}.files-list{padding-left:0;list-style:none}.files-list>li>a{display:block;line-height:24px}.files-list>li>a>.icon{display:inline-block;margin-right:5px;opacity:.7}.files-list>li>a:hover{color:#0c64eb}.files-list>li>.right-icon{opacity:0;-webkit-transition:opacity .2s;-o-transition:opacity .2s;transition:opacity .2s}.files-list>li:hover>.right-icon{opacity:1}.histories-list{padding-left:15px;margin-bottom:0}.histories-list .btn-mini{position:relative;top:1px}.histories-list>li{position:relative}.histories-list>li+li{margin-top:5px}.histories-list>li strong{color:#3c4353}.histories-list .comment,.histories-list .show-form .comment-edit-form{padding:5px 5px 5px 10px;margin:5px 0 0;background-color:rgba(0,0,0,.025);border:1px solid #eee}.histories-list .btn-edit-comment{position:absolute;top:28px;right:2px}.histories-list .comment-edit-form,.histories-list .show-form .btn-edit-comment,.histories-list .show-form .comment{display:none}.histories-list .show-form .comment-edit-form{display:block;padding:10px;border:1px solid #eee}.histories .btn-mini{width:16px;min-width:16px;height:16px;overflow:hidden;line-height:16px;color:#cbd0db;vertical-align:-8%;border-radius:1px}.histories .btn-mini>.icon{position:relative;top:-2px;left:-2px}.histories .btn-mini:focus,.histories .btn-mini:hover{color:#0c64eb;border-color:#0c64eb}.histories .show-changes .btn-expand>.icon:before{content:"\e926"}.histories .btn-strip{display:none}.histories .show-changes .btn-strip{display:inline-block}.history-changes{display:none;padding:5px;margin-bottom:-5px;margin-left:5px;font-size:12px;line-height:20px}.history-changes blockquote{padding:5px 5px 5px 10px;margin:5px 0 0;font-size:12px;background-color:rgba(0,0,0,.05);border-left:3px solid #eee}.history-changes blockquote.original{display:none}.show-changes .history-changes,.show-original .history-changes blockquote.original{display:block}.show-original .history-changes blockquote.textdiff{display:none}.syntaxhighlighter{overflow:auto}.search-list{min-width:200px;max-width:300px;padding:0}.search-list .search-box{float:none;width:auto;margin:10px}.search-list .search-box .icon-search{opacity:.5}.search-list .list-group{max-height:248px;padding:5px 10px;margin:5px 0}.dropup .search-list .search-box+.list-group{height:171px;padding-top:0}.search-list .search-input{height:30px}.search-list .input-control-icon-right{height:28px;line-height:28px}.list-group{overflow-y:auto}.list-group>a{display:block;padding:2px 10px 2px 5px;overflow:hidden;line-height:20px;text-overflow:ellipsis;white-space:nowrap;border-radius:4px}.list-group>a+a{margin-top:5px}.list-group>a>.icon{display:inline-block;margin-right:3px;opacity:.5}.list-group>a.selected{color:#e9f2fb;background-color:#0c64eb}.list-group>a.active{color:#0c64eb;background-color:#e9f2fb}.list-group>a.active:hover,.list-group>a:hover{color:#fff;background-color:#0c64eb}.list-group>.heading{padding:2px 5px;line-height:20px;color:#838a9d}.list-group>a+.heading{margin-top:4px}.dropup .search-box-sink{padding-top:5px;padding-bottom:45px}.dropup .search-box-sink .search-box{position:absolute;right:10px;bottom:10px;left:10px;margin:0}.dropup .search-box-sink .search-box+.list-group{height:auto;max-height:171px}#dropMenu>.search-box{max-width:188px}#dropMenu .input-control-icon-left{top:0}#dropMenu .list-group{width:199px;max-width:199px;max-height:300px;padding-top:0}#dropMenu .table-row .list-group{margin:0 -10px}#dropMenu .col-right{display:none}#dropMenu .col-left{width:100%}#dropMenu .col-left .list-group{max-height:250px;margin-bottom:35px}#dropMenu .col-footer{position:absolute;bottom:10px;left:10px;width:180px;padding-top:10px;padding-left:5px;margin-top:5px;border-top:1px solid #eee}#dropMenu .col-footer>a{opacity:.8}#dropMenu .col-footer>a:hover{opacity:1}#dropMenu.show-right-col{width:402px;max-width:402px}#dropMenu.show-right-col>.list-group{width:400px;max-width:400px}#dropMenu.show-right-col .col-left,#dropMenu.show-right-col .col-right{display:table-cell;width:50%}#dropMenu.show-right-col .col-left>.list-group{width:200px;max-width:200px;margin-right:0}#dropMenu.show-right-col .col-right{border-left:1px solid #eee}#dropMenu.show-right-col .col-right>.list-group{width:199px;max-height:285px;margin:0}#dropMenu.show-right-col .col-right>.list-group>a{opacity:.7}#dropMenu.show-right-col .col-right>.list-group>a:hover{opacity:1}#dropMenu.show-right-col .toggle-right-col>.icon-angle-right:before{content:"\e314"}#dropMenu.has-search-text{width:200px;margin-bottom:35px}#dropMenu.has-search-text>.list-group>.table-row{display:block}#dropMenu.has-search-text>.list-group>.table-row>.table-col{display:block}#dropMenu.has-search-text .pull-right.toggle-right-col{display:none}#dropMenu.has-search-text .col-left .list-group{margin-bottom:0}#dropMenu.has-search-text .col-right{margin-left:-10px}#dropMenu.has-search-text .col-right .list-group{margin-bottom:35px}#dropMenu.has-search-text .col-right .list-group>a{opacity:.7}#dropMenu.has-search-text>a{opacity:.7}.release-path{overflow:hidden}.release-line{display:table;width:100%;padding:0;table-layout:fixed}.release-line>li{display:table-cell;list-style:none}.release-line>li>a{position:relative;display:block}.release-line>li>a:before{position:absolute;left:0;display:block;width:13px;height:13px;content:' ';background:#fff;border:2px solid #838a9d;border-radius:50%}.release-line>li>a:after{position:absolute;left:5px;display:block;width:2px;height:30px;content:' ';background:#cbe0f6}.release-line>li>a>.icon{position:absolute;left:4px;font-size:24px}.release-line>li>a .title{display:block;font-size:14px;white-space:nowrap}.release-line>li>a .date,.release-line>li>a .info{display:block;max-height:18px;overflow:hidden;font-size:12px;color:#838a9d;text-overflow:ellipsis;white-space:nowrap}.release-line>li>a:hover:before{background-color:#e9f2fb}.release-line>li>a:hover:after{background-color:#838a9d}.release-line>li>a:hover .title{color:#0c64eb}.release-line>li>a:hover .date,.release-line>li>a:hover .info{color:#838a9d}.release-line>li:nth-child(odd){padding-top:80px;vertical-align:top}.release-line>li:nth-child(odd)>a{height:85px;padding-top:36px;border-top:5px solid #cbe0f6}.release-line>li:nth-child(odd)>a:before{top:-9px}.release-line>li:nth-child(odd)>a:after{top:6px}.release-line>li:nth-child(odd)>a>.icon{top:-26px}.release-line>li:nth-child(even){padding-bottom:80px;vertical-align:bottom}.release-line>li:nth-child(even)>a{height:85px;padding-bottom:36px;border-bottom:5px solid #cbe0f6}.release-line>li:nth-child(even)>a:before{bottom:-9px}.release-line>li:nth-child(even)>a:after{bottom:6px}.release-line>li:nth-child(even)>a>.icon{bottom:-2px}.release-line>li:last-child>a{border-color:transparent}.release-line>li.active>a:before{border-color:#0c64eb}.release-line>li+li>a>.date,.release-line>li+li>a>.info,.release-line>li+li>a>.title{position:relative;left:-36%}#footer{position:fixed;right:0;bottom:0;left:0;z-index:1010;height:40px;background:#fff;border-top:1px solid #eff1f7}#footer .breadcrumb{padding:10px 0;margin:0}#footer .breadcrumb>li{max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#footer .breadcrumb>.active,#footer .breadcrumb>li>a{color:#838a9e}#footer .breadcrumb>.active:hover,#footer .breadcrumb>li>a:hover{color:#16a8f8}#footer .breadcrumb>li+li:before{content:'>'}#footer>.container{padding:0 20px}@media (min-width:1400px){#footer>.container{padding:0 40px}}#poweredBy{position:absolute;top:4px;right:0;padding:5px 10px}#poweredBy .icon-zentao{color:#0097fd}#poweredBy a{color:#3c4353}#poweredBy a:hover{color:#0c64eb}#poweredBy a:hover .icon-zentao{color:#0c64eb}#poweredBy a.text-important{color:#bd7b46}#poweredBy a.text-important:hover{color:#ff5d5d}#poweredBy a.text-primary{color:#0c64eb}#poweredBy a.text-primary:hover{color:#16a8f8}#poweredBy #aiux{color:#cbd0dc}#noticeBox .alert{-webkit-box-shadow:rgba(0,0,0,.15) 0 3px 10px,rgba(0,0,0,.25) 0 3px 10px;box-shadow:rgba(0,0,0,.15) 0 3px 10px,rgba(0,0,0,.25) 0 3px 10px} \ No newline at end of file From 5ddda7b3af31ebb42e53a7491b0d45afec7ff601 Mon Sep 17 00:00:00 2001 From: reneeteng Date: Mon, 11 Mar 2019 14:37:03 +0800 Subject: [PATCH 314/442] *Lang change. --- module/dev/lang/en.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/module/dev/lang/en.php b/module/dev/lang/en.php index 065afe5f3a..6dc922666e 100644 --- a/module/dev/lang/en.php +++ b/module/dev/lang/en.php @@ -56,9 +56,9 @@ $lang->dev->tableList['storyspec'] = 'Description'; $lang->dev->tableList['task'] = 'Task'; $lang->dev->tableList['taskestimate'] = 'Est. Task'; $lang->dev->tableList['team'] = 'Team'; -$lang->dev->tableList['testresult'] = 'Testing Result'; -$lang->dev->tableList['testrun'] = 'Run Testing '; -$lang->dev->tableList['testtask'] = 'Test Task'; +$lang->dev->tableList['testresult'] = 'Test Result'; +$lang->dev->tableList['testrun'] = 'Test Run'; +$lang->dev->tableList['testtask'] = 'Test'; $lang->dev->tableList['todo'] = 'Todo'; $lang->dev->tableList['user'] = 'User'; $lang->dev->tableList['usercontact'] = 'User Contact'; @@ -87,7 +87,7 @@ $lang->dev->tableList['testreport'] = 'Test Report'; $lang->dev->tableList['testsuite'] = 'Test Suite'; $lang->dev->tableList['tree'] = 'Module Tree'; $lang->dev->tableList['upgrade'] = 'Update'; -$lang->dev->tableList['cron'] = 'Scheduled Task'; +$lang->dev->tableList['cron'] = 'Cron'; $lang->dev->tableList['datatable'] = 'Data Table'; $lang->dev->tableList['block'] = 'Block'; $lang->dev->tableList['branch'] = 'Branch'; From d2d5b68e4d692c443948673ca84d6fc64d0bd74b Mon Sep 17 00:00:00 2001 From: reneeteng Date: Mon, 11 Mar 2019 14:48:37 +0800 Subject: [PATCH 315/442] *lang change. --- module/webhook/lang/en.php | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/module/webhook/lang/en.php b/module/webhook/lang/en.php index c1e274339b..885cd0138e 100644 --- a/module/webhook/lang/en.php +++ b/module/webhook/lang/en.php @@ -2,13 +2,13 @@ $lang->webhook->common = 'Webhook'; $lang->webhook->list = 'Hook List'; $lang->webhook->api = 'API'; -$lang->webhook->entry = 'Entry'; +$lang->webhook->entry = 'Application'; $lang->webhook->log = 'Log'; -$lang->webhook->assigned = 'Assigned To'; +$lang->webhook->assigned = 'Assign To'; $lang->webhook->setting = 'Setting'; $lang->webhook->browse = 'Browse'; -$lang->webhook->create = 'Create'; +$lang->webhook->create = 'Add Application'; $lang->webhook->edit = 'Edit'; $lang->webhook->delete = 'Delete'; @@ -16,7 +16,7 @@ $lang->webhook->id = 'ID'; $lang->webhook->type = 'Type'; $lang->webhook->name = 'Name'; $lang->webhook->url = 'Webhook Address'; -$lang->webhook->domain = 'Zentao Domain'; +$lang->webhook->domain = 'ZenTao Domain'; $lang->webhook->contentType = 'Content Type'; $lang->webhook->sendType = 'Send Type'; $lang->webhook->product = "{$lang->productCommon}"; @@ -25,9 +25,9 @@ $lang->webhook->params = 'Params'; $lang->webhook->action = 'Action'; $lang->webhook->desc = 'Desc'; $lang->webhook->createdBy = 'Created By'; -$lang->webhook->createdDate = 'Created Date'; +$lang->webhook->createdDate = 'Created'; $lang->webhook->editedby = 'Edited By'; -$lang->webhook->editedDate = 'Edited Date'; +$lang->webhook->editedDate = 'Edited'; $lang->webhook->date = 'Date'; $lang->webhook->data = 'Data'; $lang->webhook->result = 'Result'; @@ -37,7 +37,7 @@ $lang->webhook->typeList['bearychat'] = 'Bearychat'; $lang->webhook->typeList['dingding'] = 'Dingding'; $lang->webhook->typeList['default'] = 'Others'; -$lang->webhook->sendTypeList['sync'] = 'Synchronization'; +$lang->webhook->sendTypeList['sync'] = 'Synchronous'; $lang->webhook->sendTypeList['async'] = 'Asynchronous'; $lang->webhook->paramsList['objectType'] = 'Object Type'; @@ -48,14 +48,14 @@ $lang->webhook->paramsList['action'] = 'Action'; $lang->webhook->paramsList['actor'] = 'Actor'; $lang->webhook->paramsList['date'] = 'Date'; $lang->webhook->paramsList['comment'] = 'Comment'; -$lang->webhook->paramsList['text'] = 'Action Desc'; +$lang->webhook->paramsList['text'] = 'Action Description'; -$lang->webhook->confirmDelete = 'Are your sure delete this hook?'; +$lang->webhook->confirmDelete = 'Do you want to delete this hook?'; $lang->webhook->trimWords = ''; $lang->webhook->note = new stdClass(); -$lang->webhook->note->async = 'If the send type is asynchronous, need open cron.'; +$lang->webhook->note->async = 'If the send type is asynchronous, you need open cron.'; $lang->webhook->note->product = "All actions will trigger the hook if the {$lang->productCommon} is empty, else only actions of the {$lang->productCommon} will trigger it."; $lang->webhook->note->project = "All actions will trigger the hook if the {$lang->projectCommon} is empty, else only actions of the {$lang->projectCommon} will trigger it."; From bdde3be91e9a8e022c6f03e427679c950503b023 Mon Sep 17 00:00:00 2001 From: reneeteng Date: Mon, 11 Mar 2019 15:48:46 +0800 Subject: [PATCH 316/442] *lang change. --- module/dev/lang/en.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/module/dev/lang/en.php b/module/dev/lang/en.php index 6dc922666e..3fadb97731 100644 --- a/module/dev/lang/en.php +++ b/module/dev/lang/en.php @@ -54,7 +54,7 @@ $lang->dev->tableList['release'] = 'Release'; $lang->dev->tableList['story'] = 'Story'; $lang->dev->tableList['storyspec'] = 'Description'; $lang->dev->tableList['task'] = 'Task'; -$lang->dev->tableList['taskestimate'] = 'Est. Task'; +$lang->dev->tableList['taskestimate'] = 'Estimates'; $lang->dev->tableList['team'] = 'Team'; $lang->dev->tableList['testresult'] = 'Test Result'; $lang->dev->tableList['testrun'] = 'Test Run'; @@ -70,7 +70,7 @@ $lang->dev->tableList['api'] = 'API'; $lang->dev->tableList['backup'] = 'Backup'; $lang->dev->tableList['common'] = 'Common'; $lang->dev->tableList['convert'] = 'Convert'; -$lang->dev->tableList['dev'] = 'Develope'; +$lang->dev->tableList['dev'] = 'Develop'; $lang->dev->tableList['git'] = 'GIT'; $lang->dev->tableList['index'] = 'Home'; $lang->dev->tableList['install'] = 'Install'; From e05ed035f67ea8d23a6e25a076a2bffc626c93a4 Mon Sep 17 00:00:00 2001 From: Yagami <976204163@qq.com> Date: Mon, 11 Mar 2019 17:17:11 +0800 Subject: [PATCH 317/442] * Fix lastEditDate bug. --- module/bug/model.php | 2 +- module/story/model.php | 2 +- module/task/model.php | 2 +- module/testcase/model.php | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/module/bug/model.php b/module/bug/model.php index 5a67f4fd00..53075b9a37 100644 --- a/module/bug/model.php +++ b/module/bug/model.php @@ -612,7 +612,7 @@ class bugModel extends model ->setDefault('deadline', '0000-00-00') ->setDefault('resolvedDate', '0000-00-00 00:00:00') ->setDefault('lastEditedBy', $this->app->user->account) - ->setDefault('lastEditedDate', $now) + ->add('lastEditedDate', $now) ->setIF(strpos($this->config->bug->edit->requiredFields, 'deadline') !== false, 'deadline', $this->post->deadline) ->join('openedBuild', ',') ->join('mailto', ',') diff --git a/module/story/model.php b/module/story/model.php index a19f39095a..53f77320ac 100644 --- a/module/story/model.php +++ b/module/story/model.php @@ -480,7 +480,7 @@ class storyModel extends model ->cleanFloat('estimate') ->setDefault('assignedDate', $oldStory->assignedDate) ->setDefault('lastEditedBy', $this->app->user->account) - ->setDefault('lastEditedDate', $now) + ->add('lastEditedDate', $now) ->setDefault('plan', '') ->setDefault('status', $oldStory->status) ->setDefault('product', $oldStory->product) diff --git a/module/task/model.php b/module/task/model.php index f304be7b1c..f9fa8a0a7d 100644 --- a/module/task/model.php +++ b/module/task/model.php @@ -617,7 +617,7 @@ class taskModel extends model ->setIF($this->post->status == 'wait' and $this->post->left == $oldTask->left and $this->post->consumed == 0 and $this->post->estimate, 'left', $this->post->estimate) ->setDefault('lastEditedBy', $this->app->user->account) - ->setDefault('lastEditedDate', $now) + ->add('lastEditedDate', $now) ->stripTags($this->config->task->editor->edit['id'], $this->config->allowedTags) ->join('mailto', ',') ->remove('comment,files,labels,uid,multiple,team,teamEstimate,teamConsumed,teamLeft,contactListMenu') diff --git a/module/testcase/model.php b/module/testcase/model.php index 561e024114..1e7f8a6f99 100644 --- a/module/testcase/model.php +++ b/module/testcase/model.php @@ -659,7 +659,7 @@ class testcaseModel extends model ->add('version', $version) ->setIF($this->post->story != false and $this->post->story != $oldCase->story, 'storyVersion', $this->loadModel('story')->getVersion($this->post->story)) ->setDefault('lastEditedBy', $this->app->user->account) - ->setDefault('lastEditedDate', $now) + ->add('lastEditedDate', $now) ->setDefault('story,branch', 0) ->join('stage', ',') ->join('linkCase', ',') From abcf5282285e81485568b51344a321684baaa29f Mon Sep 17 00:00:00 2001 From: reneeteng Date: Tue, 12 Mar 2019 14:44:29 +0800 Subject: [PATCH 318/442] *Lang change. --- module/dev/lang/en.php | 6 +++--- module/entry/lang/en.php | 24 ++++++++++++------------ module/webhook/lang/en.php | 8 ++++---- 3 files changed, 19 insertions(+), 19 deletions(-) diff --git a/module/dev/lang/en.php b/module/dev/lang/en.php index 3fadb97731..28b6693565 100644 --- a/module/dev/lang/en.php +++ b/module/dev/lang/en.php @@ -11,10 +11,10 @@ $lang->dev->desc = 'Description'; $lang->dev->noParams = 'No Parameters'; $lang->dev->post = 'POST Parameters'; -$lang->dev->paramRange = 'Range of values: %s'; +$lang->dev->paramRange = 'Parameter Range: %s'; $lang->dev->paramDate = 'Date format: YY-mm-dd. such as 2019-01-01'; $lang->dev->paramColor = 'Color format: #RGB. such as #3da7f5'; -$lang->dev->paramMailto = "Use account. Separate multiple accounts by ','."; +$lang->dev->paramMailto = "Use account. Separate accounts by ','."; $lang->dev->fields = array(); $lang->dev->fields['id'] = 'ID'; @@ -116,4 +116,4 @@ $lang->dev->groupList['message'] = 'Message'; $lang->dev->endGroupList['admin'] = 'Admin'; $lang->dev->endGroupList['system'] = 'System'; -$lang->dev->endGroupList['other'] = 'Others'; +$lang->dev->endGroupList['other'] = 'Other'; diff --git a/module/entry/lang/en.php b/module/entry/lang/en.php index 52e324f99d..cb767b3d57 100644 --- a/module/entry/lang/en.php +++ b/module/entry/lang/en.php @@ -1,5 +1,5 @@ entry->common = 'Entry'; +$lang->entry->common = 'Application'; $lang->entry->list = 'Entry List'; $lang->entry->api = 'API'; $lang->entry->webhook = 'Webhook'; @@ -7,10 +7,10 @@ $lang->entry->log = 'Log'; $lang->entry->setting = 'Setting'; $lang->entry->browse = 'Browse'; -$lang->entry->create = 'Create'; +$lang->entry->create = 'Add Application'; $lang->entry->edit = 'Edit'; $lang->entry->delete = 'Delete'; -$lang->entry->createKey = 'Regenerate'; +$lang->entry->createKey = 'Create Key'; $lang->entry->id = 'ID'; $lang->entry->name = 'Name'; @@ -18,7 +18,7 @@ $lang->entry->account = 'Account'; $lang->entry->code = 'Code'; $lang->entry->key = 'Key'; $lang->entry->ip = 'IP'; -$lang->entry->desc = 'Desc'; +$lang->entry->desc = 'Description'; $lang->entry->createdBy = 'Created By'; $lang->entry->createdDate = 'Created'; $lang->entry->editedby = 'Edited By'; @@ -26,23 +26,23 @@ $lang->entry->editedDate = 'Edited'; $lang->entry->date = 'Request Time'; $lang->entry->url = 'Request URL'; -$lang->entry->confirmDelete = 'Do you want to delete this entry?'; +$lang->entry->confirmDelete = 'Do you want to delete this application?'; $lang->entry->help = 'Help'; $lang->entry->notify = 'Notify'; $lang->entry->note = new stdClass(); $lang->entry->note->name = 'Name'; -$lang->entry->note->code = 'Alias should be letters and numbers.'; -$lang->entry->note->ip = "Use comma to seperate IPs. IP segment is supported, e.g. 192.168.1.*"; +$lang->entry->note->code = 'Alias should be letters and numbers'; +$lang->entry->note->ip = "Use comma to seperate IP. IP segment is supported, e.g. 192.168.1.*"; $lang->entry->note->allIP = 'All'; -$lang->entry->note->account = 'Account for entry.'; +$lang->entry->note->account = 'Authorized account in the applcation'; -$lang->entry->errmsg['PARAM_CODE_MISSING'] = 'Param code is missing.'; -$lang->entry->errmsg['PARAM_TOKEN_MISSING'] = 'Param token is missing.'; +$lang->entry->errmsg['PARAM_CODE_MISSING'] = 'Code is missing.'; +$lang->entry->errmsg['PARAM_TOKEN_MISSING'] = 'Token is missing.'; $lang->entry->errmsg['SESSION_CODE_MISSING'] = 'Session code is missing.'; -$lang->entry->errmsg['EMPTY_KEY'] = 'Entry key is missing.'; +$lang->entry->errmsg['EMPTY_KEY'] = 'Key is missing.'; $lang->entry->errmsg['INVALID_TOKEN'] = 'Invalid token.'; $lang->entry->errmsg['SESSION_VERIFY_FAILED'] = 'Session verification failed.'; $lang->entry->errmsg['IP_DENIED'] = 'IP is denied.'; $lang->entry->errmsg['ACCOUNT_UNBOUND'] = 'Account is not bound.'; -$lang->entry->errmsg['EMPTY_ENTRY'] = 'Entry key is missing.'; +$lang->entry->errmsg['EMPTY_ENTRY'] = 'Key is missing.'; diff --git a/module/webhook/lang/en.php b/module/webhook/lang/en.php index 885cd0138e..02e298ef34 100644 --- a/module/webhook/lang/en.php +++ b/module/webhook/lang/en.php @@ -2,13 +2,13 @@ $lang->webhook->common = 'Webhook'; $lang->webhook->list = 'Hook List'; $lang->webhook->api = 'API'; -$lang->webhook->entry = 'Application'; +$lang->webhook->entry = 'Entry'; $lang->webhook->log = 'Log'; $lang->webhook->assigned = 'Assign To'; $lang->webhook->setting = 'Setting'; $lang->webhook->browse = 'Browse'; -$lang->webhook->create = 'Add Application'; +$lang->webhook->create = 'Create'; $lang->webhook->edit = 'Edit'; $lang->webhook->delete = 'Delete'; @@ -23,7 +23,7 @@ $lang->webhook->product = "{$lang->productCommon}"; $lang->webhook->project = "{$lang->projectCommon}"; $lang->webhook->params = 'Params'; $lang->webhook->action = 'Action'; -$lang->webhook->desc = 'Desc'; +$lang->webhook->desc = 'Description'; $lang->webhook->createdBy = 'Created By'; $lang->webhook->createdDate = 'Created'; $lang->webhook->editedby = 'Edited By'; @@ -59,7 +59,7 @@ $lang->webhook->note->async = 'If the send type is asynchronous, you need open $lang->webhook->note->product = "All actions will trigger the hook if the {$lang->productCommon} is empty, else only actions of the {$lang->productCommon} will trigger it."; $lang->webhook->note->project = "All actions will trigger the hook if the {$lang->projectCommon} is empty, else only actions of the {$lang->projectCommon} will trigger it."; -$lang->webhook->note->typeList['bearychat'] = 'Add a zentao bot in bearychat and get the webhook address.'; +$lang->webhook->note->typeList['bearychat'] = 'Add a ZenTao bot in bearychat and get the webhook address.'; $lang->webhook->note->typeList['dingding'] = 'Add a customed bot in dingding and get the webhook address.'; $lang->webhook->note->typeList['default'] = 'Get webhook address from others'; From e7eac913f788875989e1fb4d090c2f58a7926d5c Mon Sep 17 00:00:00 2001 From: reneeteng Date: Tue, 12 Mar 2019 14:48:24 +0800 Subject: [PATCH 319/442] *Lang change. --- module/entry/lang/en.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/entry/lang/en.php b/module/entry/lang/en.php index cb767b3d57..4397a2dd78 100644 --- a/module/entry/lang/en.php +++ b/module/entry/lang/en.php @@ -35,7 +35,7 @@ $lang->entry->note->name = 'Name'; $lang->entry->note->code = 'Alias should be letters and numbers'; $lang->entry->note->ip = "Use comma to seperate IP. IP segment is supported, e.g. 192.168.1.*"; $lang->entry->note->allIP = 'All'; -$lang->entry->note->account = 'Authorized account in the applcation'; +$lang->entry->note->account = 'Authenticated account in the applcation'; $lang->entry->errmsg['PARAM_CODE_MISSING'] = 'Code is missing.'; $lang->entry->errmsg['PARAM_TOKEN_MISSING'] = 'Token is missing.'; From 84e5d056976c69ab989c3dba90130c6daacd3935 Mon Sep 17 00:00:00 2001 From: reneeteng Date: Thu, 14 Mar 2019 09:40:46 +0800 Subject: [PATCH 320/442] *Lang change. --- module/entry/lang/en.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/module/entry/lang/en.php b/module/entry/lang/en.php index 4397a2dd78..ae4a6a441f 100644 --- a/module/entry/lang/en.php +++ b/module/entry/lang/en.php @@ -1,5 +1,5 @@ entry->common = 'Application'; +$lang->entry->common = 'Entry'; $lang->entry->list = 'Entry List'; $lang->entry->api = 'API'; $lang->entry->webhook = 'Webhook'; @@ -7,7 +7,7 @@ $lang->entry->log = 'Log'; $lang->entry->setting = 'Setting'; $lang->entry->browse = 'Browse'; -$lang->entry->create = 'Add Application'; +$lang->entry->create = 'Add Entry'; $lang->entry->edit = 'Edit'; $lang->entry->delete = 'Delete'; $lang->entry->createKey = 'Create Key'; @@ -26,7 +26,7 @@ $lang->entry->editedDate = 'Edited'; $lang->entry->date = 'Request Time'; $lang->entry->url = 'Request URL'; -$lang->entry->confirmDelete = 'Do you want to delete this application?'; +$lang->entry->confirmDelete = 'Do you want to delete this entry?'; $lang->entry->help = 'Help'; $lang->entry->notify = 'Notify'; @@ -35,7 +35,7 @@ $lang->entry->note->name = 'Name'; $lang->entry->note->code = 'Alias should be letters and numbers'; $lang->entry->note->ip = "Use comma to seperate IP. IP segment is supported, e.g. 192.168.1.*"; $lang->entry->note->allIP = 'All'; -$lang->entry->note->account = 'Authenticated account in the applcation'; +$lang->entry->note->account = 'Authenticated account in the entry'; $lang->entry->errmsg['PARAM_CODE_MISSING'] = 'Code is missing.'; $lang->entry->errmsg['PARAM_TOKEN_MISSING'] = 'Token is missing.'; From 305d9cb99877a1a0ed9c7e463f6ff6f142022e03 Mon Sep 17 00:00:00 2001 From: reneeteng Date: Thu, 14 Mar 2019 09:53:18 +0800 Subject: [PATCH 321/442] *Lang change. --- module/admin/lang/en.php | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/module/admin/lang/en.php b/module/admin/lang/en.php index 295a6160db..87c844635e 100644 --- a/module/admin/lang/en.php +++ b/module/admin/lang/en.php @@ -14,7 +14,7 @@ $lang->admin->index = 'Admin Home'; $lang->admin->checkDB = 'Check Database'; $lang->admin->sso = 'Zdoo'; $lang->admin->safeIndex = 'Security'; -$lang->admin->checkWeak = 'Weak Password Check'; +$lang->admin->checkWeak = 'Check Weak Password'; $lang->admin->certifyMobile = 'Verify your cellphone'; $lang->admin->certifyEmail = 'Verify your Email'; $lang->admin->ztCompany = 'Verify your company'; @@ -24,13 +24,13 @@ $lang->admin->getCaptcha = 'Get Verification Code'; $lang->admin->api = 'API'; $lang->admin->log = 'Log'; $lang->admin->setting = 'Setting'; -$lang->admin->days = 'Valid Days'; +$lang->admin->days = 'Valid Day'; $lang->admin->info = new stdclass(); $lang->admin->info->version = 'Current Version is %s. '; $lang->admin->info->links = 'You can visit links below'; $lang->admin->info->account = 'Your ZenTao account is %s.'; -$lang->admin->info->log = 'Log that is beyond valid days will be deleted and it has to run cron.'; +$lang->admin->info->log = 'Log that exceeds valid days will be deleted and you have to run cron.'; $lang->admin->notice = new stdclass(); $lang->admin->notice->register = "Note: You haven't registered in ZenTao(www.zentao.pm). %s then get the Latest ZenTao Upgrades and News."; @@ -40,9 +40,9 @@ $lang->admin->notice->int = "『%s』should be a positive integer."; $lang->admin->register = new stdclass(); $lang->admin->register->common = 'Bind Account'; $lang->admin->register->caption = 'Register in Zentao Community'; -$lang->admin->register->click = 'Please Register here'; -$lang->admin->register->lblAccount = 'at least 3 characters pls; contains letters and numbers.'; -$lang->admin->register->lblPasswd = 'at least 6 characters pls; contains letters and numbers.'; +$lang->admin->register->click = 'Register here'; +$lang->admin->register->lblAccount = '>= 3 characters; contains letters and numbers.'; +$lang->admin->register->lblPasswd = '>= 6 characters; contains letters and numbers.'; $lang->admin->register->submit = 'Register'; $lang->admin->register->bind = "Binding Exsit Account"; $lang->admin->register->success = "You have registered with us!"; @@ -53,20 +53,20 @@ $lang->admin->bind->success = "Account is linked!"; $lang->admin->safe = new stdclass(); $lang->admin->safe->common = 'Security Policy'; -$lang->admin->safe->set = 'Password Strength'; -$lang->admin->safe->password = 'Password Strength'; +$lang->admin->safe->set = 'Strong Password'; +$lang->admin->safe->password = 'Strong Password'; $lang->admin->safe->weak = 'Weak Password'; $lang->admin->safe->reason = 'Type'; $lang->admin->safe->checkWeak = 'Weak Password'; -$lang->admin->safe->changeWeak = 'Your password is weak. Change it.'; -$lang->admin->safe->modifyPasswordFirstLogin = 'Change password after first login'; +$lang->admin->safe->changeWeak = 'Require to change weak password'; +$lang->admin->safe->modifyPasswordFirstLogin = 'Require to change password after first login'; $lang->admin->safe->modeList[0] = 'N/A'; $lang->admin->safe->modeList[1] = 'Medium'; $lang->admin->safe->modeList[2] = 'Strong'; -$lang->admin->safe->modeRuleList[1] = 'Contains upper and lower case, numbers. Length >= 6'; -$lang->admin->safe->modeRuleList[2] = 'Contains upper and lower case, numbers and special characters. Length >= 10.'; +$lang->admin->safe->modeRuleList[1] = ' upper and lower case, numbers. Length >= 6'; +$lang->admin->safe->modeRuleList[2] = ' upper and lower case, numbers and special characters. Length >= 10.'; $lang->admin->safe->reasonList['weak'] = 'Common Weak Password'; $lang->admin->safe->reasonList['account'] = 'Same as your account'; @@ -77,5 +77,5 @@ $lang->admin->safe->reasonList['birthday'] = 'Same as your DOB'; $lang->admin->safe->modifyPasswordList[1] = 'Yes'; $lang->admin->safe->modifyPasswordList[0] = 'No'; -$lang->admin->safe->noticeMode = 'Password will be checked when login, add and edit user.'; +$lang->admin->safe->noticeMode = 'Password will be checked when Login, Add and Edit user.'; $lang->admin->safe->noticeStrong = ''; From 76ece9e5ebc27d65a6abe82f24c085c5042780b8 Mon Sep 17 00:00:00 2001 From: reneeteng Date: Thu, 14 Mar 2019 14:20:48 +0800 Subject: [PATCH 322/442] *Lang change. --- module/bug/lang/en.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/module/bug/lang/en.php b/module/bug/lang/en.php index 3261d85016..af4cfb5b7c 100644 --- a/module/bug/lang/en.php +++ b/module/bug/lang/en.php @@ -41,7 +41,7 @@ $lang->bug->openedBy = 'Created by'; $lang->bug->openedDate = 'Created'; $lang->bug->openedDateAB = 'Created'; $lang->bug->openedBuild = 'Open Build'; -$lang->bug->assignedTo = 'AssignToMe'; +$lang->bug->assignedTo = 'Assign To'; $lang->bug->assignBug = 'Assign To'; $lang->bug->assignedToAB = 'To'; $lang->bug->assignedDate = 'Assigned'; @@ -56,7 +56,7 @@ $lang->bug->deadline = 'Deadline'; $lang->bug->plan = 'Plan'; $lang->bug->closedBy = 'Closed By'; $lang->bug->closedDate = 'Closed'; -$lang->bug->duplicateBug = 'Duplicate'; +$lang->bug->duplicateBug = 'Duplicate Bug ID'; $lang->bug->lastEditedBy = 'Edited By'; $lang->bug->linkBug = 'Linked Bug'; $lang->bug->linkBugs = 'Link Bug'; From 817d27221a86c0d9f9580040de37d823281c2469 Mon Sep 17 00:00:00 2001 From: reneeteng Date: Thu, 14 Mar 2019 16:07:28 +0800 Subject: [PATCH 323/442] *Lang change. --- module/mail/lang/en.php | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/module/mail/lang/en.php b/module/mail/lang/en.php index 7256826726..f3b21fe80b 100755 --- a/module/mail/lang/en.php +++ b/module/mail/lang/en.php @@ -4,7 +4,7 @@ $lang->mail->index = 'Home'; $lang->mail->detect = 'Testing'; $lang->mail->edit = 'Edit Settings'; $lang->mail->save = 'Save'; -$lang->mail->test = 'Email Sending Test'; +$lang->mail->test = 'Sending Test'; $lang->mail->reset = 'Reset'; $lang->mail->resend = 'Resend'; $lang->mail->browse = 'Email List'; @@ -17,14 +17,14 @@ $lang->mail->sendcloudUser = 'Sync Contact'; $lang->mail->agreeLicense = 'Yes'; $lang->mail->disagree = 'No'; -$lang->mail->turnon = 'Turn On Mail'; +$lang->mail->turnon = 'EMail Notification'; $lang->mail->async = 'Async Sending'; $lang->mail->fromAddress = 'Sender Email'; $lang->mail->fromName = 'Sender'; -$lang->mail->domain = 'Zentao Domain'; +$lang->mail->domain = 'ZenTao Domain'; $lang->mail->host = 'SMTP Server'; $lang->mail->port = 'SMTP Port'; -$lang->mail->auth = 'Validation Required'; +$lang->mail->auth = 'SMTP Validation'; $lang->mail->username = 'SMTP Account'; $lang->mail->password = 'SMTP Password'; $lang->mail->secure = 'Encryption'; @@ -34,7 +34,7 @@ $lang->mail->accessKey = 'Access Key'; $lang->mail->secretKey = 'Secret Key'; $lang->mail->license = 'ZenTao Cloud Notice'; -$lang->mail->selectMTA = 'Select MTA(Mail Transfer Agent)'; +$lang->mail->selectMTA = 'Select MTA (Mail Transfer Agent)'; $lang->mail->smtp = 'SMTP'; $lang->mail->syncedUser = 'Synchronized'; @@ -42,12 +42,12 @@ $lang->mail->unsyncUser = 'Not Synchronized'; $lang->mail->sync = 'Synchronize'; $lang->mail->remove = 'Remove'; -$lang->mail->toList = 'Addressee'; +$lang->mail->toList = 'Recipient'; $lang->mail->ccList = 'Copy to'; $lang->mail->subject = 'Subject'; $lang->mail->createdBy = 'Sender'; -$lang->mail->createdDate = 'Added Date'; -$lang->mail->sendTime = 'Send Date'; +$lang->mail->createdDate = 'Added'; +$lang->mail->sendTime = 'Send'; $lang->mail->status = 'Status'; $lang->mail->failReason = 'Fail Reason'; @@ -64,8 +64,8 @@ $lang->mail->debugList[0] = 'Off'; $lang->mail->debugList[1] = 'Normal'; $lang->mail->debugList[2] = 'High'; -$lang->mail->authList[1] = 'Required'; -$lang->mail->authList[0] = 'Not Required'; +$lang->mail->authList[1] = 'Yes'; +$lang->mail->authList[0] = 'No'; $lang->mail->secureList[''] = 'Plain'; $lang->mail->secureList['ssl'] = 'ssl'; @@ -75,16 +75,16 @@ $lang->mail->more = 'More'; $lang->mail->noticeResend = 'Sent it again!'; $lang->mail->inputFromEmail = 'Sender Email'; $lang->mail->nextStep = 'Next'; -$lang->mail->successSaved = 'Configuration has been saved.'; +$lang->mail->successSaved = 'Setting is saved.'; $lang->mail->testSubject = 'Testing Email'; -$lang->mail->testContent = 'Email configured!'; +$lang->mail->testContent = 'Email is set!'; $lang->mail->successSended = 'Sent!'; $lang->mail->confirmDelete = 'Do you want to delete it?'; -$lang->mail->sendmailTips = 'Note: Email author will not receive this email.'; -$lang->mail->needConfigure = 'Email configuration is not found. Please cinfigure the Email first.'; +$lang->mail->sendmailTips = 'Note: Email sender will not receive this email.'; +$lang->mail->needConfigure = 'Email setting is not found. Please set up the Email first.'; $lang->mail->connectFail = 'Connection to ZenTao failed.'; $lang->mail->centifyFail = 'Verification failed. Please try to bind again!'; -$lang->mail->nofsocket = 'fsocket related function has been deactivated. Mails cannot send out. Please modify allow_url_fopen in php.ini to turn on Onopenssl, and restart Apache.'; +$lang->mail->nofsocket = 'fsocket related function has been deactivated. EMails cannot send out. Please modify allow_url_fopen in php.ini to turn on Onopenssl, and restart Apache.'; $lang->mail->noOpenssl = 'Please turn on Onopenssl, and restart Apache.'; $lang->mail->disableSecure = 'No openssl. Disable ssl and tls.'; $lang->mail->sendCloudFail = 'Failed. Reason:'; @@ -95,7 +95,7 @@ $lang->mail->sendCloudHelp = <<mail->sendCloudSuccess = 'Done'; $lang->mail->closeSendCloud = 'Close'; -$lang->mail->addressWhiteList = 'Please add to the whilte list of email server to avoid being blocked'; +$lang->mail->addressWhiteList = 'Add email address to the whiltelist of email server to avoid being blocked'; $lang->mail->ztCloudNotice = <<mail->ztCloudNotice = <<mail->placeholder = new stdclass(); -$lang->mail->placeholder->password = 'Some mail server needs auth code, refer to your mail supplier.'; +$lang->mail->placeholder->password = 'Some Email servers require auth code, refer to your Email service provider.'; From 08f9a09730f22f900cf0915ccfb54a42f82de55f Mon Sep 17 00:00:00 2001 From: Yagami <976204163@qq.com> Date: Fri, 15 Mar 2019 13:27:22 +0800 Subject: [PATCH 324/442] * Fix bug #2467. --- module/task/control.php | 1 + 1 file changed, 1 insertion(+) diff --git a/module/task/control.php b/module/task/control.php index 125b9c4c80..58b841f261 100644 --- a/module/task/control.php +++ b/module/task/control.php @@ -1271,6 +1271,7 @@ class task extends control if($this->session->taskOnlyCondition) { $tasks = $this->dao->select('*')->from(TABLE_TASK)->alias('t1')->where($this->session->taskQueryCondition) + ->andWhere('parent')->le(0) ->beginIF($this->post->exportType == 'selected')->andWhere('t1.id')->in($this->cookie->checkedItem)->fi() ->orderBy($sort)->fetchAll('id'); From eadba8d52edbfa343d98bf46b1137f914f620491 Mon Sep 17 00:00:00 2001 From: reneeteng Date: Fri, 15 Mar 2019 14:39:36 +0800 Subject: [PATCH 325/442] * Lang change. --- module/custom/lang/en.php | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/module/custom/lang/en.php b/module/custom/lang/en.php index 2ea43fdf79..49d836a677 100644 --- a/module/custom/lang/en.php +++ b/module/custom/lang/en.php @@ -2,7 +2,7 @@ $lang->custom->common = 'Custom'; $lang->custom->index = 'Home'; $lang->custom->set = 'Customize'; -$lang->custom->restore = 'Reset to Default'; +$lang->custom->restore = 'Reset'; $lang->custom->key = 'Key'; $lang->custom->value = 'Value'; $lang->custom->flow = 'Workflow'; @@ -32,7 +32,7 @@ $lang->custom->story = new stdClass(); $lang->custom->story->fields['priList'] = 'Priority'; $lang->custom->story->fields['sourceList'] = 'Source'; $lang->custom->story->fields['reasonList'] = 'Close Reason'; -$lang->custom->story->fields['stageList'] = 'Phase'; +$lang->custom->story->fields['stageList'] = 'Stage'; $lang->custom->story->fields['statusList'] = 'Status'; $lang->custom->story->fields['reviewResultList'] = 'Review Result'; $lang->custom->story->fields['review'] = 'Review Required'; @@ -50,7 +50,7 @@ $lang->custom->bug->fields['severityList'] = 'Severity'; $lang->custom->bug->fields['osList'] = 'OS'; $lang->custom->bug->fields['browserList'] = 'Browser'; $lang->custom->bug->fields['typeList'] = 'Type'; -$lang->custom->bug->fields['resolutionList'] = 'Solution'; +$lang->custom->bug->fields['resolutionList'] = 'Resolution'; $lang->custom->bug->fields['statusList'] = 'Status'; $lang->custom->bug->fields['longlife'] = 'Longlife days'; @@ -82,29 +82,29 @@ $lang->custom->block->fields['closed'] = 'Closed Block'; $lang->custom->currentLang = 'Current Language'; $lang->custom->allLang = 'All Language'; -$lang->custom->confirmRestore = 'Do you want to reset to Default?'; +$lang->custom->confirmRestore = 'Do you want to reset the settings?'; $lang->custom->notice = new stdclass(); -$lang->custom->notice->userFieldNotice = 'Control whether the above fields are displayed on the user-related page, and leave blank to display all'; +$lang->custom->notice->userFieldNotice = 'Control whether the above fields are displayed on the user-related page, and leave it blank to display all'; $lang->custom->notice->canNotAdd = 'It will be calculated, so customization is not enabled.'; -$lang->custom->notice->forceReview = '%s Review is required for certain submitters.'; -$lang->custom->notice->forceNotReview = "%s Review is NOT required for certain submitters."; +$lang->custom->notice->forceReview = '%s Review is required for certain committers.'; +$lang->custom->notice->forceNotReview = "%s Review is NOT required for certain committers."; $lang->custom->notice->longlife = 'Define longlife bugs.'; $lang->custom->notice->invalidNumberKey = 'The key should be =< 255.'; $lang->custom->notice->invalidStringKey = 'The key should be a combination of lowercase letters, numbers or underlines.'; -$lang->custom->notice->cannotSetTimezone = 'date_default_timezone_set does not exist or is disabled. Time zone cannot be set.'; +$lang->custom->notice->cannotSetTimezone = 'date_default_timezone_set does not exist or is disabled. Timezone cannot be set.'; -$lang->custom->notice->indexPage['product'] = "ZenTao 8.2+ has Product Homepage. Do you want to go to Product Homepage?"; -$lang->custom->notice->indexPage['project'] = "ZenTao 8.2+ has Project Homepage. Do you want to go to Project Homepage?"; +$lang->custom->notice->indexPage['product'] = "ZenTao 8.2+ has Product Home. Do you want to go to Product Home?"; +$lang->custom->notice->indexPage['project'] = "ZenTao 8.2+ has Project Home. Do you want to go to Project Home?"; $lang->custom->notice->indexPage['qa'] = "ZenTao 8.2+ has QA Homepage. Do you want to go to QA Homepage?"; -$lang->custom->notice->invalidStrlen['ten'] = 'The length of the key must be less than 10 characters.'; -$lang->custom->notice->invalidStrlen['twenty'] = 'The length of the key must be less than 20 characters.'; -$lang->custom->notice->invalidStrlen['thirty'] = 'The length of the key must be less than 30 characters.'; -$lang->custom->notice->invalidStrlen['twoHundred'] = 'The length of the key must be less than 225 characters.'; +$lang->custom->notice->invalidStrlen['ten'] = 'The key should be <= 10 characters.'; +$lang->custom->notice->invalidStrlen['twenty'] = 'The key should be <= 20 characters.'; +$lang->custom->notice->invalidStrlen['thirty'] = 'The key should be <= 30 characters.'; +$lang->custom->notice->invalidStrlen['twoHundred'] = 'The key should be <= 225 characters.'; $lang->custom->storyReview = 'Review'; -$lang->custom->forceReview = 'Selective Review'; +$lang->custom->forceReview = 'Required Review'; $lang->custom->forceNotReview = 'No review'; $lang->custom->reviewList[1] = 'On'; $lang->custom->reviewList[0] = 'Off'; From 12cd13270b35aa048c49b72a90f5c79a4a572b9c Mon Sep 17 00:00:00 2001 From: wangyidong Date: Mon, 18 Mar 2019 09:46:41 +0800 Subject: [PATCH 326/442] * adjust for office. --- module/doc/config.php | 1 - module/doc/js/create.js | 14 +++++++++++--- module/doc/view/create.html.php | 2 +- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/module/doc/config.php b/module/doc/config.php index b93e631848..7373514c83 100644 --- a/module/doc/config.php +++ b/module/doc/config.php @@ -14,7 +14,6 @@ $config->doc->edit->requiredFields = 'title'; $config->doc->customObjectLibs = 'files,customFiles'; $config->doc->notArticleType = ''; -$config->doc->canCreateOffice = false; $config->doc->officeTypes = 'word,ppt,excel'; $config->doc->custom = new stdclass(); diff --git a/module/doc/js/create.js b/module/doc/js/create.js index 5cc44c388a..373dcea8d8 100644 --- a/module/doc/js/create.js +++ b/module/doc/js/create.js @@ -16,10 +16,13 @@ $(function() $('#urlBox').removeClass('hidden'); } }); - window.editor['content'].addListener('ready', function() + if(typeof(window.editor) != 'undefined') { - $('div#content .edui-toolbar').append("
            Markdown
            "); - }); + window.editor['content'].addListener('ready', function() + { + $('div#content .edui-toolbar').append("
            Markdown
            "); + }); + } }) function toggleHover(obj) @@ -59,4 +62,9 @@ function initPage(type) $('#contentBox').addClass('hidden'); $('#urlBox').removeClass('hidden'); } + if(type == 'word' || type == 'ppt' || type == 'excel') + { + if($('#contentBox')).hide(); + if($('#urlBox')).hide(); + } } diff --git a/module/doc/view/create.html.php b/module/doc/view/create.html.php index 97835583f0..20f78b58ee 100644 --- a/module/doc/view/create.html.php +++ b/module/doc/view/create.html.php @@ -10,7 +10,7 @@ * @link http://www.zentao.net */ ?> -doc->officeTypes, $docType) !== false and !$config->doc->canCreateOffice):?> +doc->officeTypes, $docType) !== false):?>
            From 641c3d5890bc45809b75a4e272502a240084af1c Mon Sep 17 00:00:00 2001 From: wangyidong Date: Mon, 18 Mar 2019 09:51:28 +0800 Subject: [PATCH 327/442] * finish task #5358. --- module/misc/lang/en.php | 2 +- module/testreport/lang/en.php | 2 +- module/testreport/lang/zh-cn.php | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/module/misc/lang/en.php b/module/misc/lang/en.php index 1ba29db38d..ca9733fbca 100644 --- a/module/misc/lang/en.php +++ b/module/misc/lang/en.php @@ -139,7 +139,7 @@ $lang->misc->feature->all['9.5.1'][] = array('title'=>'added Restricted Operatio $lang->misc->feature->all['9.3.beta'][] = array('title'=>'upgraded framework,Enhanced security', 'desc' => ''); -$lang->misc->feature->all['9.1.stable'][] = array('title'=>'optimize Test View', 'desc' => '

            added TestSuite,CaseLib and Test Statements

            '); +$lang->misc->feature->all['9.1.stable'][] = array('title'=>'optimize Test View', 'desc' => '

            added TestSuite,CaseLib and QA Report

            '); $lang->misc->feature->all['9.1.stable'][] = array('title'=>'support Group steps of TestCase', 'desc' => ''); $lang->misc->feature->all['9.0.beta'][] = array('title'=>'ZenTao CloudMail has been added.', 'desc' => '

            ZenTao CloudMail is a free Email service launched jointly with SendCloud. Once binded with ZenTao and passed verification, users can use this service.

            '); diff --git a/module/testreport/lang/en.php b/module/testreport/lang/en.php index bc06d8eeb1..ee550aac30 100644 --- a/module/testreport/lang/en.php +++ b/module/testreport/lang/en.php @@ -60,7 +60,7 @@ $lang->testreport->buildSummary = 'Tested %s build.'; $lang->testreport->confirmDelete = 'Do you want to delete this report?'; $lang->testreport->moreNotice = 'More features can be extended with reference to the ZenTao manual, or you can contact us at renee@easysoft.ltd for customization.'; $lang->testreport->exportNotice = "Exported By ZenTao"; -$lang->testreport->noReport = "No report has been generated. Please check later."; +$lang->testreport->noReport = "No report has been generated yet."; $lang->testreport->foundBugTip = "Bugs reported in this build and in this test."; $lang->testreport->legacyBugTip = "Active Bugs, or bugs that are resolved after this test is done."; $lang->testreport->fromCaseBugTip = "Bugs reported due to failed cases in this test."; diff --git a/module/testreport/lang/zh-cn.php b/module/testreport/lang/zh-cn.php index 57f8f1234b..76d56b4165 100644 --- a/module/testreport/lang/zh-cn.php +++ b/module/testreport/lang/zh-cn.php @@ -60,7 +60,7 @@ $lang->testreport->buildSummary = '共测试了%s个版本。 $lang->testreport->confirmDelete = '是否删除该报告?'; $lang->testreport->moreNotice = '更多功能可以参考禅道扩展机制进行扩展,也可以联系我们进行定制。'; $lang->testreport->exportNotice = "由禅道项目管理软件导出"; -$lang->testreport->noReport = "报表还没有生成,请稍候查看。"; +$lang->testreport->noReport = "报表还没有生成。"; $lang->testreport->foundBugTip = "影响版本在测试轮次内,并且创建时间在测试时间范围内产生的Bug数。"; $lang->testreport->legacyBugTip = "Bug状态是激活,或Bug的解决时间在测试结束时间之后。"; $lang->testreport->fromCaseBugTip = "测试时间范围内,用例执行失败后创建的Bug。"; From 62249b0782a406ccd42cd1ea2b5f54958c342e84 Mon Sep 17 00:00:00 2001 From: Yagami <976204163@qq.com> Date: Mon, 18 Mar 2019 11:17:57 +0800 Subject: [PATCH 328/442] * Finish task #5316. --- module/task/model.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/module/task/model.php b/module/task/model.php index f9fa8a0a7d..9fbad06ba0 100644 --- a/module/task/model.php +++ b/module/task/model.php @@ -72,6 +72,8 @@ class taskModel extends model if($projectType == 'ops')unset($requiredFields[array_search("story", $requiredFields)]); $requiredFields =implode(',', $requiredFields); + /* Fix Bug #2466 */ + if($this->post->multiple) $task->assignedTo = ''; $this->dao->insert(TABLE_TASK)->data($task) ->autoCheck() ->batchCheck($requiredFields, 'notempty') From 7004af89d90c784396e6a73fb730e56a31d538c4 Mon Sep 17 00:00:00 2001 From: Yagami <976204163@qq.com> Date: Mon, 18 Mar 2019 15:48:30 +0800 Subject: [PATCH 329/442] * Finish task #5327. --- module/task/lang/en.php | 1 + module/task/lang/zh-cn.php | 1 + module/task/model.php | 9 ++++++++- module/task/view/edit.html.php | 6 ++++++ module/testtask/control.php | 3 ++- 5 files changed, 18 insertions(+), 2 deletions(-) diff --git a/module/task/lang/en.php b/module/task/lang/en.php index 66ad02f76b..7e346bb27d 100644 --- a/module/task/lang/en.php +++ b/module/task/lang/en.php @@ -106,6 +106,7 @@ $lang->task->team = 'Team'; $lang->task->transfer = 'Transfer'; $lang->task->transferTo = 'Transfer To'; $lang->task->children = 'Child Task'; +$lang->task->unlinkParent = 'Unlink Parent'; $lang->task->childrenAB = 'Child'; $lang->task->parent = 'Parent Task'; $lang->task->parentAB = 'Parent Task'; diff --git a/module/task/lang/zh-cn.php b/module/task/lang/zh-cn.php index 3f6da571f9..324c6aba9d 100644 --- a/module/task/lang/zh-cn.php +++ b/module/task/lang/zh-cn.php @@ -106,6 +106,7 @@ $lang->task->team = '团队'; $lang->task->transfer = '转交'; $lang->task->transferTo = '转交给'; $lang->task->children = '子任务'; +$lang->task->unlinkParent = '取消子任务'; $lang->task->childrenAB = '子'; $lang->task->parent = '父任务'; $lang->task->parentAB = '父'; diff --git a/module/task/model.php b/module/task/model.php index 9fbad06ba0..c67c12a8b6 100644 --- a/module/task/model.php +++ b/module/task/model.php @@ -617,12 +617,13 @@ class taskModel extends model ->setIF($this->post->assignedTo != $oldTask->assignedTo, 'assignedDate', $now) ->setIF($this->post->status == 'wait' and $this->post->left == $oldTask->left and $this->post->consumed == 0 and $this->post->estimate, 'left', $this->post->estimate) + ->setIF(isset($_POST['unlinkParent']), 'parent', 0) ->setDefault('lastEditedBy', $this->app->user->account) ->add('lastEditedDate', $now) ->stripTags($this->config->task->editor->edit['id'], $this->config->allowedTags) ->join('mailto', ',') - ->remove('comment,files,labels,uid,multiple,team,teamEstimate,teamConsumed,teamLeft,contactListMenu') + ->remove('comment,files,labels,uid,multiple,team,teamEstimate,teamConsumed,teamLeft,contactListMenu,unlinkParent') ->get(); if($task->consumed < $oldTask->consumed) die(js::error($this->lang->task->error->consumedSmall)); @@ -698,6 +699,7 @@ class taskModel extends model if($oldTask->parent > 0) { + if($task->parent == 0) $this->computeWorkingHours($oldTask->parent); $this->updateParentStatus($taskID); $this->computeBeginAndEnd($oldTask->parent); } @@ -1652,6 +1654,11 @@ class taskModel extends model ->andWhere('project')->eq($projectID) ->fetchPairs(); + foreach($tasks as $id => $name) + { + $taskTeam = $this->dao->select('*')->from(TABLE_TEAM)->where('root')->eq($id)->andWhere('type')->eq('task')->fetch(); + if(!empty($taskTeam)) unset($tasks[$id]); + } return array('' => '') + $tasks ; } diff --git a/module/task/view/edit.html.php b/module/task/view/edit.html.php index 031f97f5e3..b588ea1f19 100644 --- a/module/task/view/edit.html.php +++ b/module/task/view/edit.html.php @@ -109,6 +109,12 @@
            + parent > 0):?> + + + + + diff --git a/module/testtask/control.php b/module/testtask/control.php index ca2336527a..9fb853c21c 100644 --- a/module/testtask/control.php +++ b/module/testtask/control.php @@ -832,7 +832,8 @@ class testtask extends control $caseResult = $this->testtask->createResult($runID); if(dao::isError()) die(js::error(dao::getError())); - if($caseResult == 'fail') { + if($caseResult == 'fail') + { $response['result'] = 'success'; $response['locate'] = $this->createLink('testtask', 'results',"runID=$runID&caseID=$caseID&version=$version"); From dddd4d0c72c56f16a579c93ef44a1784942276bc Mon Sep 17 00:00:00 2001 From: Yagami <976204163@qq.com> Date: Mon, 18 Mar 2019 16:48:05 +0800 Subject: [PATCH 330/442] * Add showdoc type. --- module/doc/config.php | 2 +- module/doc/lang/en.php | 1 + module/doc/lang/zh-cn.php | 1 + module/doc/view/create.html.php | 2 +- 4 files changed, 4 insertions(+), 2 deletions(-) diff --git a/module/doc/config.php b/module/doc/config.php index 7373514c83..e6807e4a7c 100644 --- a/module/doc/config.php +++ b/module/doc/config.php @@ -18,7 +18,7 @@ $config->doc->officeTypes = 'word,ppt,excel'; $config->doc->custom = new stdclass(); $config->doc->custom->objectLibs = $config->doc->customObjectLibs; -$config->doc->custom->showLibs = 'zero'; +$config->doc->custom->showLibs = 'zero,children'; $config->doc->editor = new stdclass(); $config->doc->editor->create = array('id' => 'content', 'tools' => 'fullTools'); diff --git a/module/doc/lang/en.php b/module/doc/lang/en.php index 23c62ae02b..4ff27480d0 100644 --- a/module/doc/lang/en.php +++ b/module/doc/lang/en.php @@ -152,6 +152,7 @@ $lang->doc->customObjectLibs['customFiles'] = 'Show Custom Library'; $lang->doc->orderLib = 'Library order settings'; $lang->doc->customShowLibs = 'Library display settings'; $lang->doc->customShowLibsList['zero'] = 'Display empty library'; +$lang->doc->customShowLibsList['children'] = 'Display sub-category documents'; $lang->doc->customShowLibsList['unclosed'] = 'Only display projects that are not closed'; $lang->doc->confirmDelete = "Do you want to delete this document?"; diff --git a/module/doc/lang/zh-cn.php b/module/doc/lang/zh-cn.php index c00c3d427b..66a2675372 100644 --- a/module/doc/lang/zh-cn.php +++ b/module/doc/lang/zh-cn.php @@ -152,6 +152,7 @@ $lang->doc->customObjectLibs['customFiles'] = '显示自定义文档库'; $lang->doc->orderLib = '文档库排序'; $lang->doc->customShowLibs = '显示设置'; $lang->doc->customShowLibsList['zero'] = '显示空文档的库'; +$lang->doc->customShowLibsList['children'] = '显示子分类的文档'; $lang->doc->customShowLibsList['unclosed'] = '只显示未关闭的项目'; $lang->doc->confirmDelete = "您确定删除该文档吗?"; diff --git a/module/doc/view/create.html.php b/module/doc/view/create.html.php index 20f78b58ee..2a50a45c17 100644 --- a/module/doc/view/create.html.php +++ b/module/doc/view/create.html.php @@ -10,7 +10,7 @@ * @link http://www.zentao.net */ ?> -doc->officeTypes, $docType) !== false):?> +doc->officeTypes, $docType) !== false):?>
            From e925ae51e9327427d9492c134c1ca9116d2cf889 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Mon, 18 Mar 2019 16:55:58 +0800 Subject: [PATCH 331/442] * finish task #5325. --- module/task/control.php | 9 ++++++ module/task/css/create.css | 5 ++++ module/task/js/create.js | 50 ++++++++++++++++++++++++++++++-- module/task/lang/en.php | 6 ++-- module/task/lang/zh-cn.php | 2 ++ module/task/model.php | 48 ++++++++++++++++++++++++++---- module/task/view/create.html.php | 47 +++++++++++++++++++++++++++++- 7 files changed, 157 insertions(+), 10 deletions(-) diff --git a/module/task/control.php b/module/task/control.php index 58b841f261..684a4087c3 100644 --- a/module/task/control.php +++ b/module/task/control.php @@ -177,6 +177,14 @@ class task extends control $members = $this->project->getTeamMemberPairs($projectID, 'nodeleted'); $moduleOptionMenu = $this->tree->getTaskOptionMenu($projectID); + /* Get no test stories. */ + $testStoryIdList = $this->dao->select('story')->from(TABLE_TASK)->where('project')->eq($projectID)->andWhere('story')->in(array_keys($stories))->fetchPairs('story', 'story'); + $noTestStories = array(); + foreach($stories as $id => $title) + { + if(!isset($testStoryIdList[$id])) $noTestStories[$id] = $title; + } + $title = $project->name . $this->lang->colon . $this->lang->task->create; $position[] = html::a($taskLink, $project->name); $position[] = $this->lang->task->common; @@ -196,6 +204,7 @@ class task extends control $this->view->task = $task; $this->view->users = $users; $this->view->stories = $stories; + $this->view->noTestStories = $noTestStories; $this->view->members = $members; $this->view->moduleOptionMenu = $moduleOptionMenu; $this->display(); diff --git a/module/task/css/create.css b/module/task/css/create.css index d63830043b..5cc7ee5bbd 100644 --- a/module/task/css/create.css +++ b/module/task/css/create.css @@ -7,3 +7,8 @@ .pri-selector > .btn {padding: 5px 8px!important; width: 100%;} .pri-selector > .dropdown-menu {padding: 10px;} + +#testStoryBox table tr td{padding:0px;} +#testStoryBox table tr td .chosen-container .chosen-single{border:0px;} +#testStoryBox table tr td input{border:0px;} +#testStoryBox table tr td .input-group .input-group-addon{border-left:1px solid #dcdcdc;border-right:1px solid #dcdcdc;} diff --git a/module/task/js/create.js b/module/task/js/create.js index 0c67732bcd..3fdc092a2c 100644 --- a/module/task/js/create.js +++ b/module/task/js/create.js @@ -230,6 +230,48 @@ function setStories(moduleID, projectID) }); } +function toggleSelectTestStory() +{ + if(!$('#selectTestStoryBox').hasClass('hidden') && $('#selectTestStory').prop('checked')) + { + $('#module').closest('tr').addClass('hidden'); + $('#multipleBox').closest('td').addClass('hidden'); + $('#story').closest('tr').addClass('hidden'); + $('#estStarted').closest('tr').addClass('hidden'); + $('#estimate').closest('.table-col').addClass('hidden'); + $('#testStoryBox').removeClass('hidden'); + } + else + { + $('#module').closest('tr').removeClass('hidden'); + $('#multipleBox').closest('td').removeClass('hidden'); + $('#story').closest('tr').removeClass('hidden'); + $('#estStarted').closest('tr').removeClass('hidden'); + $('#estimate').closest('.table-col').removeClass('hidden'); + $('#testStoryBox').addClass('hidden'); + } +} + +function addItem(obj) +{ + var $tr = $(obj).closest('tr'); + $tr.after($tr.clone()); + var $nextTr = $tr.next(); + $nextTr.find('#testAssignedTo').val($('#assignedTo').val()); + $nextTr.find('#testStory').closest('td').find('.chosen-container').remove(); + $nextTr.find('#testStory').closest('td').find('select').chosen(); + $nextTr.find('#testPri').closest('td').find('.chosen-container').remove(); + $nextTr.find('#testPri').closest('td').find('select').chosen(); + $nextTr.find('#testAssignedTo').closest('td').find('.chosen-container').remove(); + $nextTr.find('#testAssignedTo').closest('td').find('select').chosen(); + $nextTr.find('.form-date').datepicker(); +} + +function removeItem(obj) +{ + if($(obj).closest('table').find('tbody tr').size() > 1) $(obj).closest('tr').remove(); +} + $(document).ready(function() { $('#pri').on('change', function() @@ -239,11 +281,16 @@ $(document).ready(function() var value = $select.val(); $selector.find('.pri-text').html('' + value + ''); }); + $('#type').change(function() + { + $('#selectTestStoryBox').toggleClass('hidden', $(this).val() != 'test'); + toggleSelectTestStory(); + }); setStoryRelated(); $('#selectAllUser').on('click', function() - { + { var $assignedTo = $('#assignedTo'); if($assignedTo.attr('multiple')) { @@ -273,7 +320,6 @@ $(document).ready(function() } }); - /* Init task team manage dialog */ var $taskTeamEditor = $('#taskTeamEditor').batchActionForm( { diff --git a/module/task/lang/en.php b/module/task/lang/en.php index 66ad02f76b..6eae7ef57d 100644 --- a/module/task/lang/en.php +++ b/module/task/lang/en.php @@ -111,9 +111,11 @@ $lang->task->parent = 'Parent Task'; $lang->task->parentAB = 'Parent Task'; $lang->task->lblPri = 'P'; $lang->task->lblHour = '(h)'; +$lang->task->lblTestStory = 'Test Story'; $lang->task->ditto = 'Ditto'; $lang->task->dittoNotice = "This Task does not belong to the Project as the previous one does!"; +$lang->task->selectTestStory = 'Select Test Story'; $lang->task->selectAllUser = 'All'; $lang->task->noStory = 'No Story'; $lang->task->noAssigned = 'Unassigned'; @@ -270,5 +272,5 @@ $lang->task->report->tasksPerConsumed->graph->xAxisName = 'Cost'; $lang->task->report->tasksPerFinishedBy->graph->xAxisName = 'User'; $lang->task->report->tasksPerClosedReason->graph->xAxisName = 'Close Reason'; -$lang->task->report->finishedTasksPerDay->type = 'bar'; -$lang->task->report->finishedTasksPerDay->graph->xAxisName = 'Date'; +$lang->task->report->finishedTasksPerDay->type = 'bar'; +$lang->task->report->finishedTasksPerDay->graph->xAxisName = 'Date'; diff --git a/module/task/lang/zh-cn.php b/module/task/lang/zh-cn.php index 3f6da571f9..91de8cf4ff 100644 --- a/module/task/lang/zh-cn.php +++ b/module/task/lang/zh-cn.php @@ -111,9 +111,11 @@ $lang->task->parent = '父任务'; $lang->task->parentAB = '父'; $lang->task->lblPri = 'P'; $lang->task->lblHour = '(h)'; +$lang->task->lblTestStory = '测试需求'; $lang->task->ditto = '同上'; $lang->task->dittoNotice = "该任务与上一任务不属于同一项目!"; +$lang->task->selectTestStory = '选择测试需求'; $lang->task->selectAllUser = '全部'; $lang->task->noStory = '无需求'; $lang->task->noAssigned = '未指派'; diff --git a/module/task/model.php b/module/task/model.php index f9fa8a0a7d..f0a9eb281a 100644 --- a/module/task/model.php +++ b/module/task/model.php @@ -42,7 +42,7 @@ class taskModel extends model ->setDefault('openedDate', helper::now()) ->stripTags($this->config->task->editor->create['id'], $this->config->allowedTags) ->join('mailto', ',') - ->remove('after,files,labels,assignedTo,uid,storyEstimate,storyDesc,storyPri,team,teamEstimate,teamMember,multiple,teams,contactListMenu') + ->remove('after,files,labels,assignedTo,uid,storyEstimate,storyDesc,storyPri,team,teamEstimate,teamMember,multiple,teams,contactListMenu,selectTestStory,testStory,testPri,testEstStarted,testDeadline,testAssignedTo,testEstimate') ->get(); foreach($this->post->assignedTo as $assignedTo) @@ -67,10 +67,17 @@ class taskModel extends model $task = $this->file->processImgURL($task, $this->config->task->editor->create['id'], $this->post->uid); /* Fix Bug #1525 */ - $projectType =$this->dao->select('*')->from(TABLE_PROJECT)->where('id')->eq($projectID)->fetch('type'); - $requiredFields =explode(',', $this->config->task->create->requiredFields); - if($projectType == 'ops')unset($requiredFields[array_search("story", $requiredFields)]); - $requiredFields =implode(',', $requiredFields); + $projectType = $this->dao->select('*')->from(TABLE_PROJECT)->where('id')->eq($projectID)->fetch('type'); + $requiredFields = "," . $this->config->task->create->requiredFields . ","; + if($projectType == 'ops') $requiredFields = str_replace(",story,", ',', "$requiredFields"); + if($this->post->selectTestStory) + { + $requiredFields = str_replace(",estimate,", ',', "$requiredFields"); + $requiredFields = str_replace(",story,", ',', "$requiredFields"); + $requiredFields = str_replace(",estStarted,", ',', "$requiredFields"); + $requiredFields = str_replace(",deadline,", ',', "$requiredFields"); + } + $requiredFields = trim($requiredFields, ','); $this->dao->insert(TABLE_TASK)->data($task) ->autoCheck() @@ -83,6 +90,37 @@ class taskModel extends model $taskID = $this->dao->lastInsertID(); if($this->post->story) $this->loadModel('story')->setStage($this->post->story); + if($this->post->selectTestStory) + { + $testStoryIdList = array(); + $this->loadModel('action'); + foreach($this->post->testStory as $storyID) + { + if($storyID) $testStoryIdList[$storyID] = $storyID; + } + $testStories = $this->dao->select('id,title')->from(TABLE_STORY)->where('id')->in($testStoryIdList)->fetchPairs('id', 'title'); + foreach($this->post->testStory as $i => $storyID) + { + if(!isset($testStories[$storyID])) continue; + + $task->parent = $taskID; + $task->story = $storyID; + $task->name = $this->lang->task->lblTestStory . " #{$storyID} " . zget($testStories, $storyID); + $task->pri = $this->post->testPri[$i]; + $task->estStarted = $this->post->testEstStarted[$i]; + $task->deadline = $this->post->testDeadline[$i]; + $task->assignedTo = $this->post->testAssignedTo[$i]; + $task->estimate = $this->post->testEstimate[$i]; + $this->dao->insert(TABLE_TASK)->data($task)->exec(); + + $childTaskID = $this->dao->lastInsertID(); + $this->action->create('task', $childTaskID, 'Opened'); + } + + $this->computeWorkingHours($taskID); + $this->computeBeginAndEnd($taskID); + $this->dao->update(TABLE_TASK)->set('parent')->eq(-1)->where('id')->eq($taskID)->exec(); + } $this->file->updateObjectID($this->post->uid, $taskID, 'task'); if(!empty($taskFiles)) { diff --git a/module/task/view/create.html.php b/module/task/view/create.html.php index 8ca7f67ba2..d762a6ffca 100644 --- a/module/task/view/create.html.php +++ b/module/task/view/create.html.php @@ -32,7 +32,12 @@
            - + + @@ -69,6 +74,46 @@ + + + + - - + + From 48bb8fea4e53f4a7aa67cb6f120b8910d286cdb8 Mon Sep 17 00:00:00 2001 From: Yagami <976204163@qq.com> Date: Tue, 19 Mar 2019 16:59:36 +0800 Subject: [PATCH 342/442] * Finish task #5342. --- module/doc/js/edit.js | 5 +++++ module/doc/view/edit.html.php | 1 + 2 files changed, 6 insertions(+) diff --git a/module/doc/js/edit.js b/module/doc/js/edit.js index 525da538a0..39e5b0b754 100644 --- a/module/doc/js/edit.js +++ b/module/doc/js/edit.js @@ -1,5 +1,10 @@ $(function() { + $('#top-submit').click(function() + { + $(this).addClass('disabled'); + $('form').submit(); + }) toggleAcl($('input[name="acl"]:checked').val(), 'doc'); $('input[name="type"]').change(function() { diff --git a/module/doc/view/edit.html.php b/module/doc/view/edit.html.php index c08a6bedd9..bdb1d248ad 100644 --- a/module/doc/view/edit.html.php +++ b/module/doc/view/edit.html.php @@ -21,6 +21,7 @@ createLink('doc', 'view', "docID=$doc->id"), $doc->title, '', "title='$doc->title'");?> arrow . ' ' . $lang->doc->edit;?> +
            save, '', 'id="top-submit" class="btn btn-primary"');?>
            testcase->fromBug;?>testcase->fromBug;?> createLink('bug', 'view', "bugID=$case->fromBug", '', true), $case->fromBugTitle, '', "class='iframe' data-width='80%'");?>
            testcase->toBug;?>testcase->toBug;?> toBugs as $bugID => $bugTitle) @@ -293,9 +295,10 @@
            testcase->legendOpenAndEdit;?>
            + getClientLang() == 'en' ? 'w-90px' : 'w-60px';?> - + testcase->needReview or !empty($config->testcase->forceReview)):?> From 8ec8643dd6e7493f040ce76bc985e2e34aec56da Mon Sep 17 00:00:00 2001 From: chenfeiCF Date: Wed, 27 Feb 2019 10:22:53 +0800 Subject: [PATCH 284/442] * Adjust doc lib acl. --- module/doc/css/createlib.css | 3 +++ module/doc/js/common.js | 2 +- module/doc/js/createlib.js | 19 ++++++++++++++-- module/doc/js/editlib.js | 2 +- module/doc/lang/zh-cn.php | 20 +++++++++++------ module/doc/model.php | 19 +++++++++------- module/doc/view/createlib.html.php | 36 +++++++++++++++++++----------- module/doc/view/editlib.html.php | 9 +++++++- module/testsuite/js/createcase.js | 8 +++++++ module/upgrade/model.php | 18 +++++++++++++++ 10 files changed, 103 insertions(+), 33 deletions(-) diff --git a/module/doc/css/createlib.css b/module/doc/css/createlib.css index e9a3a45c98..056a6984f3 100644 --- a/module/doc/css/createlib.css +++ b/module/doc/css/createlib.css @@ -3,3 +3,6 @@ form{margin-bottom:100px; padding-left:65px} table{width:90% !important} #whiteListBox div.input-group {margin-bottom: 2px;} + +#product_chosen{width: 50%!important} +#project_chosen{width: 50%!important} diff --git a/module/doc/js/common.js b/module/doc/js/common.js index e81305c241..58eee4826e 100644 --- a/module/doc/js/common.js +++ b/module/doc/js/common.js @@ -16,7 +16,7 @@ function toggleAcl(acl, type) } if(type == 'lib') { - var libType = $('input[name="type"]').val(); + var libType = $('input[name="type"]:checked').val(); var notice = typeof(noticeAcl[libType][acl]) != 'undefined' ? noticeAcl[libType][acl] : ''; $('#noticeAcl').html(notice); } diff --git a/module/doc/js/createlib.js b/module/doc/js/createlib.js index 2d000782e0..035e419372 100644 --- a/module/doc/js/createlib.js +++ b/module/doc/js/createlib.js @@ -6,7 +6,7 @@ $(function() changeByLibType(libType); }) changeByLibType($('input[name="type"]').val()); - toggleAcl($('[name=acl]').val(), 'lib'); + toggleAcl($('form [name=acl]:checked').val(), 'lib'); }); function changeByLibType(libType) @@ -15,19 +15,34 @@ function changeByLibType(libType) { $('table tr.product').removeClass('hidden'); $('table tr.project').addClass('hidden'); + changeDoclibAcl(libType); } else if(libType == 'project') { $('table tr.product').addClass('hidden'); $('table tr.project').removeClass('hidden'); + changeDoclibAcl(libType); } else { $('table tr.product').addClass('hidden'); $('table tr.project').addClass('hidden'); + changeDoclibAcl(libType); } - var acl = $('[name=acl]').val(); + var acl = $('form [name=acl]').val(); var notice = typeof(noticeAcl[libType][acl]) != 'undefined' ? noticeAcl[libType][acl] : ''; $('#noticeAcl').html(notice); } + +function changeDoclibAcl(libType) +{ + if(libType == 'product' || libType == 'project') + { + $('form input[name="acl"]').closest('td').find('span:first').html($('#aclBoxA td').html()); + } + else + { + $('form input[name="acl"]').closest('td').find('span:first').html($('#aclBoxB td').html()); + } +} diff --git a/module/doc/js/editlib.js b/module/doc/js/editlib.js index ee655f0aa9..94dc79004d 100644 --- a/module/doc/js/editlib.js +++ b/module/doc/js/editlib.js @@ -1,4 +1,4 @@ $(function() { - toggleAcl($('input[name="acl"]').val(), 'lib'); + toggleAcl($('form input[name="acl"]:checked').val(), 'lib'); }) diff --git a/module/doc/lang/zh-cn.php b/module/doc/lang/zh-cn.php index c326493948..fb8cefbd31 100644 --- a/module/doc/lang/zh-cn.php +++ b/module/doc/lang/zh-cn.php @@ -169,17 +169,15 @@ $lang->doc->noEditedDoc = '您还没有编辑任何文档。'; $lang->doc->noOpenedDoc = '您还没有创建任何文档。'; $lang->doc->noCollectedDoc = '您还没有收藏任何文档。'; -$lang->doc->noticeAcl['lib']['product']['open'] = '除了没有关联产品权限的用户,都可以访问。'; -$lang->doc->noticeAcl['lib']['product']['custom'] = '白名单和有关联产品权限的用户可以访问。'; -$lang->doc->noticeAcl['lib']['product']['private'] = '创建人和有关联产品权限的用户可以访问。'; -$lang->doc->noticeAcl['lib']['project']['open'] = '除了没有关联项目权限的用户,都可以访问。'; -$lang->doc->noticeAcl['lib']['project']['custom'] = '白名单和有关联项目权限的用户可以访问。'; -$lang->doc->noticeAcl['lib']['project']['private'] = '创建人和有关联项目权限的用户可以访问。'; +$lang->doc->noticeAcl['lib']['product']['default'] = '有所选产品访问权限的用户可以访问。'; +$lang->doc->noticeAcl['lib']['product']['custom'] = '有所选产品访问权限或白名单里的用户可以访问。'; +$lang->doc->noticeAcl['lib']['project']['default'] = '有所选项目访问权限的用户可以访问。'; +$lang->doc->noticeAcl['lib']['project']['custom'] = '有所选项目访问权限或白名单里的用户可以访问。'; $lang->doc->noticeAcl['lib']['custom']['open'] = '所有人都可以访问。'; $lang->doc->noticeAcl['lib']['custom']['custom'] = '白名单的用户可以访问。'; $lang->doc->noticeAcl['lib']['custom']['private'] = '只有创建人可以访问。'; -$lang->doc->noticeAcl['doc']['open'] = '除了没有所属文档库权限的用户,都可以访问。'; +$lang->doc->noticeAcl['doc']['open'] = '有文档所属文档库访问权限的,都可以访问。'; $lang->doc->noticeAcl['doc']['custom'] = '白名单的用户可以访问。'; $lang->doc->noticeAcl['doc']['private'] = '只有自己可以访问。'; @@ -197,6 +195,14 @@ $lang->doclib->select = '选择文档库'; $lang->doclib->project = $lang->projectCommon . '库'; $lang->doclib->product = $lang->productCommon . '库'; +$lang->doclib->aclListA['default'] = '默认'; +$lang->doclib->aclListA['custom'] = '自定义'; + +$lang->doclib->aclListB['open'] = '公开'; +$lang->doclib->aclListB['custom'] = '自定义'; +$lang->doclib->aclListB['private'] = '私有'; + + $lang->doclib->create['product'] = '创建' . $lang->productCommon . '文档库'; $lang->doclib->create['project'] = '创建' . $lang->projectCommon . '文档库'; $lang->doclib->create['custom'] = '创建自定义文档库'; diff --git a/module/doc/model.php b/module/doc/model.php index 76aef30730..c7b6359195 100644 --- a/module/doc/model.php +++ b/module/doc/model.php @@ -847,12 +847,6 @@ class docModel extends model { if($this->app->user->admin) return true; - $acls = $this->app->user->rights['acls']; - if(!empty($object->product) and !empty($acls['products']) and !in_array($object->product, $acls['products'])) return false; - if(!empty($object->project) and !empty($acls['projects']) and !in_array($object->project, $acls['projects'])) return false; - - if($object->acl == 'open') return true; - $account = ',' . $this->app->user->account . ','; if(isset($object->addedBy) and $object->addedBy == $this->app->user->account) return true; if(isset($object->users) and strpos(",{$object->users},", $account) !== false) return true; @@ -872,8 +866,17 @@ class docModel extends model if(isset($extraDocLibs[$object->id])) return true; } - if(!empty($object->project)) return $this->loadModel('project')->checkPriv($object->project); - if(!empty($object->product)) return $this->loadModel('product')->checkPriv($object->product); + if(!empty($object->product) or !empty($object->project)) + { + $acls = $this->app->user->rights['acls']; + if(!empty($object->product) and !empty($acls['products']) and !in_array($object->product, $acls['products'])) return false; + if(!empty($object->project) and !empty($acls['projects']) and !in_array($object->project, $acls['projects'])) return false; + if(!empty($object->project)) return $this->loadModel('project')->checkPriv($object->project); + if(!empty($object->product)) return $this->loadModel('product')->checkPriv($object->product); + } + + if($object->acl == 'open') return true; + return false; } diff --git a/module/doc/view/createlib.html.php b/module/doc/view/createlib.html.php index e5fc5ba61e..e53b15beec 100644 --- a/module/doc/view/createlib.html.php +++ b/module/doc/view/createlib.html.php @@ -23,33 +23,31 @@
            testcase->openedBy;?>testcase->openedBy;?> openedBy] . $lang->at . $case->openedDate;?>
            - + - - - - + - - - - - - +
            doc->libType?>
            doc->product?>
            doclib->name?>
            doclib->control;?> - doc->aclList, 'open', "onchange='toggleAcl(this.value, \"lib\")'")?> - + doc->aclList, 'open', "onchange='toggleAcl(this.value, \"lib\")'")?> + doc->noticeAcl['lib']['product']['default'];?> +
            doc->noticeAcl['lib']['product']['open'];?>
            @@ -73,5 +67,21 @@
            + doc->noticeAcl['lib']);?> diff --git a/module/doc/view/editlib.html.php b/module/doc/view/editlib.html.php index ba55992f6e..e0b2c0d3ce 100644 --- a/module/doc/view/editlib.html.php +++ b/module/doc/view/editlib.html.php @@ -45,10 +45,17 @@
            doclib->control;?> - doc->aclList, $lib->acl, "onchange='toggleAcl(this.value, \"lib\")'")?> + doclib->aclListA, $lib->acl, "onchange='toggleAcl(this.value, \"lib\")'")?> doc->noticeAcl['lib'][$lib->type][$lib->acl];?> + doclib->aclListB, $lib->acl, "onchange='toggleAcl(this.value, \"lib\")'")?> + doc->noticeAcl['lib'][$lib->type][$lib->acl];?> +
            doc->libName?> - name, "class='form-control'"); - echo html::hidden('type', $lib->type); - ?> + name, "class='form-control'");?> +
            parent, "class='form-control chosen'");?>
            task->unlinkParent;?>
            task->assignedTo;?> assignedTo, "class='form-control chosen'");?>
            task->type;?>task->typeList, $task->type, "class='form-control chosen' onchange='setOwners(this.value)' required");?>task->typeList, $task->type, "class='form-control chosen' onchange='setOwners(this.value)' required");?> + +
            task->module;?>
            task->name;?> From b78df3b7a75221175e4c8c667922c9f47c9bc690 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Mon, 18 Mar 2019 16:56:56 +0800 Subject: [PATCH 332/442] * update zentao-integrated package. --- .../www/data/xuanxuan/zentao-integrated.zip | Bin 98181 -> 98048 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/xuanxuan/www/data/xuanxuan/zentao-integrated.zip b/xuanxuan/www/data/xuanxuan/zentao-integrated.zip index b2fd5461ed958044874cb61c4cc856670c411702..0afd5dfa609a460a4002d54c9f98ee55bba6aad6 100644 GIT binary patch delta 5267 zcmZ`-byQT}8XaIr=^-VhyFp+8X{5W6hG9Tz=)8b{qBK%NN+{haA(9e;l$4ZoN=S*o zgWvnr`{UiS&b{ZZ_3iJwcb~J*TKh!Ypod(e<7=s+fk{AEw~ablRU-kP8sJj2GEprDVhKfSeNw$&#yaArIc5NK;v5~*1 znOHy}!l|34W!EeKeB;q~vnP=e+$^PS?%x4GOAVKO+}C8?uVMuohLpd}C~tIz2_82I zc-FQGn=Bx?CEGvsrMhJMi0q5+=5fNz_8f8>Ax%yG#jReYt$f<%*Kb>e@S;x} z>zMH7YohFfDz@137yWZQLnhC4M<=DY%V#5tS3jPj!P77l#*=0OUz&`*pwN^O(^$}D zs6I_exw`Cs(+ckd_~6zt`@Hb6Uf1DXQdpqQ(D2x+quPiRuH@(5gpxU*aTF<$66(9S z%*Kqx_R5tBc~28`>YzEjMBiv(yX^sc#Y6X5dYXR|UUOGSI!N)Vwb}~9>?)G*`e`lr2l+5wm?sBk0 zeo!rers!*a;W0~qO@g_wq21^7_nbHGt`_brF^5$<+CvLN>(iJjOFY`j^|QPwt8hu8gJL7)6QiLT26kEbcAP?kKtK;?F%6`l%e z9?nmz`7OI|U2{y~w7d0u(bOuE*D<5ys0i$vbdcRLzv-u;lXa4*<0F_i*#w-3;@5F= zxOpo?Azj03tn_(Jhy~F_vRT!pOf0)1dWk#Lu*!esx6t8E2+Ws)8qFZ|I1J9|VjeCA z(bZ4ACqLXe{1rN@%B`wCP5~lU?0VKDQlr;@f6Jl!3O*#+0-ipOtbe8b4Zmut8CWo; zJ#2?m5ZY?FK&EiHcpOnDs-8tVYI_H)`QKLYA7AEaLHH$y<8N*MWj4kkq zogjwHOv&L{f%2Pc(KOAzo_m2{MSkB#gc-{zeq`vjWforU+?-;kC1vaijIOgvaM zbuYmgtvnxdpRrFK!bZm1>UcQ>XEimbFGX>9=|v1M^@tL5_o6FKWi^H=Qa%I5dcsMR zzWFAU?FVMK2dipzw8Zm_Qz3u_u$Po1NkfAOD)ObXPSoR<3!F&{=di$!b&fuD-Wxdk z=>U`NOVW3;rP5%xxR0cbk?*Fq+#+0?NGV62!lV_VX*;Ks#nds&ioVDipw%B2vPX|~ zz9v0M2S=(R@Aa10!QqnPMh>L3Ze#BxnDt6c`fl*j%!_0*VesshR{*D`pX^5V7*j%Wz{1$;`n^^Du|vuyA!orBS*^69i5i1u!Fm%nE}z zo3fWWK<~I;EbAWMZZteK%P9#X#`n z5kb}*l+B1%3USblSpa!f$;DK<4Ub^&oQxvP3&6B8z^Mj@QqZw8nV`vHR{shiV9(8G zDL@l;r2@uvUZ>8W18zftA}`()({UJ*59-zu>ZlsJt{ip^*#JaV?pX;?%GD-Ozmkqo zYsa8?vI2dWLO38+lZGp)J6n1;6lwyp2MS`u&scTQ&wJ`cZ(hGba$CDqBm2XAF^mEZ1@mt+2X2 z*EiMw{UiQE30iC8-Uo-^;Qm%2WZZidYlR70$L+BLqLfTsRMBb1YS7%-r}WBS>~C$0 zvm@&a9+pNxQqoS{__PpyoDe(#P}T9VMmrsG1|>T+y5gC2NF*Pth#ii~3ozpYUW1kF z-?<|g{QLmhw52*@WaC2$j#E>mnmY2h2T-hu9>3rHV`M;p+ftXF&;#EF?3WE~*(A(( zVgf`?Ofu2p-Te|VB@9qGUd#M4-D6QC#n}r|{#8-|LUIaKzu^N1;hoyDlC4jpx_L?R z)3`PRhYdyXrs1#eS4Su!wkVN9b3YmDHTP7ICiuW-Rq*L$)s#}X_$hwy#K{&b4zEF7 zc4$!nqU?+LS+wP1`+FGXs6VQ8l%lw!$ll4AzAyNf@+3J4KtOYf0Z1H`JommBjftCd zL0%0NXvw`CuZnyotVK-zps@ZUkHna-C7EBZvZOOjhX)}5r@ztPT z#uiXHsGlD(kGnAnQr8ypupU?-x&KO2b|7Le=(WD@a$;G9P8rWr3Dxr# zl*p}5#7MWp(>hP-KgTL9U=`Jhp3Gl7^~nIqr(Not0Y?zoATPAF~+oR+Nj8lWkkl zJTl9~wxUVjqn${1tPJ&3{GcigYc(g>@Qs}yS%2D5NxAksW|a!XFD|9f*}S|JE&3U- zpiUnf5E&8RMITGo-f}v-@mHM^8}2YWyXmpV6p4h+PCeWA(KpKZNx0 z2R1Sb3u0?6`fY{%dKmh?R&3WStrE@aTx%haB6hvwDS5tF$*K4#^_CAOlCkn8-+?E# zgfi^eN~ukP?vfe|x(sA&2%ewAgz_$cccWXlQVZC4zA|k{d((G1`JznXjRMhWCCaArK970{|FYi-8P>!z9Mel>7l zd$DX>A?(n{=EqGblRWWdWbP<%gHu@v8C!>daB@g(r63x*AwAn{V26V=d z?4C9YTP98^c24Z_vpb{xnEELq9G5!LFtstOx)+_0i0wxu`~hutWIqGjyGm_-rLlAP zz!q-*c_wZB-li@h`TNJn*m$X!$%6o2G~3FipIu7wSApj^oSSfKy_JlBexhgN(_SWn z`Yp>=4SLpT_l-ajH|fvyfdovbDOKSXW-BL2hR;Q~au9z{Ir_oqQ74$IUbBcwDYQJ* z%r+Rc`l*J#$Y zE8G8+7!@IT%*_9$)F!aIo}@}Tpqh;Ru|n>{#XP|mGt=cJCW)(Rz$dG><=UJQO|4B) zc}*>g<~>jtS#p?lgmgj}v_K;h`QWOK$~36-p-B@9Uaz(AgZlm{6C^>s_@rpL(2Nm9 zIIJu6_0P#-(@j(;14-p!?vnhI_c6|^d6S$!-R#~EF?m>RJ#yKM?)I(4JVorP!VP#z z@jZ*0sT;grOl2MI0AEuK;r(Qd%_Y<-Wh3>WonO8672qeHc0U@6%L;=OEDFnOTerE& zC$`}PmQ&V6uT);^j)EQ+$ZpU3RG&xbXE4bz7K%stl=b~?=W@k@P|v*$ZQ}M#4$Y%W zOePYxxoDUD$8(ZYoq%b{yEnI%#&ap5V$clPcb#y{q|)S4$NWtEcnpBsu{Iq%8~r-5F{e z(A~8btE%zG;LjU2h!A99p)Mn*scXcmZ-fg9zIEDn{myCs?ZeUkFycwd1gw~UI`JeQ zf?)96ZL*{b0vf>O7U29RNH|{IB}|JXVxuf9+&ClceWAwtFmGHFc0w&G;Boh(XyNG; zI(1zl8M2j@Gf734H*xLW-UyHOB##P)arJj&7|HMQN0mJ8wIncEHIWhLiS4m4?ctDf zO0LiOPRle9bqhDTQ{_wX_v+E9;O@0%hn<5`i!jR9UFPbk|w7&{Ov&C`H#2-@>qzc z(qgXX&NGHb{ec$w7f^fQ=Ms$R_=gFxyN8k5>*GhdA8r{^D3~V zG;2nbrA9tpnw=}01c%A+F&nYIyaGw+ImN-U-bKXj-omWZD1F0h*4g^!))}#_y=e%x zflOT^qzx>icG^tOCdBwD|1vw?L(fJeXzb|PthHGTkR(_la#+<7>fod8?(!nGeA}Ey zb{TXsyip#^W013c(pWjT^D3if?$_?s-kIOka!q!Qf9IEhZn+3{X{DjB9vRmM8)i!i^s+TUd8-gJ?VPR7~GnEBI29t;XrcP^)WXh zf=TK-rBkmzR_AvIY*u_vuxl;kSdy0C+J6w|{cd|4^x;l;ddufd3JM>_r4)erLr1-n zT%lmAzGT^$6eFB4FE(CaE6rw$OW~yNcrtEKV{L;$nK;$~WZJ(_=7V`R(c$kf zLy|}!{Ajm&N_q?tzkAk3K-k*<7*vgR>7Y^Rt2KHvq4*e5prDeX{d4B^k9bo*2BOfL z{&oJPrFs|l|D=rjm$Id=WK?gZ|1V)<{VnYOrue5+szeaVeIV@L;XD>_7h5}D9!C#- zBP`JW*8VT>PWk^{$Jn5MY8QkG5Q0ED3NrHQ3OvrXcPakbAO2nYZo%I%)Oag{(A3Ew z6e6nEL?Doxm5q}X%W^Pal?q1TMHxtS z2}U8iqc!#U?K}OC(ZA#1Hm)w*J`QkCJ03R|*k7oxcc_|F3;>0W_I3`;&Z4o*v{cbC T?g+%bZIP%TkZs`Ymx2BRX@8$h delta 5406 zcmZ8l1z1#HuwOcs5)hC^5Ef9HrMqK^U0OONWI;NY7F0x9=>{o5x^tzZ8)@n8knn;3 z_mB7P`R0D-o_l8Q%$)hncV_}_F+zW15NN2Np_2lz??#w*5+s^{8nLkd*zkJmvEeBS zDPZ^cl?zE1&F?t`(z{m{`c1rMRMf!7P&pv4Cxj_D(=5!au%fb>quXO^u4hp&i5tD8 z^;?cC9DHWp zzagR#Lh!(QJ~z)o55c@y?(j;yDEWepTQ%`)re38-r~?xHrC@W5%(-Ar{Ux=YCy!yh zQk$ln737$^rN;spHci?6Cl` zx{dyR&zeLGM);Z!xB}W1Zse~qJJX(S;h`);Zsz2FW9PhX?ChUadjxUzqNJ$e=Z_At z66WAe;l$&$O?8=PNi_xgkE=EXTAO?)-I&NTjr)z3w;=@2749G=6Ho<_fK8?C1R zgFUAbN~wBDkAPWEY~98%8~S!tmsT7q35oUDBgu~;wuLe7#JtIBD)OvJf-1A5Pi)yU z^Oe%$bA01tDn)+0C2gk%pG`Gf8d~93w3mtnwp>Prek18XQVp+qZgALPGEbv1+2_~cT1D3CZwp911UI(k(FSsX5h5pcE>Ax?X`{iNX**kHsNuve z19fSYqlj{cQnc=<97BQ8`H6&07rsD|{v5}gX!%}r_9W8kW(>%fZ9=>F_AL+JFdNJg ztMHVfNk3V_Sus70wSr8wX&m8m{-vVlvi;(Pt>@RWsuS5Zx zo-d_9L>`ibyz#JV`REBfsM*l^N8;2Pk&icqe?qgqr3GVvZ=g505+^&{-iB42ssWZ_ z@>JBA+@Osrlfsddv=Fc73&E;x3yB>c#pc|vVJbRld#Or3!t<)J-}A)uk@zMcj*_nt zX70O>!n?m1Kag*lX?zQPZie+_PD|tg_3&EmGeq^RY@>>1w!kVIr^=w?PZbngycTD9MSO&qEAl!`qPwbFvrONedn5IL9_#E{ zk_*qKJ~Uvf9U~s>NS;Uw44#r;2{~e8PI^VGkAuQc7XGu~+x%gv`dW>(@?=d@5zu_! z6H(OR@XFgGU>QcR&0LEuxzvv9J8pRVi+zpKF{xT5vJopg_jL^tsL?``iZ5sZzh?DR z-@mj_;`gVK#07%rsSPf_p=o5U>cjnW$T-}Ew6ZW+%&i}!Et56*C=F~}Ba|x$8GdFmO4lw zXq9i*!s397(~UJf?|uo8AkKaOc8_{lOyUV7={bBP!KL>I^2&D~C|=Ss3UxFQo?q_Z zJ$kK7en5+8l~a&g@>?4t3-q`uo zHgaluN=41I4n7}^((Fa)T21%usLP2@t0cbm9Ai~erU0W{Uf z7)^3{Z6VVZtjV{n(M0En%$}y$YIO$7qXZm-;Dn)3-E$J8kF}83ve@%vh%e2SFoC8B z&1zTO7ZLAavL22W`^xaJKeIknv5jO-DI%2IJRslH{N%%n ziX>kD8#k^LJ`eZ8%bc~Aa8~FlUWC<8;$B}2L3b&dshRlQP40o<_xXJj1>lt7=1M$X z%7|{ERxL(0d681bhV%}Q`6*Gk+Kj&NqHHc%A!UIPJ>(}N4W9FG075C;aM+M%f~ISO zKRdXNtPV{Li*ZnKymum^g<;giD*SB$hq<5sX`LdVQ|&XBVVZ28XlBw;1|gK45p3St zeBl~0_k#mJGI4EE`e3i-ouyh^UVLUPodi!5g>ZyOE5-QNW=hrrnQ# zH((U}rw^*1@`WO`?1TPtc z!UuF8#!U1ZN3uU2i&)LV!Zg!)RW68fPSb;YE-j74{XCFdi2|YU@?gVzqUzR;>9b;= z3ySl10r0!b&veQH32$J$i%_7z-cK)Ns@$fTb8586Bhp$yKW3I8bE+F6vN-K^rSD$n z6#Nyhxh?g;!YiXTA;Txs)*C$7brFm~nR#f6u`%Zf?-DsTyOC z$kvD6Upp_7&X&rpSOOab-aO;qL-%O096f(#aM%|JVI`ueL zE24iqR%LKhb|RN<`^HSkzVAX=}`Etnj#XvCAmkuQ0+Ax$!8Rjjihy4gVnN zym!%>zD#98fL>$T`!JQOYbR}`z^j}_^2&_0(ph{Iv7^G!GolCGNG}Lw$(&xsf zI-G|fN-yFj$Sf*4uf#v;9H@!Cr4^__Tfaw#t=Ub>72a`<6Vz=7$3_>SL?v2i>A663 zz<&E32XEXOkc6cI==Yw1vkkN*<2;D2Ht;ojjT;%>FL1)c8*if;Get*MD1f7hw$ZSH zvxUg3Su2{T^o)c=$dl7T&+ChL(SUlL@CEIMoZ}tJX=le((F#rYz+Xq8IQ+O+@@>H(U_%{fjsuhZQoCZ61CA)EVA5A03i&=(_-!(y%;yCN+PeZ1$75>E*H zXy*~eoI7%Oe`;jzdZu=V@>nQadG|Kn!^LIQO|V7A0q4_-0GboOkAw1avvVrzqBLZY z{N%plPPSvOav_@Bd9h#*{AW!V`V~s*KoOvcJUj+bVkC z>KGQ*w6=vQF~VZQ&iS}q1OgpzL1=@`Jt-RoC_lX-;rpJT_Vfn;7_ct!wTz98`^Pk! zDrdN{q{B2RNuH~~ipQE+6xlk9>F40UJU6_l-h}oKP7!+I`SqVp`Xz^Y60~AMJaY*G zA#44YLOnB4cEO=9N{A3_alDKSS#vEFYt>8IkbXJQcQKbtAuGSu*v;8E0Edj6esi4TCT6mb!K*L|7LM;k=Ds9-Qhjyf)+n@M%=%OZH!ivowwYh> zSV*Cvysg5QGteITn#`hUgxct(ZFQDeuH7hGEdF7s9T-(9LNXPRWD6=|gdP^skfs$B zotJy*fp@fgLwJnbgWzVlxi_Xv%%wYr^0y^9OO_+QB=ggH7FQd6eKq`MM^1#FT`q%l zv?U`v1ST}6rb`MzB?+b1mmKkK@4jqoS6Z=eJ9t$YsCxh!hSPxqzp z|1FebKM=BD{coil+f3*mdpS%Lt4j0$F*yIoaNv&aS)RS`Q)`!`kUu{rh18FBcC*(V z;>^~7rqm2tHTa!tE5nF1Y*~RKXTP|<{~mNjvTN|{4J@Z{rrUO(W>n=rqsroy@&InK zGt@q}4e?}9@M%++f#SoWU+d#u8j$CYbkIu;PDp?8aPjf0{1x&s55@H}ErNaXmi1h+ zJ07JXauI_m_f<0&HBgP4Js@nzH#_}vt?hz^7@8M-Fn$?j$2zQsW7ogH0k`Pct?&z$ zp#7Du*aWLnR2SeSN+PVy<$!VXR#z}BJjt!3RO>YOb{+W{OOjlnk4(;kek&tY|Kr)P zSA$RO{%tzSy))~x*E}~7cOE21`OBMswH3ZZ#6s>C|GDr0L;xo<3wtvgD-JssxTCfn z9$@~?$MrzUKTb=9ibaud6YUMU!&JQ zmR3{E%e&gklPleAOy@Doim+4{QbijP zOW#le>d4wjDB%`Z?aU!jK{%FaSMwB)iI{hJb+YiB@Y`p9C-bD}q?jglAI-j@>y8+E zcCM4O&;ZnzWLE+!&q$JM7-EA6kZ458stN41PZn@ZPLVa$0=17e(3GX zFK}20T+!hb1A85AGlQ7rG_$z0)Dhq2J>!em^08{{kS=)8>1Cbsq%iInte6v5_R)Xm_}Y zZ6gszlU{yQaZ3VfMpL_+u#R*<@88tyGog6s#vTq+Ah7S^;iV=2Ke2GP{~rKBzC#Gw z>4_wlnz~F&uH#WQg&JGOP@a@aCUH}~^U(F+nBVL3iHMi{9)#_Jy~3~Bwe!+&h&jmj zo9UeNz}u#bvx1tilX2ZOarW^VW~{yuQig2r`SM#RqxLsZ`w%o_eG)qr(^clzWXHdR}T3z z`QIB30PpWd$r~wjLIA+T1R^D)4%6e**24z;ooW96r?}7>=S}Vyi|>f!KO%AhMg9>H zn@31^=f=PLcK;P2@W`;$r3M^0%RhSAHm*l$!sp z+giXKIh-7A?p3%u{zO@S6izhvVL&Y22n7Z<;4W|yWAB%Qm{1Z2nNX Date: Tue, 19 Mar 2019 08:04:39 +0800 Subject: [PATCH 333/442] * Finish task #5324. --- framework/base/control.class.php | 2 +- framework/base/router.class.php | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/framework/base/control.class.php b/framework/base/control.class.php index e1d1bd2519..51e4e287e3 100644 --- a/framework/base/control.class.php +++ b/framework/base/control.class.php @@ -740,7 +740,7 @@ class baseControl */ if(!is_file($file2Included)) $this->app->triggerError("The control file $file2Included not found", __FILE__, __LINE__, $exit = true); chdir(dirname($file2Included)); - if($moduleName != $this->moduleName) helper::import($file2Included); + helper::import($file2Included); /** * 设置调用的类名。 diff --git a/framework/base/router.class.php b/framework/base/router.class.php index 21525b08f2..0e7d1e18cd 100644 --- a/framework/base/router.class.php +++ b/framework/base/router.class.php @@ -1631,7 +1631,7 @@ class baseRouter **/ $file2Included = $this->setActionExtFile() ? $this->extActionFile : $this->controlFile; chdir(dirname($file2Included)); - include $file2Included; + helper::import($file2Included); /* * 设置control的类名。 @@ -1650,7 +1650,7 @@ class baseRouter /* include default value for module*/ $defaultValueFiles = glob($this->getTmpRoot() . "defaultvalue/*.php"); - if($defaultValueFiles) foreach($defaultValueFiles as $file) include $file; + if($defaultValueFiles) foreach($defaultValueFiles as $file) helper::import($file); /* * 使用反射机制获取函数参数的默认值。 From 5e32a889664f2ac1a9c32d6c53c5425b69c097e7 Mon Sep 17 00:00:00 2001 From: chenfei Date: Tue, 19 Mar 2019 08:11:58 +0800 Subject: [PATCH 334/442] * Finish task #5372. --- module/project/model.php | 1 + module/user/model.php | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/module/project/model.php b/module/project/model.php index fba8ca1742..61ae7e1279 100644 --- a/module/project/model.php +++ b/module/project/model.php @@ -1698,6 +1698,7 @@ class projectModel extends model foreach($users as $account => $realName) { $firstLetter = ucfirst(substr($account, 0, 1)) . ':'; + if(isset($this->config->isINT) and $this->config->isINT) $firstLetter = ''; $users[$account] = $firstLetter . ($realName ? $realName : $account); } return array('' => '') + $users; diff --git a/module/user/model.php b/module/user/model.php index 61095998a3..db604120af 100644 --- a/module/user/model.php +++ b/module/user/model.php @@ -99,7 +99,7 @@ class userModel extends model foreach($users as $account => $user) { $firstLetter = ucfirst(substr($account, 0, 1)) . ':'; - if(strpos($params, 'noletter') !== false) $firstLetter = ''; + if((strpos($params, 'noletter') !== false) or (isset($this->config->isINT) and $this->config->isINT)) $firstLetter = ''; $users[$account] = $firstLetter . (($user->deleted and strpos($params, 'realname') === false) ? $account : ($user->realname ? $user->realname : $account)); } From 3e0a57ac7ddc21ae9f782bd2601cceffa8027e20 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Tue, 19 Mar 2019 08:26:43 +0800 Subject: [PATCH 335/442] * adjust dropmenu width when search. --- www/theme/default/style.css | 2 ++ 1 file changed, 2 insertions(+) diff --git a/www/theme/default/style.css b/www/theme/default/style.css index 4cde902cc7..702a53005a 100644 --- a/www/theme/default/style.css +++ b/www/theme/default/style.css @@ -17,6 +17,8 @@ .main-table .table{cursor:pointer;} #dropMenu.show-right-col{width:502px;max-width:520px;} +#dropMenu.has-search-text{width:250px;max-width:260px;} +#dropMenu.has-search-text .col-right{margin-left:0px;} #dropMenu>.search-box{max-width:240px;} #dropMenu .list-group{width:250px; max-width:260px;} #dropMenu.show-right-col>.list-group{width:502px;max-width:520px;} From 96f8fefdf7126fed2784a8474d815030a9a7c83f Mon Sep 17 00:00:00 2001 From: Yagami <976204163@qq.com> Date: Tue, 19 Mar 2019 09:24:20 +0800 Subject: [PATCH 336/442] * Finish task #5328. --- module/doc/model.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/doc/model.php b/module/doc/model.php index 7e5af91b90..f74d0f3411 100644 --- a/module/doc/model.php +++ b/module/doc/model.php @@ -493,7 +493,7 @@ class docModel extends model ->where('deleted')->eq(0) ->beginIF($this->config->doc->notArticleType)->andWhere('type')->notIN($this->config->doc->notArticleType)->fi() ->beginIF($libID)->andWhere('lib')->in($libID)->fi() - ->beginIF(!empty($module))->andWhere('module')->in($module)->fi() + ->beginIF(!empty($module) or strpos($this->config->doc->custom->showLibs, 'children') === false)->andWhere('module')->in($module)->fi() ->query(); From d790b5e9421fbd62989df5dffaefcf77b32d232e Mon Sep 17 00:00:00 2001 From: Yagami <976204163@qq.com> Date: Tue, 19 Mar 2019 09:37:46 +0800 Subject: [PATCH 337/442] * Finish task #5329. --- module/project/lang/en.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/project/lang/en.php b/module/project/lang/en.php index 020b6db385..4124cf83a1 100644 --- a/module/project/lang/en.php +++ b/module/project/lang/en.php @@ -208,7 +208,7 @@ $lang->project->timeSummary = '
            Tasks %s :Wait %s   Doing %s
            Est. %s :Cost %s   Left %s
            "; $lang->project->wbs = "Decompose Task"; $lang->project->batchWBS = "Batch Decompose"; -$lang->project->howToUpdateBurn = "Help "; +$lang->project->howToUpdateBurn = "Help "; $lang->project->whyNoStories = "No Story can be linked. Please check whether there is Story in {$lang->projectCommon} linked {$lang->productCommon} and make sure it has been reviewed."; $lang->project->productStories = "{$lang->projectCommon} linked story is the subeset of {$lang->productCommon}, which can only be linked after review. Please Link Story。"; $lang->project->haveDraft = "There are %s draft stories can't be linked."; From f621ab60de4c92f855b78849563e803535526916 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Tue, 19 Mar 2019 10:22:09 +0800 Subject: [PATCH 338/442] * finish task #5336. --- db/zentao.sql | 2 ++ module/group/lang/resource.php | 18 ++++++----- module/message/config.php | 2 +- module/story/config.php | 3 +- module/story/control.php | 38 +++++++++++++++++++++++ module/story/lang/en.php | 2 ++ module/story/lang/zh-cn.php | 2 ++ module/story/model.php | 26 ++++++++++++++++ module/story/view/assignto.html.php | 48 +++++++++++++++++++++++++++++ module/story/view/view.html.php | 1 + module/upgrade/model.php | 25 +++++++++++++++ 11 files changed, 157 insertions(+), 10 deletions(-) create mode 100644 module/story/view/assignto.html.php diff --git a/db/zentao.sql b/db/zentao.sql index 3bad2d02e7..e829c1d528 100644 --- a/db/zentao.sql +++ b/db/zentao.sql @@ -1251,6 +1251,7 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES (1, 'story', 'create'), (1, 'story', 'delete'), (1, 'story', 'edit'), +(1, 'story', 'assignTo'), (1, 'story', 'batchChangeModule'), (1, 'story', 'linkStory'), (1, 'story', 'unlinkStory'), @@ -2715,6 +2716,7 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES (7, 'story', 'create'), (7, 'story', 'delete'), (7, 'story', 'edit'), +(7, 'story', 'assignTo'), (7, 'story', 'batchChangeModule'), (7, 'story', 'linkStory'), (7, 'story', 'unlinkStory'), diff --git a/module/group/lang/resource.php b/module/group/lang/resource.php index e78d2eb0aa..754dfaa53a 100644 --- a/module/group/lang/resource.php +++ b/module/group/lang/resource.php @@ -198,6 +198,7 @@ $lang->resource->story->view = 'view'; $lang->resource->story->change = 'lblChange'; $lang->resource->story->review = 'lblReview'; $lang->resource->story->batchReview = 'batchReview'; +$lang->resource->story->assignTo = 'assignTo'; $lang->resource->story->close = 'lblClose'; $lang->resource->story->batchClose = 'batchClose'; $lang->resource->story->activate = 'lblActivate'; @@ -225,14 +226,15 @@ $lang->story->methodOrder[50] = 'close'; $lang->story->methodOrder[55] = 'batchClose'; $lang->story->methodOrder[60] = 'batchChangePlan'; $lang->story->methodOrder[65] = 'batchChangeStage'; -$lang->story->methodOrder[70] = 'batchAssignTo'; -$lang->story->methodOrder[75] = 'activate'; -$lang->story->methodOrder[80] = 'tasks'; -$lang->story->methodOrder[85] = 'bugs'; -$lang->story->methodOrder[90] = 'cases'; -$lang->story->methodOrder[95] = 'zeroCase'; -$lang->story->methodOrder[100] = 'report'; -$lang->story->methodOrder[105] = 'linkStory'; +$lang->story->methodOrder[70] = 'assignTo'; +$lang->story->methodOrder[75] = 'batchAssignTo'; +$lang->story->methodOrder[80] = 'activate'; +$lang->story->methodOrder[85] = 'tasks'; +$lang->story->methodOrder[90] = 'bugs'; +$lang->story->methodOrder[95] = 'cases'; +$lang->story->methodOrder[100] = 'zeroCase'; +$lang->story->methodOrder[105] = 'report'; +$lang->story->methodOrder[110] = 'linkStory'; $lang->story->methodOrder[115] = 'batchChangeBranch'; $lang->story->methodOrder[120] = 'batchChangeModule'; diff --git a/module/message/config.php b/module/message/config.php index 609b4f0d51..8af4f3cc17 100644 --- a/module/message/config.php +++ b/module/message/config.php @@ -1,7 +1,7 @@ message->objectTypes = array(); $config->message->objectTypes['product'] = array('opened', 'edited', 'closed', 'undeleted'); -$config->message->objectTypes['story'] = array('opened', 'edited', 'commented', 'frombug', 'changed', 'reviewed', 'closed', 'activated'); +$config->message->objectTypes['story'] = array('opened', 'edited', 'commented', 'frombug', 'changed', 'reviewed', 'closed', 'activated', 'assigned'); $config->message->objectTypes['productplan'] = array('opened', 'edited'); $config->message->objectTypes['project'] = array('opened', 'edited', 'started', 'delayed', 'suspended', 'closed', 'activated', 'undeleted'); $config->message->objectTypes['task'] = array('opened', 'edited', 'commented', 'assigned', 'confirmed', 'started', 'finished', 'paused', 'canceled', 'restarted', 'closed', 'activated'); diff --git a/module/story/config.php b/module/story/config.php index 9954b78fee..da238b0291 100644 --- a/module/story/config.php +++ b/module/story/config.php @@ -3,7 +3,7 @@ $config->story = new stdclass(); $config->story->batchCreate = 10; $config->story->affectedFixedNum = 7; -$config->story->needReview = 1; +$config->story->needReview = 1; $config->story->batchClose = new stdclass(); $config->story->batchClose->columns = 10; @@ -26,6 +26,7 @@ $config->story->editor->view = array('id' => 'comment,lastComment', 'tools' $config->story->editor->close = array('id' => 'comment', 'tools' => 'simpleTools'); $config->story->editor->review = array('id' => 'comment', 'tools' => 'simpleTools'); $config->story->editor->activate = array('id' => 'comment', 'tools' => 'simpleTools'); +$config->story->editor->assignto = array('id' => 'comment', 'tools' => 'simpleTools'); $config->story->list = new stdclass(); $config->story->list->exportFields = ' diff --git a/module/story/control.php b/module/story/control.php index 5651588012..244f803d91 100644 --- a/module/story/control.php +++ b/module/story/control.php @@ -1037,6 +1037,44 @@ class story extends control if(!dao::isError()) $this->loadModel('score')->create('ajax', 'batchOther'); die(js::locate($this->session->storyList, 'parent')); } + + /** + * Assign to. + * + * @param int $storyID + * @access public + * @return void + */ + public function assignTo($storyID) + { + if(!empty($_POST)) + { + $changes = $this->story->assign($storyID); + if(dao::isError()) die(js::error(dao::getError())); + if($changes) + { + $actionID = $this->loadModel('action')->create('story', $storyID, 'Assigned', $this->post->comment, $this->post->assignedTo); + $this->action->logHistory($actionID, $changes); + } + + if(isonlybody()) die(js::closeModal('parent.parent', 'this')); + die(js::locate($this->createLink('story', 'view', "storyID=$storyID"), 'parent')); + } + + /* Get story and product. */ + $story = $this->story->getById($storyID); + $products = $this->product->getPairs(); + + /* Set menu. */ + $this->product->setMenu($products, $story->product, $story->branch); + + $this->view->title = zget($products, $story->product, '') . $this->lang->colon . $this->lang->story->assign; + $this->view->position[] = $this->lang->story->assign; + $this->view->story = $story; + $this->view->actions = $this->action->getList('story', $storyID); + $this->view->users = $this->loadModel('user')->getPairs('nodeleted|noclosed|pofirst|noletter'); + $this->display(); + } /** * Batch assign to. diff --git a/module/story/lang/en.php b/module/story/lang/en.php index 219ab48733..1906223d38 100644 --- a/module/story/lang/en.php +++ b/module/story/lang/en.php @@ -13,6 +13,7 @@ $lang->story->create = "Add Story"; $lang->story->batchCreate = "Batch Add"; $lang->story->change = "Change"; $lang->story->changed = 'Change'; +$lang->story->assignTo = 'Assign'; $lang->story->review = 'Review'; $lang->story->batchReview = 'Batch Review'; $lang->story->edit = "Edit"; @@ -58,6 +59,7 @@ $lang->story->sourceNote = 'Note'; $lang->story->fromBug = 'From Bug'; $lang->story->title = 'Title'; $lang->story->spec = 'Description'; +$lang->story->assign = 'Assign'; $lang->story->verify = 'Acceptance'; $lang->story->pri = 'Priority'; $lang->story->estimate = 'Est.(h)'; diff --git a/module/story/lang/zh-cn.php b/module/story/lang/zh-cn.php index 7fed00ad1b..cc252b150a 100644 --- a/module/story/lang/zh-cn.php +++ b/module/story/lang/zh-cn.php @@ -13,6 +13,7 @@ $lang->story->create = "提需求"; $lang->story->batchCreate = "批量创建"; $lang->story->change = "变更"; $lang->story->changed = '需求变更'; +$lang->story->assignTo = '指派'; $lang->story->review = '评审'; $lang->story->batchReview = '批量评审'; $lang->story->edit = "编辑"; @@ -58,6 +59,7 @@ $lang->story->sourceNote = '来源备注'; $lang->story->fromBug = '来源Bug'; $lang->story->title = '需求名称'; $lang->story->spec = '需求描述'; +$lang->story->assign = '指派给'; $lang->story->verify = '验收标准'; $lang->story->pri = '优先级'; $lang->story->estimate = '预计工时'; diff --git a/module/story/model.php b/module/story/model.php index 53f77320ac..d052e6d83e 100644 --- a/module/story/model.php +++ b/module/story/model.php @@ -1056,6 +1056,31 @@ class storyModel extends model return $allChanges; } + /** + * Assign story. + * + * @param int $storyID + * @access public + * @return array + */ + public function assign($storyID) + { + $oldStory = $this->dao->findById($storyID)->from(TABLE_STORY)->fetch(); + $now = helper::now(); + $assignedTo = $this->post->assignedTo; + if($assignedTo == $oldStory->assignedTo) return array(); + + $story = new stdclass(); + $story->lastEditedBy = $this->app->user->account; + $story->lastEditedDate = $now; + $story->assignedTo = $assignedTo; + $story->assignedDate = $now; + + $this->dao->update(TABLE_STORY)->data($story)->autoCheck()->where('id')->eq((int)$storyID)->exec(); + if(!dao::isError()) return common::createChanges($oldStory, $story); + return false; + } + /** * Batch assign to. * @@ -2254,6 +2279,7 @@ class storyModel extends model if($action == 'review') return $story->status == 'draft' or $story->status == 'changed'; if($action == 'close') return $story->status != 'closed'; if($action == 'activate') return $story->status == 'closed'; + if($action == 'assignto') return $story->status != 'closed'; return true; } diff --git a/module/story/view/assignto.html.php b/module/story/view/assignto.html.php new file mode 100644 index 0000000000..a58decebd7 --- /dev/null +++ b/module/story/view/assignto.html.php @@ -0,0 +1,48 @@ + + * @package story + * @version $Id: complete.html.php 935 2010-07-06 07:49:24Z jajacn@126.com $ + * @link http://www.zentao.net + */ +?> + + +
            +
            +
            +

            + id;?> + title'>" . $story->title . '') : html::a($this->createLink('story', 'view', 'story=' . $story->id), $story->title);?> + + arrow . $lang->story->assignTo;?> + +

            +
            +
            + + + + + + + + + + + + +
            story->assign;?>assignedTo, "class='form-control chosen'");?>
            comment;?>
            + + goback, $this->session->storyList, '', '', 'btn btn-wide');?> +
            +
            +
            + +
            +
            + diff --git a/module/story/view/view.html.php b/module/story/view/view.html.php index 8208aaaac6..a2defc6e27 100644 --- a/module/story/view/view.html.php +++ b/module/story/view/view.html.php @@ -78,6 +78,7 @@ if(common::hasPriv('story', 'batchCreate')) echo html::a($link, " " . $lang->story->subdivide, '', $misc); } + common::printIcon('story', 'assignTo', "storyID=$story->id", $story, 'button', '', '', 'iframe showinonlybody', true); common::printIcon('story', 'close', "storyID=$story->id", $story, 'button', '', '', 'iframe showinonlybody', true); common::printIcon('story', 'activate', "storyID=$story->id", $story, 'button', '', '', 'iframe showinonlybody', true); diff --git a/module/upgrade/model.php b/module/upgrade/model.php index 8a580cba04..d4f51cb0ca 100644 --- a/module/upgrade/model.php +++ b/module/upgrade/model.php @@ -367,6 +367,9 @@ class upgradeModel extends model $this->saveLogs('Execute 11_2'); $this->execSQL($this->getUpgradeFile('11.2')); $this->processDocLibAcl(); + case '11_3': + $this->saveLogs('Execute 11_2'); + $this->addPriv11_4(); } $this->deletePatch(); @@ -2218,6 +2221,28 @@ class upgradeModel extends model return true; } + /** + * Adjust priv for 11.4. + * + * @access public + * @return bool + */ + public function adjustPriv11_4() + { + $this->saveLogs('Run Method ' . __FUNCTION__); + $groups = $this->dao->select('`group`')->from(TABLE_GROUPPRIV)->where('module')->eq('story')->andWhere('method')->eq('edit')->fetchPairs('group', 'group'); + foreach($groups as $groupID) + { + $data = new stdclass(); + $data->group = $groupID; + $data->module = 'story'; + $data->method = 'assignTo'; + $this->dao->replace(TABLE_GROUPPRIV)->data($data)->exec(); + $this->saveLogs($this->dao->get()); + } + return true; + } + /** * Judge any error occers. * From 602e8244de7f9a975ba8a9a17db04a5ac7be06b5 Mon Sep 17 00:00:00 2001 From: Yagami <976204163@qq.com> Date: Tue, 19 Mar 2019 10:25:17 +0800 Subject: [PATCH 339/442] * Finish task #5339. --- module/block/control.php | 2 -- module/block/view/dashboard.html.php | 23 ++++++++++++++--------- module/product/control.php | 2 ++ module/project/control.php | 2 ++ 4 files changed, 18 insertions(+), 11 deletions(-) diff --git a/module/block/control.php b/module/block/control.php index a67941a4c2..de29e54253 100644 --- a/module/block/control.php +++ b/module/block/control.php @@ -249,8 +249,6 @@ class block extends control $block->actionLink = ''; if($block->block == 'overview') { - if($module == 'product' && common::hasPriv('product', 'create')) $block->actionLink = html::a($this->createLink('product', 'create'), " " . $this->lang->product->create, '', "class='btn btn-primary'"); - if($module == 'project' && common::hasPriv('project', 'create')) $block->actionLink = html::a($this->createLink('project', 'create'), " " . $this->lang->project->create, '', "class='btn btn-primary'"); if($module == 'qa' && common::hasPriv('testcase', 'create')) { $this->app->loadLang('testcase'); diff --git a/module/block/view/dashboard.html.php b/module/block/view/dashboard.html.php index 5268aa00fe..2631fcc085 100644 --- a/module/block/view/dashboard.html.php +++ b/module/block/view/dashboard.html.php @@ -18,6 +18,16 @@ $useGuest = $this->app->user->account == 'guest'; ?>
            + +
            +

            + block->noData. ',';?> + youCould;?> + createLink("block", "admin", "id=0&module=$module"), " {$lang->block->createBlock}", '', "data-toggle='modal' data-type='ajax' data-width='700' data-title='{$lang->block->createBlock}' class='btn btn-info'")?> + createLink("block", "ajaxReset", "module=$module"), " {$lang->block->reset}", 'hiddenwin', 'class="btn btn-info"')?> +

            +
            +
            $block):?> @@ -42,6 +52,8 @@ $useGuest = $this->app->user->account == 'guest';
          • block->remove;?>
          • +
          • createLink("block", "admin", "id=0&module=$module"), "{$lang->block->createBlock}", '', "data-toggle='modal' data-type='ajax' data-width='700' data-title='{$lang->block->createBlock}'")?>
          • +
          • createLink("block", "ajaxReset", "module=$module"), "{$lang->block->reset}", 'hiddenwin')?>
          • app->user->admin):?>
          • createLink('block', 'close', "blockID={$block->id}"), $lang->block->closeForever, 'hiddenwin', "class='close-block' onclick=\"return confirm('{$lang->block->confirmClose}')\"")?> @@ -78,6 +90,8 @@ $useGuest = $this->app->user->account == 'guest';
          • block->remove; ?>
          • +
          • createLink("block", "admin", "id=0&module=$module"), "{$lang->block->createBlock}", '', "data-toggle='modal' data-type='ajax' data-width='700' data-title='{$lang->block->createBlock}'")?>
          • +
          • createLink("block", "ajaxReset", "module=$module"), "{$lang->block->reset}", 'hiddenwin')?>
          • app->user->admin):?>
          • createLink('block', 'close', "blockID={$block->id}"), $lang->block->closeForever, 'hiddenwin', "class='close-block' onclick=\"return confirm('{$lang->block->confirmClose}')\"")?> @@ -99,15 +113,6 @@ config.confirmRemoveBlock = 'block->confirmRemoveBlock; ?>'; var module = ''; var useGuest = ; -"; -$dropmenu .= ""; -$dropmenu .= "
          • '; -?> -$('#subHeader #pageActions .btn-toolbar:last').append(); $module->block->initVersion) or $config->$module->block->initVersion < '2'):?> $(function() { diff --git a/module/product/control.php b/module/product/control.php index 477099f1f1..3a51f13e6d 100644 --- a/module/product/control.php +++ b/module/product/control.php @@ -57,6 +57,8 @@ class product extends control $branch = (int)$this->cookie->preBranch; $this->product->setMenu($this->products, $productID, $branch); + if(common::hasPriv('product', 'create')) $this->lang->modulePageActions = html::a($this->createLink('product', 'create'), " " . $this->lang->product->create, '', "class='btn btn-primary'"); + $this->view->title = $this->lang->product->index; $this->view->position[] = $this->lang->product->index; $this->display(); diff --git a/module/project/control.php b/module/project/control.php index e9daf719af..ad9bc9aec2 100644 --- a/module/project/control.php +++ b/module/project/control.php @@ -45,6 +45,8 @@ class project extends control if($this->app->viewType != 'mhtml') unset($this->lang->project->menu->index); $this->commonAction($projectID); //$this->project->setMenu($this->projects, key($this->projects)); + + if(common::hasPriv('project', 'create')) $this->lang->modulePageActions = html::a($this->createLink('project', 'create'), " " . $this->lang->project->create, '', "class='btn btn-primary'"); $this->view->title = $this->lang->project->index; $this->view->position[] = $this->lang->project->index; From 2882633c31a9584bd2dbc030042152c531ea3a16 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Tue, 19 Mar 2019 13:40:07 +0800 Subject: [PATCH 340/442] * finish task #5337. --- www/js/my.full.js | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/www/js/my.full.js b/www/js/my.full.js index 8153db2a05..90204584a3 100644 --- a/www/js/my.full.js +++ b/www/js/my.full.js @@ -721,6 +721,30 @@ function getFingerprint() return fingerprint; } +/** + * Convert plain text URLs into HTML hyperlinks + * + * @access public + * @return void + */ +function convertURL() +{ + if($('.article-content, .article>.content').size() == 0) return; + + var aTags = new Array(); + var content = $('.article-content, .article>.content').html(); + $('.article-content, .article>.content').find('a').each(function(i) + { + aTags[i] = $(this).prop('outerHTML'); + content = content.replace(aTags[i], ''); + }); + + var regexp = /(http:\/\/|https:\/\/)((\w|=|\?|\.|\/|\&|-|%|;)+)/g; + content = content.replace(regexp, function($url){ return "" + $url + "";}); + for(i in aTags) content = content.replace('', aTags[i]); + $('.article-content, .article>.content').html(content); +} + /* Ping the server every some minutes to keep the session. */ needPing = true; @@ -731,6 +755,7 @@ $(document).ready(function() checkTutorial(); revertModuleCookie(); + convertURL(); $(document).on('click', '#helpMenuItem .close-help-tab', function(){$('#helpMenuItem').prev().remove();$('#helpMenuItem').remove();}); }); From e7449725927bf8426455b092f39733b58b94f0f8 Mon Sep 17 00:00:00 2001 From: Yagami <976204163@qq.com> Date: Tue, 19 Mar 2019 16:25:36 +0800 Subject: [PATCH 341/442] * Finish task #5340. --- module/doc/view/showfiles.html.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/module/doc/view/showfiles.html.php b/module/doc/view/showfiles.html.php index e691cb3632..105e939abf 100644 --- a/module/doc/view/showfiles.html.php +++ b/module/doc/view/showfiles.html.php @@ -53,8 +53,8 @@
            doc->id;?>doc->fileTitle;?>doc->filePath;?>doc->fileTitle;?>doc->filePath;?> doc->extension;?> doc->size;?> doc->addedBy;?>
            From b66c5ec7fa6330ee6a10fd9870a59ce6f0c43755 Mon Sep 17 00:00:00 2001 From: chenfei Date: Tue, 19 Mar 2019 17:23:35 +0800 Subject: [PATCH 343/442] * Finish task #5330. --- module/block/view/productblock.html.php | 4 ++-- module/block/view/projectblock.html.php | 3 ++- module/block/view/projectstatisticblock.html.php | 2 +- module/my/view/changepassword.html.php | 3 ++- module/product/css/view.css | 2 +- module/product/view/view.html.php | 2 +- module/project/css/view.css | 1 + module/task/lang/en.php | 12 ++++++------ module/task/lang/zh-cn.php | 6 +++--- module/user/css/common.css | 1 + module/user/view/create.html.php | 3 ++- module/user/view/edit.html.php | 6 ++++-- 12 files changed, 26 insertions(+), 19 deletions(-) diff --git a/module/block/view/productblock.html.php b/module/block/view/productblock.html.php index d5a78aae97..6ce0ddb0c1 100644 --- a/module/block/view/productblock.html.php +++ b/module/block/view/productblock.html.php @@ -26,8 +26,8 @@ - - + + diff --git a/module/block/view/projectblock.html.php b/module/block/view/projectblock.html.php index 7fabb89df7..bb1fbfdac5 100644 --- a/module/block/view/projectblock.html.php +++ b/module/block/view/projectblock.html.php @@ -20,8 +20,9 @@ + isINT) and $config->isINT) ? 'w-85px' : 'c-hours';?> - + diff --git a/module/block/view/projectstatisticblock.html.php b/module/block/view/projectstatisticblock.html.php index 12e641f075..964229cf31 100644 --- a/module/block/view/projectstatisticblock.html.php +++ b/module/block/view/projectstatisticblock.html.php @@ -9,7 +9,7 @@ .types-line > li > div > span {display: block; color: #CBD0DB; font-size: 16px;} .product-info {position: relative; height: 65px;} .product-info + .product-info {margin-top: 10px;} -.product-info .progress {position: absolute; left: 10px; top: 35px; right: 90px;} +.product-info .progress {position: absolute; left: 10px; top: 35px; right: 100px;} .product-info .progress-info {position: absolute; left: 8px; top: 10px; width: 180px; font-size: 12px;} .product-info .type-info {color: #A6AAB8; text-align: center; position: absolute; right: 0; top: 6px; width: 100px;} html[lang="en"] .product-info .type-info {color: #A6AAB8; text-align: center; position: absolute; right: 0; top: 6px; width: 130px;} diff --git a/module/my/view/changepassword.html.php b/module/my/view/changepassword.html.php index 826237c017..e1d63097a1 100755 --- a/module/my/view/changepassword.html.php +++ b/module/my/view/changepassword.html.php @@ -22,8 +22,9 @@
            product->plans;?> product->releases;?>story->statusList['active'] . $lang->story->common;?>bug->unResolved . $lang->bug->common;?>story->statusList['active'] . $lang->story->common;?>bug->unResolved . $lang->bug->common;?>
            project->name;?> project->end;?> statusAB;?>project->totalEstimate;?>project->totalEstimate;?> project->totalConsumed;?> project->totalLeft;?>
            + isINT) and $config->isINT) ? 'w-130px' : 'w-90px';?> - + diff --git a/module/product/css/view.css b/module/product/css/view.css index b318347e90..c4ae1ded18 100644 --- a/module/product/css/view.css +++ b/module/product/css/view.css @@ -1,6 +1,6 @@ .branch-list {padding-left: 0; margin: 0;} .branch-list > li {float: left; list-style: none; width: 50%; margin: 5px 0;} -.data-basic.table-data tbody > tr > th {width: 80px;} +.data-basic.table-data tbody > tr > th {width: 100px;} .block-release .panel-body, .block-dynamic .panel-body {height: 240px; overflow-x: hidden; overflow-y: auto; position: relative;} .block-release .panel-body {padding-bottom: 50px;} .block-release .panel-body > .btn.pull-right {position: absolute; right: 20px; bottom: 20px;} diff --git a/module/product/view/view.html.php b/module/product/view/view.html.php index 6cfa0493e1..980eb64ea0 100644 --- a/module/product/view/view.html.php +++ b/module/product/view/view.html.php @@ -134,7 +134,7 @@
            user->account;?>user->account;?> account . html::hidden('account',$user->account);?>
            - + diff --git a/module/project/css/view.css b/module/project/css/view.css index 771b0e9847..d89617d1cc 100644 --- a/module/project/css/view.css +++ b/module/project/css/view.css @@ -8,3 +8,4 @@ #burnLegend > div.line-real:before {background: #006AF1;} .block-dynamic .panel-body {height: 230px; overflow: auto; position: relative;} +.block-team div.col-xs-6{white-space: nowrap; overflow: hidden;} diff --git a/module/task/lang/en.php b/module/task/lang/en.php index 634c99fd49..4f9f5a52d0 100644 --- a/module/task/lang/en.php +++ b/module/task/lang/en.php @@ -68,8 +68,8 @@ $lang->task->datePlan = 'Plan'; $lang->task->estStarted = 'Plan Start'; $lang->task->realStarted = 'Actual Start'; $lang->task->date = 'Date'; -$lang->task->deadline = 'Deadline'; -$lang->task->deadlineAB = 'Deadline'; +$lang->task->deadline = 'Plan End'; +$lang->task->deadlineAB = 'Plan End'; $lang->task->status = 'Status'; $lang->task->desc = 'Description'; $lang->task->assign = 'Assign'; @@ -81,10 +81,10 @@ $lang->task->assignedDate = 'Assigned'; $lang->task->openedBy = 'Created by'; $lang->task->openedDate = 'Created'; $lang->task->openedDateAB = 'Add'; -$lang->task->finishedBy = 'Finished by'; -$lang->task->finishedByAB = 'Finisher'; -$lang->task->finishedDate = 'Finished'; -$lang->task->finishedDateAB = 'Finished'; +$lang->task->finishedBy = 'End By'; +$lang->task->finishedByAB = 'End By'; +$lang->task->finishedDate = 'Actual End'; +$lang->task->finishedDateAB = 'Actual End'; $lang->task->finishedList = 'FinishedBy list'; $lang->task->canceledBy = 'Cancelled by'; $lang->task->canceledDate = 'Cancelled'; diff --git a/module/task/lang/zh-cn.php b/module/task/lang/zh-cn.php index 11efa96048..2945efd2ff 100644 --- a/module/task/lang/zh-cn.php +++ b/module/task/lang/zh-cn.php @@ -68,7 +68,7 @@ $lang->task->datePlan = '日程规划'; $lang->task->estStarted = '预计开始'; $lang->task->realStarted = '实际开始'; $lang->task->date = '日期'; -$lang->task->deadline = '截止日期'; +$lang->task->deadline = '计划完成'; $lang->task->deadlineAB = '截止'; $lang->task->status = '任务状态'; $lang->task->desc = '任务描述'; @@ -83,8 +83,8 @@ $lang->task->openedDate = '创建日期'; $lang->task->openedDateAB = '创建'; $lang->task->finishedBy = '由谁完成'; $lang->task->finishedByAB = '完成者'; -$lang->task->finishedDate = '完成时间'; -$lang->task->finishedDateAB = '完成时间'; +$lang->task->finishedDate = '实际完成'; +$lang->task->finishedDateAB = '实际完成'; $lang->task->finishedList = '完成者列表'; $lang->task->canceledBy = '由谁取消'; $lang->task->canceledDate = '取消时间'; diff --git a/module/user/css/common.css b/module/user/css/common.css index bde3aa6ce5..06906f0413 100644 --- a/module/user/css/common.css +++ b/module/user/css/common.css @@ -2,3 +2,4 @@ #featurebar ul.nav li .chosen-container .chosen-drop {min-width: 200px;!important} #dept_chosen.chosen-container .chosen-drop {min-width: 400px;!important} .w-verifyPassword {width: 120px !important;} +.w-enVerifyPassword {width: 150px !important;} diff --git a/module/user/view/create.html.php b/module/user/view/create.html.php index 9d9bca6ffd..dbf7057cce 100644 --- a/module/user/view/create.html.php +++ b/module/user/view/create.html.php @@ -23,8 +23,9 @@
            productCommon;?> productCommon;?> PO);?> product->qa;?> QD);?>
            + isINT) and $config->isINT) ? 'w-enVerifyPassword' : 'w-verifyPassword';?> - + diff --git a/module/user/view/edit.html.php b/module/user/view/edit.html.php index 23f5bb8b7d..e6e354c740 100644 --- a/module/user/view/edit.html.php +++ b/module/user/view/edit.html.php @@ -48,10 +48,11 @@
            user->dept;?>user->dept;?>
            + isINT) and $config->isINT) ? 'w-130px' : 'w-90px';?> - +
            user->accountInfo;?>
            user->account;?> account, "class='form-control'");?>user->email;?>user->email;?> email, "class='form-control'");?> @@ -93,8 +94,9 @@
            + isINT) and $config->isINT) ? 'w-enVerifyPassword' : 'w-verifyPassword';?> - +
            user->verify;?>
            user->verifyPassword;?>user->verifyPassword;?>
            user->placeholder->verify}'");?> From 54463d153a45167abe056809a6f42835acdecd4e Mon Sep 17 00:00:00 2001 From: Yagami <976204163@qq.com> Date: Wed, 20 Mar 2019 10:06:24 +0800 Subject: [PATCH 344/442] * Finish task #5367. --- module/product/view/view.html.php | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/module/product/view/view.html.php b/module/product/view/view.html.php index 6cfa0493e1..221a95d383 100644 --- a/module/product/view/view.html.php +++ b/module/product/view/view.html.php @@ -11,6 +11,9 @@ */ ?> +app->getClientLang() == 'en'):?> + +
            @@ -191,8 +194,9 @@
            + app->getClientLang() == 'en' ? ' ' : '';?> - + @@ -200,7 +204,7 @@ - + @@ -208,7 +212,7 @@ - + @@ -216,7 +220,7 @@ - + @@ -232,7 +236,6 @@ -
            From 1be6a10681fb66e3b2c5bf29560dc9b06835607e Mon Sep 17 00:00:00 2001 From: Yagami <976204163@qq.com> Date: Wed, 20 Mar 2019 10:51:21 +0800 Subject: [PATCH 345/442] * Finish task #5361. --- module/company/view/browse.html.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/module/company/view/browse.html.php b/module/company/view/browse.html.php index 59bbfc2d86..8c1d4224a5 100644 --- a/module/company/view/browse.html.php +++ b/module/company/view/browse.html.php @@ -73,7 +73,7 @@ js::set('confirmDelete', $lang->user->confirmDelete); - + @@ -95,7 +95,7 @@ js::set('confirmDelete', $lang->user->confirmDelete); - + + isINT)):?> +
            story->statusList['active'] . $lang->story->common;?>story->statusList['active'] . $space . $lang->story->common;?> stories['active']?> product->plans?> plans?>bugs?>
            story->statusList['changed'] . $lang->story->common;?>story->statusList['changed'] . $space . $lang->story->common;?> stories['changed']?> product->projects?> projects?>cases?>
            story->statusList['draft'] . $lang->story->common;?>story->statusList['draft'] . $space . $lang->story->common;?> stories['draft']?> product->builds?> builds?>docs?>
            story->statusList['closed'] . $lang->story->common;?>story->statusList['closed'] . $space . $lang->story->common;?> stories['closed']?> product->releases?> releases?> user->email);?> user->gender);?> user->phone);?>user->qq);?>app->getClientLang() == 'en' ? common::printOrderLink('skype', $orderBy, $vars, $lang->user->skype) : common::printOrderLink('qq', $orderBy, $vars, $lang->user->qq);?> user->last);?> user->visits);?> actions;?>email);?> user->genderList, $user->gender, $user->gender);?> phone;?>qq) echo html::a("tencent://message/?uin=$user->qq", $user->qq);?>app->getClientLang() == 'en' ? $user->skype : ($user->qq ? html::a("tencent://message/?uin=$user->qq", $user->qq) : '');?> last) echo date('Y-m-d', $user->last);?> visits;?> From ff426c094e6b9cf3d01e8624a34694cb27603fc8 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Wed, 20 Mar 2019 11:19:40 +0800 Subject: [PATCH 346/442] * finish task #5362. --- module/admin/view/register.html.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/module/admin/view/register.html.php b/module/admin/view/register.html.php index fddc4227cd..0162a4e398 100644 --- a/module/admin/view/register.html.php +++ b/module/admin/view/register.html.php @@ -42,6 +42,7 @@ user->company;?>
            company, "class='form-control'");?>
            user->mobile;?> @@ -55,6 +56,7 @@
            user->email;?> From c15a09473636c142bad0cde53791b4a1c9550012 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Wed, 20 Mar 2019 11:29:48 +0800 Subject: [PATCH 347/442] * finish task #5371. --- module/custom/lang/en.php | 1 + module/custom/lang/zh-cn.php | 1 + module/custom/view/set.html.php | 15 ++++++++++++++- 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/module/custom/lang/en.php b/module/custom/lang/en.php index 2ea43fdf79..91c11fe739 100644 --- a/module/custom/lang/en.php +++ b/module/custom/lang/en.php @@ -93,6 +93,7 @@ $lang->custom->notice->longlife = 'Define longlife bugs.'; $lang->custom->notice->invalidNumberKey = 'The key should be =< 255.'; $lang->custom->notice->invalidStringKey = 'The key should be a combination of lowercase letters, numbers or underlines.'; $lang->custom->notice->cannotSetTimezone = 'date_default_timezone_set does not exist or is disabled. Time zone cannot be set.'; +$lang->custom->notice->noClosedBlock = 'Blocks without permanent closure'; $lang->custom->notice->indexPage['product'] = "ZenTao 8.2+ has Product Homepage. Do you want to go to Product Homepage?"; $lang->custom->notice->indexPage['project'] = "ZenTao 8.2+ has Project Homepage. Do you want to go to Project Homepage?"; diff --git a/module/custom/lang/zh-cn.php b/module/custom/lang/zh-cn.php index 868406e8d2..994077166d 100644 --- a/module/custom/lang/zh-cn.php +++ b/module/custom/lang/zh-cn.php @@ -93,6 +93,7 @@ $lang->custom->notice->longlife = 'Bug列表页面的久未 $lang->custom->notice->invalidNumberKey = '键值应为不大于255的数字'; $lang->custom->notice->invalidStringKey = '键值应当为小写英文字母、数字或下划线的组合'; $lang->custom->notice->cannotSetTimezone = 'date_default_timezone_set方法不存在或禁用,不能设置时区。'; +$lang->custom->notice->noClosedBlock = '没有永久关闭的区块'; $lang->custom->notice->indexPage['product'] = "从8.2版本起增加了产品主页视图,是否默认进入产品主页?"; $lang->custom->notice->indexPage['project'] = "从8.2版本起增加了项目主页视图,是否默认进入项目主页?"; diff --git a/module/custom/view/set.html.php b/module/custom/view/set.html.php index 6ef62a37f3..dfb9740bde 100644 --- a/module/custom/view/set.html.php +++ b/module/custom/view/set.html.php @@ -107,10 +107,23 @@ EOT; - + + +
            custom->block->fields['closed'];?> + custom->notice->noClosedBlock; + } + else + { + echo html::select('closed[]', $blockPairs, $closedBlock, "class='form-control chosen' multiple"); + } + ?> +
            From 0e41e9db83e95f50b48514733a3cebd9662c282a Mon Sep 17 00:00:00 2001 From: Yagami <976204163@qq.com> Date: Wed, 20 Mar 2019 13:27:37 +0800 Subject: [PATCH 348/442] * Finish task #5344. --- db/zentao.sql | 1 + module/testcase/control.php | 19 +++++++++++++++++-- module/testcase/lang/en.php | 1 + module/testcase/lang/zh-cn.php | 1 + module/testcase/model.php | 9 +++++---- module/testcase/view/view.html.php | 5 +++-- 6 files changed, 28 insertions(+), 8 deletions(-) diff --git a/db/zentao.sql b/db/zentao.sql index e829c1d528..1a9cb41e34 100644 --- a/db/zentao.sql +++ b/db/zentao.sql @@ -166,6 +166,7 @@ CREATE TABLE IF NOT EXISTS `zt_case` ( `linkCase` varchar(255) NOT NULL, `fromBug` mediumint(8) unsigned NOT NULL, `fromCaseID` mediumint(8) unsigned NOT NULL, + `fromCaseVersion` mediumint(8) unsigned NOT NULL, `deleted` enum('0','1') NOT NULL default '0', `lastRunner` varchar(30) NOT NULL, `lastRunDate` datetime NOT NULL, diff --git a/module/testcase/control.php b/module/testcase/control.php index fe3b6e63fd..8dae13af0e 100644 --- a/module/testcase/control.php +++ b/module/testcase/control.php @@ -988,9 +988,10 @@ class testcase extends control * @access public * @return void */ - public function confirmLibcaseChange($caseID, $libcaseID, $version) + public function confirmLibcaseChange($caseID, $libcaseID) { - $case = $this->testcase->getById($caseID); + $case = $this->testcase->getById($caseID); + $version = $case->fromCaseVersion; $this->dao->update(TABLE_CASE)->set('version')->eq($version)->where('id')->eq($caseID)->exec(); $steps = $this->dao->select('*')->from(TABLE_CASESTEP)->where('`case`')->eq($libcaseID)->andWhere('version')->eq($version)->fetchAll(); foreach($steps as $step) @@ -1002,6 +1003,20 @@ class testcase extends control die(js::reload('parent')); } + /** + * Ignore libcase changed. + * + * @param int $caseID + * @access public + * @return void + */ + public function ignoreLibcaseChange($caseID) + { + $case = $this->testcase->getById($caseID); + $this->dao->update(TABLE_CASE)->set('fromCaseVersion')->eq($case->version)->where('id')->eq($caseID)->exec(); + die(js::reload('parent')); + } + /** * Confirm story changes. * diff --git a/module/testcase/lang/en.php b/module/testcase/lang/en.php index 6eec3173f3..9a59fbf960 100644 --- a/module/testcase/lang/en.php +++ b/module/testcase/lang/en.php @@ -65,6 +65,7 @@ $lang->testcase->createBug = 'Convert to Bug'; $lang->testcase->fromModule = 'Source Module'; $lang->testcase->fromCase = 'Source Case'; $lang->testcase->sync = 'Sync Case'; +$lang->testcase->ignore = 'Ignore'; $lang->testcase->fromTesttask = 'From Testtask'; $lang->testcase->fromCaselib = 'From Caselib'; $lang->case = $lang->testcase; // For dao checking using. Because 'case' is a php keywords, so the module name is testcase, table name is still case. diff --git a/module/testcase/lang/zh-cn.php b/module/testcase/lang/zh-cn.php index d9c8f59d4b..5f78be7927 100644 --- a/module/testcase/lang/zh-cn.php +++ b/module/testcase/lang/zh-cn.php @@ -65,6 +65,7 @@ $lang->testcase->createBug = '转Bug'; $lang->testcase->fromModule = '来源模块'; $lang->testcase->fromCase = '来源用例'; $lang->testcase->sync = '同步'; +$lang->testcase->ignore = '忽略'; $lang->testcase->fromTesttask = '测试单用例'; $lang->testcase->fromCaselib = '用例库用例'; $lang->case = $lang->testcase; // 用于DAO检查时使用。因为case是系统关键字,所以无法定义该模块为case,只能使用testcase,但表还是使用的case。 diff --git a/module/testcase/model.php b/module/testcase/model.php index 1e7f8a6f99..13006067a3 100644 --- a/module/testcase/model.php +++ b/module/testcase/model.php @@ -396,7 +396,6 @@ class testcaseModel extends model $case->latestStoryVersion = $story->version; } if($case->fromBug) $case->fromBugTitle = $this->dao->findById($case->fromBug)->from(TABLE_BUG)->fields('title')->fetch('title'); - if($case->fromCaseID) $case->libCaseVersion = $this->dao->findById($case->fromCaseID)->from(TABLE_CASE)->fetch('version'); $case->toBugs = array(); $toBugs = $this->dao->select('id, title')->from(TABLE_BUG)->where('`case`')->eq($caseID)->fetchAll(); @@ -672,6 +671,8 @@ class testcaseModel extends model if($stepChanged) { $parentStepID = 0; + $isLibCase = ($oldCase->lib and empty($oldCase->product)); + if($isLibCase) $this->dao->update(TABLE_CASE)->set('`fromCaseVersion`')->eq($version)->where('`fromCaseID`')->eq($caseID)->exec(); foreach($this->post->steps as $stepID => $stepDesc) { if(empty($stepDesc)) continue; @@ -1253,7 +1254,8 @@ class testcaseModel extends model $libSteps = $this->dao->select('*')->from(TABLE_CASESTEP)->where('`case`')->in($data->caseIdList)->orderBy('id')->fetchGroup('case'); foreach($libCases as $libCaseID => $case) { - $case->fromCaseID = $case->id; + $case->fromCaseID = $case->id; + $case->fromCaseVersion = $case->version; $case->product = $productID; if(isset($data->module[$case->id])) $case->module = $data->module[$case->id]; if(isset($data->branch[$case->id])) $case->branch = $data->branch[$case->id]; @@ -1339,7 +1341,6 @@ class testcaseModel extends model $caseLink = helper::createLink('testcase', 'view', "caseID=$case->id&version=$case->version"); $account = $this->app->user->account; $fromCaseID = $case->fromCaseID; - if($fromCaseID) $libCaseVersion = $this->dao->findById($fromCaseID)->from(TABLE_CASE)->fetch('version'); $id = $col->id; if($col->show) { @@ -1392,7 +1393,7 @@ class testcaseModel extends model { print("lang->testcase->fromTesttask}>{$this->lang->story->changed}"); } - elseif(isset($libCaseVersion) and $libCaseVersion > $case->version and !$case->needconfirm) + elseif(isset($case->fromCaseVersion) and $case->fromCaseVersion > $case->version and !$case->needconfirm) { print("lang->testcase->fromCaselib}>{$this->lang->testcase->changed}"); } diff --git a/module/testcase/view/view.html.php b/module/testcase/view/view.html.php index 539ac2d16e..9067b0ff5c 100644 --- a/module/testcase/view/view.html.php +++ b/module/testcase/view/view.html.php @@ -223,10 +223,11 @@ echo html::a($this->createLink('testcase', 'confirmchange', "caseID=$case->id"), $lang->testcase->sync, 'hiddenwin', "class='btn btn-mini btn-info'"); echo ")"; } - if(isset($case->libCaseVersion) and $case->libCaseVersion > $case->version and $from != 'testtask') + if(isset($case->fromCaseVersion) and $case->fromCaseVersion > $case->version and $from != 'testtask') { echo "(testcase->fromCaselib}>{$lang->testcase->changed} "; - echo html::a($this->createLink('testcase', 'confirmLibcaseChange', "caseID=$case->id&libcaseID=$case->fromCaseID&version=$case->libCaseVersion"), $lang->testcase->sync, 'hiddenwin', "class='btn btn-mini btn-info'"); + echo html::a($this->createLink('testcase', 'confirmLibcaseChange', "caseID=$case->id&libcaseID=$case->fromCaseID"), $lang->testcase->sync, 'hiddenwin', "class='btn btn-mini btn-info'"); + echo html::a($this->createLink('testcase', 'ignoreLibcaseChange', "caseID=$case->id"), $lang->testcase->ignore, 'hiddenwin', "class='btn btn-mini btn-info'"); echo ")"; } ?> From 7dfdbe841d6806772e0cf8b8c84e5c2e393d6658 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Wed, 20 Mar 2019 13:33:17 +0800 Subject: [PATCH 349/442] * finish task #5357. --- module/bug/view/browse.html.php | 2 +- module/search/view/buildform.html.php | 20 +++++++++++--------- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/module/bug/view/browse.html.php b/module/bug/view/browse.html.php index 0147853aff..45f488d98d 100644 --- a/module/bug/view/browse.html.php +++ b/module/bug/view/browse.html.php @@ -384,7 +384,7 @@ $('#module' + moduleID).closest('li').addClass('active'); if($('#query li.active').size() == 0) $.toggleQueryBox(true); - + $(function(){$('#bugForm').table();}) app->loadConfig('qa', '', false);?> diff --git a/module/search/view/buildform.html.php b/module/search/view/buildform.html.php index ca07c26eef..f3865d485f 100644 --- a/module/search/view/buildform.html.php +++ b/module/search/view/buildform.html.php @@ -15,15 +15,17 @@ $jsRoot = $this->app->getWebRoot() . "js/"; include '../../common/view/datepicker.html.php'; include '../../common/view/chosen.html.php'; $formId = 'searchForm-' . uniqid(''); +$fieldWidth = $app->getClientLang() == 'en' ? 'w-130px' : 'w-110px'; +$operatorWidth = $app->getClientLang() == 'en' ? 'w-110px' : 'w-100px'; ?> - -
            -
            -
            -
            -
            -
            -
            product->roadmap;?>
            -
            -
            -
            - -
            - createLink('product', 'roadmap', "productID={$product->id}"), $lang->product->iterationView . "", '', "class='btn btn-primary btn-circle btn-icon-right btn-sm pull-right'");?> -
            +
            +
            +
            +
            +
            +
            +
            product->roadmap;?>
            -
            -
            -
            -
            -
            product->latestDynamic;?>
            - -
            -
            -
              - -
            • major) echo "class='active'";?>> -
              - date;?> - actor) . ' ' . $action->actionLabel . $action->objectLabel . ' ' . html::a($action->objectLink, $action->objectName);?> -
              +
              +
              +
              + createLink('product', 'roadmap', "productID={$product->id}"), $lang->product->iterationView . "", '', "class='btn btn-primary btn-circle btn-icon-right btn-sm pull-right'");?>
            -
            - - +
            +
            +
            +
            +
            product->latestDynamic;?>
            + +
            +
            +
              + +
            • major) echo "class='active'";?>> +
              + date;?> + actor) . ' ' . $action->actionLabel . $action->objectLabel . ' ' . html::a($action->objectLink, $action->objectName);?> +
              +
            • + +
            +
            -
            -
            - id"; - $browseLink = $this->session->productList ? $this->session->productList : inlink('browse', "productID=$product->id"); - common::printBack($browseLink); - if(!$product->deleted) - { - echo "
            "; - if($product->status != 'closed') - { - common::printIcon('product', 'close', $params, $product, 'button', '', '', 'iframe', true); - echo "
            "; - } - - common::printIcon('product', 'edit', $params, $product); - common::printIcon('product', 'delete', $params, $product, 'button', 'trash', 'hiddenwin'); - } - ?> -
            +
            + +
            -
            -
            -
            -
            -
            -

            id;?> code;?> name;?>

            -
            -

            desc;?>

            -

            - product->typeList, $product->type);?> - product->statusList, $product->status);?> - deleted):?> - product->deleted;?> - -

            -
            +
            +
            + id"; + $browseLink = $this->session->productList ? $this->session->productList : inlink('browse', "productID=$product->id"); + common::printBack($browseLink); + if(!$product->deleted) + { + echo "
            "; + if($product->status != 'closed') + { + common::printIcon('product', 'close', $params, $product, 'button', '', '', 'iframe', true); + echo "
            "; + } + + common::printIcon('product', 'edit', $params, $product); + common::printIcon('product', 'delete', $params, $product, 'button', 'trash', 'hiddenwin'); + } + ?> +
            +
            +
            +
            +
            +
            +
            +
            +

            id;?> code;?> name;?>

            +
            +

            desc;?>

            +

            + product->typeList, $product->type);?> + product->statusList, $product->status);?> + deleted):?> + product->deleted;?> + +

            - type == 'platform'):?> -
            -
            product->branchName['platform'];?>
            - -
            - -
            -
            product->manager;?>
            -
            - - - - - - - - - - - - - -
            productCommon;?>PO);?> product->qa;?>QD);?>
            product->release;?>RD);?>
            -
            -
            -
            -
            product->basicInfo;?>
            -
            - - - - - - - - - - - - - - - - - - - acl == 'custom'):?> - - - - - - -
            product->line;?>line);?>
            story->openedBy?>createdBy);?>
            story->openedDate?>createdDate, DT_DATE1);?>
            product->acl;?>product->aclList[$product->acl];?>
            product->whitelist;?> - - whitelist); - foreach($whitelist as $groupID) if(isset($groups[$groupID])) echo $groups[$groupID] . ' '; - ?> - -
            -
            -
            - global->flow != 'onlyTest'):?> -
            -
            product->otherInfo;?>
            -
            - - - app->getClientLang() == 'en' ? ' ' : '';?> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
            story->statusList['active'] . $space . $lang->story->common;?>stories['active']?>product->plans?>plans?>product->bugs?>bugs?>
            story->statusList['changed'] . $space . $lang->story->common;?>stories['changed']?>product->projects?>projects?>product->cases?>cases?>
            story->statusList['draft'] . $space . $lang->story->common;?>stories['draft']?>product->builds?>builds?>product->docs?>docs?>
            story->statusList['closed'] . $space . $lang->story->common;?>stories['closed']?>product->releases?>releases?>
            -
            -
            -
            + type == 'platform'):?> +
            +
            product->branchName['platform'];?>
            + +
            + +
            +
            product->manager;?>
            +
            + + + + + + + + + + + + + +
            productCommon;?>PO);?> product->qa;?>QD);?>
            product->release;?>RD);?>
            +
            +
            +
            +
            product->basicInfo;?>
            +
            + + + + + + + + + + + + + + + + + + + acl == 'custom'):?> + + + + + + +
            product->line;?>line);?>
            story->openedBy?>createdBy);?>
            story->openedDate?>createdDate, DT_DATE1);?>
            product->acl;?>product->aclList[$product->acl];?>
            product->whitelist;?> + + whitelist); + foreach($whitelist as $groupID) if(isset($groups[$groupID])) echo $groups[$groupID] . ' '; + ?> + +
            +
            +
            + global->flow != 'onlyTest'):?> +
            +
            product->otherInfo;?>
            +
            + + + app->getClientLang() == 'en' ? ' ' : '';?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
            story->statusList['active'] . $space . $lang->story->common;?>stories['active']?>product->plans?>plans?>product->bugs?>bugs?>
            story->statusList['changed'] . $space . $lang->story->common;?>stories['changed']?>product->projects?>projects?>product->cases?>cases?>
            story->statusList['draft'] . $space . $lang->story->common;?>stories['draft']?>product->builds?>builds?>product->docs?>docs?>
            story->statusList['closed'] . $space . $lang->story->common;?>stories['closed']?>product->releases?>releases?>
            +
            +
            +
            diff --git a/module/user/view/create.html.php b/module/user/view/create.html.php index dbf7057cce..afc5113418 100644 --- a/module/user/view/create.html.php +++ b/module/user/view/create.html.php @@ -23,7 +23,7 @@
            - isINT) and $config->isINT) ? 'w-enVerifyPassword' : 'w-verifyPassword';?> + getClientLang() == 'en') ? 'w-enVerifyPassword' : 'w-verifyPassword';?> diff --git a/module/user/view/edit.html.php b/module/user/view/edit.html.php index e6e354c740..c13c3e3486 100644 --- a/module/user/view/edit.html.php +++ b/module/user/view/edit.html.php @@ -48,7 +48,7 @@
            user->dept;?>
            - isINT) and $config->isINT) ? 'w-130px' : 'w-90px';?> + getClientLang() == 'en') ? 'w-130px' : 'w-90px';?> @@ -94,7 +94,7 @@
            user->accountInfo;?>
            user->account;?> account, "class='form-control'");?>
            - isINT) and $config->isINT) ? 'w-enVerifyPassword' : 'w-verifyPassword';?> + getClientLang() == 'en') ? 'w-enVerifyPassword' : 'w-verifyPassword';?> productName):?> - + projectName):?> - + diff --git a/module/project/model.php b/module/project/model.php index 61ae7e1279..76a14e6888 100644 --- a/module/project/model.php +++ b/module/project/model.php @@ -119,13 +119,19 @@ class projectModel extends model /* Replace for dropdown submenu. */ if(isset($this->lang->project->subMenu->$key)) { + $projectSubMenu = $this->lang->project->subMenu->$key; $subMenu = common::createSubMenu($this->lang->project->subMenu->$key, $projectID); if(!empty($subMenu)) { - foreach($subMenu as $menu) + foreach($subMenu as $menuKey => $menu) { - if($moduleName == strtolower($menu->link['module']) and $methodName == strtolower($menu->link['method'])) + if($moduleName == strtolower($menu->link['module']) and + ( + $methodName == strtolower($menu->link['method']) or + (isset($projectSubMenu->$menuKey['alias']) and strpos($projectSubMenu->$menuKey['alias'], $methodName) !== false) + ) + ) { $this->lang->project->menu->{$key}['link'] = $menu->text . "|" . join('|', $menu->link); break; From bf97231962a2800ac864097d4448002287c8036e Mon Sep 17 00:00:00 2001 From: wangyidong Date: Thu, 28 Mar 2019 10:28:26 +0800 Subject: [PATCH 394/442] * adjust for task getProjectTaskPairs method. --- module/task/model.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/module/task/model.php b/module/task/model.php index d22fc037db..029837eb42 100644 --- a/module/task/model.php +++ b/module/task/model.php @@ -1044,7 +1044,7 @@ class taskModel extends model ->removeIF(!empty($oldTask->team), 'consumed,left') ->remove('comment')->get(); - if(empty($task->team) && $this->post->left == 0) + if($this->post->left == 0) { $task->status = 'done'; $task->finishedBy = $this->app->user->account; @@ -1665,7 +1665,7 @@ class taskModel extends model public function getProjectTaskPairs($projectID, $status = 'all', $orderBy = 'finishedBy, id_desc') { $tasks = array('' => ''); - $stmt = $this->dao->select('t1.id, t1.name, t2.realname AS finishedByRealName') + $stmt = $this->dao->select('t1.id,t1.name,t1.parent,t2.realname AS finishedByRealName') ->from(TABLE_TASK)->alias('t1') ->leftJoin(TABLE_USER)->alias('t2')->on('t1.finishedBy = t2.account') ->where('t1.project')->eq((int)$projectID) @@ -1673,7 +1673,7 @@ class taskModel extends model ->beginIF($status != 'all')->andWhere('t1.status')->in($status)->fi() ->orderBy($orderBy) ->query(); - while($task = $stmt->fetch()) $tasks[$task->id] = "$task->id:$task->finishedByRealName:$task->name"; + while($task = $stmt->fetch()) $tasks[$task->id] = ($task->parent > 0 ? "[{$this->lang->task->childrenAB}] " : '') . "$task->id:$task->finishedByRealName:$task->name"; return $tasks; } From bcfbd81bef9334e67bbad3aa4027b4d94d7c9b0d Mon Sep 17 00:00:00 2001 From: Yagami <976204163@qq.com> Date: Thu, 28 Mar 2019 10:54:58 +0800 Subject: [PATCH 395/442] * Fix taskleft sql. --- db/update11.4.sql | 2 ++ db/zentao.sql | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 db/update11.4.sql diff --git a/db/update11.4.sql b/db/update11.4.sql new file mode 100644 index 0000000000..0a36f6bf6e --- /dev/null +++ b/db/update11.4.sql @@ -0,0 +1,2 @@ +ALTER TABLE `zt_burn` ADD `task` mediumint(8) unsigned NOT NULL DEFAULT '0' AFTER `project`; +ALTER TABLE `zt_burn` ADD PRIMARY KEY `project_date_task` (`project`, `date`, `task`), DROP INDEX `PRIMARY`; diff --git a/db/zentao.sql b/db/zentao.sql index 1a9cb41e34..6f1175eb92 100644 --- a/db/zentao.sql +++ b/db/zentao.sql @@ -125,11 +125,12 @@ CREATE TABLE IF NOT EXISTS `zt_build` ( -- DROP TABLE IF EXISTS `zt_burn`; CREATE TABLE IF NOT EXISTS `zt_burn` ( `project` mediumint(8) unsigned NOT NULL, + `task` mediumint(8) unsigned NOT NULL DEFAULT '0', `date` date NOT NULL, `estimate` float NOT NULL, `left` float NOT NULL, `consumed` float NOT NULL, - PRIMARY KEY (`project`,`date`) + PRIMARY KEY (`project`,`date`,`task`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- DROP TABLE IF EXISTS `zt_case`; CREATE TABLE IF NOT EXISTS `zt_case` ( From 8d06d00235b0cee59f53978dd9c3b781c9a37067 Mon Sep 17 00:00:00 2001 From: Yagami <976204163@qq.com> Date: Thu, 28 Mar 2019 11:20:22 +0800 Subject: [PATCH 396/442] * Fix project warning. --- module/project/model.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/module/project/model.php b/module/project/model.php index b2d559d16b..0de8d44eeb 100644 --- a/module/project/model.php +++ b/module/project/model.php @@ -126,10 +126,11 @@ class projectModel extends model { foreach($subMenu as $menuKey => $menu) { + $itemMenu = zget($projectSubMenu, $menuKey, ''); if($moduleName == strtolower($menu->link['module']) and ( $methodName == strtolower($menu->link['method']) or - (isset($projectSubMenu->$menuKey['alias']) and strpos($projectSubMenu->$menuKey['alias'], $methodName) !== false) + (is_array($itemMenu) and isset($itemMenu['alias']) and strpos($itemMenu['alias'], $methodName) !== false) ) ) { From 670fb65ca0b364fc6566bda7342b54be743cc639 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Thu, 28 Mar 2019 11:21:52 +0800 Subject: [PATCH 397/442] * fix for include defaultvalue. --- framework/base/router.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/framework/base/router.class.php b/framework/base/router.class.php index 0e7d1e18cd..5e083621ed 100644 --- a/framework/base/router.class.php +++ b/framework/base/router.class.php @@ -1528,7 +1528,7 @@ class baseRouter { $code = trim(file_get_contents($fileName)); if(strpos($code, '') !== false) $code = rtrim($code, '?>'); + if(strrpos($code, '?' . '>') !== false) $code = rtrim($code, '?' . '>'); return trim($code); } @@ -1650,7 +1650,7 @@ class baseRouter /* include default value for module*/ $defaultValueFiles = glob($this->getTmpRoot() . "defaultvalue/*.php"); - if($defaultValueFiles) foreach($defaultValueFiles as $file) helper::import($file); + if($defaultValueFiles) foreach($defaultValueFiles as $file) include $file; /* * 使用反射机制获取函数参数的默认值。 From 910dfe2b946f338f9da2cd3f17bf49088bec608c Mon Sep 17 00:00:00 2001 From: wangyidong Date: Thu, 28 Mar 2019 16:56:17 +0800 Subject: [PATCH 398/442] * fix bug #1701. --- module/todo/model.php | 2 +- module/todo/view/batchcreate.html.php | 44 ++++++++++++--------------- 2 files changed, 21 insertions(+), 25 deletions(-) diff --git a/module/todo/model.php b/module/todo/model.php index 8280fc0568..5883071372 100644 --- a/module/todo/model.php +++ b/module/todo/model.php @@ -94,7 +94,7 @@ class todoModel extends model { $todo = new stdclass(); $todo->account = $this->app->user->account; - if($this->post->date == false) + if($this->post->switchDate == 'on' or $this->post->date == false) { $todo->date = '2030-01-01'; } diff --git a/module/todo/view/batchcreate.html.php b/module/todo/view/batchcreate.html.php index 6ff3803c2f..4e938ba974 100755 --- a/module/todo/view/batchcreate.html.php +++ b/module/todo/view/batchcreate.html.php @@ -13,25 +13,25 @@ -
            -
            -

            todo->batchCreate . $lang->todo->common;?>

            -
            - todo->date;?> - - -
            - - -
            -
            +'> +
            +
            +

            todo->batchCreate . $lang->todo->common;?>

            +
            + todo->date;?> + + +
            + + +
            +
            +
            +
            + createLink('custom', 'ajaxSaveCustomFields', 'module=todo§ion=custom&key=batchCreateFields')?> + +
            -
            - createLink('custom', 'ajaxSaveCustomFields', 'module=todo§ion=custom&key=batchCreateFields')?> - -
            -
            - '>
            user->verify;?>
            user->verifyPassword;?> From 85638822128d0143758e49e56990691d61130667 Mon Sep 17 00:00:00 2001 From: Yagami <976204163@qq.com> Date: Mon, 25 Mar 2019 13:36:04 +0800 Subject: [PATCH 383/442] * Fix en task menu. --- module/project/view/task.html.php | 34 +++++++++++++++++++------------ 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/module/project/view/task.html.php b/module/project/view/task.html.php index 7a5ce4b66a..e64ec6dd8f 100644 --- a/module/project/view/task.html.php +++ b/module/project/view/task.html.php @@ -149,23 +149,31 @@ js::set('browseType', $browseType); project = $projectID; - if(!isset($this->config->isINT) or !$this->config->isINT or $this->app->getClientLang() != 'en') - { - $link = $this->createLink('task', 'batchCreate', "project=$projectID" . (isset($moduleID) ? "&storyID=&moduleID=$moduleID" : '')); - if(common::hasPriv('task', 'batchCreate', $checkObject)) echo html::a($link, " {$lang->task->batchCreate}", '', "class='btn btn btn-secondary'"); - } + ?> + getClientLang() != 'en'):?> + createLink('task', 'batchCreate', "project=$projectID" . (isset($moduleID) ? "&storyID=&moduleID=$moduleID" : '')); + if(common::hasPriv('task', 'batchCreate', $checkObject)) echo html::a($link, " {$lang->task->batchCreate}", '', "class='btn btn btn-secondary'"); $link = $this->createLink('task', 'create', "project=$projectID" . (isset($moduleID) ? "&storyID=&moduleID=$moduleID" : '')); if(common::hasPriv('task', 'create', $checkObject)) echo html::a($link, " {$lang->task->create}", '', "class='btn btn-primary'"); ?> - config->isINT) and $this->config->isINT and $this->app->getClientLang() == 'en'):?> - createLink('task', 'batchCreate', "project=$projectID" . (isset($moduleID) ? "&storyID=&moduleID=$moduleID" : ''));?> - + + "; + $link = $this->createLink('task', 'create', "project=$projectID" . (isset($moduleID) ? "&storyID=&moduleID=$moduleID" : '')); + if(common::hasPriv('task', 'create', $checkObject)) echo html::a($link, " {$lang->task->create} ", '', "class='btn btn-primary'"); + ?> + + ";?> From 84955d15abcde2f32320c77092e2abe01e65c51b Mon Sep 17 00:00:00 2001 From: wangyidong Date: Mon, 25 Mar 2019 13:45:59 +0800 Subject: [PATCH 384/442] * adjust for testStory. --- module/story/model.php | 13 +++++++++++++ module/task/control.php | 5 +---- module/testtask/model.php | 1 + 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/module/story/model.php b/module/story/model.php index d052e6d83e..e7094c4395 100644 --- a/module/story/model.php +++ b/module/story/model.php @@ -82,6 +82,19 @@ class storyModel extends model ->fetchAll('id'); } + /** + * Get test stories. + * + * @param array $storyIdList + * @param int $projectID + * @access public + * @return array + */ + public function getTestStories($storyIdList, $projectID) + { + return $this->dao->select('story')->from(TABLE_TASK)->where('project')->eq($projectID)->andWhere('type')->eq('test')->andWhere('story')->in($storyIdList)->fetchPairs('story', 'story'); + } + /** * Get story specs. * diff --git a/module/task/control.php b/module/task/control.php index 3c0d0e2030..ba06534941 100644 --- a/module/task/control.php +++ b/module/task/control.php @@ -172,9 +172,6 @@ class task extends control $members = $this->project->getTeamMemberPairs($projectID, 'nodeleted'); $moduleOptionMenu = $this->tree->getTaskOptionMenu($projectID); - /* Get no test stories. */ - $testStoryIdList = $this->dao->select('story')->from(TABLE_TASK)->where('project')->eq($projectID)->andWhere('story')->in(array_keys($stories))->fetchPairs('story', 'story'); - $title = $project->name . $this->lang->colon . $this->lang->task->create; $position[] = html::a($taskLink, $project->name); $position[] = $this->lang->task->common; @@ -194,7 +191,7 @@ class task extends control $this->view->task = $task; $this->view->users = $users; $this->view->stories = $stories; - $this->view->testStoryIdList = $testStoryIdList; + $this->view->testStoryIdList = $this->loadModel('story')->getTestStories(array_keys($stories), $project->id); $this->view->members = $members; $this->view->moduleOptionMenu = $moduleOptionMenu; $this->display(); diff --git a/module/testtask/model.php b/module/testtask/model.php index 9cf83de325..a277c34966 100644 --- a/module/testtask/model.php +++ b/module/testtask/model.php @@ -438,6 +438,7 @@ class testtaskModel extends model */ public function getLinkableCasesBySuite($productID, $task, $query, $suite, $linkedCases, $pager) { + if(strpos($query, '`product`') !== false) $query = str_replace('`product`', 't1.`product`', $query); return $this->dao->select('t1.*,t2.version as version')->from(TABLE_CASE)->alias('t1') ->leftJoin(TABLE_SUITECASE)->alias('t2')->on('t1.id=t2.case') ->where($query) From fcf80e86758aa98c409f788b1fba843612590f00 Mon Sep 17 00:00:00 2001 From: Yagami <976204163@qq.com> Date: Mon, 25 Mar 2019 14:01:56 +0800 Subject: [PATCH 385/442] * Fix task lang file. --- module/task/lang/zh-cn.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/task/lang/zh-cn.php b/module/task/lang/zh-cn.php index a4ba48d715..3670c92e33 100644 --- a/module/task/lang/zh-cn.php +++ b/module/task/lang/zh-cn.php @@ -68,7 +68,7 @@ $lang->task->datePlan = '日程规划'; $lang->task->estStarted = '预计开始'; $lang->task->realStarted = '实际开始'; $lang->task->date = '日期'; -$lang->task->deadline = '计划完成'; +$lang->task->deadline = '截止日期'; $lang->task->deadlineAB = '截止'; $lang->task->status = '任务状态'; $lang->task->desc = '任务描述'; From 7d783617182e3749705923ba137bf7cf5c5e9cc3 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Tue, 26 Mar 2019 08:21:39 +0800 Subject: [PATCH 386/442] * adjust for field width. --- module/story/config.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/story/config.php b/module/story/config.php index da238b0291..d77f07bf8a 100644 --- a/module/story/config.php +++ b/module/story/config.php @@ -102,7 +102,7 @@ $config->story->datatable->fieldList['estimate']['required'] = 'no'; $config->story->datatable->fieldList['stage']['title'] = 'stageAB'; $config->story->datatable->fieldList['stage']['fixed'] = 'no'; -$config->story->datatable->fieldList['stage']['width'] = '70'; +$config->story->datatable->fieldList['stage']['width'] = '80'; $config->story->datatable->fieldList['stage']['required'] = 'no'; $config->story->datatable->fieldList['openedBy']['title'] = 'openedByAB'; From 395004bc6da5d88e31ab2b947c0276daa9b11f52 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Tue, 26 Mar 2019 14:58:52 +0800 Subject: [PATCH 387/442] * adjust for convert url. --- www/js/my.full.js | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/www/js/my.full.js b/www/js/my.full.js index 90204584a3..d8b48221f6 100644 --- a/www/js/my.full.js +++ b/www/js/my.full.js @@ -731,18 +731,21 @@ function convertURL() { if($('.article-content, .article>.content').size() == 0) return; - var aTags = new Array(); - var content = $('.article-content, .article>.content').html(); - $('.article-content, .article>.content').find('a').each(function(i) + $('.article-content, .article>.content').each(function() { - aTags[i] = $(this).prop('outerHTML'); - content = content.replace(aTags[i], ''); - }); + var aTags = new Array(); + var content = $(this).html(); + $(this).find('a').each(function(i) + { + aTags[i] = $(this).prop('outerHTML'); + content = content.replace(aTags[i], ''); + }); - var regexp = /(http:\/\/|https:\/\/)((\w|=|\?|\.|\/|\&|-|%|;)+)/g; - content = content.replace(regexp, function($url){ return "" + $url + "";}); - for(i in aTags) content = content.replace('', aTags[i]); - $('.article-content, .article>.content').html(content); + var regexp = /(http:\/\/|https:\/\/)((\w|=|\?|\.|\/|\&|-|%|;)+)/g; + content = content.replace(regexp, function($url){ return "" + $url + "";}); + for(i in aTags) content = content.replace('', aTags[i]); + $(this).html(content); + }); } /* Ping the server every some minutes to keep the session. */ From 0b0882cba89bb7fc42a3eaf9568dbc2a080a9c40 Mon Sep 17 00:00:00 2001 From: Yagami <976204163@qq.com> Date: Tue, 26 Mar 2019 15:01:01 +0800 Subject: [PATCH 388/442] * Fix block delete. --- module/block/js/dashboard.js | 2 +- module/testcase/model.php | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/module/block/js/dashboard.js b/module/block/js/dashboard.js index a70869e1e3..f7bd58480b 100644 --- a/module/block/js/dashboard.js +++ b/module/block/js/dashboard.js @@ -18,7 +18,7 @@ function deleteBlock(index) } else { - $('#block' + index).remove(); + window.location.reload(true); } }); } diff --git a/module/testcase/model.php b/module/testcase/model.php index 13006067a3..74cc3e397e 100644 --- a/module/testcase/model.php +++ b/module/testcase/model.php @@ -672,7 +672,13 @@ class testcaseModel extends model { $parentStepID = 0; $isLibCase = ($oldCase->lib and empty($oldCase->product)); - if($isLibCase) $this->dao->update(TABLE_CASE)->set('`fromCaseVersion`')->eq($version)->where('`fromCaseID`')->eq($caseID)->exec(); + if($isLibCase) + { + $fromcaseVersion = $this->dao->select('fromCaseVersion')->from(TABLE_CASE)->where('fromCaseID')->eq($caseID)->fetch('fromCaseVersion'); + $fromcaseVersion += 1; + $this->dao->update(TABLE_CASE)->set('`fromCaseVersion`')->eq($fromcaseVersion)->where('`fromCaseID`')->eq($caseID)->exec(); + } + foreach($this->post->steps as $stepID => $stepDesc) { if(empty($stepDesc)) continue; From 71f948d3774a0d856e876eedd6bb7a5abac351bb Mon Sep 17 00:00:00 2001 From: Yagami <976204163@qq.com> Date: Tue, 26 Mar 2019 15:31:07 +0800 Subject: [PATCH 389/442] * Fix testcase confim change. --- module/testcase/control.php | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/module/testcase/control.php b/module/testcase/control.php index 5403fd8ec5..9b94d45f28 100644 --- a/module/testcase/control.php +++ b/module/testcase/control.php @@ -986,16 +986,17 @@ class testcase extends control public function confirmLibcaseChange($caseID, $libcaseID) { $case = $this->testcase->getById($caseID); - $version = $case->fromCaseVersion; - $this->dao->update(TABLE_CASE)->set('version')->eq($version)->where('id')->eq($caseID)->exec(); - $steps = $this->dao->select('*')->from(TABLE_CASESTEP)->where('`case`')->eq($libcaseID)->andWhere('version')->eq($version)->fetchAll(); - foreach($steps as $step) + $libCase = $this->testcase->getById($libcaseID); + $version = $case->version + 1; + $this->dao->update(TABLE_CASE)->set('version')->eq($version)->set('fromCaseVersion')->eq($version)->where('id')->eq($caseID)->exec(); + foreach($libCase->steps as $step) { unset($step->id); - $step->case = $caseID; + $step->case = $caseID; + $step->version = $version; $this->dao->insert(TABLE_CASESTEP)->data($step)->exec(); } - die(js::reload('parent')); + die(js::locate($this->createLink('testcase', 'view', "caseID=$caseID&version=$version"), 'parent')); } /** From d1014dd0184765cd1b2727bdd3f14c17ac347ef6 Mon Sep 17 00:00:00 2001 From: Yagami <976204163@qq.com> Date: Tue, 26 Mar 2019 15:50:15 +0800 Subject: [PATCH 390/442] * Carry back xuanxuan lang. --- xuanxuan/module/chat/ext/lang/en/xuanxuan.php | 6 ++++++ xuanxuan/module/chat/ext/lang/zh-cn/xuanxuan.php | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/xuanxuan/module/chat/ext/lang/en/xuanxuan.php b/xuanxuan/module/chat/ext/lang/en/xuanxuan.php index 9bc66cd356..7c5397821b 100644 --- a/xuanxuan/module/chat/ext/lang/en/xuanxuan.php +++ b/xuanxuan/module/chat/ext/lang/en/xuanxuan.php @@ -11,6 +11,12 @@ $lang->chat->getChatUsers = 'Get Chat Users'; $lang->chat->getChatGroups = 'Get Chat Groups'; $lang->chat->notifyMSG = 'Notify'; +$lang->chat->createBug = 'Create Bug'; +$lang->chat->createDoc = 'Create Doc'; +$lang->chat->createStory = 'Create Story'; +$lang->chat->createTask = 'Create Task'; +$lang->chat->createTodo = 'Create Todo'; + $lang->chat->turnonList = array(); $lang->chat->turnonList[1] = 'Enable'; $lang->chat->turnonList[0] = 'Disable'; diff --git a/xuanxuan/module/chat/ext/lang/zh-cn/xuanxuan.php b/xuanxuan/module/chat/ext/lang/zh-cn/xuanxuan.php index 6c5588aa8e..c60224f9d0 100644 --- a/xuanxuan/module/chat/ext/lang/zh-cn/xuanxuan.php +++ b/xuanxuan/module/chat/ext/lang/zh-cn/xuanxuan.php @@ -11,6 +11,12 @@ $lang->chat->getChatUsers = '获取用户'; $lang->chat->getChatGroups = '获取讨论组'; $lang->chat->notifyMSG = '消息通知'; +$lang->chat->createBug = '创建 Bug'; +$lang->chat->createDoc = '创建文档'; +$lang->chat->createStory = '创建需求'; +$lang->chat->createTask = '创建任务'; +$lang->chat->createTodo = '创建待办'; + $lang->chat->turnonList = array(); $lang->chat->turnonList[1] = '是'; $lang->chat->turnonList[0] = '否'; From 9f42f0b0d471746d54281c8ea1d6e1e55c8b365a Mon Sep 17 00:00:00 2001 From: wangyidong Date: Wed, 27 Mar 2019 09:21:30 +0800 Subject: [PATCH 391/442] * fix bug. --- module/task/model.php | 1 + 1 file changed, 1 insertion(+) diff --git a/module/task/model.php b/module/task/model.php index 83ed72097d..d22fc037db 100644 --- a/module/task/model.php +++ b/module/task/model.php @@ -44,6 +44,7 @@ class taskModel extends model ->join('mailto', ',') ->remove('after,files,labels,assignedTo,uid,storyEstimate,storyDesc,storyPri,team,teamEstimate,teamMember,multiple,teams,contactListMenu,selectTestStory,testStory,testPri,testEstStarted,testDeadline,testAssignedTo,testEstimate') ->get(); + if($task->type != 'test') $this->post->set('selectTestStory', 0); foreach($this->post->assignedTo as $assignedTo) { From 81da2b6326ad2138369785412c2d23741764f356 Mon Sep 17 00:00:00 2001 From: Yagami <976204163@qq.com> Date: Wed, 27 Mar 2019 10:58:42 +0800 Subject: [PATCH 392/442] * Fix burn select condition. --- module/project/model.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/module/project/model.php b/module/project/model.php index 61ae7e1279..46fd1e2592 100644 --- a/module/project/model.php +++ b/module/project/model.php @@ -897,6 +897,7 @@ class projectModel extends model $burns = $this->dao->select('project, date AS name, `left` AS value') ->from(TABLE_BURN) ->where('project')->in($projectKeys) + ->andWhere('task')->eq(0) ->orderBy('date desc') ->fetchGroup('project', 'name'); @@ -1876,7 +1877,7 @@ class projectModel extends model public function fixFirst($projectID) { $project = $this->getById($projectID); - $burn = $this->dao->select('*')->from(TABLE_BURN)->where('project')->eq($projectID)->andWhere('date')->eq($project->begin)->fetch(); + $burn = $this->dao->select('*')->from(TABLE_BURN)->where('project')->eq($projectID)->andWhere('task')->eq(0)->andWhere('date')->eq($project->begin)->fetch(); $withLeft = $this->post->withLeft ? $this->post->withLeft : 0; $data = fixer::input('post') @@ -1904,7 +1905,7 @@ class projectModel extends model $project = $this->getById($projectID); /* If the burnCounts > $itemCounts, get the latest $itemCounts records. */ - $sets = $this->dao->select('date AS name, `left` AS value, estimate')->from(TABLE_BURN)->where('project')->eq((int)$projectID)->orderBy('date DESC')->fetchAll('name'); + $sets = $this->dao->select('date AS name, `left` AS value, estimate')->from(TABLE_BURN)->where('project')->eq((int)$projectID)->andWhere('task')->eq(0)->orderBy('date DESC')->fetchAll('name'); $count = 0; $burnData = array(); From 055340062f1e5f50b0516d311e4e83f7caa2af3b Mon Sep 17 00:00:00 2001 From: wangyidong Date: Wed, 27 Mar 2019 13:51:04 +0800 Subject: [PATCH 393/442] * adjust for print subMenu. --- module/doc/view/view.html.php | 4 ++-- module/project/model.php | 10 ++++++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/module/doc/view/view.html.php b/module/doc/view/view.html.php index d4f19279f7..d2aa872fa8 100644 --- a/module/doc/view/view.html.php +++ b/module/doc/view/view.html.php @@ -167,13 +167,13 @@ js::set('sysurl', common::getSysUrl());
            doc->product;?>doc->product;?> productName;?>
            doc->project;?>doc->project;?> projectName;?>
            '>
            - - -
            +
            +