Merge branch 'master' of https://github.com/easysoft/zentaopms
This commit is contained in:
+4
-1
@@ -1,3 +1,4 @@
|
||||
config/db.php
|
||||
config/my.php
|
||||
www/data/
|
||||
www/install.php
|
||||
@@ -6,10 +7,12 @@ www/ok.txt
|
||||
tools/*
|
||||
release/*
|
||||
tmp/*
|
||||
tmp/extensions/*
|
||||
tmp/log/*
|
||||
tmp/model/*
|
||||
tmp/cache/*
|
||||
tmp/extension/*
|
||||
.gitkeep
|
||||
.bak
|
||||
.idea
|
||||
.gitignore
|
||||
.DS_Store
|
||||
|
||||
@@ -21,13 +21,13 @@ pms:
|
||||
cp -fr lib zentaopms/
|
||||
cp -fr module zentaopms/
|
||||
cp -fr www zentaopms && rm -fr zentaopms/www/data/ && mkdir -p zentaopms/www/data/upload
|
||||
cp -fr tmp zentaopms
|
||||
mkdir zentaopms/tmp
|
||||
mkdir zentaopms/tmp/cache/
|
||||
mkdir zentaopms/tmp/extension/
|
||||
mkdir zentaopms/tmp/log/
|
||||
mkdir zentaopms/tmp/model/
|
||||
mv zentaopms/www/install.php.tmp zentaopms/www/install.php
|
||||
mv zentaopms/www/upgrade.php.tmp zentaopms/www/upgrade.php
|
||||
rm -fr zentaopms/tmp/cache/*
|
||||
rm -fr zentaopms/tmp/extension/*
|
||||
rm -fr zentaopms/tmp/log/*
|
||||
rm -fr zentaopms/tmp/model/*
|
||||
cp VERSION zentaopms/
|
||||
# combine js and css files.
|
||||
cp -fr tools zentaopms/tools && cd zentaopms/tools/ && php ./minifyfront.php
|
||||
@@ -46,6 +46,8 @@ pms:
|
||||
chmod 777 zentaopms/module
|
||||
chmod 777 zentaopms/www
|
||||
chmod a+rx zentaopms/bin/*
|
||||
mkdir zentaopms/config/ext
|
||||
for module in `ls zentaopms/module/`; do mkdir zentaopms/module/$$module/ext; done
|
||||
find zentaopms/ -name ext |xargs chmod -R 777
|
||||
zip -r -9 ZenTaoPMS.$(VERSION).zip zentaopms
|
||||
rm -fr zentaopms
|
||||
@@ -79,7 +81,7 @@ rpm:
|
||||
patchphpdoc:
|
||||
sudo cp misc/doc/phpdoc/*.tpl /usr/share/php/data/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/
|
||||
phpdoc:
|
||||
phpdoc -d bin,framework,config,lib,module,www -t api -o HTML:frames:phphtmllib -ti ZenTaoPMSAPI²Î¿¼ÊÖ²á -s on -pp on -i *test*
|
||||
phpdoc -d bin,framework,config,lib,module,www -t api.chm -o chm:default:default -ti ZenTaoPMSAPI²Î¿¼ÊÖ²á -s on -pp on -i *test*
|
||||
phpdoc -d bin,framework,config,lib,module,www -t api -o HTML:frames:phphtmllib -ti ZenTaoPMSAPI参考手册 -s on -pp on -i *test*
|
||||
phpdoc -d bin,framework,config,lib,module,www -t api.chm -o chm:default:default -ti ZenTaoPMSAPI参考手册 -s on -pp on -i *test*
|
||||
doxygen:
|
||||
doxygen doc/doxygen/doxygen.conf
|
||||
|
||||
@@ -1,37 +1,39 @@
|
||||
1. What is ZenTao for?
|
||||
1. What is ZenTao?
|
||||
|
||||
=====================
|
||||
|
||||
ZenTao is an open source project management software, developed by Qingdao Nature Easy Soft Network Technology Co., Ltd. Combining product management, project management, quality management, document management, organization management and to-do management, ZenTao is a professional R & D project management software, covering the core processes of R & D project management.
|
||||
ZenTao is an open source project management software, developed by Qingdao Nature Easy Soft Network Technology Co. Ltd. Combining product management, project management, QA management, document management, company management and todo management. It is a professional project management software, covering the core process of software development projects.
|
||||
|
||||
ZenTao is practical and pragmatic. It has full features and a beautiful interface, and is easy to operate. Zentao is well structured and can be flexibly extended. It also has powerful search features, various reports and API.
|
||||
|
||||
ZenTao focuses on R & D project management!
|
||||
ZenTao is practical and pragmatic. It has full features and beautiful interfaces, and is easy to use. ZenTao is well structured and can be flexibly extended. It also has powerful search features, various forms of statistical reports and complete API.
|
||||
|
||||
2. Why called ZenTao?
|
||||
|
||||
ZenTao focuses on development project management!
|
||||
|
||||
2. Why is it called ZenTao?
|
||||
|
||||
============================
|
||||
|
||||
Zen(禅) and Tao(道) are the two Chinese characters that have rich meanings in both religion and culture. ZenTao Project Management Software take the cutural meaning of Zen and Tao, and is expected to convey our understanding and thinking on management. Inspired by The Tao of Programming and The Zen of Programming, we named our software ZenTao.
|
||||
Zen(禅) and Tao(道) are the two Chinese characters that have rich meanings in both religion and culture. ZenTao Project Management Software takes the cultural meaning of Zen and Tao, and is expected to convey our understanding and thinking of management. Inspired by The Tao of Programming and The Zen of Programming, we named our software ZenTao.
|
||||
|
||||
3. Design philosophy of ZenTao Project Management Software
|
||||
|
||||
==========================================================
|
||||
|
||||
The main management philosophy of ZenTao Project Management Software is based on Scrum, an internationally popular agile management methodology. Scrum is very pragmatic and easy to operate, so it fits in the fast iterative software development projects. However, Scrum only defines the core management framework. There are still many details and processes that need to be extended and developed. Based on the philosophy of Scrum and the observation of the current R&D situation in China, ZenTao integrates bug management, test case management, release management and document management, and it covers the entire life cycle of software R&D. In ZenTao, the concept of product, project and test is clearly defined. Product team, development team and testing team coordinate and check with each other while they function differently. The three teams interact with each other through working on stories, tasks and bugs, and eventually deliver the product with quality.
|
||||
The main design philosophy of ZenTao Project Management Software is based on Scrum, an internationally popular Agile methodology. Scrum is very pragmatic and easy to operate, so it fits in the fast iterative development of software projects. However, Scrum only defines the core management framework. There are still many details and processes that have to be extended and developed. Based on the philosophy of Scrum and with the observation of the current development situations in China, ZenTao integrates bug management, test case management, release management and document management, and it completely covers the entire lifecycle of software development. In ZenTao, the concepts of product, project and test are clearly defined. Product team, development team and QA team coordinate and check with each other while they function differently. The three teams interact with each other through stories, tasks and bugs, and eventually deliver the product with quality.
|
||||
|
||||
4. Why choose ZenTao Project Management Software?
|
||||
|
||||
===============================================
|
||||
|
||||
* ZenTao is a professional R&D project management software and canot be replaced by simple project management software.
|
||||
* ZenTao has precise and pragmatic management philosphy, which will accelerate agile development.
|
||||
* ZenTao has full features as a project management software: you don’t need to integrate several systems together, like mantisbt + trac + testlink.
|
||||
* Open source codes and flexible extension mechanism, convenient for uses and secondary development of companies.
|
||||
* Underlying framework and front-end UI framework developed independently; robust and stable with beautiful interface and friendly interaction.
|
||||
* ZenTao is a professional development project management software and cannot be replaced by any simple project management software.
|
||||
* ZenTao has precise and pragmatic management philosphy, which will accelerate Agile development.
|
||||
* ZenTao has full features as a project management software, so you don’t have to integrate several systems together, like mantisbt + trac + testlink.
|
||||
* Open source codes and flexible extension mechanism. It is convenient to use and develop based on ZenTao.
|
||||
* Underlying framework and frontend UI framework are developed independently; robust and stable with beautiful interface and friendly interaction.
|
||||
* Perfect community mechanism; you can get technical support and help in time.
|
||||
* Zero input which means you have no risk for choosing ZenTao compared with other commercial software that cost you thousands of dollars.
|
||||
* Support various deployments, either private deployment or cloud service.
|
||||
* Zero input, which means you have no risk for choosing ZenTao, compared with other commercial software that cost you thousands of dollars.
|
||||
* Support various deployments, either private or cloud.
|
||||
|
||||
|
||||
5. Features of ZenTao Project Management Software
|
||||
@@ -39,15 +41,15 @@ The main management philosophy of ZenTao Project Management Software is based on
|
||||
======================================================
|
||||
|
||||
* Product management: including products, stories, plans, releases and roadmaps;
|
||||
* Project management: including projects, tasks, teams, versions and burn-down charts;
|
||||
* Project management: including projects, tasks, teams, builds and burn-down charts;
|
||||
* Quality management: including bugs, test cases, test tasks and test results;
|
||||
* Document management: including product document library, project document library and customized document library;
|
||||
* Work management: including to-do management and personal management, such as my tasks, my bugs, my story and my projects;
|
||||
* Organization management: including department, users, groups and privileges;
|
||||
* Statistics: various reports;
|
||||
* Search: powerful search features to help you find the data you need.
|
||||
* Extension mechanism: extensible almost anywhere in ZenTao;
|
||||
* API mechanism, visible API: convenient for integration with other systems.
|
||||
* Search: powerful search functions to help you find the data you need.
|
||||
* Extension mechanism: extensible in almost any parts of ZenTao;
|
||||
* API mechanism: convenient for integration with other systems.
|
||||
|
||||
6. Website
|
||||
|
||||
|
||||
+5
-5
@@ -20,7 +20,7 @@
|
||||
5. 灵活的扩展机制,可以保证您不局限于禅道自身的功能。
|
||||
6. 日趋完善的社区机制,可以获得及时的技术支持和帮助,保证您无后顾之忧。
|
||||
7. 几乎为零的投入,禅道作为开源软件,其投入几乎为零,相比动辄十几万的商业软件,您选择禅道没有任何风险。
|
||||
8. 开发团队已经公司化运作,保证软件的持久发展。我们从04年从事开源软件开发以来,已经坚持了六年。
|
||||
8. 开发团队已经公司化运作,保证软件的持久发展。我们从04年从事开源软件开发以来,已经坚持了六年。
|
||||
|
||||
五、禅道的功能列表:
|
||||
|
||||
@@ -29,10 +29,10 @@
|
||||
3. 质量管理:包括bug、测试用例、测试任务、测试结果等功能。
|
||||
4. 文档管理:包括产品文档库、项目文档库、自定义文档库等功能。
|
||||
5. 事务管理:包括todo管理,我的任务、我的Bug、我的需求、我的项目等个人事务管理功能。
|
||||
6. 组织管理:包括部门、用户、分组、权限等功能。
|
||||
7. 统计功能:丰富的统计表。
|
||||
8. 搜索功能:强大的搜索,帮助您找到相应的数据。
|
||||
9. 灵活的扩展机制,几乎可以对禅道的任何地方进行扩展。
|
||||
6. 组织管理:包括部门、用户、分组、权限等功能。
|
||||
7. 统计功能:丰富的统计表。
|
||||
8. 搜索功能:强大的搜索,帮助您找到相应的数据。
|
||||
9. 灵活的扩展机制,几乎可以对禅道的任何地方进行扩展。
|
||||
10. 强大的api机制,方便与其他系统集成。
|
||||
|
||||
|
||||
|
||||
+5
-1
@@ -39,7 +39,11 @@ echo %ztcli% > %baseDir%ztcli.bat
|
||||
echo ztcli.bat ok
|
||||
|
||||
:: create backup.bat
|
||||
SET backup= %phpcli% %baseDir%php\backup.php
|
||||
if %requestType% == 'PATH_INFO' (
|
||||
SET backup= %phpcli% %baseDir%ztcli "%pmsRoot%/backup-backup.html"
|
||||
)else (
|
||||
SET backup= %phpcli% %baseDir%ztcli "%pmsRoot%/index.php?m=backup&f=backup"
|
||||
)
|
||||
echo %backup% > %baseDir%backup.bat
|
||||
echo backup.bat ok
|
||||
|
||||
|
||||
+5
-1
@@ -42,7 +42,11 @@ echo $ztcli > $basePath/ztcli.sh
|
||||
echo "ztcli.sh ok"
|
||||
|
||||
# backup database
|
||||
backup="$phpcli $basePath/php/backup.php"
|
||||
if [ $requestType == 'PATH_INFO' ]; then
|
||||
backup="$phpcli $basePath/ztcli '$pmsRoot/backup-backup.html'";
|
||||
else
|
||||
backup="$phpcli $basePath/ztcli '$pmsRoot/index.php?m=backup&f=backup'";
|
||||
fi
|
||||
echo $backup > $basePath/backup.sh
|
||||
echo "backup.sh ok"
|
||||
|
||||
|
||||
@@ -1,58 +0,0 @@
|
||||
<?php
|
||||
/* Backup the db. */
|
||||
error_reporting(E_ALL ^ E_NOTICE);
|
||||
|
||||
/* Include config.php and pclzip class. */
|
||||
$pmsRoot = dirname(dirname(dirname(__FILE__)));
|
||||
$myConfig = $pmsRoot . '/config/config.php';
|
||||
$zipClass = $pmsRoot . '/lib/pclzip/pclzip.class.php';
|
||||
$zdbClass = $pmsRoot . '/lib/zdb/zdb.class.php';
|
||||
|
||||
include $myConfig;
|
||||
include $zipClass;
|
||||
include $zdbClass;
|
||||
|
||||
/* Init the backupRoot and dest directory. */
|
||||
$backupRoot = $pmsRoot . "/backup";
|
||||
$destDir = $backupRoot . "/" . date('Ym');
|
||||
|
||||
if(!file_exists($backupRoot)) mkdir($backupRoot, 0777);
|
||||
if(!file_exists($destDir)) mkdir($destDir, 0777);
|
||||
|
||||
/* Backup database. */
|
||||
$dbRawFile = "db." . date('Ymd') . ".sql";
|
||||
$dsn = "mysql:host={$config->db->host}; port={$config->db->port}; dbname={$config->db->name}";
|
||||
$dbh = new PDO($dsn, $config->db->user, $config->db->password, array(PDO::ATTR_PERSISTENT => $config->db->persistant));
|
||||
$dbh->exec("SET NAMES {$config->db->encoding}");
|
||||
echo "Backuping database,";
|
||||
$zdb = new zdb();
|
||||
$return = $zdb->dump($dbRawFile);
|
||||
if($return->result)
|
||||
{
|
||||
$dbZipFile = $destDir . "/" . str_replace("sql", "zip", $dbRawFile);
|
||||
$archive = new pclzip($dbZipFile);
|
||||
|
||||
if($archive->create($dbRawFile))
|
||||
{
|
||||
unlink($dbRawFile);
|
||||
echo " successfully saved to $dbZipFile\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
die("Error : " . $archive->errorInfo(true));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
echo "Failed to backup database!\n";
|
||||
}
|
||||
|
||||
/* Backup the attachments. */
|
||||
chdir(dirname(dirname(dirname(__FILE__))) . "/www");
|
||||
if(!is_dir('data/upload')) die(" No files needed backup.\n");
|
||||
|
||||
echo "Backuping files,";
|
||||
$attachFile = $destDir . "/" . "file." . date('Ymd', time()) . ".zip";
|
||||
$archive = new pclzip($attachFile);
|
||||
if($archive->create("data/upload", PCLZIP_OPT_REMOVE_PATH, "data")) die(" successfully saved to $attachFile\n");
|
||||
die("Error : ".$archive->errorInfo(true));
|
||||
+11
-7
@@ -5,7 +5,7 @@
|
||||
*
|
||||
* The author disclaims copyright to this source code. In place of
|
||||
* a legal notice, here is a blessing:
|
||||
*
|
||||
*
|
||||
* May you do good and not evil.
|
||||
* May you find forgiveness for yourself and forgive others.
|
||||
* May you share freely, never taking more than you give.
|
||||
@@ -16,7 +16,7 @@ if(!class_exists('config')){class config{}}
|
||||
if(!function_exists('getWebRoot')){function getWebRoot(){}}
|
||||
|
||||
/* 基本设置。Basic settings. */
|
||||
$config->version = '9.5'; // ZenTaoPHP的版本。 The version of ZenTaoPHP. Don't change it.
|
||||
$config->version = '10.0.beta'; // 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.
|
||||
@@ -32,13 +32,13 @@ $config->sessionVar = 'zentaosid'; // 请求类型为GET:session变
|
||||
$config->views = ',html,json,mhtml,'; // 支持的视图类型。 Supported view formats.
|
||||
|
||||
/* 支持的主题和语言。Supported thems and languages. */
|
||||
$config->themes['default'] = 'default';
|
||||
$config->themes['default'] = 'default';
|
||||
$config->langs['zh-cn'] = '简体';
|
||||
$config->langs['zh-tw'] = '繁體';
|
||||
$config->langs['en'] = 'English';
|
||||
|
||||
/* 设备类型视图文件前缀。The prefix for view file for different device. */
|
||||
$config->devicePrefix['mhtml'] = 'm.';
|
||||
/* 设备类型视图文件前缀。The prefix for view file for different device. */
|
||||
$config->devicePrefix['mhtml'] = '';
|
||||
|
||||
/* 默认值设置。Default settings. */
|
||||
$config->default = new stdclass();
|
||||
@@ -80,7 +80,7 @@ $config->domainPostfix .= "|rocks|social|co.com|bio|reviews|link|sexy|us.com|con
|
||||
$config->domainPostfix .= "|menu|info|events|webcam|dating|vacations|flights|cruises|global|ca|guru|";
|
||||
$config->domainPostfix .= "|futbol|rentals|dance|lawyer|attorney|democrat|republican|actor|condos|immobilien|";
|
||||
$config->domainPostfix .= "|villas|foundation|expert|works|tools|watch|zone|bargains|agency|best|solar|";
|
||||
$config->domainPostfix .= "|farm|pics|photo|marketing|holiday|gift|buzz|guitars|trade|construction|";
|
||||
$config->domainPostfix .= "|farm|pics|photo|marketing|holiday|gift|buzz|guitars|trade|construction|";
|
||||
$config->domainPostfix .= "|international|house|coffee|florist|rich|ceo|camp|education|repair|win|site|";
|
||||
|
||||
/* 系统框架配置。Framework settings. */
|
||||
@@ -103,7 +103,7 @@ $config->framework->detectDevice['zh-tw'] = true; // 在zh-tw语言情况下,
|
||||
$config->framework->detectDevice['en'] = true; // 在en语言情况下,是否启用设备检测功能。 Whether enable device detect or not.
|
||||
|
||||
/* 文件上传设置。 Upload settings. */
|
||||
$config->file = new stdclass();
|
||||
$config->file = new stdclass();
|
||||
$config->file->dangers = 'php,php3,php4,phtml,php5,jsp,py,rb,asp,aspx,ashx,asa,cer,cdx,aspl,shtm,shtml,html,htm';
|
||||
$config->file->allowed = 'txt,doc,docx,dot,wps,wri,pdf,ppt,pptx,xls,xlsx,ett,xlt,xlsm,csv,jpg,jpeg,png,psd,gif,ico,bmp,swf,avi,rmvb,rm,mp3,mp4,3gp,flv,mov,movie,rar,zip,bz,bz2,tar,gz,mpp,rp,pdm,vsdx,vsd,sql';
|
||||
|
||||
@@ -111,6 +111,10 @@ $config->file->allowed = 'txt,doc,docx,dot,wps,wri,pdf,ppt,pptx,xls,xlsx,ett,xlt
|
||||
$filterConfig = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'filter.php';
|
||||
if(file_exists($filterConfig)) include $filterConfig;
|
||||
|
||||
/* 引用数据库的配置。 Include the database config file. */
|
||||
$dbConfig = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'db.php';
|
||||
if(file_exists($dbConfig)) include $dbConfig;
|
||||
|
||||
/* 引用自定义的配置。 Include the custom config file. */
|
||||
$myConfig = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'my.php';
|
||||
if(file_exists($myConfig)) include $myConfig;
|
||||
|
||||
@@ -53,6 +53,7 @@ $filter->bug->default = new stdclass();
|
||||
$filter->bug->create = new stdclass();
|
||||
$filter->bug->export = new stdclass();
|
||||
$filter->doc->browse = new stdclass();
|
||||
$filter->doc->showfiles = new stdclass();
|
||||
$filter->doc->default = new stdclass();
|
||||
$filter->doc->showfiles = new stdclass();
|
||||
$filter->mail->ztcloud = new stdclass();
|
||||
@@ -99,6 +100,7 @@ $filter->bug->export->cookie['checkedItem'] = 'reg::checked';
|
||||
$filter->doc->browse->cookie['browseType'] = 'reg::browseType';
|
||||
$filter->doc->default->cookie['from'] = 'code';
|
||||
$filter->doc->default->cookie['product'] = 'int';
|
||||
$filter->doc->showfiles->cookie['docFilesViewType'] = 'code';
|
||||
|
||||
$filter->file->download->cookie[$config->sessionVar] = 'code';
|
||||
|
||||
@@ -111,6 +113,7 @@ $filter->product->browse->cookie['storyModule'] = 'int';
|
||||
$filter->product->default->cookie['lastProduct'] = 'int';
|
||||
$filter->product->default->cookie['preProductID'] = 'int';
|
||||
$filter->product->index->cookie['preBranch'] = 'int';
|
||||
$filter->product->export->cookie['checkedItem'] = 'reg::checked';
|
||||
|
||||
$filter->project->default->cookie['lastProject'] = 'int';
|
||||
$filter->project->default->cookie['projectMode'] = 'code';
|
||||
@@ -120,6 +123,7 @@ $filter->project->task->cookie['preProjectID'] = 'int';
|
||||
$filter->project->task->cookie['productBrowseParam'] = 'int';
|
||||
$filter->project->task->cookie['projectTaskOrder'] = 'reg::orderBy';
|
||||
$filter->project->task->cookie['windowWidth'] = 'int';
|
||||
$filter->project->export->cookie['checkedItem'] = 'reg::checked';
|
||||
|
||||
$filter->qa->default->cookie['lastProduct'] = 'int';
|
||||
$filter->qa->default->cookie['preBranch'] = 'int';
|
||||
@@ -197,3 +201,8 @@ $filter->user->login->get['account'] = 'account';
|
||||
$filter->user->login->get['lang'] = 'reg::lang';
|
||||
$filter->user->login->get['password'] = 'reg::any';
|
||||
$filter->user->edit->get['from'] = 'reg::word';
|
||||
|
||||
$filter->git->cat->get['repoUrl'] = 'reg::base64';
|
||||
$filter->git->diff->get['repoUrl'] = 'reg::base64';
|
||||
$filter->svn->cat->get['repoUrl'] = 'reg::base64';
|
||||
$filter->svn->diff->get['repoUrl'] = 'reg::base64';
|
||||
|
||||
@@ -95,12 +95,17 @@ define('TABLE_FILE', '`' . $config->db->prefix . 'file`');
|
||||
define('TABLE_HISTORY', '`' . $config->db->prefix . 'history`');
|
||||
define('TABLE_EXTENSION', '`' . $config->db->prefix . 'extension`');
|
||||
define('TABLE_CRON', '`' . $config->db->prefix . 'cron`');
|
||||
define('TABLE_MAILQUEUE', '`' . $config->db->prefix . 'mailqueue`');
|
||||
define('TABLE_BLOCK', '`' . $config->db->prefix . 'block`');
|
||||
define('TABLE_DOCCONTENT', '`' . $config->db->prefix . 'doccontent`');
|
||||
define('TABLE_TESTSUITE', '`' . $config->db->prefix . 'testsuite`');
|
||||
define('TABLE_SUITECASE', '`' . $config->db->prefix . 'suitecase`');
|
||||
define('TABLE_TESTREPORT', '`' . $config->db->prefix . 'testreport`');
|
||||
|
||||
define('TABLE_ENTRY', '`' . $config->db->prefix . 'entry`');
|
||||
define('TABLE_WEBHOOK', '`' . $config->db->prefix . 'webhook`');
|
||||
define('TABLE_LOG', '`' . $config->db->prefix . 'log`');
|
||||
define('TABLE_SCORE', '`' . $config->db->prefix . 'score`');
|
||||
define('TABLE_NOTIFY', '`' . $config->db->prefix . 'notify`');
|
||||
if(!defined('TABLE_LANG')) define('TABLE_LANG', '`' . $config->db->prefix . 'lang`');
|
||||
|
||||
$config->objectTables['product'] = TABLE_PRODUCT;
|
||||
@@ -124,3 +129,5 @@ $config->objectTables['custom'] = TABLE_LANG;
|
||||
$config->objectTables['branch'] = TABLE_BRANCH;
|
||||
$config->objectTables['module'] = TABLE_MODULE;
|
||||
$config->objectTables['caselib'] = TABLE_TESTSUITE;
|
||||
$config->objectTables['entry'] = TABLE_ENTRY;
|
||||
$config->objectTables['webhook'] = TABLE_WEBHOOK;
|
||||
|
||||
+22
-23
@@ -267,21 +267,21 @@ INSERT INTO `zt_task` (`id`, `project`, `story`, `storyVersion`, `fromBug`, `nam
|
||||
INSERT INTO `zt_task` (`id`, `project`, `story`, `storyVersion`, `fromBug`, `name`, `type`, `pri`, `estimate`, `consumed`, `left`, `deadline`, `status`, `mailto`, `desc`, `openedBy`, `openedDate`, `assignedTo`, `assignedDate`, `finishedBy`, `finishedDate`, `canceledBy`, `canceledDate`, `closedBy`, `closedDate`, `closedReason`, `lastEditedBy`, `lastEditedDate`, `deleted`) VALUES(8, 1, 4, 1, 0, '售后服务的开发', 'devel', 1, 8, 6, 0, '0000-00-00', 'cancel', '', '售后服务的开发<br />', 'projectManager', '2012-06-05 10:34:45', 'projectManager', '2012-06-05 10:41:20', 'dev1', '0000-00-00 00:00:00', 'dev1', '2012-06-05 10:41:20', '', '0000-00-00 00:00:00', '', 'dev1', '2012-06-05 10:41:20', '0');
|
||||
INSERT INTO `zt_task` (`id`, `project`, `story`, `storyVersion`, `fromBug`, `name`, `type`, `pri`, `estimate`, `consumed`, `left`, `deadline`, `status`, `mailto`, `desc`, `openedBy`, `openedDate`, `assignedTo`, `assignedDate`, `finishedBy`, `finishedDate`, `canceledBy`, `canceledDate`, `closedBy`, `closedDate`, `closedReason`, `lastEditedBy`, `lastEditedDate`, `deleted`) VALUES(9, 1, 4, 1, 0, '售后服务的开发', 'devel', 1, 8, 0, 8, '0000-00-00', 'cancel', '', '售后服务的开发<br />', 'projectManager', '2012-06-05 10:35:01', 'projectManager', '2012-06-05 10:41:20', '', '0000-00-00 00:00:00', 'dev1', '2012-06-05 10:41:20', '', '0000-00-00 00:00:00', '', 'dev1', '2012-06-05 10:41:20', '0');
|
||||
|
||||
INSERT INTO `zt_team` (`project`, `account`, `role`, `join`, `days`, `hours`) VALUES(1, 'dev3', '研发', '2013-02-20', 184, 7);
|
||||
INSERT INTO `zt_team` (`project`, `account`, `role`, `join`, `days`, `hours`) VALUES(1, 'productManager', '产品经理', '2013-02-20', 184, 7);
|
||||
INSERT INTO `zt_team` (`project`, `account`, `role`, `join`, `days`, `hours`) VALUES(1, 'tester2', '测试', '2013-02-20', 184, 7);
|
||||
INSERT INTO `zt_team` (`project`, `account`, `role`, `join`, `days`, `hours`) VALUES(1, 'tester1', '测试', '2013-02-20', 184, 7);
|
||||
INSERT INTO `zt_team` (`project`, `account`, `role`, `join`, `days`, `hours`) VALUES(2, 'projectManager', '项目经理', '2013-02-20', 365, 7);
|
||||
INSERT INTO `zt_team` (`project`, `account`, `role`, `join`, `days`, `hours`) VALUES(2, 'tester2', '测试', '2013-02-20', 365, 7);
|
||||
INSERT INTO `zt_team` (`project`, `account`, `role`, `join`, `days`, `hours`) VALUES(2, 'tester1', '测试', '2013-02-20', 365, 7);
|
||||
INSERT INTO `zt_team` (`project`, `account`, `role`, `join`, `days`, `hours`) VALUES(2, 'dev3', '研发', '2013-02-20', 365, 7);
|
||||
INSERT INTO `zt_team` (`project`, `account`, `role`, `join`, `days`, `hours`) VALUES(2, 'dev2', '研发', '2013-02-20', 365, 7);
|
||||
INSERT INTO `zt_team` (`project`, `account`, `role`, `join`, `days`, `hours`) VALUES(2, 'dev1', '研发', '2013-02-20', 365, 7);
|
||||
INSERT INTO `zt_team` (`project`, `account`, `role`, `join`, `days`, `hours`) VALUES(1, 'dev1', '研发', '2013-02-20', 184, 7);
|
||||
INSERT INTO `zt_team` (`project`, `account`, `role`, `join`, `days`, `hours`) VALUES(1, 'dev2', '研发', '2013-02-20', 184, 7);
|
||||
INSERT INTO `zt_team` (`project`, `account`, `role`, `join`, `days`, `hours`) VALUES(1, 'projectManager', '项目经理', '2013-02-20', 184, 7);
|
||||
INSERT INTO `zt_team` (`project`, `account`, `role`, `join`, `days`, `hours`) VALUES(1, 'testManager', '测试主管', '2013-02-20', 184, 7);
|
||||
INSERT INTO `zt_team` (`project`, `account`, `role`, `join`, `days`, `hours`) VALUES(2, 'productManager', '产品经理', '2013-02-20', 365, 7);
|
||||
INSERT INTO `zt_team` (`root`, `type`, `account`, `role`, `join`, `days`, `hours`) VALUES(1, 'project', 'dev3', '研发', '2013-02-20', 184, 7);
|
||||
INSERT INTO `zt_team` (`root`, `type`, `account`, `role`, `join`, `days`, `hours`) VALUES(1, 'project', 'productManager', '产品经理', '2013-02-20', 184, 7);
|
||||
INSERT INTO `zt_team` (`root`, `type`, `account`, `role`, `join`, `days`, `hours`) VALUES(1, 'project', 'tester2', '测试', '2013-02-20', 184, 7);
|
||||
INSERT INTO `zt_team` (`root`, `type`, `account`, `role`, `join`, `days`, `hours`) VALUES(1, 'project', 'tester1', '测试', '2013-02-20', 184, 7);
|
||||
INSERT INTO `zt_team` (`root`, `type`, `account`, `role`, `join`, `days`, `hours`) VALUES(2, 'project', 'projectManager', '项目经理', '2013-02-20', 365, 7);
|
||||
INSERT INTO `zt_team` (`root`, `type`, `account`, `role`, `join`, `days`, `hours`) VALUES(2, 'project', 'tester2', '测试', '2013-02-20', 365, 7);
|
||||
INSERT INTO `zt_team` (`root`, `type`, `account`, `role`, `join`, `days`, `hours`) VALUES(2, 'project', 'tester1', '测试', '2013-02-20', 365, 7);
|
||||
INSERT INTO `zt_team` (`root`, `type`, `account`, `role`, `join`, `days`, `hours`) VALUES(2, 'project', 'dev3', '研发', '2013-02-20', 365, 7);
|
||||
INSERT INTO `zt_team` (`root`, `type`, `account`, `role`, `join`, `days`, `hours`) VALUES(2, 'project', 'dev2', '研发', '2013-02-20', 365, 7);
|
||||
INSERT INTO `zt_team` (`root`, `type`, `account`, `role`, `join`, `days`, `hours`) VALUES(2, 'project', 'dev1', '研发', '2013-02-20', 365, 7);
|
||||
INSERT INTO `zt_team` (`root`, `type`, `account`, `role`, `join`, `days`, `hours`) VALUES(1, 'project', 'dev1', '研发', '2013-02-20', 184, 7);
|
||||
INSERT INTO `zt_team` (`root`, `type`, `account`, `role`, `join`, `days`, `hours`) VALUES(1, 'project', 'dev2', '研发', '2013-02-20', 184, 7);
|
||||
INSERT INTO `zt_team` (`root`, `type`, `account`, `role`, `join`, `days`, `hours`) VALUES(1, 'project', 'projectManager', '项目经理', '2013-02-20', 184, 7);
|
||||
INSERT INTO `zt_team` (`root`, `type`, `account`, `role`, `join`, `days`, `hours`) VALUES(1, 'project', 'testManager', '测试主管', '2013-02-20', 184, 7);
|
||||
INSERT INTO `zt_team` (`root`, `type`, `account`, `role`, `join`, `days`, `hours`) VALUES(2, 'project', 'productManager', '产品经理', '2013-02-20', 365, 7);
|
||||
|
||||
INSERT INTO `zt_testresult` (`id`, `run`, `case`, `version`, `caseResult`, `stepResults`, `lastRunner`, `date`) VALUES(1, 4, 1, 1, 'pass', 'a:1:{i:1;a:2:{s:6:"result";s:4:"pass";s:4:"real";s:0:"";}}', 'testManager', '2012-06-05 11:11:00');
|
||||
INSERT INTO `zt_testresult` (`id`, `run`, `case`, `version`, `caseResult`, `stepResults`, `lastRunner`, `date`) VALUES(2, 3, 2, 1, 'pass', 'a:1:{i:2;a:2:{s:6:"result";s:4:"pass";s:4:"real";s:0:"";}}', 'testManager', '2012-06-05 11:11:05');
|
||||
@@ -295,16 +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, '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(5, 2, 'dev2', 'e10adc3949ba59abbe56e057f20f883e', 'dev', '开发乙', '', '', '', '0000-00-00', 'm', '', '', '', '', '', '', '', '', '', '', '0000-00-00', 1, '192.168.0.8', 1338864116, '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(6, 2, 'dev3', 'e10adc3949ba59abbe56e057f20f883e', 'dev', '开发丙', '', '', '', '0000-00-00', 'm', '', '', '', '', '', '', '', '', '', '', '0000-00-00', 1, '192.168.0.8', 1338864187, '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(7, 3, 'tester1', 'e10adc3949ba59abbe56e057f20f883e', 'qa', '测试甲', '', '', '', '0000-00-00', 'm', '', '', '', '', '', '', '', '', '', '', '0000-00-00', 3, '192.168.0.8', 1338865739, '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(8, 3, 'tester2', 'e10adc3949ba59abbe56e057f20f883e', 'qa', '测试乙', '', '', '', '0000-00-00', 'm', '', '', '', '', '', '', '', '', '', '', '0000-00-00', 2, '192.168.0.8', 1338865450, '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(9, 3, 'tester3', 'e10adc3949ba59abbe56e057f20f883e', 'qa', '测试丙', '', '', '', '0000-00-00', 'm', '', '', '', '', '', '', '', '', '', '', '0000-00-00', 1, '192.168.0.8', 1338865125, '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(10, 1, 'testManager', 'e10adc3949ba59abbe56e057f20f883e', 'qd', '测试经理', '', '', '', '0000-00-00', 'm', '', '', '', '', '', '', '', '', '', '', '0000-00-00', 6, '192.168.0.8', 1338865842, '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_usergroup` (`account`, `group`) VALUES('productManager', 5);
|
||||
INSERT INTO `zt_usergroup` (`account`, `group`) VALUES('projectManager', 4);
|
||||
|
||||
+337
@@ -0,0 +1,337 @@
|
||||
SET NAMES utf8;
|
||||
SET time_zone = '+00:00';
|
||||
SET foreign_key_checks = 0;
|
||||
SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO';
|
||||
|
||||
INSERT INTO `zt_action` (`id`, `objectType`, `objectID`, `product`, `project`, `actor`, `action`, `date`, `comment`, `extra`, `read`) VALUES
|
||||
(1, 'user', 1, ',0,', 0, 'admin', 'login', '2017-12-11 18:52:19', '', '', '0'),
|
||||
(2, 'user', 1, ',0,', 0, 'admin', 'logout', '2017-12-12 14:43:47', '', '', '0'),
|
||||
(3, 'user', 2, ',0,', 0, 'thePO', 'login', '2017-12-12 14:43:59', '', '', '0'),
|
||||
(4, 'product', 1, ',1,', 0, 'thePO', 'opened', '2017-12-12 14:44:57', '', '', '0'),
|
||||
(5, 'productplan', 1, ',1,', 0, 'thePO', 'opened', '2017-12-12 14:48:38', '', '', '0'),
|
||||
(6, 'productplan', 2, ',1,', 0, 'thePO', 'opened', '2017-12-12 14:49:38', '', '', '0'),
|
||||
(7, 'productplan', 2, ',1,', 0, 'thePO', 'edited', '2017-12-12 14:50:13', '', '', '0'),
|
||||
(8, 'productplan', 1, ',1,', 0, 'thePO', 'edited', '2017-12-12 14:51:01', '', '', '0'),
|
||||
(9, 'story', 1, ',1,', 0, 'thePO', 'opened', '2017-12-12 14:58:30', '', '', '0'),
|
||||
(10, 'story', 2, ',1,', 0, 'thePO', 'opened', '2017-12-12 14:58:30', '', '', '0'),
|
||||
(11, 'story', 3, ',1,', 0, 'thePO', 'opened', '2017-12-12 14:58:30', '', '', '0'),
|
||||
(12, 'story', 4, ',1,', 0, 'thePO', 'opened', '2017-12-12 14:58:30', '', '', '0'),
|
||||
(13, 'story', 5, ',1,', 0, 'thePO', 'opened', '2017-12-12 14:58:30', '', '', '0'),
|
||||
(14, 'story', 6, ',1,', 0, 'thePO', 'opened', '2017-12-12 14:58:30', '', '', '0'),
|
||||
(15, 'story', 7, ',1,', 0, 'thePO', 'opened', '2017-12-12 14:58:30', '', '', '0'),
|
||||
(16, 'story', 8, ',1,', 0, 'thePO', 'opened', '2017-12-12 14:58:30', '', '', '0'),
|
||||
(17, 'project', 1, ',1,', 1, 'thePO', 'opened', '2017-12-12 15:01:14', '', '', '0'),
|
||||
(18, 'story', 3, ',1,', 1, 'thePO', 'linked2project', '2017-12-12 15:02:18', '', '1', '0'),
|
||||
(19, 'story', 2, ',1,', 1, 'thePO', 'linked2project', '2017-12-12 15:02:18', '', '1', '0'),
|
||||
(20, 'story', 1, ',1,', 1, 'thePO', 'linked2project', '2017-12-12 15:02:18', '', '1', '0'),
|
||||
(21, 'user', 2, ',0,', 0, 'thePO', 'logout', '2017-12-12 15:02:58', '', '', '0'),
|
||||
(22, 'user', 3, ',0,', 0, 'pm1', 'login', '2017-12-12 15:03:09', '', '', '0'),
|
||||
(23, 'task', 1, ',1,', 1, 'pm1', 'opened', '2017-12-12 15:05:06', '', '', '0'),
|
||||
(24, 'task', 2, ',1,', 1, 'pm1', 'opened', '2017-12-12 15:05:06', '', '', '0'),
|
||||
(25, 'task', 3, ',1,', 1, 'pm1', 'opened', '2017-12-12 15:05:06', '', '', '0'),
|
||||
(26, 'task', 4, ',1,', 1, 'pm1', 'opened', '2017-12-12 15:05:06', '', '', '0'),
|
||||
(27, 'task', 1, ',1,', 1, 'pm1', 'started', '2017-12-12 15:12:17', 'Start tp design and develop', '', '0'),
|
||||
(28, 'task', 1, ',1,', 1, 'pm1', 'recordestimate', '2017-12-12 15:13:13', 'Finish UI design', '8', '0'),
|
||||
(29, 'task', 2, ',1,', 1, 'pm1', 'started', '2017-12-12 15:13:25', 'Start<br />', '', '0'),
|
||||
(30, 'task', 3, ',1,', 1, 'pm1', 'started', '2017-12-12 15:14:25', '', '', '0'),
|
||||
(31, 'task', 3, ',1,', 1, 'pm1', 'recordestimate', '2017-12-12 15:14:47', 'Finish', '60', '0'),
|
||||
(32, 'user', 3, ',0,', 0, 'pm1', 'logout', '2017-12-12 15:18:46', '', '', '0'),
|
||||
(33, 'user', 1, ',0,', 0, 'admin', 'login', '2017-12-12 15:18:58', '', '', '0'),
|
||||
(34, 'user', 10, ',0,', 0, 'admin', 'deleted', '2017-12-12 15:20:05', '', '1', '0'),
|
||||
(35, 'user', 1, ',0,', 0, 'admin', 'logout', '2017-12-12 15:22:11', '', '', '0'),
|
||||
(36, 'user', 12, ',0,', 0, 'pm1', 'login', '2017-12-12 15:22:36', '', '', '0'),
|
||||
(37, 'user', 12, ',0,', 0, 'pm1', 'logout', '2017-12-12 15:22:48', '', '', '0'),
|
||||
(38, 'user', 1, ',0,', 0, 'admin', 'login', '2017-12-12 15:23:02', '', '', '0'),
|
||||
(39, 'user', 1, ',0,', 0, 'admin', 'logout', '2017-12-12 15:23:27', '', '', '0'),
|
||||
(40, 'user', 11, ',0,', 0, 'pm1', 'login', '2017-12-12 15:23:34', '', '', '0'),
|
||||
(41, 'build', 1, ',1,', 1, 'pm1', 'opened', '2017-12-12 15:25:13', '', '', '0'),
|
||||
(42, 'bug', 1, ',1,', 1, 'pm1', 'opened', '2017-12-12 15:27:56', '', '', '0'),
|
||||
(43, 'bug', 2, ',1,', 1, 'pm1', 'opened', '2017-12-12 15:30:32', '', '', '0'),
|
||||
(44, 'user', 11, ',0,', 0, 'pm1', 'logout', '2017-12-12 15:32:26', '', '', '0'),
|
||||
(45, 'user', 1, ',0,', 0, 'admin', 'login', '2017-12-12 15:32:41', '', '', '0'),
|
||||
(46, 'project', 1, ',1,', 1, 'admin', 'started', '2017-12-12 15:32:54', '', '', '0'),
|
||||
(47, 'product', 2, ',2,', 0, 'admin', 'opened', '2017-12-12 23:28:29', '', '', '0'),
|
||||
(48, 'productplan', 3, ',2,', 0, 'admin', 'opened', '2017-12-12 23:31:59', '', '', '0'),
|
||||
(49, 'productplan', 4, ',2,', 0, 'admin', 'opened', '2017-12-12 23:32:30', '', '', '0'),
|
||||
(50, 'user', 1, ',0,', 0, 'admin', 'logout', '2017-12-12 23:33:01', '', '', '0'),
|
||||
(51, 'user', 2, ',0,', 0, 'thePO', 'login', '2017-12-12 23:33:10', '', '', '0'),
|
||||
(52, 'story', 9, ',2,', 0, 'thePO', 'opened', '2017-12-12 23:40:19', '', '', '0'),
|
||||
(53, 'story', 10, ',2,', 0, 'thePO', 'opened', '2017-12-12 23:40:19', '', '', '0'),
|
||||
(54, 'story', 11, ',2,', 0, 'thePO', 'opened', '2017-12-12 23:40:19', '', '', '0'),
|
||||
(55, 'story', 12, ',2,', 0, 'thePO', 'opened', '2017-12-12 23:40:19', '', '', '0'),
|
||||
(56, 'story', 13, ',2,', 0, 'thePO', 'opened', '2017-12-12 23:40:19', '', '', '0'),
|
||||
(57, 'story', 14, ',2,', 0, 'thePO', 'opened', '2017-12-12 23:40:19', '', '', '0'),
|
||||
(58, 'story', 15, ',2,', 0, 'thePO', 'opened', '2017-12-12 23:40:19', '', '', '0'),
|
||||
(59, 'user', 2, ',0,', 0, 'thePO', 'logout', '2017-12-12 23:41:48', '', '', '0'),
|
||||
(60, 'user', 3, ',0,', 0, 'pm1', 'login', '2017-12-12 23:41:58', '', '', '0'),
|
||||
(61, 'project', 2, ',,', 2, 'pm1', 'opened', '2017-12-12 23:42:53', '', '', '0'),
|
||||
(62, 'story', 14, ',2,', 2, 'pm1', 'linked2project', '2017-12-12 23:43:52', '', '2', '0'),
|
||||
(63, 'story', 13, ',2,', 2, 'pm1', 'linked2project', '2017-12-12 23:43:52', '', '2', '0'),
|
||||
(64, 'story', 12, ',2,', 2, 'pm1', 'linked2project', '2017-12-12 23:43:52', '', '2', '0'),
|
||||
(65, 'story', 11, ',2,', 2, 'pm1', 'linked2project', '2017-12-12 23:43:52', '', '2', '0'),
|
||||
(66, 'story', 10, ',2,', 2, 'pm1', 'linked2project', '2017-12-12 23:43:52', '', '2', '0'),
|
||||
(67, 'story', 9, ',2,', 2, 'pm1', 'linked2project', '2017-12-12 23:43:52', '', '2', '0'),
|
||||
(68, 'task', 5, ',2,', 2, 'pm1', 'opened', '2017-12-12 23:45:14', '', '', '0'),
|
||||
(69, 'task', 6, ',2,', 2, 'pm1', 'opened', '2017-12-12 23:45:14', '', '', '0'),
|
||||
(70, 'task', 7, ',2,', 2, 'pm1', 'opened', '2017-12-12 23:45:14', '', '', '0'),
|
||||
(71, 'task', 8, ',2,', 2, 'pm1', 'opened', '2017-12-12 23:45:14', '', '', '0'),
|
||||
(72, 'task', 9, ',2,', 2, 'pm1', 'opened', '2017-12-12 23:45:14', '', '', '0'),
|
||||
(73, 'task', 10, ',2,', 2, 'pm1', 'opened', '2017-12-12 23:45:14', '', '', '0'),
|
||||
(74, 'task', 8, ',2,', 2, 'pm1', 'started', '2017-12-12 23:45:36', '', '', '0'),
|
||||
(75, 'task', 7, ',2,', 2, 'pm1', 'recordestimate', '2017-12-12 23:45:53', '', '8', '0'),
|
||||
(76, 'user', 3, ',0,', 0, 'pm1', 'logout', '2017-12-12 23:46:28', '', '', '0'),
|
||||
(77, 'user', 5, ',0,', 0, 'pm1', 'login', '2017-12-12 23:46:35', '', '', '0'),
|
||||
(78, 'task', 9, ',2,', 2, 'pm1', 'started', '2017-12-12 23:46:58', '', '', '0'),
|
||||
(79, 'task', 5, ',2,', 2, 'pm1', 'started', '2017-12-12 23:47:03', '', '', '0'),
|
||||
(80, 'task', 5, ',2,', 2, 'pm1', 'finished', '2017-12-12 23:47:37', 'Finished general setup at backend', '', '0'),
|
||||
(81, 'user', 5, ',0,', 0, 'pm1', 'logout', '2017-12-12 23:48:31', '', '', '0'),
|
||||
(82, 'user', 7, ',0,', 0, 'pm1', 'login', '2017-12-12 23:48:39', '', '', '0'),
|
||||
(83, 'build', 2, ',2,', 2, 'pm1', 'opened', '2017-12-12 23:49:31', '', '', '0'),
|
||||
(84, 'task', 9, ',2,', 2, 'pm1', 'recordestimate', '2017-12-12 23:51:14', 'Finished page design.', '8', '0'),
|
||||
(85, 'user', 7, ',0,', 0, 'pm1', 'logout', '2017-12-12 23:52:27', '', '', '0'),
|
||||
(86, 'user', 2, ',0,', 0, 'thePO', 'login', '2017-12-12 23:52:30', '', '', '0'),
|
||||
(87, 'story', 10, ',2,', 2, 'thePO', 'edited', '2017-12-12 23:52:40', '', '', '0'),
|
||||
(88, 'story', 11, ',2,', 2, 'thePO', 'edited', '2017-12-12 23:53:04', '', '', '0'),
|
||||
(89, 'project', 2, ',2,', 2, 'thePO', 'started', '2017-12-12 23:54:13', '', '', '0'),
|
||||
(90, 'user', 2, ',0,', 0, 'thePO', 'logout', '2017-12-12 23:55:42', '', '', '0'),
|
||||
(91, 'user', 7, ',0,', 0, 'pm1', 'login', '2017-12-12 23:55:49', '', '', '0'),
|
||||
(92, 'testtask', 1, ',2,', 2, 'pm1', 'opened', '2017-12-12 23:56:59', '', '', '0'),
|
||||
(93, 'user', 7, ',0,', 0, 'pm1', 'logout', '2017-12-12 23:57:22', '', '', '0'),
|
||||
(94, 'user', 11, ',0,', 0, 'pm1', 'login', '2017-12-12 23:57:33', '', '', '0'),
|
||||
(95, 'case', 1, ',2,', 0, 'pm1', 'opened', '2017-12-13 00:00:29', '', '', '0'),
|
||||
(96, 'case', 2, ',2,', 0, 'pm1', 'opened', '2017-12-13 00:04:09', '', '', '0'),
|
||||
(97, 'testsuite', 1, ',0,', 0, 'pm1', 'opened', '2017-12-13 00:05:13', '', '', '0'),
|
||||
(98, 'bug', 3, ',2,', 2, 'pm1', 'opened', '2017-12-13 00:09:48', '', '', '0'),
|
||||
(99, 'case', 3, ',2,', 0, 'pm1', 'opened', '2017-12-13 00:13:25', '', '', '0'),
|
||||
(100, 'case', 2, ',2,', 0, 'pm1', 'edited', '2017-12-13 00:18:17', '', '', '0'),
|
||||
(101, 'bug', 4, ',2,', 2, 'pm1', 'opened', '2017-12-13 00:30:07', '', '', '0'),
|
||||
(102, 'bug', 4, ',2,', 2, 'pm1', 'edited', '2017-12-13 00:30:41', '', '', '0'),
|
||||
(103, 'bug', 3, ',2,', 2, 'pm1', 'edited', '2017-12-13 00:31:10', '', '', '0'),
|
||||
(104, 'bug', 5, ',2,', 2, 'pm1', 'opened', '2017-12-13 00:32:08', '', '', '0'),
|
||||
(105, 'user', 11, ',0,', 0, 'pm1', 'logout', '2017-12-13 00:34:34', '', '', '0');
|
||||
|
||||
INSERT INTO `zt_bug` (`id`, `product`, `branch`, `module`, `project`, `plan`, `story`, `storyVersion`, `task`, `toTask`, `toStory`, `title`, `keywords`, `severity`, `pri`, `type`, `os`, `browser`, `hardware`, `found`, `steps`, `status`, `color`, `confirmed`, `activatedCount`, `activatedDate`, `mailto`, `openedBy`, `openedDate`, `openedBuild`, `assignedTo`, `assignedDate`, `deadline`, `resolvedBy`, `resolution`, `resolvedBuild`, `resolvedDate`, `closedBy`, `closedDate`, `duplicateBug`, `linkBug`, `case`, `caseVersion`, `result`, `testtask`, `lastEditedBy`, `lastEditedDate`, `deleted`) VALUES
|
||||
(1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 'Switch desktops three time, then the order of desktops is different from that before.', '', 3, 0, 'codeerror', 'all', '', '', '', '<p>[Steps]Switch desktops three times.</p>\r\n<p>[Results]The order of desktops is different from that was before.</p>\r\n<p>[Expectations]The order of desktops is the same as that was before.</p>', 'active', '', 0, 0, '0000-00-00 00:00:00', ',pm1', 'pm1', '2017-12-12 15:27:55', '1', 'pm1', '2017-12-12 15:27:55', '2017-12-16', '', '', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 0, '', 0, 0, 0, 0, '', '0000-00-00 00:00:00', '0'),
|
||||
(2, 1, 0, 2, 1, 0, 0, 1, 0, 0, 0, 'Full text retrieval in Word files. If Chinese characters exist in the file, it cannot be retrieved.', '', 3, 0, 'codeerror', '', '', '', '', '<p>[Steps]Enter “禅道(ZenTao)” in a Word and serach “禅道”.</p>\r\n<p>[Results] “禅道” is not found.</p>\r\n<p>[Expectations] “禅道” is found.</p>', 'active', '', 0, 0, '0000-00-00 00:00:00', '', 'pm1', '2017-12-12 15:30:32', '1', 'pm1', '2017-12-12 15:30:32', '0000-00-00', '', '', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 0, '', 0, 0, 0, 0, '', '0000-00-00 00:00:00', '0'),
|
||||
(3, 2, 0, 8, 2, 0, 10, 1, 0, 0, 0, '400 page is incomplete.', '', 3, 0, 'codeerror', '', '', '', '', '<p>[Steps]</p>\r\n1. Click “400 page”<br /><p>[Results]</p>\r\n1. Not all 400 page is displayed.<br /><p>[Expectations]</p>\r\n1. List all 400 error pages.<br />', 'active', '', 0, 0, '0000-00-00 00:00:00', '', 'pm1', '2017-12-13 00:09:48', '2', '', '0000-00-00 00:00:00', '0000-00-00', '', '', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 0, '', 2, 1, 1, 1, 'pm1', '2017-12-13 00:31:10', '0'),
|
||||
(4, 2, 0, 8, 2, 0, 10, 1, 0, 0, 0, 'Generate sitemap.', '', 3, 0, 'codeerror', '', '', '', '', '<p>[Steps]</p>\r\n1. Click “Generate sitemap”.<br /><p>[Results]</p>\r\n1. ‘Contact Us’ page is missing in sitemap.<br /><p>[Expectations]</p>\r\n1. Generate sitemap.<br />', 'active', '', 0, 0, '0000-00-00 00:00:00', '', 'pm1', '2017-12-13 00:30:07', '2', '', '0000-00-00 00:00:00', '0000-00-00', '', '', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 0, '', 2, 2, 0, 0, 'pm1', '2017-12-13 00:30:41', '0'),
|
||||
(5, 2, 0, 8, 2, 0, 10, 1, 0, 0, 0, 'Database error in adding blogroll.', '', 3, 0, 'codeerror', '', '', '', '', '<p>[Steps]</p>\r\n1. Add ”www.zentao.pm\"<br /><p>[Results]</p>\r\n1. It cannot be added, and database error prompts.<br /><p>[Expectations]</p>1. In database form ‘friend link’, add ”www.zentao.pm\"<br />', 'active', '', 0, 0, '0000-00-00 00:00:00', '', 'pm1', '2017-12-13 00:32:08', '2', '', '0000-00-00 00:00:00', '0000-00-00', '', '', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 0, '', 2, 2, 0, 0, '', '0000-00-00 00:00:00', '0');
|
||||
|
||||
INSERT INTO `zt_build` (`id`, `product`, `branch`, `project`, `name`, `scmPath`, `filePath`, `date`, `stories`, `bugs`, `builder`, `desc`, `deleted`) VALUES
|
||||
(1, 1, 0, 1, 'win10 V1.0build1', '', '', '2017-12-12', '', '', 'pm1', '', '0'),
|
||||
(2, 2, 0, 2, 'blog v0.1', '', '', '2017-12-12', '', '', 'pm1', 'build for inner test<br />', '0');
|
||||
|
||||
INSERT INTO `zt_burn` (`project`, `date`, `estimate`, `left`, `consumed`) VALUES
|
||||
(1, '2017-12-12', 280, 184, 68);
|
||||
|
||||
INSERT INTO `zt_case` (`id`, `product`, `branch`, `lib`, `module`, `path`, `story`, `storyVersion`, `title`, `precondition`, `keywords`, `pri`, `type`, `stage`, `howRun`, `scriptedBy`, `scriptedDate`, `scriptStatus`, `scriptLocation`, `status`, `color`, `frequency`, `order`, `openedBy`, `openedDate`, `reviewedBy`, `reviewedDate`, `lastEditedBy`, `lastEditedDate`, `version`, `linkCase`, `fromBug`, `fromCaseID`, `deleted`, `lastRunner`, `lastRunDate`, `lastRunResult`) VALUES
|
||||
(1, 2, 0, 0, 8, 0, 11, 1, 'Cache setup test', '', '', 3, 'feature', ',unittest,feature', '', '', '0000-00-00', '', '', 'normal', '', '1', 0, 'pm1', '2017-12-13 00:00:29', '', '0000-00-00', '', '0000-00-00 00:00:00', 1, '', 0, 0, '0', 'pm1', '2017-12-13 00:10:24', 'pass'),
|
||||
(2, 2, 0, 0, 8, 0, 10, 1, 'SEO setup test', '', '', 2, 'feature', ',feature', '', '', '0000-00-00', '', '', 'normal', '', '1', 0, 'pm1', '2017-12-13 00:04:09', '', '0000-00-00', 'pm1', '2017-12-13 00:18:17', 2, '', 0, 0, '0', 'pm1', '2017-12-13 00:23:48', 'fail'),
|
||||
(3, 2, 0, 0, 8, 0, 0, 1, 'general setup test', '', '', 3, 'feature', '', '', '', '0000-00-00', '', '', 'normal', '', '1', 0, 'pm1', '2017-12-13 00:13:25', '', '0000-00-00', '', '0000-00-00 00:00:00', 1, '', 0, 0, '0', '', '0000-00-00 00:00:00', '');
|
||||
|
||||
INSERT INTO `zt_casestep` (`id`, `parent`, `case`, `version`, `type`, `desc`, `expect`) VALUES
|
||||
(1, 0, 1, 1, 'step', 'Switch on cache.', 'Cache is on.'),
|
||||
(2, 0, 1, 1, 'step', 'Switch off cache.', 'Cache is off.'),
|
||||
(3, 0, 2, 1, 'step', 'Click “Generate sitemap”', 'Sitemap is generated.'),
|
||||
(4, 0, 2, 1, 'step', 'Click “400 page”', 'List all 400 error pages'),
|
||||
(5, 0, 2, 1, 'step', 'Set “Individual Blog” as global keyword.', 'Set “Individual Blog” as site keyword.'),
|
||||
(6, 0, 3, 1, 'step', 'Set self introduction as “Self Intro ABC"', 'Self introduction is set as “Self Intro ABC"'),
|
||||
(7, 0, 2, 2, 'step', 'Click “Generate sitemap”', 'Sitemap is generated.'),
|
||||
(8, 0, 2, 2, 'step', 'Click “400 page”', 'List all 400 error pages'),
|
||||
(9, 0, 2, 2, 'step', 'Set “Individual Blog” as global keyword.”', 'Set “Individual Blog” as site keyword.”'),
|
||||
(10, 0, 2, 2, 'step', 'Add ”www.zentao.pm"', 'In database form ‘friend link’, add ”www.zentao.pm"');
|
||||
|
||||
INSERT INTO `zt_dept` (`id`, `name`, `parent`, `path`, `grade`, `order`, `position`, `function`, `manager`) VALUES
|
||||
(1, 'Product Dept', 0, ',1,', 1, 10, '', '', ''),
|
||||
(2, 'Dev Dept', 0, ',2,', 1, 20, '', '', ''),
|
||||
(3, 'QA Dept', 0, ',3,', 1, 30, '', '', ''),
|
||||
(4, 'Ops Dept', 0, ',4,', 1, 40, '', '', ''),
|
||||
(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_history` (`id`, `action`, `field`, `old`, `new`, `diff`) VALUES
|
||||
(1, 7, 'desc', 'Finish developing system drive program.', 'Add advanced features such as remote desktop.', '001- <del>Finish developing system drive program.</del>\n001+ <ins>Add advanced features such as remote desktop.</ins>'),
|
||||
(2, 8, 'desc', 'Finish developing general features.<br />', 'Finish developing general features for users.<br />', '001- <del>Finish developing features that are often used.<br /></del>\n001+ <ins>Finish developing general features for users.<br /></ins>'),
|
||||
(3, 27, 'realStarted', '0000-00-00', '2017-12-12', ''),
|
||||
(4, 27, 'assignedTo', 'pm1', 'pm1', ''),
|
||||
(5, 27, 'status', 'wait', 'doing', ''),
|
||||
(6, 28, 'left', '100', '64', ''),
|
||||
(7, 28, 'consumed', '0', '8', ''),
|
||||
(8, 29, 'realStarted', '0000-00-00', '2017-12-12', ''),
|
||||
(9, 29, 'assignedTo', 'pm1', 'pm1', ''),
|
||||
(10, 29, 'status', 'wait', 'doing', ''),
|
||||
(11, 30, 'realStarted', '0000-00-00', '2017-12-12', ''),
|
||||
(12, 30, 'assignedTo', 'pm1', 'pm1', ''),
|
||||
(13, 30, 'status', 'wait', 'doing', ''),
|
||||
(14, 31, 'left', '60', '0', ''),
|
||||
(15, 31, 'consumed', '0', '60', ''),
|
||||
(16, 31, 'status', 'doing', 'done', ''),
|
||||
(17, 46, 'status', 'wait', 'doing', ''),
|
||||
(18, 74, 'realStarted', '0000-00-00', '2017-12-12', ''),
|
||||
(19, 74, 'status', 'wait', 'doing', ''),
|
||||
(20, 75, 'left', '30', '55', ''),
|
||||
(21, 75, 'consumed', '0', '8', ''),
|
||||
(22, 75, 'status', 'wait', 'doing', ''),
|
||||
(23, 78, 'realStarted', '0000-00-00', '2017-12-12', ''),
|
||||
(24, 78, 'status', 'wait', 'doing', ''),
|
||||
(25, 79, 'realStarted', '0000-00-00', '2017-12-12', ''),
|
||||
(26, 79, 'status', 'wait', 'doing', ''),
|
||||
(27, 80, 'consumed', '0', '30', ''),
|
||||
(28, 80, 'assignedTo', 'pm1', 'pm1', ''),
|
||||
(29, 80, 'finishedDate', '', '2017-12-12 23:47:37', ''),
|
||||
(30, 80, 'left', '40', '0', ''),
|
||||
(31, 80, 'status', 'doing', 'done', ''),
|
||||
(32, 80, 'finishedBy', '', 'pm1', ''),
|
||||
(33, 84, 'left', '60', '50', ''),
|
||||
(34, 84, 'consumed', '0', '8', ''),
|
||||
(35, 87, 'pri', '3', '2', ''),
|
||||
(36, 88, 'pri', '3', '1', ''),
|
||||
(37, 89, 'status', 'wait', 'doing', ''),
|
||||
(38, 100, 'version', '1', '2', ''),
|
||||
(39, 100, 'steps', 'Click “Generate sitemap” EXPECT: Sitemap is generated.\nClick “400 page” EXPECT: List all 400 error pages.\nSet “Individual Blog” as global keyword. EXPECT: Set “Individual Blog” as site keyword.\n', 'Click “Generate sitemap” EXPECT: Sitemap is generated.\nClick “400 page” EXPECT: List all 400 error pages.\nSet “Individual Blog” as global keyword. EXPECT: Set “Individual Blog” as site keyword.\nAdd ”www.zentao.pm" EXPECT:In database form ‘friend link’, add ”www.zentao.pmww.zentao.pm"\n', '004+ <ins> Add ”www.zentao.pm" EXPECT:In database form ‘friend link’, add ”www.zentao.pmww.zentao.pm"</ins>'),
|
||||
(40, 102, 'title', 'SEO setup test', 'Generate sitemap', '001- <del>SEO setup test</del>\n001+ <ins>Generate sitemap</ins>'),
|
||||
(41, 102, 'steps', '<p>[Steps]</p>\r\n1. Click “Generate sitemap”<br /><p>[Results]</p>\r\n1. ‘Contact Us’ page is missing in sitemap.<br /><p>[Expectations]</p>1. Generate sitemap<br />', '<p>[Steps]</p>\r\n1. Click “Generate sitemap”<br /><p>[Results]</p>\r\n1. ‘Contact Us’ page is missing in sitemap.<br /><p>[Expectations]</p>\r\n1. Generate sitemap<br />', '003- <del>1. ‘Contact Us’ page is missing in sitemap.<br /><p>[Expectations]</p>1. Generate sitemap<br /></del>\n003+ <ins>1. ‘Contact Us’ page is missing in sitemap.<br /><p>[Expectations]</p></ins>\n004+ <ins>1. Generate sitemap<br /></ins>'),
|
||||
(42, 102, 'resolvedDate', '0000-00-00 00:00:00', '', ''),
|
||||
(43, 103, 'title', 'SEO setup test', '400 page is incomplete.', '001- <del>SEO setup test</del>\n001+ <ins>400 page is incomplete.</ins>'),
|
||||
(44, 103, 'steps', '<p>[Steps]</p>\r\n1. Click “400 page”<br /><p>[Results]</p>\r\n1. Not all 400 page is displayed.<br /><p>[Expectations]</p>1. List all 400 error pages.<br />', '<p>[Steps]</p>\r\n1. Click “400 page”<br /><p>[Results]</p>\r\n1. Not all 400 page is displayed.<br /><p>[Expectations]</p>\r\n1. List all 400 error pages.<br />', '003- <del>1. Not all 400 page is displayed.<br /><p>[Expectations]</p>1. List all 400 error pages.<br /></del>\n003+ <ins>1. Not all 400 page is displayed.<br /><p>[Expectations]</p></ins>\n004+ <ins>1. List all 400 error pages.<br /></ins>'),
|
||||
(45, 103, 'resolvedDate', '0000-00-00 00:00:00', '', '');
|
||||
|
||||
INSERT INTO `zt_module` (`id`, `root`, `branch`, `name`, `parent`, `path`, `grade`, `order`, `type`, `owner`, `short`, `deleted`) VALUES
|
||||
(1, 1, 0, 'Desktop', 0, ',1,', 1, 10, 'story', '', '', '0'),
|
||||
(2, 1, 0, 'My Doc', 0, ',2,', 1, 20, 'story', '', '', '0'),
|
||||
(3, 1, 0, 'Control Panel', 0, ',3,', 1, 30, 'story', '', '', '0'),
|
||||
(4, 1, 0, 'Task Manager', 0, ',4,', 1, 40, 'story', '', '', '0'),
|
||||
(5, 1, 0, 'Other', 0, ',5,', 1, 50, 'story', '', '', '0'),
|
||||
(6, 2, 0, 'Frontend', 0, ',6,', 1, 10, 'story', '', '', '0'),
|
||||
(7, 2, 0, 'Backend', 0, ',7,', 1, 20, 'story', '', '', '0'),
|
||||
(8, 2, 0, 'Global setup', 7, ',7,8,', 2, 10, 'story', '', '', '0'),
|
||||
(9, 2, 0, 'UI setup', 7, ',7,9,', 2, 20, 'story', '', '', '0'),
|
||||
(10, 2, 0, 'Manage Articles', 7, ',7,10,', 2, 30, 'story', '', '', '0');
|
||||
|
||||
INSERT INTO `zt_product` (`id`, `name`, `code`, `line`, `type`, `status`, `desc`, `PO`, `QD`, `RD`, `acl`, `whitelist`, `createdBy`, `createdDate`, `createdVersion`, `order`, `deleted`) VALUES
|
||||
(1, 'windows 10', 'win10', 0, 'normal', 'normal', '', 'thePO', 'pm1', 'pm1', 'open', '', 'thePO', '2017-12-12 14:44:55', '9.6.3', 5, '0'),
|
||||
(2, 'Blog', 'blog', 0, 'normal', 'normal', 'A blogging system<br />', 'thePO', 'pm1', 'pm1', 'open', '', 'admin', '2017-12-12 23:28:29', '9.6.3', 10, '0');
|
||||
|
||||
INSERT INTO `zt_productplan` (`id`, `product`, `branch`, `title`, `desc`, `begin`, `end`, `deleted`) VALUES
|
||||
(1, 1, 0, 'win10 v1.0', 'Finish developing general features for users.<br />', '2017-12-30', '2018-07-03', '0'),
|
||||
(2, 1, 0, 'win10 v2.0', 'Add advanced features such as remote desktop.', '2018-07-04', '2019-01-05', '0'),
|
||||
(3, 2, 0, 'blog v0.1', 'Start developing blog<br />', '2017-12-30', '2018-01-29', '0'),
|
||||
(4, 2, 0, 'blog v0.2', 'Add more setup options of the blog.<br />', '2018-01-30', '2018-04-01', '0');
|
||||
|
||||
INSERT INTO `zt_project` (`id`, `isCat`, `catID`, `type`, `parent`, `name`, `code`, `begin`, `end`, `days`, `status`, `statge`, `pri`, `desc`, `openedBy`, `openedDate`, `openedVersion`, `closedBy`, `closedDate`, `canceledBy`, `canceledDate`, `PO`, `PM`, `QD`, `RD`, `team`, `acl`, `whitelist`, `order`, `deleted`) VALUES
|
||||
(1, '0', 0, 'sprint', 0, ' 1st sprint of win10', 'win10Sprt1', '2017-12-12', '2017-12-25', 10, 'doing', '1', '1', 'Finish developing desktop.', '', 0, '9.6.3', '', 0, '', 0, '', '', '', '', ' 1st sprint of win10', 'open', '', 5, '0'),
|
||||
(2, '0', 0, 'sprint', 0, '1st sprint of blog', 'blog v0.1', '2017-12-12', '2017-12-25', 10, 'doing', '1', '1', '', '', 0, '9.6.3', '', 0, '', 0, '', '', '', '', '1st sprint of blog', 'open', '', 10, '0');
|
||||
|
||||
INSERT INTO `zt_projectproduct` (`project`, `product`, `branch`) VALUES
|
||||
(1, 1, 0),
|
||||
(2, 2, 0);
|
||||
|
||||
INSERT INTO `zt_projectstory` (`project`, `product`, `story`, `version`, `order`) VALUES
|
||||
(1, 1, 3, 1, 1),
|
||||
(1, 1, 2, 1, 2),
|
||||
(1, 1, 1, 1, 3),
|
||||
(2, 2, 14, 1, 1),
|
||||
(2, 2, 13, 1, 2),
|
||||
(2, 2, 12, 1, 3),
|
||||
(2, 2, 11, 1, 4),
|
||||
(2, 2, 10, 1, 5),
|
||||
(2, 2, 9, 1, 6);
|
||||
|
||||
INSERT INTO `zt_story` (`id`, `product`, `branch`, `module`, `plan`, `source`, `sourceNote`, `fromBug`, `title`, `keywords`, `type`, `pri`, `estimate`, `status`, `color`, `stage`, `mailto`, `openedBy`, `openedDate`, `assignedTo`, `assignedDate`, `lastEditedBy`, `lastEditedDate`, `reviewedBy`, `reviewedDate`, `closedBy`, `closedDate`, `closedReason`, `toBug`, `childStories`, `linkStories`, `duplicateStory`, `version`, `deleted`) VALUES
|
||||
(1, 1, 0, 1, '1', '', '', 0, 'Offer up to 10 desktops to users', '', '', 3, 100, 'active', '', 'developing', NULL, 'thePO', '2017-12-12 14:58:30', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', '0000-00-00', '', '0000-00-00 00:00:00', '', 0, '', '', 0, 1, '0'),
|
||||
(2, 1, 0, 1, '1', '', '', 0, 'Custom desktop wallpaper.', '', '', 3, 80, 'active', '', 'developing', NULL, 'thePO', '2017-12-12 14:58:30', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', '0000-00-00', '', '0000-00-00 00:00:00', '', 0, '', '', 0, 1, '0'),
|
||||
(3, 1, 0, 1, '1', '', '', 0, 'Auto classify files.', '', '', 3, 60, 'active', '', 'projected', NULL, 'thePO', '2017-12-12 14:58:30', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', '0000-00-00', '', '0000-00-00 00:00:00', '', 0, '', '', 0, 1, '0'),
|
||||
(4, 1, 0, 2, '1', '', '', 0, 'Fast search document.', '', '', 3, 60, 'active', '', 'planned', NULL, 'thePO', '2017-12-12 14:58:30', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', '0000-00-00', '', '0000-00-00 00:00:00', '', 0, '', '', 0, 1, '0'),
|
||||
(5, 1, 0, 2, '1', '', '', 0, 'Full text retrieval', '', '', 3, 50, 'active', '', 'planned', NULL, 'thePO', '2017-12-12 14:58:30', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', '0000-00-00', '', '0000-00-00 00:00:00', '', 0, '', '', 0, 1, '0'),
|
||||
(6, 1, 0, 2, '1', '', '', 0, 'Add file preview.', '', '', 3, 60, 'active', '', 'planned', NULL, 'thePO', '2017-12-12 14:58:30', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', '0000-00-00', '', '0000-00-00 00:00:00', '', 0, '', '', 0, 1, '0'),
|
||||
(7, 1, 0, 4, '1', '', '', 0, 'Process list', '', '', 3, 50, 'active', '', 'planned', NULL, 'thePO', '2017-12-12 14:58:30', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', '0000-00-00', '', '0000-00-00 00:00:00', '', 0, '', '', 0, 1, '0'),
|
||||
(8, 1, 0, 4, '1', '', '', 0, 'Performance overview', '', '', 3, 60, 'active', '', 'planned', NULL, 'thePO', '2017-12-12 14:58:30', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', '0000-00-00', '', '0000-00-00 00:00:00', '', 0, '', '', 0, 1, '0'),
|
||||
(9, 2, 0, 8, '3', '', '', 0, 'General setup', '', '', 3, 40, 'active', '', 'developed', NULL, 'thePO', '2017-12-12 23:40:19', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', '0000-00-00', '', '0000-00-00 00:00:00', '', 0, '', '', 0, 1, '0'),
|
||||
(10, 2, 0, 8, '3', '', '', 0, 'SEO setup', '', '', 2, 50, 'active', '', 'projected', '', 'thePO', '2017-12-12 23:40:19', '', '0000-00-00 00:00:00', 'thePO', '2017-12-12 23:52:40', '', '0000-00-00', '', '0000-00-00 00:00:00', '', 0, '', '', 0, 1, '0'),
|
||||
(11, 2, 0, 8, '3', '', '', 0, 'cache setup', '', '', 1, 30, 'active', '', 'developing', '', 'thePO', '2017-12-12 23:40:19', '', '0000-00-00 00:00:00', 'thePO', '2017-12-12 23:53:04', '', '0000-00-00', '', '0000-00-00 00:00:00', '', 0, '', '', 0, 1, '0'),
|
||||
(12, 2, 0, 8, '3', '', '', 0, 'security setup', '', '', 3, 30, 'active', '', 'developing', NULL, 'thePO', '2017-12-12 23:40:19', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', '0000-00-00', '', '0000-00-00 00:00:00', '', 0, '', '', 0, 1, '0'),
|
||||
(13, 2, 0, 9, '3', '', '', 0, 'UI setup', '', '', 3, 60, 'active', '', 'developing', NULL, 'thePO', '2017-12-12 23:40:19', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', '0000-00-00', '', '0000-00-00 00:00:00', '', 0, '', '', 0, 1, '0'),
|
||||
(14, 2, 0, 6, '3', '', '', 0, 'Page display', '', '', 3, 60, 'active', '', 'projected', NULL, 'thePO', '2017-12-12 23:40:19', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', '0000-00-00', '', '0000-00-00 00:00:00', '', 0, '', '', 0, 1, '0'),
|
||||
(15, 2, 0, 10, '4', '', '', 0, 'Article management', '', '', 3, 50, 'active', '', 'planned', NULL, 'thePO', '2017-12-12 23:40:19', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', '0000-00-00', '', '0000-00-00 00:00:00', '', 0, '', '', 0, 1, '0');
|
||||
|
||||
INSERT INTO `zt_storyspec` (`story`, `version`, `title`, `spec`, `verify`) VALUES
|
||||
(1, 1, 'Offer up to 10 desktops to users', 'User can do different tasks on different desktops.', ''),
|
||||
(2, 1, 'Custom desktop wallpaper', '', ''),
|
||||
(3, 1, 'Auto classify files.', '', ''),
|
||||
(4, 1, 'Fast search document.', '', ''),
|
||||
(5, 1, 'Full text retrieval', '', ''),
|
||||
(6, 1, 'Add file preview.', '', ''),
|
||||
(7, 1, 'Process list', '', ''),
|
||||
(8, 1, 'Performance overview', '', ''),
|
||||
(9, 1, 'General setup', '', ''),
|
||||
(10, 1, 'SEO setup', 'Set SEO switch and report.', ''),
|
||||
(11, 1, 'cache setup', 'Set cache switch and time.', ''),
|
||||
(12, 1, 'security setup', '', ''),
|
||||
(13, 1, 'UI setup', '', ''),
|
||||
(14, 1, 'Page display', '', ''),
|
||||
(15, 1, 'Article management', '', '');
|
||||
|
||||
INSERT INTO `zt_suitecase` (`suite`, `product`, `case`, `version`) VALUES
|
||||
(1, 0, 2, 1),
|
||||
(1, 0, 1, 1);
|
||||
|
||||
INSERT INTO `zt_task` (`id`, `parent`, `project`, `module`, `story`, `storyVersion`, `fromBug`, `name`, `type`, `pri`, `estimate`, `consumed`, `left`, `deadline`, `status`, `color`, `mailto`, `desc`, `openedBy`, `openedDate`, `assignedTo`, `assignedDate`, `estStarted`, `realStarted`, `finishedBy`, `finishedDate`, `canceledBy`, `canceledDate`, `closedBy`, `closedDate`, `closedReason`, `lastEditedBy`, `lastEditedDate`, `deleted`) VALUES
|
||||
(1, 0, 1, 1, 1, 1, 0, 'Offer up to 10 desktops to users.', 'devel', 3, 100, 8, 64, '0000-00-00', 'doing', '', NULL, 'User can do different tasks on different desktops.', 'pm1', '2017-12-12 15:05:06', 'pm1', '2017-12-12 15:12:17', '0000-00-00', '2017-12-12', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', 'pm1', '2017-12-12 15:13:13', '0'),
|
||||
(2, 0, 1, 1, 2, 1, 0, 'Custom desktop wallpaper', 'devel', 3, 80, 0, 80, '0000-00-00', 'doing', '', NULL, '', 'pm1', '2017-12-12 15:05:06', 'pm1', '2017-12-12 15:13:25', '0000-00-00', '2017-12-12', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', 'pm1', '2017-12-12 15:13:25', '0'),
|
||||
(3, 0, 1, 1, 3, 1, 0, 'Auto classify files.', 'devel', 3, 60, 60, 0, '0000-00-00', 'done', '', NULL, '', 'pm1', '2017-12-12 15:05:06', 'pm1', '2017-12-12 15:14:47', '0000-00-00', '2017-12-12', 'pm1', '2017-12-12 15:14:47', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', 'pm1', '2017-12-12 15:14:47', '0'),
|
||||
(4, 0, 1, 1, 3, 1, 0, 'File type configuration', 'devel', 4, 40, 0, 40, '0000-00-00', 'wait', '', NULL, '', 'pm1', '2017-12-12 15:05:06', 'pm1', '2017-12-12 15:05:06', '0000-00-00', '0000-00-00', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', '', '0000-00-00 00:00:00', '0'),
|
||||
(5, 0, 2, 8, 9, 1, 0, 'General backend setup', 'devel', 3, 40, 30, 0, '0000-00-00', 'done', '', NULL, '', 'pm1', '2017-12-12 23:45:14', 'pm1', '2017-12-12 23:47:37', '0000-00-00', '2017-12-12', 'pm1', '2017-12-12 23:47:37', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', 'pm1', '2017-12-12 23:47:37', '0'),
|
||||
(6, 0, 2, 8, 10, 1, 0, 'backend SEO setup', 'devel', 3, 50, 0, 50, '0000-00-00', 'wait', '', NULL, 'Set SEO switch and report.', 'pm1', '2017-12-12 23:45:14', 'pm1', '2017-12-12 23:45:14', '0000-00-00', '0000-00-00', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', '', '0000-00-00 00:00:00', '0'),
|
||||
(7, 0, 2, 8, 11, 1, 0, 'backend cache setup', 'devel', 3, 30, 8, 55, '0000-00-00', 'doing', '', NULL, 'Set cache switch and time.', 'pm1', '2017-12-12 23:45:14', 'pm1', '2017-12-12 23:45:53', '0000-00-00', '2017-12-12', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', 'pm1', '2017-12-12 23:45:53', '0'),
|
||||
(8, 0, 2, 8, 12, 1, 0, 'backend security setup', 'devel', 3, 30, 0, 30, '0000-00-00', 'doing', '', NULL, '', 'pm1', '2017-12-12 23:45:14', 'pm1', '2017-12-12 23:45:14', '0000-00-00', '2017-12-12', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', 'pm1', '2017-12-12 23:45:35', '0'),
|
||||
(9, 0, 2, 9, 13, 1, 0, 'backend UI setup', 'devel', 3, 60, 8, 50, '0000-00-00', 'doing', '', NULL, '', 'pm1', '2017-12-12 23:45:14', 'pm1', '2017-12-12 23:45:14', '0000-00-00', '2017-12-12', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', 'pm1', '2017-12-12 23:51:14', '0'),
|
||||
(10, 0, 2, 6, 14, 1, 0, 'Page display', 'devel', 3, 60, 0, 60, '0000-00-00', 'wait', '', NULL, '', 'pm1', '2017-12-12 23:45:14', 'pm1', '2017-12-12 23:45:14', '0000-00-00', '0000-00-00', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', '', '0000-00-00 00:00:00', '0');
|
||||
|
||||
INSERT INTO `zt_taskestimate` (`id`, `task`, `date`, `left`, `consumed`, `account`, `work`) VALUES
|
||||
(1, 1, '2017-12-12', 100, 0, 'pm1', NULL),
|
||||
(2, 1, '2017-12-12', 64, 8, 'pm1', 'Finish UI design'),
|
||||
(3, 2, '2017-12-12', 80, 0, 'pm1', NULL),
|
||||
(4, 3, '2017-12-12', 60, 0, 'pm1', NULL),
|
||||
(5, 3, '2017-12-12', 0, 60, 'pm1', 'Finish'),
|
||||
(6, 8, '2017-12-12', 30, 0, 'pm1', NULL),
|
||||
(7, 7, '2017-12-12', 55, 8, 'pm1', ''),
|
||||
(8, 9, '2017-12-12', 60, 0, 'pm1', NULL),
|
||||
(9, 5, '2017-12-12', 40, 0, 'pm1', NULL),
|
||||
(10, 5, '2017-12-12', 0, 30, 'pm1', NULL),
|
||||
(11, 9, '2017-12-13', 50, 8, 'pm1', 'Finish page design');
|
||||
|
||||
INSERT INTO `zt_team` (`root`, `type`, `account`, `role`, `limited`, `join`, `days`, `hours`, `estimate`, `consumed`, `left`, `order`) VALUES
|
||||
(2, 'project', 'thePO', 'Product Owner', 'no', '2017-12-12', 10, 7.0, 0.00, 0.00, 0.00, 0),
|
||||
(2, 'project', 'pm1', 'Project Manager', 'no', '2017-12-12', 10, 7.0, 0.00, 0.00, 0.00, 0),
|
||||
(1, 'project', 'thePO', 'Product Owner', 'no', '2017-12-12', 10, 7.0, 0.00, 0.00, 0.00, 0),
|
||||
(1, 'project', 'pm1', 'Project Manager', 'no', '2017-12-12', 10, 7.0, 0.00, 0.00, 0.00, 0);
|
||||
|
||||
INSERT INTO `zt_testresult` (`id`, `run`, `case`, `version`, `caseResult`, `stepResults`, `lastRunner`, `date`) VALUES
|
||||
(1, 1, 2, 1, 'fail', 'a:3:{i:3;a:2:{s:6:\"result\";s:4:\"pass\";s:4:\"real\";s:0:\"\";}i:4;a:2:{s:6:\"result\";s:4:\"fail\";s:4:\"real\";s:24:\"Not all 400 page is displayed.\";}i:5;a:2:{s:6:\"result\";s:4:\"pass\";s:4:\"real\";s:0:\"\";}}', 'pm1', '2017-12-13 00:08:52'),
|
||||
(2, 2, 1, 1, 'pass', 'a:2:{i:1;a:2:{s:6:\"result\";s:4:\"pass\";s:4:\"real\";s:0:\"\";}i:2;a:2:{s:6:\"result\";s:4:\"pass\";s:4:\"real\";s:0:\"\";}}', 'pm1', '2017-12-13 00:10:24'),
|
||||
(3, 0, 2, 2, 'fail', 'a:4:{i:7;a:2:{s:6:\"result\";s:4:\"fail\";s:4:\"real\";s:42:\"‘Contact Us’ page is missing in sitemap.\";}i:8;a:2:{s:6:\"result\";s:4:\"fail\";s:4:\"real\";s:36:\"400 page is missing.‘/notExitPage’;\";}i:9;a:2:{s:6:\"result\";s:4:\"pass\";s:4:\"real\";s:0:\"\";}i:10;a:2:{s:6:\"result\";s:3:\"n/a\";s:4:\"real\";s:45:\"Blogroll cannot be added, and database error prompts.\";}}', 'pm1', '2017-12-13 00:23:41'),
|
||||
(4, 0, 2, 2, 'fail', 'a:4:{i:7;a:2:{s:6:\"result\";s:4:\"fail\";s:4:\"real\";s:42:\"‘Contact Us’ page is missing in sitemap.\";}i:8;a:2:{s:6:\"result\";s:4:\"fail\";s:4:\"real\";s:36:\"400 page is missing.‘/notExitPage’;\";}i:9;a:2:{s:6:\"result\";s:4:\"pass\";s:4:\"real\";s:0:\"\";}i:10;a:2:{s:6:\"result\";s:4:\"fail\";s:4:\"real\";s:45:\"Blogroll cannot be added, and database error prompts.\";}}', 'pm1', '2017-12-13 00:23:48');
|
||||
|
||||
INSERT INTO `zt_testrun` (`id`, `task`, `case`, `version`, `assignedTo`, `lastRunner`, `lastRunDate`, `lastRunResult`, `status`) VALUES
|
||||
(1, 1, 2, 2, 'pm1', 'pm1', '2017-12-13 00:08:52', 'fail', 'done'),
|
||||
(2, 1, 1, 1, 'pm1', 'pm1', '2017-12-13 00:10:24', 'pass', 'done');
|
||||
|
||||
INSERT INTO `zt_testsuite` (`id`, `product`, `name`, `desc`, `type`, `addedBy`, `addedDate`, `lastEditedBy`, `lastEditedDate`, `deleted`) VALUES
|
||||
(1, 2, 'Testsuite', 'Testsuite', 'public', 'pm1', '2017-12-13 00:05:13', '', '0000-00-00 00:00:00', '0');
|
||||
|
||||
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
|
||||
(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');
|
||||
|
||||
INSERT INTO `zt_usergroup` (`account`, `group`) VALUES
|
||||
('pm1', 4),
|
||||
('thePO', 5);
|
||||
@@ -0,0 +1,102 @@
|
||||
-- DROP TABLE IF EXISTS `zt_entry`;
|
||||
CREATE TABLE IF NOT EXISTS `zt_entry` (
|
||||
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`name` varchar(50) NOT NULL,
|
||||
`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` (`id`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||
|
||||
-- DROP TABLE IF EXISTS `zt_webhook`;
|
||||
CREATE TABLE IF NOT EXISTS `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,
|
||||
`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;
|
||||
|
||||
-- DROP TABLE IF EXISTS `zt_webhookdatas`;
|
||||
CREATE TABLE IF NOT EXISTS `zt_webhookdatas` (
|
||||
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`webhook` mediumint(8) unsigned NOT NULL,
|
||||
`action` mediumint(8) unsigned NOT NULL,
|
||||
`data` text NOT NULL,
|
||||
`status` enum('wait', 'sended') NOT NULL DEFAULT 'wait',
|
||||
`createdBy` varchar(30) NOT NULL,
|
||||
`createdDate` datetime NOT NULL,
|
||||
PRIMARY KEY `id` (`id`),
|
||||
UNIQUE KEY `uniq` (`webhook`, `action`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||
|
||||
-- DROP TABLE IF EXISTS `zt_log`;
|
||||
CREATE TABLE IF NOT EXISTS `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` (`id`),
|
||||
KEY `objectType` (`objectType`),
|
||||
KEY `obejctID` (`objectID`)
|
||||
) 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,
|
||||
`objectID` int(11) NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `account` (`account`),
|
||||
KEY `model` (`module`),
|
||||
KEY `method` (`method`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||
|
||||
ALTER TABLE `zt_product` ADD `line` mediumint(8) NOT NULL AFTER `code`;
|
||||
|
||||
ALTER TABLE `zt_projectstory` ADD `order` smallint(6) unsigned NOT NULL;
|
||||
|
||||
ALTER TABLE `zt_task` ADD `parent` mediumint(8) NOT NULL DEFAULT '0' AFTER `id`;
|
||||
|
||||
ALTER TABLE `zt_team` ADD `task` mediumint(8) NOT NULL DEFAULT '0' AFTER `project`;
|
||||
ALTER TABLE `zt_team` ADD `estimate` DECIMAL(12,2) UNSIGNED NOT NULL DEFAULT '0';
|
||||
ALTER TABLE `zt_team` ADD `consumed` DECIMAL(12,2) UNSIGNED NOT NULL DEFAULT '0' AFTER `estimate`;
|
||||
ALTER TABLE `zt_team` ADD `left` DECIMAL(12,2) UNSIGNED NOT NULL DEFAULT '0' AFTER `consumed`;
|
||||
ALTER TABLE `zt_team` ADD `order` TINYINT(3) NOT NULL DEFAULT '0' AFTER `left`;
|
||||
ALTER TABLE `zt_team` DROP PRIMARY KEY;
|
||||
ALTER TABLE `zt_team` ADD PRIMARY KEY (`project`, `task`, `account`);
|
||||
|
||||
ALTER TABLE `zt_user` ADD `score` INT(11) NOT NULL DEFAULT '0' AFTER `ranzhi`;
|
||||
ALTER TABLE `zt_user` ADD `scoreLevel` INT(11) NOT NULL DEFAULT '0' AFTER `score`;
|
||||
|
||||
INSERT INTO `zt_cron` (`m`, `h`, `dom`, `mon`, `dow`, `command`, `remark`, `type`, `buildin`, `status`, `lastTime`) VALUES ('*/5', '*', '*', '*', '*', 'moduleName=webhook&methodName=asyncSend', '异步发送Webhook', 'zentao', 1, 'normal', '0000-00-00 00:00:00');
|
||||
@@ -1,3 +1,2 @@
|
||||
ALTER TABLE `zt_bug` ADD `activatedDate` datetime NOT NULL AFTER `activatedCount`;
|
||||
ALTER TABLE `zt_user` ADD `limitedUser` varchar(8) NOT NULL default 'no' AFTER `role`;
|
||||
ALTER TABLE `zt_team` ADD `limitedUser` varchar(8) NOT NULL default 'no' AFTER `role`;
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
ALTER TABLE `zt_productplan` ADD `order` TEXT NOT NULL AFTER `end`;
|
||||
@@ -0,0 +1,4 @@
|
||||
ALTER TABLE `zt_score` DROP `objectID`;
|
||||
ALTER TABLE `zt_team` CHANGE `limitedUser` `limited` varchar(8) COLLATE 'utf8_general_ci' NOT NULL DEFAULT 'no' AFTER `role`;
|
||||
|
||||
INSERT INTO `zt_cron` (`m`, `h`, `dom`, `mon`, `dow`, `command`, `remark`, `type`, `buildin`, `status`, `lastTime`) VALUES ('*/5', '*', '*', '*', '*', 'moduleName=admin&methodName=deleteLog', '删除过期日志', 'zentao', 1, 'normal', '0000-00-00 00:00:00');
|
||||
@@ -0,0 +1,33 @@
|
||||
ALTER TABLE `zt_story` CHANGE `stage` `stage` ENUM('','wait','planned','projected','developing','developed','testing','tested','verified','released','closed') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'wait';
|
||||
ALTER TABLE `zt_todo` ADD `config` varchar(255) NOT NULL;
|
||||
ALTER TABLE `zt_todo` ADD `cycle` tinyint unsigned NOT NULL DEFAULT '0' AFTER `type`;
|
||||
ALTER TABLE `zt_todo` ADD `assignedTo` VARCHAR(30) NOT NULL DEFAULT '' AFTER `config`;
|
||||
ALTER TABLE `zt_todo` ADD `assignedBy` VARCHAR(30) NOT NULL DEFAULT '' AFTER `assignedTo`;
|
||||
ALTER TABLE `zt_todo` ADD `assignedDate` DATETIME NOT NULL AFTER `assignedBy`;
|
||||
ALTER TABLE `zt_todo` ADD `finishedBy` VARCHAR(30) NOT NULL DEFAULT '' AFTER `assignedDate`;
|
||||
ALTER TABLE `zt_todo` ADD `finishedDate` DATETIME NOT NULL AFTER `finishedBy`;
|
||||
ALTER TABLE `zt_todo` ADD `closedBy` VARCHAR(30) NOT NULL DEFAULT '' AFTER `finishedDate`;
|
||||
ALTER TABLE `zt_todo` ADD `closedDate` DATETIME NOT NULL AFTER `closedBy`;
|
||||
ALTER TABLE `zt_todo` CHANGE `status` `status` ENUM('wait','doing','done','closed') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'wait';
|
||||
|
||||
INSERT INTO `zt_cron` (`m`, `h`, `dom`, `mon`, `dow`, `command`, `remark`, `type`, `buildin`, `status`, `lastTime`) VALUES
|
||||
('1', '1', '*', '*', '*', 'moduleName=todo&methodName=createCycle', '生成周期性待办', 'zentao', 1, 'normal', '0000-00-00 00:00:00');
|
||||
|
||||
|
||||
ALTER TABLE `zt_projectproduct` ADD `plan` MEDIUMINT(8) UNSIGNED NOT NULL AFTER `branch`;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `zt_notify` (
|
||||
`id` mediumint unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
`objectType` varchar(50) NOT NULL,
|
||||
`objectID` mediumint unsigned NOT NULL,
|
||||
`action` mediumint 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
|
||||
) ENGINE='MyISAM' COLLATE 'utf8_general_ci';
|
||||
+184
-23
@@ -407,11 +407,28 @@ CREATE TABLE IF NOT EXISTS `zt_module` (
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `module` (`root`,`type`,`path`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||
-- DROP TABLE IF EXISTS `zt_notify`;
|
||||
CREATE TABLE IF NOT EXISTS `zt_notify` (
|
||||
`id` mediumint unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
`objectType` varchar(50) NOT NULL,
|
||||
`objectID` mediumint unsigned NOT NULL,
|
||||
`action` mediumint 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
|
||||
) ENGINE='MyISAM' COLLATE 'utf8_general_ci';
|
||||
-- DROP TABLE IF EXISTS `zt_product`;
|
||||
CREATE TABLE IF NOT EXISTS `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,
|
||||
@@ -437,6 +454,7 @@ CREATE TABLE IF NOT EXISTS `zt_productplan` (
|
||||
`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 `plan` (`product`,`end`)
|
||||
@@ -481,6 +499,7 @@ CREATE TABLE IF NOT EXISTS `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`;
|
||||
@@ -489,6 +508,7 @@ CREATE TABLE IF NOT EXISTS `zt_projectstory` (
|
||||
`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`;
|
||||
@@ -525,7 +545,7 @@ CREATE TABLE IF NOT EXISTS `zt_story` (
|
||||
`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') NOT NULL DEFAULT 'wait',
|
||||
`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,
|
||||
@@ -574,6 +594,7 @@ CREATE TABLE IF NOT EXISTS `zt_suitecase` (
|
||||
-- DROP TABLE IF EXISTS `zt_task`;
|
||||
CREATE TABLE IF NOT EXISTS `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',
|
||||
@@ -618,19 +639,24 @@ CREATE TABLE IF NOT EXISTS `zt_taskestimate` (
|
||||
`consumed` float unsigned NOT NULL,
|
||||
`account` char(30) NOT NULL default '',
|
||||
`work` text,
|
||||
PRIMARY KEY (`id`),
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `task` (`task`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||
-- DROP TABLE IF EXISTS `zt_team`;
|
||||
CREATE TABLE IF NOT EXISTS `zt_team` (
|
||||
`project` mediumint(8) unsigned NOT NULL default '0',
|
||||
`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',
|
||||
PRIMARY KEY (`project`,`account`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||
`estimate` DECIMAL(12,2) UNSIGNED NOT NULL DEFAULT '0',
|
||||
`consumed` DECIMAL(12,2) UNSIGNED NOT NULL DEFAULT '0',
|
||||
`left` DECIMAL(12,2) UNSIGNED NOT NULL DEFAULT '0',
|
||||
`order` TINYINT(3) NOT NULL DEFAULT '0'
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||
-- DROP TABLE IF EXISTS `zt_testreport`;
|
||||
CREATE TABLE IF NOT EXISTS `zt_testreport` (
|
||||
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
|
||||
@@ -689,11 +715,11 @@ CREATE TABLE IF NOT EXISTS `zt_testsuite` (
|
||||
`desc` text NOT NULL,
|
||||
`type` varchar(20) NOT NULL,
|
||||
`addedBy` char(30) NOT NULL,
|
||||
`addedDate` datetime NOT NULL,
|
||||
`addedDate` datetime NOT NULL,
|
||||
`lastEditedBy` char(30) NOT NULL,
|
||||
`lastEditedDate` datetime NOT NULL,
|
||||
`lastEditedDate` datetime NOT NULL,
|
||||
`deleted` enum('0','1') NOT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||
-- DROP TABLE IF EXISTS `zt_testtask`;
|
||||
CREATE TABLE IF NOT EXISTS `zt_testtask` (
|
||||
@@ -716,19 +742,28 @@ CREATE TABLE IF NOT EXISTS `zt_testtask` (
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||
-- DROP TABLE IF EXISTS `zt_todo`;
|
||||
CREATE TABLE IF NOT EXISTS `zt_todo` (
|
||||
`id` mediumint(8) unsigned NOT NULL auto_increment,
|
||||
`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,
|
||||
`idvalue` mediumint(8) unsigned NOT NULL default '0',
|
||||
`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') NOT NULL DEFAULT 'wait',
|
||||
`status` enum('wait','doing','done','closed') NOT NULL DEFAULT 'wait',
|
||||
`private` tinyint(1) NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
`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 `todo` (`account`,`date`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||
-- DROP TABLE IF EXISTS `zt_user`;
|
||||
@@ -761,6 +796,8 @@ CREATE TABLE IF NOT EXISTS `zt_user` (
|
||||
`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`),
|
||||
@@ -803,15 +840,96 @@ CREATE TABLE IF NOT EXISTS `zt_usertpl` (
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `account` (`account`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||
-- DROP TABLE IF EXISTS `zt_entry`;
|
||||
CREATE TABLE IF NOT EXISTS `zt_entry` (
|
||||
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`name` varchar(50) NOT NULL,
|
||||
`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` (`id`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||
-- DROP TABLE IF EXISTS `zt_webhook`;
|
||||
CREATE TABLE IF NOT EXISTS `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,
|
||||
`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;
|
||||
-- DROP TABLE IF EXISTS `zt_webhookdatas`;
|
||||
CREATE TABLE IF NOT EXISTS `zt_webhookdatas` (
|
||||
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`webhook` mediumint(8) unsigned NOT NULL,
|
||||
`action` mediumint(8) unsigned NOT NULL,
|
||||
`data` text NOT NULL,
|
||||
`status` enum('wait', 'sended') NOT NULL DEFAULT 'wait',
|
||||
`createdBy` varchar(30) NOT NULL,
|
||||
`createdDate` datetime NOT NULL,
|
||||
PRIMARY KEY `id` (`id`),
|
||||
UNIQUE KEY `uniq` (`webhook`, `action`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||
-- DROP TABLE IF EXISTS `zt_log`;
|
||||
CREATE TABLE IF NOT EXISTS `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` (`id`),
|
||||
KEY `objectType` (`objectType`),
|
||||
KEY `obejctID` (`objectID`)
|
||||
) 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;
|
||||
|
||||
INSERT INTO `zt_cron` (`m`, `h`, `dom`, `mon`, `dow`, `command`, `remark`, `type`, `buildin`, `status`, `lastTime`) VALUES
|
||||
('*', '*', '*', '*', '*', '', '监控定时任务', 'zentao', 1, 'normal', '0000-00-00 00:00:00'),
|
||||
('30', '23', '*', '*', '*', 'moduleName=project&methodName=computeburn', '更新燃尽图', 'zentao', 1, 'normal', '0000-00-00 00:00:00'),
|
||||
('0', '8', '*', '*', '*', 'moduleName=report&methodName=remind', '每日任务提醒', 'zentao', 1, 'normal', '0000-00-00 00:00:00'),
|
||||
('*/5', '*', '*', '*', '*', 'moduleName=svn&methodName=run', '同步SVN', 'zentao', 1, 'stop', '0000-00-00 00:00:00'),
|
||||
('*/5', '*', '*', '*', '*', 'moduleName=git&methodName=run', '同步GIT', 'zentao', 1, 'stop', '0000-00-00 00:00:00'),
|
||||
('30', '0', '*', '*', '*', 'moduleName=backup&methodName=backup', '备份数据和附件', 'zentao', 1, 'normal', '0000-00-00 00:00:00'),
|
||||
('*/5', '*', '*', '*', '*', 'moduleName=mail&methodName=asyncSend', '异步发信', 'zentao', 1, 'normal', '0000-00-00 00:00:00');
|
||||
('*', '*', '*', '*', '*', '', '监控定时任务', 'zentao', 1, 'normal', '0000-00-00 00:00:00'),
|
||||
('30', '23', '*', '*', '*', 'moduleName=project&methodName=computeburn', '更新燃尽图', 'zentao', 1, 'normal', '0000-00-00 00:00:00'),
|
||||
('0', '8', '*', '*', '*', 'moduleName=report&methodName=remind', '每日任务提醒', 'zentao', 1, 'normal', '0000-00-00 00:00:00'),
|
||||
('*/5', '*', '*', '*', '*', 'moduleName=svn&methodName=run', '同步SVN', 'zentao', 1, 'stop', '0000-00-00 00:00:00'),
|
||||
('*/5', '*', '*', '*', '*', 'moduleName=git&methodName=run', '同步GIT', 'zentao', 1, 'stop', '0000-00-00 00:00:00'),
|
||||
('30', '0', '*', '*', '*', 'moduleName=backup&methodName=backup', '备份数据和附件', 'zentao', 1, 'normal', '0000-00-00 00:00:00'),
|
||||
('*/5', '*', '*', '*', '*', 'moduleName=mail&methodName=asyncSend', '异步发信', 'zentao', 1, 'normal', '0000-00-00 00:00:00'),
|
||||
('*/5', '*', '*', '*', '*', 'moduleName=webhook&methodName=asyncSend', '异步发送Webhook', 'zentao', 1, 'normal', '0000-00-00 00:00:00'),
|
||||
('*/5', '*', '*', '*', '*', 'moduleName=admin&methodName=deleteLog', '删除过期日志', 'zentao', 1, 'normal', '0000-00-00 00:00:00'),
|
||||
('1', '1', '*', '*', '*', 'moduleName=todo&methodName=createCycle', '生成周期性待办', 'zentao', 1, 'normal', '0000-00-00 00:00:00');
|
||||
|
||||
INSERT INTO `zt_group` (`id`, `name`, `role`, `desc`) VALUES
|
||||
(1, 'ADMIN', 'admin', 'for administrator'),
|
||||
@@ -823,8 +941,9 @@ INSERT INTO `zt_group` (`id`, `name`, `role`, `desc`) VALUES
|
||||
(7, 'PD', 'pd', 'for product director.'),
|
||||
(8, 'QD', 'qd', 'for quality director.'),
|
||||
(9, 'TOP', 'top', 'for top manager.'),
|
||||
(10, 'OTHERS', '', 'for others.'),
|
||||
(11, 'guest', 'guest', 'For guest');
|
||||
(10, 'OTHERS', 'others', 'for others.'),
|
||||
(11, 'guest', 'guest', 'For guest'),
|
||||
(12, 'LIMITED', 'limited', 'For limited user');
|
||||
|
||||
INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES
|
||||
(1, 'action', 'editComment'),
|
||||
@@ -969,6 +1088,8 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES
|
||||
(1, 'mail', 'reset'),
|
||||
(1, 'mail', 'save'),
|
||||
(1, 'mail', 'test'),
|
||||
(1, 'message', 'index'),
|
||||
(1, 'message', 'setting'),
|
||||
(1, 'misc', 'ping'),
|
||||
(1, 'my', 'bug'),
|
||||
(1, 'my', 'changePassword'),
|
||||
@@ -1036,6 +1157,7 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES
|
||||
(1, 'project', 'index'),
|
||||
(1, 'project', 'all'),
|
||||
(1, 'project', 'linkStory'),
|
||||
(1, 'project', 'importPlanStories'),
|
||||
(1, 'project', 'manageMembers'),
|
||||
(1, 'project', 'manageProducts'),
|
||||
(1, 'project', 'order'),
|
||||
@@ -1199,6 +1321,7 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES
|
||||
(1, 'todo', 'batchEdit'),
|
||||
(1, 'todo', 'batchFinish'),
|
||||
(1, 'todo', 'create'),
|
||||
(1, 'todo', 'createCycle'),
|
||||
(1, 'todo', 'delete'),
|
||||
(1, 'todo', 'edit'),
|
||||
(1, 'todo', 'export'),
|
||||
@@ -1393,12 +1516,16 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES
|
||||
(2, 'todo', 'batchEdit'),
|
||||
(2, 'todo', 'batchFinish'),
|
||||
(2, 'todo', 'create'),
|
||||
(2, 'todo', 'createCycle'),
|
||||
(2, 'todo', 'delete'),
|
||||
(2, 'todo', 'edit'),
|
||||
(2, 'todo', 'export'),
|
||||
(2, 'todo', 'finish'),
|
||||
(2, 'todo', 'import2Today'),
|
||||
(2, 'todo', 'view'),
|
||||
(2, 'todo', 'assignTo'),
|
||||
(2, 'todo', 'activate'),
|
||||
(2, 'todo', 'close'),
|
||||
(2, 'user', 'bug'),
|
||||
(2, 'user', 'deleteContacts'),
|
||||
(2, 'user', 'dynamic'),
|
||||
@@ -1608,6 +1735,7 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES
|
||||
(3, 'todo', 'batchEdit'),
|
||||
(3, 'todo', 'batchFinish'),
|
||||
(3, 'todo', 'create'),
|
||||
(3, 'todo', 'createCycle'),
|
||||
(3, 'todo', 'delete'),
|
||||
(3, 'todo', 'edit'),
|
||||
(3, 'todo', 'export'),
|
||||
@@ -1745,6 +1873,7 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES
|
||||
(4, 'project', 'index'),
|
||||
(4, 'project', 'all'),
|
||||
(4, 'project', 'linkStory'),
|
||||
(4, 'project', 'importPlanStories'),
|
||||
(4, 'project', 'manageMembers'),
|
||||
(4, 'project', 'manageProducts'),
|
||||
(4, 'project', 'order'),
|
||||
@@ -1832,12 +1961,16 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES
|
||||
(4, 'todo', 'batchEdit'),
|
||||
(4, 'todo', 'batchFinish'),
|
||||
(4, 'todo', 'create'),
|
||||
(4, 'todo', 'createCycle'),
|
||||
(4, 'todo', 'delete'),
|
||||
(4, 'todo', 'edit'),
|
||||
(4, 'todo', 'export'),
|
||||
(4, 'todo', 'finish'),
|
||||
(4, 'todo', 'import2Today'),
|
||||
(4, 'todo', 'view'),
|
||||
(4, 'todo', 'assignTo'),
|
||||
(4, 'todo', 'activate'),
|
||||
(4, 'todo', 'close'),
|
||||
(4, 'tree', 'browse'),
|
||||
(4, 'tree', 'browseTask'),
|
||||
(4, 'tree', 'delete'),
|
||||
@@ -1985,6 +2118,7 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES
|
||||
(5, 'project', 'index'),
|
||||
(5, 'project', 'all'),
|
||||
(5, 'project', 'linkStory'),
|
||||
(5, 'project', 'importPlanStories'),
|
||||
(5, 'project', 'manageMembers'),
|
||||
(5, 'project', 'manageProducts'),
|
||||
(5, 'project', 'order'),
|
||||
@@ -2089,12 +2223,16 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES
|
||||
(5, 'todo', 'batchEdit'),
|
||||
(5, 'todo', 'batchFinish'),
|
||||
(5, 'todo', 'create'),
|
||||
(5, 'todo', 'createCycle'),
|
||||
(5, 'todo', 'delete'),
|
||||
(5, 'todo', 'edit'),
|
||||
(5, 'todo', 'export'),
|
||||
(5, 'todo', 'finish'),
|
||||
(5, 'todo', 'import2Today'),
|
||||
(5, 'todo', 'view'),
|
||||
(5, 'todo', 'assignTo'),
|
||||
(5, 'todo', 'activate'),
|
||||
(5, 'todo', 'close'),
|
||||
(5, 'tree', 'browse'),
|
||||
(5, 'tree', 'browseTask'),
|
||||
(5, 'tree', 'delete'),
|
||||
@@ -2233,6 +2371,7 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES
|
||||
(6, 'project', 'index'),
|
||||
(6, 'project', 'all'),
|
||||
(6, 'project', 'linkStory'),
|
||||
(6, 'project', 'importPlanStories'),
|
||||
(6, 'project', 'manageMembers'),
|
||||
(6, 'project', 'manageProducts'),
|
||||
(6, 'project', 'order'),
|
||||
@@ -2318,12 +2457,16 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES
|
||||
(6, 'todo', 'batchEdit'),
|
||||
(6, 'todo', 'batchFinish'),
|
||||
(6, 'todo', 'create'),
|
||||
(6, 'todo', 'createCycle'),
|
||||
(6, 'todo', 'delete'),
|
||||
(6, 'todo', 'edit'),
|
||||
(6, 'todo', 'export'),
|
||||
(6, 'todo', 'finish'),
|
||||
(6, 'todo', 'import2Today'),
|
||||
(6, 'todo', 'view'),
|
||||
(6, 'todo', 'assignTo'),
|
||||
(6, 'todo', 'activate'),
|
||||
(6, 'todo', 'close'),
|
||||
(6, 'tree', 'browse'),
|
||||
(6, 'tree', 'browseTask'),
|
||||
(6, 'tree', 'delete'),
|
||||
@@ -2461,6 +2604,7 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES
|
||||
(7, 'project', 'index'),
|
||||
(7, 'project', 'all'),
|
||||
(7, 'project', 'linkStory'),
|
||||
(7, 'project', 'importPlanStories'),
|
||||
(7, 'project', 'manageProducts'),
|
||||
(7, 'project', 'story'),
|
||||
(7, 'project', 'task'),
|
||||
@@ -2559,12 +2703,16 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES
|
||||
(7, 'todo', 'batchEdit'),
|
||||
(7, 'todo', 'batchFinish'),
|
||||
(7, 'todo', 'create'),
|
||||
(7, 'todo', 'createCycle'),
|
||||
(7, 'todo', 'delete'),
|
||||
(7, 'todo', 'edit'),
|
||||
(7, 'todo', 'export'),
|
||||
(7, 'todo', 'finish'),
|
||||
(7, 'todo', 'import2Today'),
|
||||
(7, 'todo', 'view'),
|
||||
(7, 'todo', 'assignTo'),
|
||||
(7, 'todo', 'activate'),
|
||||
(7, 'todo', 'close'),
|
||||
(7, 'tree', 'browse'),
|
||||
(7, 'tree', 'browseTask'),
|
||||
(7, 'tree', 'delete'),
|
||||
@@ -2812,12 +2960,16 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES
|
||||
(8, 'todo', 'batchEdit'),
|
||||
(8, 'todo', 'batchFinish'),
|
||||
(8, 'todo', 'create'),
|
||||
(8, 'todo', 'createCycle'),
|
||||
(8, 'todo', 'delete'),
|
||||
(8, 'todo', 'edit'),
|
||||
(8, 'todo', 'export'),
|
||||
(8, 'todo', 'finish'),
|
||||
(8, 'todo', 'import2Today'),
|
||||
(8, 'todo', 'view'),
|
||||
(8, 'todo', 'assignTo'),
|
||||
(8, 'todo', 'activate'),
|
||||
(8, 'todo', 'close'),
|
||||
(8, 'tree', 'browse'),
|
||||
(8, 'tree', 'browseTask'),
|
||||
(8, 'tree', 'delete'),
|
||||
@@ -2978,12 +3130,16 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES
|
||||
(9, 'todo', 'batchEdit'),
|
||||
(9, 'todo', 'batchFinish'),
|
||||
(9, 'todo', 'create'),
|
||||
(9, 'todo', 'createCycle'),
|
||||
(9, 'todo', 'delete'),
|
||||
(9, 'todo', 'edit'),
|
||||
(9, 'todo', 'export'),
|
||||
(9, 'todo', 'finish'),
|
||||
(9, 'todo', 'import2Today'),
|
||||
(9, 'todo', 'view'),
|
||||
(9, 'todo', 'assignTo'),
|
||||
(9, 'todo', 'activate'),
|
||||
(9, 'todo', 'close'),
|
||||
(9, 'user', 'batchCreate'),
|
||||
(9, 'user', 'batchEdit'),
|
||||
(9, 'user', 'bug'),
|
||||
@@ -3064,7 +3220,7 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES
|
||||
(10, 'project', 'team'),
|
||||
(10, 'project', 'testtask'),
|
||||
(10, 'project', 'view'),
|
||||
(10, 'qa', 'index'),
|
||||
(10, 'qa', 'index'),
|
||||
(10, 'release', 'browse'),
|
||||
(10, 'release', 'view'),
|
||||
(10, 'report', 'bugAssign'),
|
||||
@@ -3092,12 +3248,16 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES
|
||||
(10, 'todo', 'batchEdit'),
|
||||
(10, 'todo', 'batchFinish'),
|
||||
(10, 'todo', 'create'),
|
||||
(10, 'todo', 'createCycle'),
|
||||
(10, 'todo', 'delete'),
|
||||
(10, 'todo', 'edit'),
|
||||
(10, 'todo', 'export'),
|
||||
(10, 'todo', 'finish'),
|
||||
(10, 'todo', 'import2Today'),
|
||||
(10, 'todo', 'view'),
|
||||
(10, 'todo', 'assignTo'),
|
||||
(10, 'todo', 'activate'),
|
||||
(10, 'todo', 'close'),
|
||||
(10, 'user', 'bug'),
|
||||
(10, 'user', 'dynamic'),
|
||||
(10, 'user', 'profile'),
|
||||
@@ -3198,4 +3358,5 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES
|
||||
(11, 'user', 'testCase'),
|
||||
(11, 'user', 'testTask'),
|
||||
(11, 'user', 'todo'),
|
||||
(11, 'user', 'view');
|
||||
(11, 'user', 'view'),
|
||||
(12, 'my', 'limited');
|
||||
|
||||
+228
-1
@@ -1,3 +1,230 @@
|
||||
2017-01-17 9.8.stable
|
||||
完成的需求
|
||||
683 todo增加转需求,bug或者任务的功能
|
||||
1678 todo增加评论功能。
|
||||
1680 todo增加处理流程
|
||||
1681 待办实现周期性待办功能
|
||||
1923 报表可以选择显示的方式
|
||||
1952 移植然之里面的消息通知功能
|
||||
2001 调整导出页面的格式
|
||||
2037 测试用例关联需求时候关闭需求也列出
|
||||
2103 禅道中所有创建编辑页面的下拉框都增加搜索定位功能
|
||||
2120 需求任务bug编辑页面抄送给字段可以选择联系人
|
||||
2151 加强计划和项目之间的关系
|
||||
2243 测试版本的用例列表增加按照指派给分组。
|
||||
2245 统计-组织-员工负载表显示未安排任务的人员信息
|
||||
2339 增加指派给我的区块
|
||||
2369 处理下目标服务器积极拒绝链接的错误提示
|
||||
2380 生成测试报告时可以选择多个测试单
|
||||
2401 利用浏览器的消息提醒机制实现消息提醒
|
||||
2409 每日提醒邮件增加任务和bug的超时提醒内容
|
||||
2426 优化文档详情页面的排版
|
||||
2428 邮件中需求任务bug用例标题显示设置的颜色
|
||||
2460 Bug导入模版中增加截止日期字段的导入
|
||||
2479 zt_mailqueue 和 zt_webhookdatas 合并成zt_notify
|
||||
2484 zt_team增加type和root字段,project和task 改成 root
|
||||
2499 实现集中的消息处理机制
|
||||
2523 补充最近的修改记录
|
||||
2566 config下面的配置文件,应该最后加载my.php
|
||||
2568 搜索表单的字段也可以支持搜索
|
||||
2572 通过编辑修改需求plan的时候,计算需求的stage字段。
|
||||
2573 计划的日期可以设置为待定
|
||||
2574 需求关闭之后,stage也都改成closed。
|
||||
2575 丰富计划列表页面的信息
|
||||
2591 help/changeLog的页面中,显示最新的changeLog
|
||||
2592 修改‘个人档案’中的翻译
|
||||
|
||||
修复的Bug
|
||||
1331 项目需求下,如果需求排序权限处于未开启的情况;在选择多个复选框是会出问题
|
||||
1341 点击任务开始剩余工时选择0点击确定完成任务的时候没有把指派人更换成创建人
|
||||
1343 待评审状态用例,批量编辑后,状态会更新为空
|
||||
1347 bug编辑日期可以输入汉字且被保存
|
||||
1355 zentaopms/module/dev/model.php 代码优化
|
||||
1359 看板,未开始的任务,不能拖拽到进行中。
|
||||
1360 未完全修改#2518需求中的所有项目
|
||||
1362 创建子任务使用粘贴文本,保存超过10条时,10条以上的数据不保存
|
||||
1363 后台自定义日期必填项无效
|
||||
1365 后台-安全,设置密码安全为强时,满足安全强度,登录时也会提示密码强度小
|
||||
1367 我的地盘-任务,子任务在任务列表中不显示标签
|
||||
1369 备注权限(action comment),取消视图维护,后台权限验证。
|
||||
1371 文件格式附件预览的时候报错
|
||||
1373 编辑多人任务,可以选择出了项目团队成员之外的其他成员。
|
||||
1374 多人任务,完成,转交,指派人,可以选择非项目团队成员
|
||||
1377 用例内容包含特殊字符时,导出内容不正确
|
||||
1378 编辑用户信息,填写邮箱有空格会提示email不合法
|
||||
1379 任务列表,任务条数大于每页显示条数时,新建子任务会显示在最后一页
|
||||
1382 php7 打开项目中的树状图报错 字符串转数组问题
|
||||
1384 项目-测试 操作栏中的测试报告按钮点击后跳转到创建报告页面
|
||||
1385 测试-用例 从用例库导入用例的搜索中所属模块显示的不是用例库中的模块
|
||||
1386 项目任务列表的优先级显示错误
|
||||
1387 后台-自定义-需求-评审流程,设置强制评审人员,保存不上
|
||||
1388 修改父子任务的所属项目无法整体移动
|
||||
|
||||
2017-12-22 9.7.stable
|
||||
完成的需求
|
||||
2475 批量操作时增加列中切换快捷键支持
|
||||
2496 英文专业版中部分画面带有中文字符
|
||||
2515 调整国际版的发信功能
|
||||
2514 打包一个国际版的安装包
|
||||
2537 The report of bug resolve里面没有做翻译
|
||||
2532 英文版一键安装包里面需要跳转
|
||||
2530 翻译国际版一键安装包的英文界面
|
||||
2558 修正两个画面的翻译
|
||||
2557 修正五个画面的排版细节
|
||||
2556 修正 “修改密码”画面的排版问题
|
||||
2555 修正 “产品动态”和“项目动态“的中的汉字
|
||||
2547 修正 “查看项目画面”的排版问题
|
||||
2546 修正 “BUG的自定义画面“的排版问题
|
||||
2545 修正 “创建项目文档库”画面的提示框翻译
|
||||
2544 修正一键安装包中“ 报表/自定义/项目 ”的空缺内容
|
||||
2543 调整报表模块界面的列显示,消除列名显示不全
|
||||
2542 调整添加用户界面,输入提示显示不全
|
||||
2541 调整一键安装包英文界面下,做系统备份成功时的英文翻译
|
||||
2524 将国际版筛选标签里面和我相关的菜单折叠到一个My标签里面
|
||||
2520 需求详情的用例按钮中间增加空格
|
||||
2519 调整国际版下面的每个表单保证控件组的对齐
|
||||
2518 调整后台首页国际版下面的内容和链接
|
||||
2509 测试视图主页,点击待测版本区块more,可以跳转到测试-测试单下
|
||||
2506 受限操作分组维护分组描述
|
||||
2493 需求、任务、bug、用例、日志列表勾选左下方全选,导出数据时选择选中记录,可以导出全选的数据
|
||||
2492 任务列表下方统计信息,显示子任务的统计信息
|
||||
2474 需求的批量编辑画面,布局有问题,未利用所有的屏幕宽度
|
||||
2355 自定义列表字段把能够展示的字段都梳理一遍
|
||||
2351 调整后台首页和关于页面的链接
|
||||
2297 计划或者项目创建需求的时候可以批量创建
|
||||
2527 bug状态已解决翻译有误
|
||||
2516 精简一级导航菜单的单词
|
||||
2513 创建英文版本的demo
|
||||
2487 编辑webhook页面,把类型字段显示出来
|
||||
2463 后台增加对 tmp和session目录读写权限检查和结果展示的功能
|
||||
2553 历史记录里面的旧记录翻译需要修改
|
||||
2552 优化国际版下面页脚统计信息的翻译
|
||||
2551 创建计划时日期选择翻译错了
|
||||
2550 计划关联需求的翻译弄反了
|
||||
2549 需求关闭页面closed reaseon换行
|
||||
2540 调整需求创建时推荐模板的翻译
|
||||
2539 各个统计报表的翻译需要调整
|
||||
2538 公司视图的统计需要调整翻译。
|
||||
2536 国际版去掉用不到的bug类型
|
||||
2535 调整国际版里面的网站链接
|
||||
2534 调整权限分组里面的翻译和排版
|
||||
2531 需求变更页面翻译需要调整
|
||||
2529 bug详情页面的create应当是Copy
|
||||
2528 bug创建表单keywords空间需要去掉空格
|
||||
2488 项目 任务视图,增加由我参与的任务按钮,展示由我参与的任务(多人任务)。
|
||||
|
||||
修复的BUG
|
||||
1008 我的地盘首页的待办点击后跳转到组织-用户-待办页面
|
||||
1214 项目起止时间显示优化
|
||||
1219 从桌面客户端查看待办,页面显示不对。
|
||||
1221 任务报表统计中没有显示自定义的值
|
||||
1224 非多平台产品,在测试管理工作方式中,测试视图显示异常。
|
||||
1225 调用api反馈 nogdlib实际是有gd库的
|
||||
1228 手机浏览器访问开源版报错
|
||||
1232 任务、用例、bug,直接在列表下进行编辑操作,操作后底部统计栏不再固定显示
|
||||
1234 需求评审结果显示错误
|
||||
1240 提交需求会列出没有权限查看的产品名称
|
||||
1244 组织-日志中,选择本月或上月时,结束日期显示准确。
|
||||
1251 测试用例导出csv文件,报文格式数据不显示
|
||||
1255 zbox一键安装包,建议安装 aria_chk
|
||||
1256 搜索条件为日期介于时间段时,搜索后点击重置,搜索条件还在,需要重新点击搜索,条件才会重置。
|
||||
1261 批量分解任务无法分配相同名称的任务
|
||||
1264 没有产品的时候打开debug,进入以下页面会产生大量警告性的错误
|
||||
1268 需求细分功能如果没有填写任何数据被细分的需求也会关闭
|
||||
1273 测试视图,bug列表,单选框无法正常单选。
|
||||
1274 开源版集成svn/git查看显示403
|
||||
1275 文档维护分类,把模块和子模块改为分类。
|
||||
1280 后台-备份在直线还原操作的时候先检查备份文件的权限是否可以正常执行还原动作
|
||||
1283 列表页面,批操作菜单,会被遮盖。建议优化。
|
||||
1292 子任务指派给用户时,用户登陆后,不会在指派给我中显示
|
||||
1305 修复邮件发送公司信息没有及时更新的问题
|
||||
1309 开启测试管理工具(产品-项目流程),多分支产品,版本根据分支筛选功能异常。
|
||||
1314 产品-需求 无法批量关闭需求
|
||||
1324 产品-需求-编辑,删除所属计划后保存不生效
|
||||
1325 windows一键安装包9.0升9.6.3,admin登录提示没首页权限
|
||||
1326 子任务关闭或删除后,父任务预计工时还会统计
|
||||
1327 任务全选,导出数据,不能导出子任务.
|
||||
1328 项目概况预计工时,与燃尽图不符。
|
||||
1329 多人任务,按照指派给分组,显示优化。
|
||||
1330 项目任务,编辑任务,更换所属项目,顶部弹出窗口,点击取消;选中内容还是目标内容
|
||||
1332 保持登录功能可能失效
|
||||
1335 测试管理工具,产品--版本产品下载地址显示有问题
|
||||
1336 测试管理工具,项目--迭代,添加项目页面报错。
|
||||
1337 项目-任务按照模块和产品筛选数据有问题
|
||||
1338 后台-二次开发-数据库 --其他模块,显示英文字段
|
||||
1340 编辑bug解决日期会显示被修改
|
||||
1341 点击任务开始剩余工时选择0点击确定完成任务的时候没有把指派人更换成创建人
|
||||
1342 产品-需求列表在某个分支下无法显示所属计划
|
||||
1343 待评审状态用例,批量编辑后,状态会更新为空
|
||||
1344 测试bug,解决bug与激活bug功能,版本下拉,没有根据项目进行过滤。
|
||||
1345 多人任务都完成后没有指派给创建人
|
||||
1347 bug编辑日期可以输入汉字且被保存
|
||||
1348 子任务工时在所有项目页面,工时会统计为双倍
|
||||
1349 测试-用例列表,用例选择多个适用阶段,列表显示错行
|
||||
1350 项目任务列表,高级表格,延期任务,选中,鼠标放置上去,显示异常。
|
||||
|
||||
2017-11-06 9.6.stable
|
||||
完成的需求
|
||||
1988 需求,任务,bug,用例,待办都可以选择看板模式。
|
||||
2004 运维性的项目支持多人任务和子任务功能
|
||||
2012 所有项目 /所有产品页面增加导出功能
|
||||
2033 项目挂起再激活的时候给用户选择是否顺延任务起止时间
|
||||
2035 项目需求可以拖动排序
|
||||
2048 看板增加任务的暂停状态栏显示
|
||||
2108 看板增加显示/隐藏已关闭已取消任务的功能
|
||||
2109 看板增加默认展开/折叠任务选项卡的功能
|
||||
2110 看板增加自定义设置显示颜色的功能
|
||||
2146 迭代,产品区块增加我参与的选项。
|
||||
2160 检查自定义表格的字段
|
||||
2161 管理员可以自定义所有人用的列表的默认布局。
|
||||
2166 产品增加目录管理,方便用户维护产品
|
||||
2167 实现基础的积分机制
|
||||
2169 实现初始积分的计算功能
|
||||
2170 实现积分的实时计算功能
|
||||
2171 将积分功能作为开关
|
||||
2172 积分区分等级积分和消耗积分
|
||||
2173 实现积分的历史记录功能
|
||||
2174 获得积分的时候系统给予一定的提示
|
||||
2175 优化产品和项目的下拉菜单
|
||||
2263 管理员可以将自己的菜单配置作为公共的配置
|
||||
2309 优化看板卡片弹出菜单的位置
|
||||
2311 自定义数据表格增加恢复默认功能
|
||||
2328 禅道中所有列表页面都增加自定义显示字段的功能
|
||||
2332 看板可以按照其他的字段进行分组
|
||||
2414 实现接口的入口
|
||||
2415 实现接口的应用管理
|
||||
2416 实现独立的应用入口
|
||||
2417 实现应用或者webhook的日志管理和查看
|
||||
2418 实现webhook的管理
|
||||
2419 可以自定义哪些事件下面可以触发webhook
|
||||
2423 各个表单的必填项字段可以自定义
|
||||
2425 实现和钉钉的消息通知接口
|
||||
|
||||
2017-09-27 9.5.1
|
||||
2128 编辑需求页面增加对来源备注的编辑功能
|
||||
2224 bug增加激活日期记录功能
|
||||
2300 后台-插件-获取插件显示的插件也显示官方或者第三方
|
||||
2326 增加需求备注字段的搜索功能
|
||||
2327 产品-需求列表页面自定义字段增加对备注字段的支持
|
||||
2361 测试-版本 按照需求分组页面增加用例执行功能
|
||||
2362 统计视图中默认的统计表把表格头部固定
|
||||
2372 需求任务bug用例的复制功能把标题颜色等所有创建页面需要的信息都对应上
|
||||
2376 优化创建任务的时候同名的检查逻辑
|
||||
2378 多分支产品提需求,分支下拉列表增加搜索功能。
|
||||
2382 安装页面在环境检测页面增加对所有需要的php扩展进行检查
|
||||
2383 项目-任务模块显示中的产品按照 所有产品页面的排序顺序显示
|
||||
2395 删除用户过程中传输的是明文密码
|
||||
2396 我的地盘增加参与的测试-版本入口
|
||||
2397 忘记密码页面做安全验证的文件隐藏完整的目录
|
||||
2400 需求导出增加对来源右侧备注字段的支持
|
||||
2407 类似需求的评审,用例创建的时候也增加是否需要评审的功能
|
||||
2412 可以限定某些用户只能编辑自己相关的内容
|
||||
2413 测试-版本 增加对项目访问权限的检查
|
||||
2421 测试-版本增加时间段过滤的选择
|
||||
2422 测试-版本 增加bug类型统计的功能
|
||||
2424 批量创建任务点击同需求按钮把任务名称优先级预计等字段自动填充
|
||||
2427 任务导出增加进度字段的导出
|
||||
|
||||
2017-08-25 9.5.stable
|
||||
3124 取消工时记录的255字数限制
|
||||
3123 导出增加对个数字段的支持
|
||||
@@ -28,7 +255,7 @@
|
||||
2017-06-21 9.3.beta
|
||||
3038 修改loadModel改为单例模式,提升性能
|
||||
3040 增加过滤文件白名单模式
|
||||
3042 修改框架中getCSS和getJS方法,当extensionLevel等于0时,返回的数据不正确
|
||||
3042 修改框架中getCSS和getJS方法,当extensionLevel等于0时,返回的数据不正确
|
||||
3043 修改框架里面createLink的判断有问题的bug。
|
||||
3047 提供集中的参数过滤功能
|
||||
3048 提供基础的文件上传模块
|
||||
|
||||
-205
@@ -1,205 +0,0 @@
|
||||
Z PUBLIC LICENSE 1.2
|
||||
|
||||
许可
|
||||
|
||||
Z PUBLIC LICENSE 由青岛易软天创网络科技有限公司(www.cnezsoft.com)起草,简称ZPL协议。
|
||||
任何人均可使用该协议来发布开源软件,并可对下面协议正文中以下划线标注的空白部分做相应修改,
|
||||
除此之外的任何内容不得做任何修改。青岛易软天创网络科技有限公司拥有对该协议条款的最终解释权。
|
||||
|
||||
前言:
|
||||
|
||||
禅道项目管理软件(以下简称该软件)由 青岛易软天创网络科技有限公司(www.cnezsoft.com)开发(以下简称我)。我依法拥有该软件的所有版权。
|
||||
本着共享开放的角度,我以开放源代码的形式发布该软件。您可以在遵守该协议的前提下使用该软件。
|
||||
自您安装该软件开始,您和我之间的合同关系自动成立。除非您停止使用该软件或与我有签署额外合同,
|
||||
您须认真遵循该授权协议约定的每一条款。
|
||||
|
||||
我的联系方式:
|
||||
联系人:徐先生
|
||||
电话: 4006-8899-23
|
||||
Email: co@cnezsoft.com
|
||||
QQ: 1492153927
|
||||
地址: 青岛开发区武夷山路167号千禧龙花园 9-1-101室
|
||||
|
||||
约定:
|
||||
|
||||
下述条款中所指该软件的标志包括如下方面:
|
||||
|
||||
该软件源代码及文档中关于该软件的版权提示、文字、图片和链接。
|
||||
该软件运行时界面上呈现出来的有关该软件的文字、图片和链接。
|
||||
|
||||
不包括如下方面:
|
||||
|
||||
该软件提供的演示数据中关于该软件的文字、图片和链接。
|
||||
|
||||
一、免责
|
||||
|
||||
该软件是以开放源代码的方式发行,您使用该软件无需任何费用,因此在使用该软件前,您须知晓:
|
||||
|
||||
1.1 我没有对该软件提供任何技术支持的义务,您可联系我购买商业的技术支持。
|
||||
1.2 我对因使用该软件而产生直接或间接的任何问题不负任何责任。
|
||||
1.3 开源不等于免费,开源不等于无版权,开源软件的发展需要您我共同的努力。
|
||||
|
||||
二、自用该软件
|
||||
|
||||
2.1 您个人或您就职的公司(组织)可自由使用该软件,我不对您或您就职公司(组织)的性质做任何限制。
|
||||
2.2 您可以在您个人或您就职公司(组织)任意数量的电脑上运行该软件,我不对电脑的数量做任何限制。
|
||||
2.3 您可以对该软件源代码进行修改以适应您个人或您所在公司(组织)使用的要求,您做的改动无需对外发布。
|
||||
2.4 您个人或您就职公司(组织)使用该软件时,必须保留该软件的所有标志,不得以任何方式隐藏或遮掩任一标志。
|
||||
|
||||
三、为用户定制
|
||||
|
||||
3.1 您可以使用该软件为您的用户部署各种形式的应用,我不对应用的性质做任何限制。
|
||||
3.2 您可以使用该软件为您的用户部署任意数量的应用,我不对应用的数量做任何限制。
|
||||
3.3 您可以对该软件源代码进行修改以适应您的用户的要求,您做的改动无需对外发布。
|
||||
3.4 您对该软件源代码所做的修改可以源代码或二进制的方式提供给您的用户。
|
||||
3.5 您使用该软件为您的任一用户部署的任一应用都必须保留该软件所有的标志。
|
||||
3.6 您使用该软件为您的任一用户部署的任一应用都不得以任何方式隐藏或遮掩该软件任一标志。
|
||||
|
||||
四、提供在线服务
|
||||
|
||||
4.1 您可以使用该软件搭建在线服务,为您的用户提供服务,我不对该服务及该服务用户的性质做任何限制。
|
||||
4.2 您可以使用该软件搭建在线服务,为您的用户提供服务,我不对该服务的用户数量做任何限制。
|
||||
4.3 您可以对该软件源代码进行修改以适应在线服务的要求,您做的改动无需对外发布。
|
||||
4.4 您使用该软件搭建在线服务时,必须以明确的方式告知您的用户该服务是基于该软件搭建的。
|
||||
4.5 您使用该软件搭建在线服务为您的任一用户部署的任一应用必须保留该软件所有的标志。
|
||||
4.6 您使用该软件搭建在线服务为您的任一用户部署的任一应用不得以任何方式隐藏或遮掩该软件任一标志。
|
||||
4.7 您使用该软件搭建在线服务时,不得为您的用户提供去除、隐藏或遮掩该软件任一标志的功能。
|
||||
|
||||
五、无改动发布或集成该软件
|
||||
|
||||
5.1 我欢迎并感谢您将该软件发布在您的个人网站、企业官网或者其他的第三方网站。
|
||||
5.2 我欢迎并感谢您将该软件集成在其他系统中一起发布,比如云服务镜像、操作系统发行版等。
|
||||
5.3 您在发布或者集成该软件的时候,不得对该软件源码做任何改动。
|
||||
5.4 您在发布或者集成该软件的时候,须保留该软件的所有标志。
|
||||
|
||||
六、发布基于该软件的衍生作品
|
||||
|
||||
6.1 我欢迎并感谢您为该软件开发衍生作品。
|
||||
6.2 您开发的衍生作品中涉及到对该软件源代码改动的地方,须遵循如下条款:
|
||||
|
||||
6.2.1 如修改了该软件的源代码,须依据本协议发布修改后的源代码。
|
||||
6.2.2 如修改了该软件的源代码,须保留代码里面该软件原有的所有标志。
|
||||
6.2.3 您可以在代码中追加您自己的标志。
|
||||
6.2.4 您可以对您开发的衍生作品进行收费。
|
||||
6.2.5 第三方的用户可在遵循6.2所有条款下可继续在您开发的衍生作品基础上进行修改并发布。
|
||||
|
||||
6.3 您开发的衍生作品中独立于本软件开发的代码,可以源代码或二进制的方式进行发布,可免费或收费发布。
|
||||
6.4 您开发的衍生作品不得以任何方式去除、隐藏或遮掩该软件的任一标志。
|
||||
|
||||
七、发布基于该软件API的应用
|
||||
|
||||
7.1 我欢迎并感谢您为该软件开发基于API的各种应用,比如客户端软件等。
|
||||
7.2 您基于该软件API机制开发的应用,可以源代码或者二进制的方式进行发布,我对此没有任何限制。
|
||||
7.3 您基于该软件API机制开发的应用,授权协议可以自行约定,我对此没有任何限制。
|
||||
7.4 您基于该软件API机制开发的应用,可以免费或者收费发布,我对此没有任何限制。
|
||||
|
||||
八、授权例外
|
||||
|
||||
如果上述条款无法满足您使用该软件的要求,可联系我签署额外的合同以获得更灵活的授权许可。
|
||||
|
||||
九、合同约束
|
||||
|
||||
9.1 如果您违反了该协议的任一条款,该授权协议将自动终止,我保留通过法律手段追究责任的权利。
|
||||
|
||||
Z PUBLIC LICENSE 1.2
|
||||
|
||||
Authorization
|
||||
|
||||
Z PUBLIC LICENSE, also known as ZPL Agreement, is drafted by QingDao Nature Easy Soft Network Technology Co,LTD. (,www.cnezsoft.com).
|
||||
Anyone can use the agreement to publish open source software, and modify the blank underlined part of the following text of the agreement accordingly.
|
||||
No other text of the agreement shall be changed. QingDao Nature Easy Soft Network Technology Co,LTD has the final authority to interpret the terms of the agreement.
|
||||
|
||||
Preface
|
||||
|
||||
ZenTaoPMS (Hereinafter referred to as "the software") developed by Nature EasySoft Network Tecnology Co.ltd, QingDao, China (www.cnezsoft.com) (hereinafter referred to I). I'm entitled to all copyright of the software.
|
||||
The software is released as open source software. You are authorized to use the software as long as you are in compliance with this agreement.
|
||||
By installation of the software, you agree that a contractual relationship between you and me is automatically established.
|
||||
You are obliged to fully comply with all the terms of this agreement unless you choose to stop using the software or you have signed additional contracts with me.
|
||||
|
||||
My Contact:
|
||||
Contact: Mr. Xu
|
||||
Phone: 4006-8899-23
|
||||
Email: co@cnezsoft.com
|
||||
QQ: 1492153927
|
||||
Address: 9-1-101, 167 Wuyishan Lu, Kai Fa Qu, Qingdao
|
||||
|
||||
We agree:
|
||||
|
||||
Indications of the software include:
|
||||
|
||||
Notes, texts, pictures and links showing copyright attribution of the software in the source code and related documentation.
|
||||
and texts, picture and links on the interface of the software when running.
|
||||
|
||||
Excluding
|
||||
|
||||
texts, picture and links on the interface of the demo versions of the software.
|
||||
|
||||
1. Disclaimer
|
||||
|
||||
The software is an open-source software, so you are authorized to use the software without paying a fee. Before you start to use it, please note:
|
||||
|
||||
1.1 I do not have any obligation to provide technical support for the software. You can contact me to purchase technical support service.
|
||||
1.2 I'm not responsible for any liability caused by your using the software directly or indirectly.
|
||||
1.3 Open source software does not mean it's free of charge, neither does it mean the software does not enjoy copyright.
|
||||
|
||||
2. For personal use
|
||||
|
||||
2.1 You or your company/organization are authorized to use the software for your internal use for both commercial and non-commercial purposes..
|
||||
2.2 You or your company/organization are authorized to run the software on any number of computers.
|
||||
2.3 You or your company/organization are authorized to modify the source code of the software to meet your requirements. You do not need to release the modified codes.
|
||||
2.4 You or your company/organization must keep all the indications of the software when using it. None of the indications can be removed, hidden or obscured in any way.
|
||||
|
||||
3. For customized software
|
||||
|
||||
3.1 You are authorized to use the software to deploy various forms of application for your users in any way you like.
|
||||
3.2 You are authorized to use the software to deploy any number of applications for your users.
|
||||
3.3 You are authorized to modify the source code to meet your user's requirements without releasing the modified codes.
|
||||
3.4 You are authorized to provide the modified codes to your users in either source code form or binary.
|
||||
3.5 You must keep all the indications of the software when providing applications to your users.
|
||||
3.6 None of the indications of the software may be removed, hidden or obscured in any way when you provide applications to your users.
|
||||
|
||||
4. Online service
|
||||
|
||||
4.1 You are authorized to use the software to build your online service for your users in any way you like.
|
||||
4.2 You are authorized to use the software to build your online service for any number of your users.
|
||||
4.3 You are authorized to modify the source codes of the software to meet your user's requirements on online service without releasing the modified codes.
|
||||
4.4 You must notify your users clearly that your service is based on the software when you use it to build your online service.
|
||||
4.5 You must keep all the indications of the software when providing online service to your users.
|
||||
4.6 You must keep all the indications of the software in any application you make for your users. None of the indications can be hidden or obscured in any way.
|
||||
4.7 You are forbidden from assisting your users by providing tools for your users to remove, hide or obscure any indication of the software when you use the software to build your online service.
|
||||
|
||||
5. Publish or integrate the software without modification
|
||||
|
||||
5.1 You are authorized to publish the software on your personal sites, corporate official website or other third-party sites.
|
||||
5.2 You are authorized to integrate the software with other systems, such as cloud virtual machine images, operating system images and so on.
|
||||
5.3 Do not modify the source code of the software when you publish or integrate it.
|
||||
5.4 All indications of the software must be kept the same when you publish or integrate the software.
|
||||
|
||||
6. Publish derived work based on the software
|
||||
|
||||
6.1 You are authorized to develop derived work based on the software.
|
||||
6.2 The modified codes of the software in your derived work must follow the following terms:
|
||||
|
||||
6.2.1 The source codes must be released if you make any modification to the software.
|
||||
6.2.2 All indications of the software must be kept the same.
|
||||
6.2.3 You are entitled to add your indications to the modified codes.
|
||||
6.2.4 You are entitled to charge fees for the derived work you developed based on the software.
|
||||
6.2.5 You agree to authorize third party users to modify and release the derived work in compliance with 6.2.
|
||||
|
||||
6.3 If the codes of the work are independently developed by yourself, You are authorized to release the work in either source code form or binary. You are entitled to charge your users or make it free.
|
||||
6.4 None of the indications of the software can be removed, hidden or obscured in any way in the derived work you developed.
|
||||
|
||||
7. Publish applications based on API of the software
|
||||
|
||||
7.1 You are authorized to develop your applications based on the API of the software, for example, client software.
|
||||
7.2 You are authorized to publish applications you developed based on the API in either source code form or binary.
|
||||
7.3 You are authorized to use your own license to release applications you developed based on the API.
|
||||
7.4 You are entitled to release applications you developed based on the API either free or with a charge.
|
||||
|
||||
8. Exceptions
|
||||
|
||||
If the terms above do not meet your requirements when using the software, please contact me for a more flexible license.
|
||||
|
||||
9. Termination
|
||||
|
||||
9.1 Violation of any of the terms of the agreement will result in immediate termination of this license. I reserve all rights to take legal actions in case of dispute.
|
||||
+102
@@ -0,0 +1,102 @@
|
||||
Z PUBLIC LICENSE 1.2
|
||||
|
||||
许可
|
||||
|
||||
Z PUBLIC LICENSE 由青岛易软天创网络科技有限公司(www.cnezsoft.com)起草,简称ZPL协议。
|
||||
任何人均可使用该协议来发布开源软件,并可对下面协议正文中以下划线标注的空白部分做相应修改,
|
||||
除此之外的任何内容不得做任何修改。青岛易软天创网络科技有限公司拥有对该协议条款的最终解释权。
|
||||
|
||||
前言:
|
||||
|
||||
禅道项目管理软件(以下简称该软件)由 青岛易软天创网络科技有限公司(www.cnezsoft.com)开发(以下简称我)。我依法拥有该软件的所有版权。
|
||||
本着共享开放的角度,我以开放源代码的形式发布该软件。您可以在遵守该协议的前提下使用该软件。
|
||||
自您安装该软件开始,您和我之间的合同关系自动成立。除非您停止使用该软件或与我有签署额外合同,
|
||||
您须认真遵循该授权协议约定的每一条款。
|
||||
|
||||
我的联系方式:
|
||||
联系人:徐先生
|
||||
电话: 4006-8899-23
|
||||
Email: co@cnezsoft.com
|
||||
QQ: 1492153927
|
||||
地址: 青岛开发区武夷山路167号千禧龙花园 9-1-101室
|
||||
|
||||
约定:
|
||||
|
||||
下述条款中所指该软件的标志包括如下方面:
|
||||
|
||||
该软件源代码及文档中关于该软件的版权提示、文字、图片和链接。
|
||||
该软件运行时界面上呈现出来的有关该软件的文字、图片和链接。
|
||||
|
||||
不包括如下方面:
|
||||
|
||||
该软件提供的演示数据中关于该软件的文字、图片和链接。
|
||||
|
||||
一、免责
|
||||
|
||||
该软件是以开放源代码的方式发行,您使用该软件无需任何费用,因此在使用该软件前,您须知晓:
|
||||
|
||||
1.1 我没有对该软件提供任何技术支持的义务,您可联系我购买商业的技术支持。
|
||||
1.2 我对因使用该软件而产生直接或间接的任何问题不负任何责任。
|
||||
1.3 开源不等于免费,开源不等于无版权,开源软件的发展需要您我共同的努力。
|
||||
|
||||
二、自用该软件
|
||||
|
||||
2.1 您个人或您就职的公司(组织)可自由使用该软件,我不对您或您就职公司(组织)的性质做任何限制。
|
||||
2.2 您可以在您个人或您就职公司(组织)任意数量的电脑上运行该软件,我不对电脑的数量做任何限制。
|
||||
2.3 您可以对该软件源代码进行修改以适应您个人或您所在公司(组织)使用的要求,您做的改动无需对外发布。
|
||||
2.4 您个人或您就职公司(组织)使用该软件时,必须保留该软件的所有标志,不得以任何方式隐藏或遮掩任一标志。
|
||||
|
||||
三、为用户定制
|
||||
|
||||
3.1 您可以使用该软件为您的用户部署各种形式的应用,我不对应用的性质做任何限制。
|
||||
3.2 您可以使用该软件为您的用户部署任意数量的应用,我不对应用的数量做任何限制。
|
||||
3.3 您可以对该软件源代码进行修改以适应您的用户的要求,您做的改动无需对外发布。
|
||||
3.4 您对该软件源代码所做的修改可以源代码或二进制的方式提供给您的用户。
|
||||
3.5 您使用该软件为您的任一用户部署的任一应用都必须保留该软件所有的标志。
|
||||
3.6 您使用该软件为您的任一用户部署的任一应用都不得以任何方式隐藏或遮掩该软件任一标志。
|
||||
|
||||
四、提供在线服务
|
||||
|
||||
4.1 您可以使用该软件搭建在线服务,为您的用户提供服务,我不对该服务及该服务用户的性质做任何限制。
|
||||
4.2 您可以使用该软件搭建在线服务,为您的用户提供服务,我不对该服务的用户数量做任何限制。
|
||||
4.3 您可以对该软件源代码进行修改以适应在线服务的要求,您做的改动无需对外发布。
|
||||
4.4 您使用该软件搭建在线服务时,必须以明确的方式告知您的用户该服务是基于该软件搭建的。
|
||||
4.5 您使用该软件搭建在线服务为您的任一用户部署的任一应用必须保留该软件所有的标志。
|
||||
4.6 您使用该软件搭建在线服务为您的任一用户部署的任一应用不得以任何方式隐藏或遮掩该软件任一标志。
|
||||
4.7 您使用该软件搭建在线服务时,不得为您的用户提供去除、隐藏或遮掩该软件任一标志的功能。
|
||||
|
||||
五、无改动发布或集成该软件
|
||||
|
||||
5.1 我欢迎并感谢您将该软件发布在您的个人网站、企业官网或者其他的第三方网站。
|
||||
5.2 我欢迎并感谢您将该软件集成在其他系统中一起发布,比如云服务镜像、操作系统发行版等。
|
||||
5.3 您在发布或者集成该软件的时候,不得对该软件源码做任何改动。
|
||||
5.4 您在发布或者集成该软件的时候,须保留该软件的所有标志。
|
||||
|
||||
六、发布基于该软件的衍生作品
|
||||
|
||||
6.1 我欢迎并感谢您为该软件开发衍生作品。
|
||||
6.2 您开发的衍生作品中涉及到对该软件源代码改动的地方,须遵循如下条款:
|
||||
|
||||
6.2.1 如修改了该软件的源代码,须依据本协议发布修改后的源代码。
|
||||
6.2.2 如修改了该软件的源代码,须保留代码里面该软件原有的所有标志。
|
||||
6.2.3 您可以在代码中追加您自己的标志。
|
||||
6.2.4 您可以对您开发的衍生作品进行收费。
|
||||
6.2.5 第三方的用户可在遵循6.2所有条款下可继续在您开发的衍生作品基础上进行修改并发布。
|
||||
|
||||
6.3 您开发的衍生作品中独立于本软件开发的代码,可以源代码或二进制的方式进行发布,可免费或收费发布。
|
||||
6.4 您开发的衍生作品不得以任何方式去除、隐藏或遮掩该软件的任一标志。
|
||||
|
||||
七、发布基于该软件API的应用
|
||||
|
||||
7.1 我欢迎并感谢您为该软件开发基于API的各种应用,比如客户端软件等。
|
||||
7.2 您基于该软件API机制开发的应用,可以源代码或者二进制的方式进行发布,我对此没有任何限制。
|
||||
7.3 您基于该软件API机制开发的应用,授权协议可以自行约定,我对此没有任何限制。
|
||||
7.4 您基于该软件API机制开发的应用,可以免费或者收费发布,我对此没有任何限制。
|
||||
|
||||
八、授权例外
|
||||
|
||||
如果上述条款无法满足您使用该软件的要求,可联系我签署额外的合同以获得更灵活的授权许可。
|
||||
|
||||
九、合同约束
|
||||
|
||||
9.1 如果您违反了该协议的任一条款,该授权协议将自动终止,我保留通过法律手段追究责任的权利。
|
||||
@@ -0,0 +1,99 @@
|
||||
Z PUBLIC LICENSE 1.2
|
||||
|
||||
Authorization
|
||||
|
||||
Z PUBLIC LICENSE, also known as ZPL Agreement, is drafted by QingDao Nature Easy Soft Network Technology Co,LTD. (,www.cnezsoft.com).
|
||||
Anyone can use the agreement to publish open source software, and modify the blank underlined part of the following text of the agreement accordingly.
|
||||
No other text of the agreement shall be changed. QingDao Nature Easy Soft Network Technology Co,LTD has the final authority to interpret the terms of the agreement.
|
||||
|
||||
Preface
|
||||
|
||||
ZenTaoPMS (Hereinafter referred to as "the software") developed by Nature EasySoft Network Tecnology Co.ltd, QingDao, China (www.cnezsoft.com) (hereinafter referred to I). I'm entitled to all copyright of the software.
|
||||
The software is released as open source software. You are authorized to use the software as long as you are in compliance with this agreement.
|
||||
By installation of the software, you agree that a contractual relationship between you and me is automatically established.
|
||||
You are obliged to fully comply with all the terms of this agreement unless you choose to stop using the software or you have signed additional contracts with me.
|
||||
|
||||
My Contact:
|
||||
Email: co@easysoft.ltd
|
||||
Site: http://www.zentao.pm
|
||||
|
||||
We agree:
|
||||
|
||||
Indications of the software include:
|
||||
|
||||
Notes, texts, pictures and links showing copyright attribution of the software in the source code and related documentation.
|
||||
and texts, picture and links on the interface of the software when running.
|
||||
|
||||
Excluding
|
||||
|
||||
texts, picture and links on the interface of the demo versions of the software.
|
||||
|
||||
1. Disclaimer
|
||||
|
||||
The software is an open-source software, so you are authorized to use the software without paying a fee. Before you start to use it, please note:
|
||||
|
||||
1.1 I do not have any obligation to provide technical support for the software. You can contact me to purchase technical support service.
|
||||
1.2 I'm not responsible for any liability caused by your using the software directly or indirectly.
|
||||
1.3 Open source software does not mean it's free of charge, neither does it mean the software does not enjoy copyright.
|
||||
|
||||
2. For personal use
|
||||
|
||||
2.1 You or your company/organization are authorized to use the software for your internal use for both commercial and non-commercial purposes..
|
||||
2.2 You or your company/organization are authorized to run the software on any number of computers.
|
||||
2.3 You or your company/organization are authorized to modify the source code of the software to meet your requirements. You do not need to release the modified codes.
|
||||
2.4 You or your company/organization must keep all the indications of the software when using it. None of the indications can be removed, hidden or obscured in any way.
|
||||
|
||||
3. For customized software
|
||||
|
||||
3.1 You are authorized to use the software to deploy various forms of application for your users in any way you like.
|
||||
3.2 You are authorized to use the software to deploy any number of applications for your users.
|
||||
3.3 You are authorized to modify the source code to meet your user's requirements without releasing the modified codes.
|
||||
3.4 You are authorized to provide the modified codes to your users in either source code form or binary.
|
||||
3.5 You must keep all the indications of the software when providing applications to your users.
|
||||
3.6 None of the indications of the software may be removed, hidden or obscured in any way when you provide applications to your users.
|
||||
|
||||
4. Online service
|
||||
|
||||
4.1 You are authorized to use the software to build your online service for your users in any way you like.
|
||||
4.2 You are authorized to use the software to build your online service for any number of your users.
|
||||
4.3 You are authorized to modify the source codes of the software to meet your user's requirements on online service without releasing the modified codes.
|
||||
4.4 You must notify your users clearly that your service is based on the software when you use it to build your online service.
|
||||
4.5 You must keep all the indications of the software when providing online service to your users.
|
||||
4.6 You must keep all the indications of the software in any application you make for your users. None of the indications can be hidden or obscured in any way.
|
||||
4.7 You are forbidden from assisting your users by providing tools for your users to remove, hide or obscure any indication of the software when you use the software to build your online service.
|
||||
|
||||
5. Publish or integrate the software without modification
|
||||
|
||||
5.1 You are authorized to publish the software on your personal sites, corporate official website or other third-party sites.
|
||||
5.2 You are authorized to integrate the software with other systems, such as cloud virtual machine images, operating system images and so on.
|
||||
5.3 Do not modify the source code of the software when you publish or integrate it.
|
||||
5.4 All indications of the software must be kept the same when you publish or integrate the software.
|
||||
|
||||
6. Publish derived work based on the software
|
||||
|
||||
6.1 You are authorized to develop derived work based on the software.
|
||||
6.2 The modified codes of the software in your derived work must follow the following terms:
|
||||
|
||||
6.2.1 The source codes must be released if you make any modification to the software.
|
||||
6.2.2 All indications of the software must be kept the same.
|
||||
6.2.3 You are entitled to add your indications to the modified codes.
|
||||
6.2.4 You are entitled to charge fees for the derived work you developed based on the software.
|
||||
6.2.5 You agree to authorize third party users to modify and release the derived work in compliance with 6.2.
|
||||
|
||||
6.3 If the codes of the work are independently developed by yourself, You are authorized to release the work in either source code form or binary. You are entitled to charge your users or make it free.
|
||||
6.4 None of the indications of the software can be removed, hidden or obscured in any way in the derived work you developed.
|
||||
|
||||
7. Publish applications based on API of the software
|
||||
|
||||
7.1 You are authorized to develop your applications based on the API of the software, for example, client software.
|
||||
7.2 You are authorized to publish applications you developed based on the API in either source code form or binary.
|
||||
7.3 You are authorized to use your own license to release applications you developed based on the API.
|
||||
7.4 You are entitled to release applications you developed based on the API either free or with a charge.
|
||||
|
||||
8. Exceptions
|
||||
|
||||
If the terms above do not meet your requirements when using the software, please contact me for a more flexible license.
|
||||
|
||||
9. Termination
|
||||
|
||||
9.1 Violation of any of the terms of the agreement will result in immediate termination of this license. I reserve all rights to take legal actions in case of dispute.
|
||||
@@ -186,6 +186,7 @@ class baseHelper
|
||||
*/
|
||||
static public function import($file)
|
||||
{
|
||||
$file = realpath($file);
|
||||
if(!is_file($file)) return false;
|
||||
|
||||
static $includedFiles = array();
|
||||
@@ -214,7 +215,7 @@ class baseHelper
|
||||
{
|
||||
if(!function_exists('get_magic_quotes_gpc') or !get_magic_quotes_gpc())
|
||||
{
|
||||
foreach ($idList as $key=>$value) $idList[$key] = addslashes($value);
|
||||
foreach($idList as $key=>$value) $idList[$key] = addslashes($value);
|
||||
}
|
||||
return "IN ('" . join("','", $idList) . "')";
|
||||
}
|
||||
|
||||
@@ -1485,8 +1485,8 @@ class baseRouter
|
||||
if(!method_exists($tmpModelClass, $method)) continue;
|
||||
$methodRelfection = new reflectionMethod($tmpModelClass, $method);
|
||||
$definedFile = $methodRelfection->getFileName();
|
||||
$startLine = $methodRelfection->getStartLine() . ' ';
|
||||
$endLine = $methodRelfection->getEndLine() . ' ';
|
||||
$startLine = $methodRelfection->getStartLine();
|
||||
$endLine = $methodRelfection->getEndLine();
|
||||
|
||||
/* 将Hook脚本和老的代码合并在一起,并替换原来的定义。Merge hook codes with old codes and replace back. */
|
||||
$oldCodes = $definedFile == $tmpModelFile ? $mergedModelCodes : $mainModelCodes;
|
||||
@@ -2184,6 +2184,7 @@ class baseRouter
|
||||
{
|
||||
/* 设置错误信息(Set the error info) */
|
||||
$message = htmlspecialchars($message);
|
||||
if(preg_match('/[^\x00-\x80]/', $message)) $message = helper::convertEncoding($message, 'gbk');
|
||||
$log = "ERROR: $message in $file on line $line";
|
||||
if(isset($_SERVER['SCRIPT_URI'])) $log .= ", request: $_SERVER[SCRIPT_URI]";;
|
||||
$trace = debug_backtrace();
|
||||
@@ -2236,6 +2237,7 @@ class baseRouter
|
||||
* 设置错误信息。
|
||||
* Set the error info.
|
||||
**/
|
||||
if(preg_match('/[^\x00-\x80]/', $message)) $message = helper::convertEncoding($message, 'gbk');
|
||||
$errorLog = "\n" . date('H:i:s') . " $message in <strong>$file</strong> on line <strong>$line</strong> ";
|
||||
$errorLog .= "when visiting <strong>" . htmlspecialchars($this->getURI()) . "</strong>\n";
|
||||
|
||||
|
||||
+32
-11
@@ -5,7 +5,7 @@
|
||||
*
|
||||
* The author disclaims copyright to this source code. In place of
|
||||
* a legal notice, here is a blessing:
|
||||
*
|
||||
*
|
||||
* May you do good and not evil.
|
||||
* May you find forgiveness for yourself and forgive others.
|
||||
* May you share freely, never taking more than you give.
|
||||
@@ -43,7 +43,7 @@ class helper extends baseHelper
|
||||
{
|
||||
if(isset($_GET[$config->viewVar]))
|
||||
{
|
||||
$viewType = $_GET[$config->viewVar];
|
||||
$viewType = $_GET[$config->viewVar];
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -59,9 +59,9 @@ class helper extends baseHelper
|
||||
|
||||
/**
|
||||
* Encode json for $.parseJSON
|
||||
*
|
||||
* @param array $data
|
||||
* @param int $options
|
||||
*
|
||||
* @param array $data
|
||||
* @param int $options
|
||||
* @static
|
||||
* @access public
|
||||
* @return string
|
||||
@@ -78,10 +78,10 @@ class helper extends baseHelper
|
||||
|
||||
/**
|
||||
* Convert encoding.
|
||||
*
|
||||
* @param string $string
|
||||
* @param string $fromEncoding
|
||||
* @param string $toEncoding
|
||||
*
|
||||
* @param string $string
|
||||
* @param string $fromEncoding
|
||||
* @param string $toEncoding
|
||||
* @static
|
||||
* @access public
|
||||
* @return string
|
||||
@@ -111,12 +111,33 @@ class helper extends baseHelper
|
||||
|
||||
return $string;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculate two working days.
|
||||
*
|
||||
* @param string $begin
|
||||
* @param string $end
|
||||
*
|
||||
* @return bool|float
|
||||
*/
|
||||
static public function workDays($begin, $end)
|
||||
{
|
||||
$begin = strtotime($begin);
|
||||
$end = strtotime($end);
|
||||
if($end < $begin) return false;
|
||||
|
||||
$double = floor(($end - $begin) / (7 * 24 * 3600));
|
||||
$begin = date('w', $begin);
|
||||
$end = date('w', $end);
|
||||
$end = $begin > $end ? $end + 5 : $end;
|
||||
return $double * 5 + $end - $begin;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查是否是onlybody模式。
|
||||
* Check exist onlybody param.
|
||||
*
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
@@ -140,4 +161,4 @@ function formatTime($time, $format = '')
|
||||
if(trim($time) == '') return ;
|
||||
if($format) return date($format, strtotime($time));
|
||||
return trim($time);
|
||||
}
|
||||
}
|
||||
+93
-20
@@ -686,7 +686,6 @@ class baseDAO
|
||||
{
|
||||
$sql = $this->processSQL();
|
||||
}
|
||||
$key = md5($sql);
|
||||
|
||||
try
|
||||
{
|
||||
@@ -695,21 +694,10 @@ class baseDAO
|
||||
|
||||
if($this->slaveDBH and $method == 'select')
|
||||
{
|
||||
if(isset(dao::$cache[$key])) return dao::$cache[$key];
|
||||
$result = $this->slaveDBH->query($sql);
|
||||
dao::$cache[$key] = $result;
|
||||
return $result;
|
||||
return $this->slaveDBH->query($sql);
|
||||
}
|
||||
else
|
||||
{
|
||||
if($this->method == 'select')
|
||||
{
|
||||
if(isset(dao::$cache[$key])) return dao::$cache[$key];
|
||||
$result = $this->slaveDBH->query($sql);
|
||||
dao::$cache[$key] = $result;
|
||||
return $result;
|
||||
}
|
||||
|
||||
return $this->dbh->query($sql);
|
||||
}
|
||||
}
|
||||
@@ -769,6 +757,7 @@ class baseDAO
|
||||
|
||||
try
|
||||
{
|
||||
if($this->table) unset(dao::$cache[$this->table]);
|
||||
$this->reset();
|
||||
return $this->dbh->exec($sql);
|
||||
}
|
||||
@@ -791,10 +780,28 @@ class baseDAO
|
||||
*/
|
||||
public function fetch($field = '')
|
||||
{
|
||||
if(empty($field)) return $this->query()->fetch();
|
||||
$sql = $this->processSQL();
|
||||
$table = $this->table;
|
||||
$key = 'fetch-' . md5($sql . $field);
|
||||
if(isset(dao::$cache[$table][$key]))
|
||||
{
|
||||
if(empty($field)) return $this->getRow(dao::$cache[$table][$key]);
|
||||
|
||||
$result = dao::$cache[$table][$key];
|
||||
return $result ? $result->$field : '';
|
||||
}
|
||||
|
||||
if(empty($field))
|
||||
{
|
||||
$data = $this->query()->fetch();
|
||||
dao::$cache[$table][$key] = $data;
|
||||
return $this->getRow($data);
|
||||
}
|
||||
|
||||
$this->setFields($field);
|
||||
$result = $this->query()->fetch(PDO::FETCH_OBJ);
|
||||
if($result) return $result->$field;
|
||||
dao::$cache[$table][$key] = $this->getRow($result);
|
||||
return $result ? $result->$field : '';
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -808,10 +815,35 @@ class baseDAO
|
||||
*/
|
||||
public function fetchAll($keyField = '')
|
||||
{
|
||||
$sql = $this->processSQL();
|
||||
$table = $this->table;
|
||||
$key = 'fetchAll-' . md5($sql . $keyField);
|
||||
if(isset(dao::$cache[$table][$key]))
|
||||
{
|
||||
$rows = dao::$cache[$table][$key];
|
||||
$result = array();
|
||||
foreach($rows as $i => $row) $result[$i] = $this->getRow($row);
|
||||
return $result;
|
||||
}
|
||||
|
||||
$stmt = $this->query();
|
||||
if(empty($keyField)) return $stmt->fetchAll();
|
||||
dao::$cache[$table][$key] = array();
|
||||
if(empty($keyField))
|
||||
{
|
||||
$rows = $stmt->fetchAll();
|
||||
$result = array();
|
||||
dao::$cache[$table][$key] = $rows;
|
||||
foreach($rows as $i => $row) $result[$i] = $this->getRow($row);
|
||||
return $result;
|
||||
}
|
||||
|
||||
$rows = array();
|
||||
while($row = $stmt->fetch()) $rows[$row->$keyField] = $row;
|
||||
while($row = $stmt->fetch())
|
||||
{
|
||||
dao::$cache[$table][$key][$row->$keyField] = $row;
|
||||
$rows[$row->$keyField] = $this->getRow($row);
|
||||
}
|
||||
|
||||
return $rows;
|
||||
}
|
||||
|
||||
@@ -826,12 +858,27 @@ class baseDAO
|
||||
*/
|
||||
public function fetchGroup($groupField, $keyField = '')
|
||||
{
|
||||
$sql = $this->processSQL();
|
||||
$table = $this->table;
|
||||
$key = 'fetchGroup-' . md5($sql . $groupField . $keyField);
|
||||
if(isset(dao::$cache[$table][$key]))
|
||||
{
|
||||
$result = array();
|
||||
$groupRows = dao::$cache[$table][$key];
|
||||
foreach($groupRows as $groupField => $rows)
|
||||
{
|
||||
foreach($rows as $keyField => $row) $result[$groupField][$keyField] = $this->getRow($row);
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
$stmt = $this->query();
|
||||
$rows = array();
|
||||
while($row = $stmt->fetch())
|
||||
{
|
||||
empty($keyField) ? $rows[$row->$groupField][] = $row : $rows[$row->$groupField][$row->$keyField] = $row;
|
||||
empty($keyField) ? $rows[$row->$groupField][] = $row : $rows[$row->$groupField][$row->$keyField] = $this->getRow($row);
|
||||
}
|
||||
dao::$cache[$table][$key] = $rows;
|
||||
return $rows;
|
||||
}
|
||||
|
||||
@@ -852,6 +899,11 @@ class baseDAO
|
||||
$keyField = trim($keyField, '`');
|
||||
$valueField = trim($valueField, '`');
|
||||
|
||||
$sql = $this->processSQL();
|
||||
$table = $this->table;
|
||||
$key = 'fetchPairs-' . md5($sql . $keyField . $valueField);
|
||||
if(isset(dao::$cache[$table][$key])) return dao::$cache[$table][$key];
|
||||
|
||||
$pairs = array();
|
||||
$ready = false;
|
||||
$stmt = $this->query();
|
||||
@@ -870,6 +922,8 @@ class baseDAO
|
||||
|
||||
$pairs[$row[$keyField]] = $row[$valueField];
|
||||
}
|
||||
|
||||
dao::$cache[$table][$key] = $pairs;
|
||||
return $pairs;
|
||||
}
|
||||
|
||||
@@ -885,6 +939,20 @@ class baseDAO
|
||||
return $this->dbh->lastInsertID();
|
||||
}
|
||||
|
||||
/**
|
||||
* 重新生成数据。
|
||||
* Get row by data.
|
||||
*
|
||||
* @param array/object $data
|
||||
* @access public
|
||||
* @return array/object
|
||||
*/
|
||||
public function getRow($data)
|
||||
{
|
||||
if(!is_object($data)) return $data;
|
||||
return json_decode(json_encode($data));
|
||||
}
|
||||
|
||||
//-------------------- 魔术方法(Magic methods) --------------------//
|
||||
|
||||
/**
|
||||
@@ -907,6 +975,7 @@ class baseDAO
|
||||
if(strpos($funcName, 'findby') !== false)
|
||||
{
|
||||
$this->setMode('magic');
|
||||
$this->setFields('');
|
||||
$field = str_replace('findby', '', $funcName);
|
||||
if(count($funcArgs) == 1)
|
||||
{
|
||||
@@ -985,7 +1054,7 @@ class baseDAO
|
||||
global $lang, $config, $app;
|
||||
if(isset($config->db->prefix))
|
||||
{
|
||||
$table = strtolower(str_replace(array($config->db->prefix, '`'), '', $this->table));
|
||||
$table = strtolower(str_replace(array($config->db->prefix, '`'), '', $this->table));
|
||||
}
|
||||
elseif(strpos($this->table, '_') !== false)
|
||||
{
|
||||
@@ -1287,6 +1356,10 @@ class baseDAO
|
||||
{
|
||||
$field['rule'] = 'date';
|
||||
}
|
||||
elseif($type == 'datetime')
|
||||
{
|
||||
$field['rule'] = 'datetime';
|
||||
}
|
||||
else
|
||||
{
|
||||
$field['rule'] = 'skip';
|
||||
@@ -1702,7 +1775,7 @@ class baseSQL
|
||||
}
|
||||
|
||||
if(!$this->inMark) $this->sql .= ' ' . DAO::WHERE ." $condition ";
|
||||
if($this->inMark) $this->sql .= " $condition ";
|
||||
if($this->inMark) $this->sql .= " $condition ";
|
||||
return $this;
|
||||
}
|
||||
|
||||
|
||||
@@ -262,12 +262,31 @@ class baseValidater
|
||||
*/
|
||||
public static function checkDate($date)
|
||||
{
|
||||
if(empty($date)) return true;
|
||||
if($date == '0000-00-00') return true;
|
||||
$stamp = strtotime($date);
|
||||
if(!is_numeric($stamp)) return false;
|
||||
return checkdate(date('m', $stamp), date('d', $stamp), date('Y', $stamp));
|
||||
}
|
||||
|
||||
/**
|
||||
* Check datetime.
|
||||
*
|
||||
* @param string $datetime
|
||||
* @static
|
||||
* @access public
|
||||
* @return bool
|
||||
*/
|
||||
public static function checkDatetime($datetime)
|
||||
{
|
||||
if(empty($datetime)) return true;
|
||||
if($datetime == '0000-00-00') return true;
|
||||
if($datetime == '0000-00-00 00:00:00') return true;
|
||||
$stamp = strtotime($datetime);
|
||||
if(!is_numeric($stamp)) return false;
|
||||
return checkdate(date('m', $stamp), date('d', $stamp), date('Y', $stamp));
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查正则表达式。
|
||||
* REG checking.
|
||||
|
||||
@@ -22,7 +22,7 @@ class dao extends baseDAO
|
||||
{
|
||||
public function exec($sql = '')
|
||||
{
|
||||
if(isset($_SESSION['tutorialMode']) and $_SESSION['tutorialMode']) die(js::alert($this->lang->error->tutorialData));
|
||||
if(isset($_SESSION['tutorialMode']) and $_SESSION['tutorialMode']) die();
|
||||
return parent::exec($sql);
|
||||
}
|
||||
|
||||
|
||||
@@ -195,7 +195,7 @@ class date
|
||||
public static function getThisMonth()
|
||||
{
|
||||
$begin = date('Y-m') . '-01 00:00:00';
|
||||
$end = date('Y-m', strtotime('next month')) . '-00 23:59:59';
|
||||
$end = date('Y-m-d 23:59:59', strtotime("$begin +1 month -1 day"));
|
||||
return array('begin' => $begin, 'end' => $end);
|
||||
}
|
||||
|
||||
@@ -208,7 +208,7 @@ class date
|
||||
public static function getLastMonth()
|
||||
{
|
||||
$begin = date('Y-m', strtotime('last month', strtotime(date('Y-m',time()) . '-01 00:00:01'))) . '-01 00:00:00';
|
||||
$end = date('Y-m', strtotime('this month')) . '-00 23:59:59';
|
||||
$end = date('Y-m-d 23:59:59', strtotime(date('Y-m-01') . ' -1 day'));
|
||||
return array('begin' => $begin, 'end' => $end);
|
||||
}
|
||||
|
||||
|
||||
@@ -176,6 +176,7 @@ class ztcloud
|
||||
public function clearAllRecipients()
|
||||
{
|
||||
$this->toList = '';
|
||||
$this->ccList = '';
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -19,5 +19,7 @@ $config->action->objectNameFields['module'] = 'name';
|
||||
$config->action->objectNameFields['testsuite'] = 'name';
|
||||
$config->action->objectNameFields['caselib'] = 'name';
|
||||
$config->action->objectNameFields['testreport'] = 'title';
|
||||
$config->action->objectNameFields['entry'] = 'name';
|
||||
$config->action->objectNameFields['webhook'] = 'name';
|
||||
|
||||
$config->action->commonImgSize = 870;
|
||||
|
||||
@@ -104,6 +104,20 @@ class action extends control
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Comment.
|
||||
*
|
||||
* @param string $objectType
|
||||
* @param int $objectID
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function comment($objectType, $objectID)
|
||||
{
|
||||
$actionID = $this->action->create($objectType, $objectID, 'Commented', $this->post->comment);
|
||||
die(js::reload('parent'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Edit comment of a action.
|
||||
*
|
||||
|
||||
+46
-38
@@ -12,10 +12,10 @@
|
||||
$lang->action->common = 'Log';
|
||||
$lang->action->product = $lang->productCommon;
|
||||
$lang->action->project = $lang->projectCommon;
|
||||
$lang->action->objectType = 'Object';
|
||||
$lang->action->objectType = 'Object Type';
|
||||
$lang->action->objectID = 'ID';
|
||||
$lang->action->objectName = 'Name';
|
||||
$lang->action->actor = 'Operated by';
|
||||
$lang->action->objectName = 'Object Name';
|
||||
$lang->action->actor = 'Operator';
|
||||
$lang->action->action = 'Action';
|
||||
$lang->action->actionID = 'Action ID';
|
||||
$lang->action->date = 'Date';
|
||||
@@ -24,17 +24,18 @@ $lang->action->trash = 'Recycle';
|
||||
$lang->action->undelete = 'Restore';
|
||||
$lang->action->hideOne = 'Hide';
|
||||
$lang->action->hideAll = 'Hide All';
|
||||
$lang->action->editComment = 'Edit Note';
|
||||
$lang->action->editComment = 'Edit';
|
||||
$lang->action->comment = 'Comment';
|
||||
|
||||
$lang->action->trashTips = 'Note: The action of Delete in ZenTao is logic.';
|
||||
$lang->action->trashTips = 'Note: All Deletion in ZenTao are logical.';
|
||||
$lang->action->textDiff = 'Text Format';
|
||||
$lang->action->original = 'Original Format';
|
||||
$lang->action->confirmHideAll = 'Do you want to hide all the records?';
|
||||
$lang->action->needEdit = '%s you want to restore has already existed. Please edit it.';
|
||||
$lang->action->needEdit = '%s you want to restore exists. Please edit it.';
|
||||
$lang->action->historyEdit = 'The history editor cannot be empty.';
|
||||
|
||||
$lang->action->history = new stdclass();
|
||||
$lang->action->history->action = 'Bound action';
|
||||
$lang->action->history->action = 'Link';
|
||||
$lang->action->history->field = 'Field';
|
||||
$lang->action->history->old = 'Old value';
|
||||
$lang->action->history->new = 'New value';
|
||||
@@ -43,11 +44,11 @@ $lang->action->history->diff = 'Diff';
|
||||
$lang->action->dynamic = new stdclass();
|
||||
$lang->action->dynamic->today = 'Today';
|
||||
$lang->action->dynamic->yesterday = 'Yesterday';
|
||||
$lang->action->dynamic->twoDaysAgo = 'Two Days Ago';
|
||||
$lang->action->dynamic->thisWeek = 'This Week';
|
||||
$lang->action->dynamic->lastWeek = 'Last Week';
|
||||
$lang->action->dynamic->thisMonth = 'This Month';
|
||||
$lang->action->dynamic->lastMonth = 'Last Month';
|
||||
$lang->action->dynamic->twoDaysAgo = 'TwoDaysAgo';
|
||||
$lang->action->dynamic->thisWeek = 'ThisWeek';
|
||||
$lang->action->dynamic->lastWeek = 'LastWeek';
|
||||
$lang->action->dynamic->thisMonth = 'ThisMonth';
|
||||
$lang->action->dynamic->lastMonth = 'LastMonth';
|
||||
$lang->action->dynamic->all = 'All';
|
||||
$lang->action->dynamic->hidden = 'Hidden';
|
||||
$lang->action->dynamic->search = 'Search';
|
||||
@@ -63,16 +64,18 @@ $lang->action->objectTypes['bug'] = 'Bug';
|
||||
$lang->action->objectTypes['case'] = 'Case';
|
||||
$lang->action->objectTypes['caseresult'] = 'Case Result';
|
||||
$lang->action->objectTypes['stepresult'] = 'Case Steps';
|
||||
$lang->action->objectTypes['testtask'] = 'Test Task';
|
||||
$lang->action->objectTypes['testtask'] = 'Test Build';
|
||||
$lang->action->objectTypes['user'] = 'User';
|
||||
$lang->action->objectTypes['doc'] = 'Document';
|
||||
$lang->action->objectTypes['doc'] = 'Doc';
|
||||
$lang->action->objectTypes['doclib'] = 'Doc Lib';
|
||||
$lang->action->objectTypes['todo'] = 'To-Dos';
|
||||
$lang->action->objectTypes['todo'] = 'Todo';
|
||||
$lang->action->objectTypes['branch'] = 'Branch';
|
||||
$lang->action->objectTypes['module'] = 'Module';
|
||||
$lang->action->objectTypes['testsuite'] = 'Suite';
|
||||
$lang->action->objectTypes['caselib'] = 'Library';
|
||||
$lang->action->objectTypes['testreport'] = 'Report';
|
||||
$lang->action->objectTypes['entry'] = 'Entry';
|
||||
$lang->action->objectTypes['webhook'] = 'Webhook';
|
||||
|
||||
/* 用来描述操作历史记录。*/
|
||||
$lang->action->desc = new stdclass();
|
||||
@@ -94,26 +97,27 @@ $lang->action->desc->commented = '$date, added by <strong>$actor</strong>.'
|
||||
$lang->action->desc->activated = '$date, activated by <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->blocked = '$date, blocked by <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->moved = '$date, moved by <strong>$actor</strong> , which was "$extra".' . "\n";
|
||||
$lang->action->desc->confirmed = '$date, <strong>$actor</strong> confirmed the change of Story. The latest version is <strong>#$extra</strong>.' . "\n";
|
||||
$lang->action->desc->caseconfirmed = '$date, <strong>$actor</strong> confirmed the change of Case. The latest version is <strong>#$extra</strong>' . "\n";
|
||||
$lang->action->desc->confirmed = '$date, <strong>$actor</strong> confirmed the story change. The latest build is <strong>#$extra</strong>.' . "\n";
|
||||
$lang->action->desc->caseconfirmed = '$date, <strong>$actor</strong> confirmed the case change. The latest build is <strong>#$extra</strong>' . "\n";
|
||||
$lang->action->desc->bugconfirmed = '$date, <strong>$actor</strong> confirmed Bug.' . "\n";
|
||||
$lang->action->desc->frombug = '$date, transformed from <strong>$actor</strong> Bug whose ID was <strong>$extra</strong>.';
|
||||
$lang->action->desc->frombug = '$date, converted from <strong>$actor</strong>. Its ID was <strong>$extra</strong>.';
|
||||
$lang->action->desc->started = '$date, started by <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->restarted = '$date, continued by <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->delayed = '$date, delayde by <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->delayed = '$date, postponed by <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->suspended = '$date, suspended by <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->recordestimate = '$date, man-hour recorded by <strong>$actor</strong> and it consumed <strong>$extra</strong> hours.';
|
||||
$lang->action->desc->editestimate = '$date, <strong>$actor</strong> edited man-hour.';
|
||||
$lang->action->desc->deleteestimate = '$date, <strong>$actor</strong> delete man-hour.';
|
||||
$lang->action->desc->recordestimate = '$date, recorded by <strong>$actor</strong> and it consumed <strong>$extra</strong> hours.';
|
||||
$lang->action->desc->editestimate = '$date, <strong>$actor</strong> edited Hour.';
|
||||
$lang->action->desc->deleteestimate = '$date, <strong>$actor</strong> deleted Hour.';
|
||||
$lang->action->desc->canceled = '$date, cancelled by <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->svncommited = '$date, submitted by <strong>$actor</strong> and the version is <strong>#$extra</strong>.' . "\n";
|
||||
$lang->action->desc->gitcommited = '$date, submitted by <strong>$actor</strong> and the version is <strong>#$extra</strong>.' . "\n";
|
||||
$lang->action->desc->svncommited = '$date, <strong>$actor</strong> committed and the build is <strong>#$extra</strong>.' . "\n";
|
||||
$lang->action->desc->gitcommited = '$date, <strong>$actor</strong> committed and the build is <strong>#$extra</strong>.' . "\n";
|
||||
$lang->action->desc->finished = '$date, finished by <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->paused = '$date, paused by <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->diff1 = '<strong><i>%s</i></strong> has been changed. Its value was "%s" and the new value is "%s".<br />' . "\n";
|
||||
$lang->action->desc->verified = '$date, verified by <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->diff1 = '<strong><i>%s</i></strong> has been changed. It was "%s" and it is "%s".<br />' . "\n";
|
||||
$lang->action->desc->diff2 = '<strong><i>%s</i></strong> has been changed. The difference is ' . "\n" . "<blockquote>%s</blockquote>" . "\n<div class='hidden'>%s</div>";
|
||||
$lang->action->desc->diff3 = 'File Name %s was changed to %s .' . "\n";
|
||||
$lang->action->desc->linked2bug = '$date Link to build <strong>$extra</strong> by <strong>$actor</strong>';
|
||||
$lang->action->desc->linked2bug = '$date Linked to <strong>$extra</strong> by <strong>$actor</strong>';
|
||||
|
||||
/* 关联用例和移除用例时的历史操作记录。*/
|
||||
$lang->action->desc->linkrelatedcase = '$date, <strong>$actor</strong> linked relevant use case <strong>$extra</strong>.' . "\n";
|
||||
@@ -128,9 +132,9 @@ $lang->action->label->edited = 'Edited';
|
||||
$lang->action->label->assigned = 'Assigned';
|
||||
$lang->action->label->closed = 'Closed';
|
||||
$lang->action->label->deleted = 'Deleted';
|
||||
$lang->action->label->deletedfile = 'Deleted File';
|
||||
$lang->action->label->editfile = 'Edit File';
|
||||
$lang->action->label->erased = 'Ereased';
|
||||
$lang->action->label->deletedfile = 'Deleted';
|
||||
$lang->action->label->editfile = 'Edit';
|
||||
$lang->action->label->erased = 'Erased';
|
||||
$lang->action->label->undeleted = 'Restored';
|
||||
$lang->action->label->hidden = 'Hidden';
|
||||
$lang->action->label->commented = 'Commented';
|
||||
@@ -139,7 +143,7 @@ $lang->action->label->blocked = 'Blocked';
|
||||
$lang->action->label->resolved = 'Resolved';
|
||||
$lang->action->label->reviewed = 'Reviewed';
|
||||
$lang->action->label->moved = 'Moved';
|
||||
$lang->action->label->confirmed = 'Confirm a Story, ';
|
||||
$lang->action->label->confirmed = 'Confirm a Story';
|
||||
$lang->action->label->bugconfirmed = 'Confirmed';
|
||||
$lang->action->label->tostory = 'Convert to Story';
|
||||
$lang->action->label->frombug = 'Converted from Bug';
|
||||
@@ -164,18 +168,19 @@ $lang->action->label->linkrelatedstory = "Link to Story";
|
||||
$lang->action->label->unlinkrelatedstory = "Unlink";
|
||||
$lang->action->label->subdividestory = "Decompose Story";
|
||||
$lang->action->label->unlinkchildstory = "Unlink";
|
||||
$lang->action->label->started = 'Initiated';
|
||||
$lang->action->label->started = 'Started';
|
||||
$lang->action->label->restarted = 'Continued';
|
||||
$lang->action->label->recordestimate = 'Recorded Man-Hour';
|
||||
$lang->action->label->editestimate = 'Edited Man-Hour';
|
||||
$lang->action->label->recordestimate = 'Recorded';
|
||||
$lang->action->label->editestimate = 'Edited';
|
||||
$lang->action->label->canceled = 'Cancelled';
|
||||
$lang->action->label->finished = 'Finished';
|
||||
$lang->action->label->paused = 'Paused';
|
||||
$lang->action->label->verified = 'Verified';
|
||||
$lang->action->label->delayed = 'Delayed';
|
||||
$lang->action->label->suspended = 'Suspended';
|
||||
$lang->action->label->login = 'Login';
|
||||
$lang->action->label->logout = "Logout";
|
||||
$lang->action->label->deleteestimate = "Deleted Man-Hour";
|
||||
$lang->action->label->deleteestimate = "Deleted";
|
||||
$lang->action->label->linked2build = "Linked";
|
||||
$lang->action->label->linked2bug = "Linked";
|
||||
|
||||
@@ -192,11 +197,13 @@ $lang->action->label->case = 'Case|testcase|view|caseID=%s';
|
||||
$lang->action->label->testtask = 'Test Task|testtask|view|caseID=%s';
|
||||
$lang->action->label->testsuite = 'Test Suite|testsuite|view|suiteID=%s';
|
||||
$lang->action->label->caselib = 'Case Library|testsuite|libview|libID=%s';
|
||||
$lang->action->label->todo = 'To-Dos|todo|view|todoID=%s';
|
||||
$lang->action->label->todo = 'Todo|todo|view|todoID=%s';
|
||||
$lang->action->label->doclib = 'Doc Lib|doc|browse|libID=%s';
|
||||
$lang->action->label->doc = 'Document|doc|view|docID=%s';
|
||||
$lang->action->label->doc = 'Doc|doc|view|docID=%s';
|
||||
$lang->action->label->user = 'User|user|view|account=%s';
|
||||
$lang->action->label->testreport = 'Report|testreport|view|report=%s';
|
||||
$lang->action->label->entry = 'Entry|entry|browse|';
|
||||
$lang->action->label->webhook = 'Webhook|webhook|browse|';
|
||||
$lang->action->label->space = ' ';
|
||||
|
||||
/* Object type. */
|
||||
@@ -211,9 +218,9 @@ $lang->action->search->objectTypeList['story'] = 'Story';
|
||||
$lang->action->search->objectTypeList['task'] = 'Task';
|
||||
$lang->action->search->objectTypeList['testtask'] = 'Test Task';
|
||||
$lang->action->search->objectTypeList['user'] = 'User';
|
||||
$lang->action->search->objectTypeList['doc'] = 'Document';
|
||||
$lang->action->search->objectTypeList['doc'] = 'Doc';
|
||||
$lang->action->search->objectTypeList['doclib'] = 'Doc Lib';
|
||||
$lang->action->search->objectTypeList['todo'] = 'To-Dos';
|
||||
$lang->action->search->objectTypeList['todo'] = 'Todo';
|
||||
$lang->action->search->objectTypeList['build'] = 'Build';
|
||||
$lang->action->search->objectTypeList['release'] = 'Release';
|
||||
$lang->action->search->objectTypeList['productplan'] = 'Plan';
|
||||
@@ -262,5 +269,6 @@ $lang->action->search->label['editestimate'] = $lang->action->label->edit
|
||||
$lang->action->search->label['canceled'] = $lang->action->label->canceled;
|
||||
$lang->action->search->label['finished'] = $lang->action->label->finished;
|
||||
$lang->action->search->label['paused'] = $lang->action->label->paused;
|
||||
$lang->action->search->label['verified'] = $lang->action->label->verified;
|
||||
$lang->action->search->label['login'] = $lang->action->label->login;
|
||||
$lang->action->search->label['logout'] = $lang->action->label->logout;
|
||||
|
||||
@@ -25,6 +25,7 @@ $lang->action->undelete = '还原';
|
||||
$lang->action->hideOne = '隐藏';
|
||||
$lang->action->hideAll = '全部隐藏';
|
||||
$lang->action->editComment = '修改备注';
|
||||
$lang->action->comment = '备注';
|
||||
|
||||
$lang->action->trashTips = '提示:为了保证系统的完整性,禅道系统的删除都是标记删除。';
|
||||
$lang->action->textDiff = '文本格式';
|
||||
@@ -63,7 +64,7 @@ $lang->action->objectTypes['bug'] = 'Bug';
|
||||
$lang->action->objectTypes['case'] = '用例';
|
||||
$lang->action->objectTypes['caseresult'] = '用例结果';
|
||||
$lang->action->objectTypes['stepresult'] = '用例步骤';
|
||||
$lang->action->objectTypes['testtask'] = '测试任务';
|
||||
$lang->action->objectTypes['testtask'] = '测试单';
|
||||
$lang->action->objectTypes['user'] = '用户';
|
||||
$lang->action->objectTypes['doc'] = '文档';
|
||||
$lang->action->objectTypes['doclib'] = '文档库';
|
||||
@@ -73,6 +74,8 @@ $lang->action->objectTypes['module'] = '模块';
|
||||
$lang->action->objectTypes['testsuite'] = '套件';
|
||||
$lang->action->objectTypes['caselib'] = '用例库';
|
||||
$lang->action->objectTypes['testreport'] = '报告';
|
||||
$lang->action->objectTypes['entry'] = '应用';
|
||||
$lang->action->objectTypes['webhook'] = 'Webhook';
|
||||
|
||||
/* 用来描述操作历史记录。*/
|
||||
$lang->action->desc = new stdclass();
|
||||
@@ -110,6 +113,7 @@ $lang->action->desc->svncommited = '$date, 由 <strong>$actor</strong> 提交
|
||||
$lang->action->desc->gitcommited = '$date, 由 <strong>$actor</strong> 提交代码,版本为<strong>#$extra</strong>。' . "\n";
|
||||
$lang->action->desc->finished = '$date, 由 <strong>$actor</strong> 完成。' . "\n";
|
||||
$lang->action->desc->paused = '$date, 由 <strong>$actor</strong> 暂停。' . "\n";
|
||||
$lang->action->desc->verified = '$date, 由 <strong>$actor</strong> 验收。' . "\n";
|
||||
$lang->action->desc->diff1 = '修改了 <strong><i>%s</i></strong>,旧值为 "%s",新值为 "%s"。<br />' . "\n";
|
||||
$lang->action->desc->diff2 = '修改了 <strong><i>%s</i></strong>,区别为:' . "\n" . "<blockquote>%s</blockquote>" . "\n<div class='hidden'>%s</div>";
|
||||
$lang->action->desc->diff3 = '将文件名 %s 改为 %s 。' . "\n";
|
||||
@@ -139,7 +143,7 @@ $lang->action->label->blocked = '阻塞了';
|
||||
$lang->action->label->resolved = '解决了';
|
||||
$lang->action->label->reviewed = '评审了';
|
||||
$lang->action->label->moved = '移动了';
|
||||
$lang->action->label->confirmed = '确认了需求,';
|
||||
$lang->action->label->confirmed = '确认了需求';
|
||||
$lang->action->label->bugconfirmed = '确认了';
|
||||
$lang->action->label->tostory = '转需求';
|
||||
$lang->action->label->frombug = '转需求';
|
||||
@@ -171,6 +175,7 @@ $lang->action->label->editestimate = '编辑了工时';
|
||||
$lang->action->label->canceled = '取消了';
|
||||
$lang->action->label->finished = '完成了';
|
||||
$lang->action->label->paused = '暂停了';
|
||||
$lang->action->label->verified = '验收了';
|
||||
$lang->action->label->delayed = '延期';
|
||||
$lang->action->label->suspended = '挂起';
|
||||
$lang->action->label->login = '登录系统';
|
||||
@@ -186,17 +191,19 @@ $lang->action->label->release = '发布|release|view|productID=%s';
|
||||
$lang->action->label->story = '需求|story|view|storyID=%s';
|
||||
$lang->action->label->project = "{$lang->projectCommon}|project|view|projectID=%s";
|
||||
$lang->action->label->task = '任务|task|view|taskID=%s';
|
||||
$lang->action->label->build = 'Build|build|view|buildID=%s';
|
||||
$lang->action->label->build = '版本|build|view|buildID=%s';
|
||||
$lang->action->label->bug = 'Bug|bug|view|bugID=%s';
|
||||
$lang->action->label->case = '用例|testcase|view|caseID=%s';
|
||||
$lang->action->label->testtask = '测试任务|testtask|view|caseID=%s';
|
||||
$lang->action->label->testtask = '测试单|testtask|view|caseID=%s';
|
||||
$lang->action->label->testsuite = '测试套件|testsuite|view|suiteID=%s';
|
||||
$lang->action->label->caselib = '测试库|testsuite|libview|libID=%s';
|
||||
$lang->action->label->todo = 'todo|todo|view|todoID=%s';
|
||||
$lang->action->label->todo = '待办|todo|view|todoID=%s';
|
||||
$lang->action->label->doclib = '文档库|doc|browse|libID=%s';
|
||||
$lang->action->label->doc = '文档|doc|view|docID=%s';
|
||||
$lang->action->label->user = '用户|user|view|account=%s';
|
||||
$lang->action->label->testreport = '报告|testreport|view|report=%s';
|
||||
$lang->action->label->entry = '应用|entry|browse|';
|
||||
$lang->action->label->webhook = 'Webhook|webhook|browse|';
|
||||
$lang->action->label->space = ' ';
|
||||
|
||||
/* Object type. */
|
||||
@@ -209,7 +216,7 @@ $lang->action->search->objectTypeList['caseresult'] = '用例结果';
|
||||
$lang->action->search->objectTypeList['stepresult'] = '用例步骤';
|
||||
$lang->action->search->objectTypeList['story'] = '需求';
|
||||
$lang->action->search->objectTypeList['task'] = '任务';
|
||||
$lang->action->search->objectTypeList['testtask'] = '测试任务';
|
||||
$lang->action->search->objectTypeList['testtask'] = '测试单';
|
||||
$lang->action->search->objectTypeList['user'] = '用户';
|
||||
$lang->action->search->objectTypeList['doc'] = '文档';
|
||||
$lang->action->search->objectTypeList['doclib'] = '文档库';
|
||||
@@ -262,5 +269,6 @@ $lang->action->search->label['editestimate'] = $lang->action->label->edit
|
||||
$lang->action->search->label['canceled'] = $lang->action->label->canceled;
|
||||
$lang->action->search->label['finished'] = $lang->action->label->finished;
|
||||
$lang->action->search->label['paused'] = $lang->action->label->paused;
|
||||
$lang->action->search->label['verified'] = $lang->action->label->verified;
|
||||
$lang->action->search->label['login'] = $lang->action->label->login;
|
||||
$lang->action->search->label['logout'] = $lang->action->label->logout;
|
||||
|
||||
@@ -25,6 +25,7 @@ $lang->action->undelete = '還原';
|
||||
$lang->action->hideOne = '隱藏';
|
||||
$lang->action->hideAll = '全部隱藏';
|
||||
$lang->action->editComment = '修改備註';
|
||||
$lang->action->comment = '備註';
|
||||
|
||||
$lang->action->trashTips = '提示:為了保證系統的完整性,禪道系統的刪除都是標記刪除。';
|
||||
$lang->action->textDiff = '文本格式';
|
||||
@@ -63,7 +64,7 @@ $lang->action->objectTypes['bug'] = 'Bug';
|
||||
$lang->action->objectTypes['case'] = '用例';
|
||||
$lang->action->objectTypes['caseresult'] = '用例結果';
|
||||
$lang->action->objectTypes['stepresult'] = '用例步驟';
|
||||
$lang->action->objectTypes['testtask'] = '測試任務';
|
||||
$lang->action->objectTypes['testtask'] = '測試單';
|
||||
$lang->action->objectTypes['user'] = '用戶';
|
||||
$lang->action->objectTypes['doc'] = '文檔';
|
||||
$lang->action->objectTypes['doclib'] = '文檔庫';
|
||||
@@ -73,6 +74,8 @@ $lang->action->objectTypes['module'] = '模組';
|
||||
$lang->action->objectTypes['testsuite'] = '套件';
|
||||
$lang->action->objectTypes['caselib'] = '用例庫';
|
||||
$lang->action->objectTypes['testreport'] = '報告';
|
||||
$lang->action->objectTypes['entry'] = '應用';
|
||||
$lang->action->objectTypes['webhook'] = 'Webhook';
|
||||
|
||||
/* 用來描述操作歷史記錄。*/
|
||||
$lang->action->desc = new stdclass();
|
||||
@@ -110,6 +113,7 @@ $lang->action->desc->svncommited = '$date, 由 <strong>$actor</strong> 提交
|
||||
$lang->action->desc->gitcommited = '$date, 由 <strong>$actor</strong> 提交代碼,版本為<strong>#$extra</strong>。' . "\n";
|
||||
$lang->action->desc->finished = '$date, 由 <strong>$actor</strong> 完成。' . "\n";
|
||||
$lang->action->desc->paused = '$date, 由 <strong>$actor</strong> 暫停。' . "\n";
|
||||
$lang->action->desc->verified = '$date, 由 <strong>$actor</strong> 驗收。' . "\n";
|
||||
$lang->action->desc->diff1 = '修改了 <strong><i>%s</i></strong>,舊值為 "%s",新值為 "%s"。<br />' . "\n";
|
||||
$lang->action->desc->diff2 = '修改了 <strong><i>%s</i></strong>,區別為:' . "\n" . "<blockquote>%s</blockquote>" . "\n<div class='hidden'>%s</div>";
|
||||
$lang->action->desc->diff3 = '將檔案名 %s 改為 %s 。' . "\n";
|
||||
@@ -139,7 +143,7 @@ $lang->action->label->blocked = '阻塞了';
|
||||
$lang->action->label->resolved = '解決了';
|
||||
$lang->action->label->reviewed = '評審了';
|
||||
$lang->action->label->moved = '移動了';
|
||||
$lang->action->label->confirmed = '確認了需求,';
|
||||
$lang->action->label->confirmed = '確認了需求';
|
||||
$lang->action->label->bugconfirmed = '確認了';
|
||||
$lang->action->label->tostory = '轉需求';
|
||||
$lang->action->label->frombug = '轉需求';
|
||||
@@ -171,6 +175,7 @@ $lang->action->label->editestimate = '編輯了工時';
|
||||
$lang->action->label->canceled = '取消了';
|
||||
$lang->action->label->finished = '完成了';
|
||||
$lang->action->label->paused = '暫停了';
|
||||
$lang->action->label->verified = '驗收了';
|
||||
$lang->action->label->delayed = '延期';
|
||||
$lang->action->label->suspended = '掛起';
|
||||
$lang->action->label->login = '登錄系統';
|
||||
@@ -186,17 +191,19 @@ $lang->action->label->release = '發佈|release|view|productID=%s';
|
||||
$lang->action->label->story = '需求|story|view|storyID=%s';
|
||||
$lang->action->label->project = "{$lang->projectCommon}|project|view|projectID=%s";
|
||||
$lang->action->label->task = '任務|task|view|taskID=%s';
|
||||
$lang->action->label->build = 'Build|build|view|buildID=%s';
|
||||
$lang->action->label->build = '版本|build|view|buildID=%s';
|
||||
$lang->action->label->bug = 'Bug|bug|view|bugID=%s';
|
||||
$lang->action->label->case = '用例|testcase|view|caseID=%s';
|
||||
$lang->action->label->testtask = '測試任務|testtask|view|caseID=%s';
|
||||
$lang->action->label->testtask = '測試單|testtask|view|caseID=%s';
|
||||
$lang->action->label->testsuite = '測試套件|testsuite|view|suiteID=%s';
|
||||
$lang->action->label->caselib = '測試庫|testsuite|libview|libID=%s';
|
||||
$lang->action->label->todo = 'todo|todo|view|todoID=%s';
|
||||
$lang->action->label->todo = '待辦|todo|view|todoID=%s';
|
||||
$lang->action->label->doclib = '文檔庫|doc|browse|libID=%s';
|
||||
$lang->action->label->doc = '文檔|doc|view|docID=%s';
|
||||
$lang->action->label->user = '用戶|user|view|account=%s';
|
||||
$lang->action->label->testreport = '報告|testreport|view|report=%s';
|
||||
$lang->action->label->entry = '應用|entry|browse|';
|
||||
$lang->action->label->webhook = 'Webhook|webhook|browse|';
|
||||
$lang->action->label->space = ' ';
|
||||
|
||||
/* Object type. */
|
||||
@@ -209,7 +216,7 @@ $lang->action->search->objectTypeList['caseresult'] = '用例結果';
|
||||
$lang->action->search->objectTypeList['stepresult'] = '用例步驟';
|
||||
$lang->action->search->objectTypeList['story'] = '需求';
|
||||
$lang->action->search->objectTypeList['task'] = '任務';
|
||||
$lang->action->search->objectTypeList['testtask'] = '測試任務';
|
||||
$lang->action->search->objectTypeList['testtask'] = '測試單';
|
||||
$lang->action->search->objectTypeList['user'] = '用戶';
|
||||
$lang->action->search->objectTypeList['doc'] = '文檔';
|
||||
$lang->action->search->objectTypeList['doclib'] = '文檔庫';
|
||||
@@ -262,5 +269,6 @@ $lang->action->search->label['editestimate'] = $lang->action->label->edit
|
||||
$lang->action->search->label['canceled'] = $lang->action->label->canceled;
|
||||
$lang->action->search->label['finished'] = $lang->action->label->finished;
|
||||
$lang->action->search->label['paused'] = $lang->action->label->paused;
|
||||
$lang->action->search->label['verified'] = $lang->action->label->verified;
|
||||
$lang->action->search->label['login'] = $lang->action->label->login;
|
||||
$lang->action->search->label['logout'] = $lang->action->label->logout;
|
||||
|
||||
+25
-5
@@ -26,10 +26,11 @@ class actionModel extends model
|
||||
* @param string $comment
|
||||
* @param string $extra the extra info of this action, according to different modules and actions, can set different extra.
|
||||
* @param string $actor
|
||||
* @param bool $autoDelete
|
||||
* @access public
|
||||
* @return int
|
||||
*/
|
||||
public function create($objectType, $objectID, $actionType, $comment = '', $extra = '', $actor = '')
|
||||
public function create($objectType, $objectID, $actionType, $comment = '', $extra = '', $actor = '', $autoDelete = true)
|
||||
{
|
||||
$actor = $actor ? $actor : $this->app->user->account;
|
||||
$actionType = strtolower($actionType);
|
||||
@@ -48,17 +49,20 @@ class actionModel extends model
|
||||
|
||||
/* Process action. */
|
||||
$action = $this->loadModel('file')->processImgURL($action, 'comment', $this->post->uid);
|
||||
if($autoDelete) $this->file->autoDelete($this->post->uid);
|
||||
|
||||
/* Get product and project for this object. */
|
||||
$productAndProject = $this->getProductAndProject($action->objectType, $objectID);
|
||||
$action->product = $productAndProject['product'];
|
||||
$action->project = $productAndProject['project'];
|
||||
$productAndProject = $this->getProductAndProject($action->objectType, $objectID);
|
||||
$action->product = $productAndProject['product'];
|
||||
$action->project = (int) $productAndProject['project'];
|
||||
|
||||
$this->dao->insert(TABLE_ACTION)->data($action)->autoCheck()->exec();
|
||||
$actionID = $this->dbh->lastInsertID();
|
||||
|
||||
$this->file->updateObjectID($this->post->uid, $objectID, $objectType);
|
||||
|
||||
$this->loadModel('message')->send($objectType, $objectID, $actionType, $actionID);
|
||||
|
||||
return $actionID;
|
||||
}
|
||||
|
||||
@@ -321,6 +325,22 @@ class actionModel extends model
|
||||
}
|
||||
}
|
||||
}
|
||||
elseif($actionName == 'finished' and $objectType == 'todo')
|
||||
{
|
||||
$action->appendLink = '';
|
||||
if(strpos($action->extra, ':')!== false)
|
||||
{
|
||||
list($extra, $id) = explode(':', $action->extra);
|
||||
$action->extra = strtolower($extra);
|
||||
if($id)
|
||||
{
|
||||
$table = $this->config->objectTables[$action->extra];
|
||||
$field = $this->config->action->objectNameFields[$action->extra];
|
||||
$name = $this->dao->select($field)->from($table)->where('id')->eq($id)->fetch($field);
|
||||
if($name) $action->appendLink = html::a(helper::createLink($action->extra, 'view', "id=$id"), "#$id " . $name);
|
||||
}
|
||||
}
|
||||
}
|
||||
$action->history = isset($histories[$actionID]) ? $histories[$actionID] : array();
|
||||
|
||||
$actionName = strtolower($action->action);
|
||||
@@ -687,7 +707,7 @@ class actionModel extends model
|
||||
$objectIds = array_unique($objectIds);
|
||||
$table = $this->config->objectTables[$objectType];
|
||||
$field = $this->config->action->objectNameFields[$objectType];
|
||||
if($table != '`zt_todo`')
|
||||
if($table != TABLE_TODO)
|
||||
{
|
||||
$objectNames[$objectType] = $this->dao->select("id, $field AS name")->from($table)->where('id')->in($objectIds)->fetchPairs();
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
<?php $vars = "type=$type&orderBy=%s&recTotal={$pager->recTotal}&recPerPage={$pager->recPerPage}"; ?>
|
||||
<thead>
|
||||
<tr class='colhead'>
|
||||
<th class='w-90px'><?php common::printOrderLink('objectType', $orderBy, $vars, $lang->action->objectType);?></th>
|
||||
<th class='w-130px'><?php common::printOrderLink('objectType', $orderBy, $vars, $lang->action->objectType);?></th>
|
||||
<th class='w-id'> <?php common::printOrderLink('objectID', $orderBy, $vars, $lang->idAB);?></th>
|
||||
<th><?php echo $lang->action->objectName;?></th>
|
||||
<th class='w-100px'><?php common::printOrderLink('actor', $orderBy, $vars, $lang->action->actor);?></th>
|
||||
|
||||
@@ -11,5 +11,8 @@ $config->url->service = 'http://www.cnezsoft.com/article-browse-1078.html';
|
||||
|
||||
$config->admin->apiRoot = 'http://www.zentao.net';
|
||||
|
||||
if(!isset($config->safe)) $config->safe = new stdclass();
|
||||
$config->admin->log = new stdclass();
|
||||
$config->admin->log->saveDays = 30;
|
||||
|
||||
if(!isset($config->safe)) $config->safe = new stdclass();
|
||||
if(!isset($config->safe->weak)) $config->safe->weak = '123456,password,12345,12345678,qwerty,123456789,1234,1234567,abc123,111111,123123';
|
||||
|
||||
@@ -313,4 +313,44 @@ class admin extends control
|
||||
{
|
||||
die($this->admin->sendCodeByAPI($type));
|
||||
}
|
||||
|
||||
/**
|
||||
* Set save days of log.
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function log()
|
||||
{
|
||||
if($_POST)
|
||||
{
|
||||
if(!validater::checkInt($this->post->days)) $this->send(array('result' => 'fail', 'message' => array('days' => sprintf($this->lang->admin->notice->int, $this->lang->admin->days))));
|
||||
|
||||
$this->loadModel('setting')->setItem('system.admin.log.saveDays', $this->post->days);
|
||||
if(dao::isError()) $this->send(array('result' => 'fail', 'message' => dao::getError()));
|
||||
$this->send(array('result' => 'success', 'message' => $this->lang->admin->saveSuccess, 'locate' => 'reload'));
|
||||
}
|
||||
|
||||
$this->loadModel('message');
|
||||
$this->loadModel('webhook');
|
||||
|
||||
$this->view->title = $this->lang->admin->log;
|
||||
$this->view->position[] = html::a($this->createLink('webhook', 'browse'), $this->lang->admin->api);
|
||||
$this->view->position[] = $this->lang->admin->log;
|
||||
$this->view->position[] = $this->lang->admin->setting;
|
||||
$this->display();
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete logs older than save days.
|
||||
*
|
||||
* @access public
|
||||
* @return bool
|
||||
*/
|
||||
public function deleteLog()
|
||||
{
|
||||
$date = date(DT_DATE1, strtotime("-{$this->config->admin->log->saveDays} days"));
|
||||
$this->dao->delete()->from(TABLE_LOG)->where('date')->lt($date)->exec();
|
||||
return !dao::isError();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
$(function()
|
||||
{
|
||||
$('#modulemenu .nav li[data-id=api]').addClass('active');
|
||||
});
|
||||
+33
-25
@@ -9,57 +9,65 @@
|
||||
* @version $Id: en.php 4460 2013-02-26 02:28:02Z chencongzhi520@gmail.com $
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
$lang->admin->common = 'Administration';
|
||||
$lang->admin->common = 'Admin';
|
||||
$lang->admin->index = 'Admin Home';
|
||||
$lang->admin->checkDB = 'Check Database';
|
||||
$lang->admin->sso = 'RangerTeam';
|
||||
$lang->admin->sso = 'Zdoo';
|
||||
$lang->admin->safeIndex = 'Security';
|
||||
$lang->admin->checkWeak = 'Weak Password Check';
|
||||
$lang->admin->certifyMobile = 'Verify your mobilephone';
|
||||
$lang->admin->certifyEmail = 'Verifu your Email';
|
||||
$lang->admin->ztCompany = 'Verifu your company';
|
||||
$lang->admin->certifyEmail = 'Verify your Email';
|
||||
$lang->admin->ztCompany = 'Verify your company';
|
||||
$lang->admin->captcha = 'Verification Code';
|
||||
$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->saveSuccess = 'Saved.';
|
||||
|
||||
$lang->admin->info = new stdclass();
|
||||
$lang->admin->info->version = 'Current Version is %s. ';
|
||||
$lang->admin->info->links = 'You can visit ';
|
||||
$lang->admin->info->account = "Your ZenTao account is %s.";
|
||||
$lang->admin->info->links = 'You can visit links below';
|
||||
$lang->admin->info->account = 'Your ZenTao account is %s.';
|
||||
$lang->admin->info->log = 'Logs that is beyond valid days will be deleted and it has to run cron.';
|
||||
|
||||
$lang->admin->notice = new stdclass();
|
||||
$lang->admin->notice->register = "Note: You haven't registered in ZenTao(www.zentao.net), register %s and get the latest ZenTao news.";
|
||||
$lang->admin->notice->register = "Note: You haven't registered in ZenTao(www.zentao.pm). %s then get the Latest ZenTao Upgrades and News.";
|
||||
$lang->admin->notice->ignore = "Ignore";
|
||||
$lang->admin->notice->int = "『%s』should be a positive integer.";
|
||||
|
||||
$lang->admin->register = new stdclass();
|
||||
$lang->admin->register->common = 'Account Binding';
|
||||
$lang->admin->register->caption = 'Register';
|
||||
$lang->admin->register->click = 'Click Here';
|
||||
$lang->admin->register->lblAccount = 'must be 3 characters combination of letters and numbers at least.';
|
||||
$lang->admin->register->lblPasswd = 'must be 6 characters combination of letters and numbers at least.';
|
||||
$lang->admin->register->common = 'Binding New 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->submit = 'Register';
|
||||
$lang->admin->register->bind = "If you have already registered an account, link your account %s.";
|
||||
$lang->admin->register->bind = "Binding Exsit Account";
|
||||
$lang->admin->register->success = "You have registered with us!";
|
||||
|
||||
$lang->admin->bind = new stdclass();
|
||||
$lang->admin->bind->caption = 'Link an Account';
|
||||
$lang->admin->bind->caption = 'Link Account';
|
||||
$lang->admin->bind->success = "Account has been linked!";
|
||||
|
||||
$lang->admin->safe = new stdclass();
|
||||
$lang->admin->safe->common = 'Security Policy';
|
||||
$lang->admin->safe->set = 'Password Security Settings';
|
||||
$lang->admin->safe->password = 'Password Security';
|
||||
$lang->admin->safe->weak = 'Weak Password';
|
||||
$lang->admin->safe->set = 'PasswordStrength';
|
||||
$lang->admin->safe->password = 'Password Strength';
|
||||
$lang->admin->safe->weak = 'Weak Passwords';
|
||||
$lang->admin->safe->reason = 'Type';
|
||||
$lang->admin->safe->checkWeak = 'Weak Password Check';
|
||||
$lang->admin->safe->changeWeak = 'Modify weak password';
|
||||
$lang->admin->safe->modifyPasswordFirstLogin = 'Modify password when first login';
|
||||
$lang->admin->safe->checkWeak = 'WeakPasswords';
|
||||
$lang->admin->safe->changeWeak = 'Weak password must be strengthen';
|
||||
$lang->admin->safe->modifyPasswordFirstLogin = 'Change password when 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] = 'Should be contain letters and numbers, at lease six characters.';
|
||||
$lang->admin->safe->modeRuleList[2] = 'Should be contain letters, numbers and special characters, at lease 10 characters.';
|
||||
$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->reasonList['weak'] = 'Common Weak Password';
|
||||
$lang->admin->safe->reasonList['account'] = 'Same as your account';
|
||||
@@ -67,8 +75,8 @@ $lang->admin->safe->reasonList['mobile'] = 'Same as your mobile number';
|
||||
$lang->admin->safe->reasonList['phone'] = 'Same as your phone number';
|
||||
$lang->admin->safe->reasonList['birthday'] = 'Same as your DOB';
|
||||
|
||||
$lang->admin->safe->modifyPasswordList[1] = 'Must';
|
||||
$lang->admin->safe->modifyPasswordList[1] = 'Yes';
|
||||
$lang->admin->safe->modifyPasswordList[0] = 'No';
|
||||
|
||||
$lang->admin->safe->noticeMode = 'User password will be checked when login, add/edit user password.';
|
||||
$lang->admin->safe->noticeStrong = 'The more capitalized letters and numbers a password has, the more secure it is!';
|
||||
$lang->admin->safe->noticeMode = 'Password will be checked when login, add/edit user.';
|
||||
$lang->admin->safe->noticeStrong = '';
|
||||
|
||||
@@ -21,14 +21,22 @@ $lang->admin->ztCompany = '认证公司';
|
||||
$lang->admin->captcha = '验证码';
|
||||
$lang->admin->getCaptcha = '获取验证码';
|
||||
|
||||
$lang->admin->api = '接口';
|
||||
$lang->admin->log = '日志';
|
||||
$lang->admin->setting = '设置';
|
||||
$lang->admin->days = '日志保存天数';
|
||||
$lang->admin->saveSuccess = '保存成功';
|
||||
|
||||
$lang->admin->info = new stdclass();
|
||||
$lang->admin->info->version = '当前系统的版本是%s,';
|
||||
$lang->admin->info->links = '您可以访问以下链接:';
|
||||
$lang->admin->info->account = "您的禅道社区账户为%s。";
|
||||
$lang->admin->info->log = '超出存天数的日志会被删除,需要开启计划任务。';
|
||||
|
||||
$lang->admin->notice = new stdclass();
|
||||
$lang->admin->notice->register = "友情提示:您还未在禅道社区(www.zentao.net)登记,%s进行登记,以及时获得禅道最新信息。";
|
||||
$lang->admin->notice->ignore = "不再提示";
|
||||
$lang->admin->notice->int = "『%s』应当是正整数。";
|
||||
|
||||
$lang->admin->register = new stdclass();
|
||||
$lang->admin->register->common = '注册新帐号绑定';
|
||||
|
||||
@@ -21,14 +21,22 @@ $lang->admin->ztCompany = '認證公司';
|
||||
$lang->admin->captcha = '驗證碼';
|
||||
$lang->admin->getCaptcha = '獲取驗證碼';
|
||||
|
||||
$lang->admin->api = '介面';
|
||||
$lang->admin->log = '日誌';
|
||||
$lang->admin->setting = '設置';
|
||||
$lang->admin->days = '日誌保存天數';
|
||||
$lang->admin->saveSuccess = '保存成功';
|
||||
|
||||
$lang->admin->info = new stdclass();
|
||||
$lang->admin->info->version = '當前系統的版本是%s,';
|
||||
$lang->admin->info->links = '您可以訪問以下連結:';
|
||||
$lang->admin->info->account = "您的禪道社區賬戶為%s。";
|
||||
$lang->admin->info->log = '超出存天數的日誌會被刪除,需要開啟計劃任務。';
|
||||
|
||||
$lang->admin->notice = new stdclass();
|
||||
$lang->admin->notice->register = "友情提示:您還未在禪道社區(www.zentao.net)登記,%s進行登記,以及時獲得禪道最新信息。";
|
||||
$lang->admin->notice->ignore = "不再提示";
|
||||
$lang->admin->notice->int = "『%s』應當是正整數。";
|
||||
|
||||
$lang->admin->register = new stdclass();
|
||||
$lang->admin->register->common = '註冊新帳號綁定';
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
/**
|
||||
* The log view file of admin module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2017 青岛易软天创网络科技有限公司(QingDao Nature Easy Soft Network Technology Co,LTD, www.cnezsoft.com)
|
||||
* @license ZPL (http://zpl.pub/page/zplv12.html)
|
||||
* @author Gang Liu <liugang@cnezsoft.com>
|
||||
* @package admin
|
||||
* @version $Id$
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php include $this->app->getModuleRoot() . 'webhook/view/header.html.php';?>
|
||||
<?php include '../../common/view/form.html.php';?>
|
||||
<div class='container mw-600px'>
|
||||
<form id='logForm' method='post' class='ajaxForm'>
|
||||
<table class='table table-form'>
|
||||
<tr>
|
||||
<th class='w-100px'><?php echo $lang->admin->days;?></th>
|
||||
<td><?php echo html::input('days', $config->admin->log->saveDays, "class='form-control'");?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th></th>
|
||||
<td>
|
||||
<?php echo html::submitButton();?>
|
||||
<?php echo $lang->admin->info->log;?>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
</div>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
+10
-10
@@ -5,27 +5,27 @@ $lang->backup->history = 'History';
|
||||
$lang->backup->delete = 'Delete';
|
||||
$lang->backup->backup = 'Backup';
|
||||
$lang->backup->restore = 'Restore';
|
||||
$lang->backup->change = 'Save Interval';
|
||||
$lang->backup->change = 'Modify days';
|
||||
$lang->backup->changeAB = 'Modify';
|
||||
|
||||
$lang->backup->time = 'Time';
|
||||
$lang->backup->time = 'Backup Time';
|
||||
$lang->backup->files = 'Files';
|
||||
$lang->backup->size = 'Size';
|
||||
|
||||
$lang->backup->waitting = '<span id="backupType"></span>In Progree. Please wait...';
|
||||
$lang->backup->waitting = '<span id="backupType"></span> In Progress. Please wait...';
|
||||
$lang->backup->confirmDelete = 'Do you want to delete the backup?';
|
||||
$lang->backup->confirmRestore = 'Do you want to restore the backup?';
|
||||
$lang->backup->holdDays = 'Backup the latest %s days.';
|
||||
$lang->backup->restoreTip = 'Only attachments and databases will be restored when you click restore button, if you need to restore the code, you can restore manually.';
|
||||
$lang->backup->holdDays = 'Reserve latest %s days of backups';
|
||||
$lang->backup->restoreTip = 'Only files and databases can be restored when you click Restore. Code can be restored manually.';
|
||||
|
||||
$lang->backup->success = new stdclass();
|
||||
$lang->backup->success->backup = 'Backed up!';
|
||||
$lang->backup->success->backup = 'Done!';
|
||||
$lang->backup->success->restore = 'Restored!';
|
||||
|
||||
$lang->backup->error = new stdclass();
|
||||
$lang->backup->error->noWritable = "<code>%s</code> is not writable! Please check the permission, or back up cannot be done.";
|
||||
$lang->backup->error->noDelete = "%s cannot be deleted. Please modify the permission or manually delete it.";
|
||||
$lang->backup->error->restoreSQL = "Database library restoring failed. Error %s.";
|
||||
$lang->backup->error->restoreFile = "File restoring failed. Error %s.";
|
||||
$lang->backup->error->noWritable = "<code>%s</code> is not writable! Please check the privilege, or backup cannot be done.";
|
||||
$lang->backup->error->noDelete = "%s cannot be deleted. Please modify the privilege or manually delete it.";
|
||||
$lang->backup->error->restoreSQL = "Database library restoration failed. Error %s.";
|
||||
$lang->backup->error->restoreFile = "File restoration failed. Error %s.";
|
||||
$lang->backup->error->backupFile = "File backup failed. Error %s.";
|
||||
$lang->backup->error->backupCode = "Code backup failed. Error %s.";
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
?>
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<?php if(!empty($error)):?>
|
||||
<div id="notice" class='alert alert-success'>
|
||||
<div id="notice" class='alert alert-success' style="margin-bottom:35px;">
|
||||
<div class="content"><i class='icon-info-sign'></i> <?php echo $error;?></div>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
@@ -33,7 +33,7 @@
|
||||
<th class='w-150px'><?php echo $lang->backup->time?></th>
|
||||
<th><?php echo $lang->backup->files?></th>
|
||||
<th class='w-150px'><?php echo $lang->backup->size?></th>
|
||||
<th class='w-80px'><?php echo $lang->actions?></th>
|
||||
<th class='w-110px'><?php echo $lang->actions?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody class='text-center'>
|
||||
|
||||
@@ -12,10 +12,3 @@
|
||||
$config->block = new stdclass();
|
||||
$config->block->editor = new stdclass();
|
||||
$config->block->editor->set = array('id' => 'html', 'tools' => 'simple');
|
||||
|
||||
$config->block->gridOptions[6] = '1/2';
|
||||
$config->block->gridOptions[4] = '1/3';
|
||||
$config->block->gridOptions[8] = '2/3';
|
||||
$config->block->gridOptions[3] = '1/4';
|
||||
$config->block->gridOptions[9] = '3/4';
|
||||
$config->block->gridOptions[12] = '100%';
|
||||
|
||||
+154
-12
@@ -54,9 +54,11 @@ class block extends control
|
||||
if($this->config->global->flow == 'onlyStory' or $this->config->global->flow == 'onlyTest') unset($modules['project']);
|
||||
|
||||
$closedBlock = isset($this->config->block->closed) ? $this->config->block->closed : '';
|
||||
if(strpos(",$closedBlock,", ",|dynamic,") === false) $modules['dynamic'] = $this->lang->block->dynamic;
|
||||
if(strpos(",$closedBlock,", ",|assigntome,") === false) $modules['assigntome'] = $this->lang->block->assignToMe;
|
||||
if(strpos(",$closedBlock,", ",|dynamic,") === false) $modules['dynamic'] = $this->lang->block->dynamic;
|
||||
if(strpos(",$closedBlock,", ",|flowchart,") === false and $this->config->global->flow == 'full') $modules['flowchart'] = $this->lang->block->lblFlowchart;
|
||||
if(strpos(",$closedBlock,", ",|html,") === false) $modules['html'] = 'HTML';
|
||||
if(strpos(",$closedBlock,", ",|welcome,") === false and $this->config->global->flow == 'full') $modules['welcome'] = $this->lang->block->welcome;
|
||||
if(strpos(",$closedBlock,", ",|html,") === false) $modules['html'] = 'HTML';
|
||||
$modules = array('' => '') + $modules;
|
||||
|
||||
$hiddenBlocks = $this->block->getHiddenBlocks();
|
||||
@@ -103,6 +105,11 @@ class block extends control
|
||||
$params = $this->block->$func($source);
|
||||
$this->view->params = json_decode($params, true);
|
||||
}
|
||||
elseif($type == 'assigntome')
|
||||
{
|
||||
$params = $this->block->getAssignToMeParams();
|
||||
$this->view->params = json_decode($params, true);
|
||||
}
|
||||
|
||||
$this->view->source = $source;
|
||||
$this->view->type = $type;
|
||||
@@ -131,6 +138,7 @@ class block extends control
|
||||
$this->dao->delete()->from(TABLE_BLOCK)->where('`id`')->eq($id)->andWhere('account')->eq($this->app->user->account)->andWhere('module')->eq($module)->exec();
|
||||
}
|
||||
if(dao::isError()) $this->send(array('result' => 'fail', 'message' => dao::getError()));
|
||||
$this->loadModel('score')->create('block', 'set');
|
||||
$this->send(array('result' => 'success'));
|
||||
}
|
||||
|
||||
@@ -157,6 +165,7 @@ class block extends control
|
||||
}
|
||||
|
||||
if(dao::isError()) $this->send(array('result' => 'fail'));
|
||||
$this->loadModel('score')->create('block', 'set');
|
||||
$this->send(array('result' => 'success'));
|
||||
}
|
||||
|
||||
@@ -207,6 +216,7 @@ class block extends control
|
||||
if($this->block->initBlock($module)) die(js::reload());
|
||||
}
|
||||
|
||||
$shortBlocks = $longBlocks = array();
|
||||
foreach($blocks as $key => $block)
|
||||
{
|
||||
if($this->config->global->flow == 'onlyStory' and $block->source != 'product' and $block->source != 'todo' and $block->block != 'dynamic') unset($blocks[$key]);
|
||||
@@ -228,15 +238,22 @@ class block extends control
|
||||
{
|
||||
$block->moreLink = $this->createLink('company', 'dynamic');
|
||||
}
|
||||
|
||||
if($this->block->isLongBlock($block))
|
||||
{
|
||||
$longBlocks[$key] = $block;
|
||||
}
|
||||
else
|
||||
{
|
||||
$shortBlocks[$key] = $block;
|
||||
}
|
||||
}
|
||||
|
||||
$this->view->blocks = $blocks;
|
||||
$this->view->module = $module;
|
||||
$this->view->longBlocks = $longBlocks;
|
||||
$this->view->shortBlocks = $shortBlocks;
|
||||
$this->view->module = $module;
|
||||
|
||||
if($this->app->getViewType() == 'json')
|
||||
{
|
||||
die(json_encode($blocks));
|
||||
}
|
||||
if($this->app->getViewType() == 'json') die(json_encode($blocks));
|
||||
|
||||
$this->display();
|
||||
}
|
||||
@@ -254,6 +271,39 @@ class block extends control
|
||||
$this->display();
|
||||
}
|
||||
|
||||
/**
|
||||
* Welcome block.
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function welcome()
|
||||
{
|
||||
$projects = $this->loadModel('project')->getPairs();
|
||||
$products = $this->loadModel('product')->getPairs();
|
||||
|
||||
$this->view->tutorialed = $this->loadModel('tutorial')->getTutorialed();
|
||||
$this->view->tasks = (int)$this->dao->select('count(*) AS count')->from(TABLE_TASK)->where('assignedTo')->eq($this->app->user->account)->fetch('count');
|
||||
$this->view->bugs = (int)$this->dao->select('count(*) AS count')->from(TABLE_BUG)->where('assignedTo')->eq($this->app->user->account)->fetch('count');
|
||||
$this->view->stories = (int)$this->dao->select('count(*) AS count')->from(TABLE_STORY)->where('assignedTo')->eq($this->app->user->account)->fetch('count');
|
||||
$this->view->projects = (int)$this->dao->select('count(*) AS count')->from(TABLE_PROJECT)->where('id')->in(array_keys($projects))->andWhere("(status='wait' or status='doing')")->fetch('count');
|
||||
$this->view->products = (int)$this->dao->select('count(*) AS count')->from(TABLE_PRODUCT)->where('status')->ne('closed')->andWhere('id')->in(array_keys($products))->fetch('count');
|
||||
|
||||
$today = date('Y-m-d');
|
||||
$this->view->delay['task'] = (int)$this->dao->select('count(*) AS count')->from(TABLE_TASK)->where('assignedTo')->eq($this->app->user->account)->andWhere('deadline')->ne('0000-00-00')->andWhere('deadline')->lt($today)->fetch('count');
|
||||
$this->view->delay['bug'] = (int)$this->dao->select('count(*) AS count')->from(TABLE_BUG)->where('assignedTo')->eq($this->app->user->account)->andWhere('deadline')->ne('0000-00-00')->andWhere('deadline')->lt($today)->fetch('count');
|
||||
$this->view->delay['project'] = (int)$this->dao->select('count(*) AS count')->from(TABLE_PROJECT)->where('id')->in(array_keys($projects))->andWhere("(status='wait' or status='doing')")->andWhere('end')->lt($today)->fetch('count');
|
||||
|
||||
$time = date('H:i');
|
||||
$welcomeType = '19:00';
|
||||
foreach($this->lang->block->welcomeList as $type => $name)
|
||||
{
|
||||
if($time >= $type) $welcomeType = $type;
|
||||
}
|
||||
$this->view->welcomeType = $welcomeType;
|
||||
$this->display();
|
||||
}
|
||||
|
||||
/**
|
||||
* Print block.
|
||||
*
|
||||
@@ -270,7 +320,7 @@ class block extends control
|
||||
$html = '';
|
||||
if($block->block == 'html')
|
||||
{
|
||||
$html = "<div class='article-content'>" . htmlspecialchars_decode($block->params->html) .'</div>';
|
||||
$html = "<div class='panel-body'><div class='article-content'>" . htmlspecialchars_decode($block->params->html) .'</div></div>';
|
||||
}
|
||||
elseif($block->source != '')
|
||||
{
|
||||
@@ -279,7 +329,7 @@ class block extends control
|
||||
$this->get->set('module', $block->module);
|
||||
$this->get->set('source', $block->source);
|
||||
$this->get->set('blockid', $block->block);
|
||||
$this->get->set('param',base64_encode(json_encode($block->params)));
|
||||
$this->get->set('param', base64_encode(json_encode($block->params)));
|
||||
$html = $this->fetch('block', 'main', "module={$block->source}&id=$id");
|
||||
}
|
||||
elseif($block->block == 'dynamic')
|
||||
@@ -290,8 +340,17 @@ class block extends control
|
||||
{
|
||||
$html = $this->fetch('block', 'flowchart');
|
||||
}
|
||||
elseif($block->block == 'assigntome')
|
||||
{
|
||||
$this->get->set('param', base64_encode(json_encode($block->params)));
|
||||
$html = $this->fetch('block', 'printAssignToMeBlock', 'longBlock=' . $this->block->isLongBlock($block));
|
||||
}
|
||||
elseif($block->block == 'welcome')
|
||||
{
|
||||
$html = $this->fetch('block', 'welcome');
|
||||
}
|
||||
|
||||
die($html);
|
||||
echo $html;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -356,6 +415,9 @@ class block extends control
|
||||
$this->view->sign = strpos($sso, '?') === false ? '?' : '&';
|
||||
}
|
||||
|
||||
$block = $this->block->getByID($id);
|
||||
$this->view->longBlock = $this->block->isLongBlock($block);
|
||||
|
||||
$this->viewType = (isset($params->viewType) and $params->viewType == 'json') ? 'json' : 'html';
|
||||
$this->params = $params;
|
||||
$this->view->code = $this->get->blockid;
|
||||
@@ -609,7 +671,18 @@ class block extends control
|
||||
$num = isset($this->params->num) ? (int)$this->params->num : 0;
|
||||
$type = isset($this->params->type) ? $this->params->type : '';
|
||||
$pager = pager::init(0, $num , 1);
|
||||
$this->view->productStats = $this->loadModel('product')->getStats('order_desc', $this->viewType != 'json' ? $pager : '', $type);
|
||||
|
||||
$productStats = $this->loadModel('product')->getStats('order_desc', $this->viewType != 'json' ? $pager : '', $type);
|
||||
$productIdList = array();
|
||||
foreach($productStats as $product) $productIdList[] = $product->id;
|
||||
|
||||
$this->view->projects = $this->dao->select('t1.product,t2.name')->from(TABLE_PROJECTPRODUCT)->alias('t1')
|
||||
->leftJoin(TABLE_PROJECT)->alias('t2')->on('t1.project=t2.id')
|
||||
->where('t1.product')->in($productIdList)
|
||||
->andWhere('t2.deleted')->eq(0)
|
||||
->orderBy('t1.project')
|
||||
->fetchPairs('product', 'name');
|
||||
$this->view->productStats = $productStats;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -628,6 +701,75 @@ class block extends control
|
||||
$this->view->projectStats = $this->loadModel('project')->getProjectStats($type, $productID = 0, $branch = 0, $itemCounts = 30, $orderBy = 'order_desc', $this->viewType != 'json' ? $pager : '');
|
||||
}
|
||||
|
||||
/**
|
||||
* Print assign to me block.
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function printAssignToMeBlock($longBlock = true)
|
||||
{
|
||||
if(common::hasPriv('todo', 'view')) $hasViewPriv['todo'] = true;
|
||||
if(common::hasPriv('task', 'view')) $hasViewPriv['task'] = true;
|
||||
if(common::hasPriv('bug', 'view')) $hasViewPriv['bug'] = true;
|
||||
|
||||
$params = $this->get->param;
|
||||
$params = json_decode(base64_decode($params));
|
||||
|
||||
if(isset($hasViewPriv['todo']))
|
||||
{
|
||||
$this->app->loadClass('date');
|
||||
$this->app->loadLang('todo');
|
||||
$stmt = $this->dao->select('*')->from(TABLE_TODO)
|
||||
->where("(assignedTo = '{$this->app->user->account}' or (assignedTo = '' and account='{$this->app->user->account}'))")
|
||||
->andWhere('status')->ne('done')
|
||||
->andWhere('cycle')->eq(0)
|
||||
->orderBy('`date`');
|
||||
if(isset($params->todoNum)) $stmt->limit($params->todoNum);
|
||||
$todos = $stmt->fetchAll();
|
||||
|
||||
foreach($todos as $todo)
|
||||
{
|
||||
$todo->begin = date::formatTime($todo->begin);
|
||||
$todo->end = date::formatTime($todo->end);
|
||||
}
|
||||
if(empty($todos)) unset($hasViewPriv['todo']);
|
||||
$this->view->todos = $todos;
|
||||
}
|
||||
if(isset($hasViewPriv['task']))
|
||||
{
|
||||
$this->app->loadLang('task');
|
||||
$stmt = $this->dao->select('*')->from(TABLE_TASK)
|
||||
->where('assignedTo')->eq($this->app->user->account)
|
||||
->andWhere('deleted')->eq('0')
|
||||
->andWhere('status')->ne('closed')
|
||||
->orderBy('id_desc');
|
||||
if(isset($params->taskNum)) $stmt->limit($params->taskNum);
|
||||
$tasks = $stmt->fetchAll();
|
||||
|
||||
if(empty($tasks)) unset($hasViewPriv['task']);
|
||||
$this->view->tasks = $tasks;
|
||||
}
|
||||
if(isset($hasViewPriv['bug']))
|
||||
{
|
||||
$this->app->loadLang('bug');
|
||||
$stmt = $this->dao->select('*')->from(TABLE_BUG)
|
||||
->where('assignedTo')->eq($this->app->user->account)
|
||||
->andWhere('deleted')->eq('0')
|
||||
->andWhere('status')->ne('closed')
|
||||
->orderBy('id_desc');
|
||||
if(isset($params->bugNum)) $stmt->limit($params->bugNum);
|
||||
$bugs = $stmt->fetchAll();
|
||||
|
||||
if(empty($bugs)) unset($hasViewPriv['bug']);
|
||||
$this->view->bugs = $bugs;
|
||||
}
|
||||
|
||||
$this->view->hasViewPriv = $hasViewPriv;
|
||||
$this->view->longBlock = $longBlock;
|
||||
$this->display();
|
||||
}
|
||||
|
||||
/**
|
||||
* Print flow chart block
|
||||
* @access public
|
||||
|
||||
@@ -1,90 +0,0 @@
|
||||
body {background: #fafafa;}
|
||||
|
||||
.page-content {margin-top: -19px; border-top: 1px solid #3280fc;}
|
||||
|
||||
.dashboard {position: relative;}
|
||||
.dashboard .row {margin: 0 auto;}
|
||||
.dashboard .panel-actions {margin-top: 0; margin-right: 0;}
|
||||
.dashboard .panel-heading {line-height: 17px; height: 30px; position: relative;}
|
||||
.dashboard .panel-actions {position: absolute; top: 0; right: 0; height: 30px;}
|
||||
.dashboard .panel-action {display: block; float: left; height: 30px; min-width: 26px; text-align: center; line-height: 30px; padding-left: 3px; padding-right: 3px;}
|
||||
.dashboard .panel-actions > a {color: #666}
|
||||
.dashboard .panel-action-more {font-size: 12px; font-weight: 200}
|
||||
.dashboard .panel-action:hover, .dashboard .panel-actions > .dropdown > a:hover {color: #333; background-color: #ddd; background-color: rgba(0,0,0,0.1)}
|
||||
.dashboard .panel-title {font-size: 13px; color: #333}
|
||||
.dashboard a.panel-title > .icon-double-angle-right {position: relative; filter: alpha(opacity=0); opacity: 0; transition: opacity .2s, left .2s; left: -5px}
|
||||
.dashboard .panel:hover a.panel-title > .icon-double-angle-right {filter: alpha(opacity=100); opacity: 1; left: 0}
|
||||
.dashboard a.panel-title:hover {color: #1a53ff}
|
||||
.dashboard .panel {box-shadow: 0 1px 3px rgba(0,0,0,.05); position: relative; overflow-x: hidden;}
|
||||
.dashboard .panel.with-fixed-header {overflow-x: hidden;}
|
||||
.dashboard .panel-heading + .panel-body {position: absolute; left: 0; top: 30px; right: 0; bottom: 0}
|
||||
.dashboard .panel-dragging-shadow {position: absolute;}
|
||||
.dashboard-empty-message {text-align: center; margin-top: 100px;}
|
||||
.dashboard-empty-message > h5 {margin-bottom: 20px;}
|
||||
.dashboard-actions {position: absolute; top:-20px; right:-10px;}
|
||||
.dashboard-actions > a {display: inline-block; width: 40px; height: 20px; text-align: center; color: #999; border: 1px solid #999; line-height: 20px; background: #1a4f85; color: #fff}
|
||||
.dashboard-actions > a:hover {background: #2e6dad; border-color: #2e6dad}
|
||||
|
||||
#wrap .outer {background-color: #fafafa;}
|
||||
#wrap .outer > .dashboard {margin-left: -10px; margin-right: -10px;}
|
||||
|
||||
/* panel style */
|
||||
.panel-block .table th {background-color: #fafafa}
|
||||
.panel-primary {border-color: transparent;!important;}
|
||||
.panel-success > .panel-heading,
|
||||
.panel-warning > .panel-heading,
|
||||
.panel-primary > .panel-heading,
|
||||
.panel-info > .panel-heading,
|
||||
.panel-danger > .panel-heading {color: #333; border: none; border-bottom: 1px solid rgba(0,0,0,.04);}
|
||||
.panel-success, .panel-success .table-header-fixed th {background: #d1fecb!important; border-color: #b0e4ac!important}
|
||||
.panel-success > .panel-heading {background: #c5f7c1!important; }
|
||||
.panel-warning, .panel-warning .table-header-fixed th {background: #fdfdc7!important; border-color: #e1e09a!important}
|
||||
.panel-warning > .panel-heading {background: #f8f7b6!important;}
|
||||
.panel-primary, .panel-primary .table-header-fixed th {background: #d8f2fa!important; border-color: #badfeb!important}
|
||||
.panel-primary > .panel-heading {background: #c9ecf8!important; color: #333!important; border:none!important;}
|
||||
.panel-info, .panel-info .table-header-fixed th {background: #dcd8fe!important; border-color: #d0c9ee!important}
|
||||
.panel-info > .panel-heading {background: #d4cdf3!important;}
|
||||
.panel-danger, .panel-danger .table-header-fixed th {background: #f5d0f5!important; border-color: #e9b9e9!important}
|
||||
.panel-danger > .panel-heading {background: #f1c3f1!important;}
|
||||
.panel-success .table td, .panel-success .table th,
|
||||
.panel-warning .table td, .panel-warning .table th,
|
||||
.panel-primary .table td, .panel-primary .table th,
|
||||
.panel-info .table td, .panel-info .table th,
|
||||
.panel-danger .table td, .panel-danger .table th {border: none; background-color: transparent}
|
||||
.panel-success .table tr:nth-child(even) > td, .panel-success .table th,
|
||||
.panel-warning .table tr:nth-child(even) > td, .panel-warning .table th,
|
||||
.panel-primary .table tr:nth-child(even) > td, .panel-primary .table th,
|
||||
.panel-info .table tr:nth-child(even) > td, .panel-info .table th,
|
||||
.panel-danger .table tr:nth-child(even) > td, .panel-danger .table th {background: rgba(255,255,255,.25);}
|
||||
.panel-success .table tr:nth-child(odd) > td,
|
||||
.panel-warning .table tr:nth-child(odd) > td,
|
||||
.panel-primary .table tr:nth-child(odd) > td,
|
||||
.panel-info .table tr:nth-child(odd) > td,
|
||||
.panel-danger .table tr:nth-child(odd) > td {background: rgba(0,0,0,.03);}
|
||||
.panel-success .table tr:last-child > td,
|
||||
.panel-warning .table tr:last-child > td,
|
||||
.panel-primary .table tr:last-child > td,
|
||||
.panel-info .table tr:last-child > td
|
||||
.panel-danger .table tr:last-child > td {border-bottom: 1px solid rgba(0,0,0,0.05)}
|
||||
.panel-success .table tr:hover > th,
|
||||
.panel-warning .table tr:hover > th,
|
||||
.panel-primary .table tr:hover > th,
|
||||
.panel-info .table tr:hover > th,
|
||||
.panel-danger .table tr:hover > th {background: none;}
|
||||
.panel-success .table.table-hover tr:hover > td,
|
||||
.panel-warning .table.table-hover tr:hover > td,
|
||||
.panel-primary .table.table-hover tr:hover > td,
|
||||
.panel-info .table.table-hover tr:hover > td,
|
||||
.panel-danger .table.table-hover tr:hover > td {background: rgba(255,255,255,.4);}
|
||||
|
||||
.block.input-group-btn .btn-success {background: #d1fecb; color: #333; text-shadow: none; border-color: #ccc}
|
||||
.block.input-group-btn .btn-warning {background: #fdfdc7; color: #333; text-shadow: none; border-color: #ccc}
|
||||
.block.input-group-btn .btn-info {background: #dcd8fe; color: #333; text-shadow: none; border-color: #ccc}
|
||||
.block.input-group-btn .btn-danger {background: #f5d0f5; color: #333; text-shadow: none; border-color: #ccc}
|
||||
.block.input-group-btn .btn-primary, .block.input-group-btn .btn-primary:focus {background: #d8f2fa; color: #333; text-shadow: none; border-color: #ccc}
|
||||
.block.input-group-btn .btn-success:hover {border-color: #aaa}
|
||||
.block.input-group-btn .btn-warning:hover {border-color: #aaa}
|
||||
.block.input-group-btn .btn-primary:hover {border-color: #aaa}
|
||||
.block.input-group-btn .btn-info:hover {border-color: #aaa}
|
||||
.block.input-group-btn .btn-danger:hover {border-color: #aaa}
|
||||
.block.input-group-btn .btn-primary .caret, .block.input-group-btn .btn-success .caret, .block.input-group-btn .btn-warning .caret, .block.input-group-btn .btn-danger .caret, .block.input-group-btn .btn-info .caret {border-top-color: #333}
|
||||
|
||||
@@ -18,7 +18,7 @@ function getBlocks(moduleID)
|
||||
getNotSourceParams('html', moduleID.replace('hiddenBlock', ''));
|
||||
return true;
|
||||
}
|
||||
if(moduleID == 'html' || moduleID == 'dynamic' || moduleID == 'flowchart')
|
||||
if(moduleID == 'html' || moduleID == 'dynamic' || moduleID == 'flowchart' || moduleID == 'assigntome' || moduleID == 'welcome')
|
||||
{
|
||||
getNotSourceParams(moduleID, blockID);
|
||||
return true;
|
||||
|
||||
@@ -7,16 +7,21 @@
|
||||
*/
|
||||
function deleteBlock(index)
|
||||
{
|
||||
$.getJSON(createLink('block', 'delete', 'index=' + index + '&module=' + module), function(data)
|
||||
{
|
||||
if(data.result != 'success')
|
||||
{
|
||||
alert(data.message);
|
||||
return false;
|
||||
}
|
||||
|
||||
checkEmpty();
|
||||
})
|
||||
if(confirm(config.confirmRemoveBlock))
|
||||
{
|
||||
$.getJSON(createLink('block', 'delete', 'index=' + index + '&module=' + module), function(data)
|
||||
{
|
||||
if(data.result != 'success')
|
||||
{
|
||||
alert(data.message);
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
$('#block' + index).remove();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -40,19 +45,6 @@ function sortBlocks(orders)
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Check dashboard wether is empty
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function checkEmpty()
|
||||
{
|
||||
var $dashboard = $('#dashboard');
|
||||
var hasBlocks = !!$dashboard.children('.row').children().length;
|
||||
$dashboard.find('.dashboard-empty-message').toggleClass('hide', hasBlocks);
|
||||
if(!hasBlocks) $dashboard.find('.dashboard-actions').addClass('hide');
|
||||
}
|
||||
|
||||
/**
|
||||
* Resize block
|
||||
* @param object $event
|
||||
@@ -168,28 +160,27 @@ function hiddenBlock(index)
|
||||
|
||||
$(function()
|
||||
{
|
||||
var $dashboard = $('#dashboard').dashboard(
|
||||
{
|
||||
height : 240,
|
||||
draggable : !useGuest,
|
||||
shadowType : false,
|
||||
afterOrdered : sortBlocks,
|
||||
afterPanelRemoved : deleteBlock,
|
||||
sensitive : true,
|
||||
panelRemovingTip : config.confirmRemoveBlock,
|
||||
resizable : !useGuest,
|
||||
onResize : resizeBlock,
|
||||
afterRefresh : function(e)
|
||||
{
|
||||
var $sortTable = e.$panel.find('.tablesorter');
|
||||
if($sortTable.length) $sortTable.sortTable();
|
||||
initTableHeader();
|
||||
}
|
||||
});
|
||||
// var $dashboard = $('#dashboard').dashboard(
|
||||
// {
|
||||
// height : 240,
|
||||
// draggable : !useGuest,
|
||||
// shadowType : false,
|
||||
// afterOrdered : sortBlocks,
|
||||
// afterPanelRemoved : deleteBlock,
|
||||
// sensitive : true,
|
||||
// panelRemovingTip : config.confirmRemoveBlock,
|
||||
// resizable : !useGuest,
|
||||
// onResize : resizeBlock,
|
||||
// afterRefresh : function(e)
|
||||
// {
|
||||
// var $sortTable = e.$panel.find('.tablesorter');
|
||||
// if($sortTable.length) $sortTable.sortTable();
|
||||
// initTableHeader();
|
||||
// }
|
||||
// });
|
||||
//
|
||||
// // $dashboard.find('ul.dashboard-actions').addClass('hide').children('li').addClass('right').appendTo($('#modulemenu > .nav'));
|
||||
// $dashboard.find('[data-toggle=tooltip]').tooltip({container: 'body'});
|
||||
|
||||
// $dashboard.find('ul.dashboard-actions').addClass('hide').children('li').addClass('right').appendTo($('#modulemenu > .nav'));
|
||||
$dashboard.find('[data-toggle=tooltip]').tooltip({container: 'body'});
|
||||
|
||||
checkEmpty();
|
||||
initTableHeader();
|
||||
// initTableHeader();
|
||||
});
|
||||
|
||||
+79
-53
@@ -10,7 +10,7 @@
|
||||
* @link http://www.ranzhi.org
|
||||
*/
|
||||
$lang->block = new stdclass();
|
||||
$lang->block->common = 'Widget';
|
||||
$lang->block->common = 'Block';
|
||||
$lang->block->name = 'Name';
|
||||
$lang->block->style = 'Style';
|
||||
$lang->block->grid = 'Grid';
|
||||
@@ -25,28 +25,38 @@ $lang->block->order = 'Order';
|
||||
$lang->block->height = 'Height';
|
||||
|
||||
$lang->block->lblModule = 'Module';
|
||||
$lang->block->lblBlock = 'Widget';
|
||||
$lang->block->lblBlock = 'Block';
|
||||
$lang->block->lblNum = 'Number';
|
||||
$lang->block->lblHtml = 'HTML';
|
||||
$lang->block->dynamic = 'Dynamic';
|
||||
$lang->block->assignToMe = 'Assign To Me';
|
||||
$lang->block->lblFlowchart = 'Workflow';
|
||||
$lang->block->welcome = 'Welcome';
|
||||
|
||||
$lang->block->leftToday = 'The rest of the work today';
|
||||
$lang->block->myTask = 'My Task';
|
||||
$lang->block->myStory = 'My Story';
|
||||
$lang->block->myBug = 'My Bug';
|
||||
$lang->block->myProject = 'My ' . $lang->projectCommon;
|
||||
$lang->block->myProduct = 'My ' . $lang->productCommon;
|
||||
$lang->block->delayed = 'Delayed';
|
||||
|
||||
$lang->block->params = new stdclass();
|
||||
$lang->block->params->name = 'Name';
|
||||
$lang->block->params->value = 'Value';
|
||||
|
||||
$lang->block->createBlock = 'Create Widget';
|
||||
$lang->block->createBlock = 'Add';
|
||||
$lang->block->editBlock = 'Edit';
|
||||
$lang->block->ordersSaved = 'Ranking is saved.';
|
||||
$lang->block->confirmRemoveBlock = 'Do you want to remove Widget【{0}】?';
|
||||
$lang->block->ordersSaved = 'Order is saved.';
|
||||
$lang->block->confirmRemoveBlock = 'Do you want to remove Block?';
|
||||
$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 switched on at Admin->Custom.';
|
||||
$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';
|
||||
$lang->block->refresh = 'Refresh';
|
||||
$lang->block->hidden = 'Hide';
|
||||
$lang->block->dynamicInfo = "%s, %s <em>%s</em> %s <a href='%s'>%s</a>.";
|
||||
$lang->block->dynamicInfo = "<span class='timeline-tag'>%s</span>, <span class='timeline-text'>%s <em>%s</em> %s <a href='%s'>%s</a></span>";
|
||||
|
||||
$lang->block->default['product']['1']['title'] = 'Open' . $lang->productCommon;
|
||||
$lang->block->default['product']['1']['title'] = 'Open ' . $lang->productCommon . 's';
|
||||
$lang->block->default['product']['1']['block'] = 'list';
|
||||
$lang->block->default['product']['1']['grid'] = 8;
|
||||
|
||||
@@ -61,7 +71,7 @@ $lang->block->default['product']['2']['params']['num'] = 15;
|
||||
$lang->block->default['product']['2']['params']['orderBy'] = 'id_desc';
|
||||
$lang->block->default['product']['2']['params']['type'] = 'assignedTo';
|
||||
|
||||
$lang->block->default['project']['1']['title'] = 'Doing' . $lang->projectCommon;
|
||||
$lang->block->default['project']['1']['title'] = 'Active ' . $lang->projectCommon . 's';
|
||||
$lang->block->default['project']['1']['block'] = 'list';
|
||||
$lang->block->default['project']['1']['grid'] = 8;
|
||||
|
||||
@@ -101,31 +111,33 @@ $lang->block->default['qa']['3']['params']['num'] = 15;
|
||||
$lang->block->default['qa']['3']['params']['orderBy'] = 'id_desc';
|
||||
$lang->block->default['qa']['3']['params']['type'] = 'wait';
|
||||
|
||||
$lang->block->default['full']['my']['1']['title'] = 'Flowchart';
|
||||
$lang->block->default['full']['my']['1']['block'] = 'flowchart';
|
||||
$lang->block->default['full']['my']['1']['title'] = 'Welcome';
|
||||
$lang->block->default['full']['my']['1']['block'] = 'welcome';
|
||||
$lang->block->default['full']['my']['1']['grid'] = 8;
|
||||
$lang->block->default['full']['my']['1']['source'] = '';
|
||||
$lang->block->default['full']['my']['2']['title'] = 'Dynamic';
|
||||
$lang->block->default['full']['my']['2']['block'] = 'dynamic';
|
||||
$lang->block->default['full']['my']['2']['grid'] = 4;
|
||||
$lang->block->default['full']['my']['2']['source'] = '';
|
||||
$lang->block->default['full']['my']['3'] = $lang->block->default['project']['1'];
|
||||
$lang->block->default['full']['my']['3']['source'] = 'project';
|
||||
$lang->block->default['full']['my']['4']['title'] = 'My To-Dos';
|
||||
$lang->block->default['full']['my']['4']['block'] = 'list';
|
||||
$lang->block->default['full']['my']['4']['grid'] = 4;
|
||||
$lang->block->default['full']['my']['4']['source'] = 'todo';
|
||||
$lang->block->default['full']['my']['4']['params']['num'] = '20';
|
||||
$lang->block->default['full']['my']['5'] = $lang->block->default['product']['1'];
|
||||
$lang->block->default['full']['my']['5']['source'] = 'product';
|
||||
$lang->block->default['full']['my']['6'] = $lang->block->default['project']['2'];
|
||||
$lang->block->default['full']['my']['3']['title'] = 'Flowchart';
|
||||
$lang->block->default['full']['my']['3']['block'] = 'flowchart';
|
||||
$lang->block->default['full']['my']['3']['grid'] = 8;
|
||||
$lang->block->default['full']['my']['3']['source'] = '';
|
||||
$lang->block->default['full']['my']['5']['title'] = 'My Todos';
|
||||
$lang->block->default['full']['my']['5']['block'] = 'list';
|
||||
$lang->block->default['full']['my']['5']['grid'] = 4;
|
||||
$lang->block->default['full']['my']['5']['source'] = 'todo';
|
||||
$lang->block->default['full']['my']['5']['params']['num'] = '20';
|
||||
$lang->block->default['full']['my']['6'] = $lang->block->default['project']['1'];
|
||||
$lang->block->default['full']['my']['6']['source'] = 'project';
|
||||
$lang->block->default['full']['my']['7'] = $lang->block->default['qa']['1'];
|
||||
$lang->block->default['full']['my']['7']['source'] = 'qa';
|
||||
$lang->block->default['full']['my']['8'] = $lang->block->default['product']['2'];
|
||||
$lang->block->default['full']['my']['7'] = $lang->block->default['project']['2'];
|
||||
$lang->block->default['full']['my']['7']['source'] = 'project';
|
||||
$lang->block->default['full']['my']['8'] = $lang->block->default['product']['1'];
|
||||
$lang->block->default['full']['my']['8']['source'] = 'product';
|
||||
$lang->block->default['full']['my']['9'] = $lang->block->default['qa']['2'];
|
||||
$lang->block->default['full']['my']['9']['source'] = 'qa';
|
||||
$lang->block->default['full']['my']['9'] = $lang->block->default['product']['2'];
|
||||
$lang->block->default['full']['my']['9']['source'] = 'product';
|
||||
$lang->block->default['full']['my']['10'] = $lang->block->default['qa']['2'];
|
||||
$lang->block->default['full']['my']['10']['source'] = 'qa';
|
||||
|
||||
$lang->block->default['onlyTest']['my']['1'] = $lang->block->default['qa']['1'];
|
||||
$lang->block->default['onlyTest']['my']['1']['source'] = 'qa';
|
||||
@@ -134,7 +146,7 @@ $lang->block->default['onlyTest']['my']['2']['title'] = 'Dynamic';
|
||||
$lang->block->default['onlyTest']['my']['2']['block'] = 'dynamic';
|
||||
$lang->block->default['onlyTest']['my']['2']['grid'] = 4;
|
||||
$lang->block->default['onlyTest']['my']['2']['source'] = '';
|
||||
$lang->block->default['onlyTest']['my']['3']['title'] = 'My To-Dos';
|
||||
$lang->block->default['onlyTest']['my']['3']['title'] = 'My Todo';
|
||||
$lang->block->default['onlyTest']['my']['3']['block'] = 'list';
|
||||
$lang->block->default['onlyTest']['my']['3']['grid'] = 6;
|
||||
$lang->block->default['onlyTest']['my']['3']['source'] = 'todo';
|
||||
@@ -150,7 +162,7 @@ $lang->block->default['onlyStory']['my']['2']['title'] = 'Dynamic';
|
||||
$lang->block->default['onlyStory']['my']['2']['block'] = 'dynamic';
|
||||
$lang->block->default['onlyStory']['my']['2']['grid'] = 4;
|
||||
$lang->block->default['onlyStory']['my']['2']['source'] = '';
|
||||
$lang->block->default['onlyStory']['my']['3']['title'] = 'My To-Dos';
|
||||
$lang->block->default['onlyStory']['my']['3']['title'] = 'My Todo';
|
||||
$lang->block->default['onlyStory']['my']['3']['block'] = 'list';
|
||||
$lang->block->default['onlyStory']['my']['3']['grid'] = 6;
|
||||
$lang->block->default['onlyStory']['my']['3']['source'] = 'todo';
|
||||
@@ -166,7 +178,7 @@ $lang->block->default['onlyTask']['my']['2']['title'] = 'Dynamic';
|
||||
$lang->block->default['onlyTask']['my']['2']['block'] = 'dynamic';
|
||||
$lang->block->default['onlyTask']['my']['2']['grid'] = 4;
|
||||
$lang->block->default['onlyTask']['my']['2']['source'] = '';
|
||||
$lang->block->default['onlyTask']['my']['3']['title'] = 'My To-Dos';
|
||||
$lang->block->default['onlyTask']['my']['3']['title'] = 'My Todo';
|
||||
$lang->block->default['onlyTask']['my']['3']['block'] = 'list';
|
||||
$lang->block->default['onlyTask']['my']['3']['grid'] = 6;
|
||||
$lang->block->default['onlyTask']['my']['3']['source'] = 'todo';
|
||||
@@ -177,11 +189,11 @@ $lang->block->default['onlyTask']['my']['4']['grid'] = 6;
|
||||
|
||||
$lang->block->num = 'Number';
|
||||
$lang->block->type = 'Type';
|
||||
$lang->block->orderBy = 'Ranking';
|
||||
$lang->block->orderBy = 'Order by';
|
||||
|
||||
$lang->block->availableBlocks = new stdclass();
|
||||
|
||||
$lang->block->availableBlocks->todo = 'My To-Dos';
|
||||
$lang->block->availableBlocks->todo = 'My Todo';
|
||||
$lang->block->availableBlocks->task = 'My Tasks';
|
||||
$lang->block->availableBlocks->bug = 'My Bugs';
|
||||
$lang->block->availableBlocks->case = 'My Cases';
|
||||
@@ -189,21 +201,21 @@ $lang->block->availableBlocks->story = 'My Stories';
|
||||
$lang->block->availableBlocks->product = $lang->productCommon . 'List';
|
||||
$lang->block->availableBlocks->project = $lang->projectCommon . 'List';
|
||||
$lang->block->availableBlocks->plan = 'Plans';
|
||||
$lang->block->availableBlocks->release = 'Release List';
|
||||
$lang->block->availableBlocks->release = 'Releases';
|
||||
$lang->block->availableBlocks->build = 'Builds';
|
||||
$lang->block->availableBlocks->testtask = 'Test Builds';
|
||||
|
||||
$lang->block->moduleList['product'] = $lang->productCommon;
|
||||
$lang->block->moduleList['project'] = $lang->projectCommon;
|
||||
$lang->block->moduleList['qa'] = 'Testing';
|
||||
$lang->block->moduleList['todo'] = 'To-Dos';
|
||||
$lang->block->moduleList['qa'] = 'QA';
|
||||
$lang->block->moduleList['todo'] = 'Todo';
|
||||
|
||||
$lang->block->modules['product'] = new stdclass();
|
||||
$lang->block->modules['product']->availableBlocks = new stdclass();
|
||||
$lang->block->modules['product']->availableBlocks->list = $lang->productCommon . 'List';
|
||||
$lang->block->modules['product']->availableBlocks->story = 'Stories';
|
||||
$lang->block->modules['product']->availableBlocks->plan = 'Plans';
|
||||
$lang->block->modules['product']->availableBlocks->release = 'Release List';
|
||||
$lang->block->modules['product']->availableBlocks->release = 'Releases';
|
||||
$lang->block->modules['project'] = new stdclass();
|
||||
$lang->block->modules['project']->availableBlocks = new stdclass();
|
||||
$lang->block->modules['project']->availableBlocks->list = $lang->projectCommon . 'List';
|
||||
@@ -216,7 +228,7 @@ $lang->block->modules['qa']->availableBlocks->case = 'Cases';
|
||||
$lang->block->modules['qa']->availableBlocks->testtask = 'Test Builds';
|
||||
$lang->block->modules['todo'] = new stdclass();
|
||||
$lang->block->modules['todo']->availableBlocks = new stdclass();
|
||||
$lang->block->modules['todo']->availableBlocks->list = 'To-Dos';
|
||||
$lang->block->modules['todo']->availableBlocks->list = 'Todo';
|
||||
|
||||
$lang->block->orderByList = new stdclass();
|
||||
|
||||
@@ -225,8 +237,8 @@ $lang->block->orderByList->task['id_asc'] = 'ID Ascending';
|
||||
$lang->block->orderByList->task['id_desc'] = 'ID Descending';
|
||||
$lang->block->orderByList->task['pri_asc'] = 'Priority Ascending';
|
||||
$lang->block->orderByList->task['pri_desc'] = 'Priority Descending';
|
||||
$lang->block->orderByList->task['estimate_asc'] = 'Estimated Time Ascending';
|
||||
$lang->block->orderByList->task['estimate_desc'] = 'Estimated Time Descending';
|
||||
$lang->block->orderByList->task['estimate_asc'] = 'Estimate Ascending';
|
||||
$lang->block->orderByList->task['estimate_desc'] = 'Estimate Descending';
|
||||
$lang->block->orderByList->task['status_asc'] = 'Status Ascending';
|
||||
$lang->block->orderByList->task['status_desc'] = 'Status Descending';
|
||||
$lang->block->orderByList->task['deadline_asc'] = 'Deadline Ascending';
|
||||
@@ -237,25 +249,29 @@ $lang->block->orderByList->bug['id_asc'] = 'ID Ascending';
|
||||
$lang->block->orderByList->bug['id_desc'] = 'ID Descending';
|
||||
$lang->block->orderByList->bug['pri_asc'] = 'Priority Ascending';
|
||||
$lang->block->orderByList->bug['pri_desc'] = 'Priority Descending';
|
||||
$lang->block->orderByList->bug['severity_asc'] = 'Level Ascending';
|
||||
$lang->block->orderByList->bug['severity_desc'] = 'Level Descending';
|
||||
$lang->block->orderByList->bug['severity_asc'] = 'Severity Ascending';
|
||||
$lang->block->orderByList->bug['severity_desc'] = 'Severity Descending';
|
||||
|
||||
$lang->block->orderByList->case = array();
|
||||
$lang->block->orderByList->case['id_asc'] = 'ID Ascending';
|
||||
$lang->block->orderByList->case['id_desc'] = 'ID Descending';
|
||||
$lang->block->orderByList->case['pri_asc'] = 'PriorityAscending';
|
||||
$lang->block->orderByList->case['pri_desc'] = 'PriorityDescending';
|
||||
$lang->block->orderByList->case['pri_asc'] = 'Priority Ascending';
|
||||
$lang->block->orderByList->case['pri_desc'] = 'Priority Descending';
|
||||
|
||||
$lang->block->orderByList->story = array();
|
||||
$lang->block->orderByList->story['id_asc'] = 'ID Ascending';
|
||||
$lang->block->orderByList->story['id_desc'] = 'ID Descending';
|
||||
$lang->block->orderByList->story['pri_asc'] = 'PriorityAscending';
|
||||
$lang->block->orderByList->story['pri_desc'] = 'PriorityDescending';
|
||||
$lang->block->orderByList->story['pri_asc'] = 'Priority Ascending';
|
||||
$lang->block->orderByList->story['pri_desc'] = 'Priority Descending';
|
||||
$lang->block->orderByList->story['status_asc'] = 'Status Ascending';
|
||||
$lang->block->orderByList->story['status_desc'] = 'Status Descending';
|
||||
$lang->block->orderByList->story['stage_asc'] = 'Stage Ascending';
|
||||
$lang->block->orderByList->story['stage_desc'] = 'Stage Descending';
|
||||
|
||||
$lang->block->todoNum = 'Todo Number';
|
||||
$lang->block->taskNum = 'Task Number';
|
||||
$lang->block->bugNum = 'Bug Number';
|
||||
|
||||
$lang->block->typeList = new stdclass();
|
||||
|
||||
$lang->block->typeList->task['assignedTo'] = 'Assigned to Me';
|
||||
@@ -266,7 +282,7 @@ $lang->block->typeList->task['canceledBy'] = 'Cancelled by Me';
|
||||
|
||||
$lang->block->typeList->bug['assignedTo'] = 'Assigned to Me';
|
||||
$lang->block->typeList->bug['openedBy'] = 'Created by Me';
|
||||
$lang->block->typeList->bug['resolvedBy'] = 'Solved by Me';
|
||||
$lang->block->typeList->bug['resolvedBy'] = 'Resolved by Me';
|
||||
$lang->block->typeList->bug['closedBy'] = 'Closed by Me';
|
||||
|
||||
$lang->block->typeList->case['assigntome'] = 'Assigned to Me';
|
||||
@@ -280,15 +296,17 @@ $lang->block->typeList->story['closedBy'] = 'Closed by Me' ;
|
||||
$lang->block->typeList->product['noclosed'] = 'Open';
|
||||
$lang->block->typeList->product['closed'] = 'Closed';
|
||||
$lang->block->typeList->product['all'] = 'All';
|
||||
$lang->block->typeList->product['involved'] = 'Involved';
|
||||
|
||||
$lang->block->typeList->project['undone'] = 'Undone';
|
||||
$lang->block->typeList->project['isdoing'] = 'Doing';
|
||||
$lang->block->typeList->project['all'] = 'All';
|
||||
$lang->block->typeList->project['undone'] = 'Unfinished';
|
||||
$lang->block->typeList->project['isdoing'] = 'Doing';
|
||||
$lang->block->typeList->project['all'] = 'All';
|
||||
$lang->block->typeList->project['involved'] = 'Involved';
|
||||
|
||||
$lang->block->typeList->testtask['wait'] = 'Testing Pending';
|
||||
$lang->block->typeList->testtask['doing'] = 'Testing';
|
||||
$lang->block->typeList->testtask['wait'] = 'Wait';
|
||||
$lang->block->typeList->testtask['doing'] = 'Doing';
|
||||
$lang->block->typeList->testtask['blocked'] = 'Blocked';
|
||||
$lang->block->typeList->testtask['done'] = 'Tested';
|
||||
$lang->block->typeList->testtask['done'] = 'Done';
|
||||
$lang->block->typeList->testtask['all'] = 'All';
|
||||
|
||||
$lang->block->modules['product']->moreLinkList = new stdclass();
|
||||
@@ -300,16 +318,24 @@ $lang->block->modules['project']->moreLinkList->task = 'my|task|type=%s';
|
||||
$lang->block->modules['qa']->moreLinkList = new stdclass();
|
||||
$lang->block->modules['qa']->moreLinkList->bug = 'my|bug|type=%s';
|
||||
$lang->block->modules['qa']->moreLinkList->case = 'my|testcase|type=%s';
|
||||
$lang->block->modules['qa']->moreLinkList->testtask = 'my|testtask|type=%s';
|
||||
$lang->block->modules['qa']->moreLinkList->testtask = 'testtask|browse|type=%s';
|
||||
$lang->block->modules['todo']->moreLinkList = new stdclass();
|
||||
$lang->block->modules['todo']->moreLinkList->list = 'my|todo|type=all';
|
||||
$lang->block->modules['common'] = new stdclass();
|
||||
$lang->block->modules['common']->moreLinkList = new stdclass();
|
||||
$lang->block->modules['common']->moreLinkList->dynamic = 'company|dynamic|';
|
||||
|
||||
$lang->block->welcomeList['06:00'] = 'Good morning, %s';
|
||||
$lang->block->welcomeList['11:30'] = 'Good noon, %s';
|
||||
$lang->block->welcomeList['13:30'] = 'Good afternoon, %s';
|
||||
$lang->block->welcomeList['19:00'] = 'Good evening, %s';
|
||||
|
||||
$lang->block->gridOptions[8] = 'Left';
|
||||
$lang->block->gridOptions[4] = 'Right';
|
||||
|
||||
$lang->block->flowchart = array();
|
||||
$lang->block->flowchart[] = array('Administration', 'Manage a Company', 'Add Users', 'Maintain Privileges');
|
||||
$lang->block->flowchart[] = array($lang->productCommon . ' Manager', 'Add ' . $lang->productCommon, 'Maintain Modules', 'Maintain Plans', 'Maintain Stories', 'Create Release');
|
||||
$lang->block->flowchart[] = array($lang->projectCommon . ' Manager', 'Add ' . $lang->projectCommon, 'Maintain Teams', 'Link ' . $lang->productCommon . 's', 'Link Stories', 'Decompose Tasks');
|
||||
$lang->block->flowchart[] = array('DEV Team', 'Claim Tasks/Bugs', 'Update Status', 'Finish Tasks/Bugs');
|
||||
$lang->block->flowchart[] = array('Testing Team', 'Write Cases', 'Implement Cases', 'Report Bugs', 'Fix Bugs', 'Close Bugs');
|
||||
$lang->block->flowchart[] = array('QA Team', 'Write Cases', 'Implement Cases', 'Report Bugs', 'Resolve Bugs', 'Close Bugs');
|
||||
|
||||
+50
-24
@@ -13,7 +13,7 @@ $lang->block = new stdclass();
|
||||
$lang->block->common = '区块';
|
||||
$lang->block->name = '区块名称';
|
||||
$lang->block->style = '外观';
|
||||
$lang->block->grid = '宽度';
|
||||
$lang->block->grid = '位置';
|
||||
$lang->block->color = '颜色';
|
||||
|
||||
$lang->block->account = '所属用户';
|
||||
@@ -29,7 +29,17 @@ $lang->block->lblBlock = '区块';
|
||||
$lang->block->lblNum = '条数';
|
||||
$lang->block->lblHtml = 'HTML内容';
|
||||
$lang->block->dynamic = '最新动态';
|
||||
$lang->block->assignToMe = '指派给我';
|
||||
$lang->block->lblFlowchart = '流程图';
|
||||
$lang->block->welcome = '欢迎总览';
|
||||
|
||||
$lang->block->leftToday = '今天剩余工作总计';
|
||||
$lang->block->myTask = '我的任务';
|
||||
$lang->block->myStory = '我的需求';
|
||||
$lang->block->myBug = '我的BUG';
|
||||
$lang->block->myProject = '进行中的' . $lang->projectCommon;
|
||||
$lang->block->myProduct = '未关闭的' . $lang->productCommon;
|
||||
$lang->block->delayed = '已延期';
|
||||
|
||||
$lang->block->params = new stdclass();
|
||||
$lang->block->params->name = '参数名称';
|
||||
@@ -38,13 +48,13 @@ $lang->block->params->value = '参数值';
|
||||
$lang->block->createBlock = '添加区块';
|
||||
$lang->block->editBlock = '编辑区块';
|
||||
$lang->block->ordersSaved = '排序已保存';
|
||||
$lang->block->confirmRemoveBlock = '确定移除区块【{0}】吗?';
|
||||
$lang->block->confirmRemoveBlock = '确定移除区块吗?';
|
||||
$lang->block->closeForever = '永久关闭';
|
||||
$lang->block->confirmClose = '确定永久关闭该区块吗?闭后所有人都将无法使用该区块,可以在后台自定义中打开';
|
||||
$lang->block->remove = '移除';
|
||||
$lang->block->refresh = '刷新';
|
||||
$lang->block->hidden = '隐藏';
|
||||
$lang->block->dynamicInfo = "%s, %s <em>%s</em> %s <a href='%s'>%s</a>。";
|
||||
$lang->block->dynamicInfo = "<span class='timeline-tag'>%s</span>, <span class='timeline-text'>%s <em>%s</em> %s <a href='%s'>%s</a></span>";
|
||||
|
||||
$lang->block->default['product']['1']['title'] = '未关闭的' . $lang->productCommon;
|
||||
$lang->block->default['product']['1']['block'] = 'list';
|
||||
@@ -101,31 +111,33 @@ $lang->block->default['qa']['3']['params']['num'] = 15;
|
||||
$lang->block->default['qa']['3']['params']['orderBy'] = 'id_desc';
|
||||
$lang->block->default['qa']['3']['params']['type'] = 'wait';
|
||||
|
||||
$lang->block->default['full']['my']['1']['title'] = '流程图';
|
||||
$lang->block->default['full']['my']['1']['block'] = 'flowchart';
|
||||
$lang->block->default['full']['my']['1']['title'] = '欢迎';
|
||||
$lang->block->default['full']['my']['1']['block'] = 'welcome';
|
||||
$lang->block->default['full']['my']['1']['grid'] = 8;
|
||||
$lang->block->default['full']['my']['1']['source'] = '';
|
||||
$lang->block->default['full']['my']['2']['title'] = '最新动态';
|
||||
$lang->block->default['full']['my']['2']['block'] = 'dynamic';
|
||||
$lang->block->default['full']['my']['2']['grid'] = 4;
|
||||
$lang->block->default['full']['my']['2']['source'] = '';
|
||||
$lang->block->default['full']['my']['3'] = $lang->block->default['project']['1'];
|
||||
$lang->block->default['full']['my']['3']['source'] = 'project';
|
||||
$lang->block->default['full']['my']['4']['title'] = '我的待办';
|
||||
$lang->block->default['full']['my']['4']['block'] = 'list';
|
||||
$lang->block->default['full']['my']['4']['grid'] = 4;
|
||||
$lang->block->default['full']['my']['4']['source'] = 'todo';
|
||||
$lang->block->default['full']['my']['4']['params']['num'] = '20';
|
||||
$lang->block->default['full']['my']['5'] = $lang->block->default['product']['1'];
|
||||
$lang->block->default['full']['my']['5']['source'] = 'product';
|
||||
$lang->block->default['full']['my']['6'] = $lang->block->default['project']['2'];
|
||||
$lang->block->default['full']['my']['3']['title'] = '流程图';
|
||||
$lang->block->default['full']['my']['3']['block'] = 'flowchart';
|
||||
$lang->block->default['full']['my']['3']['grid'] = 8;
|
||||
$lang->block->default['full']['my']['3']['source'] = '';
|
||||
$lang->block->default['full']['my']['5']['title'] = '我的待办';
|
||||
$lang->block->default['full']['my']['5']['block'] = 'list';
|
||||
$lang->block->default['full']['my']['5']['grid'] = 4;
|
||||
$lang->block->default['full']['my']['5']['source'] = 'todo';
|
||||
$lang->block->default['full']['my']['5']['params']['num'] = '20';
|
||||
$lang->block->default['full']['my']['6'] = $lang->block->default['project']['1'];
|
||||
$lang->block->default['full']['my']['6']['source'] = 'project';
|
||||
$lang->block->default['full']['my']['7'] = $lang->block->default['qa']['1'];
|
||||
$lang->block->default['full']['my']['7']['source'] = 'qa';
|
||||
$lang->block->default['full']['my']['8'] = $lang->block->default['product']['2'];
|
||||
$lang->block->default['full']['my']['7'] = $lang->block->default['project']['2'];
|
||||
$lang->block->default['full']['my']['7']['source'] = 'project';
|
||||
$lang->block->default['full']['my']['8'] = $lang->block->default['product']['1'];
|
||||
$lang->block->default['full']['my']['8']['source'] = 'product';
|
||||
$lang->block->default['full']['my']['9'] = $lang->block->default['qa']['2'];
|
||||
$lang->block->default['full']['my']['9']['source'] = 'qa';
|
||||
$lang->block->default['full']['my']['9'] = $lang->block->default['product']['2'];
|
||||
$lang->block->default['full']['my']['9']['source'] = 'product';
|
||||
$lang->block->default['full']['my']['10'] = $lang->block->default['qa']['2'];
|
||||
$lang->block->default['full']['my']['10']['source'] = 'qa';
|
||||
|
||||
$lang->block->default['onlyTest']['my']['1'] = $lang->block->default['qa']['1'];
|
||||
$lang->block->default['onlyTest']['my']['1']['source'] = 'qa';
|
||||
@@ -256,6 +268,10 @@ $lang->block->orderByList->story['status_desc'] = '状态倒序';
|
||||
$lang->block->orderByList->story['stage_asc'] = '阶段正序';
|
||||
$lang->block->orderByList->story['stage_desc'] = '阶段倒序';
|
||||
|
||||
$lang->block->todoNum = '待办数';
|
||||
$lang->block->taskNum = '任务数';
|
||||
$lang->block->bugNum = 'Bug数';
|
||||
|
||||
$lang->block->typeList = new stdclass();
|
||||
|
||||
$lang->block->typeList->task['assignedTo'] = '指派给我';
|
||||
@@ -280,10 +296,12 @@ $lang->block->typeList->story['closedBy'] = '由我关闭';
|
||||
$lang->block->typeList->product['noclosed'] = '未关闭';
|
||||
$lang->block->typeList->product['closed'] = '已关闭';
|
||||
$lang->block->typeList->product['all'] = '全部';
|
||||
$lang->block->typeList->product['involved'] = '我参与的';
|
||||
|
||||
$lang->block->typeList->project['undone'] = '未完成';
|
||||
$lang->block->typeList->project['isdoing'] = '进行中';
|
||||
$lang->block->typeList->project['all'] = '全部';
|
||||
$lang->block->typeList->project['undone'] = '未完成';
|
||||
$lang->block->typeList->project['isdoing'] = '进行中';
|
||||
$lang->block->typeList->project['all'] = '全部';
|
||||
$lang->block->typeList->project['involved'] = '我参与的';
|
||||
|
||||
$lang->block->typeList->testtask['wait'] = '待测版本';
|
||||
$lang->block->typeList->testtask['doing'] = '测试中版本';
|
||||
@@ -300,13 +318,21 @@ $lang->block->modules['project']->moreLinkList->task = 'my|task|type=%s';
|
||||
$lang->block->modules['qa']->moreLinkList = new stdclass();
|
||||
$lang->block->modules['qa']->moreLinkList->bug = 'my|bug|type=%s';
|
||||
$lang->block->modules['qa']->moreLinkList->case = 'my|testcase|type=%s';
|
||||
$lang->block->modules['qa']->moreLinkList->testtask = 'my|testtask|type=%s';
|
||||
$lang->block->modules['qa']->moreLinkList->testtask = 'testtask|browse|type=%s';
|
||||
$lang->block->modules['todo']->moreLinkList = new stdclass();
|
||||
$lang->block->modules['todo']->moreLinkList->list = 'my|todo|type=all';
|
||||
$lang->block->modules['common'] = new stdclass();
|
||||
$lang->block->modules['common']->moreLinkList = new stdclass();
|
||||
$lang->block->modules['common']->moreLinkList->dynamic = 'company|dynamic|';
|
||||
|
||||
$lang->block->welcomeList['06:00'] = '%s,早上好!';
|
||||
$lang->block->welcomeList['11:30'] = '%s,中文好!';
|
||||
$lang->block->welcomeList['13:30'] = '%s,下午好!';
|
||||
$lang->block->welcomeList['19:00'] = '%s,晚上好!';
|
||||
|
||||
$lang->block->gridOptions[8] = '左侧';
|
||||
$lang->block->gridOptions[4] = '右侧';
|
||||
|
||||
$lang->block->flowchart = array();
|
||||
$lang->block->flowchart[] = array('管理员', '维护公司', '添加用户', '维护权限');
|
||||
$lang->block->flowchart[] = array($lang->productCommon . '经理', '创建' . $lang->productCommon, '维护模块', '维护计划', '维护需求', '创建发布');
|
||||
|
||||
+50
-24
@@ -13,7 +13,7 @@ $lang->block = new stdclass();
|
||||
$lang->block->common = '區塊';
|
||||
$lang->block->name = '區塊名稱';
|
||||
$lang->block->style = '外觀';
|
||||
$lang->block->grid = '寬度';
|
||||
$lang->block->grid = '位置';
|
||||
$lang->block->color = '顏色';
|
||||
|
||||
$lang->block->account = '所屬用戶';
|
||||
@@ -29,7 +29,17 @@ $lang->block->lblBlock = '區塊';
|
||||
$lang->block->lblNum = '條數';
|
||||
$lang->block->lblHtml = 'HTML內容';
|
||||
$lang->block->dynamic = '最新動態';
|
||||
$lang->block->assignToMe = '指派給我';
|
||||
$lang->block->lblFlowchart = '流程圖';
|
||||
$lang->block->welcome = '歡迎總覽';
|
||||
|
||||
$lang->block->leftToday = '今天剩餘工作總計';
|
||||
$lang->block->myTask = '我的任務';
|
||||
$lang->block->myStory = '我的需求';
|
||||
$lang->block->myBug = '我的BUG';
|
||||
$lang->block->myProject = '進行中的' . $lang->projectCommon;
|
||||
$lang->block->myProduct = '未關閉的' . $lang->productCommon;
|
||||
$lang->block->delayed = '已延期';
|
||||
|
||||
$lang->block->params = new stdclass();
|
||||
$lang->block->params->name = '參數名稱';
|
||||
@@ -38,13 +48,13 @@ $lang->block->params->value = '參數值';
|
||||
$lang->block->createBlock = '添加區塊';
|
||||
$lang->block->editBlock = '編輯區塊';
|
||||
$lang->block->ordersSaved = '排序已保存';
|
||||
$lang->block->confirmRemoveBlock = '確定移除區塊【{0}】嗎?';
|
||||
$lang->block->confirmRemoveBlock = '確定移除區塊嗎?';
|
||||
$lang->block->closeForever = '永久關閉';
|
||||
$lang->block->confirmClose = '確定永久關閉該區塊嗎?閉後所有人都將無法使用該區塊,可以在後台自定義中打開';
|
||||
$lang->block->remove = '移除';
|
||||
$lang->block->refresh = '刷新';
|
||||
$lang->block->hidden = '隱藏';
|
||||
$lang->block->dynamicInfo = "%s, %s <em>%s</em> %s <a href='%s'>%s</a>。";
|
||||
$lang->block->dynamicInfo = "<span class='timeline-tag'>%s</span>, <span class='timeline-text'>%s <em>%s</em> %s <a href='%s'>%s</a></span>";
|
||||
|
||||
$lang->block->default['product']['1']['title'] = '未關閉的' . $lang->productCommon;
|
||||
$lang->block->default['product']['1']['block'] = 'list';
|
||||
@@ -101,31 +111,33 @@ $lang->block->default['qa']['3']['params']['num'] = 15;
|
||||
$lang->block->default['qa']['3']['params']['orderBy'] = 'id_desc';
|
||||
$lang->block->default['qa']['3']['params']['type'] = 'wait';
|
||||
|
||||
$lang->block->default['full']['my']['1']['title'] = '流程圖';
|
||||
$lang->block->default['full']['my']['1']['block'] = 'flowchart';
|
||||
$lang->block->default['full']['my']['1']['title'] = '歡迎';
|
||||
$lang->block->default['full']['my']['1']['block'] = 'welcome';
|
||||
$lang->block->default['full']['my']['1']['grid'] = 8;
|
||||
$lang->block->default['full']['my']['1']['source'] = '';
|
||||
$lang->block->default['full']['my']['2']['title'] = '最新動態';
|
||||
$lang->block->default['full']['my']['2']['block'] = 'dynamic';
|
||||
$lang->block->default['full']['my']['2']['grid'] = 4;
|
||||
$lang->block->default['full']['my']['2']['source'] = '';
|
||||
$lang->block->default['full']['my']['3'] = $lang->block->default['project']['1'];
|
||||
$lang->block->default['full']['my']['3']['source'] = 'project';
|
||||
$lang->block->default['full']['my']['4']['title'] = '我的待辦';
|
||||
$lang->block->default['full']['my']['4']['block'] = 'list';
|
||||
$lang->block->default['full']['my']['4']['grid'] = 4;
|
||||
$lang->block->default['full']['my']['4']['source'] = 'todo';
|
||||
$lang->block->default['full']['my']['4']['params']['num'] = '20';
|
||||
$lang->block->default['full']['my']['5'] = $lang->block->default['product']['1'];
|
||||
$lang->block->default['full']['my']['5']['source'] = 'product';
|
||||
$lang->block->default['full']['my']['6'] = $lang->block->default['project']['2'];
|
||||
$lang->block->default['full']['my']['3']['title'] = '流程圖';
|
||||
$lang->block->default['full']['my']['3']['block'] = 'flowchart';
|
||||
$lang->block->default['full']['my']['3']['grid'] = 8;
|
||||
$lang->block->default['full']['my']['3']['source'] = '';
|
||||
$lang->block->default['full']['my']['5']['title'] = '我的待辦';
|
||||
$lang->block->default['full']['my']['5']['block'] = 'list';
|
||||
$lang->block->default['full']['my']['5']['grid'] = 4;
|
||||
$lang->block->default['full']['my']['5']['source'] = 'todo';
|
||||
$lang->block->default['full']['my']['5']['params']['num'] = '20';
|
||||
$lang->block->default['full']['my']['6'] = $lang->block->default['project']['1'];
|
||||
$lang->block->default['full']['my']['6']['source'] = 'project';
|
||||
$lang->block->default['full']['my']['7'] = $lang->block->default['qa']['1'];
|
||||
$lang->block->default['full']['my']['7']['source'] = 'qa';
|
||||
$lang->block->default['full']['my']['8'] = $lang->block->default['product']['2'];
|
||||
$lang->block->default['full']['my']['7'] = $lang->block->default['project']['2'];
|
||||
$lang->block->default['full']['my']['7']['source'] = 'project';
|
||||
$lang->block->default['full']['my']['8'] = $lang->block->default['product']['1'];
|
||||
$lang->block->default['full']['my']['8']['source'] = 'product';
|
||||
$lang->block->default['full']['my']['9'] = $lang->block->default['qa']['2'];
|
||||
$lang->block->default['full']['my']['9']['source'] = 'qa';
|
||||
$lang->block->default['full']['my']['9'] = $lang->block->default['product']['2'];
|
||||
$lang->block->default['full']['my']['9']['source'] = 'product';
|
||||
$lang->block->default['full']['my']['10'] = $lang->block->default['qa']['2'];
|
||||
$lang->block->default['full']['my']['10']['source'] = 'qa';
|
||||
|
||||
$lang->block->default['onlyTest']['my']['1'] = $lang->block->default['qa']['1'];
|
||||
$lang->block->default['onlyTest']['my']['1']['source'] = 'qa';
|
||||
@@ -256,6 +268,10 @@ $lang->block->orderByList->story['status_desc'] = '狀態倒序';
|
||||
$lang->block->orderByList->story['stage_asc'] = '階段正序';
|
||||
$lang->block->orderByList->story['stage_desc'] = '階段倒序';
|
||||
|
||||
$lang->block->todoNum = '待辦數';
|
||||
$lang->block->taskNum = '任務數';
|
||||
$lang->block->bugNum = 'Bug數';
|
||||
|
||||
$lang->block->typeList = new stdclass();
|
||||
|
||||
$lang->block->typeList->task['assignedTo'] = '指派給我';
|
||||
@@ -280,10 +296,12 @@ $lang->block->typeList->story['closedBy'] = '由我關閉';
|
||||
$lang->block->typeList->product['noclosed'] = '未關閉';
|
||||
$lang->block->typeList->product['closed'] = '已關閉';
|
||||
$lang->block->typeList->product['all'] = '全部';
|
||||
$lang->block->typeList->product['involved'] = '我參與的';
|
||||
|
||||
$lang->block->typeList->project['undone'] = '未完成';
|
||||
$lang->block->typeList->project['isdoing'] = '進行中';
|
||||
$lang->block->typeList->project['all'] = '全部';
|
||||
$lang->block->typeList->project['undone'] = '未完成';
|
||||
$lang->block->typeList->project['isdoing'] = '進行中';
|
||||
$lang->block->typeList->project['all'] = '全部';
|
||||
$lang->block->typeList->project['involved'] = '我參與的';
|
||||
|
||||
$lang->block->typeList->testtask['wait'] = '待測版本';
|
||||
$lang->block->typeList->testtask['doing'] = '測試中版本';
|
||||
@@ -300,13 +318,21 @@ $lang->block->modules['project']->moreLinkList->task = 'my|task|type=%s';
|
||||
$lang->block->modules['qa']->moreLinkList = new stdclass();
|
||||
$lang->block->modules['qa']->moreLinkList->bug = 'my|bug|type=%s';
|
||||
$lang->block->modules['qa']->moreLinkList->case = 'my|testcase|type=%s';
|
||||
$lang->block->modules['qa']->moreLinkList->testtask = 'my|testtask|type=%s';
|
||||
$lang->block->modules['qa']->moreLinkList->testtask = 'testtask|browse|type=%s';
|
||||
$lang->block->modules['todo']->moreLinkList = new stdclass();
|
||||
$lang->block->modules['todo']->moreLinkList->list = 'my|todo|type=all';
|
||||
$lang->block->modules['common'] = new stdclass();
|
||||
$lang->block->modules['common']->moreLinkList = new stdclass();
|
||||
$lang->block->modules['common']->moreLinkList->dynamic = 'company|dynamic|';
|
||||
|
||||
$lang->block->welcomeList['06:00'] = '%s,早上好!';
|
||||
$lang->block->welcomeList['11:30'] = '%s,中文好!';
|
||||
$lang->block->welcomeList['13:30'] = '%s,下午好!';
|
||||
$lang->block->welcomeList['19:00'] = '%s,晚上好!';
|
||||
|
||||
$lang->block->gridOptions[8] = '左側';
|
||||
$lang->block->gridOptions[4] = '右側';
|
||||
|
||||
$lang->block->flowchart = array();
|
||||
$lang->block->flowchart[] = array('管理員', '維護公司', '添加用戶', '維護權限');
|
||||
$lang->block->flowchart[] = array($lang->productCommon . '經理', '創建' . $lang->productCommon, '維護模組', '維護計劃', '維護需求', '創建發佈');
|
||||
|
||||
@@ -50,6 +50,7 @@ class blockModel extends model
|
||||
|
||||
$data->params = helper::jsonEncode($data->params);
|
||||
$this->dao->replace(TABLE_BLOCK)->data($data)->exec();
|
||||
if(!dao::isError()) $this->loadModel('score')->create('block', 'set');
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -407,6 +408,23 @@ class blockModel extends model
|
||||
return json_encode($this->onlyNumParams($module, $params));
|
||||
}
|
||||
|
||||
public function getAssignToMeParams()
|
||||
{
|
||||
$params->todoNum['name'] = $this->lang->block->todoNum;
|
||||
$params->todoNum['default'] = 20;
|
||||
$params->todoNum['control'] = 'input';
|
||||
|
||||
$params->taskNum['name'] = $this->lang->block->taskNum;
|
||||
$params->taskNum['default'] = 20;
|
||||
$params->taskNum['control'] = 'input';
|
||||
|
||||
$params->bugNum['name'] = $this->lang->block->bugNum;
|
||||
$params->bugNum['default'] = 20;
|
||||
$params->bugNum['control'] = 'input';
|
||||
|
||||
return json_encode($params);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get closed block pairs.
|
||||
*
|
||||
@@ -456,4 +474,16 @@ class blockModel extends model
|
||||
$params->num['control'] = 'input';
|
||||
return $params;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check whether long block.
|
||||
*
|
||||
* @param object $block
|
||||
* @access public
|
||||
* @return book
|
||||
*/
|
||||
public function isLongBlock($block)
|
||||
{
|
||||
return $block->grid >= 6;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,30 +10,40 @@
|
||||
* @link http://www.ranzhi.org
|
||||
*/
|
||||
?>
|
||||
<table class='table table-data table-hover block-bug table-fixed tablesorter'>
|
||||
<thead>
|
||||
<tr>
|
||||
<th width='50'><?php echo $lang->idAB?></th>
|
||||
<th width='50'><?php echo $lang->priAB?></th>
|
||||
<th> <?php echo $lang->bug->title;?></th>
|
||||
<th width='50'><?php echo $lang->bug->severityAB?></th>
|
||||
<th width='70'><?php echo $lang->bug->statusAB;?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<?php foreach($bugs as $bug):?>
|
||||
<?php
|
||||
$appid = isset($_GET['entry']) ? "class='app-btn' data-id='{$this->get->entry}'" : '';
|
||||
$viewLink = $this->createLink('bug', 'view', "bugID={$bug->id}");
|
||||
?>
|
||||
<tr data-url='<?php echo empty($sso) ? $viewLink : $sso . $sign . 'referer=' . base64_encode($viewLink); ?>' <?php echo $appid?>>
|
||||
<td class='text-center'><?php echo $bug->id;?></td>
|
||||
<td class='text-center'><?php echo zget($lang->bug->priList, $bug->pri, $bug->pri)?></td>
|
||||
<td style='color: <?php echo $bug->color?>' title='<?php echo $bug->title?>'><?php echo $bug->title?></td>
|
||||
<td class='text-center'><?php echo zget($lang->bug->severityList, $bug->severity, $bug->severity)?></td>
|
||||
<td class='text-center'><?php echo zget($lang->bug->statusList, $bug->status, $bug->status)?></td>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
</table>
|
||||
<script>
|
||||
if(typeof(dataTable) == 'function')$('.block-bug').dataTable();
|
||||
</script>
|
||||
<div class='panel-body has-table'>
|
||||
<table class='table table-borderless table-fixed-head table-hover block-bugs <?php if(!$longBlock) echo 'block-sm'?>'>
|
||||
<thead>
|
||||
<tr>
|
||||
<th class='c-id'><?php echo $lang->idAB?></th>
|
||||
<?php if($longBlock):?>
|
||||
<th class='c-pri'><?php echo $lang->priAB?></th>
|
||||
<?php endif;?>
|
||||
<th class='c-level'><?php echo $lang->bug->severityAB?></th>
|
||||
<th class='c-name'><?php echo $lang->bug->title;?></th>
|
||||
<th class='c-status'><?php echo $lang->bug->statusAB;?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach($bugs as $bug):?>
|
||||
<?php
|
||||
$appid = isset($_GET['entry']) ? "class='app-btn' data-id='{$this->get->entry}'" : '';
|
||||
$viewLink = $this->createLink('bug', 'view', "bugID={$bug->id}");
|
||||
?>
|
||||
<tr data-url='<?php echo empty($sso) ? $viewLink : $sso . $sign . 'referer=' . base64_encode($viewLink); ?>' <?php echo $appid?>>
|
||||
<td class='c-id'><?php echo $bug->id;?></td>
|
||||
<?php if($longBlock):?>
|
||||
<td class='c-pri'><span class='label-pri label-pri-<?php echo $bug->pri?>'><?php echo zget($lang->bug->priList, $bug->pri, $bug->pri)?></span></td>
|
||||
<?php endif;?>
|
||||
<td class='c-level'><span class='label-level' data-level='<?php echo zget($lang->bug->severityList, $bug->severity);?>'></span></td>
|
||||
<td class='c-name' style='color: <?php echo $bug->color?>' title='<?php echo $bug->title?>'><?php echo $bug->title?></td>
|
||||
<td class='c-status' title='<?php echo zget($lang->bug->statusList, $bug->status)?>'>
|
||||
<span class="bug-status-<?php echo $bug->status?>">
|
||||
<span class="label label-dot"></span>
|
||||
<span class='status-text'><?php echo zget($lang->bug->statusList, $bug->status);?></span>
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
@@ -10,28 +10,29 @@
|
||||
* @link http://www.ranzhi.org
|
||||
*/
|
||||
?>
|
||||
<table class='table tablesorter table-data table-hover block-build table-fixed'>
|
||||
<thead>
|
||||
<tr>
|
||||
<th width='50'><?php echo $lang->idAB?></th>
|
||||
<th> <?php echo $lang->build->product;?></th>
|
||||
<th> <?php echo $lang->build->name;?></th>
|
||||
<th width='80'><?php echo $lang->build->date;?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<?php foreach($builds as $build):?>
|
||||
<?php
|
||||
$appid = isset($_GET['entry']) ? "class='app-btn' data-id='{$this->get->entry}'" : '';
|
||||
$viewLink = $this->createLink('build', 'view', "buildID={$build->id}");
|
||||
?>
|
||||
<tr data-url='<?php echo empty($sso) ? $viewLink : $sso . $sign . 'referer=' . base64_encode($viewLink); ?>' <?php echo $appid?>>
|
||||
<td class='text-center'><?php echo $build->id;?></td>
|
||||
<td title='<?php echo $build->productName?>'><?php echo $build->productName?></td>
|
||||
<td title='<?php echo $build->name?>'><?php echo $build->name?></td>
|
||||
<td><?php echo $build->date?></td>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
</table>
|
||||
<script>
|
||||
if(typeof(dataTable) == 'function')$('.block-build').dataTable();
|
||||
</script>
|
||||
<div class='panel-body has-table'>
|
||||
<table class='table table-borderless table-hover table-fixed-head block-builds'>
|
||||
<thead>
|
||||
<tr>
|
||||
<th width='50'><?php echo $lang->idAB?></th>
|
||||
<th> <?php echo $lang->build->product;?></th>
|
||||
<th> <?php echo $lang->build->name;?></th>
|
||||
<th width='80'><?php echo $lang->build->date;?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach($builds as $build):?>
|
||||
<?php
|
||||
$appid = isset($_GET['entry']) ? "class='app-btn' data-id='{$this->get->entry}'" : '';
|
||||
$viewLink = $this->createLink('build', 'view', "buildID={$build->id}");
|
||||
?>
|
||||
<tr data-url='<?php echo empty($sso) ? $viewLink : $sso . $sign . 'referer=' . base64_encode($viewLink); ?>' <?php echo $appid?>>
|
||||
<td class='text-center'><?php echo $build->id;?></td>
|
||||
<td title='<?php echo $build->productName?>'><?php echo $build->productName?></td>
|
||||
<td title='<?php echo $build->name?>'><?php echo $build->name?></td>
|
||||
<td><?php echo $build->date?></td>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
@@ -10,32 +10,56 @@
|
||||
* @link http://www.ranzhi.org
|
||||
*/
|
||||
?>
|
||||
<table class='table tablesorter table-data table-hover block-case table-fixed'>
|
||||
<thead>
|
||||
<tr>
|
||||
<th width='50'><?php echo $lang->idAB?></th>
|
||||
<th width='50'><?php echo $lang->priAB?></th>
|
||||
<th> <?php echo $lang->case->title;?></th>
|
||||
<th width='120'> <?php echo $lang->testtask->lastRunTime;?></th>
|
||||
<th width='60'> <?php echo $lang->testtask->lastRunResult;?></th>
|
||||
<th width='70'><?php echo $lang->statusAB;?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<?php foreach($cases as $case):?>
|
||||
<?php
|
||||
$appid = isset($_GET['entry']) ? "class='app-btn' data-id='{$this->get->entry}'" : '';
|
||||
$viewLink = $this->createLink('testcase', 'view', "caseID={$case->id}");
|
||||
?>
|
||||
<tr data-url='<?php echo empty($sso) ? $viewLink : $sso . $sign . 'referer=' . base64_encode($viewLink); ?>' <?php echo $appid?>>
|
||||
<td class='text-center'><?php echo $case->id;?></td>
|
||||
<td class='text-center'><?php echo zget($lang->case->priList, $case->pri, $case->pri)?></td>
|
||||
<td style='color: <?php echo $case->color?>' title='<?php echo $case->title?>'><?php echo $case->title?></td>
|
||||
<td class='text-center'><?php if(!helper::isZeroDate($case->lastRunDate)) echo date(DT_MONTHTIME1, strtotime($case->lastRunDate));?></td>
|
||||
<td class='text-center'><?php if($case->lastRunResult) echo $lang->testcase->resultList[$case->lastRunResult];?></td>
|
||||
<td class='text-center'><?php echo $lang->testcase->statusList[$case->status];?></td>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
</table>
|
||||
<script>
|
||||
if(typeof(dataTable) == 'function')$('.block-case').dataTable();
|
||||
</script>
|
||||
<div class='panel-body has-table'>
|
||||
<style>
|
||||
.block-cases.block-sm .c-status{text-align:center}
|
||||
.block-cases.block-sm .c-status .status-text{display:none;}
|
||||
.case-status-normal {color: #a6aab8;}
|
||||
.case-status-normal > .label-dot {background-color: #006af1;}
|
||||
.case-status-blocked { color: #a6aab8; }
|
||||
.case-status-blocked > .label-dot { background-color: #00da88; }
|
||||
.case-status-investigate {color: #a6aab8;}
|
||||
.case-status-investigate > .label-dot {background-color: #006af1;}
|
||||
</style>
|
||||
<table class='table table-borderless table-hover table-fixed-head block-cases <?php if(!$longBlock) echo 'block-sm';?>'>
|
||||
<thead>
|
||||
<tr>
|
||||
<?php if($longBlock):?>
|
||||
<th class='c-id' width='50'><?php echo $lang->idAB?></th>
|
||||
<?php endif;?>
|
||||
<th class='c-pri' width='50'><?php echo $lang->priAB?></th>
|
||||
<th class='c-title'><?php echo $lang->case->title;?></th>
|
||||
<?php if($longBlock):?>
|
||||
<th class='c-runtime' width='120'> <?php echo $lang->testtask->lastRunTime;?></th>
|
||||
<th class='c-result' width='60'> <?php echo $lang->testtask->lastRunResult;?></th>
|
||||
<?php endif;?>
|
||||
<th class='c-status' width='70'><?php echo $lang->statusAB;?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach($cases as $case):?>
|
||||
<?php
|
||||
$appid = isset($_GET['entry']) ? "class='app-btn' data-id='{$this->get->entry}'" : '';
|
||||
$viewLink = $this->createLink('testcase', 'view', "caseID={$case->id}");
|
||||
?>
|
||||
<tr data-url='<?php echo empty($sso) ? $viewLink : $sso . $sign . 'referer=' . base64_encode($viewLink); ?>' <?php echo $appid?>>
|
||||
<?php if($longBlock):?>
|
||||
<td class='text-center c-id'><?php echo $case->id;?></td>
|
||||
<?php endif;?>
|
||||
<td class='text-center c-pri'><span class='label-pri label-pri-<?php echo $case->pri?>'><?php echo zget($lang->case->priList, $case->pri, $case->pri)?></span></td>
|
||||
<td class='c-title' style='color: <?php echo $case->color?>' title='<?php echo $case->title?>'><?php echo $case->title?></td>
|
||||
<?php if($longBlock):?>
|
||||
<td class='text-center c-runtime'><?php if(!helper::isZeroDate($case->lastRunDate)) echo date(DT_MONTHTIME1, strtotime($case->lastRunDate));?></td>
|
||||
<td class='text-center c-result'><?php if($case->lastRunResult) echo $lang->testcase->resultList[$case->lastRunResult];?></td>
|
||||
<?php endif;?>
|
||||
<td class='text-left c-status' title='<?php echo zget($lang->testcase->statusList, $case->status)?>'>
|
||||
<span class="case-status-<?php echo $case->status?>">
|
||||
<span class="label label-dot"></span>
|
||||
<span class='status-text'><?php echo zget($lang->testcase->statusList, $case->status);?></span>
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
@@ -18,45 +18,87 @@ $useGuest = $this->app->user->account == 'guest';
|
||||
?>
|
||||
<?php include '../../common/view/tablesorter.html.php';?>
|
||||
<div class='dashboard' id='dashboard' data-confirm-remove-block='<?php echo $lang->block->confirmRemoveBlock;?>'>
|
||||
<?php if(!$useGuest):?>
|
||||
<div class='dashboard-actions'><a href='<?php echo $this->createLink("block", "admin", "id=0&module=$module"); ?>' data-toggle='modal' data-type='ajax' data-width='700' data-title='<?php echo $lang->block->createBlock?>'><i class='icon icon-plus' title='<?php echo $lang->block->createBlock?>' data-toggle='tooltip' data-placement='left'></i></a></div>
|
||||
<div class='dashboard-empty-message hide'>
|
||||
<a href='<?php echo $this->createLink("block", "admin", "id=0&module=$module"); ?>' data-toggle='modal' data-type='ajax' data-width='700' class='btn btn-primary'><i class='icon icon-plus'></i> <?php echo $lang->block->createBlock?></a>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
<div class='row'>
|
||||
<?php foreach($blocks as $index => $block):?>
|
||||
<?php if(isset($config->block->closed) and strpos(",{$config->block->closed},", ",{$block->source}|{$block->block},") !== false) continue;?>
|
||||
<div class='col-sm-6 col-md-<?php echo $block->grid;?>'>
|
||||
<div class='panel panel-block <?php if(isset($block->params->color)) echo 'panel-' . $block->params->color;?>' id='block<?php echo $block->id?>' data-id='<?php echo $block->id?>' data-name='<?php echo $block->title?>' data-url='<?php echo $block->blockLink?>' <?php if($block->height) echo "data-height='$block->height'";?>>
|
||||
<div class='panel-heading'>
|
||||
<div class='panel-actions'>
|
||||
<?php if(!empty($block->moreLink)):?>
|
||||
<?php echo html::a($block->moreLink, " <i class='icon icon-more'></i>", null, "class='panel-action drag-disabled panel-action-more'"); ?>
|
||||
<?php endif; ?>
|
||||
<div class='dropdown'>
|
||||
<a href='javascript:;' data-toggle='dropdown' class='panel-action'><i class='icon icon-ellipsis-v'></i></a>
|
||||
<ul class='dropdown-menu pull-right'>
|
||||
<li><a href='javascript:;' class='refresh-panel'><i class='icon-repeat'></i> <?php echo $lang->block->refresh ?></a></li>
|
||||
<?php if(!$useGuest):?>
|
||||
<li><a data-toggle='modal' href="<?php echo $this->createLink("block", "admin", "id=$block->id&module=$module"); ?>" class='edit-block' data-title='<?php echo $block->title; ?>' data-icon='icon-pencil'><i class='icon-pencil'></i> <?php echo $lang->edit; ?></a></li>
|
||||
<?php if(!$block->source and $block->block == 'html'):?>
|
||||
<li><a href="javascript:hiddenBlock(<?php echo $index;?>)" class="hidden-panel"><i class='icon-eye-close'></i><?php echo $lang->block->hidden; ?></a></li>
|
||||
<?php endif;?>
|
||||
<li><a href='javascript:;' class='remove-panel'><i class='icon-remove'></i> <?php echo $lang->block->remove; ?></a></li>
|
||||
<?php endif;?>
|
||||
<?php if($this->app->user->admin):?>
|
||||
<li><?php echo html::a($this->createLink('block', 'close', "blockID={$block->id}"), "<i class='icon-eye-close'></i> {$lang->block->closeForever}", 'hiddenwin', "class='close-block' onclick=\"return confirm('{$lang->block->confirmClose}')\"")?>
|
||||
<?php endif;?>
|
||||
</ul>
|
||||
<div>
|
||||
<div class='col-md-8 col-main'>
|
||||
<?php foreach($longBlocks as $index => $block):?>
|
||||
<?php if(isset($config->block->closed) and strpos(",{$config->block->closed},", ",{$block->source}|{$block->block},") !== false) continue;?>
|
||||
<div class='row'>
|
||||
<div class='col-sm-12'>
|
||||
<div class='panel block-<?php echo $block->block;?> <?php if(isset($block->params->color)) echo 'panel-' . $block->params->color;?>' id='block<?php echo $block->id?>' data-id='<?php echo $block->id?>' data-name='<?php echo $block->title?>'>
|
||||
<?php $hasHeading = ($block->block != 'welcome' and $block->block != 'flowchart');?>
|
||||
<?php if($hasHeading):?>
|
||||
<div class='panel-heading'>
|
||||
<div class='panel-title'><?php echo $block->title;?></div>
|
||||
<?php endif;?>
|
||||
<nav class='panel-actions nav nav-default'>
|
||||
<?php if(!empty($block->moreLink)):?>
|
||||
<?php echo '<li>' . html::a($block->moreLink, " <i class='icon icon-more'></i>") . '</li>'; ?>
|
||||
<?php endif; ?>
|
||||
<li class='dropdown'>
|
||||
<a href='javascript:;' data-toggle='dropdown' class='panel-action'><i class='icon icon-ellipsis-v'></i></a>
|
||||
<ul class='dropdown-menu pull-right'>
|
||||
<?php if(!$useGuest):?>
|
||||
<li><a data-toggle='modal' href="<?php echo $this->createLink("block", "admin", "id=$block->id&module=$module"); ?>" class='edit-block' data-title='<?php echo $block->title; ?>' data-icon='icon-pencil'><i class='icon-pencil'></i> <?php echo $lang->edit; ?></a></li>
|
||||
<?php if(!$block->source and $block->block == 'html'):?>
|
||||
<li><a href="javascript:hiddenBlock(<?php echo $index;?>)" class="hidden-panel"><i class='icon-eye-close'></i><?php echo $lang->block->hidden; ?></a></li>
|
||||
<?php endif;?>
|
||||
<li><a href='javascript:deleteBlock(<?php echo $index;?>);' class='remove-panel'><i class='icon-remove'></i> <?php echo $lang->block->remove; ?></a></li>
|
||||
<?php endif;?>
|
||||
<?php if($this->app->user->admin):?>
|
||||
<li><?php echo html::a($this->createLink('block', 'close', "blockID={$block->id}"), "<i class='icon-eye-close'></i> {$lang->block->closeForever}", 'hiddenwin', "class='close-block' onclick=\"return confirm('{$lang->block->confirmClose}')\"")?>
|
||||
<?php endif;?>
|
||||
</ul>
|
||||
</li>
|
||||
</nav>
|
||||
<?php if($hasHeading):?>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
<?php echo $this->fetch('block', 'printBlock', "id=$block->id&module=$module")?>
|
||||
</div>
|
||||
<span class='panel-title'><?php echo $block->title;?></span>
|
||||
</div>
|
||||
<div class='panel-body no-padding'></div>
|
||||
</div>
|
||||
<?php endforeach;?>
|
||||
</div>
|
||||
<div class='col-md-4 col-side'>
|
||||
<?php foreach($shortBlocks as $index => $block):?>
|
||||
<?php if(isset($config->block->closed) and strpos(",{$config->block->closed},", ",{$block->source}|{$block->block},") !== false) continue;?>
|
||||
<div class='row'>
|
||||
<div class='col-sm-12'>
|
||||
<div class='panel block-<?php echo $block->block;?> <?php if(isset($block->params->color)) echo 'panel-' . $block->params->color;?>' id='block<?php echo $block->id?>' data-id='<?php echo $block->id?>' data-name='<?php echo $block->title?>'>
|
||||
<?php $hasHeading = ($block->block != 'welcome' and $block->block != 'flowchart');?>
|
||||
<?php if($hasHeading):?>
|
||||
<div class='panel-heading'>
|
||||
<div class='panel-title'><?php echo $block->title;?></div>
|
||||
<?php endif;?>
|
||||
<nav class='panel-actions nav nav-default'>
|
||||
<?php if(!empty($block->moreLink)):?>
|
||||
<?php echo '<li>' . html::a($block->moreLink, " <i class='icon icon-more'></i>") . '</li>';?>
|
||||
<?php endif; ?>
|
||||
<li class='dropdown'>
|
||||
<a href='javascript:;' data-toggle='dropdown' class='panel-action'><i class='icon icon-ellipsis-v'></i></a>
|
||||
<ul class='dropdown-menu pull-right'>
|
||||
<?php if(!$useGuest):?>
|
||||
<li><a data-toggle='modal' href="<?php echo $this->createLink("block", "admin", "id=$block->id&module=$module"); ?>" class='edit-block' data-title='<?php echo $block->title; ?>' data-icon='icon-pencil'><i class='icon-pencil'></i> <?php echo $lang->edit; ?></a></li>
|
||||
<?php if(!$block->source and $block->block == 'html'):?>
|
||||
<li><a href="javascript:hiddenBlock(<?php echo $index;?>)" class="hidden-panel"><i class='icon-eye-close'></i><?php echo $lang->block->hidden; ?></a></li>
|
||||
<?php endif;?>
|
||||
<li><a href='javascript:deleteBlock(<?php echo $index?>);' class='remove-panel'><i class='icon-remove'></i> <?php echo $lang->block->remove; ?></a></li>
|
||||
<?php endif;?>
|
||||
<?php if($this->app->user->admin):?>
|
||||
<li><?php echo html::a($this->createLink('block', 'close', "blockID={$block->id}"), "<i class='icon-eye-close'></i> {$lang->block->closeForever}", 'hiddenwin', "class='close-block' onclick=\"return confirm('{$lang->block->confirmClose}')\"")?>
|
||||
<?php endif;?>
|
||||
</ul>
|
||||
</li>
|
||||
</nav>
|
||||
<?php if($hasHeading):?>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
<?php echo $this->fetch('block', 'printBlock', "id=$block->id&module=$module")?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endforeach;?>
|
||||
</div>
|
||||
<?php endforeach;?>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
@@ -64,6 +106,9 @@ config.ordersSaved = '<?php echo $lang->block->ordersSaved; ?>';
|
||||
config.confirmRemoveBlock = '<?php echo $lang->block->confirmRemoveBlock; ?>';
|
||||
var module = '<?php echo $module?>';
|
||||
var useGuest = <?php echo $useGuest ? 'true' : 'false';?>;
|
||||
<?php if(!$useGuest):?>
|
||||
$('#subHeader #pageActions').append(<?php echo json_encode(html::a($this->createLink("block", "admin", "id=0&module=$module"), "<i class='icon icon-plus text-muted'></i> {$lang->block->createBlock}", '', "class='btn btn-default' data-toggle='modal' data-type='ajax' data-width='700' data-title='{$lang->block->createBlock}'"))?>);
|
||||
<?php endif;?>
|
||||
</script>
|
||||
<?php if($extView = $this->getExtViewFile(__FILE__)){include $extView; return helper::cd();}?>
|
||||
<?php if(isset($pageJS)) js::execute($pageJS);?>
|
||||
|
||||
@@ -1,12 +1,17 @@
|
||||
<table class='table table-condensed table-hover table-striped table-borderless table-fixed'>
|
||||
<?php
|
||||
foreach($actions as $action)
|
||||
{
|
||||
$user = isset($users[$action->actor]) ? $users[$action->actor] : $action->actor;
|
||||
if($action->action == 'login' or $action->action == 'logout' or empty($action->objectLink)) $action->objectName = $action->objectLabel = '';
|
||||
echo "<tr><td class='nobr' width='100%'>";
|
||||
printf($lang->block->dynamicInfo, $action->date, $user, $action->actionLabel, $action->objectLabel, $action->objectLink, $action->objectName);
|
||||
echo "</td></tr>";
|
||||
}
|
||||
?>
|
||||
</table>
|
||||
<div class='panel-body'>
|
||||
<ul class="timeline timeline-tag-left">
|
||||
<?php
|
||||
$i = 0;
|
||||
foreach($actions as $action)
|
||||
{
|
||||
$user = isset($users[$action->actor]) ? $users[$action->actor] : $action->actor;
|
||||
if($action->action == 'login' or $action->action == 'logout' or empty($action->objectLink)) $action->objectName = $action->objectLabel = '';
|
||||
$class = $i % 3 == 0 ? "class='active'" : '';
|
||||
echo "<li $class><div>";
|
||||
printf($lang->block->dynamicInfo, $action->date, $user, $action->actionLabel, $action->objectLabel, $action->objectLink, $action->objectName);
|
||||
echo "</div></li>";
|
||||
$i++;
|
||||
}
|
||||
?>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -1,43 +1,26 @@
|
||||
<div class='flowchart'>
|
||||
<?php foreach ($lang->block->flowchart as $flow):?>
|
||||
<?php $idx = 0 ?>
|
||||
<div class='row'>
|
||||
<?php foreach ($flow as $flowItem):?>
|
||||
<div class='flow-item flow-item-<?php echo $idx++ ?>'><div><?php echo $flowItem ?></div></div>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
<style>
|
||||
.flowchart {padding: 10px 15px 1px 10px; min-width: 500px;}
|
||||
.flow-item {float: left; width: 16.66667%; max-width: 180px; text-align: center; margin-bottom: 9px; padding-right: 5px;}
|
||||
.flow-item > div {position: relative; padding: 5px 0 5px 12px; line-height: 20px; background: #90A4AE; white-space:nowrap; overflow: visible; color: #fff;}
|
||||
.flow-item > div:before, .flow-item > div:after {content: ' '; display: block; width: 0; height: 0; border-style: solid; border-width: 15px 0 15px 15px; border-color: transparent transparent transparent #90A4AE; position: absolute; left: 0; top: 0}
|
||||
.ie-8 .flow-item > div:before {display: none}
|
||||
.flow-item > div:before {border-left-color: #fff; z-index: 1}
|
||||
.flow-item > div:after {left: auto; right: -14px; z-index: 2}
|
||||
.ie-8 .flow-item > div {margin-right: 10px}
|
||||
.flow-item-0 > div:before {display: none}
|
||||
.flow-item-1 > div {background: #1976D2}
|
||||
.flow-item-1 > div:after {border-left-color: #1976D2}
|
||||
.flow-item-2 > div {background: #4CAF50}
|
||||
.flow-item-2 > div:after {border-left-color: #4CAF50}
|
||||
.flow-item-3 > div {background: #F57C00}
|
||||
.flow-item-3 > div:after {border-left-color: #F57C00}
|
||||
.flow-item-4 > div {background: #EF5350}
|
||||
.flow-item-4 > div:after {border-left-color: #EF5350}
|
||||
.flow-item-5 > div {background: #AB47BC}
|
||||
.flow-item-5 > div:after {border-left-color: #AB47BC}
|
||||
|
||||
.flow-item-1 > div:hover {background: #1565C0}
|
||||
.flow-item-1 > div:hover:after {border-left-color: #1565C0}
|
||||
.flow-item-2 > div:hover {background: #43A047}
|
||||
.flow-item-2 > div:hover:after {border-left-color: #43A047}
|
||||
.flow-item-3 > div:hover {background: #EF6C00}
|
||||
.flow-item-3 > div:hover:after {border-left-color: #EF6C00}
|
||||
.flow-item-4 > div:hover {background: #E53935}
|
||||
.flow-item-4 > div:hover:after {border-left-color: #E53935}
|
||||
.flow-item-5 > div:hover {background: #9C27B0}
|
||||
.flow-item-5 > div:hover:after {border-left-color: #9C27B0}
|
||||
html[lang="en"] .flowchart {min-width: 700px}
|
||||
</style>
|
||||
<table class="table table-borderless">
|
||||
<thead>
|
||||
<tr>
|
||||
<?php for($i = 0; $i < 6; $i++):?>
|
||||
<?php if($i == 0):?>
|
||||
<th><span class="flowchart-title"><?php echo $lang->block->lblFlowchart?></span></th>
|
||||
<?php else:?>
|
||||
<th><div><span class="flowchart-step"><?php echo $i?></span></div></th>
|
||||
<?php endif;?>
|
||||
<?php endfor;?>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach($lang->block->flowchart as $flowchart):?>
|
||||
<tr>
|
||||
<?php for($i = 0; $i < 6; $i++):?>
|
||||
<?php if($i == 0):?>
|
||||
<th><?php echo $flowchart[$i];?></th>
|
||||
<?php else:?>
|
||||
<td><?php echo zget($flowchart, $i, '')?></td>
|
||||
<?php endif;?>
|
||||
<?php endfor;?>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
@@ -10,30 +10,31 @@
|
||||
* @link http://www.ranzhi.org
|
||||
*/
|
||||
?>
|
||||
<table class='table tablesorter table-data table-hover block-plan table-fixed'>
|
||||
<thead>
|
||||
<tr>
|
||||
<th width='50'><?php echo $lang->idAB?></th>
|
||||
<th> <?php echo $lang->productplan->product;?></th>
|
||||
<th> <?php echo $lang->productplan->title;?></th>
|
||||
<th width='80'><?php echo $lang->productplan->begin;?></th>
|
||||
<th width='80'><?php echo $lang->productplan->end;?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<?php foreach($plans as $plan):?>
|
||||
<?php
|
||||
$appid = isset($_GET['entry']) ? "class='app-btn' data-id='{$this->get->entry}'" : '';
|
||||
$viewLink = $this->createLink('productplan', 'view', "planID={$plan->id}");
|
||||
?>
|
||||
<tr data-url='<?php echo empty($sso) ? $viewLink : $sso . $sign . 'referer=' . base64_encode($viewLink); ?>' <?php echo $appid?>>
|
||||
<td class='text-center'><?php echo $plan->id;?></td>
|
||||
<td title='<?php echo $plan->productName?>'><?php echo $plan->productName?></td>
|
||||
<td title='<?php echo $plan->title?>'><?php echo $plan->title?></td>
|
||||
<td><?php echo $plan->begin?></td>
|
||||
<td><?php echo $plan->end?></td>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
</table>
|
||||
<script>
|
||||
if(typeof(dataTable) == 'function')$('.block-plan').dataTable();
|
||||
</script>
|
||||
<div class='panel-body has-table'>
|
||||
<table class='table table-borderless table-hover table-fixed-head block-plan'>
|
||||
<thead>
|
||||
<tr>
|
||||
<th width='50'><?php echo $lang->idAB?></th>
|
||||
<th> <?php echo $lang->productplan->product;?></th>
|
||||
<th> <?php echo $lang->productplan->title;?></th>
|
||||
<th width='80'><?php echo $lang->productplan->begin;?></th>
|
||||
<th width='80'><?php echo $lang->productplan->end;?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach($plans as $plan):?>
|
||||
<?php
|
||||
$appid = isset($_GET['entry']) ? "class='app-btn' data-id='{$this->get->entry}'" : '';
|
||||
$viewLink = $this->createLink('productplan', 'view', "planID={$plan->id}");
|
||||
?>
|
||||
<tr data-url='<?php echo empty($sso) ? $viewLink : $sso . $sign . 'referer=' . base64_encode($viewLink); ?>' <?php echo $appid?>>
|
||||
<td class='text-center'><?php echo $plan->id;?></td>
|
||||
<td title='<?php echo $plan->productName?>'><?php echo $plan->productName?></td>
|
||||
<td title='<?php echo $plan->title?>'><?php echo $plan->title?></td>
|
||||
<td><?php echo $plan->begin?></td>
|
||||
<td><?php echo $plan->end?></td>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
/**
|
||||
* The assigntome block view file of block 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 Yidong Wang <yidong@cnezsoft.com>
|
||||
* @package block
|
||||
* @version $Id$
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<div id='assigntomeBlock'>
|
||||
<?php foreach($hasViewPriv as $type => $bool):?>
|
||||
<div id="<?php echo $type?>">
|
||||
<?php include "{$type}block.html.php";?>
|
||||
</div>
|
||||
<?php endforeach;?>
|
||||
</div>
|
||||
<script>
|
||||
$(function()
|
||||
{
|
||||
adjustTable();
|
||||
$('#assigntomeBlock').resize(function(){adjustTable();});
|
||||
})
|
||||
|
||||
function adjustTable()
|
||||
{
|
||||
setTimeout(function()
|
||||
{
|
||||
$('#assigntomeBlock').closest('[id^="block"]').find('.table-header-fixed').remove();
|
||||
$('#assigntomeBlock').closest('[id^="block"]').find('#todo table thead').removeAttr('style');
|
||||
}, 400);
|
||||
}
|
||||
</script>
|
||||
@@ -10,38 +10,37 @@
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<table class='table tablesorter table-data table-hover table-fixed table-striped block-product'>
|
||||
<thead>
|
||||
<tr class='text-center'>
|
||||
<th class='text-left'><?php echo $lang->product->name;?></th>
|
||||
<th width='65' title='<?php echo $lang->story->common;?>'><?php echo $lang->story->statusList['active'];?></th>
|
||||
<th width='65' title='<?php echo $lang->story->common;?>'><?php echo $lang->story->statusList['changed'];?></th>
|
||||
<th width='65' title='<?php echo $lang->story->common;?>'><?php echo $lang->story->statusList['draft'];?></th>
|
||||
<th width='65'><?php echo $lang->product->plans;?></th>
|
||||
<th width='65'><?php echo $lang->product->releases;?></th>
|
||||
<th width='65' title='<?php echo $lang->bug->common;?>'><?php echo $lang->product->bugs;?></th>
|
||||
<th width='65' title='<?php echo $lang->bug->common;?>'><?php echo $lang->bug->unResolved;?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach($productStats as $product):?>
|
||||
<?php
|
||||
$appid = isset($_GET['entry']) ? "class='app-btn text-center' data-id='{$this->get->entry}'" : "class='text-center'";
|
||||
$viewLink = $this->createLink('product', 'browse', 'productID=' . $product->id);
|
||||
?>
|
||||
<tr data-url='<?php echo empty($sso) ? $viewLink : $sso . $sign . 'referer=' . base64_encode($viewLink); ?>' <?php echo $appid?>>
|
||||
<td class='text-left' title='<?php echo $product->name?>'><?php echo $product->name?></td>
|
||||
<td><?php echo $product->stories['active']?></td>
|
||||
<td><?php echo $product->stories['changed']?></td>
|
||||
<td><?php echo $product->stories['draft']?></td>
|
||||
<td><?php echo $product->plans?></td>
|
||||
<td><?php echo $product->releases?></td>
|
||||
<td><?php echo $product->bugs?></td>
|
||||
<td><?php echo $product->unResolved?></td>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
<script>
|
||||
if(typeof(dataTable) == 'function')$('.block-product').dataTable();
|
||||
</script>
|
||||
<div class="panel-body has-table">
|
||||
<table class='table table-borderless table-hover table-fixed-head block-products'>
|
||||
<thead>
|
||||
<tr>
|
||||
<th class='c-name'><?php echo $lang->product->name;?></th>
|
||||
<th class='c-plans'><?php echo $lang->product->plans;?></th>
|
||||
<th class="c-publishs"><?php echo $lang->product->releases;?></th>
|
||||
<?php if($longBlock):?>
|
||||
<th class="c-project"><?php echo $lang->product->currentProject;?></th>
|
||||
<?php endif;?>
|
||||
<th class="c-stories" title='<?php echo $lang->story->common;?>'><?php echo $lang->story->statusList['active'];?></th>
|
||||
<th class="c-bugs" title='<?php echo $lang->bug->common;?>'><?php echo $lang->bug->unResolved;?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach($productStats as $product):?>
|
||||
<?php
|
||||
$appid = isset($_GET['entry']) ? "class='app-btn' data-id='{$this->get->entry}'" : "";
|
||||
$viewLink = $this->createLink('product', 'browse', 'productID=' . $product->id);
|
||||
?>
|
||||
<tr data-url='<?php echo empty($sso) ? $viewLink : $sso . $sign . 'referer=' . base64_encode($viewLink); ?>' <?php echo $appid?>>
|
||||
<td class='c-name' title='<?php echo $product->name?>'><?php echo $product->name?></td>
|
||||
<td class="c-plans"><?php echo $product->plans?></td>
|
||||
<td class="c-publishs"><?php echo $product->releases?></td>
|
||||
<?php if($longBlock):?>
|
||||
<td class='c-project'><?php echo zget($projects, $product->id, '');?></td>
|
||||
<?php endif;?>
|
||||
<td class="c-stories"><?php echo $product->stories['active']?></td>
|
||||
<td class="c-bugs"><?php echo $product->unResolved?></td>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
@@ -10,21 +10,22 @@
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php $jsRoot = $this->config->webRoot . 'js/';?>
|
||||
<?php include '../../common/view/sparkline.html.php';?>
|
||||
<?php $projectboxId = 'projectbox-' . rand(); ?>
|
||||
<div id='<?php echo $projectboxId ?>'>
|
||||
<table class='table tablesorter table-data table-hover table-striped table-fixed block-project'>
|
||||
<div class="panel-body has-table">
|
||||
<table class='table table-borderless table-hover table-fixed-head block-projects'>
|
||||
<thead>
|
||||
<tr class='text-center'>
|
||||
<th class='text-left'><?php echo $lang->project->name;?></th>
|
||||
<th width='80'><?php echo $lang->project->end;?></th>
|
||||
<th width='50'><?php echo $lang->statusAB;?></th>
|
||||
<th width='60'><?php echo $lang->project->totalEstimate;?></th>
|
||||
<th width='60'><?php echo $lang->project->totalConsumed;?></th>
|
||||
<th width='60'><?php echo $lang->project->totalLeft;?></th>
|
||||
<th width='115'><?php echo $lang->project->progess;?></th>
|
||||
<th width='100' class='{sorter: false}'><?php echo $lang->project->burn;?></th>
|
||||
<th class='text-left c-name'><?php echo $lang->project->name;?></th>
|
||||
<th class="c-deadline"><?php echo $lang->project->end;?></th>
|
||||
<?php if($longBlock):?>
|
||||
<th class="c-status"><?php echo $lang->statusAB;?></th>
|
||||
<th class="c-estimate"><?php echo $lang->project->totalEstimate;?></th>
|
||||
<th class="c-consumed"><?php echo $lang->project->totalConsumed;?></th>
|
||||
<th class="c-left"><?php echo $lang->project->totalLeft;?></th>
|
||||
<?php endif;?>
|
||||
<th class="c-progress"><?php echo $lang->project->progress;?></th>
|
||||
<?php if($longBlock):?>
|
||||
<th class="c-spark"><?php echo $lang->project->burn;?></th>
|
||||
<?php endif;?>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@@ -35,57 +36,32 @@
|
||||
$viewLink = $this->createLink('project', 'task', 'project=' . $project->id);
|
||||
?>
|
||||
<tr data-url='<?php echo empty($sso) ? $viewLink : $sso . $sign . 'referer=' . base64_encode($viewLink); ?>' <?php echo $appid?>>
|
||||
<td class='text-left' title='<?php echo $project->name;?>'><?php echo html::a($this->createLink('project', 'task', 'project=' . $project->id), $project->name, '', "title='$project->name'");?></td>
|
||||
<td><?php echo $project->end;?></td>
|
||||
<?php if(isset($project->delay)):?>
|
||||
<td><?php echo $lang->project->delayed;?></td>
|
||||
<?php else:?>
|
||||
<td class='status-<?php echo $project->status?>'><?php echo $lang->project->statusList[$project->status];?></td>
|
||||
<?php endif;?>
|
||||
<td><?php echo $project->hours->totalEstimate;?></td>
|
||||
<td><?php echo $project->hours->totalConsumed;?></td>
|
||||
<td><?php echo $project->hours->totalLeft;?></td>
|
||||
<td class='text-left'>
|
||||
<img class='progressbar' src='<?php echo $this->app->getWebRoot();?>theme/default/images/main/green.png' alt='' height='16' width='<?php echo $project->hours->progress == 0 ? 1 : round($project->hours->progress * 0.7);?>'>
|
||||
<small><?php echo $project->hours->progress;?>%</small>
|
||||
<td class='text-left c-name' title='<?php echo $project->name;?>'><nobr><?php echo html::a($this->createLink('project', 'task', 'project=' . $project->id), $project->name, '', "title='$project->name'");?></nobr></td>
|
||||
<td class="c-deadline"><?php echo $project->end;?></td>
|
||||
<?php if($longBlock):?>
|
||||
<td class="c-status">
|
||||
<?php if(isset($project->delay)):?>
|
||||
<span class="project-status-delayed"><span class="label label-dot"></span> <?php echo $lang->project->delayed;?></span>
|
||||
<?php else:?>
|
||||
<span class="project-status-<?php echo $project->status?>"><span class="label label-dot"></span> <?php echo $lang->project->statusList[$project->status];?></span>
|
||||
<?php endif;?>
|
||||
</td>
|
||||
<td id='spark-<?php echo $id++?>' class='spark text-left pd-0' values='<?php echo join(',', $project->burns);?>'></td>
|
||||
<td class="c-estimate"><?php echo $project->hours->totalEstimate;?></td>
|
||||
<td class="c-consumed"><?php echo $project->hours->totalConsumed;?></td>
|
||||
<td class="c-left"><?php echo $project->hours->totalLeft;?></td>
|
||||
<?php endif;?>
|
||||
<td class="c-progress">
|
||||
<div class="progress progress-text-left">
|
||||
<div class="progress-bar progress-bar-success" role="progressbar" aria-valuenow="<?php echo $project->hours->progress;?>" aria-valuemin="0" aria-valuemax="100" style="width: <?php echo $project->hours->progress;?>%">
|
||||
<span class="progress-text"><?php echo $project->hours->progress;?>%</span>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
<?php if($longBlock):?>
|
||||
<td id='spark-<?php echo $id++?>' class='c-spark sparkline' values='<?php echo join(',', $project->burns);?>'></td>
|
||||
<?php endif;?>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<script>
|
||||
$(function()
|
||||
{
|
||||
var $projectbox = $('#<?php echo $projectboxId ?>');
|
||||
var $sparks = $projectbox.find('.spark');
|
||||
$sparks.filter(':lt(6)').addClass('sparked').projectLine();
|
||||
$sparks = $sparks.not('.sparked');
|
||||
var rowHeight = $sparks.first().closest('tr').outerHeight() - ($.zui.browser.ie === 8 ? 0.3 : 0);
|
||||
|
||||
var scrollFn = false, scrollStart = 6, i, id, $spark;
|
||||
$projectbox.parent().on('scroll.spark', function(e)
|
||||
{
|
||||
if(!$sparks.length)
|
||||
{
|
||||
$projectbox.off('scroll.spark');
|
||||
return;
|
||||
}
|
||||
if(scrollFn) clearTimeout(scrollFn);
|
||||
|
||||
scrollFn = setTimeout(function()
|
||||
{
|
||||
for(i = scrollStart; i <= scrollStart + 10; i++)
|
||||
{
|
||||
id = '#spark-' + i;
|
||||
$spark = $(id);
|
||||
if($spark.hasClass('sparked')) continue;
|
||||
$spark.addClass('sparked').projectLine();
|
||||
$sparks = $sparks.not(id);
|
||||
}
|
||||
scrollStart += 10;
|
||||
},100);
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
<div class='w-240px'>
|
||||
<div class='input-group'>
|
||||
<span class='input-group-addon'><?php echo $lang->block->grid;?></span>
|
||||
<?php echo html::select('grid', $config->block->gridOptions, $block ? $block->grid : 4, "class='form-control'")?>
|
||||
<?php echo html::select('grid', $lang->block->gridOptions, $block ? $block->grid : 8, "class='form-control'")?>
|
||||
<div class='input-group-btn block'>
|
||||
<?php $btn = isset($block->params->color) ? 'btn-' . $block->params->color : 'btn-default'?>
|
||||
<button type='button' class="btn <?php echo $btn;?> dropdown-toggle" data-toggle='dropdown'>
|
||||
|
||||
@@ -10,32 +10,33 @@
|
||||
* @link http://www.ranzhi.org
|
||||
*/
|
||||
?>
|
||||
<table class='table tablesorter table-data table-hover block-release table-fixed'>
|
||||
<thead>
|
||||
<tr>
|
||||
<th width='50'><?php echo $lang->idAB?></th>
|
||||
<th> <?php echo $lang->release->product;?></th>
|
||||
<th> <?php echo $lang->release->name;?></th>
|
||||
<th> <?php echo $lang->release->build;?></th>
|
||||
<th width='80'><?php echo $lang->release->date;?></th>
|
||||
<th width='70'><?php echo $lang->release->status;?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<?php foreach($releases as $release):?>
|
||||
<?php
|
||||
$appid = isset($_GET['entry']) ? "class='app-btn' data-id='{$this->get->entry}'" : '';
|
||||
$viewLink = $this->createLink('release', 'view', "releaseID={$release->id}");
|
||||
?>
|
||||
<tr data-url='<?php echo empty($sso) ? $viewLink : $sso . $sign . 'referer=' . base64_encode($viewLink); ?>' <?php echo $appid?>>
|
||||
<td class='text-center'><?php echo $release->id;?></td>
|
||||
<td class='text-left' title='<?php echo $release->productName?>'><?php echo $release->productName?></td>
|
||||
<td class='text-center' title='<?php echo $release->name?>'><?php echo $release->name?></td>
|
||||
<td class='text-center' title='<?php echo $release->buildName?>'><?php echo $release->buildName?></td>
|
||||
<td class='text-center'><?php echo $release->date?></td>
|
||||
<td class='text-center'><?php echo $lang->release->statusList[$release->status]?></td>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
</table>
|
||||
<script>
|
||||
if(typeof(dataTable) == 'function')$('.block-release').dataTable();
|
||||
</script>
|
||||
<div class='panel-body has-table'>
|
||||
<table class='table table-borderless table-hover table-fixed block-release'>
|
||||
<thead>
|
||||
<tr>
|
||||
<th width='50'><?php echo $lang->idAB?></th>
|
||||
<th> <?php echo $lang->release->product;?></th>
|
||||
<th> <?php echo $lang->release->name;?></th>
|
||||
<th> <?php echo $lang->release->build;?></th>
|
||||
<th width='80'><?php echo $lang->release->date;?></th>
|
||||
<th width='70'><?php echo $lang->release->status;?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach($releases as $release):?>
|
||||
<?php
|
||||
$appid = isset($_GET['entry']) ? "class='app-btn' data-id='{$this->get->entry}'" : '';
|
||||
$viewLink = $this->createLink('release', 'view', "releaseID={$release->id}");
|
||||
?>
|
||||
<tr data-url='<?php echo empty($sso) ? $viewLink : $sso . $sign . 'referer=' . base64_encode($viewLink); ?>' <?php echo $appid?>>
|
||||
<td class='text-center'><?php echo $release->id;?></td>
|
||||
<td class='text-left' title='<?php echo $release->productName?>'><?php echo $release->productName?></td>
|
||||
<td class='text-center' title='<?php echo $release->name?>'><?php echo $release->name?></td>
|
||||
<td class='text-center' title='<?php echo $release->buildName?>'><?php echo $release->buildName?></td>
|
||||
<td class='text-center'><?php echo $release->date?></td>
|
||||
<td class='text-center'><?php echo $lang->release->statusList[$release->status]?></td>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
*/
|
||||
?>
|
||||
<?php
|
||||
if(isset($lang->block->moduleList[$source]))
|
||||
if(!empty($params))
|
||||
{
|
||||
include 'setmodule.html.php';
|
||||
die();
|
||||
|
||||
@@ -10,32 +10,50 @@
|
||||
* @link http://www.ranzhi.org
|
||||
*/
|
||||
?>
|
||||
<table class='table tablesorter table-data table-hover block-story table-fixed'>
|
||||
<thead>
|
||||
<tr>
|
||||
<th width='50'><?php echo $lang->idAB?></th>
|
||||
<th width='30'><?php echo $lang->priAB?></th>
|
||||
<th> <?php echo $lang->story->title;?></th>
|
||||
<th width='50'><?php echo $lang->story->estimateAB;?></th>
|
||||
<th width='70'><?php echo $lang->statusAB;?></th>
|
||||
<th width='70'><?php echo $lang->story->stageAB;?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<?php foreach($stories as $story):?>
|
||||
<?php
|
||||
$appid = isset($_GET['entry']) ? "class='app-btn' data-id='{$this->get->entry}'" : '';
|
||||
$viewLink = $this->createLink('story', 'view', "storyID={$story->id}");
|
||||
?>
|
||||
<tr data-url='<?php echo empty($sso) ? $viewLink : $sso . $sign . 'referer=' . base64_encode($viewLink); ?>' <?php echo $appid?>>
|
||||
<td class='text-center'><?php echo $story->id;?></td>
|
||||
<td class='text-center'><?php echo zget($lang->story->priList, $story->pri, $story->pri)?></td>
|
||||
<td style='color: <?php echo $story->color?>' title='<?php echo $story->title?>'><?php echo $story->title?></td>
|
||||
<td class='text-center'><?php echo $story->estimate?></td>
|
||||
<td class='text-center'><?php echo zget($lang->story->statusList, $story->status, $story->status);?></th>
|
||||
<td class='text-center'><?php echo zget($lang->story->stageList, $story->stage, $story->stage);?></th>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
</table>
|
||||
<script>
|
||||
if(typeof(dataTable) == 'function')$('.block-story').dataTable();
|
||||
</script>
|
||||
<div class='panel-body has-table'>
|
||||
<table class='table table-borderless table-hover table-fixed-head block-stories <?php if(!$longBlock) echo 'block-sm'?>'>
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="c-id"><?php echo $lang->idAB?></th>
|
||||
<th class="c-pri"><?php echo $lang->priAB?></th>
|
||||
<th class="c-name"><?php echo $lang->story->title;?></th>
|
||||
<?php if($longBlock):?>
|
||||
<th class='c-estimate'><?php echo $lang->story->estimateAB;?></th>
|
||||
<?php endif;?>
|
||||
<th class="c-status"><?php echo $lang->statusAB;?></th>
|
||||
<?php if($longBlock):?>
|
||||
<th class='c-stage'><?php echo $lang->story->stageAB;?></th>
|
||||
<?php endif;?>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach($stories as $story):?>
|
||||
<?php
|
||||
$appid = isset($_GET['entry']) ? "class='app-btn' data-id='{$this->get->entry}'" : '';
|
||||
$viewLink = $this->createLink('story', 'view', "storyID={$story->id}");
|
||||
?>
|
||||
<tr data-url='<?php echo empty($sso) ? $viewLink : $sso . $sign . 'referer=' . base64_encode($viewLink); ?>' <?php echo $appid?>>
|
||||
<td class="c-id"><?php echo $story->id;?></td>
|
||||
<?php $pri = zget($lang->story->priList, $story->pri, $story->pri);?>
|
||||
<td class="c-pri"><span class="label-pri label-pri-<?php echo $pri?>"><?php echo $pri?></span></td>
|
||||
<td class="c-name" style='color: <?php echo $story->color?>' title='<?php echo $story->title?>'><?php echo $story->title?></td>
|
||||
<?php if($longBlock):?>
|
||||
<td class='c-estimate'><?php echo $story->estimate?></td>
|
||||
<?php endif;?>
|
||||
<td class='c-status' title='<?php echo zget($lang->story->statusList, $story->status)?>'>
|
||||
<span class='story-status-<?php echo $story->status?>'>
|
||||
<span class='label label-dot'></span><span class='status-text'><?php echo zget($lang->story->statusList, $story->status);?></span>
|
||||
</span>
|
||||
</td>
|
||||
<?php if($longBlock):?>
|
||||
<td class='c-stage'>
|
||||
<span class='story-stage-<?php echo $story->stage?>'>
|
||||
<?php echo zget($lang->story->stageList, $story->stage, $story->stage);?>
|
||||
</span>
|
||||
</td>
|
||||
<?php endif;?>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
@@ -10,35 +10,42 @@
|
||||
* @link http://www.ranzhi.org
|
||||
*/
|
||||
?>
|
||||
<style>
|
||||
td.delayed{background: #e84e0f!important; color: white;}
|
||||
</style>
|
||||
<table class='table tablesorter table-data table-hover block-task table-fixed'>
|
||||
<thead>
|
||||
<tr>
|
||||
<th width='50'><?php echo $lang->idAB?></th>
|
||||
<th width='30'><?php echo $lang->priAB?></th>
|
||||
<th> <?php echo $lang->task->name;?></th>
|
||||
<th width='40'><?php echo $lang->task->estimateAB;?></th>
|
||||
<th width='75'><?php echo $lang->task->deadline;?></th>
|
||||
<th width='70'><?php echo $lang->statusAB;?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<?php foreach($tasks as $task):?>
|
||||
<?php
|
||||
$appid = isset($_GET['entry']) ? "class='app-btn' data-id='{$this->get->entry}'" : '';
|
||||
$viewLink = $this->createLink('task', 'view', "taskID={$task->id}");
|
||||
?>
|
||||
<tr data-url='<?php echo empty($sso) ? $viewLink : $sso . $sign . 'referer=' . base64_encode($viewLink); ?>' <?php echo $appid?>>
|
||||
<td class='text-center'><?php echo $task->id;?></td>
|
||||
<td class='text-center'><?php echo zget($lang->task->priList, $task->pri, $task->pri)?></td>
|
||||
<td style='color: <?php echo $task->color?>' title='<?php echo $task->name?>'><?php echo $task->name?></td>
|
||||
<td class='text-center'><?php echo $task->estimate?></td>
|
||||
<td class='<?php if(isset($task->delay)) echo 'delayed';?>'><?php if(substr($task->deadline, 0, 4) > 0) echo $task->deadline;?></td>
|
||||
<td class='text-center'><?php echo zget($lang->task->statusList, $task->status, $task->status);?></th>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
</table>
|
||||
<script>
|
||||
if(typeof(dataTable) == 'function')$('.block-task').dataTable();
|
||||
</script>
|
||||
<div class='panel-body has-table'>
|
||||
<table class='table table-borderless table-hover table-fixed-head block-tasks <?php if(!$longBlock) echo 'block-sm';?>'>
|
||||
<thead>
|
||||
<tr>
|
||||
<th class='c-id'><?php echo $lang->idAB?></th>
|
||||
<th class='c-pri'><?php echo $lang->priAB?></th>
|
||||
<th class='c-name'> <?php echo $lang->task->name;?></th>
|
||||
<?php if($longBlock):?>
|
||||
<th class='c-estimate'><?php echo $lang->task->estimateAB;?></th>
|
||||
<th class='c-deadline'><?php echo $lang->task->deadline;?></th>
|
||||
<?php endif;?>
|
||||
<th class='c-status'><?php echo $lang->statusAB;?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach($tasks as $task):?>
|
||||
<?php
|
||||
$appid = isset($_GET['entry']) ? "class='app-btn' data-id='{$this->get->entry}'" : '';
|
||||
$viewLink = $this->createLink('task', 'view', "taskID={$task->id}");
|
||||
?>
|
||||
<tr data-url='<?php echo empty($sso) ? $viewLink : $sso . $sign . 'referer=' . base64_encode($viewLink); ?>' <?php echo $appid?>>
|
||||
<td class='c-id'><?php echo $task->id;?></td>
|
||||
<td class='c-pri'><span class='label-pri label-pri-<?php echo $task->pri;?>'><?php echo zget($lang->task->priList, $task->pri, $task->pri)?></span></td>
|
||||
<td class='c-name' style='color: <?php echo $task->color?>' title='<?php echo $task->name?>'><?php echo $task->name?></td>
|
||||
<?php if($longBlock):?>
|
||||
<td class='c-estimate'><?php echo $task->estimate?></td>
|
||||
<td class='c-status'><?php if(substr($task->deadline, 0, 4) > 0) echo $task->deadline;?></td>
|
||||
<?php endif;?>
|
||||
<td class='c-status' title='<?php echo zget($lang->task->statusList, $task->status)?>'>
|
||||
<span class="task-status-<?php echo $task->status?>">
|
||||
<span class="label label-dot"></span>
|
||||
<span class='status-text'><?php echo zget($lang->task->statusList, $task->status);?></span>
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
@@ -10,32 +10,33 @@
|
||||
* @link http://www.ranzhi.org
|
||||
*/
|
||||
?>
|
||||
<table class='table tablesorter table-data table-hover block-testtask table-fixed'>
|
||||
<thead>
|
||||
<tr>
|
||||
<th width='50'><?php echo $lang->idAB?></th>
|
||||
<th> <?php echo $lang->testtask->product;?></th>
|
||||
<th> <?php echo $lang->testtask->name;?></th>
|
||||
<th> <?php echo $lang->testtask->project . '/' . $lang->testtask->build;?></th>
|
||||
<th width='80'><?php echo $lang->testtask->begin;?></th>
|
||||
<th width='80'><?php echo $lang->testtask->end;?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<?php foreach($testtasks as $testtask):?>
|
||||
<?php
|
||||
$appid = isset($_GET['entry']) ? "class='app-btn' data-id='{$this->get->entry}'" : '';
|
||||
$viewLink = $this->createLink('testtask', 'view', "testtaskID={$testtask->id}");
|
||||
?>
|
||||
<tr data-url='<?php echo empty($sso) ? $viewLink : $sso . $sign . 'referer=' . base64_encode($viewLink); ?>' <?php echo $appid?>>
|
||||
<td class='text-center'><?php echo $testtask->id;?></td>
|
||||
<td title='<?php echo $testtask->productName?>'><?php echo $testtask->productName?></td>
|
||||
<td title='<?php echo $testtask->name?>'><?php echo $testtask->name?></td>
|
||||
<td class='text-center' title='<?php echo $testtask->projectName . '/' . $testtask->buildName?>'><?php echo $testtask->projectName . '/' . $testtask->buildName?></td>
|
||||
<td><?php echo $testtask->begin?></td>
|
||||
<td><?php echo $testtask->end?></td>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
</table>
|
||||
<script>
|
||||
if(typeof(dataTable) == 'function')$('.block-testtask').dataTable();
|
||||
</script>
|
||||
<div class='panel-body has-table'>
|
||||
<table class='table table-borderless table-hover table-fixed-head block-testtask'>
|
||||
<thead>
|
||||
<tr>
|
||||
<th width='30'><?php echo $lang->idAB?></th>
|
||||
<th width='80'><?php echo $lang->testtask->product;?></th>
|
||||
<th width='80'> <?php echo $lang->testtask->name;?></th>
|
||||
<th width='80'><?php echo $lang->testtask->project . '/' . $lang->testtask->build;?></th>
|
||||
<th width='50'><?php echo $lang->testtask->begin;?></th>
|
||||
<th width='50'><?php echo $lang->testtask->end;?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach($testtasks as $testtask):?>
|
||||
<?php
|
||||
$appid = isset($_GET['entry']) ? "class='app-btn' data-id='{$this->get->entry}'" : '';
|
||||
$viewLink = $this->createLink('testtask', 'view', "testtaskID={$testtask->id}");
|
||||
?>
|
||||
<tr data-url='<?php echo empty($sso) ? $viewLink : $sso . $sign . 'referer=' . base64_encode($viewLink); ?>' <?php echo $appid?>>
|
||||
<td class='text-center'><?php echo $testtask->id;?></td>
|
||||
<td title='<?php echo $testtask->productName?>'><?php echo $testtask->productName?></td>
|
||||
<td title='<?php echo $testtask->name?>'><?php echo $testtask->name?></td>
|
||||
<td class='text-center' title='<?php echo $testtask->projectName . '/' . $testtask->buildName?>'><?php echo $testtask->projectName . '/' . $testtask->buildName?></td>
|
||||
<td><?php echo $testtask->begin?></td>
|
||||
<td><?php echo $testtask->end?></td>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
@@ -10,30 +10,115 @@
|
||||
* @link http://www.ranzhi.org
|
||||
*/
|
||||
?>
|
||||
<table class='table tablesorter table-data table-hover block-todo table-fixed'>
|
||||
<thead>
|
||||
<tr>
|
||||
<th width='90'><?php echo $lang->todo->date?></th>
|
||||
<th width='40'><?php echo $lang->priAB?></th>
|
||||
<th> <?php echo $lang->todo->name;?></th>
|
||||
<th width='50'><?php echo $lang->todo->beginAB;?></th>
|
||||
<th width='50'><?php echo $lang->todo->endAB;?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<?php foreach($todos as $id => $todo):?>
|
||||
<?php
|
||||
$appid = isset($_GET['entry']) ? "class='app-btn' data-id='{$this->get->entry}'" : '';
|
||||
$viewLink = $this->createLink('todo', 'view', "todoID={$todo->id}&from=my");
|
||||
?>
|
||||
<tr data-url='<?php echo empty($sso) ? $viewLink : $sso . $sign . 'referer=' . base64_encode($viewLink); ?>' <?php echo $appid?>>
|
||||
<td><?php echo $todo->date == '2030-01-01' ? $lang->todo->periods['future'] : $todo->date;?></td>
|
||||
<td><?php echo zget($lang->todo->priList, $todo->pri, $todo->pri)?></td>
|
||||
<td><?php echo $todo->name?></td>
|
||||
<td><?php echo $todo->begin?></td>
|
||||
<td><?php echo $todo->end?></td>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
</table>
|
||||
<script>
|
||||
if(typeof(dataTable) == 'function')$('.block-todo').dataTable();
|
||||
</script>
|
||||
<div class='block-todoes'>
|
||||
<div class='panel-body'>
|
||||
<div class="todoes-input">
|
||||
<div class="todo-form-trigger"><input type="text" placeholder="<?php echo $lang->todo->lblClickCreate?>" class="form-control"></div>
|
||||
<form class="form-horizontal todoes-form layer" method='post' target='hiddenwin' action='<?php echo $this->createLink('todo', 'create', 'date=today&account=&from=block');?>'>
|
||||
<h3><?php echo $lang->todo->create . $lang->todo->common;?></h3>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-12"><input required type="text" placeholder="<?php echo $lang->todo->name?>" class="form-control" name="name"></div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="todoPri" class="col-sm-2"><?php echo $lang->todo->pri?></label>
|
||||
<div class="col-sm-4"><?php echo html::select('pri', $lang->todo->priList, '', "class='form-control chosen'");?></div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="todoDate" class="col-sm-2"><?php echo $lang->todo->date?></label>
|
||||
<div class="col-sm-9">
|
||||
<div class="input-control has-icon-right">
|
||||
<input type="text" required class="form-control form-date" id="todoDate" name="date" placeholder="(<?php echo $lang->required;?>)">
|
||||
<label class="input-control-icon-right"><i class="icon icon-delay"></i></label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="todoBegin" class="col-sm-2"><?php echo $lang->todo->beginAndEnd?></label>
|
||||
<div class="col-sm-4">
|
||||
<select name="begin" id="todoBegin" class="form-control">
|
||||
<option value=""><?php echo $lang->todo->lblDisableDate;?></option>
|
||||
</select>
|
||||
</div>
|
||||
<label class="col-sm-1 text-center hide-empty-begin" for="todoEnd"> ~ </label>
|
||||
<div class="col-sm-4 hide-empty-begin">
|
||||
<select name="end" id="todoEnd" class="form-control"></select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2"></div>
|
||||
<div class="col-sm-10">
|
||||
<div class="checkbox">
|
||||
<label><input type="checkbox"> <?php echo $lang->todo->private?></label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2"></div>
|
||||
<div class="col-sm-10">
|
||||
<?php echo html::hidden('type', 'custom');?>
|
||||
<?php echo html::commonButton($lang->save, "onclick='ajaxCreateTodo(this)'", "btn btn-primary btn-wide");?>
|
||||
<button type="button" class="btn btn-default btn-wide todo-form-trigger" data-trigger="false"><?php echo $lang->goback;?></button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<ul class="todoes">
|
||||
<?php foreach($todos as $id => $todo):?>
|
||||
<?php
|
||||
$appid = isset($_GET['entry']) ? "class='app-btn' data-id='{$this->get->entry}'" : '';
|
||||
$viewLink = $this->createLink('todo', 'view', "todoID={$todo->id}&from=my", 'html', true);
|
||||
?>
|
||||
<li data-id='<?php echo $todo->id?>'>
|
||||
<span class="todo-check icon icon-check-circle"></span>
|
||||
<a href="<?php echo empty($sso) ? $viewLink : $sso . $sign . 'referer=' . base64_encode($viewLink);?>" class='iframe'>
|
||||
<span class="todo-title"><?php echo $todo->name;?></span>
|
||||
<span class="todo-pri todo-pri-<?php echo $todo->pri?>"><?php echo zget($lang->todo->priList, $todo->pri);?></span><span class="todo-time"><?php echo date(DT_DATE4, strtotime($todo->date)) . ' ' . $todo->begin;?></span>
|
||||
</a>
|
||||
</li>
|
||||
<?php endforeach;?>
|
||||
</ul>
|
||||
</div>
|
||||
<script>
|
||||
$(function()
|
||||
{
|
||||
$('ul.todoes li .todo-check').click(function()
|
||||
{
|
||||
var $liTag = $(this).closest('li');
|
||||
var isFinished = $liTag.hasClass('active');
|
||||
var todoID = $liTag.data('id');
|
||||
var methodName = isFinished ? 'activate' : 'finish';
|
||||
$.get(createLink('todo', methodName, "todoID=" + todoID), function()
|
||||
{
|
||||
if(!isFinished) $liTag.addClass('active');
|
||||
if(isFinished) $liTag.removeClass('active');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
function ajaxCreateTodo(obj)
|
||||
{
|
||||
var $todoes = $(obj).closest('.block-todoes');
|
||||
var $form = $(obj).closest('form');
|
||||
$.ajax(
|
||||
{
|
||||
type: "POST",
|
||||
dataType: "json",
|
||||
url: $form.attr('action'),
|
||||
data: $form.serialize(),
|
||||
success: function(todo)
|
||||
{
|
||||
var item = "<li data-id='" + todo.id + "'>";
|
||||
item += '<span class="todo-check icon icon-check-circle"></span>';
|
||||
item += '<a href="' + createLink('todo', 'view', "todoID=" + todo.id + "&from=my", 'html', true) + '" class="iframe">';
|
||||
item += '<span class="todo-title">' + todo.name + '</span>';
|
||||
item += '<span class="todo-pri todo-pri-' + todo.pri + '">' + todo.priName + '</span><span class="todo-time">' + todo.time + '</span></a></li>';
|
||||
$todoes.find('ul.todoes').prepend(item);
|
||||
$todoes.removeClass('show-form');
|
||||
$todoes.find('ul.todoes li:first a').modalTrigger();
|
||||
$form.find('input[name="name"]').val('');
|
||||
$form.find('#todoDate').val('');
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
</div>
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user